diff --git a/artifacts/ConsensusRegistry.json b/artifacts/ConsensusRegistry.json index 4c13d8f..6a1759f 100644 --- a/artifacts/ConsensusRegistry.json +++ b/artifacts/ConsensusRegistry.json @@ -1 +1 @@ -{"abi":[{"type":"constructor","inputs":[{"name":"genesisConfig_","type":"tuple","internalType":"struct IStakeManager.StakeConfig","components":[{"name":"stakeAmount","type":"uint256","internalType":"uint256"},{"name":"minWithdrawAmount","type":"uint256","internalType":"uint256"},{"name":"epochIssuance","type":"uint256","internalType":"uint256"},{"name":"epochDuration","type":"uint32","internalType":"uint32"}]},{"name":"initialValidators_","type":"tuple[]","internalType":"struct IConsensusRegistry.ValidatorInfo[]","components":[{"name":"validatorAddress","type":"address","internalType":"address"},{"name":"activationEpoch","type":"uint32","internalType":"uint32"},{"name":"exitEpoch","type":"uint32","internalType":"uint32"},{"name":"currentStatus","type":"uint8","internalType":"enum IConsensusRegistry.ValidatorStatus"},{"name":"isRetired","type":"bool","internalType":"bool"},{"name":"stakeVersion","type":"uint8","internalType":"uint8"},{"name":"region","type":"uint8","internalType":"uint8"}]},{"name":"blsPubkeys_","type":"bytes[]","internalType":"bytes[]"},{"name":"proofsOfPossession","type":"tuple[]","internalType":"struct IStakeManager.ProofOfPossession[]","components":[{"name":"signature","type":"bytes","internalType":"bytes"}]},{"name":"owner_","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"function","name":"SYSTEM_ADDRESS","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"activate","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"allocateIssuance","inputs":[],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"applyIncentives","inputs":[{"name":"rewardInfos","type":"tuple[]","internalType":"struct RewardInfo[]","components":[{"name":"validatorAddress","type":"address","internalType":"address"},{"name":"consensusHeaderCount","type":"uint256","internalType":"uint256"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"applySlashes","inputs":[{"name":"slashes","type":"tuple[]","internalType":"struct Slash[]","components":[{"name":"validatorAddress","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"approve","inputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"balanceOf","inputs":[{"name":"owner","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"beginExit","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"burn","inputs":[{"name":"validatorAddress","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"cancelStakeVersionChange","inputs":[{"name":"validatorAddress","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"claimRefund","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"claimStakeRewards","inputs":[{"name":"validatorAddress","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"claimableRefunds","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"concludeEpoch","inputs":[{"name":"newCommittee","type":"address[]","internalType":"address[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"delegateStake","inputs":[{"name":"blsPubkey","type":"bytes","internalType":"bytes"},{"name":"proofOfPossession","type":"tuple","internalType":"struct IStakeManager.ProofOfPossession","components":[{"name":"signature","type":"bytes","internalType":"bytes"}]},{"name":"validatorAddress","type":"address","internalType":"address"},{"name":"validatorEIP712Signature","type":"bytes","internalType":"bytes"},{"name":"deadline","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"delegationDigest","inputs":[{"name":"blsPubkey","type":"bytes","internalType":"bytes"},{"name":"validatorAddress","type":"address","internalType":"address"},{"name":"delegator","type":"address","internalType":"address"},{"name":"deadline","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"eip712Domain","inputs":[],"outputs":[{"name":"fields","type":"bytes1","internalType":"bytes1"},{"name":"name","type":"string","internalType":"string"},{"name":"version","type":"string","internalType":"string"},{"name":"chainId","type":"uint256","internalType":"uint256"},{"name":"verifyingContract","type":"address","internalType":"address"},{"name":"salt","type":"bytes32","internalType":"bytes32"},{"name":"extensions","type":"uint256[]","internalType":"uint256[]"}],"stateMutability":"view"},{"type":"function","name":"epochInfo","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"epochIssuance","type":"uint256","internalType":"uint256"},{"name":"blockHeight","type":"uint64","internalType":"uint64"},{"name":"epochId","type":"uint32","internalType":"uint32"},{"name":"epochDuration","type":"uint32","internalType":"uint32"},{"name":"stakeVersion","type":"uint8","internalType":"uint8"}],"stateMutability":"view"},{"type":"function","name":"futureEpochInfo","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"epochIssuance","type":"uint256","internalType":"uint256"},{"name":"blockHeight","type":"uint64","internalType":"uint64"},{"name":"epochId","type":"uint32","internalType":"uint32"},{"name":"epochDuration","type":"uint32","internalType":"uint32"},{"name":"stakeVersion","type":"uint8","internalType":"uint8"}],"stateMutability":"view"},{"type":"function","name":"getApproved","inputs":[{"name":"tokenId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"getBalanceBreakdown","inputs":[{"name":"validatorAddress","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"},{"name":"","type":"uint256","internalType":"uint256"},{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getBlsPubkey","inputs":[{"name":"validatorAddress","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bytes","internalType":"bytes"}],"stateMutability":"view"},{"type":"function","name":"getCommitteeBlsPubkeys","inputs":[{"name":"epoch","type":"uint32","internalType":"uint32"}],"outputs":[{"name":"","type":"bytes[]","internalType":"bytes[]"}],"stateMutability":"view"},{"type":"function","name":"getCommitteeValidators","inputs":[{"name":"epoch","type":"uint32","internalType":"uint32"}],"outputs":[{"name":"","type":"tuple[]","internalType":"struct IConsensusRegistry.ValidatorInfo[]","components":[{"name":"validatorAddress","type":"address","internalType":"address"},{"name":"activationEpoch","type":"uint32","internalType":"uint32"},{"name":"exitEpoch","type":"uint32","internalType":"uint32"},{"name":"currentStatus","type":"uint8","internalType":"enum IConsensusRegistry.ValidatorStatus"},{"name":"isRetired","type":"bool","internalType":"bool"},{"name":"stakeVersion","type":"uint8","internalType":"uint8"},{"name":"region","type":"uint8","internalType":"uint8"}]}],"stateMutability":"view"},{"type":"function","name":"getCurrentEpoch","inputs":[],"outputs":[{"name":"","type":"uint32","internalType":"uint32"}],"stateMutability":"view"},{"type":"function","name":"getCurrentEpochInfo","inputs":[],"outputs":[{"name":"","type":"tuple","internalType":"struct IConsensusRegistry.EpochInfo","components":[{"name":"committee","type":"address[]","internalType":"address[]"},{"name":"epochIssuance","type":"uint256","internalType":"uint256"},{"name":"blockHeight","type":"uint64","internalType":"uint64"},{"name":"epochId","type":"uint32","internalType":"uint32"},{"name":"epochDuration","type":"uint32","internalType":"uint32"},{"name":"stakeVersion","type":"uint8","internalType":"uint8"}]}],"stateMutability":"view"},{"type":"function","name":"getCurrentStakeConfig","inputs":[],"outputs":[{"name":"","type":"tuple","internalType":"struct IStakeManager.StakeConfig","components":[{"name":"stakeAmount","type":"uint256","internalType":"uint256"},{"name":"minWithdrawAmount","type":"uint256","internalType":"uint256"},{"name":"epochIssuance","type":"uint256","internalType":"uint256"},{"name":"epochDuration","type":"uint32","internalType":"uint32"}]}],"stateMutability":"view"},{"type":"function","name":"getCurrentStakeVersion","inputs":[],"outputs":[{"name":"","type":"uint8","internalType":"uint8"}],"stateMutability":"view"},{"type":"function","name":"getEligibleValidatorCount","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getEpochInfo","inputs":[{"name":"epoch","type":"uint32","internalType":"uint32"}],"outputs":[{"name":"","type":"tuple","internalType":"struct IConsensusRegistry.EpochInfo","components":[{"name":"committee","type":"address[]","internalType":"address[]"},{"name":"epochIssuance","type":"uint256","internalType":"uint256"},{"name":"blockHeight","type":"uint64","internalType":"uint64"},{"name":"epochId","type":"uint32","internalType":"uint32"},{"name":"epochDuration","type":"uint32","internalType":"uint32"},{"name":"stakeVersion","type":"uint8","internalType":"uint8"}]}],"stateMutability":"view"},{"type":"function","name":"getNextCommitteeSize","inputs":[],"outputs":[{"name":"","type":"uint16","internalType":"uint16"}],"stateMutability":"view"},{"type":"function","name":"getPendingVersionChanges","inputs":[],"outputs":[{"name":"","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"getRewards","inputs":[{"name":"validatorAddress","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getValidator","inputs":[{"name":"validatorAddress","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"tuple","internalType":"struct IConsensusRegistry.ValidatorInfo","components":[{"name":"validatorAddress","type":"address","internalType":"address"},{"name":"activationEpoch","type":"uint32","internalType":"uint32"},{"name":"exitEpoch","type":"uint32","internalType":"uint32"},{"name":"currentStatus","type":"uint8","internalType":"enum IConsensusRegistry.ValidatorStatus"},{"name":"isRetired","type":"bool","internalType":"bool"},{"name":"stakeVersion","type":"uint8","internalType":"uint8"},{"name":"region","type":"uint8","internalType":"uint8"}]}],"stateMutability":"view"},{"type":"function","name":"getValidators","inputs":[{"name":"status","type":"uint8","internalType":"enum IConsensusRegistry.ValidatorStatus"}],"outputs":[{"name":"","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"getValidatorsInfo","inputs":[{"name":"status","type":"uint8","internalType":"enum IConsensusRegistry.ValidatorStatus"}],"outputs":[{"name":"","type":"tuple[]","internalType":"struct IConsensusRegistry.ValidatorInfo[]","components":[{"name":"validatorAddress","type":"address","internalType":"address"},{"name":"activationEpoch","type":"uint32","internalType":"uint32"},{"name":"exitEpoch","type":"uint32","internalType":"uint32"},{"name":"currentStatus","type":"uint8","internalType":"enum IConsensusRegistry.ValidatorStatus"},{"name":"isRetired","type":"bool","internalType":"bool"},{"name":"stakeVersion","type":"uint8","internalType":"uint8"},{"name":"region","type":"uint8","internalType":"uint8"}]}],"stateMutability":"view"},{"type":"function","name":"increaseNonce","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"isApprovedForAll","inputs":[{"name":"owner","type":"address","internalType":"address"},{"name":"operator","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isDelegated","inputs":[{"name":"validatorAddress","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isRetired","inputs":[{"name":"validatorAddress","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isValidator","inputs":[{"name":"blsPubkey","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"issuance","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address payable"}],"stateMutability":"view"},{"type":"function","name":"issuanceWithdrawal","inputs":[{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"migrateValidatorSets","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"mint","inputs":[{"name":"validatorAddress","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"name","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"ownerOf","inputs":[{"name":"tokenId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"pause","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"paused","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"renounceOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"requestStakeVersionChange","inputs":[{"name":"validatorAddress","type":"address","internalType":"address"},{"name":"targetVersion","type":"uint8","internalType":"uint8"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"safeTransferFrom","inputs":[{"name":"from","type":"address","internalType":"address"},{"name":"to","type":"address","internalType":"address"},{"name":"tokenId","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"safeTransferFrom","inputs":[{"name":"from","type":"address","internalType":"address"},{"name":"to","type":"address","internalType":"address"},{"name":"tokenId","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setApprovalForAll","inputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setNextCommitteeSize","inputs":[{"name":"newSize","type":"uint16","internalType":"uint16"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setTopUpAuthorityRequired","inputs":[{"name":"required","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setValidatorRegion","inputs":[{"name":"validatorAddress","type":"address","internalType":"address"},{"name":"region","type":"uint8","internalType":"uint8"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"stake","inputs":[{"name":"blsPubkey","type":"bytes","internalType":"bytes"},{"name":"proofOfPossession","type":"tuple","internalType":"struct IStakeManager.ProofOfPossession","components":[{"name":"signature","type":"bytes","internalType":"bytes"}]}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"stakeConfig","inputs":[{"name":"version","type":"uint8","internalType":"uint8"}],"outputs":[{"name":"","type":"tuple","internalType":"struct IStakeManager.StakeConfig","components":[{"name":"stakeAmount","type":"uint256","internalType":"uint256"},{"name":"minWithdrawAmount","type":"uint256","internalType":"uint256"},{"name":"epochIssuance","type":"uint256","internalType":"uint256"},{"name":"epochDuration","type":"uint32","internalType":"uint32"}]}],"stateMutability":"view"},{"type":"function","name":"supportsInterface","inputs":[{"name":"interfaceId","type":"bytes4","internalType":"bytes4"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"symbol","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"tokenByIndex","inputs":[{"name":"index","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"tokenOfOwnerByIndex","inputs":[{"name":"owner","type":"address","internalType":"address"},{"name":"index","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"tokenURI","inputs":[{"name":"tokenId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"topUpAuthorityRequired","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"topUpSlashedStake","inputs":[{"name":"validatorAddress","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"totalSupply","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"transferFrom","inputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"address","internalType":"address"},{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"undistributedIssuance","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"unpause","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"unstake","inputs":[{"name":"validatorAddress","type":"address","internalType":"address"},{"name":"acceptRewardShortfall","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"upgradeStakeVersion","inputs":[{"name":"newConfig","type":"tuple","internalType":"struct IStakeManager.StakeConfig","components":[{"name":"stakeAmount","type":"uint256","internalType":"uint256"},{"name":"minWithdrawAmount","type":"uint256","internalType":"uint256"},{"name":"epochIssuance","type":"uint256","internalType":"uint256"},{"name":"epochDuration","type":"uint32","internalType":"uint32"}]}],"outputs":[{"name":"","type":"uint8","internalType":"uint8"}],"stateMutability":"nonpayable"},{"type":"function","name":"validators","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"validatorAddress","type":"address","internalType":"address"},{"name":"activationEpoch","type":"uint32","internalType":"uint32"},{"name":"exitEpoch","type":"uint32","internalType":"uint32"},{"name":"currentStatus","type":"uint8","internalType":"enum IConsensusRegistry.ValidatorStatus"},{"name":"isRetired","type":"bool","internalType":"bool"},{"name":"stakeVersion","type":"uint8","internalType":"uint8"},{"name":"region","type":"uint8","internalType":"uint8"}],"stateMutability":"view"},{"type":"function","name":"versionChangeRequests","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"targetVersion","type":"uint8","internalType":"uint8"},{"name":"requestEpoch","type":"uint32","internalType":"uint32"},{"name":"funder","type":"address","internalType":"address"},{"name":"escrow","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"event","name":"Approval","inputs":[{"name":"owner","type":"address","indexed":true,"internalType":"address"},{"name":"approved","type":"address","indexed":true,"internalType":"address"},{"name":"tokenId","type":"uint256","indexed":true,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"ApprovalForAll","inputs":[{"name":"owner","type":"address","indexed":true,"internalType":"address"},{"name":"operator","type":"address","indexed":true,"internalType":"address"},{"name":"approved","type":"bool","indexed":false,"internalType":"bool"}],"anonymous":false},{"type":"event","name":"DelegationNonceIncreased","inputs":[{"name":"validatorAddress","type":"address","indexed":true,"internalType":"address"},{"name":"nonce","type":"uint64","indexed":false,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"NewEpoch","inputs":[{"name":"epoch","type":"tuple","indexed":false,"internalType":"struct IConsensusRegistry.EpochInfo","components":[{"name":"committee","type":"address[]","internalType":"address[]"},{"name":"epochIssuance","type":"uint256","internalType":"uint256"},{"name":"blockHeight","type":"uint64","internalType":"uint64"},{"name":"epochId","type":"uint32","internalType":"uint32"},{"name":"epochDuration","type":"uint32","internalType":"uint32"},{"name":"stakeVersion","type":"uint8","internalType":"uint8"}]}],"anonymous":false},{"type":"event","name":"NextCommitteeSizeUpdated","inputs":[{"name":"oldSize","type":"uint16","indexed":false,"internalType":"uint16"},{"name":"newSize","type":"uint16","indexed":false,"internalType":"uint16"},{"name":"numActiveValidators","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"Paused","inputs":[{"name":"account","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"RefundClaimed","inputs":[{"name":"recipient","type":"address","indexed":true,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"RefundQueued","inputs":[{"name":"recipient","type":"address","indexed":true,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"RewardsClaimed","inputs":[{"name":"claimant","type":"address","indexed":true,"internalType":"address"},{"name":"rewards","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"StakeVersionAuthored","inputs":[{"name":"version","type":"uint8","indexed":true,"internalType":"uint8"},{"name":"stakeAmount","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"minWithdrawAmount","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"epochIssuance","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"epochDuration","type":"uint32","indexed":false,"internalType":"uint32"}],"anonymous":false},{"type":"event","name":"StakeVersionChangeCanceled","inputs":[{"name":"validatorAddress","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"StakeVersionChangeRequested","inputs":[{"name":"validatorAddress","type":"address","indexed":true,"internalType":"address"},{"name":"targetVersion","type":"uint8","indexed":false,"internalType":"uint8"},{"name":"requestEpoch","type":"uint32","indexed":false,"internalType":"uint32"},{"name":"escrow","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"TopUpAuthorityRequirementUpdated","inputs":[{"name":"required","type":"bool","indexed":false,"internalType":"bool"}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"name":"from","type":"address","indexed":true,"internalType":"address"},{"name":"to","type":"address","indexed":true,"internalType":"address"},{"name":"tokenId","type":"uint256","indexed":true,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Unpaused","inputs":[{"name":"account","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"ValidatorActivated","inputs":[{"name":"validator","type":"tuple","indexed":false,"internalType":"struct IConsensusRegistry.ValidatorInfo","components":[{"name":"validatorAddress","type":"address","internalType":"address"},{"name":"activationEpoch","type":"uint32","internalType":"uint32"},{"name":"exitEpoch","type":"uint32","internalType":"uint32"},{"name":"currentStatus","type":"uint8","internalType":"enum IConsensusRegistry.ValidatorStatus"},{"name":"isRetired","type":"bool","internalType":"bool"},{"name":"stakeVersion","type":"uint8","internalType":"uint8"},{"name":"region","type":"uint8","internalType":"uint8"}]}],"anonymous":false},{"type":"event","name":"ValidatorExited","inputs":[{"name":"validator","type":"tuple","indexed":false,"internalType":"struct IConsensusRegistry.ValidatorInfo","components":[{"name":"validatorAddress","type":"address","internalType":"address"},{"name":"activationEpoch","type":"uint32","internalType":"uint32"},{"name":"exitEpoch","type":"uint32","internalType":"uint32"},{"name":"currentStatus","type":"uint8","internalType":"enum IConsensusRegistry.ValidatorStatus"},{"name":"isRetired","type":"bool","internalType":"bool"},{"name":"stakeVersion","type":"uint8","internalType":"uint8"},{"name":"region","type":"uint8","internalType":"uint8"}]}],"anonymous":false},{"type":"event","name":"ValidatorPendingActivation","inputs":[{"name":"validator","type":"tuple","indexed":false,"internalType":"struct IConsensusRegistry.ValidatorInfo","components":[{"name":"validatorAddress","type":"address","internalType":"address"},{"name":"activationEpoch","type":"uint32","internalType":"uint32"},{"name":"exitEpoch","type":"uint32","internalType":"uint32"},{"name":"currentStatus","type":"uint8","internalType":"enum IConsensusRegistry.ValidatorStatus"},{"name":"isRetired","type":"bool","internalType":"bool"},{"name":"stakeVersion","type":"uint8","internalType":"uint8"},{"name":"region","type":"uint8","internalType":"uint8"}]}],"anonymous":false},{"type":"event","name":"ValidatorPendingExit","inputs":[{"name":"validator","type":"tuple","indexed":false,"internalType":"struct IConsensusRegistry.ValidatorInfo","components":[{"name":"validatorAddress","type":"address","internalType":"address"},{"name":"activationEpoch","type":"uint32","internalType":"uint32"},{"name":"exitEpoch","type":"uint32","internalType":"uint32"},{"name":"currentStatus","type":"uint8","internalType":"enum IConsensusRegistry.ValidatorStatus"},{"name":"isRetired","type":"bool","internalType":"bool"},{"name":"stakeVersion","type":"uint8","internalType":"uint8"},{"name":"region","type":"uint8","internalType":"uint8"}]}],"anonymous":false},{"type":"event","name":"ValidatorRegionUpdated","inputs":[{"name":"validatorAddress","type":"address","indexed":true,"internalType":"address"},{"name":"region","type":"uint8","indexed":false,"internalType":"uint8"}],"anonymous":false},{"type":"event","name":"ValidatorRetired","inputs":[{"name":"validator","type":"tuple","indexed":false,"internalType":"struct IConsensusRegistry.ValidatorInfo","components":[{"name":"validatorAddress","type":"address","internalType":"address"},{"name":"activationEpoch","type":"uint32","internalType":"uint32"},{"name":"exitEpoch","type":"uint32","internalType":"uint32"},{"name":"currentStatus","type":"uint8","internalType":"enum IConsensusRegistry.ValidatorStatus"},{"name":"isRetired","type":"bool","internalType":"bool"},{"name":"stakeVersion","type":"uint8","internalType":"uint8"},{"name":"region","type":"uint8","internalType":"uint8"}]}],"anonymous":false},{"type":"event","name":"ValidatorSetsMigrated","inputs":[{"name":"eligibleValidatorCount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"ValidatorSlashed","inputs":[{"name":"slash","type":"tuple","indexed":false,"internalType":"struct Slash","components":[{"name":"validatorAddress","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"}]}],"anonymous":false},{"type":"event","name":"ValidatorStakeToppedUp","inputs":[{"name":"validatorAddress","type":"address","indexed":true,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"ValidatorStakeVersionUpgraded","inputs":[{"name":"validatorAddress","type":"address","indexed":true,"internalType":"address"},{"name":"oldVersion","type":"uint8","indexed":false,"internalType":"uint8"},{"name":"newVersion","type":"uint8","indexed":false,"internalType":"uint8"},{"name":"oldStakeAmount","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"newStakeAmount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"ValidatorStaked","inputs":[{"name":"validator","type":"tuple","indexed":false,"internalType":"struct IConsensusRegistry.ValidatorInfo","components":[{"name":"validatorAddress","type":"address","internalType":"address"},{"name":"activationEpoch","type":"uint32","internalType":"uint32"},{"name":"exitEpoch","type":"uint32","internalType":"uint32"},{"name":"currentStatus","type":"uint8","internalType":"enum IConsensusRegistry.ValidatorStatus"},{"name":"isRetired","type":"bool","internalType":"bool"},{"name":"stakeVersion","type":"uint8","internalType":"uint8"},{"name":"region","type":"uint8","internalType":"uint8"}]}],"anonymous":false},{"type":"error","name":"AlreadyDefined","inputs":[{"name":"validatorAddress","type":"address","internalType":"address"}]},{"type":"error","name":"BlsPubkeyNotFound","inputs":[{"name":"validatorAddress","type":"address","internalType":"address"}]},{"type":"error","name":"CommitteeRequirement","inputs":[{"name":"validatorAddress","type":"address","internalType":"address"}]},{"type":"error","name":"DelegationExpired","inputs":[{"name":"deadline","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"DuplicateBLSPubkey","inputs":[]},{"type":"error","name":"ERC721EnumerableForbiddenBatchMint","inputs":[]},{"type":"error","name":"ERC721IncorrectOwner","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"tokenId","type":"uint256","internalType":"uint256"},{"name":"owner","type":"address","internalType":"address"}]},{"type":"error","name":"ERC721InsufficientApproval","inputs":[{"name":"operator","type":"address","internalType":"address"},{"name":"tokenId","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ERC721InvalidApprover","inputs":[{"name":"approver","type":"address","internalType":"address"}]},{"type":"error","name":"ERC721InvalidOperator","inputs":[{"name":"operator","type":"address","internalType":"address"}]},{"type":"error","name":"ERC721InvalidOwner","inputs":[{"name":"owner","type":"address","internalType":"address"}]},{"type":"error","name":"ERC721InvalidReceiver","inputs":[{"name":"receiver","type":"address","internalType":"address"}]},{"type":"error","name":"ERC721InvalidSender","inputs":[{"name":"sender","type":"address","internalType":"address"}]},{"type":"error","name":"ERC721NonexistentToken","inputs":[{"name":"tokenId","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ERC721OutOfBoundsIndex","inputs":[{"name":"owner","type":"address","internalType":"address"},{"name":"index","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"EnforcedPause","inputs":[]},{"type":"error","name":"ExpectedPause","inputs":[]},{"type":"error","name":"GenesisArityMismatch","inputs":[]},{"type":"error","name":"IneligibleUnstake","inputs":[{"name":"validator","type":"tuple","internalType":"struct IConsensusRegistry.ValidatorInfo","components":[{"name":"validatorAddress","type":"address","internalType":"address"},{"name":"activationEpoch","type":"uint32","internalType":"uint32"},{"name":"exitEpoch","type":"uint32","internalType":"uint32"},{"name":"currentStatus","type":"uint8","internalType":"enum IConsensusRegistry.ValidatorStatus"},{"name":"isRetired","type":"bool","internalType":"bool"},{"name":"stakeVersion","type":"uint8","internalType":"uint8"},{"name":"region","type":"uint8","internalType":"uint8"}]}]},{"type":"error","name":"InsufficientRewards","inputs":[{"name":"withdrawAmount","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidBLSPubkey","inputs":[]},{"type":"error","name":"InvalidCommitteeSize","inputs":[{"name":"minCommitteeSize","type":"uint256","internalType":"uint256"},{"name":"providedCommitteeSize","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidDeficitAmount","inputs":[{"name":"validatorAddress","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"stakeVersion","type":"uint8","internalType":"uint8"}]},{"type":"error","name":"InvalidDuration","inputs":[{"name":"duration","type":"uint32","internalType":"uint32"}]},{"type":"error","name":"InvalidEpoch","inputs":[{"name":"epoch","type":"uint32","internalType":"uint32"}]},{"type":"error","name":"InvalidProofOfPossession","inputs":[{"name":"proof","type":"tuple","internalType":"struct IStakeManager.ProofOfPossession","components":[{"name":"signature","type":"bytes","internalType":"bytes"}]}]},{"type":"error","name":"InvalidStakeAmount","inputs":[{"name":"stakeAmount","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidStakeVersion","inputs":[{"name":"currentVersion","type":"uint8","internalType":"uint8"},{"name":"targetVersion","type":"uint8","internalType":"uint8"}]},{"type":"error","name":"InvalidStatus","inputs":[{"name":"status","type":"uint8","internalType":"enum IConsensusRegistry.ValidatorStatus"}]},{"type":"error","name":"InvalidSupply","inputs":[]},{"type":"error","name":"InvalidTokenId","inputs":[{"name":"tokenId","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidValidatorAddress","inputs":[]},{"type":"error","name":"IssuanceTransferFailed","inputs":[]},{"type":"error","name":"LowLevelCallFailure","inputs":[{"name":"err","type":"bytes","internalType":"bytes"}]},{"type":"error","name":"NoClaimableRefund","inputs":[]},{"type":"error","name":"NoPendingVersionChange","inputs":[]},{"type":"error","name":"NotRecipient","inputs":[{"name":"recipient","type":"address","internalType":"address"}]},{"type":"error","name":"NotTransferable","inputs":[]},{"type":"error","name":"NotValidator","inputs":[{"name":"validatorAddress","type":"address","internalType":"address"}]},{"type":"error","name":"OnlySystemCall","inputs":[{"name":"invalidCaller","type":"address","internalType":"address"}]},{"type":"error","name":"OwnableInvalidOwner","inputs":[{"name":"owner","type":"address","internalType":"address"}]},{"type":"error","name":"OwnableUnauthorizedAccount","inputs":[{"name":"account","type":"address","internalType":"address"}]},{"type":"error","name":"Reentrancy","inputs":[]},{"type":"error","name":"RequiresConsensusNFT","inputs":[]},{"type":"error","name":"StakeNotSlashed","inputs":[{"name":"validatorAddress","type":"address","internalType":"address"},{"name":"balance","type":"uint256","internalType":"uint256"},{"name":"stakeVersion","type":"uint8","internalType":"uint8"}]},{"type":"error","name":"StringsInsufficientHexLength","inputs":[{"name":"value","type":"uint256","internalType":"uint256"},{"name":"length","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"TopUpAuthorityRequired","inputs":[]}],"bytecode":{"object":"0x610120604052348015610010575f5ffd5b5060405161a18738038061a18783398101604081905261002f91611558565b806040518060400160405280600c81526020016b10dbdb9cd95b9cdd5cd3919560a21b8152506040518060400160405280600481526020016310d3919560e21b8152508181815f908161008291906116cf565b50600161008f82826116cf565b505030608052504660a0526060806100ef604080518082018252601481527f54656c636f696e205374616b654d616e61676572000000000000000000000000602080830191909152825180840190935260018352603160f81b9083015291565b815160209283012081519183019190912060c082905260e0819052604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8152938401929092529082015246606082015230608082015260a09020610100525050600d805461ff001916905550506001600160a01b03811661018d57604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b61019681610847565b50835115806101a757508251845114155b806101b457508151845114155b156101d257604051633aa3e03360e01b815260040160405180910390fd5b846060015163ffffffff165f0361020a576060850151604051630c6e911360e41b815263ffffffff9091166004820152602401610184565b5f808052600a602090815286517f13da86008ba1c6922daee3e07db95305ef49ebced9f5467a0b8613fcc6b343e3558601517f13da86008ba1c6922daee3e07db95305ef49ebced9f5467a0b8613fcc6b343e45560408601517f13da86008ba1c6922daee3e07db95305ef49ebced9f5467a0b8613fcc6b343e55560608601517f13da86008ba1c6922daee3e07db95305ef49ebced9f5467a0b8613fcc6b343e6805463ffffffff191663ffffffff9092169190911790558451600d805461ffff60d81b1916600160d81b61ffff909316929092029190911790555b600281116103b1575f601182600481106103025761030261178d565b6003020160028101805460608a0151600160401b600160801b03199091166801000000000000000063ffffffff8781169190910263ffffffff60601b1916919091176c01000000000000000000000000919092160217905560408801516001820155905081601d816004811061037a5761037a61178d565b6003020160020160086101000a81548163ffffffff021916908363ffffffff16021790555050806103aa906117b5565b90506102e6565b505f5b8451811015610837575f8582815181106103d0576103d061178d565b602002602001015190505f6104218584815181106103f0576103f061178d565b6020026020010151835f015188868151811061040e5761040e61178d565b60200260200101516108a260201b60201c565b82519091506001600160a01b03161580610445575081516001600160a01b03908116145b156104635760405163713ce51160e01b815260040160405180910390fd5b602082015163ffffffff161561049a576020820151604051634fadd4d360e11b815263ffffffff9091166004820152602401610184565b604082015163ffffffff16156104d1576040808301519051634fadd4d360e11b815263ffffffff9091166004820152602401610184565b6003826060015160068111156104e9576104e96117cd565b1461050d578160600151604051633ba7bf8960e11b81526004016101849190611801565b608082015115610533576005604051633ba7bf8960e11b81526004016101849190611801565b60a082015160ff16156105645760a082015160405163222d164360e21b815260ff9091166004820152602401610184565b5f5b6002811161061a57601181600481106105815761058161178d565b84516003919091029190910180546001810182555f91825260209091200180546001600160a01b0319166001600160a01b03909216919091179055601d81600481106105cf576105cf61178d565b84516003919091029190910180546001810182555f91825260209091200180546001600160a01b0319166001600160a01b03909216919091179055610613816117b5565b9050610566565b5085838151811061062d5761062d61178d565b60209081029190910181015183516001600160a01b03165f908152602990925260409091209061065d90826116cf565b5081516001600160a01b039081165f908152600f602090815260409182902085518154928701519387015163ffffffff908116600160c01b0263ffffffff60c01b1991909516600160a01b026001600160c01b0319909416919095161791909117928316821781556060850151859391929091839160ff60e01b191664ffffffffff60c01b1990911617600160e01b8360068111156106fe576106fe6117cd565b02179055506080820151815460a084015160c09094015160ff908116600160f81b026001600160f81b0391909516600160f01b0260ff60f01b19931515600160e81b029390931661ffff60e81b19909216919091179190911716919091179055815160035f52602a602052610794907f4adfa5efd78af8432c8ff812ed4c3d89e016f048361846e090e1a7c770f3157690610a3e565b50875182516001600160a01b039081165f908152600b60209081526040808320949094558551858352601090915292902080546001600160a01b0319169290911691909117905581516107f6906107f1816001600160a01b031690565b610a5b565b7fabab4191fe954f07230f7e34fd48dc0fdcbed492526cd060001cccceab22851b82604051610825919061180f565b60405180910390a150506001016103b4565b50509151602b55506119bf915050565b600d80546001600160a01b038381166201000081810262010000600160b01b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f81516060146108c5576040516333a234f960e11b815260040160405180910390fd5b5f825f815181106108d8576108d861178d565b016020015160f81c90506080811615806108f457506040811615155b15610912576040516333a234f960e11b815260040160405180910390fd5b5f61091d8486610ac1565b86516040519192505f91829161b1519163a65ebb2560e01b91610946918a9088906024016118b7565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516109849190611910565b5f60405180830381855afa9150503d805f81146109bc576040519150601f19603f3d011682016040523d82523d5f602084013e6109c1565b606091505b50915091508115806109d557508051602014155b156109f557806040516306fe67db60e31b8152600401610184919061191b565b80806020019051810190610a09919061192d565b610a28578760405163a865bb3560e01b81526004016101849190611946565b610a328688610b11565b98975050505050505050565b5f610a52836001600160a01b038416610b9d565b90505b92915050565b6001600160a01b038216610a8457604051633250574960e11b81525f6004820152602401610184565b5f610a90838383610be9565b90506001600160a01b03811615610abc576040516339e3563760e11b81525f6004820152602401610184565b505050565b60608251606014610ae5576040516333a234f960e11b815260040160405180910390fd5b604051610afa905f9085908590602001611960565b604051602081830303815290604052905092915050565b604080516020848101516001600160fd1b031682528483015181830152606080860151838501529091205f8181526010909252919020546001600160a01b031615610b6f57604051638d12779f60e01b815260040160405180910390fd5b5f81815260106020526040902080546001600160a01b0384166001600160a01b031990911617905592915050565b5f818152600183016020526040812054610be257508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610a55565b505f610a55565b5f80610bf6858585610cbc565b90506001600160a01b038116610c5257610c4d84600880545f838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b610c75565b846001600160a01b0316816001600160a01b031614610c7557610c758185610dae565b6001600160a01b038516610c9157610c8c84610e2b565b610cb4565b846001600160a01b0316816001600160a01b031614610cb457610cb48585610ed2565b949350505050565b5f828152600260205260408120546001600160a01b0390811690831615610ce857610ce8818486610f20565b6001600160a01b03811615610d2257610d035f858180610f84565b6001600160a01b0381165f90815260036020526040902080545f190190555b6001600160a01b03851615610d50576001600160a01b0385165f908152600360205260409020805460010190555b5f8481526002602052604080822080546001600160a01b0319166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b5f610db8836110a6565b5f838152600760209081526040808320546001600160a01b0388168452600690925290912091925090818314610e0d575f83815260208281526040808320548584528184208190558352600790915290208290555b5f938452600760209081526040808620869055938552525081205550565b6008545f90610e3c90600190611998565b5f8381526009602052604081205460088054939450909284908110610e6357610e6361178d565b905f5260205f20015490508060088381548110610e8257610e8261178d565b5f918252602080832090910192909255828152600990915260408082208490558582528120556008805480610eb957610eb96119ab565b600190038181905f5260205f20015f9055905550505050565b5f6001610ede846110a6565b610ee89190611998565b6001600160a01b039093165f908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b610f2b8383836110eb565b610abc576001600160a01b038316610f5957604051637e27328960e01b815260048101829052602401610184565b60405163177e802f60e01b81526001600160a01b038316600482015260248101829052604401610184565b8080610f9857506001600160a01b03821615155b15611077575f610fa78461116b565b90506001600160a01b03831615801590610fd35750826001600160a01b0316816001600160a01b031614155b801561100457506001600160a01b038082165f9081526005602090815260408083209387168352929052205460ff16155b1561102d5760405163a9fbf51f60e01b81526001600160a01b0384166004820152602401610184565b81156110755783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b50505f90815260046020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b5f6001600160a01b0382166110d0576040516322718ad960e21b81525f6004820152602401610184565b506001600160a01b03165f9081526003602052604090205490565b5f6001600160a01b03831615801590610cb45750826001600160a01b0316846001600160a01b0316148061114357506001600160a01b038085165f9081526005602090815260408083209387168352929052205460ff165b80610cb45750505f908152600460205260409020546001600160a01b03908116911614919050565b5f818152600260205260408120546001600160a01b031680610a5557604051637e27328960e01b815260048101849052602401610184565b634e487b7160e01b5f52604160045260245ffd5b60405160e081016001600160401b03811182821017156111d9576111d96111a3565b60405290565b604051602081016001600160401b03811182821017156111d9576111d96111a3565b604051608081016001600160401b03811182821017156111d9576111d96111a3565b604051601f8201601f191681016001600160401b038111828210171561124b5761124b6111a3565b604052919050565b805163ffffffff81168114611266575f5ffd5b919050565b5f6001600160401b03821115611283576112836111a3565b5060051b60200190565b80516001600160a01b0381168114611266575f5ffd5b80518015158114611266575f5ffd5b805160ff81168114611266575f5ffd5b5f82601f8301126112d1575f5ffd5b81516112e46112df8261126b565b611223565b80828252602082019150602060e08402860101925085831115611305575f5ffd5b602085015b838110156113af5760e08188031215611321575f5ffd5b6113296111b7565b6113328261128d565b815261134060208301611253565b602082015261135160408301611253565b6040820152606082015160078110611367575f5ffd5b6060820152611378608083016112a3565b608082015261138960a083016112b2565b60a082015261139a60c083016112b2565b60c0820152835260209092019160e00161130a565b5095945050505050565b5f82601f8301126113c8575f5ffd5b81516001600160401b038111156113e1576113e16111a3565b6113f4601f8201601f1916602001611223565b818152846020838601011115611408575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f82601f830112611433575f5ffd5b81516114416112df8261126b565b8082825260208201915060208360051b860101925085831115611462575f5ffd5b602085015b838110156113af5780516001600160401b03811115611484575f5ffd5b611493886020838a01016113b9565b84525060209283019201611467565b5f82601f8301126114b1575f5ffd5b81516114bf6112df8261126b565b8082825260208201915060208360051b8601019250858311156114e0575f5ffd5b602085015b838110156113af5780516001600160401b03811115611502575f5ffd5b86016020818903601f19011215611517575f5ffd5b61151f6111df565b60208201516001600160401b03811115611537575f5ffd5b6115468a6020838601016113b9565b825250845250602092830192016114e5565b5f5f5f5f5f85870361010081121561156e575f5ffd5b608081121561157b575f5ffd5b50611584611201565b8651815260208088015190820152604080880151908201526115a860608801611253565b606082015260808701519095506001600160401b038111156115c8575f5ffd5b6115d4888289016112c2565b60a088015190955090506001600160401b038111156115f1575f5ffd5b6115fd88828901611424565b60c088015190945090506001600160401b0381111561161a575f5ffd5b611626888289016114a2565b92505061163560e0870161128d565b90509295509295909350565b600181811c9082168061165557607f821691505b60208210810361167357634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115610abc5782821115610abc57805f5260205f20601f840160051c60208510156116a457505f5b90810190601f840160051c035f5b818110156116c7575f838201556001016116b2565b505050505050565b81516001600160401b038111156116e8576116e86111a3565b6116fc816116f68454611641565b84611679565b6020601f82116001811461172e575f83156117175750848201515b5f19600385901b1c1916600184901b178455611786565b5f84815260208120601f198516915b8281101561175d578785015182556020948501946001909201910161173d565b508482101561177a57868401515f19600387901b60f8161c191681555b505060018360011b0184555b5050505050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5f600182016117c6576117c66117a1565b5060010190565b634e487b7160e01b5f52602160045260245ffd5b600781106117fd57634e487b7160e01b5f52602160045260245ffd5b9052565b60208101610a5582846117e1565b5f60e08201905060018060a01b03835116825263ffffffff602084015116602083015263ffffffff6040840151166040830152606083015161185460608401826117e1565b5060808301511515608083015260ff60a08401511660a083015260c083015161188260c084018260ff169052565b5092915050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b606081525f6118c96060830186611889565b82810360208401526118db8186611889565b905082810360408401526118ef8185611889565b9695505050505050565b5f81518060208401855e5f93019283525090919050565b5f610a5282846118f9565b602081525f610a526020830184611889565b5f6020828403121561193d575f5ffd5b610a52826112a3565b602081525f8251602080840152610cb46040840182611889565b6001600160e81b0319841681525f61197b60038301856118f9565b60609390931b6001600160601b0319168352505060140192915050565b81810381811115610a5557610a556117a1565b634e487b7160e01b5f52603160045260245ffd5b60805160a05160c05160e0516101005161878b6119fc5f395f6143dd01525f61449701525f61447101525f61442101525f6143fe015261878b5ff3fe608060405260043610610436575f3560e01c8063673983311161022b578063a71954ec11610129578063c05df7ac116100b3578063eb8535c211610078578063eb8535c214610d7f578063f062476814610dac578063f2fde38b14610dcb578063f66a25a414610dea578063fa52c7d814610e09575f5ffd5b8063c05df7ac14610cfb578063c53a029214610d1a578063c87b56dd14610d2e578063e5a2282714610d4d578063e985e9c514610d60575f5ffd5b8063b5545a3c116100f9578063b5545a3c14610bf7578063b88d4fde14610c0b578063b97dd9e214610c2a578063babc394f14610c5b578063bd3e759414610c6f575f5ffd5b8063a71954ec14610b91578063a7c5e70114610bb0578063aaffd27014610bc4578063ad6cfb8614610bd8575f5ffd5b80637d06fdf8116101b55780638cc05eda1161017a5780638cc05eda14610af55780638da5cb5b14610b2157806395d89b4114610b44578063a0201be514610b58578063a22cb46514610b77575f5ffd5b80637d06fdf814610a2e5780638456cb5914610a7b57806384b0196e14610a8f578063863623bb14610ab657806389afcb4414610ad6575f5ffd5b80636d3c6275116101fb5780636d3c62751461099e57806370a08231146109bd578063715018a6146109dc57806379ee54f7146109f05780637b55a30014610a0f575f5ffd5b8063673983311461090e5780636a627842146109345780636a926591146109535780636ae9942c14610972575f5ffd5b80632a8e33d7116103385780633f4ba83a116102c257806358e88dbb1161028757806358e88dbb1461087c57806359ca93b6146108955780635c975abb146108b457806362fcde4b146108d05780636352211e146108ef575f5ffd5b80633f4ba83a146107ec57806342842e0e1461080057806343201d301461081f57806343401a00146108325780634f6ccce71461085d575f5ffd5b80633434735f116103085780633434735f14610724578063355811a71461073e578063374ed18c146107465780633894228e146107725780633e28391d146107cd575f5ffd5b80632a8e33d7146106b45780632b9f4985146106d35780632f745c59146106f25780632fb0d02514610711575f5ffd5b80630f15f4c0116103c45780631904bb2e116103895780631904bb2e1461061a5780632228dfa01461064657806323a404301461065a57806323b872dd1461066e5780632870259d14610688575f5ffd5b80630f15f4c0146105865780630f4346fa1461059a578063127ce8e8146105b957806315b5709a146105cc57806318160ddd14610606575f5ffd5b806306fdde031161040a57806306fdde03146104de5780630752e017146104f2578063081812fc14610511578063095ea7b3146105485780630a36cdef14610567575f5ffd5b80628d6acd1461043a57806301ffc9a71461046257806302ae337b14610491578063059b916c146104b2575b5f5ffd5b348015610445575f5ffd5b5061044f600e5481565b6040519081526020015b60405180910390f35b34801561046d575f5ffd5b5061048161047c36600461714d565b610e94565b6040519015158152602001610459565b34801561049c575f5ffd5b506104b06104ab3660046171af565b610ebe565b005b3480156104bd575f5ffd5b506104d16104cc366004617203565b611050565b604051610459919061724a565b3480156104e9575f5ffd5b506104d1611121565b3480156104fd575f5ffd5b506104b061050c36600461725c565b6111b0565b34801561051c575f5ffd5b5061053061052b36600461725c565b611218565b6040516001600160a01b039091168152602001610459565b348015610553575f5ffd5b506104b0610562366004617273565b61123f565b348015610572575f5ffd5b506104b06105813660046171af565b611258565b348015610591575f5ffd5b506104b061152c565b3480156105a5575f5ffd5b506104b06105b4366004617203565b611575565b6104b06105c73660046173d8565b6116bc565b3480156105d7575f5ffd5b506105eb6105e6366004617203565b611955565b60408051938452602084019290925290820152606001610459565b348015610611575f5ffd5b5060085461044f565b348015610625575f5ffd5b50610639610634366004617203565b6119bb565b6040516104599190617527565b348015610651575f5ffd5b506104b0611a9e565b348015610665575f5ffd5b5061044f611b5e565b348015610679575f5ffd5b506104b0610562366004617535565b348015610693575f5ffd5b506106a76106a236600461756f565b611b6d565b604051610459919061758d565b3480156106bf575f5ffd5b506104b06106ce3660046175e7565b611ceb565b3480156106de575f5ffd5b506104b06106ed366004617203565b611d3b565b3480156106fd575f5ffd5b5061044f61070c366004617273565b611e00565b6104b061071f366004617602565b611e63565b34801561072f575f5ffd5b506105306002600160a01b0381565b6104b0611ee9565b348015610751575f5ffd5b5061076561076036600461767a565b611f64565b60405161045991906176d8565b34801561077d575f5ffd5b5061079161078c36600461725c565b6121f9565b604080519586526001600160401b03909416602086015263ffffffff9283169385019390935216606083015260ff16608082015260a001610459565b3480156107d8575f5ffd5b506104816107e7366004617203565b61224d565b3480156107f7575f5ffd5b506104b0612273565b34801561080b575f5ffd5b506104b061081a366004617535565b612285565b6104b061082d366004617203565b61229f565b34801561083d575f5ffd5b5061044f61084c366004617203565b602f6020525f908152604090205481565b348015610868575f5ffd5b5061044f61087736600461725c565b612598565b348015610887575f5ffd5b506030546104819060ff1681565b3480156108a0575f5ffd5b506107916108af36600461725c565b6125ed565b3480156108bf575f5ffd5b50600d54610100900460ff16610481565b3480156108db575f5ffd5b506104b06108ea366004617749565b6125fc565b3480156108fa575f5ffd5b5061053061090936600461725c565b612703565b348015610919575f5ffd5b5061092261270d565b60405160ff9091168152602001610459565b34801561093f575f5ffd5b506104b061094e366004617203565b61271f565b34801561095e575f5ffd5b5061048161096d36600461776a565b61277d565b34801561097d575f5ffd5b5061099161098c36600461767a565b612818565b604051610459919061779c565b3480156109a9575f5ffd5b506104816109b8366004617203565b61296c565b3480156109c8575f5ffd5b5061044f6109d7366004617203565b6129f0565b3480156109e7575f5ffd5b506104b0612a35565b3480156109fb575f5ffd5b5061044f610a0a366004617203565b612a46565b348015610a1a575f5ffd5b506104b0610a293660046177ff565b612a88565b348015610a39575f5ffd5b50610a42612bfd565b604051610459919081518152602080830151908201526040808301519082015260609182015163ffffffff169181019190915260800190565b348015610a86575f5ffd5b506104b0612c7a565b348015610a9a575f5ffd5b50610aa3612c8a565b604051610459979695949392919061786e565b348015610ac1575f5ffd5b506105305f5160206182325f395f51905f5281565b348015610ae1575f5ffd5b506104b0610af0366004617203565b612cf1565b348015610b00575f5ffd5b50610b14610b0f36600461756f565b612da1565b6040516104599190617904565b348015610b2c575f5ffd5b50600d546201000090046001600160a01b0316610530565b348015610b4f575f5ffd5b506104d1612db5565b348015610b63575f5ffd5b506106a7610b7236600461767a565b612dc4565b348015610b82575f5ffd5b506104b0610562366004617916565b348015610b9c575f5ffd5b50610a42610bab36600461795b565b612e7d565b348015610bbb575f5ffd5b50610b14612ef7565b348015610bcf575f5ffd5b506104b0612f03565b348015610be3575f5ffd5b5061044f610bf2366004617974565b613173565b348015610c02575f5ffd5b506104b0613254565b348015610c16575f5ffd5b506104b0610c253660046179d5565b61336d565b348015610c35575f5ffd5b50600d54600160b01b900463ffffffff1660405163ffffffff9091168152602001610459565b348015610c66575f5ffd5b50610765613385565b348015610c7a575f5ffd5b50610cc4610c89366004617203565b602e6020525f90815260409020805460019091015460ff821691610100810463ffffffff1691600160281b9091046001600160a01b03169084565b6040805160ff909516855263ffffffff90931660208501526001600160a01b03909116918301919091526060820152608001610459565b348015610d06575f5ffd5b50610922610d15366004617a38565b613492565b348015610d25575f5ffd5b506104b06135b1565b348015610d39575f5ffd5b506104d1610d4836600461725c565b613646565b6104b0610d5b366004617a51565b6136b6565b348015610d6b575f5ffd5b50610481610d7a366004617a82565b613b9b565b348015610d8a575f5ffd5b50600d54600160d81b900461ffff1660405161ffff9091168152602001610459565b348015610db7575f5ffd5b506104b0610dc6366004617a51565b613bc8565b348015610dd6575f5ffd5b506104b0610de5366004617203565b613c48565b348015610df5575f5ffd5b506104b0610e04366004617916565b613c82565b348015610e14575f5ffd5b50610e81610e23366004617203565b600f6020525f90815260409020546001600160a01b0381169063ffffffff600160a01b8204811691600160c01b81049091169060ff600160e01b8204811691600160e81b8104821691600160f01b8204811691600160f81b90041687565b6040516104599796959493929190617aaa565b5f6001600160e01b0319821663780e9d6360e01b1480610eb85750610eb882613d6d565b92915050565b336002600160a01b0314610eec57604051637eb3357160e01b81523360048201526024015b60405180910390fd5b5f5b8181101561104b5736838383818110610f0957610f09617afd565b6040029190910191505f9050610f226020830183617203565b90506001600160a01b0381161580610f4257506001600160a01b03818116145b15610f4e575050611043565b610f5e6109b86020840184617203565b15610f6a575050611043565b60208201803590600b905f90610f809086617203565b6001600160a01b03166001600160a01b031681526020019081526020015f20541115610ff45760208201803590600b905f90610fbc9086617203565b6001600160a01b03166001600160a01b031681526020019081526020015f205f828254610fe99190617b25565b909155506110099050565b6110096110046020840184617203565b613dbc565b7f11a09f9b32440d896abff7453bf53f8b26ffcb18dae4dca227f7a76e2acc3a64826040516110389190617b38565b60405180910390a150505b600101610eee565b505050565b6001600160a01b0381165f9081526029602052604081208054606092919061107790617b61565b80601f01602080910402602001604051908101604052809291908181526020018280546110a390617b61565b80156110ee5780601f106110c5576101008083540402835291602001916110ee565b820191905f5260205f20905b8154815290600101906020018083116110d157829003601f168201915b5050505050905080515f03610eb857604051635f7ba20d60e11b81526001600160a01b0384166004820152602401610ee3565b60605f805461112f90617b61565b80601f016020809104026020016040519081016040528092919081815260200182805461115b90617b61565b80156111a65780601f1061117d576101008083540402835291602001916111a6565b820191905f5260205f20905b81548152906001019060200180831161118957829003601f168201915b5050505050905090565b6111b8613ed9565b604051627b8a6760e11b8152600481018290523360248201525f5160206182325f395f51905f529062f714ce906044015f604051808303815f87803b1580156111ff575f5ffd5b505af1158015611211573d5f5f3e3d5ffd5b5050505050565b5f61122282613f0d565b505f828152600460205260409020546001600160a01b0316610eb8565b60405163dc8d8db760e01b815260040160405180910390fd5b336002600160a01b031461128157604051637eb3357160e01b8152336004820152602401610ee3565b5f80826001600160401b0381111561129b5761129b6172d8565b6040519080825280602002602001820160405280156112c4578160200160208202803683370190505b5090505f5b8381101561142d57368585838181106112e4576112e4617afd565b905060400201905080602001355f036112fd5750611425565b5f61130b6020830183617203565b90506001600160a01b038116158061132b57506001600160a01b03818116145b15611337575050611425565b6113476109b86020840184617203565b15611353575050611425565b5f600f816113646020860186617203565b6001600160a01b0316815260208082019290925260409081015f90812054600160f01b900460ff16808252600a8452918120549193509091600b9082906113ad90880188617203565b6001600160a01b03166001600160a01b031681526020019081526020015f205490505f8282106113dd57826113df565b815b90505f6113f0602088013583617b99565b90506113fc818b617bb0565b99508089898151811061141157611411617afd565b602002602001018181525050505050505050505b6001016112c9565b50815f0361143b5750505050565b5f611444613385565b6020015190505f600e54826114599190617bb0565b90505f5f5b86811015611514575f8686838151811061147a5761147a617afd565b60200260200101518561148d9190617b99565b6114979190617bd7565b9050801561150b5780600b5f8b8b868181106114b5576114b5617afd565b6114cb9260206040909202019081019150617203565b6001600160a01b03166001600160a01b031681526020019081526020015f205f8282546114f89190617bb0565b9091555061150890508184617bb0565b92505b5060010161145e565b5061151f8183617b25565b600e5550505050505b5050565b611534613f45565b61153d33613f6e565b50611549336001613fdc565b335f908152600f60205260409020600d54611572908290600160b01b900463ffffffff16614042565b50565b61157d613f45565b3068929eee149b4bd21268540361159b5763ab143c065f526004601cfd5b3068929eee149b4bd21268556115b0816140a7565b506001600160a01b038082165f908152602e602090815260408083208151608081018352815460ff811680835263ffffffff61010083041695830195909552600160281b900490951691850191909152600101546060840152900361162857604051636c4da32160e11b815260040160405180910390fd5b6001600160a01b0382165f908152602e6020526040812080546001600160c81b03191681556001015561165c602c83614108565b506060810151156116795761167981604001518260600151614123565b6040516001600160a01b038316907fc3b65b615a42c44083fae01d75939ba9640ffd6023e130bfc06092d992560d1f905f90a2503868929eee149b4bd212685550565b6116c4613f45565b5f61170586868a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061420492505050565b90505f611710613385565b60a0015190505f61172134836143a0565b905061172c87613f6e565b50611737875f613fdc565b6001600160a01b0387165f908152600c60205260409020600201546001600160401b03600160a81b9091041661177c600d546001600160a01b03620100009091041690565b6001600160a01b0316336001600160a01b03161461185157844211156117b8576040516304adae2760e21b815260048101869052602401610ee3565b5f7f216bb53e82eab08749d19f6feeb2ef62024ae0bacf3d722b441671ca90f0b973858a3387868b6040516020016117f69796959493929190617bea565b6040516020818303038152906040528051906020012090505f611818826143db565b90506118268a828b8b6144f1565b61184e57604051633b4f6e2b60e21b81526001600160a01b038b166004820152602401610ee3565b50505b6040518060a00160405280858152602001896001600160a01b03168152602001336001600160a01b031681526020018460ff1681526020018260016118969190617c31565b6001600160401b039081169091526001600160a01b038a81165f908152600c602090815260409182902085518155908501516001820180546001600160a01b03191691851691909117905590840151600290910180546060860151608090960151929093166001600160a81b031990931692909217600160a01b60ff909516949094029390931767ffffffffffffffff60a81b1916600160a81b93909216929092021790556119488b8b8a868661453b565b5050505050505050505050565b6001600160a01b0381165f908152600f6020908152604080832054600160f01b900460ff16808452600a90925282205482918291826119948783614717565b6001600160a01b03979097165f908152600b60205260409020549791969550909350505050565b6119c36170fd565b6001600160a01b0382165f908152600f602052604090208054600160e81b900460ff166119f5576119f383613f6e565b505b6040805160e08101825282546001600160a01b038116825263ffffffff600160a01b820481166020840152600160c01b82041692820192909252908290606083019060ff600160e01b909104166006811115611a5357611a53617487565b6006811115611a6457611a64617487565b8152905460ff600160e81b8204811615156020840152600160f01b820481166040840152600160f81b909104166060909101529392505050565b611aa6613f45565b611aaf33613f6e565b505f611aba602b5490565b600d549091505f90601190600160d01b900460ff1660048110611adf57611adf617afd565b60030201549050611af08282614747565b611afb336003613fdc565b335f908152600f60205260409020600d54815463ffffffff600160b01b909204821691600160a01b90910416811015611b4f57604051634fadd4d360e11b815263ffffffff82166004820152602401610ee3565b611b5882614784565b50505050565b5f611b68602b5490565b905090565b6060611b78826147d6565b5f611b8283614826565b90505f81516001600160401b03811115611b9e57611b9e6172d8565b604051908082528060200260200182016040528015611bd757816020015b611bc46170fd565b815260200190600190039081611bbc5790505b5090505f5b8251811015611ce357600f5f848381518110611bfa57611bfa617afd565b6020908102919091018101516001600160a01b0390811683528282019390935260409182015f20825160e0810184528154948516815263ffffffff600160a01b8604811693820193909352600160c01b85049092169282019290925291606083019060ff600160e01b909104166006811115611c7857611c78617487565b6006811115611c8957611c89617487565b8152905460ff600160e81b8204811615156020840152600160f01b820481166040840152600160f81b909104166060909101528251839083908110611cd057611cd0617afd565b6020908102919091010152600101611bdc565b509392505050565b611cf3613ed9565b6030805460ff19168215159081179091556040519081527f52ad987b0fca51d9a6d5e0bbc656d0e3f616cff09727bf584c3275def38c4f54906020015b60405180910390a150565b611d43613f45565b3068929eee149b4bd212685403611d615763ab143c065f526004601cfd5b3068929eee149b4bd21268555f611d77826140a7565b6001600160a01b0383165f908152600f6020526040812054919250600160f01b90910460ff1690611da9848484614858565b9050826001600160a01b03167ffc30cddea38e2bf4d6ea7d3f9ed3b6ad7f176419f4963bd81318067a4aee73fe82604051611de691815260200190565b60405180910390a25050503868929eee149b4bd212685550565b5f611e0a836129f0565b8210611e3b5760405163295f44f760e21b81526001600160a01b038416600482015260248101839052604401610ee3565b506001600160a01b03919091165f908152600660209081526040808320938352929052205490565b611e6b613f45565b611eab813385858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061420492505050565b505f611eb5613385565b60a0015190505f611ec634836143a0565b9050611ed133613f6e565b50611edc335f613fdc565b611211858533858561453b565b611ef1613ed9565b6040515f905f5160206182325f395f51905f529034908381818185875af1925050503d805f8114611f3d576040519150601f19603f3d011682016040523d82523d5f602084013e611f42565b606091505b505090508061157257604051630b567ce360e31b815260040160405180910390fd5b6040805160c08101825260608082525f6020830181905292820183905281018290526080810182905260a0810191909152600d54600160b01b900463ffffffff16611fb0816002617c50565b63ffffffff168363ffffffff161180611ff0575060038163ffffffff1610158015611ff05750611fe1600382617c6c565b63ffffffff168363ffffffff16105b1561201657604051634fadd4d360e11b815263ffffffff84166004820152602401610ee3565b600d54600160d01b900460ff1663ffffffff8281169085161115612135575f612040858484614906565b60408051825460e0602082028301810190935260c08201818152919392849291849184018282801561209957602002820191905f5260205f20905b81546001600160a01b0316815260019091019060200180831161207b575b505050918352505060018201546020808301919091526002928301546001600160401b03811660408085019190915263ffffffff600160401b830481166060860152600160601b8304811660808087019190915260ff600160801b909404841660a096870152600d549093165f818152600a86529290922095860154938701939093526003909401549091169084015282015295945050505050565b612140848383614990565b60408051825460e0602082028301810190935260c08201818152919392849291849184018282801561219957602002820191905f5260205f20905b81546001600160a01b0316815260019091019060200180831161217b575b5050509183525050600182015460208201526002909101546001600160401b038116604083015263ffffffff600160401b820481166060840152600160601b820416608083015260ff600160801b9091041660a090910152949350505050565b60118160048110612208575f80fd5b6003020160018101546002909101549091506001600160401b03811690600160401b810463ffffffff90811691600160601b810490911690600160801b900460ff1685565b6001600160a01b038082165f908152600c60205260408120600201549091161515610eb8565b61227b613ed9565b612283614a31565b565b61104b83838360405180602001604052805f81525061336d565b6122a7613f45565b6122b081613f6e565b50600d546201000090046001600160a01b03166001600160a01b0316336001600160a01b0316146123585760305460ff16156122ff57604051630a06fea760e01b815260040160405180910390fd5b5f61230982614a84565b9050336001600160a01b0383161480159061232d5750336001600160a01b03821614155b156123565760405163172b4e7560e11b81526001600160a01b0382166004820152602401610ee3565b505b6001600160a01b0381165f908152600f6020526040902054600160e01b900460ff16600181600681111561238e5761238e617487565b141580156123ae575060028160068111156123ab576123ab617487565b14155b80156123cc575060038160068111156123c9576123c9617487565b14155b156123ec5780604051633ba7bf8960e11b8152600401610ee39190617c88565b6001600160a01b0382165f818152600f6020908152604080832054600160f01b900460ff16808452600a835281842054948452600b9092529091205490919081811061246657604051630ea9c27360e01b81526001600160a01b03861660048201526024810182905260ff84166044820152606401610ee3565b5f6124718284617b25565b90508034146124ad576040516315de715960e21b81526001600160a01b038716600482015234602482015260ff85166044820152606401610ee3565b6001600160a01b0386165f908152600b6020526040812080548392906124d4908490617bb0565b90915550506040515f905f5160206182325f395f51905f529034908381818185875af1925050503d805f8114612525576040519150601f19603f3d011682016040523d82523d5f602084013e61252a565b606091505b505090508061254c57604051630b567ce360e31b815260040160405180910390fd5b866001600160a01b03167fe27d5554eb05db70d1fa64400b6d5aee0f805adfbc7c9c3785743c9a287db8378360405161258791815260200190565b60405180910390a250505050505050565b5f6125a260085490565b82106125ca5760405163295f44f760e21b81525f600482015260248101839052604401610ee3565b600882815481106125dd576125dd617afd565b905f5260205f2001549050919050565b601d8160048110612208575f80fd5b612604613ed9565b8061ffff165f0361265757600d54601190600160d01b900460ff166004811061262f5761262f617afd565b6003020154604051635700689f60e11b815260048101919091525f6024820152604401610ee3565b5f612661602b5490565b9050808261ffff16111561269557604051635700689f60e11b81526004810182905261ffff83166024820152604401610ee3565b600d805461ffff848116600160d81b81810261ffff60d81b1985161790945560408051949093049091168084526020840191909152908201839052907f74cf7ca84b30b723e8b6e3cc569ec2db21f4ba2fcc09d651e5ce6770b91552f99060600160405180910390a1505050565b5f610eb882613f0d565b5f612716613385565b60a00151905090565b612727613ed9565b612730816129f0565b15158061274157506127418161296c565b1561276a57604051639fb0877960e01b81526001600160a01b0382166004820152602401610ee3565b611572816001600160a01b038116614ab3565b5f6060821461278d57505f610eb8565b5f6127cc84848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250614b1492505050565b5f818152601060205260409020549091506001600160a01b0316806127f5575f92505050610eb8565b6127fe8161296c565b1561280d575f92505050610eb8565b506001949350505050565b60605f61282483611f64565b5f015190505f81516001600160401b03811115612843576128436172d8565b60405190808252806020026020018201604052801561287657816020015b60608152602001906001900390816128615790505b5090505f5b8151811015611ce35760295f84838151811061289957612899617afd565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f2080546128cb90617b61565b80601f01602080910402602001604051908101604052809291908181526020018280546128f790617b61565b80156129425780601f1061291957610100808354040283529160200191612942565b820191905f5260205f20905b81548152906001019060200180831161292557829003601f168201915b505050505082828151811061295957612959617afd565b602090810291909101015260010161287b565b5f61297f6001600160a01b038316614b42565b1561298b57505f919050565b5f6001600160a01b0383165f908152600f6020526040902054600160e01b900460ff1660068111156129bf576129bf617487565b036129cb57505f919050565b506001600160a01b03165f908152600f6020526040902054600160e81b900460ff1690565b5f6001600160a01b038216612a1a576040516322718ad960e21b81525f6004820152602401610ee3565b506001600160a01b03165f9081526003602052604090205490565b612a3d613ed9565b6122835f614b95565b6001600160a01b0381165f908152600f6020908152604080832054600160f01b900460ff16808452600a909252822054612a808482614717565b949350505050565b336002600160a01b0314612ab157604051637eb3357160e01b8152336004820152602401610ee3565b612abb8282614bf0565b612ac3614cc8565b600d54600160d81b900461ffff168114612b0757600d54604051635700689f60e11b8152600160d81b90910461ffff16600482015260248101829052604401610ee3565b5f5f5f5f612b468686808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525061510392505050565b9350935093509350612b5986868661549d565b612b6b612b65602b5490565b86614747565b7fd1a5032a9ae65ebe520eba7974025750af3d884b6ab6047dad04dcf7006ab3856040518060c00160405280838152602001858152602001436001612bb09190617bb0565b6001600160401b0316815263ffffffff80881660208301528516604080830191909152600d5460ff1660609092019190915251612bed91906176d8565b60405180910390a1505050505050565b612c2a60405180608001604052805f81526020015f81526020015f81526020015f63ffffffff1681525090565b50600d5460ff165f908152600a602090815260409182902082516080810184528154815260018201549281019290925260028101549282019290925260039091015463ffffffff16606082015290565b612c82613ed9565b6122836156de565b600f60f81b6060805f808083612cdf60408051808201825260148152732a32b631b7b4b71029ba30b5b2a6b0b730b3b2b960611b602080830191909152825180840190935260018352603160f81b9083015291565b97989097965046955030945091925090565b612cf9613ed9565b612d028161296c565b15612d23576006604051633ba7bf8960e11b8152600401610ee39190617c88565b612d2c81613f6e565b505f6001600160a01b0382165f908152600f6020526040902054600160e01b900460ff166006811115612d6157612d61617487565b03612d98576001600160a01b0381165f908152600f60205260409020612d869061571d565b6115726001600160a01b03821661577b565b61157281613dbc565b6060612dac826147d6565b610eb882614826565b60606001805461112f90617b61565b60605f612dd083611f64565b5f015190505f81516001600160401b03811115612def57612def6172d8565b604051908082528060200260200182016040528015612e2857816020015b612e156170fd565b815260200190600190039081612e0d5790505b5090505f5b8151811015611ce357612e58838281518110612e4b57612e4b617afd565b60200260200101516119bb565b828281518110612e6a57612e6a617afd565b6020908102919091010152600101612e2d565b612eaa60405180608001604052805f81526020015f81526020015f81526020015f63ffffffff1681525090565b5060ff165f908152600a602090815260409182902082516080810184528154815260018201549281019290925260028101549282019290925260039091015463ffffffff16606082015290565b6060611b68602c6157b3565b336002600160a01b0314612f2c57604051637eb3357160e01b8152336004820152602401610ee3565b5f612f3660085490565b90505f5f5b82811015613135575f612f5061090983612598565b6001600160a01b0381165f90815260296020526040812080549293509091612f7790617b61565b80601f0160208091040260200160405190810160405280929190818152602001828054612fa390617b61565b8015612fee5780601f10612fc557610100808354040283529160200191612fee565b820191905f5260205f20905b815481529060010190602001808311612fd157829003601f168201915b5050505050905080516060036130625780516020808301919091205f9081526010918290526040812080546001600160a01b031916905583919061303184614b14565b81526020019081526020015f205f6101000a8154816001600160a01b0302191690836001600160a01b031602179055505b6001600160a01b0382165f908152600f602052604090208054600160e81b900460ff16156130925750505061312d565b8054600160e01b900460ff165f8160068111156130b1576130b1617487565b14806130ce575060068160068111156130cc576130cc617487565b145b156130dc575050505061312d565b61310d84602a5f8460068111156130f5576130f5617487565b60ff16815260208101919091526040015f20906157bf565b50613117816157d3565b156131285761312586617c96565b95505b505050505b600101612f3b565b50602b8190556040518181527fa5fe2e69fcd48b9dbe563588b5da97937ef9046641db65c59b8d49a20d75bdcc906020015b60405180910390a15050565b5f61317d84613f6e565b5084516060146131a0576040516333a234f960e11b815260040160405180910390fd5b5f6131a9613385565b60a001516001600160a01b0386165f908152600c6020526040812060020154919250600160a81b9091046001600160401b0316906131e688614b14565b90505f7f216bb53e82eab08749d19f6feeb2ef62024ae0bacf3d722b441671ca90f0b97382898987878b6040516020016132269796959493929190617bea565b604051602081830303815290604052805190602001209050613247816143db565b9998505050505050505050565b61325c613f45565b3068929eee149b4bd21268540361327a5763ab143c065f526004601cfd5b3068929eee149b4bd2126855335f908152602f6020526040812054908190036132b65760405163183dfd8b60e21b815260040160405180910390fd5b335f818152602f602052604080822082905551634875485760e11b8152600481019290925260248201525f5160206182325f395f51905f52906390ea90ae9083906044015f604051808303818588803b158015613311575f5ffd5b505af1158015613323573d5f5f3e3d5ffd5b50506040518481523393507f358fe4192934d3bf28ae181feda1f4bd08ca67f5e2fad55582cce5eb67304ae99250602001905060405180910390a2503868929eee149b4bd2126855565b61337884848461123f565b611b583385858585615826565b6040805160c08101825260608082525f6020830181905292820183905281018290526080810182905260a0810191909152600d546133dc90600160b01b810463ffffffff16908190600160d01b900460ff16614990565b60408051825460e0602082028301810190935260c08201818152919392849291849184018282801561343557602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311613417575b5050509183525050600182015460208201526002909101546001600160401b038116604083015263ffffffff600160401b820481166060840152600160601b820416608083015260ff600160801b9091041660a090910152919050565b5f61349b613ed9565b6134a3613f45565b6134b3608083016060840161767a565b63ffffffff165f036134f1576134cf608083016060840161767a565b604051630c6e911360e41b815263ffffffff9091166004820152602401610ee3565b600d80545f919082906135069060ff16617cae565b825460ff8083166101009490940a848102910219909116179092555f908152600a60205260409020909150839061353d8282617ccc565b505060ff81167fe99633c5fc9a4b39f3a3d7835a821420f9d4d6c5bfa62be2fcf1fde156115eeb8435602086013560408701356135806080890160608a0161767a565b6040805194855260208501939093529183015263ffffffff16606082015260800160405180910390a290505b919050565b6135ba33613f6e565b50335f908152600c6020526040812060020180546015906135ea90600160a81b90046001600160401b0316617d0f565b82546001600160401b038083166101009490940a8481029102199091161790925560405190815290915033907f2372996d0929efe8a23b6f30910b8047be7f973b1bfa8bf5ef6dbe702521591f9060200160405180910390a250565b606061365182613f0d565b505f61368c61365f84615945565b6136676159f3565b604051602001613678929190617d47565b604051602081830303815290604052615a3d565b90508060405160200161369f9190617e36565b604051602081830303815290604052915050919050565b6136be613f45565b3068929eee149b4bd2126854036136dc5763ab143c065f526004601cfd5b3068929eee149b4bd21268555f6136f2836140a7565b6001600160a01b0384165f908152600f60205260409020805491925090600160e01b900460ff16600181600681111561372d5761372d617487565b1415801561374d5750600281600681111561374a5761374a617487565b14155b801561376b5750600381600681111561376857613768617487565b14155b1561378b5780604051633ba7bf8960e11b8152600401610ee39190617c88565b815460ff600160f01b9091048116908516811015806137b25750600d5460ff908116908616115b156137dd57604051633abb443b60e21b815260ff808316600483015286166024820152604401610ee3565b60ff8082165f908152600a602052604080822054928816825281205490828211613807575f613811565b6138118383617b25565b90508034146138355760405163222d164360e21b8152346004820152602401610ee3565b600185600681111561384957613849617487565b03613966578015613886576001600160a01b0389165f908152600b60205260408120805483929061387b908490617bb0565b9091555061389a9050565b8282101561389a5761389a89888585615a63565b855460ff60f01b1916600160f01b60ff8a16021786556001600160a01b03808a165f908152600c60205260409020600201541615613903576001600160a01b0389165f908152600c60205260409020600201805460ff60a01b1916600160a01b60ff8b16021790555b6040805160ff80871682528a166020820152908101849052606081018390526001600160a01b038a16907f27f993440568bc502fe7db72fe27118488431975dc3239b379513a4cdb08e2c99060800160405180910390a250505050505050613b8b565b5f602e5f8b6001600160a01b03166001600160a01b031681526020019081526020015f206040518060800160405290815f82015f9054906101000a900460ff1660ff1660ff1681526020015f820160019054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020015f820160059054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001600182015481525050905060405180608001604052808a60ff168152602001600d60169054906101000a900463ffffffff1663ffffffff168152602001336001600160a01b0316815260200183815250602e5f8c6001600160a01b03166001600160a01b031681526020019081526020015f205f820151815f015f6101000a81548160ff021916908360ff1602179055506020820151815f0160016101000a81548163ffffffff021916908363ffffffff1602179055506040820151815f0160056101000a8154816001600160a01b0302191690836001600160a01b0316021790555060608201518160010155905050613b088a602c6157bf90919063ffffffff16565b50606081015115613b2557613b2581604001518260600151614123565b600d546040805160ff8c168152600160b01b90920463ffffffff16602083015281018390526001600160a01b038b16907fdffa95238a907cf8b6360a883f195928a82c8d7746dfe6fca84936929024a9d59060600160405180910390a250505050505050505b3868929eee149b4bd21268555050565b6001600160a01b039182165f90815260056020908152604080832093909416825291909152205460ff1690565b613bd0613ed9565b613bd982613f6e565b506001600160a01b0382165f818152600f602090815260409182902080546001600160f81b0316600160f81b60ff87169081029190911790915591519182527ffa96cc66d1772e5646f86e374867e4e32b5b448b2aadb331568e34c2d063e45591015b60405180910390a25050565b613c50613ed9565b6001600160a01b038116613c7957604051631e4fbdf760e01b81525f6004820152602401610ee3565b61157281614b95565b613c8a613f45565b3068929eee149b4bd212685403613ca85763ab143c065f526004601cfd5b3068929eee149b4bd21268555f613cbe836140a7565b6001600160a01b0384165f908152600f60205260409020909150613ce181615bd9565b613d00578060405163c11d33f760e01b8152600401610ee39190617e67565b613d098161571d565b5f613d15858486615c72565b9050826001600160a01b03167ffc30cddea38e2bf4d6ea7d3f9ed3b6ad7f176419f4963bd81318067a4aee73fe82604051613d5291815260200190565b60405180910390a25050503868929eee149b4bd21268555050565b5f6001600160e01b031982166380ac58cd60e01b1480613d9d57506001600160e01b03198216635b5e139f60e01b145b80610eb857506301ffc9a760e01b6001600160e01b0319831614610eb8565b6001600160a01b0381165f908152600f602052604090208054602b54600160e01b90910460ff1690613ded826157d3565b15613e0057613dfd600182617b25565b90505b613e0a8482615ded565b5f613e1485611955565b506001600160a01b0387165f908152600b60205260408082208290555191935091505f5160206182325f395f51905f529083908381818185875af1925050503d805f8114613e7d576040519150601f19603f3d011682016040523d82523d5f602084013e613e82565b606091505b5050905080613ea457604051630b567ce360e31b815260040160405180910390fd5b600d54613ebf908690600160b01b900463ffffffff16615f26565b613ec88561571d565b613ed186615f7d565b505050505050565b600d546001600160a01b03620100009091041633146122835760405163118cdaa760e01b8152336004820152602401610ee3565b5f818152600260205260408120546001600160a01b031680610eb857604051637e27328960e01b815260048101849052602401610ee3565b600d54610100900460ff16156122835760405163d93c066560e01b815260040160405180910390fd5b5f6001600160a01b038216613f8281614b42565b613fa25760405163ed15e6cf60e01b815260048101829052602401610ee3565b826001600160a01b0316613fb582612703565b6001600160a01b031614610eb8576040516330fa89ab60e11b815260040160405180910390fd5b6001600160a01b0382165f908152600f6020526040902054600160e01b900460ff1681600681111561401057614010617487565b81600681111561402257614022617487565b1461104b5780604051633ba7bf8960e11b8152600401610ee39190617c88565b61404d816001617c50565b825463ffffffff91909116600160a01b0263ffffffff60a01b19909116178255614078826002615fef565b7f44f68a196beb8e3ae6b6afe9504db62c81b4e511e987a263b4f1a9bc49c90762826040516131679190617e67565b5f6140b182613f6e565b506140bb82614a84565b9050336001600160a01b038316148015906140df5750336001600160a01b03821614155b156135ac5760405163172b4e7560e11b81526001600160a01b0382166004820152602401610ee3565b5f61411c836001600160a01b03841661611e565b9392505050565b805f0361412e575050565b604051634875485760e11b81526001600160a01b03831660048201525f60248201525f5160206182325f395f51905f52906390ea90ae90620186a09084906044015f604051808303818589803b158015614186575f5ffd5b5088f19450505050508015614199575060015b611528576001600160a01b0382165f908152602f6020526040812080548392906141c4908490617bb0565b90915550506040518181526001600160a01b038316907f03346f418777de37a432a76ace912eeb3d1d63333a4f8c59df9ae07eb097321590602001613c3c565b5f8151606014614227576040516333a234f960e11b815260040160405180910390fd5b5f825f8151811061423a5761423a617afd565b016020015160f81c905060808116158061425657506040811615155b15614274576040516333a234f960e11b815260040160405180910390fd5b5f61427f8486616208565b86516040519192505f91829161b1519163a65ebb2560e01b916142a8918a908890602401617ed9565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516142e69190617f11565b5f60405180830381855afa9150503d805f811461431e576040519150601f19603f3d011682016040523d82523d5f602084013e614323565b606091505b509150915081158061433757508051602014155b1561435757806040516306fe67db60e31b8152600401610ee3919061724a565b8080602001905181019061436b9190617f1c565b61438a578760405163a865bb3560e01b8152600401610ee39190617f37565b6143948688616258565b98975050505050505050565b60ff81165f908152600a602052604081205483146143d45760405163222d164360e21b815260048101849052602401610ee3565b5090919050565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f00000000000000000000000000000000000000000000000000000000000000004614166144ce5750604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000009181019190915246606082015230608082015260a090205b6719010000000000005f5280601a5281603a52604260182090505f603a52919050565b5f6144fb856162c8565b1561452657846001600160a01b031661451585858561639b565b6001600160a01b0316149050612a80565b61453285858585616415565b95945050505050565b6001600160a01b038381165f818152600f602081815260408084208054825160e08101845287815263ffffffff81860181815294820188815260608301898152608084018a905260ff8e811660a0860152600160f81b86041660c085018190529a909952969095528051935195518516600160c01b0263ffffffff60c01b1996909516600160a01b026001600160c01b031990921693909816929092179190911792831682178155925193949391839160ff60e01b191664ffffffffff60c01b1990911617600160e01b83600681111561461757614617617487565b02179055506080820151815460a084015160c09094015161ffff60e81b19909116600160e81b9215159290920260ff60f01b191691909117600160f01b60ff94851602176001600160f81b0316600160f81b93909116929092029190911790556001600160a01b0384165f908152600f60205260409020614699816001615fef565b6001600160a01b0385165f9081526029602052604090206146bb878983617fa7565b506001600160a01b0385165f908152600b602052604090819020849055517f9d9bab592843361c508cec6cc23820609c04fe07a621d03bf04b7520759d364190614706908390617e67565b60405180910390a150505050505050565b6001600160a01b0382165f908152600b60205260408120548183821161473d575f614532565b6145328483617b25565b811580614752575080155b8061475c57508181115b1561152857604051635700689f60e11b81526004810183905260248101829052604401610ee3565b61478f816004615fef565b805463ffffffff60c01b191663ffffffff60c01b1781556040517f170cba9e80cc0d156bc6ed689fa1d09ee788e1000c092512ef8698454b2081ee90611d30908390617e67565b5f8160068111156147e9576147e9617487565b14806148065750600681600681111561480457614804617487565b145b156115725780604051633ba7bf8960e11b8152600401610ee39190617c88565b6060610eb8602a5f84600681111561484057614840617487565b60ff1660ff1681526020019081526020015f206157b3565b5f5f61486485846164e8565b6001600160a01b0386165f908152600b6020526040812080549293508392909190614890908490617b25565b9091555050604051634875485760e11b81526001600160a01b0385166004820152602481018290525f5160206182325f395f51905f52906390ea90ae906044015f604051808303815f87803b1580156148e7575f5ffd5b505af11580156148f9573d5f5f3e3d5ffd5b5092979650505050505050565b5f806004836149158688617c6c565b61491f9190618060565b6149299190618079565b90505f601d8260ff166004811061494257614942617afd565b6003020190508563ffffffff168160020160089054906101000a900463ffffffff1663ffffffff161461453257604051634fadd4d360e11b815263ffffffff87166004820152602401610ee3565b5f8061499c8585617c6c565b90505f6004826149ac8683618060565b6149b6919061809a565b6149c09190618079565b90505f60118260ff16600481106149d9576149d9617afd565b6003020190508663ffffffff168160020160089054906101000a900463ffffffff1663ffffffff1614614a2757604051634fadd4d360e11b815263ffffffff88166004820152602401610ee3565b9695505050505050565b614a39616548565b600d805461ff00191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6001600160a01b038082165f908152600c60205260408120600281015491929091168061411c57509192915050565b6001600160a01b038216614adc57604051633250574960e11b81525f6004820152602401610ee3565b5f614ae883835f616570565b90506001600160a01b0381161561104b576040516339e3563760e11b81525f6004820152602401610ee3565b604080516020838101516001600160fd1b031682528284015190820152606092830151918101919091522090565b5f811580614b5757506001600160a01b038210155b15614b785760405163ed15e6cf60e01b815260048101839052602401610ee3565b505f908152600260205260409020546001600160a01b0316151590565b600d80546001600160a01b038381166201000081810262010000600160b01b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b60015b8181101561104b57828282818110614c0d57614c0d617afd565b9050602002016020810190614c229190617203565b6001600160a01b03168383614c38600185617b25565b818110614c4757614c47617afd565b9050602002016020810190614c5c9190617203565b6001600160a01b031610614cc0578282614c77600184617b25565b818110614c8657614c86617afd565b9050602002016020810190614c9b9190617203565b60405163836e3a7d60e01b81526001600160a01b039091166004820152602401610ee3565b600101614bf3565b5f614cd3602c6157b3565b600d54909150600160b01b900463ffffffff165f805b8351811015615089575f848281518110614d0557614d05617afd565b6020908102919091018101516001600160a01b038082165f908152602e84526040908190208151608081018352815460ff811680835263ffffffff61010083041697830197909752600160281b900490931691830191909152600101546060820152909250901580614d9557506001600160a01b0382165f908152600f6020526040902054600160e81b900460ff165b15614daa57614da38261663b565b5050615081565b6001600160a01b0382165f908152600f60209081526040808320805460ff600160f01b9091048116808652600a909452828520548651909116855291909320548181108015614e14575060018560200151614e059190617c50565b63ffffffff168963ffffffff16105b15614e2457505050505050615081565b6001600160a01b0386165f908152602e6020526040812080546001600160c81b031916815560010155614e58602c87614108565b505f82821115614e995760608601516001600160a01b0388165f908152600b602052604081208054909190614e8e908490617bb0565b90915550614faa9050565b5f614ea48385617b25565b6001600160a01b0389165f908152600b6020526040902054909150848110614ece57819250614ee3565b83811115614ee357614ee08482617b25565b92505b8215614f91576001600160a01b0389165f908152600b602052604081208054859290614f10908490617b25565b909155505f9050614f208a614a84565b6001600160a01b0381165f908152602f6020526040812080549293508692909190614f4c908490617bb0565b90915550506040518481526001600160a01b038216907f03346f418777de37a432a76ace912eeb3d1d63333a4f8c59df9ae07eb09732159060200160405180910390a2505b614f9b8383617b25565b614fa5908c617bb0565b9a5050505b8551855460ff909116600160f01b0260ff60f01b199091161785556001600160a01b038781165f908152600c602052604090206002015416156150205785516001600160a01b0388165f908152600c60205260409020600201805460ff909216600160a01b0260ff60a01b199092169190911790555b85516040805160ff808816825290921660208301528101849052606081018390526001600160a01b038816907f27f993440568bc502fe7db72fe27118488431975dc3239b379513a4cdb08e2c99060800160405180910390a2505050505050505b600101614ce9565b50801561104b576040515f905f5160206182325f395f51905f529083908381818185875af1925050503d805f81146150dc576040519150601f19603f3d011682016040523d82523d5f602084013e6150e1565b606091505b5050905080611b5857604051630b567ce360e31b815260040160405180910390fd5b600d545f9081908190606090600160d01b900460ff16826004615127836001618060565b6151319190618079565b600d805460ff60d01b1916600160d01b60ff841602178082559192505f9160169061516890600160b01b900463ffffffff166180b3565b91906101000a81548163ffffffff021916908363ffffffff160217905590505f601d8360ff166004811061519e5761519e617afd565b6003020190505f6151ad612bfd565b90506040518060c001604052808380548060200260200160405190810160405280929190818152602001828054801561520d57602002820191905f5260205f20905b81546001600160a01b031681526001909101906020018083116151ef575b505050918352505060408084015160208301520161522c436001617c31565b6001600160401b0316815263ffffffff80861660208301526060808501519091166040830152600d5460ff908116919092015260119086166004811061527457615274617afd565b600302015f820151815f01908161528b91906180ce565b50602082015160018201556040820151600291820180546060850151608086015160a0909601516001600160401b039094166001600160601b031990921691909117600160401b63ffffffff928316021764ffffffffff60601b1916600160601b919095160260ff60801b191693909317600160801b60ff90921691909102179091555f9060049061531e908790618060565b6153289190618079565b90506040518060c001604052808c81526020015f81526020015f6001600160401b0316815260200185600261535d9190617c50565b63ffffffff1681525f60208201819052604090910152601d60ff83166004811061538957615389617afd565b600302015f820151815f0190816153a091906180ce565b50602082810151600183015560408084015160029093018054606080870151608088015160a09098015160ff16600160801b0260ff60801b1963ffffffff998a16600160601b021664ffffffffff60601b1999909216600160401b026001600160601b03199094166001600160401b039098169790971792909217969096161793909317909255848201519285015186548351818402810184019094528084528894939192889291839183018282801561548157602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311615463575b5050505050905099509950995099505050505050509193509193565b5f6154a86002614826565b90505f5b8151811015615506575f600f5f8484815181106154cb576154cb617afd565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f2090506154fd8161675d565b506001016154ac565b505f6155126004614826565b600d54909150600160d01b900460ff165f6004615530836001618060565b61553a9190618079565b90505f7fbd0b8371ed11e4a5f6acd1f1a0d78b3f7e6ab3473c6396c9f28027132562600c8660405160200161558692919091825260e01b6001600160e01b031916602082015260240190565b60405160208183030381529060405280519060200120905061561560118460ff16600481106155b7576155b7617afd565b6003020180546040805160208084028201810190925282815292919083018282801561560a57602002820191905f5260205f20905b81546001600160a01b031681526001909101906020018083116155ec575b505050505082616797565b61562e601d8360ff16600481106155b7576155b7617afd565b61566b8888808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250859250616797915050565b5f5b84518110156156d3575f85828151811061568957615689617afd565b6020026020010151905061569d81846167e7565b156156a857506156cb565b6001600160a01b0381165f908152600f602052604090206156c99089615f26565b505b60010161566d565b505050505050505050565b6156e6613f45565b600d805461ff0019166101001790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258614a673390565b615728816006615fef565b805460ff60e81b198116600160e81b17825561574c906001600160a01b031661663b565b7ffab16134cb74fff6e7d137bf93f6b2ab4c1c61cbe53dad2c8cb57744353bd39b81604051611d309190617e67565b5f6157875f835f616570565b90506001600160a01b03811661152857604051637e27328960e01b815260048101839052602401610ee3565b60605f61411c83616804565b5f61411c836001600160a01b03841661685d565b5f60038260068111156157e8576157e8617487565b14806158055750600482600681111561580357615803617487565b145b80610eb85750600282600681111561581f5761581f617487565b1492915050565b6001600160a01b0383163b1561121157604051630a85bd0160e11b81526001600160a01b0384169063150b7a0290615868908890889087908790600401618152565b6020604051808303815f875af19250505080156158a2575060408051601f3d908101601f1916820190925261589f91810190618184565b60015b615909573d8080156158cf576040519150601f19603f3d011682016040523d82523d5f602084013e6158d4565b606091505b5080515f0361590157604051633250574960e11b81526001600160a01b0385166004820152602401610ee3565b805181602001fd5b6001600160e01b03198116630a85bd0160e11b14613ed157604051633250574960e11b81526001600160a01b0385166004820152602401610ee3565b60605f615951836168a9565b6028602282012090915060601c60295b60018111156159ea57600782600f161180156159965750606083828151811061598c5761598c617afd565b016020015160f81c115b156159d357602060f81b8382815181106159b2576159b2617afd565b0160200180516001600160f81b0319908116909218909116905f82901a9053505b60049190911c906159e38161819f565b9050615961565b50909392505050565b6060615a196040518061052001604052806104ed81526020016182526104ed9139615a3d565b604051602001615a2991906181b4565b604051602081830303815290604052905090565b6060610eb88260405180606001604052806040815260200161873f6040913960016168bf565b5f615a6e8284617b25565b6001600160a01b0386165f908152600b6020526040812054919250848210615a97575081615aac565b83821115615aac57615aa98483617b25565b90505b8015615b49576001600160a01b0387165f908152600b602052604081208054839290615ad9908490617b25565b9091555050604051634875485760e11b81526001600160a01b03871660048201525f60248201525f5160206182325f395f51905f52906390ea90ae9083906044015f604051808303818588803b158015615b31575f5ffd5b505af1158015615b43573d5f5f3e3d5ffd5b50505050505b5f615b548285617b25565b90508015615bcf576040515f905f5160206182325f395f51905f529083908381818185875af1925050503d805f8114615ba8576040519150601f19603f3d011682016040523d82523d5f602084013e615bad565b606091505b50509050806156d357604051630b567ce360e31b815260040160405180910390fd5b5050505050505050565b80545f90600160e01b900460ff166001816006811115615bfb57615bfb617487565b03615c095750600192915050565b82545f90615c2590600160c01b900463ffffffff166001617c50565b90506005826006811115615c3b57615c3b617487565b148015615c5a5750600d5463ffffffff808316600160b01b9092041610155b15615c69575060019392505050565b505f9392505050565b5f615c7c84615f7d565b5f5f5f615c8887611955565b925092509250825f03615ca05782935050505061411c565b6001600160a01b0387165f908152600b60205260408120819055828410615cc8575081615d45565b50825f5f5160206182325f395f51905f52615ce38386617b25565b6040515f81818185875af1925050503d805f8114615d1c576040519150601f19603f3d011682016040523d82523d5f602084013e615d21565b606091505b5050905080615d4357604051630b567ce360e31b815260040160405180910390fd5b505b858015615d5f57505f5160206182325f395f51905f523182115b15615d76575f5160206182325f395f51905f523191505b604051634875485760e11b81526001600160a01b0388166004820152602481018390525f5160206182325f395f51905f52906390ea90ae9083906044015f604051808303818588803b158015615dca575f5ffd5b505af1158015615ddc573d5f5f3e3d5ffd5b505050505081816143949190617bb0565b600d54600160b01b810463ffffffff1690600160d01b900460ff165f615e14838084614990565b9050615e208186616a39565b508054615e2d8582614747565b5f615e39856001617c50565b90505f615e47828787614906565b9050615e538189616a39565b5080549250615e628784614747565b5f615e6e876002617c50565b90505f615e7c828989614906565b9050615e88818b616a39565b5080549450615e978986614747565b600d54600160d81b900461ffff16891015615f1a57600d805461ffff8b8116600160d81b90810261ffff60d81b1984161793849055604080519382900483168085529190940490911660208301529181018b90527f74cf7ca84b30b723e8b6e3cc569ec2db21f4ba2fcc09d651e5ce6770b91552f99060600160405180910390a1505b50505050505050505050565b615f31826005615fef565b815463ffffffff60c01b1916600160c01b63ffffffff8316021782556040517f727bfc4079207401298f48a3f1a92c9b40d83e086fe5b584a7b0644fdbdb56ee90613167908490617e67565b615f8f6001600160a01b03821661577b565b6008545f03615fb1576040516315ae672760e01b815260040160405180910390fd5b6001600160a01b03165f908152600c602052604081209081556001810180546001600160a01b031916905560020180546001600160e81b0319169055565b81546001600160a01b03811690600160e01b900460ff1661603782602a5f84600681111561601f5761601f617487565b60ff16815260208101919091526040015f2090614108565b505f83600681111561604b5761604b617487565b1415801561606b5750600683600681111561606857616068617487565b14155b1561608b5761608982602a5f8660068111156130f5576130f5617487565b505b5f616095826157d3565b90505f6160a1856157d3565b90508180156160ae575080155b156160ca57602b5f81546160c19061819f565b909155506160ed565b811580156160d55750805b156160ed57602b5f81546160e890617c96565b909155505b85548590879060ff60e01b1916600160e01b83600681111561611157616111617487565b0217905550505050505050565b5f81815260018301602052604081205480156161f8575f616140600183617b25565b85549091505f9061615390600190617b25565b90508082146161b2575f865f01828154811061617157616171617afd565b905f5260205f200154905080875f01848154811061619157616191617afd565b5f918252602080832090910192909255918252600188019052604090208390555b85548690806161c3576161c36181e5565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050610eb8565b5f915050610eb8565b5092915050565b6060825160601461622c576040516333a234f960e11b815260040160405180910390fd5b604051616241905f90859085906020016181f9565b604051602081830303815290604052905092915050565b5f61626283614b14565b5f818152601060205260409020549091506001600160a01b03161561629a57604051638d12779f60e01b815260040160405180910390fd5b5f81815260106020526040902080546001600160a01b0384166001600160a01b031990911617905592915050565b5f6017826001600160a01b03163b146162e257505f919050565b5f826001600160a01b0316803b806020016040519081016040528181525f908060200190933c805190915060ef60f81b9082905f9061632357616323617afd565b01602001516001600160f81b03191614801561636657508051600160f81b908290600190811061635557616355617afd565b01602001516001600160f81b031916145b801561411c575080515f908290600290811061638457616384617afd565b01602001516001600160f81b031916149392505050565b5f60405182604081146163b657604181146163dd5750611ce3565b60208581013560ff81901c601b0190915285356040526001600160ff1b03166060526163ee565b60408501355f1a6020526040856040375b50845f526020604060805f60015afa505f6060523d60601851915080604052509392505050565b5f6001600160a01b03851615612a8057604051853b6164a5578260408114616445576041811461646c57506164df565b60208581013560ff81901c601b0190915285356040526001600160ff1b031660605261647d565b60408501355f1a6020526040856040375b50845f526020600160805f60015afa5180871860601b3d119250505f606052806040526164df565b631626ba7e60e01b80825285600483015260248201604081528460448401528486606485013760208160648701858b5afa90519091141691505b50949350505050565b60ff81165f908152600a6020526040812054816165058583614717565b9050801580616527575060ff84165f908152600a602052604090206001015481105b15612a8057604051633737b70960e11b815260048101829052602401610ee3565b600d54610100900460ff1661228357604051638dfc202b60e01b815260040160405180910390fd5b5f5f61657d858585616b3e565b90506001600160a01b0381166165d9576165d484600880545f838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b6165fc565b846001600160a01b0316816001600160a01b0316146165fc576165fc8185616c30565b6001600160a01b0385166166185761661384616cad565b612a80565b846001600160a01b0316816001600160a01b031614612a8057612a808585616d54565b6001600160a01b038082165f908152602e602090815260408083208151608081018352815460ff811680835263ffffffff61010083041695830195909552600160281b90049095169185019190915260010154606084015290036166a45761104b602c83614108565b6001600160a01b0382165f908152602e6020526040812080546001600160c81b0319168155600101556166d8602c83614108565b506060810151156115285760608101516040808301516001600160a01b03165f908152602f6020529081208054909190616713908490617bb0565b9250508190555080604001516001600160a01b03167f03346f418777de37a432a76ace912eeb3d1d63333a4f8c59df9ae07eb09732158260600151604051613c3c91815260200190565b616768816003615fef565b7fabab4191fe954f07230f7e34fd48dc0fdcbed492526cd060001cccceab22851b81604051611d309190617e67565b5f5b825181101561104b576167df60016167d96167d68685815181106167bf576167bf617afd565b602002602001015186616da290919063ffffffff16565b90565b90616dbc565b600101616799565b6001600160a01b0382165f9081526020829052604081205c61411c565b6060815f0180548060200260200160405190810160405280929190818152602001828054801561685157602002820191905f5260205f20905b81548152602001906001019080831161683d575b50505050509050919050565b5f8181526001830160205260408120546168a257508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610eb8565b505f610eb8565b6060610eb86001600160a01b0383166014616dc3565b606083515f036168dd575060408051602081019091525f815261411c565b5f8261690d576003855160046168f39190617b99565b6168fe906002617bb0565b6169089190617bd7565b616932565b60038551600261691d9190617bb0565b6169279190617bd7565b616932906004617b99565b90505f816001600160401b0381111561694d5761694d6172d8565b6040519080825280601f01601f191660200182016040528015616977576020820181803683370190505b509050600185016020820187885189016020810180515f82525b828410156169ec576003840193508351603f8160121c168701518653600186019550603f81600c1c168701518653600186019550603f8160061c168701518653600186019550603f8116870151865350600185019450616991565b905250508515616a2d57600388510660018114616a105760028114616a2357616a2b565b603d6001830353603d6002830353616a2b565b603d60018303535b505b50909695505050505050565b81545f90815b81811015616b3457836001600160a01b0316858281548110616a6357616a63617afd565b5f918252602090912001546001600160a01b031603616b2c5784616a88600184617b25565b81548110616a9857616a98617afd565b905f5260205f20015f9054906101000a90046001600160a01b0316858281548110616ac557616ac5617afd565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b0316021790555084805480616b0057616b006181e5565b5f8281526020902081015f1990810180546001600160a01b03191690550190555060019150610eb89050565b600101616a3f565b505f949350505050565b5f828152600260205260408120546001600160a01b0390811690831615616b6a57616b6a818486616f34565b6001600160a01b03811615616ba457616b855f855f5f616f98565b6001600160a01b0381165f90815260036020526040902080545f190190555b6001600160a01b03851615616bd2576001600160a01b0385165f908152600360205260409020805460010190555b5f8481526002602052604080822080546001600160a01b0319166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b5f616c3a836129f0565b5f838152600760209081526040808320546001600160a01b0388168452600690925290912091925090818314616c8f575f83815260208281526040808320548584528184208190558352600790915290208290555b5f938452600760209081526040808620869055938552525081205550565b6008545f90616cbe90600190617b25565b5f8381526009602052604081205460088054939450909284908110616ce557616ce5617afd565b905f5260205f20015490508060088381548110616d0457616d04617afd565b5f918252602080832090910192909255828152600990915260408082208490558582528120556008805480616d3b57616d3b6181e5565b600190038181905f5260205f20015f9055905550505050565b5f6001616d60846129f0565b616d6a9190617b25565b6001600160a01b039093165f908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b03165f9081526020919091526040902090565b80825d5050565b6060825f616dd2846002617b99565b616ddd906002617bb0565b6001600160401b03811115616df457616df46172d8565b6040519080825280601f01601f191660200182016040528015616e1e576020820181803683370190505b509050600360fc1b815f81518110616e3857616e38617afd565b60200101906001600160f81b03191690815f1a905350600f60fb1b81600181518110616e6657616e66617afd565b60200101906001600160f81b03191690815f1a9053505f616e88856002617b99565b616e93906001617bb0565b90505b6001811115616f0a576f181899199a1a9b1b9c1cb0b131b232b360811b83600f1660108110616ec757616ec7617afd565b1a60f81b828281518110616edd57616edd617afd565b60200101906001600160f81b03191690815f1a90535060049290921c91616f038161819f565b9050616e96565b508115612a805760405163e22e27eb60e01b81526004810186905260248101859052604401610ee3565b616f3f83838361709c565b61104b576001600160a01b038316616f6d57604051637e27328960e01b815260048101829052602401610ee3565b60405163177e802f60e01b81526001600160a01b038316600482015260248101829052604401610ee3565b8080616fac57506001600160a01b03821615155b1561706d575f616fbb84613f0d565b90506001600160a01b03831615801590616fe75750826001600160a01b0316816001600160a01b031614155b8015616ffa5750616ff88184613b9b565b155b156170235760405163a9fbf51f60e01b81526001600160a01b0384166004820152602401610ee3565b811561706b5783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b50505f90815260046020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b5f6001600160a01b03831615801590612a805750826001600160a01b0316846001600160a01b031614806170d557506170d58484613b9b565b80612a805750505f908152600460205260409020546001600160a01b03908116911614919050565b6040805160e0810182525f8082526020820181905291810182905290606082019081525f602082018190526040820181905260609091015290565b6001600160e01b031981168114611572575f5ffd5b5f6020828403121561715d575f5ffd5b813561411c81617138565b5f5f83601f840112617178575f5ffd5b5081356001600160401b0381111561718e575f5ffd5b6020830191508360208260061b85010111156171a8575f5ffd5b9250929050565b5f5f602083850312156171c0575f5ffd5b82356001600160401b038111156171d5575f5ffd5b6171e185828601617168565b90969095509350505050565b80356001600160a01b03811681146135ac575f5ffd5b5f60208284031215617213575f5ffd5b61411c826171ed565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f61411c602083018461721c565b5f6020828403121561726c575f5ffd5b5035919050565b5f5f60408385031215617284575f5ffd5b61728d836171ed565b946020939093013593505050565b5f5f83601f8401126172ab575f5ffd5b5081356001600160401b038111156172c1575f5ffd5b6020830191508360208285010111156171a8575f5ffd5b634e487b7160e01b5f52604160045260245ffd5b5f82601f8301126172fb575f5ffd5b81356001600160401b03811115617314576173146172d8565b604051601f8201601f19908116603f011681016001600160401b0381118282101715617342576173426172d8565b604052818152838201602001851015617359575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f60208284031215617385575f5ffd5b604051602081016001600160401b03811182821017156173a7576173a76172d8565b60405290508082356001600160401b038111156173c2575f5ffd5b6173ce858286016172ec565b8252505092915050565b5f5f5f5f5f5f5f60a0888a0312156173ee575f5ffd5b87356001600160401b03811115617403575f5ffd5b61740f8a828b0161729b565b90985096505060208801356001600160401b0381111561742d575f5ffd5b6174398a828b01617375565b955050617448604089016171ed565b935060608801356001600160401b03811115617462575f5ffd5b61746e8a828b0161729b565b989b979a50959894979596608090950135949350505050565b634e487b7160e01b5f52602160045260245ffd5b600781106174b757634e487b7160e01b5f52602160045260245ffd5b9052565b60018060a01b03815116825263ffffffff602082015116602083015263ffffffff604082015116604083015260608101516174f9606084018261749b565b5060808101511515608083015260ff60a08201511660a083015260c081015161104b60c084018260ff169052565b60e08101610eb882846174bb565b5f5f5f60608486031215617547575f5ffd5b617550846171ed565b925061755e602085016171ed565b929592945050506040919091013590565b5f6020828403121561757f575f5ffd5b81356007811061411c575f5ffd5b602080825282518282018190525f918401906040840190835b818110156175cf576175b98385516174bb565b6020939093019260e092909201916001016175a6565b509095945050505050565b8015158114611572575f5ffd5b5f602082840312156175f7575f5ffd5b813561411c816175da565b5f5f5f60408486031215617614575f5ffd5b83356001600160401b03811115617629575f5ffd5b6176358682870161729b565b90945092505060208401356001600160401b03811115617653575f5ffd5b61765f86828701617375565b9150509250925092565b63ffffffff81168114611572575f5ffd5b5f6020828403121561768a575f5ffd5b813561411c81617669565b5f8151808452602084019350602083015f5b828110156176ce5781516001600160a01b03168652602095860195909101906001016176a7565b5093949350505050565b602081525f825160c060208401526176f360e0840182617695565b9050602084015160408401526001600160401b03604085015116606084015263ffffffff606085015116608084015263ffffffff60808501511660a084015260ff60a08501511660c08401528091505092915050565b5f60208284031215617759575f5ffd5b813561ffff8116811461411c575f5ffd5b5f5f6020838503121561777b575f5ffd5b82356001600160401b03811115617790575f5ffd5b6171e18582860161729b565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b828110156177f357603f198786030184526177de85835161721c565b945060209384019391909101906001016177c2565b50929695505050505050565b5f5f60208385031215617810575f5ffd5b82356001600160401b03811115617825575f5ffd5b8301601f81018513617835575f5ffd5b80356001600160401b0381111561784a575f5ffd5b8560208260051b840101111561785e575f5ffd5b6020919091019590945092505050565b60ff60f81b8816815260e060208201525f61788c60e083018961721c565b828103604084015261789e818961721c565b606084018890526001600160a01b038716608085015260a0840186905283810360c0850152845180825260208087019350909101905f5b818110156178f35783518352602093840193909201916001016178d5565b50909b9a5050505050505050505050565b602081525f61411c6020830184617695565b5f5f60408385031215617927575f5ffd5b617930836171ed565b91506020830135617940816175da565b809150509250929050565b803560ff811681146135ac575f5ffd5b5f6020828403121561796b575f5ffd5b61411c8261794b565b5f5f5f5f60808587031215617987575f5ffd5b84356001600160401b0381111561799c575f5ffd5b6179a8878288016172ec565b9450506179b7602086016171ed565b92506179c5604086016171ed565b9396929550929360600135925050565b5f5f5f5f608085870312156179e8575f5ffd5b6179f1856171ed565b93506179ff602086016171ed565b92506040850135915060608501356001600160401b03811115617a20575f5ffd5b617a2c878288016172ec565b91505092959194509250565b5f6080828403128015617a49575f5ffd5b509092915050565b5f5f60408385031215617a62575f5ffd5b617a6b836171ed565b9150617a796020840161794b565b90509250929050565b5f5f60408385031215617a93575f5ffd5b617a9c836171ed565b9150617a79602084016171ed565b6001600160a01b038816815263ffffffff87811660208301528616604082015260e08101617adb606083018761749b565b931515608082015260ff92831660a0820152911660c090910152949350505050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b81810381811115610eb857610eb8617b11565b604081016001600160a01b03617b4d846171ed565b168252602092830135929091019190915290565b600181811c90821680617b7557607f821691505b602082108103617b9357634e487b7160e01b5f52602260045260245ffd5b50919050565b8082028115828204841417610eb857610eb8617b11565b80820180821115610eb857610eb8617b11565b634e487b7160e01b5f52601260045260245ffd5b5f82617be557617be5617bc3565b500490565b96875260208701959095526001600160a01b03938416604087015291909216606085015260ff90911660808401526001600160401b031660a083015260c082015260e00190565b6001600160401b038181168382160190811115610eb857610eb8617b11565b63ffffffff8181168382160190811115610eb857610eb8617b11565b63ffffffff8281168282160390811115610eb857610eb8617b11565b60208101610eb8828461749b565b5f60018201617ca757617ca7617b11565b5060010190565b5f60ff821660ff8103617cc357617cc3617b11565b60010192915050565b813581556020820135600182015560408201356002820155600381016060830135617cf681617669565b815463ffffffff191663ffffffff919091161790555050565b5f6001600160401b0382166001600160401b038103617cc357617cc3617b11565b5f81518060208401855e5f93019283525090919050565b7f7b226e616d65223a202254656c636f696e2d4e6574776f726b20436f6e73656e8152651cdd5cd3919560d21b60208201525f617d876026830185617d30565b7f222c20226465736372697074696f6e223a2022455243373231204e465420776881527f6f7365206f776e657273686970206c656467657220726570726573656e74732060208201527f746865207065726d697373696f6e65642077686974656c69737420666f72207660408201527530b634b230ba37b9399116101134b6b0b3b2911d101160511b6060820152617e226076820185617d30565b61227d60f01b815260020195945050505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c00000081525f61411c601d830184617d30565b81546001600160a01b038116825263ffffffff60a082901c8116602084015260c082901c16604083015260e0820190617ea96060840160ff8360e01c1661749b565b617ebd6080840160ff8360e81c1615159052565b60f081901c60ff1660a084015260f881901c60c0840152616201565b606081525f617eeb606083018661721c565b8281036020840152617efd818661721c565b90508281036040840152614a27818561721c565b5f61411c8284617d30565b5f60208284031215617f2c575f5ffd5b815161411c816175da565b602081525f8251602080840152612a80604084018261721c565b5f5b8281101561104b575f82820155600101617f53565b601f82111561104b578282111561104b57805f5260205f20601f840160051c6020851015617f9357505f5b61121181601f860160051c03828401617f51565b6001600160401b03831115617fbe57617fbe6172d8565b617fd283617fcc8354617b61565b83617f68565b5f601f841160018114618003575f8515617fec5750838201355b5f19600387901b1c1916600186901b178355611211565b5f83815260208120601f198716915b828110156180325786850135825560209485019460019092019101618012565b508682101561804e575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b60ff8181168382160190811115610eb857610eb8617b11565b5f60ff83168061808b5761808b617bc3565b8060ff84160691505092915050565b60ff8281168282160390811115610eb857610eb8617b11565b5f63ffffffff821663ffffffff8103617cc357617cc3617b11565b81516001600160401b038111156180e7576180e76172d8565b600160401b8111156180fb576180fb6172d8565b81548183558082101561811f57825f528160205f200161811d83830382617f51565b505b5060208301825f5260205f205f5b83811015613ed15782516001600160a01b03168282015560209092019160010161812d565b6001600160a01b03858116825284166020820152604081018390526080606082018190525f90614a279083018461721c565b5f60208284031215618194575f5ffd5b815161411c81617138565b5f816181ad576181ad617b11565b505f190190565b7f646174613a696d6167652f7376672b786d6c3b6261736536342c00000000000081525f61411c601a830184617d30565b634e487b7160e01b5f52603160045260245ffd5b6001600160e81b0319841681525f6182146003830185617d30565b60609390931b6001600160601b031916835250506014019291505056fe00000000000000000000000007a07a07a07a07a07a07a07a07a07a07a07a07a03c7376672077696474683d22373922206865696768743d223830222076696577426f783d22302030203739203830222066696c6c3d226e6f6e652220786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f737667223e203c6d61736b2069643d226d61736b305f3834395f3334313722207374796c653d226d61736b2d747970653a616c70686122206d61736b556e6974733d227573657253706163654f6e5573652220783d22302220793d2230222077696474683d22373922206865696768743d223830223e203c726563742077696474683d2237382e30303522206865696768743d223830222066696c6c3d2223433443344334222f3e203c2f6d61736b3e203c67206d61736b3d2275726c28236d61736b305f3834395f3334313729223e203c7265637420783d2231372e393534362220793d2231382e33353435222077696474683d2234322e3239343322206865696768743d2234332e32393138222066696c6c3d227768697465222f3e203c7061746820643d224d37342e323336392032312e393839324337362e363930382032342e303331352037382e323338392032382e323537372037372e363937392033312e333733334c37322e343136362036312e333235334337312e3836362036342e343437352036382e393539322036372e383739382036352e393632392036382e393631324c33372e313934372037392e333334344333342e313938342038302e343135372032392e373432312037392e363239392032372e323936342037372e3538394c332e3831312035382e3030323143312e33353730382035352e39353938202d302e31393233382035312e3734313720302e3335383134382034382e363139354c352e36333935312031382e3636373443362e31393030342031352e3534353220392e30393638372031322e313132392031322e303933322031312e303331364c34302e3835393920302e3636363435334334332e38353632202d302e3431343835372034382e3331323520302e3337303930392035302e3735383320322e343131384c37342e323336392032312e393839325a4d34392e373634352033352e343336394c35302e393336342032392e333531334c33392e393531372032392e333638374c34312e3531362032312e333432344c33372e393538332032312e333432344333372e393538332032312e333432342033342e363332382032372e323930312032372e333030362033302e323031394c32362e323839392033352e343530334c33312e303933362033352e34364333312e303933362033352e34362032392e343637342034332e303032392032382e393331362034352e373835344332372e353637372035322e383638322033302e393830362035372e383933392033362e323238312035372e383933394333382e383630362035372e383933392034312e3831372035372e383933392034352e303937322035372e383933394c34362e363532342035312e313636364334362e323734322035312e313636362034332e383031332035312e313636362033392e323333362035312e313636364333352e393336342035312e313636362033362e313039392034392e333138392033362e373433312034362e303330354c33382e373833382033352e343333334c34392e373634352033352e343336395a222066696c6c3d2223313443384646222f3e203c2f673e203c2f7376673e4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa164736f6c6343000823000a","sourceMap":"1341:77521:56:-:0;;;74082:4143;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;74325:6;2968:78:58;;;;;;;;;;;;;-1:-1:-1;;;2968:78:58;;;;;;;;;;;;;;;;-1:-1:-1;;;2968:78:58;;;3029:4;3035:6;1454:5:27;1446;:13;;;;;;:::i;:::-;-1:-1:-1;1469:7:27;:17;1479:7;1469;:17;:::i;:::-;-1:-1:-1;;3066:4:51;3028:45;;-1:-1:-1;3100:13:51;3083:30;;3124:18;;3240:23;13733:36:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;13733:36:58;;;;;13620:156;3240:23:51;3340:22;;;;;;;3454:25;;;;;;;;;3489:26;;;;3525:32;;;;3737:4;3731:11;;3802:16;3792:27;;3843:12;;;3836:30;;;;3890:12;;;3883:33;3954:9;3947:4;3940:12;;3933:31;4002:9;3995:4;3988:12;;3981:31;4055:4;4042:18;;4093:34;;-1:-1:-1;;1231:7:39;:15;;-1:-1:-1;;1231:15:39;;;-1:-1:-1;;;;;;;1273:26:20;;1269:95;;1322:31;;-1:-1:-1;;;1322:31:20;;1350:1;1322:31;;;10549:51:73;10522:18;;1322:31:20;;;;;;;;1269:95;1373:32;1392:12;1373:18;:32::i;:::-;-1:-1:-1;74409:25:56;;:30;;:81:::2;;;74472:11;:18;74443;:25;:47;;74409:81;:155;;;;74539:18;:25;74510:18;:25;:54;;74409:155;74392:237;;;74596:22;;-1:-1:-1::0;;;74596:22:56::2;;;;;;;;;;;74392:237;74680:14;:28;;;:33;;74712:1;74680:33:::0;74676:91:::2;;74738:28;::::0;::::2;::::0;74722:45:::2;::::0;-1:-1:-1;;;74722:45:56;;10785:10:73;10773:23;;;74722:45:56::2;::::0;::::2;10755:42:73::0;10728:18;;74722:45:56::2;10611:192:73::0;74676:91:56::2;74777:11;::::0;;;:8:::2;:11;::::0;;;:28;;:11;:28;;::::2;::::0;;;:11;:28;::::2;::::0;;;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;74777:28:56::2;;::::0;;::::2;::::0;;;::::2;::::0;;74963:25;;74936:17:::2;:53:::0;;-1:-1:-1;;;;74936:53:56::2;-1:-1:-1::0;;;74936:53:56::2;::::0;;::::2;::::0;;;::::2;::::0;;;::::2;::::0;;75244:312:::2;75265:1;75260;:6;75244:312;;75287:23;75313:9;75323:1;75313:12;;;;;;;:::i;:::-;;;;75339:13;::::0;::::2;:25:::0;;75400:28:::2;::::0;::::2;::::0;-1:-1:-1;;;;;;;;75378:50:56;;;75339:25;::::2;::::0;;::::2;::::0;;;::::2;-1:-1:-1::0;;;;75378:50:56;;;;;;;;;::::2;;;::::0;;75464:28:::2;::::0;::::2;::::0;-1:-1:-1;75442:19:56;::::2;:50:::0;75313:12;-1:-1:-1;75339:25:56;75507:15:::2;75339:25:::0;75507:18:::2;::::0;::::2;;;;;:::i;:::-;;;;:26;;;:38;;;;;;;;;;;;;;;;;;75273:283;75268:3;;;;:::i;:::-;;;75244:312;;;;75605:9;75600:2487;75620:18;:25;75616:1;:29;75600:2487;;;75666:37;75706:18;75725:1;75706:21;;;;;;;;:::i;:::-;;;;;;;75666:61;;75741:21;75781:98;75806:18;75825:1;75806:21;;;;;;;;:::i;:::-;;;;;;;75829:16;:33;;;75864:11;75876:1;75864:14;;;;;;;;:::i;:::-;;;;;;;75781:24;;;:98;;:::i;:::-;76162:33:::0;;75741:138;;-1:-1:-1;;;;;;76162:49:56::2;::::0;;:136:::2;;-1:-1:-1::0;76243:33:56;;-1:-1:-1;;;;;76235:63:56;;::::2;;76162:136;76141:237;;;76338:25;;-1:-1:-1::0;;;76338:25:56::2;;;;;;;;;;;76141:237;76395:32;::::0;::::2;::::0;:45:::2;;::::0;76391:137:::2;;76480:32;::::0;::::2;::::0;76467:46:::2;::::0;-1:-1:-1;;;76467:46:56;;10785:10:73;10773:23;;;76467:46:56::2;::::0;::::2;10755:42:73::0;10728:18;;76467:46:56::2;10611:192:73::0;76391:137:56::2;76545:26;::::0;::::2;::::0;:39:::2;;::::0;76541:125:::2;;76624:26;::::0;;::::2;::::0;76611:40;;-1:-1:-1;;;76611:40:56;;10785:10:73;10773:23;;;76611:40:56::2;::::0;::::2;10755:42:73::0;10728:18;;76611:40:56::2;10611:192:73::0;76541:125:56::2;76717:22;76683:16;:30;;;:56;;;;;;;;:::i;:::-;;76679:147;;76780:16;:30;;;76766:45;;-1:-1:-1::0;;;76766:45:56::2;;;;;;;;:::i;76679:147::-;76843:26;::::0;::::2;::::0;:35:::2;76839:118;;76919:22;76905:37;;-1:-1:-1::0;;;76905:37:56::2;;;;;;;;:::i;76839:118::-;76974:29;::::0;::::2;::::0;:34:::2;;::::0;76970:129:::2;;77054:29;::::0;::::2;::::0;77035:49:::2;::::0;-1:-1:-1;;;77035:49:56;;12072:4:73;12060:17;;;77035:49:56::2;::::0;::::2;12042:36:73::0;12015:18;;77035:49:56::2;11898:186:73::0;76970:129:56::2;77188:9;77183:210;77204:1;77199;:6;77183:210;;77230:9;77240:1;77230:12;;;;;;;:::i;:::-;77258:33:::0;;77230:12:::2;::::0;;;::::2;::::0;;;::::2;:62:::0;;::::2;::::0;::::2;::::0;;-1:-1:-1;77230:62:56;;;::::2;::::0;;;::::2;::::0;;-1:-1:-1;;;;;;77230:62:56::2;-1:-1:-1::0;;;;;77230:62:56;;::::2;::::0;;;::::2;::::0;;77310:15:::2;77326:1:::0;77310:18:::2;::::0;::::2;;;;;:::i;:::-;77344:33:::0;;77310:18:::2;::::0;;;::::2;::::0;;;::::2;:68:::0;;::::2;::::0;::::2;::::0;;-1:-1:-1;77310:68:56;;;::::2;::::0;;;::::2;::::0;;-1:-1:-1;;;;;;77310:68:56::2;-1:-1:-1::0;;;;;77310:68:56;;::::2;::::0;;;::::2;::::0;;77207:3:::2;::::0;::::2;:::i;:::-;;;77183:210;;;;77455:11;77467:1;77455:14;;;;;;;;:::i;:::-;;::::0;;::::2;::::0;;;;;;;77418:33;;-1:-1:-1;;;;;77407:45:56::2;;::::0;;;:10:::2;:45:::0;;;;;;;;:62:::2;::::0;:45;:62:::2;:::i;:::-;-1:-1:-1::0;77494:33:56;;-1:-1:-1;;;;;77483:45:56;;::::2;;::::0;;;:10:::2;:45;::::0;;;;;;;;:64;;;;;;::::2;::::0;;;::::2;::::0;::::2;::::0;;::::2;-1:-1:-1::0;;;77483:64:56::2;-1:-1:-1::0;;;;77483:64:56;;;::::2;-1:-1:-1::0;;;77483:64:56::2;-1:-1:-1::0;;;;;;77483:64:56;;;;;;::::2;::::0;;;;::::2;::::0;;::::2;::::0;::::2;::::0;;::::2;::::0;::::2;::::0;77531:16;;77483:45;;:64;;:45;;-1:-1:-1;;;;77483:64:56;-1:-1:-1;;;;77483:64:56;;;;-1:-1:-1;;;77483:64:56;::::2;::::0;::::2;;;;;;:::i;:::-;;;::::0;;-1:-1:-1;77483:64:56::2;::::0;::::2;::::0;;;::::2;::::0;::::2;::::0;::::2;::::0;;::::2;::::0;::::2;::::0;;::::2;-1:-1:-1::0;;;77483:64:56::2;-1:-1:-1::0;;;;;77483:64:56;;;::::2;-1:-1:-1::0;;;77483:64:56::2;-1:-1:-1::0;;;;77483:64:56;::::2;;-1:-1:-1::0;;;77483:64:56::2;::::0;;;;-1:-1:-1;;;;77483:64:56;;;;;;;;;;::::2;;::::0;;;::::2;::::0;;77709:33;;77680:22:::2;-1:-1:-1::0;77660:44:56;:13:::2;:44;::::0;:83:::2;::::0;:44;;:48:::2;:83::i;:::-;-1:-1:-1::0;77803:26:56;;77766:33;;-1:-1:-1;;;;;77757:43:56;;::::2;77803:26;77757:43:::0;;;:8:::2;:43;::::0;;;;;;;:72;;;;77885:33;;77843:39;;;:24:::2;:39:::0;;;;;;:75;;-1:-1:-1;;;;;;77843:75:56::2;::::0;;;::::2;::::0;;;::::2;::::0;;77938:33;;77932:88:::2;::::0;77973:46:::2;77938:33:::0;-1:-1:-1;;;;;13353:32:58;;13264:128;77973:46:56::2;77932:5;:88::i;:::-;78040:36;78059:16;78040:36;;;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;;75647:3:56::2;;75600:2487;;;-1:-1:-1::0;;78193:25:56;;78168:22:::2;:50:::0;-1:-1:-1;1341:77521:56;;-1:-1:-1;;1341:77521:56;2912:187:20;3004:6;;;-1:-1:-1;;;;;3020:17:20;;;3004:6;3020:17;;;-1:-1:-1;;;;;;3020:17:20;;;;;;3052:40;;3004:6;;;;;;;;3052:40;;2985:16;;3052:40;2975:124;2912:187;:::o;46268:2694:56:-;46464:7;46491:9;:16;46511:2;46491:22;46487:53;;46522:18;;-1:-1:-1;;;46522:18:56;;;;;;;;;;;46487:53;47366:11;47386:9;47396:1;47386:12;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;47421:4:56;47413:12;;:17;;:38;;-1:-1:-1;47442:4:56;47434:12;;:17;;47413:38;47409:69;;;47460:18;;-1:-1:-1;;;47460:18:56;;;;;;;;;;;47409:69;47944:23;47970:53;47995:9;48006:16;47970:24;:53::i;:::-;48639:15;;48589:89;;47944:79;;-1:-1:-1;48518:7:56;;;;572:42:60;;-1:-1:-1;;;48612:25:56;48589:89;;48656:9;;47944:79;;48589:89;;;:::i;:::-;;;;-1:-1:-1;;48589:89:56;;;;;;;;;;;;;;-1:-1:-1;;;;;48589:89:56;-1:-1:-1;;;;;;48589:89:56;;;;;;;;;;48550:138;;;;48589:89;48550:138;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48517:171;;;;48703:2;48702:3;:26;;;;48709:6;:13;48726:2;48709:19;;48702:26;48698:66;;;48757:6;48737:27;;-1:-1:-1;;;48737:27:56;;;;;;;;:::i;48698:66::-;48790:6;48779:26;;;;;;;;;;;;:::i;:::-;48774:71;;48839:5;48814:31;;-1:-1:-1;;;48814:31:56;;;;;;;;:::i;48774:71::-;48911:44;48927:9;48938:16;48911:15;:44::i;:::-;48904:51;46268:2694;-1:-1:-1;;;;;;;;46268:2694:56:o;8289:150:49:-;8359:4;8382:50;8387:3;-1:-1:-1;;;;;8407:23:49;;8382:4;:50::i;:::-;8375:57;;8289:150;;;;;:::o;9978:327:27:-;-1:-1:-1;;;;;10045:16:27;;10041:87;;10084:33;;-1:-1:-1;;;10084:33:27;;10114:1;10084:33;;;10549:51:73;10522:18;;10084:33:27;10403:203:73;10041:87:27;10137:21;10161:32;10169:2;10173:7;10137:21;10161:7;:32::i;:::-;10137:56;-1:-1:-1;;;;;;10207:27:27;;;10203:96;;10257:31;;-1:-1:-1;;;10257:31:27;;10285:1;10257:31;;;10549:51:73;10522:18;;10257:31:27;10403:203:73;10203:96:27;10031:274;9978:327;;:::o;45326:595:56:-;45476:12;45790:6;:13;45807:2;45790:19;45786:50;;45818:18;;-1:-1:-1;;;45818:18:56;;;;;;;;;;;45786:50;45853:61;;;;44899:8;;45889:6;;45897:16;;45853:61;;;:::i;:::-;;;;;;;;;;;;;45846:68;;45326:595;;;;:::o;49072:363::-;50340:4;50334:11;;50199:4;50183:21;;;50378:10;-1:-1:-1;;;;;50374:83:56;50358:100;;50504:14;;;50498:21;50478:18;;;50471:49;50566:14;;;;50560:21;50540:18;;;50533:49;50601:24;;;-1:-1:-1;49247:39:56;;;:24;:39;;;;;;;-1:-1:-1;;;;;49247:39:56;:53;49243:86;;49309:20;;-1:-1:-1;;;49309:20:56;;;;;;;;;;;49243:86;49339:39;;;;:24;:39;;;;;:58;;-1:-1:-1;;;;;49339:58:56;;-1:-1:-1;;;;;;49339:58:56;;;;;;49072:363;;;;:::o;2241:406:49:-;2304:4;4360:21;;;:14;;;:21;;;;;;2320:321;;-1:-1:-1;2362:23:49;;;;;;;;:11;:23;;;;;;;;;;;;;2544:18;;2520:21;;;:14;;;:21;;;;;;:42;;;;2576:11;;2320:321;-1:-1:-1;2625:5:49;2618:12;;2518:625:30;2613:7;;2656:32;2670:2;2674:7;2683:4;2656:13;:32::i;:::-;2632:56;-1:-1:-1;;;;;;2703:27:30;;2699:210;;2746:40;2778:7;3949:10;:17;;3922:24;;;;:15;:24;;;;;:44;;;3976:24;;;;;;;;;;;;3846:161;2746:40;2699:210;;;2824:2;-1:-1:-1;;;;;2807:19:30;:13;-1:-1:-1;;;;;2807:19:30;;2803:106;;2842:56;2875:13;2890:7;2842:32;:56::i;:::-;-1:-1:-1;;;;;2922:16:30;;2918:188;;2954:45;2991:7;2954:36;:45::i;:::-;2918:188;;;3037:2;-1:-1:-1;;;;;3020:19:30;:13;-1:-1:-1;;;;;3020:19:30;;3016:90;;3055:40;3083:2;3087:7;3055:27;:40::i;:::-;3123:13;2518:625;-1:-1:-1;;;;2518:625:30:o;8861:795:27:-;8947:7;5824:16;;;:7;:16;;;;;;-1:-1:-1;;;;;5824:16:27;;;;9058:18;;;9054:86;;9092:37;9109:4;9115;9121:7;9092:16;:37::i;:::-;-1:-1:-1;;;;;9184:18:27;;;9180:256;;9300:48;9317:1;9321:7;9317:1;;9300:8;:48::i;:::-;-1:-1:-1;;;;;9391:15:27;;;;;;:9;:15;;;;;:20;;-1:-1:-1;;9391:20:27;;;9180:256;-1:-1:-1;;;;;9450:16:27;;;9446:107;;-1:-1:-1;;;;;9510:13:27;;;;;;:9;:13;;;;;:18;;9527:1;9510:18;;;9446:107;9563:16;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;9563:21:27;-1:-1:-1;;;;;9563:21:27;;;;;;;;;9600:27;;9563:16;;9600:27;;;;;;;9645:4;8861:795;-1:-1:-1;;;;8861:795:27:o;4624:1055:30:-;4886:22;4911:15;4921:4;4911:9;:15::i;:::-;4936:18;4957:26;;;:17;:26;;;;;;;;;-1:-1:-1;;;;;5058:18:30;;;;:12;:18;;;;;;4886:40;;-1:-1:-1;4957:26:30;5180:28;;;5176:325;;5224:19;5246:35;;;;;;;;;;;;5296:31;;;;;;:45;;;5413:30;;:17;:30;;;;;:43;;;5176:325;5594:26;;;;:17;:26;;;;;;;;5587:33;;;5637:35;;;;-1:-1:-1;5637:35:30;;5630:42;-1:-1:-1;4624:1055:30:o;5967:1061::-;6241:10;:17;6216:22;;6241:21;;6261:1;;6241:21;:::i;:::-;6272:18;6293:24;;;:15;:24;;;;;;6661:10;:26;;6216:46;;-1:-1:-1;6293:24:30;;6216:46;;6661:26;;;;;;:::i;:::-;;;;;;;;;6639:48;;6723:11;6698:10;6709;6698:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;6802:28;;;:15;:28;;;;;;;:41;;;6971:24;;;;;6964:31;7005:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;6038:990;;;5967:1061;:::o;3437:214::-;3521:14;3554:1;3538:13;3548:2;3538:9;:13::i;:::-;:17;;;;:::i;:::-;-1:-1:-1;;;;;3565:16:30;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;3609:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;3437:214:30:o;7105:368:27:-;7217:38;7231:5;7238:7;7247;7217:13;:38::i;:::-;7212:255;;-1:-1:-1;;;;;7275:19:27;;7271:186;;7321:31;;-1:-1:-1;;;7321:31:27;;;;;17159:25:73;;;17132:18;;7321:31:27;17013:177:73;7271:186:27;7398:44;;-1:-1:-1;;;7398:44:27;;-1:-1:-1;;;;;17387:32:73;;7398:44:27;;;17369:51:73;17436:18;;;17429:34;;;17342:18;;7398:44:27;17195:274:73;14794:662:27;14954:9;:31;;;-1:-1:-1;;;;;;14967:18:27;;;;14954:31;14950:460;;;15001:13;15017:22;15031:7;15017:13;:22::i;:::-;15001:38;-1:-1:-1;;;;;;15167:18:27;;;;;;:35;;;15198:4;-1:-1:-1;;;;;15189:13:27;:5;-1:-1:-1;;;;;15189:13:27;;;15167:35;:69;;;;-1:-1:-1;;;;;;4038:25:27;;;4015:4;4038:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;15206:30;15167:69;15163:142;;;15263:27;;-1:-1:-1;;;15263:27:27;;-1:-1:-1;;;;;10567:32:73;;15263:27:27;;;10549:51:73;10522:18;;15263:27:27;10403:203:73;15163:142:27;15323:9;15319:81;;;15377:7;15373:2;-1:-1:-1;;;;;15357:28:27;15366:5;-1:-1:-1;;;;;15357:28:27;;;;;;;;;;;15319:81;14987:423;14950:460;-1:-1:-1;;15420:24:27;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;15420:29:27;-1:-1:-1;;;;;15420:29:27;;;;;;;;;;14794:662::o;1919:208::-;1982:7;-1:-1:-1;;;;;2005:19:27;;2001:87;;2047:30;;-1:-1:-1;;;2047:30:27;;2074:1;2047:30;;;10549:51:73;10522:18;;2047:30:27;10403:203:73;2001:87:27;-1:-1:-1;;;;;;2104:16:27;;;;;:9;:16;;;;;;;1919:208::o;6401:272::-;6504:4;-1:-1:-1;;;;;6539:21:27;;;;;;:127;;;6586:7;-1:-1:-1;;;;;6577:16:27;:5;-1:-1:-1;;;;;6577:16:27;;:52;;;-1:-1:-1;;;;;;4038:25:27;;;4015:4;4038:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;6597:32;6577:88;;;-1:-1:-1;;6033:7:27;6059:24;;;:15;:24;;;;;;-1:-1:-1;;;;;6059:24:27;;;6633:32;;;;6520:146;-1:-1:-1;6401:272:27:o;16212:241::-;16275:7;5824:16;;;:7;:16;;;;;;-1:-1:-1;;;;;5824:16:27;;16337:88;;16383:31;;-1:-1:-1;;;16383:31:27;;;;;17159:25:73;;;17132:18;;16383:31:27;17013:177:73;14:127;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:253;218:2;212:9;260:4;248:17;;-1:-1:-1;;;;;280:34:73;;316:22;;;277:62;274:88;;;342:18;;:::i;:::-;378:2;371:22;146:253;:::o;404:::-;476:2;470:9;518:4;506:17;;-1:-1:-1;;;;;538:34:73;;574:22;;;535:62;532:88;;;600:18;;:::i;662:253::-;734:2;728:9;776:4;764:17;;-1:-1:-1;;;;;796:34:73;;832:22;;;793:62;790:88;;;858:18;;:::i;920:275::-;991:2;985:9;1056:2;1037:13;;-1:-1:-1;;1033:27:73;1021:40;;-1:-1:-1;;;;;1076:34:73;;1112:22;;;1073:62;1070:88;;;1138:18;;:::i;:::-;1174:2;1167:22;920:275;;-1:-1:-1;920:275:73:o;1200:167::-;1278:13;;1331:10;1320:22;;1310:33;;1300:61;;1357:1;1354;1347:12;1300:61;1200:167;;;:::o;1372:196::-;1445:4;-1:-1:-1;;;;;1467:30:73;;1464:56;;;1500:18;;:::i;:::-;-1:-1:-1;1545:1:73;1541:14;1557:4;1537:25;;1372:196::o;1573:177::-;1652:13;;-1:-1:-1;;;;;1694:31:73;;1684:42;;1674:70;;1740:1;1737;1730:12;1755:164;1831:13;;1880;;1873:21;1863:32;;1853:60;;1909:1;1906;1899:12;1924:160;2001:13;;2054:4;2043:16;;2033:27;;2023:55;;2074:1;2071;2064:12;2089:1404;2167:5;2220:3;2213:4;2205:6;2201:17;2197:27;2187:55;;2238:1;2235;2228:12;2187:55;2271:6;2265:13;2298:77;2314:60;2367:6;2314:60;:::i;:::-;2298:77;:::i;:::-;2399:3;2423:6;2418:3;2411:19;2455:4;2450:3;2446:14;2439:21;;2519:4;2511;2503:6;2499:17;2491:6;2487:30;2483:41;2469:55;;2547:3;2539:6;2536:15;2533:35;;;2564:1;2561;2554:12;2533:35;2600:4;2592:6;2588:17;2614:848;2630:6;2625:3;2622:15;2614:848;;;2708:4;2702:3;2697;2693:13;2689:24;2686:44;;;2726:1;2723;2716:12;2686:44;2756:22;;:::i;:::-;2805:34;2835:3;2805:34;:::i;:::-;2798:5;2791:49;2878:44;2916:4;2911:3;2907:14;2878:44;:::i;:::-;2871:4;2864:5;2860:16;2853:70;2959:42;2997:2;2992:3;2988:12;2959:42;:::i;:::-;2954:2;2947:5;2943:14;2936:66;3045:2;3040:3;3036:12;3030:19;3084:1;3075:7;3072:14;3062:42;;3100:1;3097;3090:12;3062:42;3135:2;3124:14;;3117:31;3185:41;3221:3;3212:13;;3185:41;:::i;:::-;3179:3;3172:5;3168:15;3161:66;3264:42;3301:3;3296;3292:13;3264:42;:::i;:::-;3258:3;3251:5;3247:15;3240:67;3344:42;3381:3;3376;3372:13;3344:42;:::i;:::-;3338:3;3327:15;;3320:67;3400:18;;3447:4;3438:14;;;;2656:4;2647:14;2614:848;;;-1:-1:-1;3480:7:73;2089:1404;-1:-1:-1;;;;;2089:1404:73:o;3498:555::-;3551:5;3604:3;3597:4;3589:6;3585:17;3581:27;3571:55;;3622:1;3619;3612:12;3571:55;3649:13;;-1:-1:-1;;;;;3674:30:73;;3671:56;;;3707:18;;:::i;:::-;3751:59;3798:2;3775:17;;-1:-1:-1;;3771:31:73;3804:4;3767:42;3751:59;:::i;:::-;3835:6;3826:7;3819:23;3889:3;3882:4;3873:6;3865;3861:19;3857:30;3854:39;3851:59;;;3906:1;3903;3896:12;3851:59;3964:6;3957:4;3949:6;3945:17;3938:4;3929:7;3925:18;3919:52;4020:1;3991:20;;;4013:4;3987:31;3980:42;;;;3995:7;3498:555;-1:-1:-1;;;3498:555:73:o;4058:846::-;4121:5;4174:3;4167:4;4159:6;4155:17;4151:27;4141:55;;4192:1;4189;4182:12;4141:55;4225:6;4219:13;4252:77;4268:60;4321:6;4268:60;:::i;4252:77::-;4353:3;4377:6;4372:3;4365:19;4409:4;4404:3;4400:14;4393:21;;4470:4;4460:6;4457:1;4453:14;4445:6;4441:27;4437:38;4423:52;;4498:3;4490:6;4487:15;4484:35;;;4515:1;4512;4505:12;4484:35;4551:4;4543:6;4539:17;4565:308;4581:6;4576:3;4573:15;4565:308;;;4656:10;;-1:-1:-1;;;;;4682:35:73;;4679:55;;;4730:1;4727;4720:12;4679:55;4759:69;4824:3;4817:4;4803:11;4795:6;4791:24;4787:35;4759:69;:::i;:::-;4747:82;;-1:-1:-1;4858:4:73;4849:14;;;;4598;4565:308;;4909:1170;4991:5;5044:3;5037:4;5029:6;5025:17;5021:27;5011:55;;5062:1;5059;5052:12;5011:55;5095:6;5089:13;5122:77;5138:60;5191:6;5138:60;:::i;5122:77::-;5223:3;5247:6;5242:3;5235:19;5279:4;5274:3;5270:14;5263:21;;5340:4;5330:6;5327:1;5323:14;5315:6;5311:27;5307:38;5293:52;;5368:3;5360:6;5357:15;5354:35;;;5385:1;5382;5375:12;5354:35;5421:4;5413:6;5409:17;5435:613;5451:6;5446:3;5443:15;5435:613;;;5526:10;;-1:-1:-1;;;;;5552:35:73;;5549:55;;;5600:1;5597;5590:12;5549:55;5627:24;;5699:4;5675:12;;;-1:-1:-1;;5671:26:73;5667:37;5664:57;;;5717:1;5714;5707:12;5664:57;5747:22;;:::i;:::-;5812:4;5804:13;;5798:20;-1:-1:-1;;;;;5834:32:73;;5831:52;;;5879:1;5876;5869:12;5831:52;5910:62;5968:3;5961:4;5950:8;5946:2;5942:17;5938:28;5910:62;:::i;:::-;5896:77;;-1:-1:-1;5986:18:73;;-1:-1:-1;6033:4:73;6024:14;;;;5468;5435:613;;6084:1631;6372:6;6380;6388;6396;6404;6448:9;6439:7;6435:23;6478:3;6474:2;6470:12;6467:32;;;6495:1;6492;6485:12;6467:32;6519:4;6515:2;6511:13;6508:33;;;6537:1;6534;6527:12;6508:33;;6563:22;;:::i;:::-;6630:16;;6655:22;;6743:2;6728:18;;;6722:25;6763:14;;;6756:31;6853:2;6838:18;;;6832:25;6873:14;;;6866:31;6929:48;6973:2;6958:18;;6929:48;:::i;:::-;6924:2;6913:14;;6906:72;7046:4;7031:20;;7025:27;6917:5;;-1:-1:-1;;;;;;7064:30:73;;7061:50;;;7107:1;7104;7097:12;7061:50;7130:85;7207:7;7198:6;7187:9;7183:22;7130:85;:::i;:::-;7261:3;7246:19;;7240:26;7120:95;;-1:-1:-1;7240:26:73;-1:-1:-1;;;;;;7278:32:73;;7275:52;;;7323:1;7320;7313:12;7275:52;7346:72;7410:7;7399:8;7388:9;7384:24;7346:72;:::i;:::-;7464:3;7449:19;;7443:26;7336:82;;-1:-1:-1;7443:26:73;-1:-1:-1;;;;;;7481:32:73;;7478:52;;;7526:1;7523;7516:12;7478:52;7549:91;7632:7;7621:8;7610:9;7606:24;7549:91;:::i;:::-;7539:101;;;7659:50;7704:3;7693:9;7689:19;7659:50;:::i;:::-;7649:60;;6084:1631;;;;;;;;:::o;7720:380::-;7799:1;7795:12;;;;7842;;;7863:61;;7917:4;7909:6;7905:17;7895:27;;7863:61;7970:2;7962:6;7959:14;7939:18;7936:38;7933:161;;8016:10;8011:3;8007:20;8004:1;7997:31;8051:4;8048:1;8041:15;8079:4;8076:1;8069:15;7933:161;;7720:380;;;:::o;8231:692::-;8333:2;8328:3;8325:11;8322:595;;;8370:10;8365:3;8362:19;8359:548;;;8422:5;8419:1;8412:16;8470:4;8467:1;8457:18;8535:2;8523:10;8519:19;8516:1;8512:27;8574:4;8562:10;8559:20;8556:45;;;-1:-1:-1;8598:1:73;8556:45;8637:23;;;;8707:2;8698:12;;8695:1;8691:20;8687:39;8752:1;8770:123;8784:2;8781:1;8778:9;8770:123;;;8873:1;8852:19;;;8845:30;8802:1;8795:9;8770:123;;;8774:3;;;8231:692;;;:::o;9099:1299::-;9219:10;;-1:-1:-1;;;;;9241:30:73;;9238:56;;;9274:18;;:::i;:::-;9303:97;9393:6;9353:38;9385:4;9379:11;9353:38;:::i;:::-;9347:4;9303:97;:::i;:::-;9449:4;9480:2;9469:14;;9497:1;9492:649;;;;10185:1;10202:6;10199:89;;;-1:-1:-1;10254:19:73;;;10248:26;10199:89;-1:-1:-1;;9056:1:73;9052:11;;;9048:24;9044:29;9034:40;9080:1;9076:11;;;9031:57;10301:81;;9462:930;;9492:649;8178:1;8171:14;;;8215:4;8202:18;;-1:-1:-1;;9528:20:73;;;9646:222;9660:7;9657:1;9654:14;9646:222;;;9742:19;;;9736:26;9721:42;;9849:4;9834:20;;;;9802:1;9790:14;;;;9676:12;9646:222;;;9650:3;9896:6;9887:7;9884:19;9881:201;;;9957:19;;;9951:26;-1:-1:-1;;10040:1:73;10036:14;;;10052:3;10032:24;10028:37;10024:42;10009:58;9994:74;;9881:201;;;10128:1;10119:6;10116:1;10112:14;10108:22;10102:4;10095:36;9462:930;;;;9099:1299;;:::o;10808:127::-;10869:10;10864:3;10860:20;10857:1;10850:31;10900:4;10897:1;10890:15;10924:4;10921:1;10914:15;10940:127;11001:10;10996:3;10992:20;10989:1;10982:31;11032:4;11029:1;11022:15;11056:4;11053:1;11046:15;11072:135;11111:3;11132:17;;;11129:43;;11152:18;;:::i;:::-;-1:-1:-1;11199:1:73;11188:13;;11072:135::o;11212:127::-;11273:10;11268:3;11264:20;11261:1;11254:31;11304:4;11301:1;11294:15;11328:4;11325:1;11318:15;11344:243;11431:1;11424:5;11421:12;11411:143;;11476:10;11471:3;11467:20;11464:1;11457:31;11511:4;11508:1;11501:15;11539:4;11536:1;11529:15;11411:143;11563:18;;11344:243::o;11592:221::-;11745:2;11730:18;;11757:50;11734:9;11789:6;11757:50;:::i;13391:835::-;13547:4;13589:3;13578:9;13574:19;13566:27;;13656:1;13652;13647:3;13643:11;13639:19;13630:6;13624:13;13620:39;13609:9;13602:58;13728:10;13720:4;13712:6;13708:17;13702:24;13698:41;13691:4;13680:9;13676:20;13669:71;13808:10;13800:4;13792:6;13788:17;13782:24;13778:41;13771:4;13760:9;13756:20;13749:71;13867:4;13859:6;13855:17;13849:24;13882:67;13943:4;13932:9;13928:20;13914:12;13882:67;:::i;:::-;;14019:4;14011:6;14007:17;14001:24;13994:32;13987:40;13980:4;13969:9;13965:20;13958:70;14096:4;14088;14080:6;14076:17;14070:24;14066:35;14059:4;14048:9;14044:20;14037:65;14151:4;14143:6;14139:17;14133:24;14166:54;14214:4;14203:9;14199:20;14183:14;11885:4;11874:16;11862:29;;11818:75;14166:54;;13391:835;;;;:::o;14231:299::-;14283:3;14321:5;14315:12;14348:6;14343:3;14336:19;14404:6;14397:4;14390:5;14386:16;14379:4;14374:3;14370:14;14364:47;14456:1;14449:4;14440:6;14435:3;14431:16;14427:27;14420:38;14519:4;14512:2;14508:7;14503:2;14495:6;14491:15;14487:29;14482:3;14478:39;14474:50;14467:57;;;14231:299;;;;:::o;14535:570::-;14774:2;14763:9;14756:21;14737:4;14800:55;14851:2;14840:9;14836:18;14828:6;14800:55;:::i;:::-;14903:9;14895:6;14891:22;14886:2;14875:9;14871:18;14864:50;14937:43;14973:6;14965;14937:43;:::i;:::-;14923:57;;15028:9;15020:6;15016:22;15011:2;15000:9;14996:18;14989:50;15056:43;15092:6;15084;15056:43;:::i;:::-;15048:51;14535:570;-1:-1:-1;;;;;;14535:570:73:o;15110:211::-;15151:3;15189:5;15183:12;15233:6;15226:4;15219:5;15215:16;15210:3;15204:36;15295:1;15259:16;;15284:13;;;-1:-1:-1;15259:16:73;;15110:211;-1:-1:-1;15110:211:73:o;15326:189::-;15455:3;15480:29;15505:3;15497:6;15480:29;:::i;15520:228::-;15667:2;15656:9;15649:21;15630:4;15687:55;15738:2;15727:9;15723:18;15715:6;15687:55;:::i;15753:202::-;15820:6;15873:2;15861:9;15852:7;15848:23;15844:32;15841:52;;;15889:1;15886;15879:12;15841:52;15912:37;15939:9;15912:37;:::i;15960:369::-;16161:2;16150:9;16143:21;16124:4;16199:6;16193:13;16242:2;16237;16226:9;16222:18;16215:30;16262:61;16319:2;16308:9;16304:18;16290:12;16262:61;:::i;16334:409::-;-1:-1:-1;;;;;;16547:31:73;;16535:44;;16517:3;16601:37;16635:1;16626:11;;16618:6;16601:37;:::i;:::-;16694:2;16665:15;;;;-1:-1:-1;;;;;;16661:45:73;16647:60;;-1:-1:-1;;16734:2:73;16723:14;;16334:409;-1:-1:-1;;16334:409:73:o;16748:128::-;16815:9;;;16836:11;;;16833:37;;;16850:18;;:::i;16881:127::-;16942:10;16937:3;16933:20;16930:1;16923:31;16973:4;16970:1;16963:15;16997:4;16994:1;16987:15;17195:274;1341:77521:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608060405260043610610436575f3560e01c8063673983311161022b578063a71954ec11610129578063c05df7ac116100b3578063eb8535c211610078578063eb8535c214610d7f578063f062476814610dac578063f2fde38b14610dcb578063f66a25a414610dea578063fa52c7d814610e09575f5ffd5b8063c05df7ac14610cfb578063c53a029214610d1a578063c87b56dd14610d2e578063e5a2282714610d4d578063e985e9c514610d60575f5ffd5b8063b5545a3c116100f9578063b5545a3c14610bf7578063b88d4fde14610c0b578063b97dd9e214610c2a578063babc394f14610c5b578063bd3e759414610c6f575f5ffd5b8063a71954ec14610b91578063a7c5e70114610bb0578063aaffd27014610bc4578063ad6cfb8614610bd8575f5ffd5b80637d06fdf8116101b55780638cc05eda1161017a5780638cc05eda14610af55780638da5cb5b14610b2157806395d89b4114610b44578063a0201be514610b58578063a22cb46514610b77575f5ffd5b80637d06fdf814610a2e5780638456cb5914610a7b57806384b0196e14610a8f578063863623bb14610ab657806389afcb4414610ad6575f5ffd5b80636d3c6275116101fb5780636d3c62751461099e57806370a08231146109bd578063715018a6146109dc57806379ee54f7146109f05780637b55a30014610a0f575f5ffd5b8063673983311461090e5780636a627842146109345780636a926591146109535780636ae9942c14610972575f5ffd5b80632a8e33d7116103385780633f4ba83a116102c257806358e88dbb1161028757806358e88dbb1461087c57806359ca93b6146108955780635c975abb146108b457806362fcde4b146108d05780636352211e146108ef575f5ffd5b80633f4ba83a146107ec57806342842e0e1461080057806343201d301461081f57806343401a00146108325780634f6ccce71461085d575f5ffd5b80633434735f116103085780633434735f14610724578063355811a71461073e578063374ed18c146107465780633894228e146107725780633e28391d146107cd575f5ffd5b80632a8e33d7146106b45780632b9f4985146106d35780632f745c59146106f25780632fb0d02514610711575f5ffd5b80630f15f4c0116103c45780631904bb2e116103895780631904bb2e1461061a5780632228dfa01461064657806323a404301461065a57806323b872dd1461066e5780632870259d14610688575f5ffd5b80630f15f4c0146105865780630f4346fa1461059a578063127ce8e8146105b957806315b5709a146105cc57806318160ddd14610606575f5ffd5b806306fdde031161040a57806306fdde03146104de5780630752e017146104f2578063081812fc14610511578063095ea7b3146105485780630a36cdef14610567575f5ffd5b80628d6acd1461043a57806301ffc9a71461046257806302ae337b14610491578063059b916c146104b2575b5f5ffd5b348015610445575f5ffd5b5061044f600e5481565b6040519081526020015b60405180910390f35b34801561046d575f5ffd5b5061048161047c36600461714d565b610e94565b6040519015158152602001610459565b34801561049c575f5ffd5b506104b06104ab3660046171af565b610ebe565b005b3480156104bd575f5ffd5b506104d16104cc366004617203565b611050565b604051610459919061724a565b3480156104e9575f5ffd5b506104d1611121565b3480156104fd575f5ffd5b506104b061050c36600461725c565b6111b0565b34801561051c575f5ffd5b5061053061052b36600461725c565b611218565b6040516001600160a01b039091168152602001610459565b348015610553575f5ffd5b506104b0610562366004617273565b61123f565b348015610572575f5ffd5b506104b06105813660046171af565b611258565b348015610591575f5ffd5b506104b061152c565b3480156105a5575f5ffd5b506104b06105b4366004617203565b611575565b6104b06105c73660046173d8565b6116bc565b3480156105d7575f5ffd5b506105eb6105e6366004617203565b611955565b60408051938452602084019290925290820152606001610459565b348015610611575f5ffd5b5060085461044f565b348015610625575f5ffd5b50610639610634366004617203565b6119bb565b6040516104599190617527565b348015610651575f5ffd5b506104b0611a9e565b348015610665575f5ffd5b5061044f611b5e565b348015610679575f5ffd5b506104b0610562366004617535565b348015610693575f5ffd5b506106a76106a236600461756f565b611b6d565b604051610459919061758d565b3480156106bf575f5ffd5b506104b06106ce3660046175e7565b611ceb565b3480156106de575f5ffd5b506104b06106ed366004617203565b611d3b565b3480156106fd575f5ffd5b5061044f61070c366004617273565b611e00565b6104b061071f366004617602565b611e63565b34801561072f575f5ffd5b506105306002600160a01b0381565b6104b0611ee9565b348015610751575f5ffd5b5061076561076036600461767a565b611f64565b60405161045991906176d8565b34801561077d575f5ffd5b5061079161078c36600461725c565b6121f9565b604080519586526001600160401b03909416602086015263ffffffff9283169385019390935216606083015260ff16608082015260a001610459565b3480156107d8575f5ffd5b506104816107e7366004617203565b61224d565b3480156107f7575f5ffd5b506104b0612273565b34801561080b575f5ffd5b506104b061081a366004617535565b612285565b6104b061082d366004617203565b61229f565b34801561083d575f5ffd5b5061044f61084c366004617203565b602f6020525f908152604090205481565b348015610868575f5ffd5b5061044f61087736600461725c565b612598565b348015610887575f5ffd5b506030546104819060ff1681565b3480156108a0575f5ffd5b506107916108af36600461725c565b6125ed565b3480156108bf575f5ffd5b50600d54610100900460ff16610481565b3480156108db575f5ffd5b506104b06108ea366004617749565b6125fc565b3480156108fa575f5ffd5b5061053061090936600461725c565b612703565b348015610919575f5ffd5b5061092261270d565b60405160ff9091168152602001610459565b34801561093f575f5ffd5b506104b061094e366004617203565b61271f565b34801561095e575f5ffd5b5061048161096d36600461776a565b61277d565b34801561097d575f5ffd5b5061099161098c36600461767a565b612818565b604051610459919061779c565b3480156109a9575f5ffd5b506104816109b8366004617203565b61296c565b3480156109c8575f5ffd5b5061044f6109d7366004617203565b6129f0565b3480156109e7575f5ffd5b506104b0612a35565b3480156109fb575f5ffd5b5061044f610a0a366004617203565b612a46565b348015610a1a575f5ffd5b506104b0610a293660046177ff565b612a88565b348015610a39575f5ffd5b50610a42612bfd565b604051610459919081518152602080830151908201526040808301519082015260609182015163ffffffff169181019190915260800190565b348015610a86575f5ffd5b506104b0612c7a565b348015610a9a575f5ffd5b50610aa3612c8a565b604051610459979695949392919061786e565b348015610ac1575f5ffd5b506105305f5160206182325f395f51905f5281565b348015610ae1575f5ffd5b506104b0610af0366004617203565b612cf1565b348015610b00575f5ffd5b50610b14610b0f36600461756f565b612da1565b6040516104599190617904565b348015610b2c575f5ffd5b50600d546201000090046001600160a01b0316610530565b348015610b4f575f5ffd5b506104d1612db5565b348015610b63575f5ffd5b506106a7610b7236600461767a565b612dc4565b348015610b82575f5ffd5b506104b0610562366004617916565b348015610b9c575f5ffd5b50610a42610bab36600461795b565b612e7d565b348015610bbb575f5ffd5b50610b14612ef7565b348015610bcf575f5ffd5b506104b0612f03565b348015610be3575f5ffd5b5061044f610bf2366004617974565b613173565b348015610c02575f5ffd5b506104b0613254565b348015610c16575f5ffd5b506104b0610c253660046179d5565b61336d565b348015610c35575f5ffd5b50600d54600160b01b900463ffffffff1660405163ffffffff9091168152602001610459565b348015610c66575f5ffd5b50610765613385565b348015610c7a575f5ffd5b50610cc4610c89366004617203565b602e6020525f90815260409020805460019091015460ff821691610100810463ffffffff1691600160281b9091046001600160a01b03169084565b6040805160ff909516855263ffffffff90931660208501526001600160a01b03909116918301919091526060820152608001610459565b348015610d06575f5ffd5b50610922610d15366004617a38565b613492565b348015610d25575f5ffd5b506104b06135b1565b348015610d39575f5ffd5b506104d1610d4836600461725c565b613646565b6104b0610d5b366004617a51565b6136b6565b348015610d6b575f5ffd5b50610481610d7a366004617a82565b613b9b565b348015610d8a575f5ffd5b50600d54600160d81b900461ffff1660405161ffff9091168152602001610459565b348015610db7575f5ffd5b506104b0610dc6366004617a51565b613bc8565b348015610dd6575f5ffd5b506104b0610de5366004617203565b613c48565b348015610df5575f5ffd5b506104b0610e04366004617916565b613c82565b348015610e14575f5ffd5b50610e81610e23366004617203565b600f6020525f90815260409020546001600160a01b0381169063ffffffff600160a01b8204811691600160c01b81049091169060ff600160e01b8204811691600160e81b8104821691600160f01b8204811691600160f81b90041687565b6040516104599796959493929190617aaa565b5f6001600160e01b0319821663780e9d6360e01b1480610eb85750610eb882613d6d565b92915050565b336002600160a01b0314610eec57604051637eb3357160e01b81523360048201526024015b60405180910390fd5b5f5b8181101561104b5736838383818110610f0957610f09617afd565b6040029190910191505f9050610f226020830183617203565b90506001600160a01b0381161580610f4257506001600160a01b03818116145b15610f4e575050611043565b610f5e6109b86020840184617203565b15610f6a575050611043565b60208201803590600b905f90610f809086617203565b6001600160a01b03166001600160a01b031681526020019081526020015f20541115610ff45760208201803590600b905f90610fbc9086617203565b6001600160a01b03166001600160a01b031681526020019081526020015f205f828254610fe99190617b25565b909155506110099050565b6110096110046020840184617203565b613dbc565b7f11a09f9b32440d896abff7453bf53f8b26ffcb18dae4dca227f7a76e2acc3a64826040516110389190617b38565b60405180910390a150505b600101610eee565b505050565b6001600160a01b0381165f9081526029602052604081208054606092919061107790617b61565b80601f01602080910402602001604051908101604052809291908181526020018280546110a390617b61565b80156110ee5780601f106110c5576101008083540402835291602001916110ee565b820191905f5260205f20905b8154815290600101906020018083116110d157829003601f168201915b5050505050905080515f03610eb857604051635f7ba20d60e11b81526001600160a01b0384166004820152602401610ee3565b60605f805461112f90617b61565b80601f016020809104026020016040519081016040528092919081815260200182805461115b90617b61565b80156111a65780601f1061117d576101008083540402835291602001916111a6565b820191905f5260205f20905b81548152906001019060200180831161118957829003601f168201915b5050505050905090565b6111b8613ed9565b604051627b8a6760e11b8152600481018290523360248201525f5160206182325f395f51905f529062f714ce906044015f604051808303815f87803b1580156111ff575f5ffd5b505af1158015611211573d5f5f3e3d5ffd5b5050505050565b5f61122282613f0d565b505f828152600460205260409020546001600160a01b0316610eb8565b60405163dc8d8db760e01b815260040160405180910390fd5b336002600160a01b031461128157604051637eb3357160e01b8152336004820152602401610ee3565b5f80826001600160401b0381111561129b5761129b6172d8565b6040519080825280602002602001820160405280156112c4578160200160208202803683370190505b5090505f5b8381101561142d57368585838181106112e4576112e4617afd565b905060400201905080602001355f036112fd5750611425565b5f61130b6020830183617203565b90506001600160a01b038116158061132b57506001600160a01b03818116145b15611337575050611425565b6113476109b86020840184617203565b15611353575050611425565b5f600f816113646020860186617203565b6001600160a01b0316815260208082019290925260409081015f90812054600160f01b900460ff16808252600a8452918120549193509091600b9082906113ad90880188617203565b6001600160a01b03166001600160a01b031681526020019081526020015f205490505f8282106113dd57826113df565b815b90505f6113f0602088013583617b99565b90506113fc818b617bb0565b99508089898151811061141157611411617afd565b602002602001018181525050505050505050505b6001016112c9565b50815f0361143b5750505050565b5f611444613385565b6020015190505f600e54826114599190617bb0565b90505f5f5b86811015611514575f8686838151811061147a5761147a617afd565b60200260200101518561148d9190617b99565b6114979190617bd7565b9050801561150b5780600b5f8b8b868181106114b5576114b5617afd565b6114cb9260206040909202019081019150617203565b6001600160a01b03166001600160a01b031681526020019081526020015f205f8282546114f89190617bb0565b9091555061150890508184617bb0565b92505b5060010161145e565b5061151f8183617b25565b600e5550505050505b5050565b611534613f45565b61153d33613f6e565b50611549336001613fdc565b335f908152600f60205260409020600d54611572908290600160b01b900463ffffffff16614042565b50565b61157d613f45565b3068929eee149b4bd21268540361159b5763ab143c065f526004601cfd5b3068929eee149b4bd21268556115b0816140a7565b506001600160a01b038082165f908152602e602090815260408083208151608081018352815460ff811680835263ffffffff61010083041695830195909552600160281b900490951691850191909152600101546060840152900361162857604051636c4da32160e11b815260040160405180910390fd5b6001600160a01b0382165f908152602e6020526040812080546001600160c81b03191681556001015561165c602c83614108565b506060810151156116795761167981604001518260600151614123565b6040516001600160a01b038316907fc3b65b615a42c44083fae01d75939ba9640ffd6023e130bfc06092d992560d1f905f90a2503868929eee149b4bd212685550565b6116c4613f45565b5f61170586868a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061420492505050565b90505f611710613385565b60a0015190505f61172134836143a0565b905061172c87613f6e565b50611737875f613fdc565b6001600160a01b0387165f908152600c60205260409020600201546001600160401b03600160a81b9091041661177c600d546001600160a01b03620100009091041690565b6001600160a01b0316336001600160a01b03161461185157844211156117b8576040516304adae2760e21b815260048101869052602401610ee3565b5f7f216bb53e82eab08749d19f6feeb2ef62024ae0bacf3d722b441671ca90f0b973858a3387868b6040516020016117f69796959493929190617bea565b6040516020818303038152906040528051906020012090505f611818826143db565b90506118268a828b8b6144f1565b61184e57604051633b4f6e2b60e21b81526001600160a01b038b166004820152602401610ee3565b50505b6040518060a00160405280858152602001896001600160a01b03168152602001336001600160a01b031681526020018460ff1681526020018260016118969190617c31565b6001600160401b039081169091526001600160a01b038a81165f908152600c602090815260409182902085518155908501516001820180546001600160a01b03191691851691909117905590840151600290910180546060860151608090960151929093166001600160a81b031990931692909217600160a01b60ff909516949094029390931767ffffffffffffffff60a81b1916600160a81b93909216929092021790556119488b8b8a868661453b565b5050505050505050505050565b6001600160a01b0381165f908152600f6020908152604080832054600160f01b900460ff16808452600a90925282205482918291826119948783614717565b6001600160a01b03979097165f908152600b60205260409020549791969550909350505050565b6119c36170fd565b6001600160a01b0382165f908152600f602052604090208054600160e81b900460ff166119f5576119f383613f6e565b505b6040805160e08101825282546001600160a01b038116825263ffffffff600160a01b820481166020840152600160c01b82041692820192909252908290606083019060ff600160e01b909104166006811115611a5357611a53617487565b6006811115611a6457611a64617487565b8152905460ff600160e81b8204811615156020840152600160f01b820481166040840152600160f81b909104166060909101529392505050565b611aa6613f45565b611aaf33613f6e565b505f611aba602b5490565b600d549091505f90601190600160d01b900460ff1660048110611adf57611adf617afd565b60030201549050611af08282614747565b611afb336003613fdc565b335f908152600f60205260409020600d54815463ffffffff600160b01b909204821691600160a01b90910416811015611b4f57604051634fadd4d360e11b815263ffffffff82166004820152602401610ee3565b611b5882614784565b50505050565b5f611b68602b5490565b905090565b6060611b78826147d6565b5f611b8283614826565b90505f81516001600160401b03811115611b9e57611b9e6172d8565b604051908082528060200260200182016040528015611bd757816020015b611bc46170fd565b815260200190600190039081611bbc5790505b5090505f5b8251811015611ce357600f5f848381518110611bfa57611bfa617afd565b6020908102919091018101516001600160a01b0390811683528282019390935260409182015f20825160e0810184528154948516815263ffffffff600160a01b8604811693820193909352600160c01b85049092169282019290925291606083019060ff600160e01b909104166006811115611c7857611c78617487565b6006811115611c8957611c89617487565b8152905460ff600160e81b8204811615156020840152600160f01b820481166040840152600160f81b909104166060909101528251839083908110611cd057611cd0617afd565b6020908102919091010152600101611bdc565b509392505050565b611cf3613ed9565b6030805460ff19168215159081179091556040519081527f52ad987b0fca51d9a6d5e0bbc656d0e3f616cff09727bf584c3275def38c4f54906020015b60405180910390a150565b611d43613f45565b3068929eee149b4bd212685403611d615763ab143c065f526004601cfd5b3068929eee149b4bd21268555f611d77826140a7565b6001600160a01b0383165f908152600f6020526040812054919250600160f01b90910460ff1690611da9848484614858565b9050826001600160a01b03167ffc30cddea38e2bf4d6ea7d3f9ed3b6ad7f176419f4963bd81318067a4aee73fe82604051611de691815260200190565b60405180910390a25050503868929eee149b4bd212685550565b5f611e0a836129f0565b8210611e3b5760405163295f44f760e21b81526001600160a01b038416600482015260248101839052604401610ee3565b506001600160a01b03919091165f908152600660209081526040808320938352929052205490565b611e6b613f45565b611eab813385858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061420492505050565b505f611eb5613385565b60a0015190505f611ec634836143a0565b9050611ed133613f6e565b50611edc335f613fdc565b611211858533858561453b565b611ef1613ed9565b6040515f905f5160206182325f395f51905f529034908381818185875af1925050503d805f8114611f3d576040519150601f19603f3d011682016040523d82523d5f602084013e611f42565b606091505b505090508061157257604051630b567ce360e31b815260040160405180910390fd5b6040805160c08101825260608082525f6020830181905292820183905281018290526080810182905260a0810191909152600d54600160b01b900463ffffffff16611fb0816002617c50565b63ffffffff168363ffffffff161180611ff0575060038163ffffffff1610158015611ff05750611fe1600382617c6c565b63ffffffff168363ffffffff16105b1561201657604051634fadd4d360e11b815263ffffffff84166004820152602401610ee3565b600d54600160d01b900460ff1663ffffffff8281169085161115612135575f612040858484614906565b60408051825460e0602082028301810190935260c08201818152919392849291849184018282801561209957602002820191905f5260205f20905b81546001600160a01b0316815260019091019060200180831161207b575b505050918352505060018201546020808301919091526002928301546001600160401b03811660408085019190915263ffffffff600160401b830481166060860152600160601b8304811660808087019190915260ff600160801b909404841660a096870152600d549093165f818152600a86529290922095860154938701939093526003909401549091169084015282015295945050505050565b612140848383614990565b60408051825460e0602082028301810190935260c08201818152919392849291849184018282801561219957602002820191905f5260205f20905b81546001600160a01b0316815260019091019060200180831161217b575b5050509183525050600182015460208201526002909101546001600160401b038116604083015263ffffffff600160401b820481166060840152600160601b820416608083015260ff600160801b9091041660a090910152949350505050565b60118160048110612208575f80fd5b6003020160018101546002909101549091506001600160401b03811690600160401b810463ffffffff90811691600160601b810490911690600160801b900460ff1685565b6001600160a01b038082165f908152600c60205260408120600201549091161515610eb8565b61227b613ed9565b612283614a31565b565b61104b83838360405180602001604052805f81525061336d565b6122a7613f45565b6122b081613f6e565b50600d546201000090046001600160a01b03166001600160a01b0316336001600160a01b0316146123585760305460ff16156122ff57604051630a06fea760e01b815260040160405180910390fd5b5f61230982614a84565b9050336001600160a01b0383161480159061232d5750336001600160a01b03821614155b156123565760405163172b4e7560e11b81526001600160a01b0382166004820152602401610ee3565b505b6001600160a01b0381165f908152600f6020526040902054600160e01b900460ff16600181600681111561238e5761238e617487565b141580156123ae575060028160068111156123ab576123ab617487565b14155b80156123cc575060038160068111156123c9576123c9617487565b14155b156123ec5780604051633ba7bf8960e11b8152600401610ee39190617c88565b6001600160a01b0382165f818152600f6020908152604080832054600160f01b900460ff16808452600a835281842054948452600b9092529091205490919081811061246657604051630ea9c27360e01b81526001600160a01b03861660048201526024810182905260ff84166044820152606401610ee3565b5f6124718284617b25565b90508034146124ad576040516315de715960e21b81526001600160a01b038716600482015234602482015260ff85166044820152606401610ee3565b6001600160a01b0386165f908152600b6020526040812080548392906124d4908490617bb0565b90915550506040515f905f5160206182325f395f51905f529034908381818185875af1925050503d805f8114612525576040519150601f19603f3d011682016040523d82523d5f602084013e61252a565b606091505b505090508061254c57604051630b567ce360e31b815260040160405180910390fd5b866001600160a01b03167fe27d5554eb05db70d1fa64400b6d5aee0f805adfbc7c9c3785743c9a287db8378360405161258791815260200190565b60405180910390a250505050505050565b5f6125a260085490565b82106125ca5760405163295f44f760e21b81525f600482015260248101839052604401610ee3565b600882815481106125dd576125dd617afd565b905f5260205f2001549050919050565b601d8160048110612208575f80fd5b612604613ed9565b8061ffff165f0361265757600d54601190600160d01b900460ff166004811061262f5761262f617afd565b6003020154604051635700689f60e11b815260048101919091525f6024820152604401610ee3565b5f612661602b5490565b9050808261ffff16111561269557604051635700689f60e11b81526004810182905261ffff83166024820152604401610ee3565b600d805461ffff848116600160d81b81810261ffff60d81b1985161790945560408051949093049091168084526020840191909152908201839052907f74cf7ca84b30b723e8b6e3cc569ec2db21f4ba2fcc09d651e5ce6770b91552f99060600160405180910390a1505050565b5f610eb882613f0d565b5f612716613385565b60a00151905090565b612727613ed9565b612730816129f0565b15158061274157506127418161296c565b1561276a57604051639fb0877960e01b81526001600160a01b0382166004820152602401610ee3565b611572816001600160a01b038116614ab3565b5f6060821461278d57505f610eb8565b5f6127cc84848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250614b1492505050565b5f818152601060205260409020549091506001600160a01b0316806127f5575f92505050610eb8565b6127fe8161296c565b1561280d575f92505050610eb8565b506001949350505050565b60605f61282483611f64565b5f015190505f81516001600160401b03811115612843576128436172d8565b60405190808252806020026020018201604052801561287657816020015b60608152602001906001900390816128615790505b5090505f5b8151811015611ce35760295f84838151811061289957612899617afd565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f2080546128cb90617b61565b80601f01602080910402602001604051908101604052809291908181526020018280546128f790617b61565b80156129425780601f1061291957610100808354040283529160200191612942565b820191905f5260205f20905b81548152906001019060200180831161292557829003601f168201915b505050505082828151811061295957612959617afd565b602090810291909101015260010161287b565b5f61297f6001600160a01b038316614b42565b1561298b57505f919050565b5f6001600160a01b0383165f908152600f6020526040902054600160e01b900460ff1660068111156129bf576129bf617487565b036129cb57505f919050565b506001600160a01b03165f908152600f6020526040902054600160e81b900460ff1690565b5f6001600160a01b038216612a1a576040516322718ad960e21b81525f6004820152602401610ee3565b506001600160a01b03165f9081526003602052604090205490565b612a3d613ed9565b6122835f614b95565b6001600160a01b0381165f908152600f6020908152604080832054600160f01b900460ff16808452600a909252822054612a808482614717565b949350505050565b336002600160a01b0314612ab157604051637eb3357160e01b8152336004820152602401610ee3565b612abb8282614bf0565b612ac3614cc8565b600d54600160d81b900461ffff168114612b0757600d54604051635700689f60e11b8152600160d81b90910461ffff16600482015260248101829052604401610ee3565b5f5f5f5f612b468686808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525061510392505050565b9350935093509350612b5986868661549d565b612b6b612b65602b5490565b86614747565b7fd1a5032a9ae65ebe520eba7974025750af3d884b6ab6047dad04dcf7006ab3856040518060c00160405280838152602001858152602001436001612bb09190617bb0565b6001600160401b0316815263ffffffff80881660208301528516604080830191909152600d5460ff1660609092019190915251612bed91906176d8565b60405180910390a1505050505050565b612c2a60405180608001604052805f81526020015f81526020015f81526020015f63ffffffff1681525090565b50600d5460ff165f908152600a602090815260409182902082516080810184528154815260018201549281019290925260028101549282019290925260039091015463ffffffff16606082015290565b612c82613ed9565b6122836156de565b600f60f81b6060805f808083612cdf60408051808201825260148152732a32b631b7b4b71029ba30b5b2a6b0b730b3b2b960611b602080830191909152825180840190935260018352603160f81b9083015291565b97989097965046955030945091925090565b612cf9613ed9565b612d028161296c565b15612d23576006604051633ba7bf8960e11b8152600401610ee39190617c88565b612d2c81613f6e565b505f6001600160a01b0382165f908152600f6020526040902054600160e01b900460ff166006811115612d6157612d61617487565b03612d98576001600160a01b0381165f908152600f60205260409020612d869061571d565b6115726001600160a01b03821661577b565b61157281613dbc565b6060612dac826147d6565b610eb882614826565b60606001805461112f90617b61565b60605f612dd083611f64565b5f015190505f81516001600160401b03811115612def57612def6172d8565b604051908082528060200260200182016040528015612e2857816020015b612e156170fd565b815260200190600190039081612e0d5790505b5090505f5b8151811015611ce357612e58838281518110612e4b57612e4b617afd565b60200260200101516119bb565b828281518110612e6a57612e6a617afd565b6020908102919091010152600101612e2d565b612eaa60405180608001604052805f81526020015f81526020015f81526020015f63ffffffff1681525090565b5060ff165f908152600a602090815260409182902082516080810184528154815260018201549281019290925260028101549282019290925260039091015463ffffffff16606082015290565b6060611b68602c6157b3565b336002600160a01b0314612f2c57604051637eb3357160e01b8152336004820152602401610ee3565b5f612f3660085490565b90505f5f5b82811015613135575f612f5061090983612598565b6001600160a01b0381165f90815260296020526040812080549293509091612f7790617b61565b80601f0160208091040260200160405190810160405280929190818152602001828054612fa390617b61565b8015612fee5780601f10612fc557610100808354040283529160200191612fee565b820191905f5260205f20905b815481529060010190602001808311612fd157829003601f168201915b5050505050905080516060036130625780516020808301919091205f9081526010918290526040812080546001600160a01b031916905583919061303184614b14565b81526020019081526020015f205f6101000a8154816001600160a01b0302191690836001600160a01b031602179055505b6001600160a01b0382165f908152600f602052604090208054600160e81b900460ff16156130925750505061312d565b8054600160e01b900460ff165f8160068111156130b1576130b1617487565b14806130ce575060068160068111156130cc576130cc617487565b145b156130dc575050505061312d565b61310d84602a5f8460068111156130f5576130f5617487565b60ff16815260208101919091526040015f20906157bf565b50613117816157d3565b156131285761312586617c96565b95505b505050505b600101612f3b565b50602b8190556040518181527fa5fe2e69fcd48b9dbe563588b5da97937ef9046641db65c59b8d49a20d75bdcc906020015b60405180910390a15050565b5f61317d84613f6e565b5084516060146131a0576040516333a234f960e11b815260040160405180910390fd5b5f6131a9613385565b60a001516001600160a01b0386165f908152600c6020526040812060020154919250600160a81b9091046001600160401b0316906131e688614b14565b90505f7f216bb53e82eab08749d19f6feeb2ef62024ae0bacf3d722b441671ca90f0b97382898987878b6040516020016132269796959493929190617bea565b604051602081830303815290604052805190602001209050613247816143db565b9998505050505050505050565b61325c613f45565b3068929eee149b4bd21268540361327a5763ab143c065f526004601cfd5b3068929eee149b4bd2126855335f908152602f6020526040812054908190036132b65760405163183dfd8b60e21b815260040160405180910390fd5b335f818152602f602052604080822082905551634875485760e11b8152600481019290925260248201525f5160206182325f395f51905f52906390ea90ae9083906044015f604051808303818588803b158015613311575f5ffd5b505af1158015613323573d5f5f3e3d5ffd5b50506040518481523393507f358fe4192934d3bf28ae181feda1f4bd08ca67f5e2fad55582cce5eb67304ae99250602001905060405180910390a2503868929eee149b4bd2126855565b61337884848461123f565b611b583385858585615826565b6040805160c08101825260608082525f6020830181905292820183905281018290526080810182905260a0810191909152600d546133dc90600160b01b810463ffffffff16908190600160d01b900460ff16614990565b60408051825460e0602082028301810190935260c08201818152919392849291849184018282801561343557602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311613417575b5050509183525050600182015460208201526002909101546001600160401b038116604083015263ffffffff600160401b820481166060840152600160601b820416608083015260ff600160801b9091041660a090910152919050565b5f61349b613ed9565b6134a3613f45565b6134b3608083016060840161767a565b63ffffffff165f036134f1576134cf608083016060840161767a565b604051630c6e911360e41b815263ffffffff9091166004820152602401610ee3565b600d80545f919082906135069060ff16617cae565b825460ff8083166101009490940a848102910219909116179092555f908152600a60205260409020909150839061353d8282617ccc565b505060ff81167fe99633c5fc9a4b39f3a3d7835a821420f9d4d6c5bfa62be2fcf1fde156115eeb8435602086013560408701356135806080890160608a0161767a565b6040805194855260208501939093529183015263ffffffff16606082015260800160405180910390a290505b919050565b6135ba33613f6e565b50335f908152600c6020526040812060020180546015906135ea90600160a81b90046001600160401b0316617d0f565b82546001600160401b038083166101009490940a8481029102199091161790925560405190815290915033907f2372996d0929efe8a23b6f30910b8047be7f973b1bfa8bf5ef6dbe702521591f9060200160405180910390a250565b606061365182613f0d565b505f61368c61365f84615945565b6136676159f3565b604051602001613678929190617d47565b604051602081830303815290604052615a3d565b90508060405160200161369f9190617e36565b604051602081830303815290604052915050919050565b6136be613f45565b3068929eee149b4bd2126854036136dc5763ab143c065f526004601cfd5b3068929eee149b4bd21268555f6136f2836140a7565b6001600160a01b0384165f908152600f60205260409020805491925090600160e01b900460ff16600181600681111561372d5761372d617487565b1415801561374d5750600281600681111561374a5761374a617487565b14155b801561376b5750600381600681111561376857613768617487565b14155b1561378b5780604051633ba7bf8960e11b8152600401610ee39190617c88565b815460ff600160f01b9091048116908516811015806137b25750600d5460ff908116908616115b156137dd57604051633abb443b60e21b815260ff808316600483015286166024820152604401610ee3565b60ff8082165f908152600a602052604080822054928816825281205490828211613807575f613811565b6138118383617b25565b90508034146138355760405163222d164360e21b8152346004820152602401610ee3565b600185600681111561384957613849617487565b03613966578015613886576001600160a01b0389165f908152600b60205260408120805483929061387b908490617bb0565b9091555061389a9050565b8282101561389a5761389a89888585615a63565b855460ff60f01b1916600160f01b60ff8a16021786556001600160a01b03808a165f908152600c60205260409020600201541615613903576001600160a01b0389165f908152600c60205260409020600201805460ff60a01b1916600160a01b60ff8b16021790555b6040805160ff80871682528a166020820152908101849052606081018390526001600160a01b038a16907f27f993440568bc502fe7db72fe27118488431975dc3239b379513a4cdb08e2c99060800160405180910390a250505050505050613b8b565b5f602e5f8b6001600160a01b03166001600160a01b031681526020019081526020015f206040518060800160405290815f82015f9054906101000a900460ff1660ff1660ff1681526020015f820160019054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020015f820160059054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001600182015481525050905060405180608001604052808a60ff168152602001600d60169054906101000a900463ffffffff1663ffffffff168152602001336001600160a01b0316815260200183815250602e5f8c6001600160a01b03166001600160a01b031681526020019081526020015f205f820151815f015f6101000a81548160ff021916908360ff1602179055506020820151815f0160016101000a81548163ffffffff021916908363ffffffff1602179055506040820151815f0160056101000a8154816001600160a01b0302191690836001600160a01b0316021790555060608201518160010155905050613b088a602c6157bf90919063ffffffff16565b50606081015115613b2557613b2581604001518260600151614123565b600d546040805160ff8c168152600160b01b90920463ffffffff16602083015281018390526001600160a01b038b16907fdffa95238a907cf8b6360a883f195928a82c8d7746dfe6fca84936929024a9d59060600160405180910390a250505050505050505b3868929eee149b4bd21268555050565b6001600160a01b039182165f90815260056020908152604080832093909416825291909152205460ff1690565b613bd0613ed9565b613bd982613f6e565b506001600160a01b0382165f818152600f602090815260409182902080546001600160f81b0316600160f81b60ff87169081029190911790915591519182527ffa96cc66d1772e5646f86e374867e4e32b5b448b2aadb331568e34c2d063e45591015b60405180910390a25050565b613c50613ed9565b6001600160a01b038116613c7957604051631e4fbdf760e01b81525f6004820152602401610ee3565b61157281614b95565b613c8a613f45565b3068929eee149b4bd212685403613ca85763ab143c065f526004601cfd5b3068929eee149b4bd21268555f613cbe836140a7565b6001600160a01b0384165f908152600f60205260409020909150613ce181615bd9565b613d00578060405163c11d33f760e01b8152600401610ee39190617e67565b613d098161571d565b5f613d15858486615c72565b9050826001600160a01b03167ffc30cddea38e2bf4d6ea7d3f9ed3b6ad7f176419f4963bd81318067a4aee73fe82604051613d5291815260200190565b60405180910390a25050503868929eee149b4bd21268555050565b5f6001600160e01b031982166380ac58cd60e01b1480613d9d57506001600160e01b03198216635b5e139f60e01b145b80610eb857506301ffc9a760e01b6001600160e01b0319831614610eb8565b6001600160a01b0381165f908152600f602052604090208054602b54600160e01b90910460ff1690613ded826157d3565b15613e0057613dfd600182617b25565b90505b613e0a8482615ded565b5f613e1485611955565b506001600160a01b0387165f908152600b60205260408082208290555191935091505f5160206182325f395f51905f529083908381818185875af1925050503d805f8114613e7d576040519150601f19603f3d011682016040523d82523d5f602084013e613e82565b606091505b5050905080613ea457604051630b567ce360e31b815260040160405180910390fd5b600d54613ebf908690600160b01b900463ffffffff16615f26565b613ec88561571d565b613ed186615f7d565b505050505050565b600d546001600160a01b03620100009091041633146122835760405163118cdaa760e01b8152336004820152602401610ee3565b5f818152600260205260408120546001600160a01b031680610eb857604051637e27328960e01b815260048101849052602401610ee3565b600d54610100900460ff16156122835760405163d93c066560e01b815260040160405180910390fd5b5f6001600160a01b038216613f8281614b42565b613fa25760405163ed15e6cf60e01b815260048101829052602401610ee3565b826001600160a01b0316613fb582612703565b6001600160a01b031614610eb8576040516330fa89ab60e11b815260040160405180910390fd5b6001600160a01b0382165f908152600f6020526040902054600160e01b900460ff1681600681111561401057614010617487565b81600681111561402257614022617487565b1461104b5780604051633ba7bf8960e11b8152600401610ee39190617c88565b61404d816001617c50565b825463ffffffff91909116600160a01b0263ffffffff60a01b19909116178255614078826002615fef565b7f44f68a196beb8e3ae6b6afe9504db62c81b4e511e987a263b4f1a9bc49c90762826040516131679190617e67565b5f6140b182613f6e565b506140bb82614a84565b9050336001600160a01b038316148015906140df5750336001600160a01b03821614155b156135ac5760405163172b4e7560e11b81526001600160a01b0382166004820152602401610ee3565b5f61411c836001600160a01b03841661611e565b9392505050565b805f0361412e575050565b604051634875485760e11b81526001600160a01b03831660048201525f60248201525f5160206182325f395f51905f52906390ea90ae90620186a09084906044015f604051808303818589803b158015614186575f5ffd5b5088f19450505050508015614199575060015b611528576001600160a01b0382165f908152602f6020526040812080548392906141c4908490617bb0565b90915550506040518181526001600160a01b038316907f03346f418777de37a432a76ace912eeb3d1d63333a4f8c59df9ae07eb097321590602001613c3c565b5f8151606014614227576040516333a234f960e11b815260040160405180910390fd5b5f825f8151811061423a5761423a617afd565b016020015160f81c905060808116158061425657506040811615155b15614274576040516333a234f960e11b815260040160405180910390fd5b5f61427f8486616208565b86516040519192505f91829161b1519163a65ebb2560e01b916142a8918a908890602401617ed9565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516142e69190617f11565b5f60405180830381855afa9150503d805f811461431e576040519150601f19603f3d011682016040523d82523d5f602084013e614323565b606091505b509150915081158061433757508051602014155b1561435757806040516306fe67db60e31b8152600401610ee3919061724a565b8080602001905181019061436b9190617f1c565b61438a578760405163a865bb3560e01b8152600401610ee39190617f37565b6143948688616258565b98975050505050505050565b60ff81165f908152600a602052604081205483146143d45760405163222d164360e21b815260048101849052602401610ee3565b5090919050565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f00000000000000000000000000000000000000000000000000000000000000004614166144ce5750604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000009181019190915246606082015230608082015260a090205b6719010000000000005f5280601a5281603a52604260182090505f603a52919050565b5f6144fb856162c8565b1561452657846001600160a01b031661451585858561639b565b6001600160a01b0316149050612a80565b61453285858585616415565b95945050505050565b6001600160a01b038381165f818152600f602081815260408084208054825160e08101845287815263ffffffff81860181815294820188815260608301898152608084018a905260ff8e811660a0860152600160f81b86041660c085018190529a909952969095528051935195518516600160c01b0263ffffffff60c01b1996909516600160a01b026001600160c01b031990921693909816929092179190911792831682178155925193949391839160ff60e01b191664ffffffffff60c01b1990911617600160e01b83600681111561461757614617617487565b02179055506080820151815460a084015160c09094015161ffff60e81b19909116600160e81b9215159290920260ff60f01b191691909117600160f01b60ff94851602176001600160f81b0316600160f81b93909116929092029190911790556001600160a01b0384165f908152600f60205260409020614699816001615fef565b6001600160a01b0385165f9081526029602052604090206146bb878983617fa7565b506001600160a01b0385165f908152600b602052604090819020849055517f9d9bab592843361c508cec6cc23820609c04fe07a621d03bf04b7520759d364190614706908390617e67565b60405180910390a150505050505050565b6001600160a01b0382165f908152600b60205260408120548183821161473d575f614532565b6145328483617b25565b811580614752575080155b8061475c57508181115b1561152857604051635700689f60e11b81526004810183905260248101829052604401610ee3565b61478f816004615fef565b805463ffffffff60c01b191663ffffffff60c01b1781556040517f170cba9e80cc0d156bc6ed689fa1d09ee788e1000c092512ef8698454b2081ee90611d30908390617e67565b5f8160068111156147e9576147e9617487565b14806148065750600681600681111561480457614804617487565b145b156115725780604051633ba7bf8960e11b8152600401610ee39190617c88565b6060610eb8602a5f84600681111561484057614840617487565b60ff1660ff1681526020019081526020015f206157b3565b5f5f61486485846164e8565b6001600160a01b0386165f908152600b6020526040812080549293508392909190614890908490617b25565b9091555050604051634875485760e11b81526001600160a01b0385166004820152602481018290525f5160206182325f395f51905f52906390ea90ae906044015f604051808303815f87803b1580156148e7575f5ffd5b505af11580156148f9573d5f5f3e3d5ffd5b5092979650505050505050565b5f806004836149158688617c6c565b61491f9190618060565b6149299190618079565b90505f601d8260ff166004811061494257614942617afd565b6003020190508563ffffffff168160020160089054906101000a900463ffffffff1663ffffffff161461453257604051634fadd4d360e11b815263ffffffff87166004820152602401610ee3565b5f8061499c8585617c6c565b90505f6004826149ac8683618060565b6149b6919061809a565b6149c09190618079565b90505f60118260ff16600481106149d9576149d9617afd565b6003020190508663ffffffff168160020160089054906101000a900463ffffffff1663ffffffff1614614a2757604051634fadd4d360e11b815263ffffffff88166004820152602401610ee3565b9695505050505050565b614a39616548565b600d805461ff00191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6001600160a01b038082165f908152600c60205260408120600281015491929091168061411c57509192915050565b6001600160a01b038216614adc57604051633250574960e11b81525f6004820152602401610ee3565b5f614ae883835f616570565b90506001600160a01b0381161561104b576040516339e3563760e11b81525f6004820152602401610ee3565b604080516020838101516001600160fd1b031682528284015190820152606092830151918101919091522090565b5f811580614b5757506001600160a01b038210155b15614b785760405163ed15e6cf60e01b815260048101839052602401610ee3565b505f908152600260205260409020546001600160a01b0316151590565b600d80546001600160a01b038381166201000081810262010000600160b01b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b60015b8181101561104b57828282818110614c0d57614c0d617afd565b9050602002016020810190614c229190617203565b6001600160a01b03168383614c38600185617b25565b818110614c4757614c47617afd565b9050602002016020810190614c5c9190617203565b6001600160a01b031610614cc0578282614c77600184617b25565b818110614c8657614c86617afd565b9050602002016020810190614c9b9190617203565b60405163836e3a7d60e01b81526001600160a01b039091166004820152602401610ee3565b600101614bf3565b5f614cd3602c6157b3565b600d54909150600160b01b900463ffffffff165f805b8351811015615089575f848281518110614d0557614d05617afd565b6020908102919091018101516001600160a01b038082165f908152602e84526040908190208151608081018352815460ff811680835263ffffffff61010083041697830197909752600160281b900490931691830191909152600101546060820152909250901580614d9557506001600160a01b0382165f908152600f6020526040902054600160e81b900460ff165b15614daa57614da38261663b565b5050615081565b6001600160a01b0382165f908152600f60209081526040808320805460ff600160f01b9091048116808652600a909452828520548651909116855291909320548181108015614e14575060018560200151614e059190617c50565b63ffffffff168963ffffffff16105b15614e2457505050505050615081565b6001600160a01b0386165f908152602e6020526040812080546001600160c81b031916815560010155614e58602c87614108565b505f82821115614e995760608601516001600160a01b0388165f908152600b602052604081208054909190614e8e908490617bb0565b90915550614faa9050565b5f614ea48385617b25565b6001600160a01b0389165f908152600b6020526040902054909150848110614ece57819250614ee3565b83811115614ee357614ee08482617b25565b92505b8215614f91576001600160a01b0389165f908152600b602052604081208054859290614f10908490617b25565b909155505f9050614f208a614a84565b6001600160a01b0381165f908152602f6020526040812080549293508692909190614f4c908490617bb0565b90915550506040518481526001600160a01b038216907f03346f418777de37a432a76ace912eeb3d1d63333a4f8c59df9ae07eb09732159060200160405180910390a2505b614f9b8383617b25565b614fa5908c617bb0565b9a5050505b8551855460ff909116600160f01b0260ff60f01b199091161785556001600160a01b038781165f908152600c602052604090206002015416156150205785516001600160a01b0388165f908152600c60205260409020600201805460ff909216600160a01b0260ff60a01b199092169190911790555b85516040805160ff808816825290921660208301528101849052606081018390526001600160a01b038816907f27f993440568bc502fe7db72fe27118488431975dc3239b379513a4cdb08e2c99060800160405180910390a2505050505050505b600101614ce9565b50801561104b576040515f905f5160206182325f395f51905f529083908381818185875af1925050503d805f81146150dc576040519150601f19603f3d011682016040523d82523d5f602084013e6150e1565b606091505b5050905080611b5857604051630b567ce360e31b815260040160405180910390fd5b600d545f9081908190606090600160d01b900460ff16826004615127836001618060565b6151319190618079565b600d805460ff60d01b1916600160d01b60ff841602178082559192505f9160169061516890600160b01b900463ffffffff166180b3565b91906101000a81548163ffffffff021916908363ffffffff160217905590505f601d8360ff166004811061519e5761519e617afd565b6003020190505f6151ad612bfd565b90506040518060c001604052808380548060200260200160405190810160405280929190818152602001828054801561520d57602002820191905f5260205f20905b81546001600160a01b031681526001909101906020018083116151ef575b505050918352505060408084015160208301520161522c436001617c31565b6001600160401b0316815263ffffffff80861660208301526060808501519091166040830152600d5460ff908116919092015260119086166004811061527457615274617afd565b600302015f820151815f01908161528b91906180ce565b50602082015160018201556040820151600291820180546060850151608086015160a0909601516001600160401b039094166001600160601b031990921691909117600160401b63ffffffff928316021764ffffffffff60601b1916600160601b919095160260ff60801b191693909317600160801b60ff90921691909102179091555f9060049061531e908790618060565b6153289190618079565b90506040518060c001604052808c81526020015f81526020015f6001600160401b0316815260200185600261535d9190617c50565b63ffffffff1681525f60208201819052604090910152601d60ff83166004811061538957615389617afd565b600302015f820151815f0190816153a091906180ce565b50602082810151600183015560408084015160029093018054606080870151608088015160a09098015160ff16600160801b0260ff60801b1963ffffffff998a16600160601b021664ffffffffff60601b1999909216600160401b026001600160601b03199094166001600160401b039098169790971792909217969096161793909317909255848201519285015186548351818402810184019094528084528894939192889291839183018282801561548157602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311615463575b5050505050905099509950995099505050505050509193509193565b5f6154a86002614826565b90505f5b8151811015615506575f600f5f8484815181106154cb576154cb617afd565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f2090506154fd8161675d565b506001016154ac565b505f6155126004614826565b600d54909150600160d01b900460ff165f6004615530836001618060565b61553a9190618079565b90505f7fbd0b8371ed11e4a5f6acd1f1a0d78b3f7e6ab3473c6396c9f28027132562600c8660405160200161558692919091825260e01b6001600160e01b031916602082015260240190565b60405160208183030381529060405280519060200120905061561560118460ff16600481106155b7576155b7617afd565b6003020180546040805160208084028201810190925282815292919083018282801561560a57602002820191905f5260205f20905b81546001600160a01b031681526001909101906020018083116155ec575b505050505082616797565b61562e601d8360ff16600481106155b7576155b7617afd565b61566b8888808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250859250616797915050565b5f5b84518110156156d3575f85828151811061568957615689617afd565b6020026020010151905061569d81846167e7565b156156a857506156cb565b6001600160a01b0381165f908152600f602052604090206156c99089615f26565b505b60010161566d565b505050505050505050565b6156e6613f45565b600d805461ff0019166101001790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258614a673390565b615728816006615fef565b805460ff60e81b198116600160e81b17825561574c906001600160a01b031661663b565b7ffab16134cb74fff6e7d137bf93f6b2ab4c1c61cbe53dad2c8cb57744353bd39b81604051611d309190617e67565b5f6157875f835f616570565b90506001600160a01b03811661152857604051637e27328960e01b815260048101839052602401610ee3565b60605f61411c83616804565b5f61411c836001600160a01b03841661685d565b5f60038260068111156157e8576157e8617487565b14806158055750600482600681111561580357615803617487565b145b80610eb85750600282600681111561581f5761581f617487565b1492915050565b6001600160a01b0383163b1561121157604051630a85bd0160e11b81526001600160a01b0384169063150b7a0290615868908890889087908790600401618152565b6020604051808303815f875af19250505080156158a2575060408051601f3d908101601f1916820190925261589f91810190618184565b60015b615909573d8080156158cf576040519150601f19603f3d011682016040523d82523d5f602084013e6158d4565b606091505b5080515f0361590157604051633250574960e11b81526001600160a01b0385166004820152602401610ee3565b805181602001fd5b6001600160e01b03198116630a85bd0160e11b14613ed157604051633250574960e11b81526001600160a01b0385166004820152602401610ee3565b60605f615951836168a9565b6028602282012090915060601c60295b60018111156159ea57600782600f161180156159965750606083828151811061598c5761598c617afd565b016020015160f81c115b156159d357602060f81b8382815181106159b2576159b2617afd565b0160200180516001600160f81b0319908116909218909116905f82901a9053505b60049190911c906159e38161819f565b9050615961565b50909392505050565b6060615a196040518061052001604052806104ed81526020016182526104ed9139615a3d565b604051602001615a2991906181b4565b604051602081830303815290604052905090565b6060610eb88260405180606001604052806040815260200161873f6040913960016168bf565b5f615a6e8284617b25565b6001600160a01b0386165f908152600b6020526040812054919250848210615a97575081615aac565b83821115615aac57615aa98483617b25565b90505b8015615b49576001600160a01b0387165f908152600b602052604081208054839290615ad9908490617b25565b9091555050604051634875485760e11b81526001600160a01b03871660048201525f60248201525f5160206182325f395f51905f52906390ea90ae9083906044015f604051808303818588803b158015615b31575f5ffd5b505af1158015615b43573d5f5f3e3d5ffd5b50505050505b5f615b548285617b25565b90508015615bcf576040515f905f5160206182325f395f51905f529083908381818185875af1925050503d805f8114615ba8576040519150601f19603f3d011682016040523d82523d5f602084013e615bad565b606091505b50509050806156d357604051630b567ce360e31b815260040160405180910390fd5b5050505050505050565b80545f90600160e01b900460ff166001816006811115615bfb57615bfb617487565b03615c095750600192915050565b82545f90615c2590600160c01b900463ffffffff166001617c50565b90506005826006811115615c3b57615c3b617487565b148015615c5a5750600d5463ffffffff808316600160b01b9092041610155b15615c69575060019392505050565b505f9392505050565b5f615c7c84615f7d565b5f5f5f615c8887611955565b925092509250825f03615ca05782935050505061411c565b6001600160a01b0387165f908152600b60205260408120819055828410615cc8575081615d45565b50825f5f5160206182325f395f51905f52615ce38386617b25565b6040515f81818185875af1925050503d805f8114615d1c576040519150601f19603f3d011682016040523d82523d5f602084013e615d21565b606091505b5050905080615d4357604051630b567ce360e31b815260040160405180910390fd5b505b858015615d5f57505f5160206182325f395f51905f523182115b15615d76575f5160206182325f395f51905f523191505b604051634875485760e11b81526001600160a01b0388166004820152602481018390525f5160206182325f395f51905f52906390ea90ae9083906044015f604051808303818588803b158015615dca575f5ffd5b505af1158015615ddc573d5f5f3e3d5ffd5b505050505081816143949190617bb0565b600d54600160b01b810463ffffffff1690600160d01b900460ff165f615e14838084614990565b9050615e208186616a39565b508054615e2d8582614747565b5f615e39856001617c50565b90505f615e47828787614906565b9050615e538189616a39565b5080549250615e628784614747565b5f615e6e876002617c50565b90505f615e7c828989614906565b9050615e88818b616a39565b5080549450615e978986614747565b600d54600160d81b900461ffff16891015615f1a57600d805461ffff8b8116600160d81b90810261ffff60d81b1984161793849055604080519382900483168085529190940490911660208301529181018b90527f74cf7ca84b30b723e8b6e3cc569ec2db21f4ba2fcc09d651e5ce6770b91552f99060600160405180910390a1505b50505050505050505050565b615f31826005615fef565b815463ffffffff60c01b1916600160c01b63ffffffff8316021782556040517f727bfc4079207401298f48a3f1a92c9b40d83e086fe5b584a7b0644fdbdb56ee90613167908490617e67565b615f8f6001600160a01b03821661577b565b6008545f03615fb1576040516315ae672760e01b815260040160405180910390fd5b6001600160a01b03165f908152600c602052604081209081556001810180546001600160a01b031916905560020180546001600160e81b0319169055565b81546001600160a01b03811690600160e01b900460ff1661603782602a5f84600681111561601f5761601f617487565b60ff16815260208101919091526040015f2090614108565b505f83600681111561604b5761604b617487565b1415801561606b5750600683600681111561606857616068617487565b14155b1561608b5761608982602a5f8660068111156130f5576130f5617487565b505b5f616095826157d3565b90505f6160a1856157d3565b90508180156160ae575080155b156160ca57602b5f81546160c19061819f565b909155506160ed565b811580156160d55750805b156160ed57602b5f81546160e890617c96565b909155505b85548590879060ff60e01b1916600160e01b83600681111561611157616111617487565b0217905550505050505050565b5f81815260018301602052604081205480156161f8575f616140600183617b25565b85549091505f9061615390600190617b25565b90508082146161b2575f865f01828154811061617157616171617afd565b905f5260205f200154905080875f01848154811061619157616191617afd565b5f918252602080832090910192909255918252600188019052604090208390555b85548690806161c3576161c36181e5565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050610eb8565b5f915050610eb8565b5092915050565b6060825160601461622c576040516333a234f960e11b815260040160405180910390fd5b604051616241905f90859085906020016181f9565b604051602081830303815290604052905092915050565b5f61626283614b14565b5f818152601060205260409020549091506001600160a01b03161561629a57604051638d12779f60e01b815260040160405180910390fd5b5f81815260106020526040902080546001600160a01b0384166001600160a01b031990911617905592915050565b5f6017826001600160a01b03163b146162e257505f919050565b5f826001600160a01b0316803b806020016040519081016040528181525f908060200190933c805190915060ef60f81b9082905f9061632357616323617afd565b01602001516001600160f81b03191614801561636657508051600160f81b908290600190811061635557616355617afd565b01602001516001600160f81b031916145b801561411c575080515f908290600290811061638457616384617afd565b01602001516001600160f81b031916149392505050565b5f60405182604081146163b657604181146163dd5750611ce3565b60208581013560ff81901c601b0190915285356040526001600160ff1b03166060526163ee565b60408501355f1a6020526040856040375b50845f526020604060805f60015afa505f6060523d60601851915080604052509392505050565b5f6001600160a01b03851615612a8057604051853b6164a5578260408114616445576041811461646c57506164df565b60208581013560ff81901c601b0190915285356040526001600160ff1b031660605261647d565b60408501355f1a6020526040856040375b50845f526020600160805f60015afa5180871860601b3d119250505f606052806040526164df565b631626ba7e60e01b80825285600483015260248201604081528460448401528486606485013760208160648701858b5afa90519091141691505b50949350505050565b60ff81165f908152600a6020526040812054816165058583614717565b9050801580616527575060ff84165f908152600a602052604090206001015481105b15612a8057604051633737b70960e11b815260048101829052602401610ee3565b600d54610100900460ff1661228357604051638dfc202b60e01b815260040160405180910390fd5b5f5f61657d858585616b3e565b90506001600160a01b0381166165d9576165d484600880545f838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b6165fc565b846001600160a01b0316816001600160a01b0316146165fc576165fc8185616c30565b6001600160a01b0385166166185761661384616cad565b612a80565b846001600160a01b0316816001600160a01b031614612a8057612a808585616d54565b6001600160a01b038082165f908152602e602090815260408083208151608081018352815460ff811680835263ffffffff61010083041695830195909552600160281b90049095169185019190915260010154606084015290036166a45761104b602c83614108565b6001600160a01b0382165f908152602e6020526040812080546001600160c81b0319168155600101556166d8602c83614108565b506060810151156115285760608101516040808301516001600160a01b03165f908152602f6020529081208054909190616713908490617bb0565b9250508190555080604001516001600160a01b03167f03346f418777de37a432a76ace912eeb3d1d63333a4f8c59df9ae07eb09732158260600151604051613c3c91815260200190565b616768816003615fef565b7fabab4191fe954f07230f7e34fd48dc0fdcbed492526cd060001cccceab22851b81604051611d309190617e67565b5f5b825181101561104b576167df60016167d96167d68685815181106167bf576167bf617afd565b602002602001015186616da290919063ffffffff16565b90565b90616dbc565b600101616799565b6001600160a01b0382165f9081526020829052604081205c61411c565b6060815f0180548060200260200160405190810160405280929190818152602001828054801561685157602002820191905f5260205f20905b81548152602001906001019080831161683d575b50505050509050919050565b5f8181526001830160205260408120546168a257508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610eb8565b505f610eb8565b6060610eb86001600160a01b0383166014616dc3565b606083515f036168dd575060408051602081019091525f815261411c565b5f8261690d576003855160046168f39190617b99565b6168fe906002617bb0565b6169089190617bd7565b616932565b60038551600261691d9190617bb0565b6169279190617bd7565b616932906004617b99565b90505f816001600160401b0381111561694d5761694d6172d8565b6040519080825280601f01601f191660200182016040528015616977576020820181803683370190505b509050600185016020820187885189016020810180515f82525b828410156169ec576003840193508351603f8160121c168701518653600186019550603f81600c1c168701518653600186019550603f8160061c168701518653600186019550603f8116870151865350600185019450616991565b905250508515616a2d57600388510660018114616a105760028114616a2357616a2b565b603d6001830353603d6002830353616a2b565b603d60018303535b505b50909695505050505050565b81545f90815b81811015616b3457836001600160a01b0316858281548110616a6357616a63617afd565b5f918252602090912001546001600160a01b031603616b2c5784616a88600184617b25565b81548110616a9857616a98617afd565b905f5260205f20015f9054906101000a90046001600160a01b0316858281548110616ac557616ac5617afd565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b0316021790555084805480616b0057616b006181e5565b5f8281526020902081015f1990810180546001600160a01b03191690550190555060019150610eb89050565b600101616a3f565b505f949350505050565b5f828152600260205260408120546001600160a01b0390811690831615616b6a57616b6a818486616f34565b6001600160a01b03811615616ba457616b855f855f5f616f98565b6001600160a01b0381165f90815260036020526040902080545f190190555b6001600160a01b03851615616bd2576001600160a01b0385165f908152600360205260409020805460010190555b5f8481526002602052604080822080546001600160a01b0319166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b5f616c3a836129f0565b5f838152600760209081526040808320546001600160a01b0388168452600690925290912091925090818314616c8f575f83815260208281526040808320548584528184208190558352600790915290208290555b5f938452600760209081526040808620869055938552525081205550565b6008545f90616cbe90600190617b25565b5f8381526009602052604081205460088054939450909284908110616ce557616ce5617afd565b905f5260205f20015490508060088381548110616d0457616d04617afd565b5f918252602080832090910192909255828152600990915260408082208490558582528120556008805480616d3b57616d3b6181e5565b600190038181905f5260205f20015f9055905550505050565b5f6001616d60846129f0565b616d6a9190617b25565b6001600160a01b039093165f908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b03165f9081526020919091526040902090565b80825d5050565b6060825f616dd2846002617b99565b616ddd906002617bb0565b6001600160401b03811115616df457616df46172d8565b6040519080825280601f01601f191660200182016040528015616e1e576020820181803683370190505b509050600360fc1b815f81518110616e3857616e38617afd565b60200101906001600160f81b03191690815f1a905350600f60fb1b81600181518110616e6657616e66617afd565b60200101906001600160f81b03191690815f1a9053505f616e88856002617b99565b616e93906001617bb0565b90505b6001811115616f0a576f181899199a1a9b1b9c1cb0b131b232b360811b83600f1660108110616ec757616ec7617afd565b1a60f81b828281518110616edd57616edd617afd565b60200101906001600160f81b03191690815f1a90535060049290921c91616f038161819f565b9050616e96565b508115612a805760405163e22e27eb60e01b81526004810186905260248101859052604401610ee3565b616f3f83838361709c565b61104b576001600160a01b038316616f6d57604051637e27328960e01b815260048101829052602401610ee3565b60405163177e802f60e01b81526001600160a01b038316600482015260248101829052604401610ee3565b8080616fac57506001600160a01b03821615155b1561706d575f616fbb84613f0d565b90506001600160a01b03831615801590616fe75750826001600160a01b0316816001600160a01b031614155b8015616ffa5750616ff88184613b9b565b155b156170235760405163a9fbf51f60e01b81526001600160a01b0384166004820152602401610ee3565b811561706b5783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b50505f90815260046020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b5f6001600160a01b03831615801590612a805750826001600160a01b0316846001600160a01b031614806170d557506170d58484613b9b565b80612a805750505f908152600460205260409020546001600160a01b03908116911614919050565b6040805160e0810182525f8082526020820181905291810182905290606082019081525f602082018190526040820181905260609091015290565b6001600160e01b031981168114611572575f5ffd5b5f6020828403121561715d575f5ffd5b813561411c81617138565b5f5f83601f840112617178575f5ffd5b5081356001600160401b0381111561718e575f5ffd5b6020830191508360208260061b85010111156171a8575f5ffd5b9250929050565b5f5f602083850312156171c0575f5ffd5b82356001600160401b038111156171d5575f5ffd5b6171e185828601617168565b90969095509350505050565b80356001600160a01b03811681146135ac575f5ffd5b5f60208284031215617213575f5ffd5b61411c826171ed565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f61411c602083018461721c565b5f6020828403121561726c575f5ffd5b5035919050565b5f5f60408385031215617284575f5ffd5b61728d836171ed565b946020939093013593505050565b5f5f83601f8401126172ab575f5ffd5b5081356001600160401b038111156172c1575f5ffd5b6020830191508360208285010111156171a8575f5ffd5b634e487b7160e01b5f52604160045260245ffd5b5f82601f8301126172fb575f5ffd5b81356001600160401b03811115617314576173146172d8565b604051601f8201601f19908116603f011681016001600160401b0381118282101715617342576173426172d8565b604052818152838201602001851015617359575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f60208284031215617385575f5ffd5b604051602081016001600160401b03811182821017156173a7576173a76172d8565b60405290508082356001600160401b038111156173c2575f5ffd5b6173ce858286016172ec565b8252505092915050565b5f5f5f5f5f5f5f60a0888a0312156173ee575f5ffd5b87356001600160401b03811115617403575f5ffd5b61740f8a828b0161729b565b90985096505060208801356001600160401b0381111561742d575f5ffd5b6174398a828b01617375565b955050617448604089016171ed565b935060608801356001600160401b03811115617462575f5ffd5b61746e8a828b0161729b565b989b979a50959894979596608090950135949350505050565b634e487b7160e01b5f52602160045260245ffd5b600781106174b757634e487b7160e01b5f52602160045260245ffd5b9052565b60018060a01b03815116825263ffffffff602082015116602083015263ffffffff604082015116604083015260608101516174f9606084018261749b565b5060808101511515608083015260ff60a08201511660a083015260c081015161104b60c084018260ff169052565b60e08101610eb882846174bb565b5f5f5f60608486031215617547575f5ffd5b617550846171ed565b925061755e602085016171ed565b929592945050506040919091013590565b5f6020828403121561757f575f5ffd5b81356007811061411c575f5ffd5b602080825282518282018190525f918401906040840190835b818110156175cf576175b98385516174bb565b6020939093019260e092909201916001016175a6565b509095945050505050565b8015158114611572575f5ffd5b5f602082840312156175f7575f5ffd5b813561411c816175da565b5f5f5f60408486031215617614575f5ffd5b83356001600160401b03811115617629575f5ffd5b6176358682870161729b565b90945092505060208401356001600160401b03811115617653575f5ffd5b61765f86828701617375565b9150509250925092565b63ffffffff81168114611572575f5ffd5b5f6020828403121561768a575f5ffd5b813561411c81617669565b5f8151808452602084019350602083015f5b828110156176ce5781516001600160a01b03168652602095860195909101906001016176a7565b5093949350505050565b602081525f825160c060208401526176f360e0840182617695565b9050602084015160408401526001600160401b03604085015116606084015263ffffffff606085015116608084015263ffffffff60808501511660a084015260ff60a08501511660c08401528091505092915050565b5f60208284031215617759575f5ffd5b813561ffff8116811461411c575f5ffd5b5f5f6020838503121561777b575f5ffd5b82356001600160401b03811115617790575f5ffd5b6171e18582860161729b565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b828110156177f357603f198786030184526177de85835161721c565b945060209384019391909101906001016177c2565b50929695505050505050565b5f5f60208385031215617810575f5ffd5b82356001600160401b03811115617825575f5ffd5b8301601f81018513617835575f5ffd5b80356001600160401b0381111561784a575f5ffd5b8560208260051b840101111561785e575f5ffd5b6020919091019590945092505050565b60ff60f81b8816815260e060208201525f61788c60e083018961721c565b828103604084015261789e818961721c565b606084018890526001600160a01b038716608085015260a0840186905283810360c0850152845180825260208087019350909101905f5b818110156178f35783518352602093840193909201916001016178d5565b50909b9a5050505050505050505050565b602081525f61411c6020830184617695565b5f5f60408385031215617927575f5ffd5b617930836171ed565b91506020830135617940816175da565b809150509250929050565b803560ff811681146135ac575f5ffd5b5f6020828403121561796b575f5ffd5b61411c8261794b565b5f5f5f5f60808587031215617987575f5ffd5b84356001600160401b0381111561799c575f5ffd5b6179a8878288016172ec565b9450506179b7602086016171ed565b92506179c5604086016171ed565b9396929550929360600135925050565b5f5f5f5f608085870312156179e8575f5ffd5b6179f1856171ed565b93506179ff602086016171ed565b92506040850135915060608501356001600160401b03811115617a20575f5ffd5b617a2c878288016172ec565b91505092959194509250565b5f6080828403128015617a49575f5ffd5b509092915050565b5f5f60408385031215617a62575f5ffd5b617a6b836171ed565b9150617a796020840161794b565b90509250929050565b5f5f60408385031215617a93575f5ffd5b617a9c836171ed565b9150617a79602084016171ed565b6001600160a01b038816815263ffffffff87811660208301528616604082015260e08101617adb606083018761749b565b931515608082015260ff92831660a0820152911660c090910152949350505050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b81810381811115610eb857610eb8617b11565b604081016001600160a01b03617b4d846171ed565b168252602092830135929091019190915290565b600181811c90821680617b7557607f821691505b602082108103617b9357634e487b7160e01b5f52602260045260245ffd5b50919050565b8082028115828204841417610eb857610eb8617b11565b80820180821115610eb857610eb8617b11565b634e487b7160e01b5f52601260045260245ffd5b5f82617be557617be5617bc3565b500490565b96875260208701959095526001600160a01b03938416604087015291909216606085015260ff90911660808401526001600160401b031660a083015260c082015260e00190565b6001600160401b038181168382160190811115610eb857610eb8617b11565b63ffffffff8181168382160190811115610eb857610eb8617b11565b63ffffffff8281168282160390811115610eb857610eb8617b11565b60208101610eb8828461749b565b5f60018201617ca757617ca7617b11565b5060010190565b5f60ff821660ff8103617cc357617cc3617b11565b60010192915050565b813581556020820135600182015560408201356002820155600381016060830135617cf681617669565b815463ffffffff191663ffffffff919091161790555050565b5f6001600160401b0382166001600160401b038103617cc357617cc3617b11565b5f81518060208401855e5f93019283525090919050565b7f7b226e616d65223a202254656c636f696e2d4e6574776f726b20436f6e73656e8152651cdd5cd3919560d21b60208201525f617d876026830185617d30565b7f222c20226465736372697074696f6e223a2022455243373231204e465420776881527f6f7365206f776e657273686970206c656467657220726570726573656e74732060208201527f746865207065726d697373696f6e65642077686974656c69737420666f72207660408201527530b634b230ba37b9399116101134b6b0b3b2911d101160511b6060820152617e226076820185617d30565b61227d60f01b815260020195945050505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c00000081525f61411c601d830184617d30565b81546001600160a01b038116825263ffffffff60a082901c8116602084015260c082901c16604083015260e0820190617ea96060840160ff8360e01c1661749b565b617ebd6080840160ff8360e81c1615159052565b60f081901c60ff1660a084015260f881901c60c0840152616201565b606081525f617eeb606083018661721c565b8281036020840152617efd818661721c565b90508281036040840152614a27818561721c565b5f61411c8284617d30565b5f60208284031215617f2c575f5ffd5b815161411c816175da565b602081525f8251602080840152612a80604084018261721c565b5f5b8281101561104b575f82820155600101617f53565b601f82111561104b578282111561104b57805f5260205f20601f840160051c6020851015617f9357505f5b61121181601f860160051c03828401617f51565b6001600160401b03831115617fbe57617fbe6172d8565b617fd283617fcc8354617b61565b83617f68565b5f601f841160018114618003575f8515617fec5750838201355b5f19600387901b1c1916600186901b178355611211565b5f83815260208120601f198716915b828110156180325786850135825560209485019460019092019101618012565b508682101561804e575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b60ff8181168382160190811115610eb857610eb8617b11565b5f60ff83168061808b5761808b617bc3565b8060ff84160691505092915050565b60ff8281168282160390811115610eb857610eb8617b11565b5f63ffffffff821663ffffffff8103617cc357617cc3617b11565b81516001600160401b038111156180e7576180e76172d8565b600160401b8111156180fb576180fb6172d8565b81548183558082101561811f57825f528160205f200161811d83830382617f51565b505b5060208301825f5260205f205f5b83811015613ed15782516001600160a01b03168282015560209092019160010161812d565b6001600160a01b03858116825284166020820152604081018390526080606082018190525f90614a279083018461721c565b5f60208284031215618194575f5ffd5b815161411c81617138565b5f816181ad576181ad617b11565b505f190190565b7f646174613a696d6167652f7376672b786d6c3b6261736536342c00000000000081525f61411c601a830184617d30565b634e487b7160e01b5f52603160045260245ffd5b6001600160e81b0319841681525f6182146003830185617d30565b60609390931b6001600160601b031916835250506014019291505056fe00000000000000000000000007a07a07a07a07a07a07a07a07a07a07a07a07a03c7376672077696474683d22373922206865696768743d223830222076696577426f783d22302030203739203830222066696c6c3d226e6f6e652220786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f737667223e203c6d61736b2069643d226d61736b305f3834395f3334313722207374796c653d226d61736b2d747970653a616c70686122206d61736b556e6974733d227573657253706163654f6e5573652220783d22302220793d2230222077696474683d22373922206865696768743d223830223e203c726563742077696474683d2237382e30303522206865696768743d223830222066696c6c3d2223433443344334222f3e203c2f6d61736b3e203c67206d61736b3d2275726c28236d61736b305f3834395f3334313729223e203c7265637420783d2231372e393534362220793d2231382e33353435222077696474683d2234322e3239343322206865696768743d2234332e32393138222066696c6c3d227768697465222f3e203c7061746820643d224d37342e323336392032312e393839324337362e363930382032342e303331352037382e323338392032382e323537372037372e363937392033312e333733334c37322e343136362036312e333235334337312e3836362036342e343437352036382e393539322036372e383739382036352e393632392036382e393631324c33372e313934372037392e333334344333342e313938342038302e343135372032392e373432312037392e363239392032372e323936342037372e3538394c332e3831312035382e3030323143312e33353730382035352e39353938202d302e31393233382035312e3734313720302e3335383134382034382e363139354c352e36333935312031382e3636373443362e31393030342031352e3534353220392e30393638372031322e313132392031322e303933322031312e303331364c34302e3835393920302e3636363435334334332e38353632202d302e3431343835372034382e3331323520302e3337303930392035302e3735383320322e343131384c37342e323336392032312e393839325a4d34392e373634352033352e343336394c35302e393336342032392e333531334c33392e393531372032392e333638374c34312e3531362032312e333432344c33372e393538332032312e333432344333372e393538332032312e333432342033342e363332382032372e323930312032372e333030362033302e323031394c32362e323839392033352e343530334c33312e303933362033352e34364333312e303933362033352e34362032392e343637342034332e303032392032382e393331362034352e373835344332372e353637372035322e383638322033302e393830362035372e383933392033362e323238312035372e383933394333382e383630362035372e383933392034312e3831372035372e383933392034352e303937322035372e383933394c34362e363532342035312e313636364334362e323734322035312e313636362034332e383031332035312e313636362033392e323333362035312e313636364333352e393336342035312e313636362033362e313039392034392e333138392033362e373433312034362e303330354c33382e373833382033352e343333334c34392e373634352033352e343336395a222066696c6c3d2223313443384646222f3e203c2f673e203c2f7376673e4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa164736f6c6343000823000a","sourceMap":"1341:77521:56:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1753:36;;;;;;;;;;;;;;;;;;;160:25:73;;;148:2;133:18;1753:36:56;;;;;;;;1435:222:30;;;;;;;;;;-1:-1:-1;1435:222:30;;;;;:::i;:::-;;:::i;:::-;;;843:14:73;;836:22;818:41;;806:2;791:18;1435:222:30;678:187:73;10094:1354:56;;;;;;;;;;-1:-1:-1;10094:1354:56;;;;;:::i;:::-;;:::i;:::-;;22934:249;;;;;;;;;;-1:-1:-1;22934:249:56;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;2364:89:27:-;;;;;;;;;;;;;:::i;43946:136:56:-;;;;;;;;;;-1:-1:-1;43946:136:56;;;;;:::i;:::-;;:::i;3496:154:27:-;;;;;;;;;;-1:-1:-1;3496:154:27;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;3241:32:73;;;3223:51;;3211:2;3196:18;3496:154:27;3077:203:73;6688:194:58;;;;;;;;;;-1:-1:-1;6688:194:58;;;;;:::i;:::-;;:::i;7251:2798:56:-;;;;;;;;;;-1:-1:-1;7251:2798:56;;;;;:::i;:::-;;:::i;32747:500::-;;;;;;;;;;;;;:::i;37416:644::-;;;;;;;;;;-1:-1:-1;37416:644:56;;;;;:::i;:::-;;:::i;28347:1893::-;;;;;;:::i;:::-;;:::i;25848:481::-;;;;;;;;;;-1:-1:-1;25848:481:56;;;;;:::i;:::-;;:::i;:::-;;;;7248:25:73;;;7304:2;7289:18;;7282:34;;;;7332:18;;;7325:34;7236:2;7221:18;25848:481:56;7046:319:73;2062:102:30;;;;;;;;;;-1:-1:-1;2140:10:30;:17;2062:102;;23632:397:56;;;;;;;;;;-1:-1:-1;23632:397:56;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;40542:866::-;;;;;;;;;;;;;:::i;19336:118::-;;;;;;;;;;;;;:::i;6344:239:58:-;;;;;;;;;;-1:-1:-1;6344:239:58;;;;;:::i;22010:401:56:-;;;;;;;;;;-1:-1:-1;22010:401:56;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;44127:185::-;;;;;;;;;;-1:-1:-1;44127:185:56;;;;;:::i;:::-;;:::i;33921:393::-;;;;;;;;;;-1:-1:-1;33921:393:56;;;;;:::i;:::-;;:::i;1736:255:30:-;;;;;;;;;;-1:-1:-1;1736:255:30;;;;;:::i;:::-;;:::i;27431:877:56:-;;;;;;:::i;:::-;;:::i;453:92:59:-;;;;;;;;;;;;-1:-1:-1;;;;;453:92:59;;43683:224:56;;;:::i;20611:1137::-;;;;;;;;;;-1:-1:-1;20611:1137:56;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;1918:29::-;;;;;;;;;;-1:-1:-1;1918:29:56;;;;;:::i;:::-;;:::i;:::-;;;;13097:25:73;;;-1:-1:-1;;;;;13158:31:73;;;13153:2;13138:18;;13131:59;13238:10;13226:23;;;13206:18;;;13199:51;;;;13286:23;13281:2;13266:18;;13259:51;13359:4;13347:17;13341:3;13326:19;;13319:46;13084:3;13069:19;1918:29:56;12848:523:73;24826:130:56;;;;;;;;;;-1:-1:-1;24826:130:56;;;;;:::i;:::-;;:::i;73510:65::-;;;;;;;;;;;;;:::i;4786:132:27:-;;;;;;;;;;-1:-1:-1;4786:132:27;;;;;:::i;:::-;;:::i;30540:2162:56:-;;;;;;:::i;:::-;;:::i;3879:51::-;;;;;;;;;;-1:-1:-1;3879:51:56;;;;;:::i;:::-;;;;;;;;;;;;;;2236:226:30;;;;;;;;;;-1:-1:-1;2236:226:30;;;;;:::i;:::-;;:::i;4106:34:56:-;;;;;;;;;;-1:-1:-1;4106:34:56;;;;;;;;1953:35;;;;;;;;;;-1:-1:-1;1953:35:56;;;;;:::i;:::-;;:::i;1850:84:39:-;;;;;;;;;;-1:-1:-1;1920:7:39;;;;;;;1850:84;;18438:570:56;;;;;;;;;;-1:-1:-1;18438:570:56;;;;;:::i;:::-;;:::i;2184:118:27:-;;;;;;;;;;-1:-1:-1;2184:118:27;;;;;:::i;:::-;;:::i;19918:311:56:-;;;;;;;;;;;;;:::i;:::-;;;13825:4:73;13813:17;;;13795:36;;13783:2;13768:18;19918:311:56;13653:184:73;42437:405:56;;;;;;;;;;-1:-1:-1;42437:405:56;;;;;:::i;:::-;;:::i;24074:707::-;;;;;;;;;;-1:-1:-1;24074:707:56;;;;;:::i;:::-;;:::i;23228:359::-;;;;;;;;;;-1:-1:-1;23228:359:56;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;25001:477::-;;;;;;;;;;-1:-1:-1;25001:477:56;;;;;:::i;:::-;;:::i;1919:208:27:-;;;;;;;;;;-1:-1:-1;1919:208:27;;;;;:::i;:::-;;:::i;2293:101:20:-;;;;;;;;;;;;;:::i;25517:292:56:-;;;;;;;;;;-1:-1:-1;25517:292:56;;;;;:::i;:::-;;:::i;5571:1635::-;;;;;;;;;;-1:-1:-1;5571:1635:56;;;;;:::i;:::-;;:::i;4261:272:58:-;;;;;;;;;;;;;:::i;:::-;;;;;;15880:13:73;;15862:32;;15950:4;15938:17;;;15932:24;15910:20;;;15903:54;16013:4;16001:17;;;15995:24;15973:20;;;15966:54;16080:4;16068:17;;;16062:24;16088:10;16058:41;16036:20;;;16029:71;;;;15849:3;15834:19;;15655:451;73273:61:56;;;;;;;;;;;;;:::i;11383:596:51:-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;1198:94:58:-;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1198:94:58;;42881:763:56;;;;;;;;;;-1:-1:-1;42881:763:56;;;;;:::i;:::-;;:::i;21793:172::-;;;;;;;;;;-1:-1:-1;21793:172:56;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;1638:85:20:-;;;;;;;;;;-1:-1:-1;1710:6:20;;;;;-1:-1:-1;;;;;1710:6:20;1638:85;;2517:93:27;;;;;;;;;;;;;:::i;22456:433:56:-;;;;;;;;;;-1:-1:-1;22456:433:56;;;;;:::i;:::-;;:::i;6987:208:58:-;;;;;;;;;;-1:-1:-1;6987:208:58;;;;;:::i;4095:126::-;;;;;;;;;;-1:-1:-1;4095:126:58;;;;;:::i;:::-;;:::i;38710:131:56:-;;;;;;;;;;;;;:::i;16870:1216::-;;;;;;;;;;;;;:::i;26369:972::-;;;;;;;;;;-1:-1:-1;26369:972:56;;;;;:::i;:::-;;:::i;38100:516::-;;;;;;;;;;;;;:::i;4984:233:27:-;;;;;;;;;;-1:-1:-1;4984:233:27;;;;;:::i;:::-;;:::i;20274:92:56:-;;;;;;;;;;-1:-1:-1;20347:12:56;;-1:-1:-1;;;20347:12:56;;;;20274:92;;20042:10:73;20030:23;;;20012:42;;20000:2;19985:18;20274:92:56;19868:192:73;20411:155:56;;;;;;;;;;;;;:::i;3607:74::-;;;;;;;;;;-1:-1:-1;3607:74:56;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;3607:74:56;;;-1:-1:-1;;;;;3607:74:56;;;;;;;;20320:4:73;20308:17;;;20290:36;;20374:10;20362:23;;;20357:2;20342:18;;20335:51;-1:-1:-1;;;;;20422:32:73;;;20402:18;;;20395:60;;;;20486:2;20471:18;;20464:34;20277:3;20262:19;3607:74:56;20065:439:73;78265:595:56;;;;;;;;;;-1:-1:-1;78265:595:56;;;;;:::i;:::-;;:::i;30280:215::-;;;;;;;;;;;;;:::i;7251:672:58:-;;;;;;;;;;-1:-1:-1;7251:672:58;;;;;:::i;:::-;;:::i;34354:3022:56:-;;;;;;:::i;:::-;;:::i;3927:153:27:-;;;;;;;;;;-1:-1:-1;3927:153:27;;;;;:::i;:::-;;:::i;19053:104:56:-;;;;;;;;;;-1:-1:-1;19133:17:56;;-1:-1:-1;;;19133:17:56;;;;19053:104;;21450:6:73;21438:19;;;21420:38;;21408:2;21393:18;19053:104:56;21276:188:73;18131:262:56;;;;;;;;;;-1:-1:-1;18131:262:56;;;;;:::i;:::-;;:::i;2543:215:20:-;;;;;;;;;;-1:-1:-1;2543:215:20;;;;;:::i;:::-;;:::i;41447:904:56:-;;;;;;;;;;-1:-1:-1;41447:904:56;;;;;:::i;:::-;;:::i;1795:51::-;;;;;;;;;;-1:-1:-1;1795:51:56;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;1795:51:56;;;;-1:-1:-1;;;1795:51:56;;;;;-1:-1:-1;;;1795:51:56;;;;;;;-1:-1:-1;;;1795:51:56;;;;;-1:-1:-1;;;1795:51:56;;;;;-1:-1:-1;;;1795:51:56;;;;;-1:-1:-1;;;1795:51:56;;;;;;;;;;;;;;;;;;:::i;1435:222:30:-;1537:4;-1:-1:-1;;;;;;1560:50:30;;-1:-1:-1;;;1560:50:30;;:90;;;1614:36;1638:11;1614:23;:36::i;:::-;1553:97;1435:222;-1:-1:-1;;1435:222:30:o;10094:1354:56:-;592:10:59;-1:-1:-1;;;;;592:28:59;588:67;;629:26;;-1:-1:-1;;;629:26:59;;644:10;629:26;;;3223:51:73;3196:18;;629:26:59;;;;;;;;588:67;10190:9:56::1;10185:1257;10201:18:::0;;::::1;10185:1257;;;10240:20;10263:7;;10271:1;10263:10;;;;;;;:::i;:::-;;;::::0;;;::::1;::::0;-1:-1:-1;10512:15:56::1;::::0;-1:-1:-1;10538:22:56::1;;::::0;::::1;10263:10:::0;10538:22:::1;:::i;:::-;10512:49:::0;-1:-1:-1;;;;;;10579:12:56;::::1;::::0;;:44:::1;;-1:-1:-1::0;;;;;;10595:28:56;;::::1;;10579:44;10575:58;;;10625:8;;;;10575:58;10818:33;10828:22;;::::0;::::1;:5:::0;:22:::1;:::i;10818:33::-;10814:47;;;10853:8;;;;10814:47;10915:12;::::0;::::1;::::0;::::1;::::0;10880:8:::1;::::0;:32:::1;::::0;10889:22:::1;::::0;10915:5;10889:22:::1;:::i;:::-;-1:-1:-1::0;;;;;10880:32:56::1;-1:-1:-1::0;;;;;10880:32:56::1;;;;;;;;;;;;;:47;10876:513;;;11221:12;::::0;::::1;::::0;::::1;::::0;11185:8:::1;::::0;:32:::1;::::0;11194:22:::1;::::0;11221:5;11194:22:::1;:::i;:::-;-1:-1:-1::0;;;;;11185:32:56::1;-1:-1:-1::0;;;;;11185:32:56::1;;;;;;;;;;;;;:48;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;10876:513:56::1;::::0;-1:-1:-1;10876:513:56::1;;11336:38;11351:22;;::::0;::::1;:5:::0;:22:::1;:::i;:::-;11336:14;:38::i;:::-;11408:23;11425:5;11408:23;;;;;;:::i;:::-;;;;;;;;10226:1216;;10185:1257;10221:3;;10185:1257;;;;10094:1354:::0;;:::o;22934:249::-;-1:-1:-1;;;;;23049:28:56;;23027:19;23049:28;;;:10;:28;;;;;23027:50;;23003:12;;23027:19;23049:28;23027:50;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23091:6;:13;23108:1;23091:18;23087:66;;23118:35;;-1:-1:-1;;;23118:35:56;;-1:-1:-1;;;;;3241:32:73;;23118:35:56;;;3223:51:73;3196:18;;23118:35:56;3077:203:73;2364:89:27;2409:13;2441:5;2434:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2364:89;:::o;43946:136:56:-;1531:13:20;:11;:13::i;:::-;44028:47:56::1;::::0;-1:-1:-1;;;44028:47:56;;::::1;::::0;::::1;23555:25:73::0;;;44064:10:56::1;23596:18:73::0;;;23589:60;-1:-1:-1;;;;;;;;;;;1249:42:58;44028:27:56::1;::::0;23528:18:73;;44028:47:56::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43946:136:::0;:::o;3496:154:27:-;3563:7;3582:22;3596:7;3582:13;:22::i;:::-;-1:-1:-1;6033:7:27;6059:24;;;:15;:24;;;;;;-1:-1:-1;;;;;6059:24:27;3622:21;5963:127;6688:194:58;6858:17;;-1:-1:-1;;;6858:17:58;;;;;;;;;;;7251:2798:56;592:10:59;-1:-1:-1;;;;;592:28:59;588:67;;629:26;;-1:-1:-1;;;629:26:59;;644:10;629:26;;;3223:51:73;3196:18;;629:26:59;3077:203:73;588:67:59;7439:19:56::1;::::0;7509:11;-1:-1:-1;;;;;7495:33:56;::::1;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;7495:33:56::1;;7468:60;;7543:9;7538:1531;7554:22:::0;;::::1;7538:1531;;;7597:26;7626:11;;7638:1;7626:14;;;;;;;:::i;:::-;;;;;;7597:43;;7658:6;:27;;;7689:1;7658:32:::0;7654:46:::1;;7692:8;;;7654:46;7939:16;7966:23;;::::0;::::1;:6:::0;:23:::1;:::i;:::-;7939:51:::0;-1:-1:-1;;;;;;8008:13:56;::::1;::::0;;:46:::1;;-1:-1:-1::0;;;;;;8025:29:56;;::::1;;8008:46;8004:60;;;8056:8;;;;8004:60;8249:34;8259:23;;::::0;::::1;:6:::0;:23:::1;:::i;8249:34::-;8245:48;;;8285:8;;;;8245:48;8308:21;8332:10;8308:21:::0;8343:23:::1;;::::0;::::1;:6:::0;:23:::1;:::i;:::-;-1:-1:-1::0;;;;;8332:35:56::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;-1:-1:-1;8332:35:56;;;:48;-1:-1:-1;;;8332:48:56;::::1;;;8720:25:::0;;;:8:::1;:25:::0;;;;;:37;8332:48;;-1:-1:-1;8720:37:56;;8789:8:::1;::::0;-1:-1:-1;;8798:23:56::1;::::0;;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;;;;;8789:33:56::1;-1:-1:-1::0;;;;;8789:33:56::1;;;;;;;;;;;;;8771:51;;8836:19;8868:18;8858:7;:28;:59;;8899:18;8858:59;;;8889:7;8858:59;8836:81:::0;-1:-1:-1;8931:14:56::1;8948:41;8962:27;::::0;::::1;;8836:81:::0;8948:41:::1;:::i;:::-;8931:58:::0;-1:-1:-1;9004:21:56::1;8931:58:::0;9004:21;::::1;:::i;:::-;;;9052:6;9039:7;9047:1;9039:10;;;;;;;;:::i;:::-;;;;;;:19;;;::::0;::::1;7583:1486;;;;;;;7538:1531;7578:3;;7538:1531;;;;9083:11;9098:1;9083:16:::0;9079:29:::1;;9101:7;;7251:2798:::0;;:::o;9079:29::-:1;9200:21;9224;:19;:21::i;:::-;:35;;;9200:59;;9269:34;9322:21;;9306:13;:37;;;;:::i;:::-;9269:74;;9427:25;9467:9;9462:442;9478:22:::0;;::::1;9462:442;;;9638:20;9705:11;9691:7;9699:1;9691:10;;;;;;;;:::i;:::-;;;;;;;9662:26;:39;;;;:::i;:::-;9661:55;;;;:::i;:::-;9638:78:::0;-1:-1:-1;9735:16:56;;9731:163:::1;;9816:12;9771:8;:41;9780:11;;9792:1;9780:14;;;;;;;:::i;:::-;:31;::::0;::::1;:14;::::0;;::::1;;:31:::0;;::::1;::::0;-1:-1:-1;9780:31:56::1;:::i;:::-;-1:-1:-1::0;;;;;9771:41:56::1;-1:-1:-1::0;;;;;9771:41:56::1;;;;;;;;;;;;;:57;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;9846:33:56::1;::::0;-1:-1:-1;9867:12:56;9846:33;::::1;:::i;:::-;;;9731:163;-1:-1:-1::0;9502:3:56::1;;9462:442;;;-1:-1:-1::0;9996:46:56::1;10025:17:::0;9996:26;:46:::1;:::i;:::-;9972:21;:70:::0;-1:-1:-1;;;;;665:1:59::1;7251:2798:56::0;;:::o;32747:500::-;1474:19:39;:17;:19::i;:::-;32899:35:56::1;32923:10;32899:23;:35::i;:::-;;32990:57;33012:10;33024:22;32990:21;:57::i;:::-;33103:10;33058:31;33092:22:::0;;;:10:::1;:22;::::0;;;;33227:12:::1;::::0;33199:41:::1;::::0;33092:22;;-1:-1:-1;;;33227:12:56;::::1;;;33199:16;:41::i;:::-;32799:448;32747:500::o:0;37416:644::-;1474:19:39;:17;:19::i;:::-;1635:9:54::1;1610:22;1604:29;1601:44:::0;1598:158:::1;;1677:10;1671:4;1664:24;1737:4;1731;1724:18;1598:158;1800:9;1776:22;1769:41;37597:39:56::2;37619:16;37597:21;:39::i;:::-;-1:-1:-1::0;;;;;;37690:39:56;;::::2;37647:40;37690:39:::0;;;:21:::2;:39;::::0;;;;;;;37647:82;;::::2;::::0;::::2;::::0;;;;::::2;::::0;::::2;::::0;;;::::2;;::::0;::::2;;::::0;;::::2;::::0;;;;-1:-1:-1;;;37647:82:56;::::2;::::0;;::::2;::::0;;;;;;;;::::2;::::0;;;;;37743:26;;37739:63:::2;;37778:24;;-1:-1:-1::0;;;37778:24:56::2;;;;;;;;;;;37739:63;-1:-1:-1::0;;;;;37820:39:56;::::2;;::::0;;;:21:::2;:39;::::0;;;;37813:46;;-1:-1:-1;;;;;;37813:46:56;;;;::::2;::::0;37869::::2;:21;37842:16:::0;37869:28:::2;:46::i;:::-;-1:-1:-1::0;37929:14:56::2;::::0;::::2;::::0;:18;37925:68:::2;;37949:44;37962:7;:14;;;37978:7;:14;;;37949:12;:44::i;:::-;38009;::::0;-1:-1:-1;;;;;38009:44:56;::::2;::::0;::::2;::::0;;;::::2;37521:539;1937:10:54::1;1913:22;1906:42;37416:644:56::0;:::o;28347:1893::-;1474:19:39;:17;:19::i;:::-;28767:21:56::1;28791:72;28816:17;28835:16;28853:9;;28791:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;28791:24:56::1;::::0;-1:-1:-1;;;28791:72:56:i:1;:::-;28767:96;;28984:22;29009:21;:19;:21::i;:::-;:34;;;28984:59;;29053:16;29072:45;29089:9;29100:16;29072;:45::i;:::-;29053:64;;29127:41;29151:16;29127:23;:41::i;:::-;;29230:66;29252:16;29270:25;29230:21;:66::i;:::-;-1:-1:-1::0;;;;;29321:29:56;::::1;29306:12;29321:29:::0;;;:11:::1;:29;::::0;;;;:35:::1;;::::0;-1:-1:-1;;;;;;;;29321:35:56;;::::1;;29465:7;1710:6:20::0;;-1:-1:-1;;;;;1710:6:20;;;;;;1638:85;29465:7:56::1;-1:-1:-1::0;;;;;29451:21:56::1;:10;-1:-1:-1::0;;;;;29451:21:56::1;;29447:568;;29510:8;29492:15;:26;29488:66;;;29527:27;::::0;-1:-1:-1;;;29527:27:56;;::::1;::::0;::::1;160:25:73::0;;;133:18;;29527:27:56::1;14:177:73::0;29488:66:56::1;29568:18;1417:156:58;29669:13:56;29684:16;29702:10;29714:16;29732:5;29739:8;29616:149;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;29589:190;;;;;;29568:211;;29793:14;29810:26;29825:10;29810:14;:26::i;:::-;29793:43;;29855:78;29882:16;29900:6;29908:24;;29855:26;:78::i;:::-;29850:155;;29960:30;::::0;-1:-1:-1;;;29960:30:56;;-1:-1:-1;;;;;3241:32:73;;29960:30:56::1;::::0;::::1;3223:51:73::0;3196:18;;29960:30:56::1;3077:203:73::0;29850:155:56::1;29474:541;;29447:568;30069:84;;;;;;;;30080:13;30069:84;;;;30095:16;-1:-1:-1::0;;;;;30069:84:56::1;;;;;30113:10;-1:-1:-1::0;;;;;30069:84:56::1;;;;;30125:16;30069:84;;;;;;30143:5;30151:1;30143:9;;;;:::i;:::-;-1:-1:-1::0;;;;;30069:84:56;;::::1;::::0;;;-1:-1:-1;;;;;30025:29:56;;::::1;;::::0;;;:11:::1;:29;::::0;;;;;;;;:128;;;;;;::::1;::::0;::::1;::::0;::::1;::::0;;-1:-1:-1;;;;;;30025:128:56::1;::::0;;::::1;::::0;;;::::1;::::0;;;;::::1;::::0;::::1;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;;;;::::1;-1:-1:-1::0;;;;;;30025:128:56;;;;;;;-1:-1:-1;;;30025:128:56::1;::::0;;::::1;::::0;;;::::1;::::0;;;::::1;-1:-1:-1::0;;;;30025:128:56::1;-1:-1:-1::0;;;30025:128:56;;;::::1;::::0;;;::::1;;::::0;;30163:70:::1;30177:9:::0;;30025:29;30206:16;30224:8;30163:13:::1;:70::i;:::-;28647:1593;;;;28347:1893:::0;;;;;;;:::o;25848:481::-;-1:-1:-1;;;;;25995:28:56;;25933:7;25995:28;;;:10;:28;;;;;;;;:41;-1:-1:-1;;;25995:41:56;;;;26075:26;;;:8;:26;;;;;:38;25933:7;;;;;26141:49;25995:28;26075:38;26141:11;:49::i;:::-;-1:-1:-1;;;;;26229:26:56;;;;26200;26229;;;:8;:26;;;;;;;26294:18;;;-1:-1:-1;25848:481:56;;-1:-1:-1;;;;25848:481:56:o;23632:397::-;23701:20;;:::i;:::-;-1:-1:-1;;;;;23762:28:56;;23733:26;23762:28;;;:10;:28;;;;;23884:14;;-1:-1:-1;;;23884:14:56;;;;23879:122;;23949:41;23973:16;23949:23;:41::i;:::-;;23879:122;24011:11;;;;;;;;;;-1:-1:-1;;;;;24011:11:56;;;;;-1:-1:-1;;;24011:11:56;;;;;;;;-1:-1:-1;;;24011:11:56;;;;;;;;;;;24018:4;;24011:11;;;;;-1:-1:-1;;;24011:11:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;;24011:11:56;;;;;;;;;;-1:-1:-1;;;24011:11:56;;;;;;;;-1:-1:-1;;;24011:11:56;;;;;;;;;;23632:397;-1:-1:-1;;;23632:397:56:o;40542:866::-;1474:19:39;:17;:19::i;:::-;40695:35:56::1;40719:10;40695:23;:35::i;:::-;;40787:17;40807:25;19849:22:::0;;;19765:113;40807:25:::1;40876:12;::::0;40787:45;;-1:-1:-1;40842:21:56::1;::::0;40866:9:::1;::::0;-1:-1:-1;;;40876:12:56;::::1;;;40866:23;::::0;::::1;;;;;:::i;:::-;;;;:40:::0;;-1:-1:-1;40916:45:56::1;40936:9:::0;40866:40;40916:19:::1;:45::i;:::-;41055:57;41077:10;41089:22;41055:21;:57::i;:::-;41167:10;41122:31;41156:22:::0;;;:10:::1;:22;::::0;;;;41205:12:::1;::::0;41241:25;;41205:12:::1;-1:-1:-1::0;;;41205:12:56;;::::1;::::0;::::1;::::0;-1:-1:-1;;;41241:25:56;;::::1;;41231:35:::0;::::1;41227:94;;;41289:21;::::0;-1:-1:-1;;;41289:21:56;;20042:10:73;20030:23;;41289:21:56::1;::::0;::::1;20012:42:73::0;19985:18;;41289:21:56::1;19868:192:73::0;41227:94:56::1;41380:21;41391:9;41380:10;:21::i;:::-;40595:813;;;;40542:866::o:0;19336:118::-;19396:7;19422:25;19849:22;;;19765:113;19422:25;19415:32;;19336:118;:::o;22010:401::-;22082:22;22116:29;22138:6;22116:21;:29::i;:::-;22156:22;22181;22196:6;22181:14;:22::i;:::-;22156:47;;22213:28;22264:5;:12;-1:-1:-1;;;;;22244:33:56;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;22213:64;;22292:9;22287:95;22307:5;:12;22303:1;:16;22287:95;;;22351:10;:20;22362:5;22368:1;22362:8;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;22351:20:56;;;;;;;;;;;;;;;;-1:-1:-1;22351:20:56;22340:31;;;;;;;;;;;;;;;-1:-1:-1;;;22340:31:56;;;;;;;;;;;-1:-1:-1;;;22340:31:56;;;;;;;;;;;;;;;;;;-1:-1:-1;;;22340:31:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;;22340:31:56;;;;;;;;;;-1:-1:-1;;;22340:31:56;;;;;;;;-1:-1:-1;;;22340:31:56;;;;;;;;;:8;;:5;;22346:1;;22340:8;;;;;;:::i;:::-;;;;;;;;;;:31;22321:3;;22287:95;;;-1:-1:-1;22399:5:56;22010:401;-1:-1:-1;;;22010:401:56:o;44127:185::-;1531:13:20;:11;:13::i;:::-;44215:22:56::1;:33:::0;;-1:-1:-1;;44215:33:56::1;::::0;::::1;;::::0;;::::1;::::0;;;44263:42:::1;::::0;818:41:73;;;44263:42:56::1;::::0;806:2:73;791:18;44263:42:56::1;;;;;;;;44127:185:::0;:::o;33921:393::-;1474:19:39;:17;:19::i;:::-;1635:9:54::1;1610:22;1604:29;1601:44:::0;1598:158:::1;;1677:10;1671:4;1664:24;1737:4;1731;1724:18;1598:158;1800:9;1776:22;1769:41;34029:17:56::2;34049:39;34071:16;34049:21;:39::i;:::-;-1:-1:-1::0;;;;;34123:28:56;::::2;34098:22;34123:28:::0;;;:10:::2;:28;::::0;;;;:41;34029:59;;-1:-1:-1;;;;34123:41:56;;::::2;;;::::0;34192:65:::2;34123:28:::0;34029:59;34123:41;34192:18:::2;:65::i;:::-;34174:83;;34288:9;-1:-1:-1::0;;;;;34273:34:56::2;;34299:7;34273:34;;;;160:25:73::0;;148:2;133:18;;14:177;34273:34:56::2;;;;;;;;34019:295;;;1937:10:54::1;1913:22;1906:42;33921:393:56::0;:::o;1736:255:30:-;1824:7;1856:16;1866:5;1856:9;:16::i;:::-;1847:5;:25;1843:99;;1895:36;;-1:-1:-1;;;1895:36:30;;-1:-1:-1;;;;;25302:32:73;;1895:36:30;;;25284:51:73;25351:18;;;25344:34;;;25257:18;;1895:36:30;25110:274:73;1843:99:30;-1:-1:-1;;;;;;1958:19:30;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;1736:255::o;27431:877:56:-;1474:19:39;:17;:19::i;:::-;27708:66:56::1;27733:17;27752:10;27764:9;;27708:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;27708:24:56::1;::::0;-1:-1:-1;;;27708:66:56:i:1;:::-;;27883:22;27908:21;:19;:21::i;:::-;:34;;;27883:59;;27952:16;27971:45;27988:9;27999:16;27971;:45::i;:::-;27952:64;;28026:35;28050:10;28026:23;:35::i;:::-;;28119:60;28141:10;28153:25;28119:21;:60::i;:::-;28237:64;28251:9;;28262:10;28274:16;28292:8;28237:13;:64::i;43683:224::-:0;1531:13:20;:11;:13::i;:::-;43769:37:56::1;::::0;43758:6:::1;::::0;-1:-1:-1;;;;;;;;;;;1249:42:58;43791:9:56::1;::::0;43758:6;43769:37;43758:6;43769:37;43791:9;1249:42:58;43769:37:56::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43757:49;;;43866:1;43861:39;;43876:24;;-1:-1:-1::0;;;43876:24:56::1;;;;;;;;;;;20611:1137:::0;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20713:12:56;;-1:-1:-1;;;20713:12:56;;;;20747:11;20713:12;20757:1;20747:11;:::i;:::-;20739:19;;:5;:19;;;:60;;;;20774:1;20763:7;:12;;;;:35;;;;-1:-1:-1;20787:11:56;20797:1;20787:7;:11;:::i;:::-;20779:19;;:5;:19;;;20763:35;20735:117;;;20822:19;;-1:-1:-1;;;20822:19:56;;20042:10:73;20030:23;;20822:19:56;;;20012:42:73;19985:18;;20822:19:56;19868:192:73;20735:117:56;20885:12;;-1:-1:-1;;;20885:12:56;;;;20911:15;;;;;;;;20907:835;;;21293:23;21319:51;21339:5;21346:7;21355:14;21319:19;:51::i;:::-;21293:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21293:77:56;;;;;;;;;;;;;;;;-1:-1:-1;;;21293:77:56;;;-1:-1:-1;;21293:77:56;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21293:77:56;;;;;;;;;;;-1:-1:-1;;;21293:77:56;;;;;;;;-1:-1:-1;;;21293:77:56;;;;;;;;;;;;;-1:-1:-1;;;21293:77:56;;;;;;;;;;21428:12;;;;;-1:-1:-1;21419:22:56;;;:8;:22;;;;;;21478:26;;;;21455:20;;;:49;;;;21541:26;;;;;;;;21518:20;;;:49;21581:19;;:34;21293:77;20611:1137;-1:-1:-1;;;;;20611:1137:56:o;20907:835::-;21680:51;21700:5;21707:7;21716:14;21680:19;:51::i;:::-;21673:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21673:58:56;;;;;;;;;;;;;;;;-1:-1:-1;;;21673:58:56;;;-1:-1:-1;;21673:58:56;;;;;;;;;;;;;-1:-1:-1;;;;;21673:58:56;;;;;;;-1:-1:-1;;;21673:58:56;;;;;;;;-1:-1:-1;;;21673:58:56;;;;;;;;-1:-1:-1;;;21673:58:56;;;;;;;;;;20611:1137;-1:-1:-1;;;;20611:1137:56:o;1918:29::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1918:29:56;;;-1:-1:-1;;;1918:29:56;;;;;;;-1:-1:-1;;;1918:29:56;;;;;;-1:-1:-1;;;1918:29:56;;;;;:::o;24826:130::-;-1:-1:-1;;;;;12264:29:58;;;24896:4:56;12264:29:58;;;:11;:29;;;;;:39;;;24896:4:56;;12264:39:58;:53;;24919:30:56;12170:154:58;73510:65:56;1531:13:20;:11;:13::i;:::-;73558:10:56::1;:8;:10::i;:::-;73510:65::o:0;4786:132:27:-;4872:39;4889:4;4895:2;4899:7;4872:39;;;;;;;;;;;;:16;:39::i;30540:2162:56:-;1474:19:39;:17;:19::i;:::-;30753:41:56::1;30777:16;30753:23;:41::i;:::-;-1:-1:-1::0;1710:6:20;;;;;-1:-1:-1;;;;;1710:6:20;-1:-1:-1;;;;;30963:21:56::1;:10;-1:-1:-1::0;;;;;30963:21:56::1;;30959:283;;31004:22;::::0;::::1;;31000:59;;;31035:24;;-1:-1:-1::0;;;31035:24:56::1;;;;;;;;;;;31000:59;31073:17;31093:31;31107:16;31093:13;:31::i;:::-;31073:51:::0;-1:-1:-1;31142:10:56::1;-1:-1:-1::0;;;;;31142:30:56;::::1;;::::0;::::1;::::0;:57:::1;;-1:-1:-1::0;31176:10:56::1;-1:-1:-1::0;;;;;31176:23:56;::::1;;;31142:57;31138:93;;;31208:23;::::0;-1:-1:-1;;;31208:23:56;;-1:-1:-1;;;;;3241:32:73;;31208:23:56::1;::::0;::::1;3223:51:73::0;3196:18;;31208:23:56::1;3077:203:73::0;31138:93:56::1;30986:256;30959:283;-1:-1:-1::0;;;;;31359:28:56;::::1;31334:22;31359:28:::0;;;:10:::1;:28;::::0;;;;:42;-1:-1:-1;;;31359:42:56;::::1;;;31438:22;31428:6;:32;;;;;;;;:::i;:::-;;;:79;;;;-1:-1:-1::0;31474:33:56::1;31464:6;:43;;;;;;;;:::i;:::-;;;31428:79;:131;;;;-1:-1:-1::0;31537:22:56::1;31527:6;:32;;;;;;;;:::i;:::-;;;31428:131;31411:212;;;31605:6;31591:21;;-1:-1:-1::0;;;31591:21:56::1;;;;;;;;:::i;31411:212::-;-1:-1:-1::0;;;;;31658:28:56;::::1;31633:22;31658:28:::0;;;:10:::1;:28;::::0;;;;;;;:41;-1:-1:-1;;;31658:41:56;::::1;;;31731:26:::0;;;:8:::1;:26:::0;;;;;:38;31804:26;;;:8:::1;:26:::0;;;;;;;31658:41;;31731:38;31844:29;;::::1;31840:134;;31896:67;::::0;-1:-1:-1;;;31896:67:56;;-1:-1:-1;;;;;26388:32:73;;31896:67:56::1;::::0;::::1;26370:51:73::0;26437:18;;;26430:34;;;26512:4;26500:17;;26480:18;;;26473:45;26343:18;;31896:67:56::1;26172:352:73::0;31840:134:56::1;31984:15;32002:28;32016:14:::0;32002:11;:28:::1;:::i;:::-;31984:46;;32057:7;32044:9;:20;32040:125;;32087:67;::::0;-1:-1:-1;;;32087:67:56;;-1:-1:-1;;;;;26388:32:73;;32087:67:56::1;::::0;::::1;26370:51:73::0;32126:9:56::1;26437:18:73::0;;;26430:34;26512:4;26500:17;;26480:18;;;26473:45;26343:18;;32087:67:56::1;26172:352:73::0;32040:125:56::1;-1:-1:-1::0;;;;;32175:26:56;::::1;;::::0;;;:8:::1;:26;::::0;;;;:37;;32205:7;;32175:26;:37:::1;::::0;32205:7;;32175:37:::1;:::i;:::-;::::0;;;-1:-1:-1;;32499:37:56::1;::::0;32488:6:::1;::::0;-1:-1:-1;;;;;;;;;;;1249:42:58;32521:9:56::1;::::0;32488:6;32499:37;32488:6;32499:37;32521:9;1249:42:58;32499:37:56::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32487:49;;;32596:1;32591:39;;32606:24;;-1:-1:-1::0;;;32606:24:56::1;;;;;;;;;;;32591:39;32669:16;-1:-1:-1::0;;;;;32646:49:56::1;;32687:7;32646:49;;;;160:25:73::0;;148:2;133:18;;14:177;32646:49:56::1;;;;;;;;30633:2069;;;;;;30540:2162:::0;:::o;2236:226:30:-;2302:7;2334:13;2140:10;:17;;2062:102;2334:13;2325:5;:22;2321:101;;2370:41;;-1:-1:-1;;;2370:41:30;;2401:1;2370:41;;;25284:51:73;25351:18;;;25344:34;;;25257:18;;2370:41:30;25110:274:73;2321:101:30;2438:10;2449:5;2438:17;;;;;;;;:::i;:::-;;;;;;;;;2431:24;;2236:226;;;:::o;1953:35:56:-;;;;;;;;;;;18438:570;1531:13:20;:11;:13::i;:::-;18517:7:56::1;:12;;18528:1;18517:12:::0;18513:115:::1;;18583:12;::::0;18573:9:::1;::::0;-1:-1:-1;;;18583:12:56;::::1;;;18573:23;::::0;::::1;;;;;:::i;:::-;;;;:40:::0;18552:65:::1;::::0;-1:-1:-1;;;18552:65:56;;::::1;::::0;::::1;26711:25:73::0;;;;18573:33:56::1;26752:18:73::0;;;26745:34;26684:18;;18552:65:56::1;26529:256:73::0;18513:115:56::1;18694:16;18713:25;19849:22:::0;;;19765:113;18713:25:::1;18694:44;;18762:8;18752:7;:18;;;18748:104;;;18793:48;::::0;-1:-1:-1;;;18793:48:56;;::::1;::::0;::::1;26711:25:73::0;;;18824:16:56::1;::::0;::::1;26752:18:73::0;;;26745:34;26684:18;;18793:48:56::1;26529:256:73::0;18748:104:56::1;18879:17;::::0;;::::1;18906:27:::0;;::::1;-1:-1:-1::0;;;18906:27:56;;::::1;-1:-1:-1::0;;;;18906:27:56;::::1;;::::0;;;18949:52:::1;::::0;;18879:17;;;::::1;::::0;;::::1;27241:38:73::0;;;27310:2;27295:18;;27288:47;;;;27351:18;;;27344:34;;;18879:17:56;18949:52:::1;::::0;27229:2:73;27214:18;18949:52:56::1;;;;;;;18503:505;;18438:570:::0;:::o;2184:118:27:-;2247:7;2273:22;2287:7;2273:13;:22::i;19918:311:56:-;19982:5;20188:21;:19;:21::i;:::-;:34;;;20181:41;;19918:311;:::o;42437:405::-;1531:13:20;:11;:13::i;:::-;42608:27:56::1;42618:16;42608:9;:27::i;:::-;:32:::0;::::1;::::0;:63:::1;;;42644:27;42654:16;42644:9;:27::i;:::-;42604:133;;;42694:32;::::0;-1:-1:-1;;;42694:32:56;;-1:-1:-1;;;;;3241:32:73;;42694::56::1;::::0;::::1;3223:51:73::0;3196:18;;42694:32:56::1;3077:203:73::0;42604:133:56::1;42781:54;42787:16:::0;-1:-1:-1;;;;;13353:32:58;;42781:5:56::1;:54::i;24074:707::-:0;24142:4;24239:2;24219:22;;24215:40;;-1:-1:-1;24250:5:56;24243:12;;24215:40;24356:21;24380:20;24390:9;;24380:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24380:9:56;;-1:-1:-1;;;24380:20:56:i;:::-;24410:24;24437:39;;;:24;:39;;;;;;24356:44;;-1:-1:-1;;;;;;24437:39:56;;24542:48;;24585:5;24578:12;;;;;;24542:48;24711:27;24721:16;24711:9;:27::i;:::-;24707:45;;;24747:5;24740:12;;;;;;24707:45;-1:-1:-1;24770:4:56;;24074:707;-1:-1:-1;;;;24074:707:56:o;23228:359::-;23295:14;23321:26;23350:19;23363:5;23350:12;:19::i;:::-;:29;;;23321:58;;23389:22;23426:9;:16;-1:-1:-1;;;;;23414:29:56;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23389:54;;23458:9;23453:103;23473:7;:14;23469:1;:18;23453:103;;;23521:10;:24;23532:9;23542:1;23532:12;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;23521:24:56;-1:-1:-1;;;;;23521:24:56;;;;;;;;;;;;23508:37;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:7;23516:1;23508:10;;;;;;;;:::i;:::-;;;;;;;;;;:37;23489:3;;23453:103;;25001:477;25067:4;25087:38;-1:-1:-1;;;;;13353:32:58;;25087:7:56;:38::i;:::-;25083:333;;;-1:-1:-1;25204:5:56;;25001:477;-1:-1:-1;25001:477:56:o;25083:333::-;25276:25;-1:-1:-1;;;;;25230:28:56;;;;;;:10;:28;;;;;:42;-1:-1:-1;;;25230:42:56;;;;:71;;;;;;;;:::i;:::-;;25226:190;;-1:-1:-1;25400:5:56;;25001:477;-1:-1:-1;25001:477:56:o;25226:190::-;-1:-1:-1;;;;;;25433:28:56;;;;;:10;:28;;;;;:38;-1:-1:-1;;;25433:38:56;;;;;25001:477::o;1919:208:27:-;1982:7;-1:-1:-1;;;;;2005:19:27;;2001:87;;2047:30;;-1:-1:-1;;;2047:30:27;;2074:1;2047:30;;;3223:51:73;3196:18;;2047:30:27;3077:203:73;2001:87:27;-1:-1:-1;;;;;;2104:16:27;;;;;:9;:16;;;;;;;1919:208::o;2293:101:20:-;1531:13;:11;:13::i;:::-;2357:30:::1;2384:1;2357:18;:30::i;25517:292:56:-:0;-1:-1:-1;;;;;25633:28:56;;25593:7;25633:28;;;:10;:28;;;;;;;;:41;-1:-1:-1;;;25633:41:56;;;;25707:22;;;:8;:22;;;;;:34;25759:43;25633:28;25707:34;25759:11;:43::i;:::-;25752:50;25517:292;-1:-1:-1;;;;25517:292:56:o;5571:1635::-;592:10:59;-1:-1:-1;;;;;592:28:59;588:67;;629:26;;-1:-1:-1;;;629:26:59;;644:10;629:26;;;3223:51:73;3196:18;;629:26:59;3077:203:73;588:67:59;5715:29:56::1;5731:12;;5715:15;:29::i;:::-;6190:27;:25;:27::i;:::-;6521:17;::::0;-1:-1:-1;;;6521:17:56;::::1;;;6498:40:::0;::::1;6494:138;;6582:17;::::0;6561:60:::1;::::0;-1:-1:-1;;;6561:60:56;;-1:-1:-1;;;6582:17:56;;::::1;;;6561:60;::::0;::::1;27562:38:73::0;27616:18;;;27609:34;;;27535:18;;6561:60:56::1;27389:260:73::0;6494:138:56::1;6701:15;6718:21;6741:15;6758:34;6808:30;6825:12;;6808:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;6808:16:56::1;::::0;-1:-1:-1;;;6808:30:56:i:1;:::-;6700:138;;;;;;;;6848:45;6870:12;;6884:8;6848:21;:45::i;:::-;6981:67;7001:25;19849:22:::0;;;19765:113;7001:25:::1;7028:12:::0;6981:19:::1;:67::i;:::-;7064:135;7086:103;;;;;;;;7096:17;7086:103;;;;7115:13;7086:103;;;;7137:12;7152:1;7137:16;;;;:::i;:::-;-1:-1:-1::0;;;;;7086:103:56::1;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;;::::1;::::0;;;;;;;;7176:12:::1;::::0;::::1;;7086:103:::0;;;;;;;;7064:135;::::1;::::0;;::::1;:::i;:::-;;;;;;;;5660:1546;;;;5571:1635:::0;;:::o;4261:272:58:-;4315:18;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4315:18:58;-1:-1:-1;4513:12:58;;;;4504:22;;;;:8;:22;;;;;;;;;4497:29;;;;;;;;;;;4513:12;4497:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4261:272::o;73273:61:56:-;1531:13:20;:11;:13::i;:::-;73319:8:56::1;:6;:8::i;11383:596:51:-:0;-1:-1:-1;;;11508:18:51;;11481:13;;;11508:18;11779:23;13733:36:58;;;;;;;;;;;-1:-1:-1;;;13733:36:58;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;13733:36:58;;;;;13620:156;11779:23:51;11383:596;;11761:41;;;-1:-1:-1;11822:13:51;;-1:-1:-1;11873:4:51;;-1:-1:-1;11383:596:51;;-1:-1:-1;11383:596:51;:::o;42881:763:56:-;1531:13:20;:11;:13::i;:::-;42963:27:56::1;42973:16;42963:9;:27::i;:::-;42959:74;;;43013:19;42999:34;;-1:-1:-1::0;;;42999:34:56::1;;;;;;;;:::i;42959:74::-;43143:41;43167:16;43143:23;:41::i;:::-;-1:-1:-1::0;43245:25:56::1;-1:-1:-1::0;;;;;43199:28:56;::::1;;::::0;;;:10:::1;:28;::::0;;;;:42;-1:-1:-1;;;43199:42:56;::::1;;;:71;::::0;::::1;;;;;;:::i;:::-;::::0;43195:443:::1;;-1:-1:-1::0;;;;;43403:28:56;::::1;;::::0;;;:10:::1;:28;::::0;;;;43395:37:::1;::::0;:7:::1;:37::i;:::-;43446:36;-1:-1:-1::0;;;;;13353:32:58;;43446:5:56::1;:36::i;43195:443::-;43595:32;43610:16;43595:14;:32::i;21793:172::-:0;21861:16;21889:29;21911:6;21889:21;:29::i;:::-;21936:22;21951:6;21936:14;:22::i;2517:93:27:-;2564:13;2596:7;2589:14;;;;;:::i;22456:433:56:-;22523:22;22557:26;22586:19;22599:5;22586:12;:19::i;:::-;:29;;;22557:58;;22625:42;22690:9;:16;-1:-1:-1;;;;;22670:37:56;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;22625:82;;22722:9;22717:129;22737:19;:26;22733:1;:30;22717:129;;;22809:26;22822:9;22832:1;22822:12;;;;;;;;:::i;:::-;;;;;;;22809;:26::i;:::-;22784:19;22804:1;22784:22;;;;;;;;:::i;:::-;;;;;;;;;;:51;22765:3;;22717:129;;4095:126:58;4160:18;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4160:18:58;-1:-1:-1;4197:17:58;;;;;;:8;:17;;;;;;;;;4190:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4095:126::o;38710:131:56:-;38769:16;38804:30;:21;:28;:30::i;16870:1216::-;592:10:59;-1:-1:-1;;;;;592:28:59;588:67;;629:26;;-1:-1:-1;;;629:26:59;;644:10;629:26;;;3223:51:73;3196:18;;629:26:59;3077:203:73;588:67:59;16936:14:56::1;16953:13;2140:10:30::0;:17;;2062:102;16953:13:56::1;16936:30;;16976:16;17007:9;17002:988;17022:6;17018:1;:10;17002:988;;;17049:24;17076;17084:15;17097:1;17084:12;:15::i;17076:24::-;-1:-1:-1::0;;;;;17325:28:56;::::1;17300:22;17325:28:::0;;;:10:::1;:28;::::0;;;;17300:53;;17049:51;;-1:-1:-1;17300:22:56;;:53:::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17371:9;:16;17391:2;17371:22:::0;17367:197:::1;;17445:20:::0;;::::1;::::0;;::::1;::::0;;;;17420:46:::1;::::0;;;:24:::1;:46:::0;;;;;;;17413:53;;-1:-1:-1;;;;;;17413:53:56::1;::::0;;17533:16;;17420:24;17509:20:::1;17455:9:::0;17509::::1;:20::i;:::-;17484:46;;;;;;;;;;;;:65;;;;;-1:-1:-1::0;;;;;17484:65:56::1;;;;;-1:-1:-1::0;;;;;17484:65:56::1;;;;;;17367:197;-1:-1:-1::0;;;;;17612:28:56;::::1;17578:31;17612:28:::0;;;:10:::1;:28;::::0;;;;17658:19;;-1:-1:-1;;;17658:19:56;::::1;;;17654:33;;;17679:8;;;;;17654:33;17727:23:::0;;-1:-1:-1;;;17727:23:56;::::1;;;17702:22;17768:6;:35;;;;;;;;:::i;:::-;;:68;;;-1:-1:-1::0;17817:19:56::1;17807:6;:29;;;;;;;;:::i;:::-;;17768:68;17764:82;;;17838:8;;;;;;17764:82;17861:50;17894:16;17861:13;:28;17881:6;17875:13;;;;;;;;:::i;:::-;17861:28;;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;17861:28:56;;:32:::1;:50::i;:::-;;17929:38;17960:6;17929:30;:38::i;:::-;17925:54;;;17969:10;::::0;::::1;:::i;:::-;;;17925:54;17035:955;;;;17002:988;17030:3;;17002:988;;;-1:-1:-1::0;18000:22:56::1;:33:::0;;;18048:31:::1;::::0;160:25:73;;;18048:31:56::1;::::0;148:2:73;133:18;18048:31:56::1;;;;;;;;16926:1160;;16870:1216::o:0;26369:972::-;26584:7;26607:41;26631:16;26607:23;:41::i;:::-;;26862:9;:16;26882:2;26862:22;26858:53;;26893:18;;-1:-1:-1;;;26893:18:56;;;;;;;;;;;26858:53;26921:18;26942:21;:19;:21::i;:::-;:34;;;-1:-1:-1;;;;;27001:29:56;;26986:12;27001:29;;;:11;:29;;;;;:35;;;26942:34;;-1:-1:-1;;;;27001:35:56;;;-1:-1:-1;;;;;27001:35:56;;27070:20;27080:9;27070;:20::i;:::-;27046:44;;27100:18;1417:156:58;27193:13:56;27208:16;27226:9;27237:12;27251:5;27258:8;27144:136;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;27121:169;;;;;;27100:190;;27308:26;27323:10;27308:14;:26::i;:::-;27301:33;26369:972;-1:-1:-1;;;;;;;;;26369:972:56:o;38100:516::-;1474:19:39;:17;:19::i;:::-;1635:9:54::1;1610:22;1604:29;1601:44:::0;1598:158:::1;;1677:10;1671:4;1664:24;1737:4;1731;1724:18;1598:158;1800:9;1776:22;1769:41:::0;38212:10:56::2;38178:14;38195:28:::0;;;:16:::2;:28;::::0;;;;;;38237:11;;;38233:43:::2;;38257:19;;-1:-1:-1::0;;;38257:19:56::2;;;;;;;;;;;38233:43;38303:10;38317:1;38286:28:::0;;;:16:::2;:28;::::0;;;;;:32;;;38488:72;-1:-1:-1;;;38488:72:56;;::::2;::::0;::::2;25284:51:73::0;;;;25351:18;;;25344:34;-1:-1:-1;;;;;;;;;;;1249:42:58;38488:40:56::2;::::0;38537:6;;25257:18:73;;38488:72:56::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;38576:33:56::2;::::0;160:25:73;;;38590:10:56::2;::::0;-1:-1:-1;38576:33:56::2;::::0;-1:-1:-1;148:2:73;133:18;;-1:-1:-1;38576:33:56::2;;;;;;;38168:448;1937:10:54::1;1913:22;1906:42;38100:516:56:o:0;4984:233:27:-;5097:31;5110:4;5116:2;5120:7;5097:12;:31::i;:::-;5138:72;735:10:36;5186:4:27;5192:2;5196:7;5205:4;5138:33;:72::i;20411:155:56:-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20518:12:56;;20498:61;;-1:-1:-1;;;20518:12:56;;;;;;;-1:-1:-1;;;20546:12:56;;;;20498:19;:61::i;:::-;20491:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20491:68:56;;;;;;;;;;;;;;;;-1:-1:-1;;;20491:68:56;;;-1:-1:-1;;20491:68:56;;;;;;;;;;;;;-1:-1:-1;;;;;20491:68:56;;;;;;;-1:-1:-1;;;20491:68:56;;;;;;;;-1:-1:-1;;;20491:68:56;;;;;;;;-1:-1:-1;;;20491:68:56;;;;;;;;;;20411:155;-1:-1:-1;20411:155:56:o;78265:595::-;78417:5;1531:13:20;:11;:13::i;:::-;1474:19:39::1;:17;:19::i;:::-;78442:23:56::2;::::0;;;::::2;::::0;::::2;;:::i;:::-;:28;;78469:1;78442:28:::0;78438:81:::2;;78495:23;::::0;;;::::2;::::0;::::2;;:::i;:::-;78479:40;::::0;-1:-1:-1;;;78479:40:56;;20042:10:73;20030:23;;;78479:40:56::2;::::0;::::2;20012:42:73::0;19985:18;;78479:40:56::2;19868:192:73::0;78438:81:56::2;78551:12;78549:14:::0;;78530:16:::2;::::0;78551:12;78530:16;;78549:14:::2;::::0;::::2;;;:::i;:::-;::::0;;::::2;::::0;;::::2;;::::0;;;::::2;::::0;;::::2;::::0;::::2;;::::0;;::::2;;::::0;;;-1:-1:-1;78573:20:56;;;:8:::2;:20;::::0;;;;78549:14;;-1:-1:-1;78596:9:56;;78573:32:::2;78596:9:::0;78573:20;:32:::2;:::i;:::-;-1:-1:-1::0;;78621:204:56::2;::::0;::::2;;78679:21:::0;::::2;78714:27;::::0;::::2;;78755:23;::::0;::::2;;78792;::::0;;;::::2;::::0;::::2;;:::i;:::-;78621:204;::::0;;29186:25:73;;;29242:2;29227:18;;29220:34;;;;29270:18;;;29263:34;29345:10;29333:23;29328:2;29313:18;;29306:51;29173:3;29158:19;78621:204:56::2;;;;;;;78843:10:::0;-1:-1:-1;1503:1:39::2;78265:595:56::0;;;:::o;30280:215::-;30333:35;30357:10;30333:23;:35::i;:::-;-1:-1:-1;30410:10:56;30378:15;30398:23;;;:11;:23;;;;;:29;;30396:31;;30398:29;;30396:31;;-1:-1:-1;;;30396:31:56;;-1:-1:-1;;;;;30396:31:56;;:::i;:::-;;;-1:-1:-1;;;;;30396:31:56;;;;;;;;;;;;;;;;;;;;;30442:46;;29721:50:73;;;30396:31:56;;-1:-1:-1;30467:10:56;;30442:46;;29709:2:73;29694:18;30442:46:56;;;;;;;30323:172;30280:215::o;7251:672:58:-;7324:13;7349:22;7363:7;7349:13;:22::i;:::-;;7382:18;7403:443;7550:54;7594:7;7550:27;:54::i;:::-;7768:10;:8;:10::i;:::-;7453:369;;;;;;;;;:::i;:::-;;;;;;;;;;;;;7403:13;:443::i;:::-;7382:464;;7911:4;7864:52;;;;;;;;:::i;:::-;;;;;;;;;;;;;7857:59;;;7251:672;;;:::o;34354:3022:56:-;1474:19:39;:17;:19::i;:::-;1635:9:54::1;1610:22;1604:29;1601:44:::0;1598:158:::1;;1677:10;1671:4;1664:24;1737:4;1731;1724:18;1598:158;1800:9;1776:22;1769:41;34634:17:56::2;34654:39;34676:16;34654:21;:39::i;:::-;-1:-1:-1::0;;;;;34808:28:56;::::2;34774:31;34808:28:::0;;;:10:::2;:28;::::0;;;;34871:23;;34634:59;;-1:-1:-1;34808:28:56;-1:-1:-1;;;34871:23:56;::::2;;;34931:22;34921:6;:32;;;;;;;;:::i;:::-;;;:79;;;;-1:-1:-1::0;34967:33:56::2;34957:6;:43;;;;;;;;:::i;:::-;;;34921:79;:131;;;;-1:-1:-1::0;35030:22:56::2;35020:6;:32;;;;;;;;:::i;:::-;;;34921:131;34904:212;;;35098:6;35084:21;;-1:-1:-1::0;;;35084:21:56::2;;;;;;;;:::i;34904:212::-;35217:22:::0;;::::2;-1:-1:-1::0;;;35217:22:56;;::::2;::::0;::::2;::::0;35253:27;::::2;::::0;-1:-1:-1;35253:27:56::2;::::0;:59:::2;;-1:-1:-1::0;35300:12:56::2;::::0;::::2;::::0;;::::2;35284:28:::0;;::::2;;35253:59;35249:143;;;35335:46;::::0;-1:-1:-1;;;35335:46:56;;31649:4:73;31637:17;;;35335:46:56::2;::::0;::::2;31619:36:73::0;31691:17;;31671:18;;;31664:45;31592:18;;35335:46:56::2;31453:262:73::0;35249:143:56::2;35520:20;::::0;;::::2;35495:22;35520:20:::0;;;:8:::2;:20;::::0;;;;;:32;35587:23;;::::2;::::0;;;;:35;;35650:31;;::::2;:69;;35718:1;35650:69;;;35684:31;35701:14:::0;35684;:31:::2;:::i;:::-;35632:87;;35746:7;35733:9;:20;35729:62;;35762:29;::::0;-1:-1:-1;;;35762:29:56;;35781:9:::2;35762:29;::::0;::::2;160:25:73::0;133:18;;35762:29:56::2;14:177:73::0;35729:62:56::2;36003:22;35993:6;:32;;;;;;;;:::i;:::-;::::0;35989:679:::2;;36045:11:::0;;36041:244:::2;;-1:-1:-1::0;;;;;36076:26:56;::::2;;::::0;;;:8:::2;:26;::::0;;;;:37;;36106:7;;36076:26;:37:::2;::::0;36106:7;;36076:37:::2;:::i;:::-;::::0;;;-1:-1:-1;36041:244:56::2;::::0;-1:-1:-1;36041:244:56::2;;36155:14;36138;:31;36134:151;;;36189:81;36210:16;36228:9;36239:14;36255;36189:20;:81::i;:::-;36299:38:::0;;-1:-1:-1;;;;36299:38:56::2;-1:-1:-1::0;;;36299:38:56::2;::::0;::::2;;;::::0;;-1:-1:-1;;;;;12264:29:58;;;-1:-1:-1;12264:29:58;;;:11;:29;;;;;:39;;;;:53;36351:131:56::2;;-1:-1:-1::0;;;;;36405:29:56;::::2;;::::0;;;:11:::2;:29;::::0;;;;:46:::2;;:62:::0;;-1:-1:-1;;;;36405:62:56::2;-1:-1:-1::0;;;36405:62:56::2;::::0;::::2;;;::::0;;36351:131:::2;36501:136;::::0;;31973:4:73;31961:17;;;31943:36;;32015:17;;32010:2;31995:18;;31988:45;32049:18;;;32042:34;;;32107:2;32092:18;;32085:34;;;-1:-1:-1;;;;;36501:136:56;::::2;::::0;::::2;::::0;31930:3:73;31915:19;36501:136:56::2;;;;;;;36651:7;;;;;;;;;35989:679;36926:38;36967:21;:39;36989:16;-1:-1:-1::0;;;;;36967:39:56::2;-1:-1:-1::0;;;;;36967:39:56::2;;;;;;;;;;;;36926:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;36926:80:56::2;-1:-1:-1::0;;;;;36926:80:56::2;-1:-1:-1::0;;;;;36926:80:56::2;;;;;;;;;;;::::0;::::2;;;37070:75;;;;;;;;37096:13;37070:75;;;;;;37111:12;;;;;;;;;;;37070:75;;;;;;37125:10;-1:-1:-1::0;;;;;37070:75:56::2;;;;;37137:7;37070:75;;::::0;37016:21:::2;:39;37038:16;-1:-1:-1::0;;;;;37016:39:56::2;-1:-1:-1::0;;;;;37016:39:56::2;;;;;;;;;;;;:129;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;37016:129:56::2;;;;;-1:-1:-1::0;;;;;37016:129:56::2;;;;;;;;;;;;;;;;;37155:43;37181:16;37155:21;:25;;:43;;;;:::i;:::-;-1:-1:-1::0;37212:12:56::2;::::0;::::2;::::0;:16;37208:62:::2;;37230:40;37243:5;:12;;;37257:5;:12;;;37230;:40::i;:::-;37347:12;::::0;37286:83:::2;::::0;;32356:4:73;32344:17;;32326:36;;-1:-1:-1;;;37347:12:56;;::::2;;;32393:2:73::0;32378:18;;32371:51;32438:18;;32431:34;;;-1:-1:-1;;;;;37286:83:56;::::2;::::0;::::2;::::0;32314:2:73;32299:18;37286:83:56::2;;;;;;;34555:2821;;;;;;;;1829:1:54;1937:10:::1;1913:22;1906:42;34354:3022:56::0;;:::o;3927:153:27:-;-1:-1:-1;;;;;4038:25:27;;;4015:4;4038:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;3927:153::o;18131:262:56:-;1531:13:20;:11;:13::i;:::-;18228:41:56::1;18252:16;18228:23;:41::i;:::-;-1:-1:-1::0;;;;;;18279:28:56;::::1;;::::0;;;:10:::1;:28;::::0;;;;;;;;:44;;-1:-1:-1;;;;;18279:44:56::1;-1:-1:-1::0;;;18279:44:56::1;::::0;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;18338:48;;13795:36:73;;;18338:48:56::1;::::0;13768:18:73;18338:48:56::1;;;;;;;;18131:262:::0;;:::o;2543:215:20:-;1531:13;:11;:13::i;:::-;-1:-1:-1;;;;;2627:22:20;::::1;2623:91;;2672:31;::::0;-1:-1:-1;;;2672:31:20;;2700:1:::1;2672:31;::::0;::::1;3223:51:73::0;3196:18;;2672:31:20::1;3077:203:73::0;2623:91:20::1;2723:28;2742:8;2723:18;:28::i;41447:904:56:-:0;1474:19:39;:17;:19::i;:::-;1635:9:54::1;1610:22;1604:29;1601:44:::0;1598:158:::1;;1677:10;1671:4;1664:24;1737:4;1731;1724:18;1598:158;1800:9;1776:22;1769:41;41672:17:56::2;41692:39;41714:16;41692:21;:39::i;:::-;-1:-1:-1::0;;;;;41776:28:56;::::2;41742:31;41776:28:::0;;;:10:::2;:28;::::0;;;;41672:59;;-1:-1:-1;41912:30:56::2;41776:28:::0;41912:19:::2;:30::i;:::-;41907:72;;41969:9;41951:28;;-1:-1:-1::0;;;41951:28:56::2;;;;;;;;:::i;41907:72::-;42060:18;42068:9;42060:7;:18::i;:::-;42200:23;42226:60;42235:16;42253:9;42264:21;42226:8;:60::i;:::-;42200:86;;42317:9;-1:-1:-1::0;;;;;42302:42:56::2;;42328:15;42302:42;;;;160:25:73::0;;148:2;133:18;;14:177;42302:42:56::2;;;;;;;;41563:788;;;1937:10:54::1;1913:22;1906:42;41447:904:56::0;;:::o;1560:300:27:-;1662:4;-1:-1:-1;;;;;;1697:40:27;;-1:-1:-1;;;1697:40:27;;:104;;-1:-1:-1;;;;;;;1753:48:27;;-1:-1:-1;;;1753:48:27;1697:104;:156;;;-1:-1:-1;;;;;;;;;;862:40:44;;;1817:36:27;763:146:44;64361:1637:56;-1:-1:-1;;;;;64464:28:56;;64430:31;64464:28;;;:10;:28;;;;;64527:23;;19849:22;;-1:-1:-1;;;64527:23:56;;;;;;64819:38;64527:23;64819:30;:38::i;:::-;64815:98;;;64887:15;64901:1;64887:11;:15;:::i;:::-;64873:29;;64815:98;64922:51;64943:16;64961:11;64922:20;:51::i;:::-;65013:23;65041:37;65061:16;65041:19;:37::i;:::-;-1:-1:-1;;;;;;65222:26:56;;65251:1;65222:26;;;:8;:26;;;;;;:30;;;65459:43;65010:68;;-1:-1:-1;65251:1:56;-1:-1:-1;;;;;;;;;;;;1249:42:58;65010:68:56;;65251:1;65459:43;65251:1;65459:43;65010:68;1249:42:58;65459:43:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;65447:55;;;65562:1;65557:39;;65572:24;;-1:-1:-1;;;65572:24:56;;;;;;;;;;;65557:39;65905:12;;65888:30;;65894:9;;-1:-1:-1;;;65905:12:56;;;;65888:5;:30::i;:::-;65928:18;65936:9;65928:7;:18::i;:::-;65956:35;65974:16;65956:17;:35::i;:::-;64420:1578;;;;;64361:1637;:::o;1796:162:20:-;1710:6;;-1:-1:-1;;;;;1710:6:20;;;;;735:10:36;1855:23:20;1851:101;;1901:40;;-1:-1:-1;;;1901:40:20;;735:10:36;1901:40:20;;;3223:51:73;3196:18;;1901:40:20;3077:203:73;16212:241:27;16275:7;5824:16;;;:7;:16;;;;;;-1:-1:-1;;;;;5824:16:27;;16337:88;;16383:31;;-1:-1:-1;;;16383:31:27;;;;;160:25:73;;;133:18;;16383:31:27;14:177:73;2002:128:39;1920:7;;;;;;;2063:61;;;2098:15;;-1:-1:-1;;;2098:15:39;;;;;;;;;;;12934:324:58;13016:7;-1:-1:-1;;;;;13353:32:58;;13097:16;13353:32;13097:7;:16::i;:::-;13092:53;;13122:23;;-1:-1:-1;;;13122:23:58;;;;;160:25:73;;;133:18;;13122:23:58;14:177:73;13092:53:58;13179:16;-1:-1:-1;;;;;13159:36:58;:16;13167:7;13159;:16::i;:::-;-1:-1:-1;;;;;13159:36:58;;13155:71;;13204:22;;-1:-1:-1;;;13204:22:58;;;;;;;;;;;69917:254:56;-1:-1:-1;;;;;70054:28:56;;70029:22;70054:28;;;:10;:28;;;;;:42;-1:-1:-1;;;70054:42:56;;;;70120:14;70110:24;;;;;;;;:::i;:::-;:6;:24;;;;;;;;:::i;:::-;;70106:58;;70157:6;70143:21;;-1:-1:-1;;;70143:21:56;;;;;;;;:::i;54453:255::-;54573:9;:5;54581:1;54573:9;:::i;:::-;54545:37;;;;;;;-1:-1:-1;;;54545:37:56;-1:-1:-1;;;;54545:37:56;;;;;;54592:56;54545:9;54614:33;54592:10;:56::i;:::-;54664:37;54691:9;54664:37;;;;;;:::i;33570:312::-;33649:17;33678:41;33702:16;33678:23;:41::i;:::-;;33741:31;33755:16;33741:13;:31::i;:::-;33729:43;-1:-1:-1;33786:10:56;-1:-1:-1;;;;;33786:30:56;;;;;;:57;;-1:-1:-1;33820:10:56;-1:-1:-1;;;;;33820:23:56;;;;33786:57;33782:93;;;33852:23;;-1:-1:-1;;;33852:23:56;;-1:-1:-1;;;;;3241:32:73;;33852:23:56;;;3223:51:73;3196:18;;33852:23:56;3077:203:73;8607:156:49;8680:4;8703:53;8711:3;-1:-1:-1;;;;;8731:23:49;;8703:7;:53::i;:::-;8696:60;8607:156;-1:-1:-1;;;8607:156:49:o;58092:412:56:-;58172:6;58182:1;58172:11;58168:24;;58092:412;;:::o;58168:24::-;58205:94;;-1:-1:-1;;;58205:94:56;;-1:-1:-1;;;;;25302:32:73;;58205:94:56;;;25284:51:73;58297:1:56;25351:18:73;;;25344:34;-1:-1:-1;;;;;;;;;;;1249:42:58;58205:40:56;;5078:7;;58254:6;;25257:18:73;;58205:94:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;58201:297;;-1:-1:-1;;;;;58400:27:56;;;;;;:16;:27;;;;;:37;;58431:6;;58400:27;:37;;58431:6;;58400:37;:::i;:::-;;;;-1:-1:-1;;58456:31:56;;160:25:73;;;-1:-1:-1;;;;;58456:31:56;;;;;148:2:73;133:18;58456:31:56;14:177:73;46268:2694:56;46464:7;46491:9;:16;46511:2;46491:22;46487:53;;46522:18;;-1:-1:-1;;;46522:18:56;;;;;;;;;;;46487:53;47366:11;47386:9;47396:1;47386:12;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;47421:4:56;47413:12;;:17;;:38;;-1:-1:-1;47442:4:56;47434:12;;:17;;47413:38;47409:69;;;47460:18;;-1:-1:-1;;;47460:18:56;;;;;;;;;;;47409:69;47944:23;47970:53;47995:9;48006:16;47970:24;:53::i;:::-;48639:15;;48589:89;;47944:79;;-1:-1:-1;48518:7:56;;;;572:42:60;;-1:-1:-1;;;48612:25:56;48589:89;;48656:9;;47944:79;;48589:89;;;:::i;:::-;;;;-1:-1:-1;;48589:89:56;;;;;;;;;;;;;;-1:-1:-1;;;;;48589:89:56;-1:-1:-1;;;;;;48589:89:56;;;;;;;;;;48550:138;;;;48589:89;48550:138;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48517:171;;;;48703:2;48702:3;:26;;;;48709:6;:13;48726:2;48709:19;;48702:26;48698:66;;;48757:6;48737:27;;-1:-1:-1;;;48737:27:56;;;;;;;;:::i;48698:66::-;48790:6;48779:26;;;;;;;;;;;;:::i;:::-;48774:71;;48839:5;48814:31;;-1:-1:-1;;;48814:31:56;;;;;;;;:::i;48774:71::-;48911:44;48927:9;48938:16;48911:15;:44::i;:::-;48904:51;46268:2694;-1:-1:-1;;;;;;;;46268:2694:56:o;11603:216:58:-;11717:17;;;11685:7;11717:17;;;:8;:17;;;;;:29;11708:38;;11704:76;;11755:25;;-1:-1:-1;;;11755:25:58;;;;;160::73;;;133:18;;11755:25:58;14:177:73;11704:76:58;-1:-1:-1;11806:5:58;;11603:216;-1:-1:-1;11603:216:58:o;6666:885:51:-;6975:22;13508:11;13649:9;13646:25;13463:14;13619:9;13616:28;13612:60;7011:73;;-1:-1:-1;12939:4:51;12933:11;;13000:16;12990:27;;12777:15;13044:4;13037:12;;13030:31;12820:18;13095:12;;;13088:33;;;;13155:9;13148:4;13141:12;;13134:31;13199:9;13192:4;13185:12;;13178:31;13248:4;13235:18;;7011:73;7218:18;7212:4;7205:32;7284:6;7278:4;7271:20;7348:10;7342:4;7335:24;7424:4;7418;7408:21;7398:31;;7533:1;7527:4;7520:15;6666:885;;;:::o;51660:648:56:-;51841:4;51865:41;51889:16;51865:23;:41::i;:::-;51861:339;;;52173:16;-1:-1:-1;;;;;52126:63:56;:43;52151:6;52159:9;;52126:24;:43::i;:::-;-1:-1:-1;;;;;52126:63:56;;52119:70;;;;51861:339;52217:84;52265:16;52283:6;52291:9;;52217:47;:84::i;:::-;52210:91;51660:648;-1:-1:-1;;;;;51660:648:56:o;53450:902::-;-1:-1:-1;;;;;53859:28:56;;;53844:12;53859:28;;;:10;:28;;;;;;;;:35;;53935:135;;;;;;;;;;4290:16;53935:135;;;;;;;;;;;;;;;;;;;;;;;;53859:35;53935:135;;;;;;;-1:-1:-1;;;53859:35:56;;;53935:135;;;;;;53904:28;;;;;;;;:166;;;;;;;;-1:-1:-1;;;53904:166:56;-1:-1:-1;;;;53904:166:56;;;;-1:-1:-1;;;53904:166:56;-1:-1:-1;;;;;;53904:166:56;;;;;;;;;;;;;;;;;;;;;;;;53859:35;;53935:135;53904:166;53859:28;;-1:-1:-1;;;;53904:166:56;-1:-1:-1;;;;53904:166:56;;;;-1:-1:-1;;;53904:166:56;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;53904:166:56;;;;;;;;;;;;;;;-1:-1:-1;;;;53904:166:56;;;-1:-1:-1;;;53904:166:56;;;;;;;-1:-1:-1;;;;53904:166:56;;;;;-1:-1:-1;;;53904:166:56;;;;;;-1:-1:-1;;;;;53904:166:56;-1:-1:-1;;;53904:166:56;;;;;;;;;;;;;;-1:-1:-1;;;;;54117:28:56;;-1:-1:-1;54117:28:56;;;:10;:28;;;;;54155:48;54117:28;-1:-1:-1;54155:10:56;:48::i;:::-;-1:-1:-1;;;;;54213:28:56;;;;;;:10;:28;;;;;:40;54244:9;;54213:28;:40;:::i;:::-;-1:-1:-1;;;;;;54263:26:56;;;;;;:8;:26;;;;;;;:37;;;54316:29;;;;;54332:12;;54316:29;:::i;:::-;;;;;;;;53622:730;;53450:902;;;;;:::o;11825:274:58:-;-1:-1:-1;;;;;11962:26:58;;11925:7;11962:26;;;:8;:26;;;;;;11925:7;12016:22;;;:51;;12066:1;12016:51;;;12041:22;12051:12;12041:7;:22;:::i;69537:274:56:-;69642:20;;;:42;;-1:-1:-1;69666:18:56;;69642:42;:77;;;;69704:15;69688:13;:31;69642:77;69638:167;;;69742:52;;-1:-1:-1;;;69742:52:56;;;;;26711:25:73;;;26752:18;;;26745:34;;;26684:18;;69742:52:56;26529:256:73;55168:221:56;55240:50;55251:9;55262:27;55240:10;:50::i;:::-;55300:35;;-1:-1:-1;;;;55300:35:56;-1:-1:-1;;;55300:35:56;;;55351:31;;;;;;55300:9;;55351:31;:::i;72836:212::-;72929:25;72919:6;:35;;;;;;;;:::i;:::-;;:68;;;-1:-1:-1;72968:19:56;72958:6;:29;;;;;;;;:::i;:::-;;72919:68;72915:127;;;73024:6;73010:21;;-1:-1:-1;;;73010:21:56;;;;;;;;:::i;72472:150::-;72543:16;72578:37;:13;:28;72598:6;72592:13;;;;;;;;:::i;:::-;72578:28;;;;;;;;;;;;;;;:35;:37::i;8153:490:58:-;8330:7;8427:15;8445:49;8459:16;8477;8445:13;:49::i;:::-;-1:-1:-1;;;;;8504:26:58;;;;;;:8;:26;;;;;:37;;8427:67;;-1:-1:-1;8427:67:58;;8504:26;;;:37;;8427:67;;8504:37;:::i;:::-;;;;-1:-1:-1;;8551:60:58;;-1:-1:-1;;;8551:60:58;;-1:-1:-1;;;;;25302:32:73;;8551:60:58;;;25284:51:73;25351:18;;;25344:34;;;-1:-1:-1;;;;;;;;;;;1249:42:58;8551:40;;25257:18:73;;8551:60:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8629:7:58;;8153:490;-1:-1:-1;;;;;;;8153:490:58:o;67792:419:56:-;67951:17;;68051:1;68033:14;68013:16;68022:7;68013:6;:16;:::i;:::-;68007:40;;;;:::i;:::-;68006:46;;;;:::i;:::-;67984:68;;68062:22;68087:15;68103:13;68087:30;;;;;;;;;:::i;:::-;;;;68062:55;;68147:6;68131:22;;:4;:12;;;;;;;;;;;;:22;;;68127:55;;68162:20;;-1:-1:-1;;;68162:20:56;;20042:10:73;20030:23;;68162:20:56;;;20012:42:73;19985:18;;68162:20:56;19868:192:73;68321:550:56;68480:17;;68577:16;68587:6;68577:7;:16;:::i;:::-;68551:43;-1:-1:-1;68669:13:56;68722:1;68551:43;68686:18;68690:14;68722:1;68686:18;:::i;:::-;:32;;;;:::i;:::-;68685:38;;;;:::i;:::-;68669:54;;68734:22;68759:9;68769:7;68759:18;;;;;;;;;:::i;:::-;;;;68734:43;;68807:6;68791:22;;:4;:12;;;;;;;;;;;;:22;;;68787:55;;68822:20;;-1:-1:-1;;;68822:20:56;;20042:10:73;20030:23;;68822:20:56;;;20012:42:73;19985:18;;68822:20:56;19868:192:73;68787:55:56;68860:4;68321:550;-1:-1:-1;;;;;;68321:550:56:o;2710:117:39:-;1721:16;:14;:16::i;:::-;2768:7:::1;:15:::0;;-1:-1:-1;;2768:15:39::1;::::0;;2798:22:::1;735:10:36::0;2807:12:39::1;2798:22;::::0;-1:-1:-1;;;;;3241:32:73;;;3223:51;;3211:2;3196:18;2798:22:39::1;;;;;;;2710:117::o:0;12506:305:58:-;-1:-1:-1;;;;;12629:29:58;;;12578:7;12629:29;;;:11;:29;;;;;12688:20;;;;12578:7;;12629:29;;12688:20;;12718:59;;-1:-1:-1;12761:16:58;;12795:9;-1:-1:-1;;12506:305:58:o;9978:327:27:-;-1:-1:-1;;;;;10045:16:27;;10041:87;;10084:33;;-1:-1:-1;;;10084:33:27;;10114:1;10084:33;;;3223:51:73;3196:18;;10084:33:27;3077:203:73;10041:87:27;10137:21;10161:32;10169:2;10173:7;10190:1;10161:7;:32::i;:::-;10137:56;-1:-1:-1;;;;;;10207:27:27;;;10203:96;;10257:31;;-1:-1:-1;;;10257:31:27;;10285:1;10257:31;;;3223:51:73;3196:18;;10257:31:27;3077:203:73;50060:581:56;50340:4;50334:11;;50199:4;50183:21;;;50378:10;-1:-1:-1;;;;;50374:83:56;50358:100;;50504:14;;;50498:21;50478:18;;;50471:49;50566:14;;;;50560:21;50540:18;;;50533:49;;;;50601:24;;50060:581::o;13398:216:58:-;13463:4;13483:12;;;:44;;-1:-1:-1;;;;;;13499:28:58;;;13483:44;13479:80;;;13536:23;;-1:-1:-1;;;13536:23:58;;;;;160:25:73;;;133:18;;13536:23:58;14:177:73;13479:80:58;-1:-1:-1;13605:1:58;5824:16:27;;;:7;:16;;;;;;-1:-1:-1;;;;;5824:16:27;13576:31:58;;;13398:216::o;2912:187:20:-;3004:6;;;-1:-1:-1;;;;;3020:17:20;;;3004:6;3020:17;;;-1:-1:-1;;;;;;3020:17:20;;;;;;3052:40;;3004:6;;;;;;;;3052:40;;2985:16;;3052:40;2975:124;2912:187;:::o;68877:477:56:-;69186:1;69169:179;69189:26;;;69169:179;;;69266:15;;69282:1;69266:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;69240:44:56;:15;;69256:5;69260:1;69256;:5;:::i;:::-;69240:22;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;69240:44:56;;69236:101;;69314:15;;69330:5;69334:1;69330;:5;:::i;:::-;69314:22;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;69293:44;;-1:-1:-1;;;69293:44:56;;-1:-1:-1;;;;;3241:32:73;;;69293:44:56;;;3223:51:73;3196:18;;69293:44:56;3077:203:73;69236:101:56;69217:3;;69169:179;;12149:3644;12288:23;12314:30;:21;:28;:30::i;:::-;12376:12;;12288:56;;-1:-1:-1;;;;12376:12:56;;;;12354:19;;12433:3053;12453:6;:13;12449:1;:17;12433:3053;;;12487:24;12514:6;12521:1;12514:9;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;12580:39:56;;;12537:40;12580:39;;;:21;:39;;;;;;;12537:82;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;12537:82:56;;;;;;;;;;;;;;;;;;;12514:9;;-1:-1:-1;12537:82:56;12796:26;;:68;;-1:-1:-1;;;;;;12826:28:56;;;;;;:10;:28;;;;;:38;-1:-1:-1;;;12826:38:56;;;;12796:68;12792:176;;;12884:43;12910:16;12884:25;:43::i;:::-;12945:8;;;;12792:176;-1:-1:-1;;;;;13016:28:56;;12982:31;13016:28;;;:10;:28;;;;;;;;13077:22;;;-1:-1:-1;;;13077:22:56;;;;;13138:20;;;:8;:20;;;;;;:32;13218:21;;13209:31;;;;;;;;;:43;13471:31;;;:100;;;;;4736:1;13521:7;:20;;;:50;;;;:::i;:::-;13506:65;;:12;:65;;;13471:100;13467:159;;;13603:8;;;;;;;;13467:159;-1:-1:-1;;;;;13647:39:56;;;;;;:21;:39;;;;;13640:46;;-1:-1:-1;;;;;;13640:46:56;;;;;;13700;:21;13669:16;13700:28;:46::i;:::-;;13761:14;13810;13793;:31;13789:1310;;;14069:14;;;;-1:-1:-1;;;;;14039:26:56;;;;;;:8;:26;;;;;:44;;:26;;;:44;;14069:14;;14039:44;:::i;:::-;;;;-1:-1:-1;13789:1310:56;;-1:-1:-1;13789:1310:56;;14376:15;14394:31;14411:14;14394;:31;:::i;:::-;-1:-1:-1;;;;;14468:26:56;;14443:22;14468:26;;;:8;:26;;;;;;14376:49;;-1:-1:-1;14516:32:56;;;14512:219;;14581:7;14572:16;;14512:219;;;14634:14;14617;:31;14613:118;;;14681:31;14698:14;14681;:31;:::i;:::-;14672:40;;14613:118;14752:10;;14748:283;;-1:-1:-1;;;;;14786:26:56;;;;;;:8;:26;;;;;:36;;14816:6;;14786:26;:36;;14816:6;;14786:36;:::i;:::-;;;;-1:-1:-1;14844:17:56;;-1:-1:-1;14864:31:56;14878:16;14864:13;:31::i;:::-;-1:-1:-1;;;;;14917:27:56;;;;;;:16;:27;;;;;:37;;14844:51;;-1:-1:-1;14948:6:56;;14917:27;;;:37;;14948:6;;14917:37;:::i;:::-;;;;-1:-1:-1;;14981:31:56;;160:25:73;;;-1:-1:-1;;;;;14981:31:56;;;;;148:2:73;133:18;14981:31:56;;;;;;;14764:267;14748:283;15068:16;15078:6;15068:7;:16;:::i;:::-;15048:36;;;;:::i;:::-;;;14104:995;;13789:1310;15138:21;;15113:46;;;;;;-1:-1:-1;;;15113:46:56;-1:-1:-1;;;;15113:46:56;;;;;;-1:-1:-1;;;;;12264:29:58;;;-1:-1:-1;12264:29:58;;;:11;:29;;;;;:39;;;;:53;15173:139:56;;15276:21;;-1:-1:-1;;;;;15227:29:56;;15276:21;15227:29;;;:11;:29;;;;;:46;;:70;;;;;;-1:-1:-1;;;15227:70:56;-1:-1:-1;;;;15227:70:56;;;;;;;;;15173:139;15408:21;;15331:144;;;31973:4:73;31961:17;;;31943:36;;32015:17;;;32010:2;31995:18;;31988:45;32049:18;;32042:34;;;32107:2;32092:18;;32085:34;;;-1:-1:-1;;;;;15331:144:56;;;;;31930:3:73;31915:19;15331:144:56;;;;;;;12473:3013;;;;;;;12433:3053;12468:3;;12433:3053;;;-1:-1:-1;15582:20:56;;15578:209;;15630:44;;15619:6;;-1:-1:-1;;;;;;;;;;;1249:42:58;15652:16:56;;15619:6;15630:44;15619:6;15630:44;15652:16;1249:42:58;15630:44:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15618:56;;;15742:1;15737:39;;15752:24;;-1:-1:-1;;;15752:24:56;;;;;;;;;;;66115:1404;66347:12;;66209:6;;;;;;66234:16;;-1:-1:-1;;;66347:12:56;;;;66209:6;66418:1;66394:20;66347:12;66413:1;66394:20;:::i;:::-;66393:26;;;;:::i;:::-;66471:12;:30;;-1:-1:-1;;;;66471:30:56;-1:-1:-1;;;66471:30:56;;;;;;;;;;-1:-1:-1;;;66531:12:56;;66529:14;;-1:-1:-1;;;66529:14:56;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;66511:32;;66553:30;66586:15;66602;66586:32;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;66586:42:56;66674:23;:21;:23::i;:::-;66638:59;;66736:215;;;;;;;;66759:12;66736:215;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;66736:215:56;;;;;;;;;;;;;;;;-1:-1:-1;;;66736:215:56;;;-1:-1:-1;;66785:28:56;;;;;66736:215;;;;;66827:24;66834:12;66850:1;66827:24;:::i;:::-;-1:-1:-1;;;;;66736:215:56;;;;;;;;;;;66887:28;;;;;66736:215;;;;;;;66929:12;;;;;;66736:215;;;;;66707:9;;:26;;;;;;;;;:::i;:::-;;;;:244;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;66707:244:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;66707:244:56;;;-1:-1:-1;;;;;;66707:244:56;;;;;;;-1:-1:-1;;;66707:244:56;;;;;;-1:-1:-1;;;;66707:244:56;-1:-1:-1;;;66707:244:56;;;;;-1:-1:-1;;;;66707:244:56;;;;;-1:-1:-1;;;66707:244:56;;;;;;;;;;;;-1:-1:-1;;67303:1:56;;67280:19;;:15;;:19;:::i;:::-;67279:25;;;;:::i;:::-;67246:58;;67358:52;;;;;;;;67368:15;67358:52;;;;67385:1;67358:52;;;;67388:1;-1:-1:-1;;;;;67358:52:56;;;;;67391:8;67402:1;67391:12;;;;:::i;:::-;67358:52;;;;67405:1;67358:52;;;;;;;;;;;67314:15;67358:52;67314:41;;;;;;;;;:::i;:::-;;;;:96;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;67314:96:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;67314:96:56;-1:-1:-1;;;;67314:96:56;;;;-1:-1:-1;;;67314:96:56;;-1:-1:-1;;;;67314:96:56;;;;-1:-1:-1;;;67314:96:56;-1:-1:-1;;;;;;67314:96:56;;;-1:-1:-1;;;;;67314:96:56;;;;;;;;;;;;;;;;;;;;;;;67439:28;;;;67469;;;;67421:91;;;;;;;;;;;;;;;;;67429:8;;67439:28;67469;;67499:12;;67421:91;67499:12;;67421:91;;67499:12;67421:91;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;67421:91:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;66115:1404;;;;;:::o;60327:1684::-;60521:34;60558:49;60573:33;60558:14;:49::i;:::-;60521:86;;60622:9;60617:193;60637:17;:24;60633:1;:28;60617:193;;;60682:39;60724:10;:32;60735:17;60753:1;60735:20;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;60724:32:56;-1:-1:-1;;;;;60724:32:56;;;;;;;;;;;;60682:74;;60771:28;60781:17;60771:9;:28::i;:::-;-1:-1:-1;60663:3:56;;60617:193;;;;60820:28;60851:43;60866:27;60851:14;:43::i;:::-;60932:12;;60820:74;;-1:-1:-1;;;;60932:12:56;;;;60904:25;61007:1;60980:23;60932:12;61002:1;60980:23;:::i;:::-;60979:29;;;;:::i;:::-;60954:54;;61335:20;5241:53;61402:7;61368:42;;;;;;;;38596:19:73;;;38671:3;38649:16;-1:-1:-1;;;;;;38645:43:73;38640:2;38631:12;;38624:65;38714:2;38705:12;;38441:282;61368:42:56;;;;;;;;;;;;;61358:53;;;;;;61335:76;;61421:77;61443:9;61453:19;61443:30;;;;;;;;;:::i;:::-;;;;61421:77;;;;;;;;;;;;;;;;;;;;61443:30;61421:77;;;61443:30;61421:77;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;61421:77:56;;;;;;;;;;;;;;;;;;;;;61485:12;61421:21;:77::i;:::-;61508:80;61530:15;61546:16;61530:33;;;;;;;;;:::i;61508:80::-;61598:52;61620:15;;61598:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;61637:12:56;;-1:-1:-1;61598:21:56;;-1:-1:-1;;61598:52:56:i;:::-;61665:9;61660:345;61680:11;:18;61676:1;:22;61660:345;;;61719:24;61746:11;61758:1;61746:14;;;;;;;;:::i;:::-;;;;;;;61719:41;;61876:50;61895:16;61913:12;61876:18;:50::i;:::-;61872:64;;;61928:8;;;61872:64;-1:-1:-1;;;;;61956:28:56;;;;;;:10;:28;;;;;61950:44;;61986:7;61950:5;:44::i;:::-;61705:300;61660:345;61700:3;;61660:345;;;;60419:1592;;;;;60327:1684;;;:::o;2463:115:39:-;1474:19;:17;:19::i;:::-;2522:7:::1;:14:::0;;-1:-1:-1;;2522:14:39::1;;;::::0;;2551:20:::1;2558:12;735:10:36::0;;656:96;56125:658:56;56376:42;56387:9;56398:19;56376:10;:42::i;:::-;56428:26;;-1:-1:-1;;;;56428:26:56;;-1:-1:-1;;;56428:26:56;;;56680:53;;-1:-1:-1;;;;;56706:26:56;56680:25;:53::i;:::-;56749:27;56766:9;56749:27;;;;;;:::i;11510:227:27:-;11561:21;11585:40;11601:1;11605:7;11622:1;11585:7;:40::i;:::-;11561:64;-1:-1:-1;;;;;;11639:27:27;;11635:96;;11689:31;;-1:-1:-1;;;11689:31:27;;;;;160:25:73;;;133:18;;11689:31:27;14:177:73;10243:273:49;10306:16;10334:22;10359:19;10367:3;10359:7;:19::i;8289:150::-;8359:4;8382:50;8387:3;-1:-1:-1;;;;;8407:23:49;;8382:4;:50::i;71320:255:56:-;71407:4;71441:22;71431:6;:32;;;;;;;;:::i;:::-;;:73;;;-1:-1:-1;71477:27:56;71467:6;:37;;;;;;;;:::i;:::-;;71431:73;:136;;;-1:-1:-1;71534:33:56;71524:6;:43;;;;;;;;:::i;:::-;;71423:145;71320:255;-1:-1:-1;;71320:255:56:o;985:924:33:-;-1:-1:-1;;;;;1165:14:33;;;:18;1161:742;;1203:67;;-1:-1:-1;;;1203:67:33;;-1:-1:-1;;;;;1203:36:33;;;;;:67;;1240:8;;1250:4;;1256:7;;1265:4;;1203:67;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1203:67:33;;;;;;;;-1:-1:-1;;1203:67:33;;;;;;;;;;;;:::i;:::-;;;1199:694;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1560:6;:13;1577:1;1560:18;1556:323;;1664:39;;-1:-1:-1;;;1664:39:33;;-1:-1:-1;;;;;3241:32:73;;1664:39:33;;;3223:51:73;3196:18;;1664:39:33;3077:203:73;1556:323:33;1831:6;1825:13;1816:6;1812:2;1808:15;1801:38;1199:694;-1:-1:-1;;;;;;1317:51:33;;-1:-1:-1;;;1317:51:33;1313:182;;1437:39;;-1:-1:-1;;;1437:39:33;;-1:-1:-1;;;;;3241:32:73;;1437:39:33;;;3223:51:73;3196:18;;1437:39:33;3077:203:73;3297:723:42;3363:13;3388:19;3416:17;3428:4;3416:11;:17::i;:::-;3635:2;3628:4;3616:17;;3606:32;3388:46;;-1:-1:-1;3602:2:42;3598:41;3676:2;3659:324;3684:1;3680;:5;3659:324;;;3816:1;3798:9;3810:3;3798:15;:19;:44;;;;;3840:2;3827:6;3834:1;3827:9;;;;;;;;:::i;:::-;;;;;;;3821:21;3798:44;3794:150;;;3925:4;3912:17;;:6;3919:1;3912:9;;;;;;;;:::i;:::-;;;;:17;;-1:-1:-1;;;;;;3912:17:42;;;;;;;;;;;;;;;;;3794:150;3971:1;3957:15;;;;;3687:3;;;:::i;:::-;;;3659:324;;;-1:-1:-1;4006:6:42;;3297:723;-1:-1:-1;;;3297:723:42:o;7929:169:58:-;7989:13;8065:25;8085:3;;;;;;;;;;;;;;;;;8065:13;:25::i;:::-;8021:70;;;;;;;;:::i;:::-;;;;;;;;;;;;;8014:77;;7929:169;:::o;663:124:35:-;721:13;753:27;761:4;767:6;;;;;;;;;;;;;;;;;775:4;753:7;:27::i;39146:1351:56:-;39337:15;39355:31;39372:14;39355;:31;:::i;:::-;-1:-1:-1;;;;;39421:26:56;;39396:22;39421:26;;;:8;:26;;;;;;39337:49;;-1:-1:-1;39491:32:56;;;39487:319;;-1:-1:-1;39602:7:56;39487:319;;;39647:14;39630;:31;39626:180;;;39764:31;39781:14;39764;:31;:::i;:::-;39749:46;;39626:180;39879:16;;39875:245;;-1:-1:-1;;;;;39911:26:56;;;;;;:8;:26;;;;;:42;;39941:12;;39911:26;:42;;39941:12;;39911:42;:::i;:::-;;;;-1:-1:-1;;40032:77:56;;-1:-1:-1;;;40032:77:56;;-1:-1:-1;;;;;25302:32:73;;40032:77:56;;;25284:51:73;40107:1:56;25351:18:73;;;25344:34;-1:-1:-1;;;;;;;;;;;1249:42:58;40032:40:56;;40081:12;;25257:18:73;;40032:77:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39875:245;40220:25;40248:22;40258:12;40248:7;:22;:::i;:::-;40220:50;-1:-1:-1;40284:21:56;;40280:211;;40333:45;;40322:6;;-1:-1:-1;;;;;;;;;;;1249:42:58;40355:17:56;;40322:6;40333:45;40322:6;40333:45;40355:17;1249:42:58;40333:45:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40321:57;;;40446:1;40441:39;;40456:24;;-1:-1:-1;;;40456:24:56;;;;;;;;;;;40280:211;39327:1170;;;;39146:1351;;;;:::o;71687:411::-;71813:23;;71772:4;;-1:-1:-1;;;71813:23:56;;;;71860:22;71850:6;:32;;;;;;;;:::i;:::-;;71846:49;;-1:-1:-1;71891:4:56;;71687:411;-1:-1:-1;;71687:411:56:o;71846:49::-;71929:19;;71906:20;;71929:23;;-1:-1:-1;;;71929:19:56;;;;71951:1;71929:23;:::i;:::-;71906:46;-1:-1:-1;71976:22:56;71966:6;:32;;;;;;;;:::i;:::-;;:65;;;;-1:-1:-1;72002:12:56;;:29;;;;-1:-1:-1;;;72002:12:56;;;;:29;;71966:65;71962:107;;;-1:-1:-1;72054:4:56;;71687:411;-1:-1:-1;;;71687:411:56:o;71962:107::-;-1:-1:-1;72086:5:56;;71687:411;-1:-1:-1;;;71687:411:56:o;9453:1710:58:-;9624:7;9647:35;9665:16;9647:17;:35::i;:::-;9694:11;9707:16;9725:15;9744:37;9764:16;9744:19;:37::i;:::-;9693:88;;;;;;9854:3;9861:1;9854:8;9850:24;;9871:3;9864:10;;;;;;;9850:24;-1:-1:-1;;;;;9976:26:58;;10005:1;9976:26;;;:8;:26;;;;;:30;;;10048:15;;;10044:582;;-1:-1:-1;10186:8:58;10044:582;;;-1:-1:-1;10335:3:58;10460:6;-1:-1:-1;;;;;;;;;;;10493:14:58;10335:3;10493:8;:14;:::i;:::-;10471:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10459:54;;;10581:1;10576:39;;10591:24;;-1:-1:-1;;;10591:24:58;;;;;;;;;;;10576:39;10211:415;10044:582;10836:21;:51;;;;-1:-1:-1;;;;;;;;;;;;10871:16:58;10861:26;;10836:51;10832:83;;;-1:-1:-1;;;;;;;;;;;10899:16:58;;-1:-1:-1;10832:83:58;11037:81;;-1:-1:-1;;;11037:81:58;;-1:-1:-1;;;;;25302:32:73;;11037:81:58;;;25284:51:73;25351:18;;;25344:34;;;-1:-1:-1;;;;;;;;;;;1249:42:58;11037:40;;11086:10;;25257:18:73;;11037:81:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11149:7;11136:10;:20;;;;:::i;62200:1455:56:-;62313:12;;-1:-1:-1;;;62313:12:56;;;;;-1:-1:-1;;;62363:12:56;;;;62296:14;62422:58;62313:12;;62363;62422:19;:58::i;:::-;:68;-1:-1:-1;62500:42:56;62422:68;62525:16;62500:6;:42::i;:::-;-1:-1:-1;62576:23:56;;62609:47;62629:11;62576:23;62609:19;:47::i;:::-;62667:16;62686:11;:7;62696:1;62686:11;:::i;:::-;62667:30;;62707:31;62741:60;62761:9;62772:7;62781:19;62741;:60::i;:::-;:70;-1:-1:-1;62821:39:56;62741:70;62843:16;62821:6;:39::i;:::-;-1:-1:-1;62886:20:56;;;-1:-1:-1;62916:47:56;62936:11;62886:20;62916:19;:47::i;:::-;62974:22;62999:11;:7;63009:1;62999:11;:::i;:::-;62974:36;;63020:37;63068:66;63088:15;63105:7;63114:19;63068;:66::i;:::-;:76;-1:-1:-1;63154:45:56;63068:76;63182:16;63154:6;:45::i;:::-;-1:-1:-1;63225:26:56;;;-1:-1:-1;63261:47:56;63281:11;63225:26;63261:19;:47::i;:::-;63420:17;;-1:-1:-1;;;63420:17:56;;;;-1:-1:-1;;63416:233:56;;;63484:17;;;;63515:39;;;-1:-1:-1;;;63515:39:56;;;-1:-1:-1;;;;63515:39:56;;;;;;;63573:65;;;63484:17;;;;;;27241:38:73;;;63607:17:56;;;;;;;27310:2:73;27295:18;;27288:47;27351:18;;;27344:34;;;63573:65:56;;27229:2:73;27214:18;63573:65:56;;;;;;;63453:196;63416:233;62286:1369;;;;;;;;62200:1455;;:::o;55636:212::-;55717:45;55728:9;55739:22;55717:10;:45::i;:::-;55772:27;;-1:-1:-1;;;;55772:27:56;-1:-1:-1;;;55772:27:56;;;;;;;55815:26;;;;;;55772:27;;55815:26;:::i;9229:218:58:-;9301:36;-1:-1:-1;;;;;13353:32:58;;43446:5:56::1;:36::i;9301::58:-:0;2140:10:30;:17;9368:1:58;9351:18;9347:46;;9378:15;;-1:-1:-1;;;9378:15:58;;;;;;;;;;;9347:46;-1:-1:-1;;;;;9411:29:58;;;;;:11;:29;;;;;9404:36;;;;;;;;-1:-1:-1;;;;;;9404:36:58;;;;;;;-1:-1:-1;;;;;;9404:36:58;;;9229:218::o;59056:783:56:-;59169:26;;-1:-1:-1;;;;;59169:26:56;;;-1:-1:-1;;;59233:23:56;;;;59267:44;59169:26;59267:13;59154:12;59233:23;59281:16;;;;;;;;:::i;:::-;59267:31;;;;;;;;;;;;;-1:-1:-1;59267:31:56;;:38;:44::i;:::-;-1:-1:-1;59338:25:56;59325:9;:38;;;;;;;;:::i;:::-;;;:74;;;;-1:-1:-1;59380:19:56;59367:9;:32;;;;;;;;:::i;:::-;;;59325:74;59321:146;;;59415:41;59451:4;59415:13;:31;59435:9;59429:16;;;;;;;;:::i;59415:41::-;;59321:146;59477:16;59496:41;59527:9;59496:30;:41::i;:::-;59477:60;;59547:16;59566:41;59597:9;59566:30;:41::i;:::-;59547:60;;59621:11;:27;;;;;59637:11;59636:12;59621:27;59617:170;;;59666:22;;59664:24;;;;;:::i;:::-;;;;-1:-1:-1;59617:170:56;;;59710:11;59709:12;:27;;;;;59725:11;59709:27;59705:82;;;59754:22;;59752:24;;;;;:::i;:::-;;;;-1:-1:-1;59705:82:56;59797:35;;59823:9;;59797;;-1:-1:-1;;;;59797:35:56;-1:-1:-1;;;59823:9:56;59797:35;;;;;;;;:::i;:::-;;;;;;59144:695;;;;59056:783;;:::o;2815:1368:49:-;2881:4;3010:21;;;:14;;;:21;;;;;;3046:13;;3042:1135;;3413:18;3434:12;3445:1;3434:8;:12;:::i;:::-;3480:18;;3413:33;;-1:-1:-1;3460:17:49;;3480:22;;3501:1;;3480:22;:::i;:::-;3460:42;;3535:9;3521:10;:23;3517:378;;3564:17;3584:3;:11;;3596:9;3584:22;;;;;;;;:::i;:::-;;;;;;;;;3564:42;;3731:9;3705:3;:11;;3717:10;3705:23;;;;;;;;:::i;:::-;;;;;;;;;;;;:35;;;;3844:25;;;:14;;;:25;;;;;:36;;;3517:378;3973:17;;:3;;:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;4076:3;:14;;:21;4091:5;4076:21;;;;;;;;;;;4069:28;;;4119:4;4112:11;;;;;;;3042:1135;4161:5;4154:12;;;;;3042:1135;2887:1296;2815:1368;;;;:::o;45326:595:56:-;45476:12;45790:6;:13;45807:2;45790:19;45786:50;;45818:18;;-1:-1:-1;;;45818:18:56;;;;;;;;;;;45786:50;45853:61;;;;44899:8;;45889:6;;45897:16;;45853:61;;;:::i;:::-;;;;;;;;;;;;;45846:68;;45326:595;;;;:::o;49072:363::-;49164:21;49213:20;49223:9;49213;:20::i;:::-;49298:1;49247:39;;;:24;:39;;;;;;49197:36;;-1:-1:-1;;;;;;49247:39:56;:53;49243:86;;49309:20;;-1:-1:-1;;;49309:20:56;;;;;;;;;;;49243:86;49339:39;;;;:24;:39;;;;;:58;;-1:-1:-1;;;;;49339:58:56;;-1:-1:-1;;;;;;49339:58:56;;;;;;49072:363;;;;:::o;52998:299::-;53071:4;52464:2;53091:7;-1:-1:-1;;;;;53091:19:56;;:48;53087:66;;-1:-1:-1;53148:5:56;;52998:299;-1:-1:-1;52998:299:56:o;53087:66::-;53164:17;53184:7;-1:-1:-1;;;;;53184:12:56;;;;;;;;;;;;;;;;;;;;;;;;53213:7;;53164:32;;-1:-1:-1;;;;53224:12:56;53164:32;;53218:1;;53213:7;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;53213:7:56;:23;:50;;;;-1:-1:-1;53240:7:56;;-1:-1:-1;;;53251:12:56;53240:4;;53258;;53240:7;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;53240:7:56;:23;53213:50;:77;;;;-1:-1:-1;53267:7:56;;53285:4;;53267;;53272:1;;53267:7;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;53267:7:56;:23;53206:84;52998:299;-1:-1:-1;;;52998:299:56:o;9664:1284:50:-;9779:14;9896:4;9890:11;9934:16;9972:2;9967:297;;;;10286:2;10281:204;;;;10512:5;;;9967:297;10042:4;10020:27;;;10007:41;10090:3;10086:12;;;10100:2;10082:21;10069:35;;;10146:30;;10140:4;10133:44;-1:-1:-1;;;;;10219:18:50;10213:4;10206:32;9967:297;;10281:204;10367:4;10349:16;10345:27;10332:41;10329:1;10324:50;10318:4;10311:64;10441:4;10423:16;10417:4;10404:42;9927:592;;10549:4;10543;10536:18;10614:4;10608;10602;10596;10593:1;10586:5;10575:44;10571:49;10650:1;10644:4;10637:15;10810:16;10804:4;10800:27;10794:34;10784:44;;10858:1;10852:4;10845:15;9879:24;9664:1284;;;;;:::o;4225:2099:55:-;4365:12;-1:-1:-1;;;;;4397:20:55;;4393:40;4419:14;4393:40;4524:4;4518:11;4594:6;4582:19;4572:1072;;4632:16;4674:2;4669:317;;;;5012:2;5007:208;;;;5246:5;;;4669:317;4748:4;4726:27;;;4713:41;4800:3;4796:12;;;4810:2;4792:21;4779:35;;;4860:30;;4854:4;4847:44;-1:-1:-1;;;;;4937:18:55;4931:4;4924:32;4669:317;;5007:208;5097:4;5079:16;5075:27;5062:41;5059:1;5054:50;5048:4;5041:64;5175:4;5157:16;5151:4;5138:42;4625:628;;5287:4;5281;5274:18;5375:4;5369;5363;5357;5354:1;5347:5;5336:44;5330:51;5454:9;5446:6;5442:22;5438:2;5434:31;5416:16;5413:53;5402:64;;;5500:1;5494:4;5487:15;5562:1;5556:4;5549:15;5621:5;;4572:1072;5679:10;5674:3;5670:20;5717:1;5714;5707:12;5816:4;5809;5806:1;5802:12;5795:26;5854:4;5851:1;5847:12;5886:4;5883:1;5876:15;5979:16;5972:4;5969:1;5965:12;5958:38;6104:16;6086;6079:4;6076:1;6072:12;6059:62;6210:4;6207:1;6200:4;6182:16;6178:27;6175:1;6167:6;6160:5;6149:66;6250:8;;6247:15;;;6243:29;;-1:-1:-1;4542:1766:55;4546:2;4225:2099;;;;;;:::o;11169:428:58:-;11310:26;;;11268:7;11310:26;;;:8;:26;;;;;:38;11268:7;11376:43;11388:16;11310:38;11376:11;:43::i;:::-;11358:61;-1:-1:-1;11434:12:58;;;:70;;-1:-1:-1;11460:26:58;;;;;;;:8;:26;;;;;:44;;;11450:54;;11434:70;11430:136;;;11527:28;;-1:-1:-1;;;11527:28:58;;;;;160:25:73;;;133:18;;11527:28:58;14:177:73;2202:126:39;1920:7;;;;;;;2260:62;;2296:15;;-1:-1:-1;;;2296:15:39;;;;;;;;;;;2518:625:30;2613:7;2632:21;2656:32;2670:2;2674:7;2683:4;2656:13;:32::i;:::-;2632:56;-1:-1:-1;;;;;;2703:27:30;;2699:210;;2746:40;2778:7;3949:10;:17;;3922:24;;;;:15;:24;;;;;:44;;;3976:24;;;;;;;;;;;;3846:161;2746:40;2699:210;;;2824:2;-1:-1:-1;;;;;2807:19:30;:13;-1:-1:-1;;;;;2807:19:30;;2803:106;;2842:56;2875:13;2890:7;2842:32;:56::i;:::-;-1:-1:-1;;;;;2922:16:30;;2918:188;;2954:45;2991:7;2954:36;:45::i;:::-;2918:188;;;3037:2;-1:-1:-1;;;;;3020:19:30;:13;-1:-1:-1;;;;;3020:19:30;;3016:90;;3055:40;3083:2;3087:7;3055:27;:40::i;57156:641:56:-;-1:-1:-1;;;;;57279:39:56;;;57236:40;57279:39;;;:21;:39;;;;;;;;57236:82;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;57236:82:56;;;;;;;;;;;;;;;;;;;57332:26;;57328:179;;57430:46;:21;57459:16;57430:28;:46::i;57328:179::-;-1:-1:-1;;;;;57524:39:56;;;;;;:21;:39;;;;;57517:46;;-1:-1:-1;;;;;;57517:46:56;;;;;;57573;:21;57546:16;57573:28;:46::i;:::-;-1:-1:-1;57633:14:56;;;;:18;57629:162;;57703:14;;;;57684;;;;;-1:-1:-1;;;;;57667:32:56;;;;;:16;:32;;;;;:50;;:32;;;:50;;57703:14;;57667:50;:::i;:::-;;;;;;;;57749:7;:14;;;-1:-1:-1;;;;;57736:44:56;;57765:7;:14;;;57736:44;;;;160:25:73;;148:2;133:18;;14:177;54844:168:56;54915:45;54926:9;54937:22;54915:10;:45::i;:::-;54976:29;54995:9;54976:29;;;;;;:::i;70684:238::-;70788:9;70783:133;70803:9;:16;70799:1;:20;70783:133;;;70840:65;70900:4;70840:52;:40;70867:9;70877:1;70867:12;;;;;;;;:::i;:::-;;;;;;;70840;:26;;:40;;;;:::i;:::-;1766:4:43;1663:115;70840:52:56;:59;;:65::i;:::-;70821:3;;70783:133;;71014:192;-1:-1:-1;;;;;2831:25:40;;71112:4:56;2818:39:40;;;2877:4;2870:18;;;2927:4;2911:21;;3369:11:43;71135:64:56;3243:153:43;5581:109:49;5637:16;5672:3;:11;;5665:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5581:109;;;:::o;2241:406::-;2304:4;4360:21;;;:14;;;:21;;;;;;2320:321;;-1:-1:-1;2362:23:49;;;;;;;;:11;:23;;;;;;;;;;;;;2544:18;;2520:21;;;:14;;;:21;;;;;;:42;;;;2576:11;;2320:321;-1:-1:-1;2625:5:49;2618:12;;2973:148:42;3031:13;3063:51;-1:-1:-1;;;;;3075:22:42;;448:2;3063:11;:51::i;1186:4022:35:-;1283:13;1515:4;:11;1530:1;1515:16;1511:31;;-1:-1:-1;1533:9:35;;;;;;;;;-1:-1:-1;1533:9:35;;;;1511:31;2480:20;2503:11;:69;;2571:1;2552:4;:11;2548:1;:15;;;;:::i;:::-;:19;;2566:1;2548:19;:::i;:::-;2547:25;;;;:::i;:::-;2503:69;;;2542:1;2523:4;:11;2537:1;2523:15;;;;:::i;:::-;2522:21;;;;:::i;:::-;2517:27;;:1;:27;:::i;:::-;2480:92;;2583:20;2617:12;-1:-1:-1;;;;;2606:24:35;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2606:24:35;;2583:47;;2778:1;2771:5;2767:13;2879:4;2871:6;2867:17;2912:4;2959;2953:11;2947:4;2943:22;3207:4;3199:6;3195:17;3249:8;3243:15;3288:4;3278:8;3271:22;3360:1259;3393:6;3384:7;3381:19;3360:1259;;;3495:1;3486:7;3482:15;3471:26;;3533:7;3527:14;4120:4;4112:5;4108:2;4104:14;4100:25;4090:8;4086:40;4080:47;4069:9;4061:67;4173:1;4162:9;4158:17;4145:30;;4263:4;4255:5;4251:2;4247:14;4243:25;4233:8;4229:40;4223:47;4212:9;4204:67;4316:1;4305:9;4301:17;4288:30;;4405:4;4397:5;4394:1;4390:13;4386:24;4376:8;4372:39;4366:46;4355:9;4347:66;4458:1;4447:9;4443:17;4430:30;;4539:4;4532:5;4528:16;4518:8;4514:31;4508:38;4497:9;4489:58;;4592:1;4581:9;4577:17;4564:30;;3360:1259;;;4680:28;;-1:-1:-1;;4722:446:35;;;;4907:1;4900:4;4894:11;4890:19;4931:1;4926:132;;;;5080:1;5075:79;;;;4883:271;;4926:132;4982:4;4978:1;4967:9;4963:17;4955:32;5035:4;5031:1;5020:9;5016:17;5008:32;4926:132;;5075:79;5131:4;5127:1;5116:9;5112:17;5104:32;4883:271;;4722:446;-1:-1:-1;5195:6:35;;1186:4022;-1:-1:-1;;;;;;1186:4022:35:o;63661:394:56:-;63780:16;;63750:4;;;63806:221;63826:3;63822:1;:7;63806:221;;;63870:16;-1:-1:-1;;;;;63854:32:56;:9;63864:1;63854:12;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;63854:12:56;:32;63850:167;;63921:9;63931:7;63937:1;63931:3;:7;:::i;:::-;63921:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;63921:18:56;63906:9;63916:1;63906:12;;;;;;;;:::i;:::-;;;;;;;;;:33;;;;;-1:-1:-1;;;;;63906:33:56;;;;;-1:-1:-1;;;;;63906:33:56;;;;;;63957:9;:15;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;63957:15:56;;;;;-1:-1:-1;;;;;;63957:15:56;;;;;;-1:-1:-1;63957:15:56;;-1:-1:-1;63991:11:56;;-1:-1:-1;63991:11:56;63850:167;63831:3;;63806:221;;;-1:-1:-1;64043:5:56;;63661:394;-1:-1:-1;;;;63661:394:56:o;8861:795:27:-;8947:7;5824:16;;;:7;:16;;;;;;-1:-1:-1;;;;;5824:16:27;;;;9058:18;;;9054:86;;9092:37;9109:4;9115;9121:7;9092:16;:37::i;:::-;-1:-1:-1;;;;;9184:18:27;;;9180:256;;9300:48;9317:1;9321:7;9338:1;9342:5;9300:8;:48::i;:::-;-1:-1:-1;;;;;9391:15:27;;;;;;:9;:15;;;;;:20;;-1:-1:-1;;9391:20:27;;;9180:256;-1:-1:-1;;;;;9450:16:27;;;9446:107;;-1:-1:-1;;;;;9510:13:27;;;;;;:9;:13;;;;;:18;;9527:1;9510:18;;;9446:107;9563:16;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;9563:21:27;-1:-1:-1;;;;;9563:21:27;;;;;;;;;9600:27;;9563:16;;9600:27;;;;;;;9645:4;8861:795;-1:-1:-1;;;;8861:795:27:o;4624:1055:30:-;4886:22;4911:15;4921:4;4911:9;:15::i;:::-;4936:18;4957:26;;;:17;:26;;;;;;;;;-1:-1:-1;;;;;5058:18:30;;;;:12;:18;;;;;;4886:40;;-1:-1:-1;4957:26:30;5180:28;;;5176:325;;5224:19;5246:35;;;;;;;;;;;;5296:31;;;;;;:45;;;5413:30;;:17;:30;;;;;:43;;;5176:325;5594:26;;;;:17;:26;;;;;;;;5587:33;;;5637:35;;;;-1:-1:-1;5637:35:30;;5630:42;-1:-1:-1;4624:1055:30:o;5967:1061::-;6241:10;:17;6216:22;;6241:21;;6261:1;;6241:21;:::i;:::-;6272:18;6293:24;;;:15;:24;;;;;;6661:10;:26;;6216:46;;-1:-1:-1;6293:24:30;;6216:46;;6661:26;;;;;;:::i;:::-;;;;;;;;;6639:48;;6723:11;6698:10;6709;6698:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;6802:28;;;:15;:28;;;;;;;:41;;;6971:24;;;;;6964:31;7005:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;6038:990;;;5967:1061;:::o;3437:214::-;3521:14;3554:1;3538:13;3548:2;3538:9;:13::i;:::-;:17;;;;:::i;:::-;-1:-1:-1;;;;;3565:16:30;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;3609:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;3437:214:30:o;2680:268:40:-;-1:-1:-1;;;;;2831:25:40;2753:14;2818:39;;;2877:4;2870:18;;;;2927:4;2911:21;;;2680:268::o;3485:139:43:-;3602:5;3596:4;3589:19;3485:139;;:::o;2289:525:42:-;2364:13;2410:5;2389:18;2457:10;2461:6;2457:1;:10;:::i;:::-;:14;;2470:1;2457:14;:::i;:::-;-1:-1:-1;;;;;2447:25:42;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2447:25:42;;2425:47;;-1:-1:-1;;;2482:6:42;2489:1;2482:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;2482:15:42;;;;;;;;;-1:-1:-1;;;2507:6:42;2514:1;2507:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;2507:15:42;;;;;;;;-1:-1:-1;2537:9:42;2549:10;2553:6;2549:1;:10;:::i;:::-;:14;;2562:1;2549:14;:::i;:::-;2537:26;;2532:140;2569:1;2565;:5;2532:140;;;-1:-1:-1;;;2614:10:42;2627:3;2614:16;2603:28;;;;;;;:::i;:::-;;;;2591:6;2598:1;2591:9;;;;;;;;:::i;:::-;;;;:40;-1:-1:-1;;;;;2591:40:42;;;;;;;;-1:-1:-1;2660:1:42;2645:16;;;;;2572:3;;;:::i;:::-;;;2532:140;;;-1:-1:-1;2685:15:42;;2681:96;;2723:43;;-1:-1:-1;;;2723:43:42;;;;;26711:25:73;;;26752:18;;;26745:34;;;26684:18;;2723:43:42;26529:256:73;7105:368:27;7217:38;7231:5;7238:7;7247;7217:13;:38::i;:::-;7212:255;;-1:-1:-1;;;;;7275:19:27;;7271:186;;7321:31;;-1:-1:-1;;;7321:31:27;;;;;160:25:73;;;133:18;;7321:31:27;14:177:73;7271:186:27;7398:44;;-1:-1:-1;;;7398:44:27;;-1:-1:-1;;;;;25302:32:73;;7398:44:27;;;25284:51:73;25351:18;;;25344:34;;;25257:18;;7398:44:27;25110:274:73;14794:662:27;14954:9;:31;;;-1:-1:-1;;;;;;14967:18:27;;;;14954:31;14950:460;;;15001:13;15017:22;15031:7;15017:13;:22::i;:::-;15001:38;-1:-1:-1;;;;;;15167:18:27;;;;;;:35;;;15198:4;-1:-1:-1;;;;;15189:13:27;:5;-1:-1:-1;;;;;15189:13:27;;;15167:35;:69;;;;;15207:29;15224:5;15231:4;15207:16;:29::i;:::-;15206:30;15167:69;15163:142;;;15263:27;;-1:-1:-1;;;15263:27:27;;-1:-1:-1;;;;;3241:32:73;;15263:27:27;;;3223:51:73;3196:18;;15263:27:27;3077:203:73;15163:142:27;15323:9;15319:81;;;15377:7;15373:2;-1:-1:-1;;;;;15357:28:27;15366:5;-1:-1:-1;;;;;15357:28:27;;;;;;;;;;;15319:81;14987:423;14950:460;-1:-1:-1;;15420:24:27;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;15420:29:27;-1:-1:-1;;;;;15420:29:27;;;;;;;;;;14794:662::o;6401:272::-;6504:4;-1:-1:-1;;;;;6539:21:27;;;;;;:127;;;6586:7;-1:-1:-1;;;;;6577:16:27;:5;-1:-1:-1;;;;;6577:16:27;;:52;;;;6597:32;6614:5;6621:7;6597:16;:32::i;:::-;6577:88;;;-1:-1:-1;;6033:7:27;6059:24;;;:15;:24;;;;;;-1:-1:-1;;;;;6059:24:27;;;6633:32;;;;6520:146;-1:-1:-1;6401:272:27:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;196:131:73:-;-1:-1:-1;;;;;;270:32:73;;260:43;;250:71;;317:1;314;307:12;332:245;390:6;443:2;431:9;422:7;418:23;414:32;411:52;;;459:1;456;449:12;411:52;498:9;485:23;517:30;541:5;517:30;:::i;870:381::-;947:8;957:6;1011:3;1004:4;996:6;992:17;988:27;978:55;;1029:1;1026;1019:12;978:55;-1:-1:-1;1052:20:73;;-1:-1:-1;;;;;1084:30:73;;1081:50;;;1127:1;1124;1117:12;1081:50;1164:4;1156:6;1152:17;1140:29;;1224:3;1217:4;1207:6;1204:1;1200:14;1192:6;1188:27;1184:38;1181:47;1178:67;;;1241:1;1238;1231:12;1178:67;870:381;;;;;:::o;1256:477::-;1368:6;1376;1429:2;1417:9;1408:7;1404:23;1400:32;1397:52;;;1445:1;1442;1435:12;1397:52;1485:9;1472:23;-1:-1:-1;;;;;1510:6:73;1507:30;1504:50;;;1550:1;1547;1540:12;1504:50;1589:84;1665:7;1656:6;1645:9;1641:22;1589:84;:::i;:::-;1692:8;;1563:110;;-1:-1:-1;1256:477:73;-1:-1:-1;;;;1256:477:73:o;1738:173::-;1806:20;;-1:-1:-1;;;;;1855:31:73;;1845:42;;1835:70;;1901:1;1898;1891:12;1916:186;1975:6;2028:2;2016:9;2007:7;2003:23;1999:32;1996:52;;;2044:1;2041;2034:12;1996:52;2067:29;2086:9;2067:29;:::i;2107:288::-;2148:3;2186:5;2180:12;2213:6;2208:3;2201:19;2269:6;2262:4;2255:5;2251:16;2244:4;2239:3;2235:14;2229:47;2321:1;2314:4;2305:6;2300:3;2296:16;2292:27;2285:38;2384:4;2377:2;2373:7;2368:2;2360:6;2356:15;2352:29;2347:3;2343:39;2339:50;2332:57;;;2107:288;;;;:::o;2400:217::-;2547:2;2536:9;2529:21;2510:4;2567:44;2607:2;2596:9;2592:18;2584:6;2567:44;:::i;2846:226::-;2905:6;2958:2;2946:9;2937:7;2933:23;2929:32;2926:52;;;2974:1;2971;2964:12;2926:52;-1:-1:-1;3019:23:73;;2846:226;-1:-1:-1;2846:226:73:o;3285:300::-;3353:6;3361;3414:2;3402:9;3393:7;3389:23;3385:32;3382:52;;;3430:1;3427;3420:12;3382:52;3453:29;3472:9;3453:29;:::i;:::-;3443:39;3551:2;3536:18;;;;3523:32;;-1:-1:-1;;;3285:300:73:o;4077:347::-;4128:8;4138:6;4192:3;4185:4;4177:6;4173:17;4169:27;4159:55;;4210:1;4207;4200:12;4159:55;-1:-1:-1;4233:20:73;;-1:-1:-1;;;;;4265:30:73;;4262:50;;;4308:1;4305;4298:12;4262:50;4345:4;4337:6;4333:17;4321:29;;4397:3;4390:4;4381:6;4373;4369:19;4365:30;4362:39;4359:59;;;4414:1;4411;4404:12;4429:127;4490:10;4485:3;4481:20;4478:1;4471:31;4521:4;4518:1;4511:15;4545:4;4542:1;4535:15;4561:745;4603:5;4656:3;4649:4;4641:6;4637:17;4633:27;4623:55;;4674:1;4671;4664:12;4623:55;4714:6;4701:20;-1:-1:-1;;;;;4736:6:73;4733:30;4730:56;;;4766:18;;:::i;:::-;4835:2;4829:9;4927:2;4889:17;;-1:-1:-1;;4885:31:73;;;4918:2;4881:40;4877:54;4865:67;;-1:-1:-1;;;;;4947:34:73;;4983:22;;;4944:62;4941:88;;;5009:18;;:::i;:::-;5045:2;5038:22;5069;;;5110:19;;;5131:4;5106:30;5103:39;-1:-1:-1;5100:59:73;;;5155:1;5152;5145:12;5100:59;5219:6;5212:4;5204:6;5200:17;5193:4;5185:6;5181:17;5168:58;5274:1;5246:19;;;5267:4;5242:30;5235:41;;;;5250:6;4561:745;-1:-1:-1;;;4561:745:73:o;5311:563::-;5375:5;5423:4;5411:9;5406:3;5402:19;5398:30;5395:50;;;5441:1;5438;5431:12;5395:50;5494:2;5488:9;5536:4;5524:17;;-1:-1:-1;;;;;5556:34:73;;5592:22;;;5553:62;5550:88;;;5618:18;;:::i;:::-;5654:2;5647:22;5687:6;-1:-1:-1;5687:6:73;5716:23;;-1:-1:-1;;;;;5751:30:73;;5748:50;;;5794:1;5791;5784:12;5748:50;5822:45;5863:3;5854:6;5843:9;5839:22;5822:45;:::i;:::-;5814:6;5807:61;;;5311:563;;;;:::o;5879:1162::-;6032:6;6040;6048;6056;6064;6072;6080;6133:3;6121:9;6112:7;6108:23;6104:33;6101:53;;;6150:1;6147;6140:12;6101:53;6190:9;6177:23;-1:-1:-1;;;;;6215:6:73;6212:30;6209:50;;;6255:1;6252;6245:12;6209:50;6294:58;6344:7;6335:6;6324:9;6320:22;6294:58;:::i;:::-;6371:8;;-1:-1:-1;6268:84:73;-1:-1:-1;;6459:2:73;6444:18;;6431:32;-1:-1:-1;;;;;6475:32:73;;6472:52;;;6520:1;6517;6510:12;6472:52;6543:70;6605:7;6594:8;6583:9;6579:24;6543:70;:::i;:::-;6533:80;;;6632:38;6666:2;6655:9;6651:18;6632:38;:::i;:::-;6622:48;;6723:2;6712:9;6708:18;6695:32;-1:-1:-1;;;;;6742:8:73;6739:32;6736:52;;;6784:1;6781;6774:12;6736:52;6823:60;6875:7;6864:8;6853:9;6849:24;6823:60;:::i;:::-;5879:1162;;;;-1:-1:-1;5879:1162:73;;;;;;7006:3;6991:19;;;6978:33;;5879:1162;-1:-1:-1;;;;5879:1162:73:o;7469:127::-;7530:10;7525:3;7521:20;7518:1;7511:31;7561:4;7558:1;7551:15;7585:4;7582:1;7575:15;7601:243;7688:1;7681:5;7678:12;7668:143;;7733:10;7728:3;7724:20;7721:1;7714:31;7768:4;7765:1;7758:15;7796:4;7793:1;7786:15;7668:143;7820:18;;7601:243::o;7929:642::-;8043:1;8039;8034:3;8030:11;8026:19;8018:5;8012:12;8008:38;8003:3;7996:51;8108:10;8100:4;8093:5;8089:16;8083:23;8079:40;8072:4;8067:3;8063:14;8056:64;8181:10;8173:4;8166:5;8162:16;8156:23;8152:40;8145:4;8140:3;8136:14;8129:64;8239:4;8232:5;8228:16;8222:23;8254:61;8309:4;8304:3;8300:14;8286:12;8254:61;:::i;:::-;;8378:4;8371:5;8367:16;8361:23;8354:31;8347:39;8340:4;8335:3;8331:14;8324:63;8448:4;8440;8433:5;8429:16;8423:23;8419:34;8412:4;8407:3;8403:14;8396:58;8502:4;8495:5;8491:16;8485:23;8517:48;8559:4;8554:3;8550:14;8534;7916:4;7905:16;7893:29;;7849:75;8576:267;8774:3;8759:19;;8787:50;8763:9;8819:6;8787:50;:::i;8848:374::-;8925:6;8933;8941;8994:2;8982:9;8973:7;8969:23;8965:32;8962:52;;;9010:1;9007;9000:12;8962:52;9033:29;9052:9;9033:29;:::i;:::-;9023:39;;9081:38;9115:2;9104:9;9100:18;9081:38;:::i;:::-;8848:374;;9071:48;;-1:-1:-1;;;9188:2:73;9173:18;;;;9160:32;;8848:374::o;9227:277::-;9307:6;9360:2;9348:9;9339:7;9335:23;9331:32;9328:52;;;9376:1;9373;9366:12;9328:52;9415:9;9402:23;9454:1;9447:5;9444:12;9434:40;;9470:1;9467;9460:12;9509:702;9763:2;9775:21;;;9845:13;;9748:18;;;9867:22;;;9715:4;;9946:15;;;9920:2;9905:18;;;9715:4;9989:196;10003:6;10000:1;9997:13;9989:196;;;10052:51;10099:3;10090:6;10084:13;10052:51;:::i;:::-;10172:2;10160:15;;;;;10132:4;10123:14;;;;;10025:1;10018:9;9989:196;;;-1:-1:-1;10202:3:73;;9509:702;-1:-1:-1;;;;;9509:702:73:o;10216:118::-;10302:5;10295:13;10288:21;10281:5;10278:32;10268:60;;10324:1;10321;10314:12;10339:241;10395:6;10448:2;10436:9;10427:7;10423:23;10419:32;10416:52;;;10464:1;10461;10454:12;10416:52;10503:9;10490:23;10522:28;10544:5;10522:28;:::i;10585:669::-;10700:6;10708;10716;10769:2;10757:9;10748:7;10744:23;10740:32;10737:52;;;10785:1;10782;10775:12;10737:52;10825:9;10812:23;-1:-1:-1;;;;;10850:6:73;10847:30;10844:50;;;10890:1;10887;10880:12;10844:50;10929:58;10979:7;10970:6;10959:9;10955:22;10929:58;:::i;:::-;11006:8;;-1:-1:-1;10903:84:73;-1:-1:-1;;11094:2:73;11079:18;;11066:32;-1:-1:-1;;;;;11110:32:73;;11107:52;;;11155:1;11152;11145:12;11107:52;11178:70;11240:7;11229:8;11218:9;11214:24;11178:70;:::i;:::-;11168:80;;;10585:669;;;;;:::o;11259:121::-;11344:10;11337:5;11333:22;11326:5;11323:33;11313:61;;11370:1;11367;11360:12;11385:245;11443:6;11496:2;11484:9;11475:7;11471:23;11467:32;11464:52;;;11512:1;11509;11502:12;11464:52;11551:9;11538:23;11570:30;11594:5;11570:30;:::i;11635:446::-;11688:3;11726:5;11720:12;11753:6;11748:3;11741:19;11785:4;11780:3;11776:14;11769:21;;11824:4;11817:5;11813:16;11847:1;11857:199;11871:6;11868:1;11865:13;11857:199;;;11936:13;;-1:-1:-1;;;;;11932:39:73;11920:52;;12001:4;11992:14;;;;12029:17;;;;11968:1;11886:9;11857:199;;;-1:-1:-1;12072:3:73;;11635:446;-1:-1:-1;;;;11635:446:73:o;12086:757::-;12271:2;12260:9;12253:21;12234:4;12309:6;12303:13;12352:4;12347:2;12336:9;12332:18;12325:32;12380:63;12438:3;12427:9;12423:19;12409:12;12380:63;:::i;:::-;12366:77;;12497:2;12489:6;12485:15;12479:22;12474:2;12463:9;12459:18;12452:50;-1:-1:-1;;;;;12560:2:73;12552:6;12548:15;12542:22;12538:47;12533:2;12522:9;12518:18;12511:75;12651:10;12645:2;12637:6;12633:15;12627:22;12623:39;12617:3;12606:9;12602:19;12595:68;12729:10;12722:3;12714:6;12710:16;12704:23;12700:40;12694:3;12683:9;12679:19;12672:69;12808:4;12801:3;12793:6;12789:16;12783:23;12779:34;12772:4;12761:9;12757:20;12750:64;12831:6;12823:14;;;12086:757;;;;:::o;13376:272::-;13434:6;13487:2;13475:9;13466:7;13462:23;13458:32;13455:52;;;13503:1;13500;13493:12;13455:52;13542:9;13529:23;13592:6;13585:5;13581:18;13574:5;13571:29;13561:57;;13614:1;13611;13604:12;13842:409;13912:6;13920;13973:2;13961:9;13952:7;13948:23;13944:32;13941:52;;;13989:1;13986;13979:12;13941:52;14029:9;14016:23;-1:-1:-1;;;;;14054:6:73;14051:30;14048:50;;;14094:1;14091;14084:12;14048:50;14133:58;14183:7;14174:6;14163:9;14159:22;14133:58;:::i;14256:779::-;14416:4;14464:2;14453:9;14449:18;14494:2;14483:9;14476:21;14517:6;14552;14546:13;14583:6;14575;14568:22;14621:2;14610:9;14606:18;14599:25;;14683:2;14673:6;14670:1;14666:14;14655:9;14651:30;14647:39;14633:53;;14721:2;14713:6;14709:15;14742:1;14752:254;14766:6;14763:1;14760:13;14752:254;;;14859:2;14855:7;14843:9;14835:6;14831:22;14827:36;14822:3;14815:49;14887:39;14919:6;14910;14904:13;14887:39;:::i;:::-;14877:49;-1:-1:-1;14961:2:73;14984:12;;;;14949:15;;;;;14788:1;14781:9;14752:254;;;-1:-1:-1;15023:6:73;;14256:779;-1:-1:-1;;;;;;14256:779:73:o;15040:610::-;15126:6;15134;15187:2;15175:9;15166:7;15162:23;15158:32;15155:52;;;15203:1;15200;15193:12;15155:52;15243:9;15230:23;-1:-1:-1;;;;;15268:6:73;15265:30;15262:50;;;15308:1;15305;15298:12;15262:50;15331:22;;15384:4;15376:13;;15372:27;-1:-1:-1;15362:55:73;;15413:1;15410;15403:12;15362:55;15453:2;15440:16;-1:-1:-1;;;;;15471:6:73;15468:30;15465:50;;;15511:1;15508;15501:12;15465:50;15564:7;15559:2;15549:6;15546:1;15542:14;15538:2;15534:23;15530:32;15527:45;15524:65;;;15585:1;15582;15575:12;15524:65;15616:2;15608:11;;;;;15638:6;;-1:-1:-1;15040:610:73;-1:-1:-1;;;15040:610:73:o;16111:1236::-;16517:3;16512;16508:13;16500:6;16496:26;16485:9;16478:45;16559:3;16554:2;16543:9;16539:18;16532:31;16459:4;16586:45;16626:3;16615:9;16611:19;16603:6;16586:45;:::i;:::-;16679:9;16671:6;16667:22;16662:2;16651:9;16647:18;16640:50;16713:32;16738:6;16730;16713:32;:::i;:::-;16776:2;16761:18;;16754:34;;;-1:-1:-1;;;;;16825:32:73;;16819:3;16804:19;;16797:61;16845:3;16874:19;;16867:35;;;16939:22;;;16933:3;16918:19;;16911:51;17011:13;;17033:22;;;17083:2;17109:15;;;;-1:-1:-1;17071:15:73;;;;-1:-1:-1;17152:169:73;17166:6;17163:1;17160:13;17152:169;;;17227:13;;17215:26;;17270:2;17296:15;;;;17261:12;;;;17188:1;17181:9;17152:169;;;-1:-1:-1;17338:3:73;;16111:1236;-1:-1:-1;;;;;;;;;;;16111:1236:73:o;17576:261::-;17755:2;17744:9;17737:21;17718:4;17775:56;17827:2;17816:9;17812:18;17804:6;17775:56;:::i;17842:315::-;17907:6;17915;17968:2;17956:9;17947:7;17943:23;17939:32;17936:52;;;17984:1;17981;17974:12;17936:52;18007:29;18026:9;18007:29;:::i;:::-;17997:39;;18086:2;18075:9;18071:18;18058:32;18099:28;18121:5;18099:28;:::i;:::-;18146:5;18136:15;;;17842:315;;;;;:::o;18162:156::-;18228:20;;18288:4;18277:16;;18267:27;;18257:55;;18308:1;18305;18298:12;18323:182;18380:6;18433:2;18421:9;18412:7;18408:23;18404:32;18401:52;;;18449:1;18446;18439:12;18401:52;18472:27;18489:9;18472:27;:::i;18510:583::-;18605:6;18613;18621;18629;18682:3;18670:9;18661:7;18657:23;18653:33;18650:53;;;18699:1;18696;18689:12;18650:53;18739:9;18726:23;-1:-1:-1;;;;;18764:6:73;18761:30;18758:50;;;18804:1;18801;18794:12;18758:50;18827:49;18868:7;18859:6;18848:9;18844:22;18827:49;:::i;:::-;18817:59;;;18895:38;18929:2;18918:9;18914:18;18895:38;:::i;:::-;18885:48;;18952:38;18986:2;18975:9;18971:18;18952:38;:::i;:::-;18510:583;;;;-1:-1:-1;18942:48:73;;19059:2;19044:18;19031:32;;-1:-1:-1;;18510:583:73:o;19280:::-;19375:6;19383;19391;19399;19452:3;19440:9;19431:7;19427:23;19423:33;19420:53;;;19469:1;19466;19459:12;19420:53;19492:29;19511:9;19492:29;:::i;:::-;19482:39;;19540:38;19574:2;19563:9;19559:18;19540:38;:::i;:::-;19530:48;-1:-1:-1;19647:2:73;19632:18;;19619:32;;-1:-1:-1;19726:2:73;19711:18;;19698:32;-1:-1:-1;;;;;19742:30:73;;19739:50;;;19785:1;19782;19775:12;19739:50;19808:49;19849:7;19840:6;19829:9;19825:22;19808:49;:::i;:::-;19798:59;;;19280:583;;;;;;;:::o;20509:236::-;20600:6;20660:3;20648:9;20639:7;20635:23;20631:33;20676:2;20673:22;;;20691:1;20688;20681:12;20673:22;-1:-1:-1;20730:9:73;;20509:236;-1:-1:-1;;20509:236:73:o;20750:256::-;20816:6;20824;20877:2;20865:9;20856:7;20852:23;20848:32;20845:52;;;20893:1;20890;20883:12;20845:52;20916:29;20935:9;20916:29;:::i;:::-;20906:39;;20964:36;20996:2;20985:9;20981:18;20964:36;:::i;:::-;20954:46;;20750:256;;;;;:::o;21011:260::-;21079:6;21087;21140:2;21128:9;21119:7;21115:23;21111:32;21108:52;;;21156:1;21153;21146:12;21108:52;21179:29;21198:9;21179:29;:::i;:::-;21169:39;;21227:38;21261:2;21250:9;21246:18;21227:38;:::i;21469:731::-;-1:-1:-1;;;;;21803:32:73;;21785:51;;21884:10;21872:23;;;21867:2;21852:18;;21845:51;21932:23;;21927:2;21912:18;;21905:51;21772:3;21757:19;;21965:59;22020:2;22005:18;;21997:6;21965:59;:::i;:::-;22068:14;;22061:22;22055:3;22040:19;;22033:51;22133:4;22121:17;;;22115:3;22100:19;;22093:46;22176:17;;22170:3;22155:19;;;22148:46;21469:731;;-1:-1:-1;;;;21469:731:73:o;22205:127::-;22266:10;22261:3;22257:20;22254:1;22247:31;22297:4;22294:1;22287:15;22321:4;22318:1;22311:15;22337:127;22398:10;22393:3;22389:20;22386:1;22379:31;22429:4;22426:1;22419:15;22453:4;22450:1;22443:15;22469:128;22536:9;;;22557:11;;;22554:37;;;22571:18;;:::i;22602:389::-;22786:2;22771:18;;-1:-1:-1;;;;;22820:26:73;22839:6;22820:26;:::i;:::-;22816:52;22798:71;;22935:4;22923:17;;;22910:31;22957:20;;;;22950:35;;;;22602:389;:::o;22996:380::-;23075:1;23071:12;;;;23118;;;23139:61;;23193:4;23185:6;23181:17;23171:27;;23139:61;23246:2;23238:6;23235:14;23215:18;23212:38;23209:161;;23292:10;23287:3;23283:20;23280:1;23273:31;23327:4;23324:1;23317:15;23355:4;23352:1;23345:15;23209:161;;22996:380;;;:::o;23660:168::-;23733:9;;;23764;;23781:15;;;23775:22;;23761:37;23751:71;;23802:18;;:::i;23833:125::-;23898:9;;;23919:10;;;23916:36;;;23932:18;;:::i;23963:127::-;24024:10;24019:3;24015:20;24012:1;24005:31;24055:4;24052:1;24045:15;24079:4;24076:1;24069:15;24095:120;24135:1;24161;24151:35;;24166:18;;:::i;:::-;-1:-1:-1;24200:9:73;;24095:120::o;24220:689::-;24529:25;;;24585:2;24570:18;;24563:34;;;;-1:-1:-1;;;;;24633:32:73;;;24628:2;24613:18;;24606:60;24702:32;;;;24697:2;24682:18;;24675:60;24784:4;24772:17;;;24766:3;24751:19;;24744:46;-1:-1:-1;;;;;24827:31:73;24653:3;24806:19;;24799:60;24890:3;24875:19;;24868:35;24516:3;24501:19;;24220:689::o;24914:191::-;-1:-1:-1;;;;;24982:26:73;;;25010;;;24978:59;;25049:27;;25046:53;;;25079:18;;:::i;25599:167::-;25694:10;25667:18;;;25687;;;25663:43;;25718:19;;25715:45;;;25740:18;;:::i;25771:170::-;25868:10;25861:18;;;25841;;;25837:43;;25892:20;;25889:46;;;25915:18;;:::i;25946:221::-;26099:2;26084:18;;26111:50;26088:9;26143:6;26111:50;:::i;27654:135::-;27693:3;27714:17;;;27711:43;;27734:18;;:::i;:::-;-1:-1:-1;27781:1:73;27770:13;;27654:135::o;28081:175::-;28118:3;28162:4;28155:5;28151:16;28191:4;28182:7;28179:17;28176:43;;28199:18;;:::i;:::-;28248:1;28235:15;;28081:175;-1:-1:-1;;28081:175:73:o;28261:691::-;28445:19;;28473:21;;28563:2;28552:14;;28539:28;28593:1;28583:12;;28576:29;28674:2;28663:14;;28650:28;28704:1;28694:12;;28687:29;28753:1;28743:12;;28803:2;28792:14;;28779:28;28816:32;28779:28;28816:32;:::i;:::-;28883:17;;-1:-1:-1;;28879:39:73;28933:10;28920:24;;;;28876:69;28857:89;;-1:-1:-1;;28261:691:73:o;29368:204::-;29406:3;-1:-1:-1;;;;;29443:5:73;29439:30;-1:-1:-1;;;;;29484:7:73;29481:31;29478:57;;29515:18;;:::i;29782:212::-;29824:3;29862:5;29856:12;29906:6;29899:4;29892:5;29888:16;29883:3;29877:36;29968:1;29932:16;;29957:13;;;-1:-1:-1;29932:16:73;;29782:212;-1:-1:-1;29782:212:73:o;29999:1099::-;30500:66;30495:3;30488:79;-1:-1:-1;;;30592:2:73;30587:3;30583:12;30576:30;30470:3;30625:39;30660:2;30655:3;30651:12;30643:6;30625:39;:::i;:::-;30684:66;30673:78;;30780:34;30775:2;30767:11;;30760:55;30844:34;30839:2;30831:11;;30824:55;-1:-1:-1;;;30903:2:73;30895:11;;30888:76;30986:39;31020:3;31012:12;;31004:6;30986:39;:::i;:::-;-1:-1:-1;;;31034:29:73;;31090:1;31079:13;;29999:1099;-1:-1:-1;;;;;29999:1099:73:o;31103:345::-;31355:31;31350:3;31343:44;31325:3;31403:39;31438:2;31433:3;31429:12;31421:6;31403:39;:::i;32476:789::-;32705:13;;-1:-1:-1;;;;;32745:35:73;;32727:54;;32844:10;32768:3;32823:19;;;32819:36;;32812:4;32797:20;;32790:66;32891:3;32887:19;;;32883:36;32936:4;32921:20;;7423:35;32675:3;32660:19;;;32951:85;33030:4;33019:9;33015:20;33008:4;32996:9;32991:3;32987:19;32983:30;32951:85;:::i;:::-;33045:69;33108:4;33097:9;33093:20;33086:4;33074:9;33069:3;33065:19;33061:30;652:13;645:21;633:34;;582:91;33045:69;33148:3;33144:19;;;33165:4;33140:30;33187:3;33172:19;;7893:29;33222:3;33218:19;;;33254:3;33239:19;;7893:29;33201:58;7849:75;33270:537;33509:2;33498:9;33491:21;33472:4;33535:44;33575:2;33564:9;33560:18;33552:6;33535:44;:::i;:::-;33627:9;33619:6;33615:22;33610:2;33599:9;33595:18;33588:50;33661:32;33686:6;33678;33661:32;:::i;:::-;33647:46;;33741:9;33733:6;33729:22;33724:2;33713:9;33709:18;33702:50;33769:32;33794:6;33786;33769:32;:::i;33812:190::-;33941:3;33966:30;33992:3;33984:6;33966:30;:::i;34007:245::-;34074:6;34127:2;34115:9;34106:7;34102:23;34098:32;34095:52;;;34143:1;34140;34133:12;34095:52;34175:9;34169:16;34194:28;34216:5;34194:28;:::i;34257:358::-;34458:2;34447:9;34440:21;34421:4;34496:6;34490:13;34539:2;34534;34523:9;34519:18;34512:30;34559:50;34605:2;34594:9;34590:18;34576:12;34559:50;:::i;34745:181::-;34826:1;34836:84;34850:9;34847:1;34844:16;34836:84;;;34916:1;34897:17;;;34890:28;34875:1;34868:9;34836:84;;34931:508;35032:2;35027:3;35024:11;35021:412;;;35069:10;35064:3;35061:19;35058:365;;;35121:5;35118:1;35111:16;35169:4;35166:1;35156:18;35234:2;35222:10;35218:19;35215:1;35211:27;35273:4;35261:10;35258:20;35255:45;;;-1:-1:-1;35297:1:73;35255:45;35317:92;35395:12;35389:2;35384:3;35380:12;35377:1;35373:20;35369:39;35354:12;35348:4;35344:23;35317:92;:::i;35615:1194::-;-1:-1:-1;;;;;35732:3:73;35729:27;35726:53;;;35759:18;;:::i;:::-;35788:93;35877:3;35837:38;35869:4;35863:11;35837:38;:::i;:::-;35831:4;35788:93;:::i;:::-;35907:1;35932:2;35927:3;35924:11;35949:1;35944:607;;;;36595:1;36612:3;36609:93;;;-1:-1:-1;36668:19:73;;;36655:33;36609:93;-1:-1:-1;;35572:1:73;35568:11;;;35564:24;35560:29;35550:40;35596:1;35592:11;;;35547:57;36715:78;;35917:886;;35944:607;34692:1;34685:14;;;34729:4;34716:18;;-1:-1:-1;;35980:17:73;;;36094:229;36108:7;36105:1;36102:14;36094:229;;;36197:19;;;36184:33;36169:49;;36304:4;36289:20;;;;36257:1;36245:14;;;;36124:12;36094:229;;;36098:3;36351;36342:7;36339:16;36336:159;;;36475:1;36471:6;36465:3;36459;36456:1;36452:11;36448:21;36444:34;36440:39;36427:9;36422:3;36418:19;36405:33;36401:79;36393:6;36386:95;36336:159;;;36538:1;36532:3;36529:1;36525:11;36521:19;36515:4;36508:33;35917:886;;35615:1194;;;:::o;36814:148::-;36902:4;36881:12;;;36895;;;36877:31;;36920:13;;36917:39;;;36936:18;;:::i;36967:157::-;36997:1;37031:4;37028:1;37024:12;37055:3;37045:37;;37062:18;;:::i;:::-;37114:3;37107:4;37104:1;37100:12;37096:22;37091:27;;;36967:157;;;;:::o;37129:151::-;37219:4;37212:12;;;37198;;;37194:31;;37237:14;;37234:40;;;37254:18;;:::i;37285:188::-;37323:3;37367:10;37360:5;37356:22;37402:10;37393:7;37390:23;37387:49;;37416:18;;:::i;37478:958::-;37628:3;37622:10;-1:-1:-1;;;;;37647:6:73;37644:30;37641:56;;;37677:18;;:::i;:::-;-1:-1:-1;;;37712:6:73;37709:32;37706:58;;;37744:18;;:::i;:::-;37793:3;37787:10;37818:6;37813:3;37806:19;37848:6;37840;37837:18;37834:204;;;37888:3;37885:1;37878:14;37948:6;37941:4;37938:1;37928:18;37924:31;37968:60;38020:6;38012;38008:19;37995:11;37968:60;:::i;:::-;;37834:204;;38070:4;38065:3;38061:14;38094:3;38091:1;38084:14;38132:4;38129:1;38119:18;38155:1;38165:265;38179:6;38176:1;38173:13;38165:265;;;38241:13;;-1:-1:-1;;;;;38307:31:73;38398:12;;;38391:29;38373:4;38361:17;;;;38335:1;38194:9;38165:265;;38728:484;-1:-1:-1;;;;;38959:32:73;;;38941:51;;39028:32;;39023:2;39008:18;;39001:60;39092:2;39077:18;;39070:34;;;39140:3;39135:2;39120:18;;39113:31;;;-1:-1:-1;;39161:45:73;;39186:19;;39178:6;39161:45;:::i;39217:249::-;39286:6;39339:2;39327:9;39318:7;39314:23;39310:32;39307:52;;;39355:1;39352;39345:12;39307:52;39387:9;39381:16;39406:30;39430:5;39406:30;:::i;39471:136::-;39510:3;39538:5;39528:39;;39547:18;;:::i;:::-;-1:-1:-1;;;39583:18:73;;39471:136::o;39612:342::-;39864:28;39859:3;39852:41;39834:3;39909:39;39944:2;39939:3;39935:12;39927:6;39909:39;:::i;39959:127::-;40020:10;40015:3;40011:20;40008:1;40001:31;40051:4;40048:1;40041:15;40075:4;40072:1;40065:15;40091:418;-1:-1:-1;;;;;;40304:31:73;;40292:44;;40274:3;40358:38;40393:1;40384:11;;40376:6;40358:38;:::i;:::-;40427:2;40423:15;;;;-1:-1:-1;;;;;;40419:53:73;40405:68;;-1:-1:-1;;40500:2:73;40489:14;;40091:418;-1:-1:-1;;40091:418:73:o","linkReferences":{},"immutableReferences":{"49312":[{"start":17406,"length":32}],"49314":[{"start":17441,"length":32}],"49316":[{"start":17521,"length":32}],"49318":[{"start":17559,"length":32}],"49320":[{"start":17373,"length":32}]}},"methodIdentifiers":{"SYSTEM_ADDRESS()":"3434735f","activate()":"0f15f4c0","allocateIssuance()":"355811a7","applyIncentives((address,uint256)[])":"0a36cdef","applySlashes((address,uint256)[])":"02ae337b","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","beginExit()":"2228dfa0","burn(address)":"89afcb44","cancelStakeVersionChange(address)":"0f4346fa","claimRefund()":"b5545a3c","claimStakeRewards(address)":"2b9f4985","claimableRefunds(address)":"43401a00","concludeEpoch(address[])":"7b55a300","delegateStake(bytes,(bytes),address,bytes,uint256)":"127ce8e8","delegationDigest(bytes,address,address,uint256)":"ad6cfb86","eip712Domain()":"84b0196e","epochInfo(uint256)":"3894228e","futureEpochInfo(uint256)":"59ca93b6","getApproved(uint256)":"081812fc","getBalanceBreakdown(address)":"15b5709a","getBlsPubkey(address)":"059b916c","getCommitteeBlsPubkeys(uint32)":"6ae9942c","getCommitteeValidators(uint32)":"a0201be5","getCurrentEpoch()":"b97dd9e2","getCurrentEpochInfo()":"babc394f","getCurrentStakeConfig()":"7d06fdf8","getCurrentStakeVersion()":"67398331","getEligibleValidatorCount()":"23a40430","getEpochInfo(uint32)":"374ed18c","getNextCommitteeSize()":"eb8535c2","getPendingVersionChanges()":"a7c5e701","getRewards(address)":"79ee54f7","getValidator(address)":"1904bb2e","getValidators(uint8)":"8cc05eda","getValidatorsInfo(uint8)":"2870259d","increaseNonce()":"c53a0292","isApprovedForAll(address,address)":"e985e9c5","isDelegated(address)":"3e28391d","isRetired(address)":"6d3c6275","isValidator(bytes)":"6a926591","issuance()":"863623bb","issuanceWithdrawal(uint256)":"0752e017","migrateValidatorSets()":"aaffd270","mint(address)":"6a627842","name()":"06fdde03","owner()":"8da5cb5b","ownerOf(uint256)":"6352211e","pause()":"8456cb59","paused()":"5c975abb","renounceOwnership()":"715018a6","requestStakeVersionChange(address,uint8)":"e5a22827","safeTransferFrom(address,address,uint256)":"42842e0e","safeTransferFrom(address,address,uint256,bytes)":"b88d4fde","setApprovalForAll(address,bool)":"a22cb465","setNextCommitteeSize(uint16)":"62fcde4b","setTopUpAuthorityRequired(bool)":"2a8e33d7","setValidatorRegion(address,uint8)":"f0624768","stake(bytes,(bytes))":"2fb0d025","stakeConfig(uint8)":"a71954ec","supportsInterface(bytes4)":"01ffc9a7","symbol()":"95d89b41","tokenByIndex(uint256)":"4f6ccce7","tokenOfOwnerByIndex(address,uint256)":"2f745c59","tokenURI(uint256)":"c87b56dd","topUpAuthorityRequired()":"58e88dbb","topUpSlashedStake(address)":"43201d30","totalSupply()":"18160ddd","transferFrom(address,address,uint256)":"23b872dd","transferOwnership(address)":"f2fde38b","undistributedIssuance()":"008d6acd","unpause()":"3f4ba83a","unstake(address,bool)":"f66a25a4","upgradeStakeVersion((uint256,uint256,uint256,uint32))":"c05df7ac","validators(address)":"fa52c7d8","versionChangeRequests(address)":"bd3e7594"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.35+commit.47b9dedd\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minWithdrawAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"epochIssuance\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"epochDuration\",\"type\":\"uint32\"}],\"internalType\":\"struct IStakeManager.StakeConfig\",\"name\":\"genesisConfig_\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"activationEpoch\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"exitEpoch\",\"type\":\"uint32\"},{\"internalType\":\"enum IConsensusRegistry.ValidatorStatus\",\"name\":\"currentStatus\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isRetired\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"stakeVersion\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"region\",\"type\":\"uint8\"}],\"internalType\":\"struct IConsensusRegistry.ValidatorInfo[]\",\"name\":\"initialValidators_\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[]\",\"name\":\"blsPubkeys_\",\"type\":\"bytes[]\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"struct IStakeManager.ProofOfPossession[]\",\"name\":\"proofsOfPossession\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"owner_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"}],\"name\":\"AlreadyDefined\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"}],\"name\":\"BlsPubkeyNotFound\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"}],\"name\":\"CommitteeRequirement\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"DelegationExpired\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DuplicateBLSPubkey\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ERC721EnumerableForbiddenBatchMint\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC721IncorrectOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ERC721InsufficientApproval\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC721InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"ERC721InvalidOperator\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC721InvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC721InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC721InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ERC721NonexistentToken\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"ERC721OutOfBoundsIndex\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EnforcedPause\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExpectedPause\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GenesisArityMismatch\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"activationEpoch\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"exitEpoch\",\"type\":\"uint32\"},{\"internalType\":\"enum IConsensusRegistry.ValidatorStatus\",\"name\":\"currentStatus\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isRetired\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"stakeVersion\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"region\",\"type\":\"uint8\"}],\"internalType\":\"struct IConsensusRegistry.ValidatorInfo\",\"name\":\"validator\",\"type\":\"tuple\"}],\"name\":\"IneligibleUnstake\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"withdrawAmount\",\"type\":\"uint256\"}],\"name\":\"InsufficientRewards\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidBLSPubkey\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"minCommitteeSize\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"providedCommitteeSize\",\"type\":\"uint256\"}],\"name\":\"InvalidCommitteeSize\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"stakeVersion\",\"type\":\"uint8\"}],\"name\":\"InvalidDeficitAmount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"duration\",\"type\":\"uint32\"}],\"name\":\"InvalidDuration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"epoch\",\"type\":\"uint32\"}],\"name\":\"InvalidEpoch\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"struct IStakeManager.ProofOfPossession\",\"name\":\"proof\",\"type\":\"tuple\"}],\"name\":\"InvalidProofOfPossession\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"InvalidStakeAmount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"currentVersion\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"targetVersion\",\"type\":\"uint8\"}],\"name\":\"InvalidStakeVersion\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enum IConsensusRegistry.ValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidSupply\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"InvalidTokenId\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidValidatorAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IssuanceTransferFailed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"err\",\"type\":\"bytes\"}],\"name\":\"LowLevelCallFailure\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoClaimableRefund\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoPendingVersionChange\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"NotRecipient\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotTransferable\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"}],\"name\":\"NotValidator\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"invalidCaller\",\"type\":\"address\"}],\"name\":\"OnlySystemCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Reentrancy\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RequiresConsensusNFT\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"stakeVersion\",\"type\":\"uint8\"}],\"name\":\"StakeNotSlashed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"StringsInsufficientHexLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TopUpAuthorityRequired\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"approved\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"DelegationNonceIncreased\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address[]\",\"name\":\"committee\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"epochIssuance\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"blockHeight\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"epochId\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"epochDuration\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"stakeVersion\",\"type\":\"uint8\"}],\"indexed\":false,\"internalType\":\"struct IConsensusRegistry.EpochInfo\",\"name\":\"epoch\",\"type\":\"tuple\"}],\"name\":\"NewEpoch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"oldSize\",\"type\":\"uint16\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"newSize\",\"type\":\"uint16\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"numActiveValidators\",\"type\":\"uint256\"}],\"name\":\"NextCommitteeSizeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"RefundClaimed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"RefundQueued\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"claimant\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rewards\",\"type\":\"uint256\"}],\"name\":\"RewardsClaimed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"minWithdrawAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"epochIssuance\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"epochDuration\",\"type\":\"uint32\"}],\"name\":\"StakeVersionAuthored\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"}],\"name\":\"StakeVersionChangeCanceled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"targetVersion\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"requestEpoch\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"escrow\",\"type\":\"uint256\"}],\"name\":\"StakeVersionChangeRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"required\",\"type\":\"bool\"}],\"name\":\"TopUpAuthorityRequirementUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"activationEpoch\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"exitEpoch\",\"type\":\"uint32\"},{\"internalType\":\"enum IConsensusRegistry.ValidatorStatus\",\"name\":\"currentStatus\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isRetired\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"stakeVersion\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"region\",\"type\":\"uint8\"}],\"indexed\":false,\"internalType\":\"struct IConsensusRegistry.ValidatorInfo\",\"name\":\"validator\",\"type\":\"tuple\"}],\"name\":\"ValidatorActivated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"activationEpoch\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"exitEpoch\",\"type\":\"uint32\"},{\"internalType\":\"enum IConsensusRegistry.ValidatorStatus\",\"name\":\"currentStatus\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isRetired\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"stakeVersion\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"region\",\"type\":\"uint8\"}],\"indexed\":false,\"internalType\":\"struct IConsensusRegistry.ValidatorInfo\",\"name\":\"validator\",\"type\":\"tuple\"}],\"name\":\"ValidatorExited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"activationEpoch\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"exitEpoch\",\"type\":\"uint32\"},{\"internalType\":\"enum IConsensusRegistry.ValidatorStatus\",\"name\":\"currentStatus\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isRetired\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"stakeVersion\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"region\",\"type\":\"uint8\"}],\"indexed\":false,\"internalType\":\"struct IConsensusRegistry.ValidatorInfo\",\"name\":\"validator\",\"type\":\"tuple\"}],\"name\":\"ValidatorPendingActivation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"activationEpoch\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"exitEpoch\",\"type\":\"uint32\"},{\"internalType\":\"enum IConsensusRegistry.ValidatorStatus\",\"name\":\"currentStatus\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isRetired\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"stakeVersion\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"region\",\"type\":\"uint8\"}],\"indexed\":false,\"internalType\":\"struct IConsensusRegistry.ValidatorInfo\",\"name\":\"validator\",\"type\":\"tuple\"}],\"name\":\"ValidatorPendingExit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"region\",\"type\":\"uint8\"}],\"name\":\"ValidatorRegionUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"activationEpoch\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"exitEpoch\",\"type\":\"uint32\"},{\"internalType\":\"enum IConsensusRegistry.ValidatorStatus\",\"name\":\"currentStatus\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isRetired\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"stakeVersion\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"region\",\"type\":\"uint8\"}],\"indexed\":false,\"internalType\":\"struct IConsensusRegistry.ValidatorInfo\",\"name\":\"validator\",\"type\":\"tuple\"}],\"name\":\"ValidatorRetired\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"eligibleValidatorCount\",\"type\":\"uint256\"}],\"name\":\"ValidatorSetsMigrated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"struct Slash\",\"name\":\"slash\",\"type\":\"tuple\"}],\"name\":\"ValidatorSlashed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ValidatorStakeToppedUp\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"oldVersion\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"newVersion\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldStakeAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newStakeAmount\",\"type\":\"uint256\"}],\"name\":\"ValidatorStakeVersionUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"activationEpoch\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"exitEpoch\",\"type\":\"uint32\"},{\"internalType\":\"enum IConsensusRegistry.ValidatorStatus\",\"name\":\"currentStatus\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isRetired\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"stakeVersion\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"region\",\"type\":\"uint8\"}],\"indexed\":false,\"internalType\":\"struct IConsensusRegistry.ValidatorInfo\",\"name\":\"validator\",\"type\":\"tuple\"}],\"name\":\"ValidatorStaked\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"SYSTEM_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"activate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"allocateIssuance\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"consensusHeaderCount\",\"type\":\"uint256\"}],\"internalType\":\"struct RewardInfo[]\",\"name\":\"rewardInfos\",\"type\":\"tuple[]\"}],\"name\":\"applyIncentives\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"struct Slash[]\",\"name\":\"slashes\",\"type\":\"tuple[]\"}],\"name\":\"applySlashes\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"beginExit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"}],\"name\":\"cancelStakeVersionChange\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"claimRefund\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"}],\"name\":\"claimStakeRewards\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"claimableRefunds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"newCommittee\",\"type\":\"address[]\"}],\"name\":\"concludeEpoch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"blsPubkey\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"struct IStakeManager.ProofOfPossession\",\"name\":\"proofOfPossession\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"validatorEIP712Signature\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"delegateStake\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"blsPubkey\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"delegationDigest\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"eip712Domain\",\"outputs\":[{\"internalType\":\"bytes1\",\"name\":\"fields\",\"type\":\"bytes1\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"verifyingContract\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"extensions\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"epochInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"epochIssuance\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"blockHeight\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"epochId\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"epochDuration\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"stakeVersion\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"futureEpochInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"epochIssuance\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"blockHeight\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"epochId\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"epochDuration\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"stakeVersion\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"}],\"name\":\"getBalanceBreakdown\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"}],\"name\":\"getBlsPubkey\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"epoch\",\"type\":\"uint32\"}],\"name\":\"getCommitteeBlsPubkeys\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"\",\"type\":\"bytes[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"epoch\",\"type\":\"uint32\"}],\"name\":\"getCommitteeValidators\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"activationEpoch\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"exitEpoch\",\"type\":\"uint32\"},{\"internalType\":\"enum IConsensusRegistry.ValidatorStatus\",\"name\":\"currentStatus\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isRetired\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"stakeVersion\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"region\",\"type\":\"uint8\"}],\"internalType\":\"struct IConsensusRegistry.ValidatorInfo[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCurrentEpoch\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCurrentEpochInfo\",\"outputs\":[{\"components\":[{\"internalType\":\"address[]\",\"name\":\"committee\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"epochIssuance\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"blockHeight\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"epochId\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"epochDuration\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"stakeVersion\",\"type\":\"uint8\"}],\"internalType\":\"struct IConsensusRegistry.EpochInfo\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCurrentStakeConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minWithdrawAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"epochIssuance\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"epochDuration\",\"type\":\"uint32\"}],\"internalType\":\"struct IStakeManager.StakeConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCurrentStakeVersion\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getEligibleValidatorCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"epoch\",\"type\":\"uint32\"}],\"name\":\"getEpochInfo\",\"outputs\":[{\"components\":[{\"internalType\":\"address[]\",\"name\":\"committee\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"epochIssuance\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"blockHeight\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"epochId\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"epochDuration\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"stakeVersion\",\"type\":\"uint8\"}],\"internalType\":\"struct IConsensusRegistry.EpochInfo\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNextCommitteeSize\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPendingVersionChanges\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"}],\"name\":\"getRewards\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"activationEpoch\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"exitEpoch\",\"type\":\"uint32\"},{\"internalType\":\"enum IConsensusRegistry.ValidatorStatus\",\"name\":\"currentStatus\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isRetired\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"stakeVersion\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"region\",\"type\":\"uint8\"}],\"internalType\":\"struct IConsensusRegistry.ValidatorInfo\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum IConsensusRegistry.ValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"getValidators\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum IConsensusRegistry.ValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"getValidatorsInfo\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"activationEpoch\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"exitEpoch\",\"type\":\"uint32\"},{\"internalType\":\"enum IConsensusRegistry.ValidatorStatus\",\"name\":\"currentStatus\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isRetired\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"stakeVersion\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"region\",\"type\":\"uint8\"}],\"internalType\":\"struct IConsensusRegistry.ValidatorInfo[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"increaseNonce\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"}],\"name\":\"isDelegated\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"}],\"name\":\"isRetired\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"blsPubkey\",\"type\":\"bytes\"}],\"name\":\"isValidator\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"issuance\",\"outputs\":[{\"internalType\":\"address payable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"issuanceWithdrawal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"migrateValidatorSets\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"targetVersion\",\"type\":\"uint8\"}],\"name\":\"requestStakeVersionChange\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"newSize\",\"type\":\"uint16\"}],\"name\":\"setNextCommitteeSize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"required\",\"type\":\"bool\"}],\"name\":\"setTopUpAuthorityRequired\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"region\",\"type\":\"uint8\"}],\"name\":\"setValidatorRegion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"blsPubkey\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"struct IStakeManager.ProofOfPossession\",\"name\":\"proofOfPossession\",\"type\":\"tuple\"}],\"name\":\"stake\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"stakeConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minWithdrawAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"epochIssuance\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"epochDuration\",\"type\":\"uint32\"}],\"internalType\":\"struct IStakeManager.StakeConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"tokenByIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"tokenOfOwnerByIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"tokenURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"topUpAuthorityRequired\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"}],\"name\":\"topUpSlashedStake\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"undistributedIssuance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"acceptRewardShortfall\",\"type\":\"bool\"}],\"name\":\"unstake\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minWithdrawAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"epochIssuance\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"epochDuration\",\"type\":\"uint32\"}],\"internalType\":\"struct IStakeManager.StakeConfig\",\"name\":\"newConfig\",\"type\":\"tuple\"}],\"name\":\"upgradeStakeVersion\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"validators\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"activationEpoch\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"exitEpoch\",\"type\":\"uint32\"},{\"internalType\":\"enum IConsensusRegistry.ValidatorStatus\",\"name\":\"currentStatus\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isRetired\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"stakeVersion\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"region\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"versionChangeRequests\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"targetVersion\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"requestEpoch\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"funder\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"escrow\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Telcoin AssociationHuwonk\",\"details\":\"This contract should be deployed to a predefined system address for use with system calls\",\"errors\":{\"AlreadyDefined(address)\":[{\"params\":{\"validatorAddress\":\"The address that was already defined\"}}],\"BlsPubkeyNotFound(address)\":[{\"details\":\"Covers both the zero-address case and addresses that have never staked (or have been burned/retired and had their pubkey state cleared)\",\"params\":{\"validatorAddress\":\"The address whose BLS pubkey lookup failed\"}}],\"CommitteeRequirement(address)\":[{\"params\":{\"validatorAddress\":\"The address at which the sort invariant was violated\"}}],\"DelegationExpired(uint256)\":[{\"params\":{\"deadline\":\"The unix timestamp past which the signature is no longer valid\"}}],\"ERC721EnumerableForbiddenBatchMint()\":[{\"details\":\"Batch mint is not allowed.\"}],\"ERC721IncorrectOwner(address,uint256,address)\":[{\"details\":\"Indicates an error related to the ownership over a particular token. Used in transfers.\",\"params\":{\"owner\":\"Address of the current owner of a token.\",\"sender\":\"Address whose tokens are being transferred.\",\"tokenId\":\"Identifier number of a token.\"}}],\"ERC721InsufficientApproval(address,uint256)\":[{\"details\":\"Indicates a failure with the `operator`\\u2019s approval. Used in transfers.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\",\"tokenId\":\"Identifier number of a token.\"}}],\"ERC721InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC721InvalidOperator(address)\":[{\"details\":\"Indicates a failure with the `operator` to be approved. Used in approvals.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC721InvalidOwner(address)\":[{\"details\":\"Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-20. Used in balance queries.\",\"params\":{\"owner\":\"Address of the current owner of a token.\"}}],\"ERC721InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC721InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC721NonexistentToken(uint256)\":[{\"details\":\"Indicates a `tokenId` whose `owner` is the zero address.\",\"params\":{\"tokenId\":\"Identifier number of a token.\"}}],\"ERC721OutOfBoundsIndex(address,uint256)\":[{\"details\":\"An `owner`'s token query was out of bounds for `index`. NOTE: The owner being `address(0)` indicates a global out of bounds index.\"}],\"EnforcedPause()\":[{\"details\":\"The operation failed because the contract is paused.\"}],\"ExpectedPause()\":[{\"details\":\"The operation failed because the contract is not paused.\"}],\"IneligibleUnstake((address,uint32,uint32,uint8,bool,uint8,uint8))\":[{\"details\":\"Validators may unstake only if Staked (pre-activation) or Exited with at least one full epoch elapsed\",\"params\":{\"validator\":\"The full ValidatorInfo of the ineligible validator\"}}],\"InsufficientRewards(uint256)\":[{\"params\":{\"withdrawAmount\":\"The reward amount that was insufficient\"}}],\"InvalidCommitteeSize(uint256,uint256)\":[{\"params\":{\"minCommitteeSize\":\"The minimum acceptable committee size\",\"providedCommitteeSize\":\"The committee size that was rejected\"}}],\"InvalidDeficitAmount(address,uint256,uint8)\":[{\"params\":{\"stakeVersion\":\"The validator's stake version defining the required stake amount\",\"validatorAddress\":\"The validator being topped up\",\"value\":\"The `msg.value` that was provided\"}}],\"InvalidDuration(uint32)\":[{\"params\":{\"duration\":\"The invalid duration value\"}}],\"InvalidEpoch(uint32)\":[{\"params\":{\"epoch\":\"The epoch number that was rejected\"}}],\"InvalidProofOfPossession((bytes))\":[{\"params\":{\"proof\":\"The proof of possession that failed verification\"}}],\"InvalidStakeAmount(uint256)\":[{\"params\":{\"stakeAmount\":\"The invalid stake value that was provided\"}}],\"InvalidStakeVersion(uint8,uint8)\":[{\"details\":\"Target version must be strictly greater than current and not exceed global `stakeVersion`\",\"params\":{\"currentVersion\":\"The validator's current stake version\",\"targetVersion\":\"The requested target version that was rejected\"}}],\"InvalidStatus(uint8)\":[{\"params\":{\"status\":\"The validator's actual status that caused the revert\"}}],\"InvalidTokenId(uint256)\":[{\"params\":{\"tokenId\":\"The invalid token ID\"}}],\"NotRecipient(address)\":[{\"params\":{\"recipient\":\"The expected reward recipient (delegator if delegated, else the validator)\"}}],\"NotValidator(address)\":[{\"params\":{\"validatorAddress\":\"The validator whose signature was invalid\"}}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"Reentrancy()\":[{\"details\":\"Unauthorized reentrant call.\"}],\"StakeNotSlashed(address,uint256,uint8)\":[{\"params\":{\"balance\":\"The validator's current outstanding balance\",\"stakeVersion\":\"The validator's stake version defining the required stake amount\",\"validatorAddress\":\"The validator that is not slashed\"}}],\"StringsInsufficientHexLength(uint256,uint256)\":[{\"details\":\"The `value` string doesn't fit in the specified `length`.\"}]},\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when `owner` enables `approved` to manage the `tokenId` token.\"},\"ApprovalForAll(address,address,bool)\":{\"details\":\"Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\"},\"DelegationNonceIncreased(address,uint64)\":{\"params\":{\"nonce\":\"The new delegation nonce\",\"validatorAddress\":\"The validator whose delegation nonce advanced\"}},\"NewEpoch((address[],uint256,uint64,uint32,uint32,uint8))\":{\"params\":{\"epoch\":\"The new epoch's full configuration including committee and block height\"}},\"NextCommitteeSizeUpdated(uint16,uint16,uint256)\":{\"params\":{\"newSize\":\"The updated nextCommitteeSize value\",\"numActiveValidators\":\"The current count of committee-eligible validators\",\"oldSize\":\"The previous nextCommitteeSize value\"}},\"Paused(address)\":{\"details\":\"Emitted when the pause is triggered by `account`.\"},\"RefundClaimed(address,uint256)\":{\"params\":{\"amount\":\"The amount transferred\",\"recipient\":\"The address that received its credit\"}},\"RefundQueued(address,uint256)\":{\"params\":{\"amount\":\"The amount added to the recipient's credit\",\"recipient\":\"The address holding the claimable credit\"}},\"RewardsClaimed(address,uint256)\":{\"params\":{\"claimant\":\"The address that received the funds (validator or its delegator)\",\"rewards\":\"The amount of TEL claimed\"}},\"StakeVersionAuthored(uint8,uint256,uint256,uint256,uint32)\":{\"params\":{\"epochDuration\":\"The version's epoch duration\",\"epochIssuance\":\"The version's total TEL distributed as rewards per epoch\",\"minWithdrawAmount\":\"The version's minimum reward threshold for claims\",\"stakeAmount\":\"The version's required native TEL stake per validator\",\"version\":\"The newly authored version index (the new global `stakeVersion`)\"}},\"StakeVersionChangeCanceled(address)\":{\"params\":{\"validatorAddress\":\"The validator whose pending change was cancelled\"}},\"StakeVersionChangeRequested(address,uint8,uint32,uint256)\":{\"params\":{\"escrow\":\"The exact stake deficit escrowed for an increase; zero otherwise\",\"requestEpoch\":\"The epoch in which the request was recorded\",\"targetVersion\":\"The version to adopt at the boundary flip\",\"validatorAddress\":\"The validator whose version change was requested\"}},\"TopUpAuthorityRequirementUpdated(bool)\":{\"params\":{\"required\":\"The new value of the `topUpAuthorityRequired` flag\"}},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `tokenId` token is transferred from `from` to `to`.\"},\"Unpaused(address)\":{\"details\":\"Emitted when the pause is lifted by `account`.\"},\"ValidatorActivated((address,uint32,uint32,uint8,bool,uint8,uint8))\":{\"params\":{\"validator\":\"The newly activated validator's info\"}},\"ValidatorExited((address,uint32,uint32,uint8,bool,uint8,uint8))\":{\"params\":{\"validator\":\"The exited validator's info\"}},\"ValidatorPendingActivation((address,uint32,uint32,uint8,bool,uint8,uint8))\":{\"details\":\"Activation completes automatically at the start of the next epoch\",\"params\":{\"validator\":\"The validator entering PendingActivation status\"}},\"ValidatorPendingExit((address,uint32,uint32,uint8,bool,uint8,uint8))\":{\"details\":\"Exit completes when the validator is no longer required in any future committee\",\"params\":{\"validator\":\"The validator entering PendingExit status\"}},\"ValidatorRegionUpdated(address,uint8)\":{\"params\":{\"region\":\"The new geographic region identifier\",\"validatorAddress\":\"The validator whose region was updated\"}},\"ValidatorRetired((address,uint32,uint32,uint8,bool,uint8,uint8))\":{\"params\":{\"validator\":\"The retired validator's info\"}},\"ValidatorSetsMigrated(uint256)\":{\"params\":{\"eligibleValidatorCount\":\"The committee-eligible count after the back-fill\"}},\"ValidatorSlashed((address,uint256))\":{\"details\":\"If the slash reduces the balance to zero, the validator is forcibly ejected and retired\",\"params\":{\"slash\":\"The slash details including validator address and penalty amount\"}},\"ValidatorStakeToppedUp(address,uint256)\":{\"params\":{\"amount\":\"The deficit that was provided and consolidated on the Issuance contract\",\"validatorAddress\":\"The validator whose stake was topped up\"}},\"ValidatorStakeVersionUpgraded(address,uint8,uint8,uint256,uint256)\":{\"params\":{\"newStakeAmount\":\"The stakeAmount associated with the new version\",\"newVersion\":\"The validator's new stake version\",\"oldStakeAmount\":\"The stakeAmount associated with the old version\",\"oldVersion\":\"The validator's previous stake version\",\"validatorAddress\":\"The validator whose stake version was upgraded\"}},\"ValidatorStaked((address,uint32,uint32,uint8,bool,uint8,uint8))\":{\"params\":{\"validator\":\"The newly staked validator's info\"}}},\"kind\":\"dev\",\"methods\":{\"activate()\":{\"details\":\"Self-activation function for validators, gaining `PendingActivation` status and setting next epoch as activation epoch to ensure rewards eligibility only after completing a full epoch\"},\"allocateIssuance()\":{\"details\":\"Permissioned function to allocate TEL for epoch issuance, ie consensus block rewards\"},\"applyIncentives((address,uint256)[])\":{\"details\":\"First boundary system call in the closing block: runs before `applySlashes` so weights reflect pre-slash collateral, and before `concludeEpoch` so weights reflect the versions active during the closing epoch. Entries with sentinel addresses (token ids 0 and type(uint160).max) or retired validators are skipped rather than reverting, so a malformed entry cannot stall the boundary. Issuance distribution is not yet enabled during the pilot; the protocol passes an empty array\"},\"applySlashes((address,uint256)[])\":{\"details\":\"Second boundary system call in the closing block: MUST run before `concludeEpoch` so slashes land on the full old-version collateral ahead of the version-queue settlement, and so the protocol's post-slash committee reads see any ejections. Entries with sentinel addresses or retired validators are skipped rather than reverting. Slashing is not yet enabled during the pilot; the protocol passes an empty array\"},\"balanceOf(address)\":{\"details\":\"See {IERC721-balanceOf}.\"},\"beginExit()\":{\"details\":\"Issues an exit request for a validator to be retired from the `Active` validator set\"},\"burn(address)\":{\"details\":\"In the case of malicious or erroneous node operator behavior, governance can use this function to burn a validator's `ConsensusNFT` and immediately eject from consensus committees if applicableIntended for sparing use; only reverts if burning results in empty committee\",\"params\":{\"from\":\"Refers to the struct member `ValidatorInfo.validatorAddress` in `IConsensusRegistry`\"}},\"cancelStakeVersionChange(address)\":{\"details\":\"Withdraws a pending stake version change without settling it, returning any escrow to its funder\",\"params\":{\"validatorAddress\":\"The validator whose pending change should be cancelled\"}},\"claimRefund()\":{\"details\":\"Transfers the caller's accumulated refund credit\"},\"claimStakeRewards(address)\":{\"details\":\"Used by rewardees to claim staking rewards\"},\"concludeEpoch(address[])\":{\"details\":\"The protocol sequences the closing block as `applyIncentives`, then `applySlashes`, then this call. That ordering is a security invariant: it lets the protocol assemble `newCommittee` and read `nextCommitteeSize` after slash-to-zero ejections have landed (so this call's committee checks cannot revert against a stale pre-slash view, and an ejected validator is never seated in a future committee), and it makes the version-queue settlement here read post-slash balances. Settlement refunds accrue as `claimRefund` credits rather than transfers, so this call performs no external calls beyond the trusted Issuance consolidation and its cost is storage-bounded regardless of recipient behavior.\",\"params\":{\"newCommittee\":\"The future validator committee for `$.currentEpoch + 3`\"}},\"constructor\":{\"details\":\"Stake for `initialValidators_` is allocated directly to the ConsensusRegistry balance and decremented directly from the TEL precompile within the protocol on the rust sideOnly governance delegation is enabled at genesis\",\"params\":{\"initialValidators_\":\"The initial validator set running Telcoin Network; these validators will comprise the voter committee for the first three epochs, ie `epochInfo[0:2]`\"}},\"delegateStake(bytes,(bytes),address,bytes,uint256)\":{\"details\":\"Accepts delegated stake from a non-validator caller authorized by a validator's EIP712 signature\",\"params\":{\"deadline\":\"Unix timestamp past which `validatorSig` is rejected (ignored for governance calls)\"}},\"delegationDigest(bytes,address,address,uint256)\":{\"params\":{\"deadline\":\"Unix timestamp past which the produced signature must be rejected\"},\"returns\":{\"_0\":\"_ EIP-712 typed struct hash used to enable delegated proof of stake\"}},\"eip712Domain()\":{\"details\":\"See: https://eips.ethereum.org/EIPS/eip-5267\"},\"getApproved(uint256)\":{\"details\":\"See {IERC721-getApproved}.\"},\"getBalanceBreakdown(address)\":{\"details\":\"Returns staking information for the given address\"},\"getBlsPubkey(address)\":{\"details\":\"Fetches the BLS pubkey for a given validator address\"},\"getCommitteeBlsPubkeys(uint32)\":{\"details\":\"Fetches the BLS pubkeys for the committee of a given epoch\"},\"getCommitteeValidators(uint32)\":{\"details\":\"Fetches the committee for a given epoch\"},\"getCurrentEpoch()\":{\"details\":\"Returns the current epoch\"},\"getCurrentEpochInfo()\":{\"details\":\"Returns the current epoch's committee and block height\"},\"getCurrentStakeConfig()\":{\"details\":\"Returns the latest authored stake configuration, which becomes active at the next epoch start\"},\"getCurrentStakeVersion()\":{\"details\":\"Returns the stake version active for the current epoch, ie the version stamped into the epoch's info at its start\"},\"getEpochInfo(uint32)\":{\"details\":\"Returns information about the provided epoch. Only four latest & two future epochs are stored\"},\"getRewards(address)\":{\"details\":\"Fetches the claimable rewards accrued for a given validator address\",\"returns\":{\"_0\":\"_ The validator's claimable rewards, not including the validator's stake\"}},\"getValidator(address)\":{\"details\":\"Fetches the `ValidatorInfo` for a given `validatorAddress == ConsensusNFT tokenId`\"},\"getValidators(uint8)\":{\"details\":\"Returns the addresses of validators in exactly the provided status's set, in the set's current order. Reverts on `Undefined` and `Any` (neither maintains a set).\"},\"getValidatorsInfo(uint8)\":{\"details\":\"Like `getValidators`, but returns the full `ValidatorInfo` for each validator in the set.\"},\"increaseNonce()\":{\"details\":\"Caller must hold a ConsensusNFT; lets a validator revoke a delegation it authorized but no longer wants honored\"},\"isApprovedForAll(address,address)\":{\"details\":\"See {IERC721-isApprovedForAll}.\"},\"isDelegated(address)\":{\"details\":\"Returns whether a validator's stake was delegated (ie has a delegator)\"},\"isRetired(address)\":{\"details\":\"Returns whether a validator is exited && unstaked, ie \\\"retired\\\"\"},\"isValidator(bytes)\":{\"details\":\"Check if a BLS public key corresponds to an active validator\",\"params\":{\"blsPubkey\":\"The compressed 96-byte BLS public key to check\"},\"returns\":{\"_0\":\"bool True if the validator exists and is not retired, false otherwise\"}},\"issuanceWithdrawal(uint256)\":{\"details\":\"Permissioned function to withdraw TEL from the Issuance contract to the caller\",\"params\":{\"amount\":\"The amount of TEL to withdraw from the Issuance contract\"}},\"migrateValidatorSets()\":{\"details\":\"The storage layout is a clean append (the sets were appended after the pre-existing variables), so `validators[*]` and the ConsensusNFTs survive the code swap untouched; only `validatorSets` / `eligibleValidatorCount` start empty and must be rebuilt before the new read paths (`getValidators` / `getValidatorsInfo` / `concludeEpoch`) work. Walks the ConsensusNFT enumeration and re-derives each set from `currentStatus` (the preserved source of truth), mirroring `_setStatus`: retired, `Undefined`, and `Any` validators carry no set and are skipped. Idempotent - set adds dedupe and the count is recomputed from scratch - so a redundant call (or a call against a freshly seeded genesis) is a no-op. System-gated so the protocol invokes it once during the fork that swaps in this implementation.\"},\"mint(address)\":{\"details\":\"The StakeManager's ERC721 ledger serves a permissioning role over validators, requiring Telcoin governance to approve each node operator and manually issue them a `ConsensusNFT`\",\"params\":{\"to\":\"Refers to the struct member `ValidatorInfo.validatorAddress` in `IConsensusRegistry`\"}},\"name()\":{\"details\":\"See {IERC721Metadata-name}.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"ownerOf(uint256)\":{\"details\":\"See {IERC721-ownerOf}.\"},\"pause()\":{\"details\":\"Emergency function to pause validator and stake management\"},\"paused()\":{\"details\":\"Returns true if the contract is paused, and false otherwise.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"requestStakeVersionChange(address,uint8)\":{\"details\":\"Requests a stake version change for a validator; callable by the validator or its delegator. Only callable for validators with status Staked, PendingActivation, or Active.\",\"params\":{\"targetVersion\":\"The version to adopt (must be strictly greater than current and not exceed the latest authored version)\",\"validatorAddress\":\"The validator whose stake version should change\"}},\"safeTransferFrom(address,address,uint256)\":{\"details\":\"See {IERC721-safeTransferFrom}.\"},\"safeTransferFrom(address,address,uint256,bytes)\":{\"details\":\"See {IERC721-safeTransferFrom}.\"},\"setNextCommitteeSize(uint16)\":{\"details\":\"This is managed off-chain and read by the protocol to shuffle n-validators for `concludeEpoch` call.\"},\"setTopUpAuthorityRequired(bool)\":{\"details\":\"Only callable by governance (owner)\"},\"setValidatorRegion(address,uint8)\":{\"params\":{\"region\":\"The GSMA region identifier (uint8; 0=unspecified, 1-8=GSMA regions)\",\"validatorAddress\":\"The address of the validator to update\"}},\"stake(bytes,(bytes))\":{\"details\":\"Accepts the native TEL stake amount from the calling validator, enabling later self-activation\"},\"stakeConfig(uint8)\":{\"details\":\"Returns the queried stake configuration\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"symbol()\":{\"details\":\"See {IERC721Metadata-symbol}.\"},\"tokenByIndex(uint256)\":{\"details\":\"See {IERC721Enumerable-tokenByIndex}.\"},\"tokenOfOwnerByIndex(address,uint256)\":{\"details\":\"See {IERC721Enumerable-tokenOfOwnerByIndex}.\"},\"topUpSlashedStake(address)\":{\"details\":\"`msg.value` must equal the exact deficit; it is consolidated on the Issuance contract since this contract retains the full stake-backed native TEL when slashes are appliedCallable by governance at any time; by the validator or its delegator only while `topUpAuthorityRequired` is false\",\"params\":{\"validatorAddress\":\"The slashed validator to top up; must be `Staked`, `PendingActivation`, or `Active`\"}},\"totalSupply()\":{\"details\":\"See {IERC721Enumerable-totalSupply}.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"unpause()\":{\"details\":\"Emergency function to unpause validator and stake management\"},\"unstake(address,bool)\":{\"details\":\"Returns previously staked funds in addition to accrued rewards, if any, to the staker\",\"params\":{\"acceptRewardShortfall\":\"When true, caps the rewards payout at the Issuance contract's available balance and permanently forfeits only the shortfall, so an underfunded reward pool can never block a stake withdrawal; identical to a normal unstake whenever Issuance can cover the rewards\"}},\"upgradeStakeVersion((uint256,uint256,uint256,uint32))\":{\"details\":\"Permissioned function to upgrade stake, withdrawal, and consensus block reward configurations\"}},\"stateVariables\":{\"EIP7702_DESIGNATOR_LENGTH\":{\"details\":\"Byte length of an EIP-7702 delegation designator: the 3-byte prefix plus an address\"},\"PENDING_EPOCH\":{\"details\":\"Signals a validator's pending status until activation/exit to correctly apply incentives\"},\"POP_INTENT_PREFIX\":{\"details\":\"The serialized telcoin proof-of-possession intent prefix (`scope=0, version=0, app=0`), which domain-separates PoP messages from other BLS signatures. Mirrors `Intent::telcoin(IntentScope::ProofOfPossession)` in tn-types; the off-chain `pop_message_layout_is_onchain_constructible` test pins it to `0x000000`.\"},\"REFUND_GAS_LIMIT\":{\"details\":\"Gas forwarded with settlement pushes initiated inside `concludeEpoch`. Covers an EOA receive or a multisig fallback-handler dispatch while bounding what a hostile recipient can consume inside the system call; failed pushes fall back to a `claimRefund` credit.\"},\"STAKE_DECREASE_DELAY_EPOCHS\":{\"details\":\"Boundaries a stake-decreasing version change must age before settling. The closing boundary's slashes always land before settlement regardless, so this covers only slashes whose detection lags the offense, by up to this many epochs. Must track the slashing pipeline's worst-case detection latency when programmatic slashing ships.\"},\"_COMMITTEE_TSET\":{\"details\":\"Namespace for the per-epoch transient committee-membership set (see `_markCommitteeMembers`)\"},\"claimableRefunds\":{\"details\":\"Refund credits keyed by recipient, detached from the validator lifecycle: escrow returns and boundary refunds that could not be pushed accumulate here until `claimRefund`\"},\"eligibleValidatorCount\":{\"details\":\"Cached size of the committee-eligible union `{ PendingActivation, Active, PendingExit }`, kept in sync by `_setStatus` so the hot count path (`concludeEpoch` et al.) stays a single SLOAD rather than three set-length reads. Invariant-tested against the eligible set sizes.\"},\"pendingVersionChanges\":{\"details\":\"Queue of in-service stake version changes, settled automatically inside `concludeEpoch`. One entry per validator; `versionChangeRequests[addr].targetVersion == 0` means none pending. Appended at the storage tail: this contract's variables follow all inherited ones in the flattened layout, so growth here preserves every existing slot for in-place upgrades.\"},\"validatorSets\":{\"details\":\"Per-status index of validators, keyed by `ValidatorStatus`. `_setStatus` is the single point that mutates membership, keeping each set in lockstep with `validators[addr].currentStatus`. Only real statuses get members; `Undefined` and `Any` never do. Retiring removes a validator from its set (it should not appear in any status query, exactly as the old scan skipped `isRetired`), but its `validators[addr]` record is retained as a tombstone (`isRetired = true`) that blocks re-joining. Replaces the old O(n) `tokenByIndex` scan: per-status queries are now O(set).\"},\"versionChangeRequests\":{\"details\":\"The queue entries backing `pendingVersionChanges` membership\"}},\"title\":\"ConsensusRegistry\",\"version\":1},\"userdoc\":{\"errors\":{\"AlreadyDefined(address)\":[{\"notice\":\"Thrown when minting a ConsensusNFT for an address that already holds one or is retired\"}],\"BlsPubkeyNotFound(address)\":[{\"notice\":\"Thrown when no BLS public key is stored for the queried validator address\"}],\"CommitteeRequirement(address)\":[{\"notice\":\"Thrown when the committee array is not sorted in strictly ascending address order\"}],\"DelegationExpired(uint256)\":[{\"notice\":\"Thrown when a delegation signature is submitted after its signed deadline\"}],\"DuplicateBLSPubkey()\":[{\"notice\":\"Thrown when a BLS public key has already been registered to another validator\"}],\"GenesisArityMismatch()\":[{\"notice\":\"Thrown during genesis when initialValidators is empty or its length mismatches proofsOfPossession\"}],\"IneligibleUnstake((address,uint32,uint32,uint8,bool,uint8,uint8))\":[{\"notice\":\"Thrown when a validator attempts to unstake but is ineligible\"}],\"InsufficientRewards(uint256)\":[{\"notice\":\"Thrown when claimable rewards are zero or below the version's minWithdrawAmount\"}],\"InvalidBLSPubkey()\":[{\"notice\":\"Thrown when a registered BLS public key is not a well-formed 96-byte compressed G2 point\"}],\"InvalidCommitteeSize(uint256,uint256)\":[{\"notice\":\"Thrown when a committee size is zero or exceeds the number of eligible validators\"}],\"InvalidDeficitAmount(address,uint256,uint8)\":[{\"notice\":\"Thrown when a top-up's `msg.value` does not exactly match the validator's stake deficit\"}],\"InvalidDuration(uint32)\":[{\"notice\":\"Thrown in upgradeStakeVersion when the new epoch duration is zero\"}],\"InvalidEpoch(uint32)\":[{\"notice\":\"Thrown when a queried epoch is outside the stored range or genesis epoch values are nonzero\"}],\"InvalidProofOfPossession((bytes))\":[{\"notice\":\"Thrown when BLS proof-of-possession signature verification fails\"}],\"InvalidStakeAmount(uint256)\":[{\"notice\":\"Thrown when msg.value does not match the required stake amount for the operation\"}],\"InvalidStakeVersion(uint8,uint8)\":[{\"notice\":\"Thrown when a stake version upgrade targets an invalid version\"}],\"InvalidStatus(uint8)\":[{\"notice\":\"Thrown when a validator's current status does not match the required status for the operation\"}],\"InvalidSupply()\":[{\"notice\":\"Thrown when unstaking would reduce ConsensusNFT totalSupply to zero\"}],\"InvalidTokenId(uint256)\":[{\"notice\":\"Thrown when a token ID is zero, exceeds type(uint160).max, or does not exist\"}],\"InvalidValidatorAddress()\":[{\"notice\":\"Thrown during genesis initialization when a validator has address(0)\"}],\"IssuanceTransferFailed()\":[{\"notice\":\"Thrown when a low-level ETH transfer to the Issuance contract fails\"}],\"LowLevelCallFailure(bytes)\":[{\"notice\":\"Thrown when the BLS precompile staticcall fails or returns an unexpected payload\"}],\"NoClaimableRefund()\":[{\"notice\":\"Thrown when `claimRefund` is called by an address with no claimable refund credit\"}],\"NoPendingVersionChange()\":[{\"notice\":\"Thrown when cancelling a stake version change for a validator with none pending\"}],\"NotRecipient(address)\":[{\"notice\":\"Thrown when the caller is neither the validator nor its delegator\"}],\"NotTransferable()\":[{\"notice\":\"Thrown on transfer, approve, or setApprovalForAll because ConsensusNFTs are soulbound\"}],\"NotValidator(address)\":[{\"notice\":\"Thrown when a delegated-stake EIP-712 signature fails verification\"}],\"RequiresConsensusNFT()\":[{\"notice\":\"Thrown when the provided address does not own the expected ConsensusNFT\"}],\"StakeNotSlashed(address,uint256,uint8)\":[{\"notice\":\"Thrown on top-up attempts for a validator whose balance is not below its stake amount\"}],\"TopUpAuthorityRequired()\":[{\"notice\":\"Thrown when a top-up is attempted by a non-governance caller while top-ups are restricted to the governance top-up authority\"}]},\"events\":{\"DelegationNonceIncreased(address,uint64)\":{\"notice\":\"Emitted when a validator invalidates outstanding delegation signatures by bumping its nonce\"},\"NewEpoch((address[],uint256,uint64,uint32,uint32,uint8))\":{\"notice\":\"Emitted at epoch conclusion when a new epoch begins\"},\"NextCommitteeSizeUpdated(uint16,uint16,uint256)\":{\"notice\":\"Emitted when governance or the protocol adjusts the next epoch's committee size\"},\"RefundClaimed(address,uint256)\":{\"notice\":\"Emitted when an accumulated refund credit is claimed\"},\"RefundQueued(address,uint256)\":{\"notice\":\"Emitted when a refund or escrow return is credited for a later `claimRefund` pull: every boundary settlement refund, escrow returns on retirement, and user-initiated escrow returns whose push failed\"},\"RewardsClaimed(address,uint256)\":{\"notice\":\"Emitted when a stake originator claims accrued rewards or unstakes\"},\"StakeVersionAuthored(uint8,uint256,uint256,uint256,uint32)\":{\"notice\":\"Emitted when governance authors a new global stake-config version, which validators may subsequently adopt via per-validator version changes\"},\"StakeVersionChangeCanceled(address)\":{\"notice\":\"Emitted when a pending stake version change is withdrawn before settlement\"},\"StakeVersionChangeRequested(address,uint8,uint32,uint256)\":{\"notice\":\"Emitted when an in-service validator requests a stake version change, queued for automatic settlement inside `concludeEpoch`\"},\"TopUpAuthorityRequirementUpdated(bool)\":{\"notice\":\"Emitted when governance toggles whether `topUpSlashedStake` is restricted to the governance top-up authority\"},\"ValidatorActivated((address,uint32,uint32,uint8,bool,uint8,uint8))\":{\"notice\":\"Emitted when a validator's activation resolves at epoch conclusion or at genesis\"},\"ValidatorExited((address,uint32,uint32,uint8,bool,uint8,uint8))\":{\"notice\":\"Emitted when a pending-exit validator is removed from the active set by the protocol\"},\"ValidatorPendingActivation((address,uint32,uint32,uint8,bool,uint8,uint8))\":{\"notice\":\"Emitted when a staked validator self-activates, entering the activation queue\"},\"ValidatorPendingExit((address,uint32,uint32,uint8,bool,uint8,uint8))\":{\"notice\":\"Emitted when an active validator requests exit, entering the exit queue\"},\"ValidatorRegionUpdated(address,uint8)\":{\"notice\":\"Emitted when governance updates a validator's geographic region assignment\"},\"ValidatorRetired((address,uint32,uint32,uint8,bool,uint8,uint8))\":{\"notice\":\"Emitted when a validator is permanently retired and its address can never rejoin\"},\"ValidatorSetsMigrated(uint256)\":{\"notice\":\"Emitted once when `migrateValidatorSets` back-fills the per-status sets during an in-place upgrade from a deployment that predates them\"},\"ValidatorSlashed((address,uint256))\":{\"notice\":\"Emitted for each slash applied to a validator's outstanding balance\"},\"ValidatorStakeToppedUp(address,uint256)\":{\"notice\":\"Emitted when a slashed validator's balance is restored to its version's full stake amount\"},\"ValidatorStakeVersionUpgraded(address,uint8,uint8,uint256,uint256)\":{\"notice\":\"Emitted when a validator's stake version is upgraded in-place\"},\"ValidatorStaked((address,uint32,uint32,uint8,bool,uint8,uint8))\":{\"notice\":\"Emitted when a validator first stakes, entering the Staked lifecycle state\"}},\"kind\":\"user\",\"methods\":{\"activate()\":{\"notice\":\"Caller must own a ConsensusNFT and be `Staked` status, ie staked or delegated\"},\"allocateIssuance()\":{\"notice\":\"Allocated TEL leaves the Issuance contract only as staking issuance rewards or through a governance withdrawal via `issuanceWithdrawal`Only governance may allocate TEL in this manner\"},\"applyIncentives((address,uint256)[])\":{\"notice\":\"Distributes the closing epoch's issuance to stake originators, weighted by initial stake and consensus header count\"},\"applySlashes((address,uint256)[])\":{\"notice\":\"Applies the closing epoch's penalties to outstanding balances, ejecting validators slashed to zero\"},\"approve(address,uint256)\":{\"notice\":\"Wouldn't do anything because transfers are disabled but explicitly disallow anyway\"},\"beginExit()\":{\"notice\":\"Reverts if the exit queue is full, ie if active validator count would drop too low\"},\"cancelStakeVersionChange(address)\":{\"notice\":\"Callable by the validator or its delegator\"},\"claimRefund()\":{\"notice\":\"Credits accrue from boundary settlement refunds, escrow returns on retirement, and user-initiated escrow returns whose push failed; they are detached from the validator lifecycle and survive burns and retirement\"},\"concludeEpoch(address[])\":{\"notice\":\"The final epoch-boundary system call: settles queued stake version changes and rotates the epoch, seating the provided future committee\"},\"delegateStake(bytes,(bytes),address,bytes,uint256)\":{\"notice\":\"`validatorAddress` must be a validator already in possession of a `ConsensusNFT`Ensuring `uncompressedPubkey` corresponds to `ValidatorInfo::blsPubkey` is better performed externally in Rust by the protocol due to EIP2537 precompile & EVM limitations so this contract does not perform any (un)compression checks`validatorSig` must come from the authority that owns the validator address itself. For an externally owned account that is its secp256k1 key, whether or not the account has attached an EIP-7702 delegation; a delegated wallet program is not accepted as a stand-in for the key. Only a genuine contract account authorizes through ERC-1271.\"},\"delegationDigest(bytes,address,address,uint256)\":{\"notice\":\"Returns the delegation digest that a validator should sign to accept a delegation\"},\"getBlsPubkey(address)\":{\"notice\":\"Reverts with `BlsPubkeyNotFound` if no pubkey is stored for `validatorAddress` (including the zero-address case)\"},\"getCurrentStakeConfig()\":{\"notice\":\"Not necessarily the epoch-active config: during any epoch in which governance has authored a new version, this differs from `stakeConfig(getCurrentStakeVersion())`\"},\"getCurrentStakeVersion()\":{\"notice\":\"Differs from `getCurrentStakeConfig` during any epoch in which governance has authored a new version, since newly authored versions activate at the next epoch start\"},\"getEligibleValidatorCount()\":{\"notice\":\"Number of committee-eligible validators: the unretired `{ PendingActivation, Active, PendingExit }` set. Derived O(1) from the per-status set sizes.\"},\"getEpochInfo(uint32)\":{\"notice\":\"For future epochs, the config fields (issuance, duration, stake version) are a projection from the latest authored configuration and can change until the epoch is stamped at its start; `blockHeight` is always 0 as it is not yet known\"},\"getNextCommitteeSize()\":{\"notice\":\"Returns the next committee size\"},\"getPendingVersionChanges()\":{\"notice\":\"Returns the validators with a queued stake version change, in set order\"},\"getValidators(uint8)\":{\"notice\":\"Per-status only: the `Active` query no longer folds in `PendingActivation`/`PendingExit`. The committee-eligible pool is the union of the `{ PendingActivation, Active, PendingExit }` queries; the protocol unions those three calls off-chain. `getEligibleValidatorCount()` returns that union's size on-chain.\"},\"increaseNonce()\":{\"notice\":\"Invalidates any outstanding delegation signature for the caller by advancing its nonce\"},\"isRetired(address)\":{\"notice\":\"After retiring, a validator's `tokenId == validatorAddress` cannot be reused\"},\"issuanceWithdrawal(uint256)\":{\"notice\":\"Only governance may withdraw in this manner, eg to recover consolidated slash funds or to reduce a prior issuance allocation\"},\"migrateValidatorSets()\":{\"notice\":\"One-time back-fill of the per-status validator sets, the cached eligible count, and the BLS pubkey reverse index for an in-place upgrade from a deployment that predates them.\"},\"mint(address)\":{\"notice\":\"For each mintee, `tokenId == uint160(to)`Access-gated in ConsensusRegistry to its owner, which is a Telcoin governance address\"},\"pause()\":{\"notice\":\"Does not pause system callable or ConsensusNFT fns. Only accessible by `owner`\"},\"requestStakeVersionChange(address,uint8)\":{\"notice\":\"`Staked` validators settle immediately: they are not in service, are never members of a committee, and can already reclaim their full stake at any time via `unstake`.In-service (PendingActivation/Active) validators are queued instead: the change is applied automatically inside `concludeEpoch` at an epoch boundary, after that boundary's slashes have landed, so no request or settlement timing can move value ahead of a slash. Stake increases settle at the first boundary; stake decreases settle only once `STAKE_DECREASE_DELAY_EPOCHS` further boundaries have passed, covering slashes whose detection lags the offense by up to that many epochs.If the new version requires more stake, `msg.value` must equal the exact deficit; it is escrowed in the queue entry (not in the stake balance) until the boundary flip.If the new version requires less stake, no value moves at request time. At settlement the surplus above the new stake amount, computed from the balance as it stands post-slash, is credited to the reward recipient for `claimRefund` withdrawal; the slashed remainder of the surplus is consolidated on Issuance.A repeat request overwrites the pending entry, returning any prior escrow to its funder and re-stamping the request epoch.If a validator has been slashed and has accrued rewards, settling a lower `stakeAmount` may zero claimable rewards since rewards are derived as `balance - stakeAmount`. The recipient still receives the correct total ETH via the refund. Validators should claim rewards before requesting if they have both accrued rewards and pending slashes.\"},\"setApprovalForAll(address,bool)\":{\"notice\":\"Wouldn't do anything because transfers are disabled but explicitly disallow anyway\"},\"setNextCommitteeSize(uint16)\":{\"notice\":\"Set the internal value for the nextCommitteeSize.Reverts if the newSize is larger than the number of active/pending validators.\"},\"setTopUpAuthorityRequired(bool)\":{\"notice\":\"Toggles whether `topUpSlashedStake` is restricted to the governance top-up authority\"},\"setValidatorRegion(address,uint8)\":{\"notice\":\"Sets the GSMA region identifier for a validator. Only callable by governance (owner).\"},\"stake(bytes,(bytes))\":{\"notice\":\"Caller must already have been issued a `ConsensusNFT` by Telcoin governanceEnsuring `uncompressedPubkey` corresponds to `ValidatorInfo::blsPubkey` is better performed externally in Rust by the protocol due to EIP2537 precompile & EVM limitations so this contract does not perform any (un)compression checks\"},\"tokenURI(uint256)\":{\"notice\":\"Read-only mechanism, not yet live\"},\"topUpAuthorityRequired()\":{\"notice\":\"When true, `topUpSlashedStake` is restricted to governance; when false, validators and their delegators may also restore their own slashed stake\"},\"topUpSlashedStake(address)\":{\"notice\":\"Restores a slashed validator's balance to its version's full stake amount\"},\"transferFrom(address,address,uint256)\":{\"notice\":\"Consensus NFTs are soulbound to validators and cannot be transferred unless burned\"},\"unpause()\":{\"notice\":\"Does not affect system callable or ConsensusNFT fns. Only accessible by `owner`\"},\"unstake(address,bool)\":{\"notice\":\"May be used to reverse validator onboarding pre-activation or permanently retire after full exitOnce unstaked and retired, validator addresses cannot be reused\"},\"upgradeStakeVersion((uint256,uint256,uint256,uint32))\":{\"notice\":\"The new version takes effect in the next epoch\"}},\"notice\":\"A Telcoin ContractThis contract manages consensus validator external keys, staking, and committees\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/consensus/ConsensusRegistry.sol\":\"ConsensusRegistry\"},\"evmVersion\":\"prague\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@ensdomains/=lib/v4-core/node_modules/@ensdomains/\",\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/\",\":@uniswap/v4-core/=lib/v4-core/\",\":ds-test/=lib/v4-core/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-gas-snapshot/=lib/v4-periphery/lib/permit2/lib/forge-gas-snapshot/src/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/\",\":hardhat/=lib/v4-core/node_modules/hardhat/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/\",\":permit2/=lib/v4-periphery/lib/permit2/\",\":safe-contracts/=lib/safe-contracts/\",\":solady/=lib/solady/src/\",\":solmate/=lib/v4-core/lib/solmate/\",\":v4-core/=lib/v4-core/src/\",\":v4-periphery/=lib/v4-periphery/\"]},\"sources\":{\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x880da465c203cec76b10d72dbd87c80f387df4102274f23eea1f9c9b0918792b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://399594cd8bb0143bc9e55e0f1d071d0d8c850a394fb7a319d50edd55d9ed822b\",\"dweb:/ipfs/QmbPZzgtT6LEm9CMqWfagQFwETbV1ztpECBB1DtQHrKiRz\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC721/ERC721.sol\":{\"keccak256\":\"0x39ed367e54765186281efcfe83e47cf0ad62cc879f10e191360712507125f29a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c5ae6d85bd48cca8d6d2fcec8c63efd86f56f8a5832577a47e403ce0e65cb09\",\"dweb:/ipfs/QmUtcS8AbRSWhuc61puYet58os8FvSqm329ChoW8wwZXZk\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0x5dc63d1c6a12fe1b17793e1745877b2fcbe1964c3edfd0a482fac21ca8f18261\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6b7f97c5960a50fd1822cb298551ffc908e37b7893a68d6d08bce18a11cb0f11\",\"dweb:/ipfs/QmQQvxBytoY1eBt3pRQDmvH2hZ2yjhs12YqVfzGm7KSURq\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC721/IERC721Receiver.sol\":{\"keccak256\":\"0xb5afb8e8eebc4d1c6404df2f5e1e6d2c3d24fd01e5dfc855314951ecfaae462d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://78586466c424f076c6a2a551d848cfbe3f7c49e723830807598484a1047b3b34\",\"dweb:/ipfs/Qmb717ovcFxm7qgNKEShiV6M9SPR3v1qnNpAGH84D6w29p\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721Enumerable.sol\":{\"keccak256\":\"0x5191f783af281c75b7de0f1e3e36cdc6ac5cb2358d929584c4953fd02fa2b5eb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d3ca2689d95ba45e297e55c8f71112e3ccec701d0087cb5e1c6ecb1b9ce86f00\",\"dweb:/ipfs/QmNQ5xKxJpF9k7AahnmJYvg5XeGSYtRig2Lp2WHmWXyBze\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/IERC721Enumerable.sol\":{\"keccak256\":\"0x3d6954a93ac198a2ffa384fa58ccf18e7e235263e051a394328002eff4e073de\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1f58c799bd939d3951c94893e83ef86acd56989d1d7db7f9d180c515e29e28ff\",\"dweb:/ipfs/QmTgAxHAAys4kq9ZfU9YB24MWYoHLGAKSxnYUigPFrNW7g\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/IERC721Metadata.sol\":{\"keccak256\":\"0x37d1aaaa5a2908a09e9dcf56a26ddf762ecf295afb5964695937344fc6802ce1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ed0bfc1b92153c5000e50f4021367b931bbe96372ac6facec3c4961b72053d02\",\"dweb:/ipfs/Qmbwp8VDerjS5SV1quwHH1oMXxPQ93fzfLVqJ2RCqbowGE\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC721/utils/ERC721Utils.sol\":{\"keccak256\":\"0x40399695922383778f9f540a620bec475a2f8e0f08d41f0005682842e28a9855\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://746d295e403931aeb9d6065fd5a0871f43ab5459814a60623611e4b6641a09fd\",\"dweb:/ipfs/QmWrgT8YJrQ9FfD1o3YYArwo57e7MGdpFKuM74qJ4qE34E\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Base64.sol\":{\"keccak256\":\"0xbee2b819e1b4bf569ffc1b1b9d560b4abd6a589575f3093edaab9244de18a0c2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e478c0e9bbf3eb8cd3b7784f9b397603e34747f9ffd16571ed1d89ce102de389\",\"dweb:/ipfs/QmZ6zXpwy5xRxx9RkodJmDZSUTeEqPQUanAC5TUoYqW2VR\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Pausable.sol\":{\"keccak256\":\"0xb2e5f50762c27fb4b123e3619c3c02bdcba5e515309382e5bfb6f7d6486510bd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1a4b83328c98d518a2699c2cbe9e9b055e78aa57fa8639f1b88deb8b3750b5dc\",\"dweb:/ipfs/QmXdcYj5v7zQxXFPULShHkR5p4Wa2zYuupbHnFdV3cHYtc\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/SlotDerivation.sol\":{\"keccak256\":\"0x8447b57b63810fe2e367c09496a966f143ec0e825d71ddb9fce2506cff84b618\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://996cb48f793bf151555045b37138e36b3cdb31d6bc6552d3149285260be00cfb\",\"dweb:/ipfs/QmcLaTTMNVbkMx58xhkp6GeFt4V3GtSyupZuaKG3vYW2Zc\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Strings.sol\":{\"keccak256\":\"0x44f87e91783e88415bde66f1a63f6c7f0076f2d511548820407d5c95643ac56c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://13a51bc2b23827744dcf5bad10c69e72528cf015a6fe48c93632cdb2c0eb1251\",\"dweb:/ipfs/QmZwPA47Yqgje1qtkdEFEja8ntTahMStYzKf5q3JRnaR7d\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/TransientSlot.sol\":{\"keccak256\":\"0x9303ef5a2beb555e52ce56598de205ce07ca8988fc67d073687c06cb8fc973d1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8b2e48fb42844c25e6cb38e7cfa1d91dcdc054613fd10f608833dbc677acf889\",\"dweb:/ipfs/QmT4HQxbgpWA3fZnK4dY3eXHNCoyBvpvzNq5k7eSt5mR5t\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xddce8e17e3d3f9ed818b4f4c4478a8262aab8b11ed322f1bf5ed705bb4bd97fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8084aa71a4cc7d2980972412a88fe4f114869faea3fefa5436431644eb5c0287\",\"dweb:/ipfs/Qmbqfs5dRdPvHVKY8kTaeyc65NdqXRQwRK7h9s5UJEhD1p\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"keccak256\":\"0xa00be322d7db5786750ce0ac7e2f5b633ac30a5ed5fa1ced1e74acfc19acecea\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c84e822f87cbdc4082533b626667b6928715bb2b1e8e7eb96954cebb9e38c8d\",\"dweb:/ipfs/QmZmy9dgxLTerBAQDuuHqbL6EpgRxddqgv5KmwpXYVbKz1\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0xb1970fac7b64e6c09611e6691791e848d5e3fe410fa5899e7df2e0afd77a99e3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://db5fbb3dddd8b7047465b62575d96231ba8a2774d37fb4737fbf23340fabbb03\",\"dweb:/ipfs/QmVUSvooZKEdEdap619tcJjTLcAuH6QBdZqAzWwnAXZAWJ\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol\":{\"keccak256\":\"0x9b161e97b8967d4bc0c08d25741889a30692cdda4b71910bf1b0e315f1962212\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://821500c39d095eaa25b06f46e65f1d0e97c4c96b39227f79077dee7d9e84051f\",\"dweb:/ipfs/QmSTeGorKzSWF6HAmxo32uCZiEuKNvreQdUiX1AaYtUMTz\"]},\"lib/solady/src/utils/ECDSA.sol\":{\"keccak256\":\"0xb0754260daabfe6f20dd16f2213823f27c8df1089b43c8eda9b3c2a6eca07478\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ffef4ca363ec0e2437b5e195fbb3d58bdc6750921fce32f351ca1c092ad36a75\",\"dweb:/ipfs/QmTcnAyxwvQg3h357PdB8S8oz5bBt85J4SvEgmMqwAfPKF\"]},\"lib/solady/src/utils/EIP712.sol\":{\"keccak256\":\"0x53ccaa757944900e7423347c3c35ea5a905580f3f075452b8468a501a9c39839\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://aa5688d98319fbeb5b3c46330a394e15a0f2c862d651415e183da4179b918351\",\"dweb:/ipfs/QmZZFrFWmUCFL1qkZDVm3oqrDkQfumYnnksF6cpPkAHdtJ\"]},\"lib/solady/src/utils/ReentrancyGuard.sol\":{\"keccak256\":\"0xdb28f318ec45197a6c7cc2abebed67d7cb8b965838ef962e3844423256a9ddb8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://873cd46b77a2aeb781e7a0d131e7299151323ed884c330101a51d0727e218d98\",\"dweb:/ipfs/QmddadCjyedztvdSgLZEyKWoRes2SqtpviSjhEbSNrkUoi\"]},\"lib/solady/src/utils/SignatureCheckerLib.sol\":{\"keccak256\":\"0x098c7eb88b3048f227b240e0e5bf1da4a8f7622b30f6d7c06416bfcab3225e77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://50c2766f652916c5d6433665fb1c3b2f04c3d9292a35c12e0f8d7c71dd6438cb\",\"dweb:/ipfs/QmWTMwN2RDZUUPg7KkH1qFBjTSh84Zw8bbYwRBCQUtLN2h\"]},\"src/consensus/ConsensusRegistry.sol\":{\"keccak256\":\"0x74061b4b6c439288baa60288a43b2680bed4de1cf35cc1f287b9a06f513af1d6\",\"license\":\"MIT or Apache-2.0\",\"urls\":[\"bzz-raw://d5413e14ce9729aa4571b69918ce8e1950f890f3785825e2d42b904f98ad6b39\",\"dweb:/ipfs/QmQgJxGgmLS51WrM4gkQFXzkbtzsjzjDkZpZsBwipbhA1Z\"]},\"src/consensus/Issuance.sol\":{\"keccak256\":\"0xdbb33a3ff5e4afa3c5d107051647db33d86e95cd2686c0207fe8602f99a7d14a\",\"license\":\"MIT or Apache-2.0\",\"urls\":[\"bzz-raw://082e686f08caf3840b309f72b8e480b4ba3d4b90c42c18fb831c1a4b7ecdd727\",\"dweb:/ipfs/QmT37vqjVGk1RsDc3BJCvVNYcLNuP9hTDK9vvsvykZHohG\"]},\"src/consensus/StakeManager.sol\":{\"keccak256\":\"0x0b1c34f304f62b9572202a8584f1d3adc320a7be62e13c15faebb8179a5dc745\",\"license\":\"MIT or Apache-2.0\",\"urls\":[\"bzz-raw://6ec437743fc3d984e80d60921c39a6ba1ddfa661770e3ccd3a49a1521e7c3db0\",\"dweb:/ipfs/QmXsF11j5xNR9WLA27NmdiGj8hrBp6n2MWJQQASkZEHV68\"]},\"src/consensus/SystemCallable.sol\":{\"keccak256\":\"0xed0e78873f3f574356c3bd6fcaa8f1869415aec576586530f74a599e3c767ead\",\"license\":\"MIT or Apache-2.0\",\"urls\":[\"bzz-raw://30b23f67de5abff6a021ff3456fa596585c57a6d09562e2a3ef4cb719b673e28\",\"dweb:/ipfs/QmYRrBUKeSSEXBfrsw4arse3c9jCsuw3hHsHpjJeEqHNwS\"]},\"src/interfaces/IBlsG1.sol\":{\"keccak256\":\"0x950230ff0bed0ae8c0dbef2d22a24fb4114a00c23604619b9dccfd3cbe370ab0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://27432929c7726f7edb4b62981d0ca6bdb5bbada573a835f787556ff442b64c15\",\"dweb:/ipfs/QmSBLDrPL47intGub7yHRC4JRVSyYSW4dSnQMGFQKK7Z8E\"]},\"src/interfaces/IConsensusRegistry.sol\":{\"keccak256\":\"0xd21fdfe6b1f601a70dd9ea80802b6cb92d98a7a751058862544cc1ccf512a6f8\",\"license\":\"MIT or Apache-2.0\",\"urls\":[\"bzz-raw://993174c548c1d8170e87fa3fe7e33368838492883f053ea17ee765b93ce00255\",\"dweb:/ipfs/QmbdvPt6DhckDw1zp4AznyUqP91hqm5ihyqFUagbJj1Au5\"]},\"src/interfaces/IStakeManager.sol\":{\"keccak256\":\"0x735cf0dcac8c00ed2a124b4417ec55beb2b914c9c7eab1fd2a95e53abd9104cf\",\"license\":\"MIT or Apache-2.0\",\"urls\":[\"bzz-raw://69fdfa173369f1a05d35a1853317fcf07ee86cfdf38c232d7742bc02095537e5\",\"dweb:/ipfs/QmWFzQMwbBgkAiahzNp5A4VoqkSh7iU2XuLmbJkwqWpL6M\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.35+commit.47b9dedd"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"struct IStakeManager.StakeConfig","name":"genesisConfig_","type":"tuple","components":[{"internalType":"uint256","name":"stakeAmount","type":"uint256"},{"internalType":"uint256","name":"minWithdrawAmount","type":"uint256"},{"internalType":"uint256","name":"epochIssuance","type":"uint256"},{"internalType":"uint32","name":"epochDuration","type":"uint32"}]},{"internalType":"struct IConsensusRegistry.ValidatorInfo[]","name":"initialValidators_","type":"tuple[]","components":[{"internalType":"address","name":"validatorAddress","type":"address"},{"internalType":"uint32","name":"activationEpoch","type":"uint32"},{"internalType":"uint32","name":"exitEpoch","type":"uint32"},{"internalType":"enum IConsensusRegistry.ValidatorStatus","name":"currentStatus","type":"uint8"},{"internalType":"bool","name":"isRetired","type":"bool"},{"internalType":"uint8","name":"stakeVersion","type":"uint8"},{"internalType":"uint8","name":"region","type":"uint8"}]},{"internalType":"bytes[]","name":"blsPubkeys_","type":"bytes[]"},{"internalType":"struct IStakeManager.ProofOfPossession[]","name":"proofsOfPossession","type":"tuple[]","components":[{"internalType":"bytes","name":"signature","type":"bytes"}]},{"internalType":"address","name":"owner_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address"}],"type":"error","name":"AlreadyDefined"},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address"}],"type":"error","name":"BlsPubkeyNotFound"},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address"}],"type":"error","name":"CommitteeRequirement"},{"inputs":[{"internalType":"uint256","name":"deadline","type":"uint256"}],"type":"error","name":"DelegationExpired"},{"inputs":[],"type":"error","name":"DuplicateBLSPubkey"},{"inputs":[],"type":"error","name":"ERC721EnumerableForbiddenBatchMint"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"owner","type":"address"}],"type":"error","name":"ERC721IncorrectOwner"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"type":"error","name":"ERC721InsufficientApproval"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"type":"error","name":"ERC721InvalidApprover"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"type":"error","name":"ERC721InvalidOperator"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"type":"error","name":"ERC721InvalidOwner"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"type":"error","name":"ERC721InvalidReceiver"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"type":"error","name":"ERC721InvalidSender"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"type":"error","name":"ERC721NonexistentToken"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"type":"error","name":"ERC721OutOfBoundsIndex"},{"inputs":[],"type":"error","name":"EnforcedPause"},{"inputs":[],"type":"error","name":"ExpectedPause"},{"inputs":[],"type":"error","name":"GenesisArityMismatch"},{"inputs":[{"internalType":"struct IConsensusRegistry.ValidatorInfo","name":"validator","type":"tuple","components":[{"internalType":"address","name":"validatorAddress","type":"address"},{"internalType":"uint32","name":"activationEpoch","type":"uint32"},{"internalType":"uint32","name":"exitEpoch","type":"uint32"},{"internalType":"enum IConsensusRegistry.ValidatorStatus","name":"currentStatus","type":"uint8"},{"internalType":"bool","name":"isRetired","type":"bool"},{"internalType":"uint8","name":"stakeVersion","type":"uint8"},{"internalType":"uint8","name":"region","type":"uint8"}]}],"type":"error","name":"IneligibleUnstake"},{"inputs":[{"internalType":"uint256","name":"withdrawAmount","type":"uint256"}],"type":"error","name":"InsufficientRewards"},{"inputs":[],"type":"error","name":"InvalidBLSPubkey"},{"inputs":[{"internalType":"uint256","name":"minCommitteeSize","type":"uint256"},{"internalType":"uint256","name":"providedCommitteeSize","type":"uint256"}],"type":"error","name":"InvalidCommitteeSize"},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint8","name":"stakeVersion","type":"uint8"}],"type":"error","name":"InvalidDeficitAmount"},{"inputs":[{"internalType":"uint32","name":"duration","type":"uint32"}],"type":"error","name":"InvalidDuration"},{"inputs":[{"internalType":"uint32","name":"epoch","type":"uint32"}],"type":"error","name":"InvalidEpoch"},{"inputs":[{"internalType":"struct IStakeManager.ProofOfPossession","name":"proof","type":"tuple","components":[{"internalType":"bytes","name":"signature","type":"bytes"}]}],"type":"error","name":"InvalidProofOfPossession"},{"inputs":[{"internalType":"uint256","name":"stakeAmount","type":"uint256"}],"type":"error","name":"InvalidStakeAmount"},{"inputs":[{"internalType":"uint8","name":"currentVersion","type":"uint8"},{"internalType":"uint8","name":"targetVersion","type":"uint8"}],"type":"error","name":"InvalidStakeVersion"},{"inputs":[{"internalType":"enum IConsensusRegistry.ValidatorStatus","name":"status","type":"uint8"}],"type":"error","name":"InvalidStatus"},{"inputs":[],"type":"error","name":"InvalidSupply"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"type":"error","name":"InvalidTokenId"},{"inputs":[],"type":"error","name":"InvalidValidatorAddress"},{"inputs":[],"type":"error","name":"IssuanceTransferFailed"},{"inputs":[{"internalType":"bytes","name":"err","type":"bytes"}],"type":"error","name":"LowLevelCallFailure"},{"inputs":[],"type":"error","name":"NoClaimableRefund"},{"inputs":[],"type":"error","name":"NoPendingVersionChange"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"}],"type":"error","name":"NotRecipient"},{"inputs":[],"type":"error","name":"NotTransferable"},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address"}],"type":"error","name":"NotValidator"},{"inputs":[{"internalType":"address","name":"invalidCaller","type":"address"}],"type":"error","name":"OnlySystemCall"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"type":"error","name":"OwnableInvalidOwner"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"type":"error","name":"OwnableUnauthorizedAccount"},{"inputs":[],"type":"error","name":"Reentrancy"},{"inputs":[],"type":"error","name":"RequiresConsensusNFT"},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint8","name":"stakeVersion","type":"uint8"}],"type":"error","name":"StakeNotSlashed"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"length","type":"uint256"}],"type":"error","name":"StringsInsufficientHexLength"},{"inputs":[],"type":"error","name":"TopUpAuthorityRequired"},{"inputs":[{"internalType":"address","name":"owner","type":"address","indexed":true},{"internalType":"address","name":"approved","type":"address","indexed":true},{"internalType":"uint256","name":"tokenId","type":"uint256","indexed":true}],"type":"event","name":"Approval","anonymous":false},{"inputs":[{"internalType":"address","name":"owner","type":"address","indexed":true},{"internalType":"address","name":"operator","type":"address","indexed":true},{"internalType":"bool","name":"approved","type":"bool","indexed":false}],"type":"event","name":"ApprovalForAll","anonymous":false},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address","indexed":true},{"internalType":"uint64","name":"nonce","type":"uint64","indexed":false}],"type":"event","name":"DelegationNonceIncreased","anonymous":false},{"inputs":[{"internalType":"struct IConsensusRegistry.EpochInfo","name":"epoch","type":"tuple","components":[{"internalType":"address[]","name":"committee","type":"address[]"},{"internalType":"uint256","name":"epochIssuance","type":"uint256"},{"internalType":"uint64","name":"blockHeight","type":"uint64"},{"internalType":"uint32","name":"epochId","type":"uint32"},{"internalType":"uint32","name":"epochDuration","type":"uint32"},{"internalType":"uint8","name":"stakeVersion","type":"uint8"}],"indexed":false}],"type":"event","name":"NewEpoch","anonymous":false},{"inputs":[{"internalType":"uint16","name":"oldSize","type":"uint16","indexed":false},{"internalType":"uint16","name":"newSize","type":"uint16","indexed":false},{"internalType":"uint256","name":"numActiveValidators","type":"uint256","indexed":false}],"type":"event","name":"NextCommitteeSizeUpdated","anonymous":false},{"inputs":[{"internalType":"address","name":"previousOwner","type":"address","indexed":true},{"internalType":"address","name":"newOwner","type":"address","indexed":true}],"type":"event","name":"OwnershipTransferred","anonymous":false},{"inputs":[{"internalType":"address","name":"account","type":"address","indexed":false}],"type":"event","name":"Paused","anonymous":false},{"inputs":[{"internalType":"address","name":"recipient","type":"address","indexed":true},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false}],"type":"event","name":"RefundClaimed","anonymous":false},{"inputs":[{"internalType":"address","name":"recipient","type":"address","indexed":true},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false}],"type":"event","name":"RefundQueued","anonymous":false},{"inputs":[{"internalType":"address","name":"claimant","type":"address","indexed":true},{"internalType":"uint256","name":"rewards","type":"uint256","indexed":false}],"type":"event","name":"RewardsClaimed","anonymous":false},{"inputs":[{"internalType":"uint8","name":"version","type":"uint8","indexed":true},{"internalType":"uint256","name":"stakeAmount","type":"uint256","indexed":false},{"internalType":"uint256","name":"minWithdrawAmount","type":"uint256","indexed":false},{"internalType":"uint256","name":"epochIssuance","type":"uint256","indexed":false},{"internalType":"uint32","name":"epochDuration","type":"uint32","indexed":false}],"type":"event","name":"StakeVersionAuthored","anonymous":false},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address","indexed":true}],"type":"event","name":"StakeVersionChangeCanceled","anonymous":false},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address","indexed":true},{"internalType":"uint8","name":"targetVersion","type":"uint8","indexed":false},{"internalType":"uint32","name":"requestEpoch","type":"uint32","indexed":false},{"internalType":"uint256","name":"escrow","type":"uint256","indexed":false}],"type":"event","name":"StakeVersionChangeRequested","anonymous":false},{"inputs":[{"internalType":"bool","name":"required","type":"bool","indexed":false}],"type":"event","name":"TopUpAuthorityRequirementUpdated","anonymous":false},{"inputs":[{"internalType":"address","name":"from","type":"address","indexed":true},{"internalType":"address","name":"to","type":"address","indexed":true},{"internalType":"uint256","name":"tokenId","type":"uint256","indexed":true}],"type":"event","name":"Transfer","anonymous":false},{"inputs":[{"internalType":"address","name":"account","type":"address","indexed":false}],"type":"event","name":"Unpaused","anonymous":false},{"inputs":[{"internalType":"struct IConsensusRegistry.ValidatorInfo","name":"validator","type":"tuple","components":[{"internalType":"address","name":"validatorAddress","type":"address"},{"internalType":"uint32","name":"activationEpoch","type":"uint32"},{"internalType":"uint32","name":"exitEpoch","type":"uint32"},{"internalType":"enum IConsensusRegistry.ValidatorStatus","name":"currentStatus","type":"uint8"},{"internalType":"bool","name":"isRetired","type":"bool"},{"internalType":"uint8","name":"stakeVersion","type":"uint8"},{"internalType":"uint8","name":"region","type":"uint8"}],"indexed":false}],"type":"event","name":"ValidatorActivated","anonymous":false},{"inputs":[{"internalType":"struct IConsensusRegistry.ValidatorInfo","name":"validator","type":"tuple","components":[{"internalType":"address","name":"validatorAddress","type":"address"},{"internalType":"uint32","name":"activationEpoch","type":"uint32"},{"internalType":"uint32","name":"exitEpoch","type":"uint32"},{"internalType":"enum IConsensusRegistry.ValidatorStatus","name":"currentStatus","type":"uint8"},{"internalType":"bool","name":"isRetired","type":"bool"},{"internalType":"uint8","name":"stakeVersion","type":"uint8"},{"internalType":"uint8","name":"region","type":"uint8"}],"indexed":false}],"type":"event","name":"ValidatorExited","anonymous":false},{"inputs":[{"internalType":"struct IConsensusRegistry.ValidatorInfo","name":"validator","type":"tuple","components":[{"internalType":"address","name":"validatorAddress","type":"address"},{"internalType":"uint32","name":"activationEpoch","type":"uint32"},{"internalType":"uint32","name":"exitEpoch","type":"uint32"},{"internalType":"enum IConsensusRegistry.ValidatorStatus","name":"currentStatus","type":"uint8"},{"internalType":"bool","name":"isRetired","type":"bool"},{"internalType":"uint8","name":"stakeVersion","type":"uint8"},{"internalType":"uint8","name":"region","type":"uint8"}],"indexed":false}],"type":"event","name":"ValidatorPendingActivation","anonymous":false},{"inputs":[{"internalType":"struct IConsensusRegistry.ValidatorInfo","name":"validator","type":"tuple","components":[{"internalType":"address","name":"validatorAddress","type":"address"},{"internalType":"uint32","name":"activationEpoch","type":"uint32"},{"internalType":"uint32","name":"exitEpoch","type":"uint32"},{"internalType":"enum IConsensusRegistry.ValidatorStatus","name":"currentStatus","type":"uint8"},{"internalType":"bool","name":"isRetired","type":"bool"},{"internalType":"uint8","name":"stakeVersion","type":"uint8"},{"internalType":"uint8","name":"region","type":"uint8"}],"indexed":false}],"type":"event","name":"ValidatorPendingExit","anonymous":false},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address","indexed":true},{"internalType":"uint8","name":"region","type":"uint8","indexed":false}],"type":"event","name":"ValidatorRegionUpdated","anonymous":false},{"inputs":[{"internalType":"struct IConsensusRegistry.ValidatorInfo","name":"validator","type":"tuple","components":[{"internalType":"address","name":"validatorAddress","type":"address"},{"internalType":"uint32","name":"activationEpoch","type":"uint32"},{"internalType":"uint32","name":"exitEpoch","type":"uint32"},{"internalType":"enum IConsensusRegistry.ValidatorStatus","name":"currentStatus","type":"uint8"},{"internalType":"bool","name":"isRetired","type":"bool"},{"internalType":"uint8","name":"stakeVersion","type":"uint8"},{"internalType":"uint8","name":"region","type":"uint8"}],"indexed":false}],"type":"event","name":"ValidatorRetired","anonymous":false},{"inputs":[{"internalType":"uint256","name":"eligibleValidatorCount","type":"uint256","indexed":false}],"type":"event","name":"ValidatorSetsMigrated","anonymous":false},{"inputs":[{"internalType":"struct Slash","name":"slash","type":"tuple","components":[{"internalType":"address","name":"validatorAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"indexed":false}],"type":"event","name":"ValidatorSlashed","anonymous":false},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address","indexed":true},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false}],"type":"event","name":"ValidatorStakeToppedUp","anonymous":false},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address","indexed":true},{"internalType":"uint8","name":"oldVersion","type":"uint8","indexed":false},{"internalType":"uint8","name":"newVersion","type":"uint8","indexed":false},{"internalType":"uint256","name":"oldStakeAmount","type":"uint256","indexed":false},{"internalType":"uint256","name":"newStakeAmount","type":"uint256","indexed":false}],"type":"event","name":"ValidatorStakeVersionUpgraded","anonymous":false},{"inputs":[{"internalType":"struct IConsensusRegistry.ValidatorInfo","name":"validator","type":"tuple","components":[{"internalType":"address","name":"validatorAddress","type":"address"},{"internalType":"uint32","name":"activationEpoch","type":"uint32"},{"internalType":"uint32","name":"exitEpoch","type":"uint32"},{"internalType":"enum IConsensusRegistry.ValidatorStatus","name":"currentStatus","type":"uint8"},{"internalType":"bool","name":"isRetired","type":"bool"},{"internalType":"uint8","name":"stakeVersion","type":"uint8"},{"internalType":"uint8","name":"region","type":"uint8"}],"indexed":false}],"type":"event","name":"ValidatorStaked","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"SYSTEM_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"activate"},{"inputs":[],"stateMutability":"payable","type":"function","name":"allocateIssuance"},{"inputs":[{"internalType":"struct RewardInfo[]","name":"rewardInfos","type":"tuple[]","components":[{"internalType":"address","name":"validatorAddress","type":"address"},{"internalType":"uint256","name":"consensusHeaderCount","type":"uint256"}]}],"stateMutability":"nonpayable","type":"function","name":"applyIncentives"},{"inputs":[{"internalType":"struct Slash[]","name":"slashes","type":"tuple[]","components":[{"internalType":"address","name":"validatorAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}]}],"stateMutability":"nonpayable","type":"function","name":"applySlashes"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"approve"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"view","type":"function","name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"beginExit"},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"burn"},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"cancelStakeVersionChange"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"claimRefund"},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"claimStakeRewards"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function","name":"claimableRefunds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address[]","name":"newCommittee","type":"address[]"}],"stateMutability":"nonpayable","type":"function","name":"concludeEpoch"},{"inputs":[{"internalType":"bytes","name":"blsPubkey","type":"bytes"},{"internalType":"struct IStakeManager.ProofOfPossession","name":"proofOfPossession","type":"tuple","components":[{"internalType":"bytes","name":"signature","type":"bytes"}]},{"internalType":"address","name":"validatorAddress","type":"address"},{"internalType":"bytes","name":"validatorEIP712Signature","type":"bytes"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"stateMutability":"payable","type":"function","name":"delegateStake"},{"inputs":[{"internalType":"bytes","name":"blsPubkey","type":"bytes"},{"internalType":"address","name":"validatorAddress","type":"address"},{"internalType":"address","name":"delegator","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"stateMutability":"view","type":"function","name":"delegationDigest","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"eip712Domain","outputs":[{"internalType":"bytes1","name":"fields","type":"bytes1"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"version","type":"string"},{"internalType":"uint256","name":"chainId","type":"uint256"},{"internalType":"address","name":"verifyingContract","type":"address"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"uint256[]","name":"extensions","type":"uint256[]"}]},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"epochInfo","outputs":[{"internalType":"uint256","name":"epochIssuance","type":"uint256"},{"internalType":"uint64","name":"blockHeight","type":"uint64"},{"internalType":"uint32","name":"epochId","type":"uint32"},{"internalType":"uint32","name":"epochDuration","type":"uint32"},{"internalType":"uint8","name":"stakeVersion","type":"uint8"}]},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"futureEpochInfo","outputs":[{"internalType":"uint256","name":"epochIssuance","type":"uint256"},{"internalType":"uint64","name":"blockHeight","type":"uint64"},{"internalType":"uint32","name":"epochId","type":"uint32"},{"internalType":"uint32","name":"epochDuration","type":"uint32"},{"internalType":"uint8","name":"stakeVersion","type":"uint8"}]},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"stateMutability":"view","type":"function","name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address"}],"stateMutability":"view","type":"function","name":"getBalanceBreakdown","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address"}],"stateMutability":"view","type":"function","name":"getBlsPubkey","outputs":[{"internalType":"bytes","name":"","type":"bytes"}]},{"inputs":[{"internalType":"uint32","name":"epoch","type":"uint32"}],"stateMutability":"view","type":"function","name":"getCommitteeBlsPubkeys","outputs":[{"internalType":"bytes[]","name":"","type":"bytes[]"}]},{"inputs":[{"internalType":"uint32","name":"epoch","type":"uint32"}],"stateMutability":"view","type":"function","name":"getCommitteeValidators","outputs":[{"internalType":"struct IConsensusRegistry.ValidatorInfo[]","name":"","type":"tuple[]","components":[{"internalType":"address","name":"validatorAddress","type":"address"},{"internalType":"uint32","name":"activationEpoch","type":"uint32"},{"internalType":"uint32","name":"exitEpoch","type":"uint32"},{"internalType":"enum IConsensusRegistry.ValidatorStatus","name":"currentStatus","type":"uint8"},{"internalType":"bool","name":"isRetired","type":"bool"},{"internalType":"uint8","name":"stakeVersion","type":"uint8"},{"internalType":"uint8","name":"region","type":"uint8"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getCurrentEpoch","outputs":[{"internalType":"uint32","name":"","type":"uint32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getCurrentEpochInfo","outputs":[{"internalType":"struct IConsensusRegistry.EpochInfo","name":"","type":"tuple","components":[{"internalType":"address[]","name":"committee","type":"address[]"},{"internalType":"uint256","name":"epochIssuance","type":"uint256"},{"internalType":"uint64","name":"blockHeight","type":"uint64"},{"internalType":"uint32","name":"epochId","type":"uint32"},{"internalType":"uint32","name":"epochDuration","type":"uint32"},{"internalType":"uint8","name":"stakeVersion","type":"uint8"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getCurrentStakeConfig","outputs":[{"internalType":"struct IStakeManager.StakeConfig","name":"","type":"tuple","components":[{"internalType":"uint256","name":"stakeAmount","type":"uint256"},{"internalType":"uint256","name":"minWithdrawAmount","type":"uint256"},{"internalType":"uint256","name":"epochIssuance","type":"uint256"},{"internalType":"uint32","name":"epochDuration","type":"uint32"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getCurrentStakeVersion","outputs":[{"internalType":"uint8","name":"","type":"uint8"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getEligibleValidatorCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint32","name":"epoch","type":"uint32"}],"stateMutability":"view","type":"function","name":"getEpochInfo","outputs":[{"internalType":"struct IConsensusRegistry.EpochInfo","name":"","type":"tuple","components":[{"internalType":"address[]","name":"committee","type":"address[]"},{"internalType":"uint256","name":"epochIssuance","type":"uint256"},{"internalType":"uint64","name":"blockHeight","type":"uint64"},{"internalType":"uint32","name":"epochId","type":"uint32"},{"internalType":"uint32","name":"epochDuration","type":"uint32"},{"internalType":"uint8","name":"stakeVersion","type":"uint8"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getNextCommitteeSize","outputs":[{"internalType":"uint16","name":"","type":"uint16"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getPendingVersionChanges","outputs":[{"internalType":"address[]","name":"","type":"address[]"}]},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address"}],"stateMutability":"view","type":"function","name":"getRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address"}],"stateMutability":"view","type":"function","name":"getValidator","outputs":[{"internalType":"struct IConsensusRegistry.ValidatorInfo","name":"","type":"tuple","components":[{"internalType":"address","name":"validatorAddress","type":"address"},{"internalType":"uint32","name":"activationEpoch","type":"uint32"},{"internalType":"uint32","name":"exitEpoch","type":"uint32"},{"internalType":"enum IConsensusRegistry.ValidatorStatus","name":"currentStatus","type":"uint8"},{"internalType":"bool","name":"isRetired","type":"bool"},{"internalType":"uint8","name":"stakeVersion","type":"uint8"},{"internalType":"uint8","name":"region","type":"uint8"}]}]},{"inputs":[{"internalType":"enum IConsensusRegistry.ValidatorStatus","name":"status","type":"uint8"}],"stateMutability":"view","type":"function","name":"getValidators","outputs":[{"internalType":"address[]","name":"","type":"address[]"}]},{"inputs":[{"internalType":"enum IConsensusRegistry.ValidatorStatus","name":"status","type":"uint8"}],"stateMutability":"view","type":"function","name":"getValidatorsInfo","outputs":[{"internalType":"struct IConsensusRegistry.ValidatorInfo[]","name":"","type":"tuple[]","components":[{"internalType":"address","name":"validatorAddress","type":"address"},{"internalType":"uint32","name":"activationEpoch","type":"uint32"},{"internalType":"uint32","name":"exitEpoch","type":"uint32"},{"internalType":"enum IConsensusRegistry.ValidatorStatus","name":"currentStatus","type":"uint8"},{"internalType":"bool","name":"isRetired","type":"bool"},{"internalType":"uint8","name":"stakeVersion","type":"uint8"},{"internalType":"uint8","name":"region","type":"uint8"}]}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"increaseNonce"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"stateMutability":"view","type":"function","name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address"}],"stateMutability":"view","type":"function","name":"isDelegated","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address"}],"stateMutability":"view","type":"function","name":"isRetired","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"bytes","name":"blsPubkey","type":"bytes"}],"stateMutability":"view","type":"function","name":"isValidator","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"issuance","outputs":[{"internalType":"address payable","name":"","type":"address"}]},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"issuanceWithdrawal"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"migrateValidatorSets"},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"mint"},{"inputs":[],"stateMutability":"view","type":"function","name":"name","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"stateMutability":"view","type":"function","name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"pause"},{"inputs":[],"stateMutability":"view","type":"function","name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"renounceOwnership"},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address"},{"internalType":"uint8","name":"targetVersion","type":"uint8"}],"stateMutability":"payable","type":"function","name":"requestStakeVersionChange"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"safeTransferFrom"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"safeTransferFrom"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function","name":"setApprovalForAll"},{"inputs":[{"internalType":"uint16","name":"newSize","type":"uint16"}],"stateMutability":"nonpayable","type":"function","name":"setNextCommitteeSize"},{"inputs":[{"internalType":"bool","name":"required","type":"bool"}],"stateMutability":"nonpayable","type":"function","name":"setTopUpAuthorityRequired"},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address"},{"internalType":"uint8","name":"region","type":"uint8"}],"stateMutability":"nonpayable","type":"function","name":"setValidatorRegion"},{"inputs":[{"internalType":"bytes","name":"blsPubkey","type":"bytes"},{"internalType":"struct IStakeManager.ProofOfPossession","name":"proofOfPossession","type":"tuple","components":[{"internalType":"bytes","name":"signature","type":"bytes"}]}],"stateMutability":"payable","type":"function","name":"stake"},{"inputs":[{"internalType":"uint8","name":"version","type":"uint8"}],"stateMutability":"view","type":"function","name":"stakeConfig","outputs":[{"internalType":"struct IStakeManager.StakeConfig","name":"","type":"tuple","components":[{"internalType":"uint256","name":"stakeAmount","type":"uint256"},{"internalType":"uint256","name":"minWithdrawAmount","type":"uint256"},{"internalType":"uint256","name":"epochIssuance","type":"uint256"},{"internalType":"uint32","name":"epochDuration","type":"uint32"}]}]},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"stateMutability":"view","type":"function","name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"stateMutability":"view","type":"function","name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"stateMutability":"view","type":"function","name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"stateMutability":"view","type":"function","name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"topUpAuthorityRequired","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address"}],"stateMutability":"payable","type":"function","name":"topUpSlashedStake"},{"inputs":[],"stateMutability":"view","type":"function","name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"transferFrom"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"transferOwnership"},{"inputs":[],"stateMutability":"view","type":"function","name":"undistributedIssuance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"unpause"},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address"},{"internalType":"bool","name":"acceptRewardShortfall","type":"bool"}],"stateMutability":"nonpayable","type":"function","name":"unstake"},{"inputs":[{"internalType":"struct IStakeManager.StakeConfig","name":"newConfig","type":"tuple","components":[{"internalType":"uint256","name":"stakeAmount","type":"uint256"},{"internalType":"uint256","name":"minWithdrawAmount","type":"uint256"},{"internalType":"uint256","name":"epochIssuance","type":"uint256"},{"internalType":"uint32","name":"epochDuration","type":"uint32"}]}],"stateMutability":"nonpayable","type":"function","name":"upgradeStakeVersion","outputs":[{"internalType":"uint8","name":"","type":"uint8"}]},{"inputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function","name":"validators","outputs":[{"internalType":"address","name":"validatorAddress","type":"address"},{"internalType":"uint32","name":"activationEpoch","type":"uint32"},{"internalType":"uint32","name":"exitEpoch","type":"uint32"},{"internalType":"enum IConsensusRegistry.ValidatorStatus","name":"currentStatus","type":"uint8"},{"internalType":"bool","name":"isRetired","type":"bool"},{"internalType":"uint8","name":"stakeVersion","type":"uint8"},{"internalType":"uint8","name":"region","type":"uint8"}]},{"inputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function","name":"versionChangeRequests","outputs":[{"internalType":"uint8","name":"targetVersion","type":"uint8"},{"internalType":"uint32","name":"requestEpoch","type":"uint32"},{"internalType":"address","name":"funder","type":"address"},{"internalType":"uint256","name":"escrow","type":"uint256"}]}],"devdoc":{"kind":"dev","methods":{"activate()":{"details":"Self-activation function for validators, gaining `PendingActivation` status and setting next epoch as activation epoch to ensure rewards eligibility only after completing a full epoch"},"allocateIssuance()":{"details":"Permissioned function to allocate TEL for epoch issuance, ie consensus block rewards"},"applyIncentives((address,uint256)[])":{"details":"First boundary system call in the closing block: runs before `applySlashes` so weights reflect pre-slash collateral, and before `concludeEpoch` so weights reflect the versions active during the closing epoch. Entries with sentinel addresses (token ids 0 and type(uint160).max) or retired validators are skipped rather than reverting, so a malformed entry cannot stall the boundary. Issuance distribution is not yet enabled during the pilot; the protocol passes an empty array"},"applySlashes((address,uint256)[])":{"details":"Second boundary system call in the closing block: MUST run before `concludeEpoch` so slashes land on the full old-version collateral ahead of the version-queue settlement, and so the protocol's post-slash committee reads see any ejections. Entries with sentinel addresses or retired validators are skipped rather than reverting. Slashing is not yet enabled during the pilot; the protocol passes an empty array"},"balanceOf(address)":{"details":"See {IERC721-balanceOf}."},"beginExit()":{"details":"Issues an exit request for a validator to be retired from the `Active` validator set"},"burn(address)":{"details":"In the case of malicious or erroneous node operator behavior, governance can use this function to burn a validator's `ConsensusNFT` and immediately eject from consensus committees if applicableIntended for sparing use; only reverts if burning results in empty committee","params":{"from":"Refers to the struct member `ValidatorInfo.validatorAddress` in `IConsensusRegistry`"}},"cancelStakeVersionChange(address)":{"details":"Withdraws a pending stake version change without settling it, returning any escrow to its funder","params":{"validatorAddress":"The validator whose pending change should be cancelled"}},"claimRefund()":{"details":"Transfers the caller's accumulated refund credit"},"claimStakeRewards(address)":{"details":"Used by rewardees to claim staking rewards"},"concludeEpoch(address[])":{"details":"The protocol sequences the closing block as `applyIncentives`, then `applySlashes`, then this call. That ordering is a security invariant: it lets the protocol assemble `newCommittee` and read `nextCommitteeSize` after slash-to-zero ejections have landed (so this call's committee checks cannot revert against a stale pre-slash view, and an ejected validator is never seated in a future committee), and it makes the version-queue settlement here read post-slash balances. Settlement refunds accrue as `claimRefund` credits rather than transfers, so this call performs no external calls beyond the trusted Issuance consolidation and its cost is storage-bounded regardless of recipient behavior.","params":{"newCommittee":"The future validator committee for `$.currentEpoch + 3`"}},"constructor":{"details":"Stake for `initialValidators_` is allocated directly to the ConsensusRegistry balance and decremented directly from the TEL precompile within the protocol on the rust sideOnly governance delegation is enabled at genesis","params":{"initialValidators_":"The initial validator set running Telcoin Network; these validators will comprise the voter committee for the first three epochs, ie `epochInfo[0:2]`"}},"delegateStake(bytes,(bytes),address,bytes,uint256)":{"details":"Accepts delegated stake from a non-validator caller authorized by a validator's EIP712 signature","params":{"deadline":"Unix timestamp past which `validatorSig` is rejected (ignored for governance calls)"}},"delegationDigest(bytes,address,address,uint256)":{"params":{"deadline":"Unix timestamp past which the produced signature must be rejected"},"returns":{"_0":"_ EIP-712 typed struct hash used to enable delegated proof of stake"}},"eip712Domain()":{"details":"See: https://eips.ethereum.org/EIPS/eip-5267"},"getApproved(uint256)":{"details":"See {IERC721-getApproved}."},"getBalanceBreakdown(address)":{"details":"Returns staking information for the given address"},"getBlsPubkey(address)":{"details":"Fetches the BLS pubkey for a given validator address"},"getCommitteeBlsPubkeys(uint32)":{"details":"Fetches the BLS pubkeys for the committee of a given epoch"},"getCommitteeValidators(uint32)":{"details":"Fetches the committee for a given epoch"},"getCurrentEpoch()":{"details":"Returns the current epoch"},"getCurrentEpochInfo()":{"details":"Returns the current epoch's committee and block height"},"getCurrentStakeConfig()":{"details":"Returns the latest authored stake configuration, which becomes active at the next epoch start"},"getCurrentStakeVersion()":{"details":"Returns the stake version active for the current epoch, ie the version stamped into the epoch's info at its start"},"getEpochInfo(uint32)":{"details":"Returns information about the provided epoch. Only four latest & two future epochs are stored"},"getRewards(address)":{"details":"Fetches the claimable rewards accrued for a given validator address","returns":{"_0":"_ The validator's claimable rewards, not including the validator's stake"}},"getValidator(address)":{"details":"Fetches the `ValidatorInfo` for a given `validatorAddress == ConsensusNFT tokenId`"},"getValidators(uint8)":{"details":"Returns the addresses of validators in exactly the provided status's set, in the set's current order. Reverts on `Undefined` and `Any` (neither maintains a set)."},"getValidatorsInfo(uint8)":{"details":"Like `getValidators`, but returns the full `ValidatorInfo` for each validator in the set."},"increaseNonce()":{"details":"Caller must hold a ConsensusNFT; lets a validator revoke a delegation it authorized but no longer wants honored"},"isApprovedForAll(address,address)":{"details":"See {IERC721-isApprovedForAll}."},"isDelegated(address)":{"details":"Returns whether a validator's stake was delegated (ie has a delegator)"},"isRetired(address)":{"details":"Returns whether a validator is exited && unstaked, ie \"retired\""},"isValidator(bytes)":{"details":"Check if a BLS public key corresponds to an active validator","params":{"blsPubkey":"The compressed 96-byte BLS public key to check"},"returns":{"_0":"bool True if the validator exists and is not retired, false otherwise"}},"issuanceWithdrawal(uint256)":{"details":"Permissioned function to withdraw TEL from the Issuance contract to the caller","params":{"amount":"The amount of TEL to withdraw from the Issuance contract"}},"migrateValidatorSets()":{"details":"The storage layout is a clean append (the sets were appended after the pre-existing variables), so `validators[*]` and the ConsensusNFTs survive the code swap untouched; only `validatorSets` / `eligibleValidatorCount` start empty and must be rebuilt before the new read paths (`getValidators` / `getValidatorsInfo` / `concludeEpoch`) work. Walks the ConsensusNFT enumeration and re-derives each set from `currentStatus` (the preserved source of truth), mirroring `_setStatus`: retired, `Undefined`, and `Any` validators carry no set and are skipped. Idempotent - set adds dedupe and the count is recomputed from scratch - so a redundant call (or a call against a freshly seeded genesis) is a no-op. System-gated so the protocol invokes it once during the fork that swaps in this implementation."},"mint(address)":{"details":"The StakeManager's ERC721 ledger serves a permissioning role over validators, requiring Telcoin governance to approve each node operator and manually issue them a `ConsensusNFT`","params":{"to":"Refers to the struct member `ValidatorInfo.validatorAddress` in `IConsensusRegistry`"}},"name()":{"details":"See {IERC721Metadata-name}."},"owner()":{"details":"Returns the address of the current owner."},"ownerOf(uint256)":{"details":"See {IERC721-ownerOf}."},"pause()":{"details":"Emergency function to pause validator and stake management"},"paused()":{"details":"Returns true if the contract is paused, and false otherwise."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."},"requestStakeVersionChange(address,uint8)":{"details":"Requests a stake version change for a validator; callable by the validator or its delegator. Only callable for validators with status Staked, PendingActivation, or Active.","params":{"targetVersion":"The version to adopt (must be strictly greater than current and not exceed the latest authored version)","validatorAddress":"The validator whose stake version should change"}},"safeTransferFrom(address,address,uint256)":{"details":"See {IERC721-safeTransferFrom}."},"safeTransferFrom(address,address,uint256,bytes)":{"details":"See {IERC721-safeTransferFrom}."},"setNextCommitteeSize(uint16)":{"details":"This is managed off-chain and read by the protocol to shuffle n-validators for `concludeEpoch` call."},"setTopUpAuthorityRequired(bool)":{"details":"Only callable by governance (owner)"},"setValidatorRegion(address,uint8)":{"params":{"region":"The GSMA region identifier (uint8; 0=unspecified, 1-8=GSMA regions)","validatorAddress":"The address of the validator to update"}},"stake(bytes,(bytes))":{"details":"Accepts the native TEL stake amount from the calling validator, enabling later self-activation"},"stakeConfig(uint8)":{"details":"Returns the queried stake configuration"},"supportsInterface(bytes4)":{"details":"See {IERC165-supportsInterface}."},"symbol()":{"details":"See {IERC721Metadata-symbol}."},"tokenByIndex(uint256)":{"details":"See {IERC721Enumerable-tokenByIndex}."},"tokenOfOwnerByIndex(address,uint256)":{"details":"See {IERC721Enumerable-tokenOfOwnerByIndex}."},"topUpSlashedStake(address)":{"details":"`msg.value` must equal the exact deficit; it is consolidated on the Issuance contract since this contract retains the full stake-backed native TEL when slashes are appliedCallable by governance at any time; by the validator or its delegator only while `topUpAuthorityRequired` is false","params":{"validatorAddress":"The slashed validator to top up; must be `Staked`, `PendingActivation`, or `Active`"}},"totalSupply()":{"details":"See {IERC721Enumerable-totalSupply}."},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."},"unpause()":{"details":"Emergency function to unpause validator and stake management"},"unstake(address,bool)":{"details":"Returns previously staked funds in addition to accrued rewards, if any, to the staker","params":{"acceptRewardShortfall":"When true, caps the rewards payout at the Issuance contract's available balance and permanently forfeits only the shortfall, so an underfunded reward pool can never block a stake withdrawal; identical to a normal unstake whenever Issuance can cover the rewards"}},"upgradeStakeVersion((uint256,uint256,uint256,uint32))":{"details":"Permissioned function to upgrade stake, withdrawal, and consensus block reward configurations"}},"version":1},"userdoc":{"kind":"user","methods":{"activate()":{"notice":"Caller must own a ConsensusNFT and be `Staked` status, ie staked or delegated"},"allocateIssuance()":{"notice":"Allocated TEL leaves the Issuance contract only as staking issuance rewards or through a governance withdrawal via `issuanceWithdrawal`Only governance may allocate TEL in this manner"},"applyIncentives((address,uint256)[])":{"notice":"Distributes the closing epoch's issuance to stake originators, weighted by initial stake and consensus header count"},"applySlashes((address,uint256)[])":{"notice":"Applies the closing epoch's penalties to outstanding balances, ejecting validators slashed to zero"},"approve(address,uint256)":{"notice":"Wouldn't do anything because transfers are disabled but explicitly disallow anyway"},"beginExit()":{"notice":"Reverts if the exit queue is full, ie if active validator count would drop too low"},"cancelStakeVersionChange(address)":{"notice":"Callable by the validator or its delegator"},"claimRefund()":{"notice":"Credits accrue from boundary settlement refunds, escrow returns on retirement, and user-initiated escrow returns whose push failed; they are detached from the validator lifecycle and survive burns and retirement"},"concludeEpoch(address[])":{"notice":"The final epoch-boundary system call: settles queued stake version changes and rotates the epoch, seating the provided future committee"},"delegateStake(bytes,(bytes),address,bytes,uint256)":{"notice":"`validatorAddress` must be a validator already in possession of a `ConsensusNFT`Ensuring `uncompressedPubkey` corresponds to `ValidatorInfo::blsPubkey` is better performed externally in Rust by the protocol due to EIP2537 precompile & EVM limitations so this contract does not perform any (un)compression checks`validatorSig` must come from the authority that owns the validator address itself. For an externally owned account that is its secp256k1 key, whether or not the account has attached an EIP-7702 delegation; a delegated wallet program is not accepted as a stand-in for the key. Only a genuine contract account authorizes through ERC-1271."},"delegationDigest(bytes,address,address,uint256)":{"notice":"Returns the delegation digest that a validator should sign to accept a delegation"},"getBlsPubkey(address)":{"notice":"Reverts with `BlsPubkeyNotFound` if no pubkey is stored for `validatorAddress` (including the zero-address case)"},"getCurrentStakeConfig()":{"notice":"Not necessarily the epoch-active config: during any epoch in which governance has authored a new version, this differs from `stakeConfig(getCurrentStakeVersion())`"},"getCurrentStakeVersion()":{"notice":"Differs from `getCurrentStakeConfig` during any epoch in which governance has authored a new version, since newly authored versions activate at the next epoch start"},"getEligibleValidatorCount()":{"notice":"Number of committee-eligible validators: the unretired `{ PendingActivation, Active, PendingExit }` set. Derived O(1) from the per-status set sizes."},"getEpochInfo(uint32)":{"notice":"For future epochs, the config fields (issuance, duration, stake version) are a projection from the latest authored configuration and can change until the epoch is stamped at its start; `blockHeight` is always 0 as it is not yet known"},"getNextCommitteeSize()":{"notice":"Returns the next committee size"},"getPendingVersionChanges()":{"notice":"Returns the validators with a queued stake version change, in set order"},"getValidators(uint8)":{"notice":"Per-status only: the `Active` query no longer folds in `PendingActivation`/`PendingExit`. The committee-eligible pool is the union of the `{ PendingActivation, Active, PendingExit }` queries; the protocol unions those three calls off-chain. `getEligibleValidatorCount()` returns that union's size on-chain."},"increaseNonce()":{"notice":"Invalidates any outstanding delegation signature for the caller by advancing its nonce"},"isRetired(address)":{"notice":"After retiring, a validator's `tokenId == validatorAddress` cannot be reused"},"issuanceWithdrawal(uint256)":{"notice":"Only governance may withdraw in this manner, eg to recover consolidated slash funds or to reduce a prior issuance allocation"},"migrateValidatorSets()":{"notice":"One-time back-fill of the per-status validator sets, the cached eligible count, and the BLS pubkey reverse index for an in-place upgrade from a deployment that predates them."},"mint(address)":{"notice":"For each mintee, `tokenId == uint160(to)`Access-gated in ConsensusRegistry to its owner, which is a Telcoin governance address"},"pause()":{"notice":"Does not pause system callable or ConsensusNFT fns. Only accessible by `owner`"},"requestStakeVersionChange(address,uint8)":{"notice":"`Staked` validators settle immediately: they are not in service, are never members of a committee, and can already reclaim their full stake at any time via `unstake`.In-service (PendingActivation/Active) validators are queued instead: the change is applied automatically inside `concludeEpoch` at an epoch boundary, after that boundary's slashes have landed, so no request or settlement timing can move value ahead of a slash. Stake increases settle at the first boundary; stake decreases settle only once `STAKE_DECREASE_DELAY_EPOCHS` further boundaries have passed, covering slashes whose detection lags the offense by up to that many epochs.If the new version requires more stake, `msg.value` must equal the exact deficit; it is escrowed in the queue entry (not in the stake balance) until the boundary flip.If the new version requires less stake, no value moves at request time. At settlement the surplus above the new stake amount, computed from the balance as it stands post-slash, is credited to the reward recipient for `claimRefund` withdrawal; the slashed remainder of the surplus is consolidated on Issuance.A repeat request overwrites the pending entry, returning any prior escrow to its funder and re-stamping the request epoch.If a validator has been slashed and has accrued rewards, settling a lower `stakeAmount` may zero claimable rewards since rewards are derived as `balance - stakeAmount`. The recipient still receives the correct total ETH via the refund. Validators should claim rewards before requesting if they have both accrued rewards and pending slashes."},"setApprovalForAll(address,bool)":{"notice":"Wouldn't do anything because transfers are disabled but explicitly disallow anyway"},"setNextCommitteeSize(uint16)":{"notice":"Set the internal value for the nextCommitteeSize.Reverts if the newSize is larger than the number of active/pending validators."},"setTopUpAuthorityRequired(bool)":{"notice":"Toggles whether `topUpSlashedStake` is restricted to the governance top-up authority"},"setValidatorRegion(address,uint8)":{"notice":"Sets the GSMA region identifier for a validator. Only callable by governance (owner)."},"stake(bytes,(bytes))":{"notice":"Caller must already have been issued a `ConsensusNFT` by Telcoin governanceEnsuring `uncompressedPubkey` corresponds to `ValidatorInfo::blsPubkey` is better performed externally in Rust by the protocol due to EIP2537 precompile & EVM limitations so this contract does not perform any (un)compression checks"},"tokenURI(uint256)":{"notice":"Read-only mechanism, not yet live"},"topUpAuthorityRequired()":{"notice":"When true, `topUpSlashedStake` is restricted to governance; when false, validators and their delegators may also restore their own slashed stake"},"topUpSlashedStake(address)":{"notice":"Restores a slashed validator's balance to its version's full stake amount"},"transferFrom(address,address,uint256)":{"notice":"Consensus NFTs are soulbound to validators and cannot be transferred unless burned"},"unpause()":{"notice":"Does not affect system callable or ConsensusNFT fns. Only accessible by `owner`"},"unstake(address,bool)":{"notice":"May be used to reverse validator onboarding pre-activation or permanently retire after full exitOnce unstaked and retired, validator addresses cannot be reused"},"upgradeStakeVersion((uint256,uint256,uint256,uint32))":{"notice":"The new version takes effect in the next epoch"}},"version":1}},"settings":{"remappings":["@ensdomains/=lib/v4-core/node_modules/@ensdomains/","@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/","@uniswap/v4-core/=lib/v4-core/","ds-test/=lib/v4-core/lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/","forge-gas-snapshot/=lib/v4-periphery/lib/permit2/lib/forge-gas-snapshot/src/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/","hardhat/=lib/v4-core/node_modules/hardhat/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/","permit2/=lib/v4-periphery/lib/permit2/","safe-contracts/=lib/safe-contracts/","solady/=lib/solady/src/","solmate/=lib/v4-core/lib/solmate/","v4-core/=lib/v4-core/src/","v4-periphery/=lib/v4-periphery/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"none"},"compilationTarget":{"src/consensus/ConsensusRegistry.sol":"ConsensusRegistry"},"evmVersion":"prague","libraries":{}},"sources":{"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/Ownable.sol":{"keccak256":"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb","urls":["bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6","dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol":{"keccak256":"0x880da465c203cec76b10d72dbd87c80f387df4102274f23eea1f9c9b0918792b","urls":["bzz-raw://399594cd8bb0143bc9e55e0f1d071d0d8c850a394fb7a319d50edd55d9ed822b","dweb:/ipfs/QmbPZzgtT6LEm9CMqWfagQFwETbV1ztpECBB1DtQHrKiRz"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC721/ERC721.sol":{"keccak256":"0x39ed367e54765186281efcfe83e47cf0ad62cc879f10e191360712507125f29a","urls":["bzz-raw://2c5ae6d85bd48cca8d6d2fcec8c63efd86f56f8a5832577a47e403ce0e65cb09","dweb:/ipfs/QmUtcS8AbRSWhuc61puYet58os8FvSqm329ChoW8wwZXZk"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC721/IERC721.sol":{"keccak256":"0x5dc63d1c6a12fe1b17793e1745877b2fcbe1964c3edfd0a482fac21ca8f18261","urls":["bzz-raw://6b7f97c5960a50fd1822cb298551ffc908e37b7893a68d6d08bce18a11cb0f11","dweb:/ipfs/QmQQvxBytoY1eBt3pRQDmvH2hZ2yjhs12YqVfzGm7KSURq"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC721/IERC721Receiver.sol":{"keccak256":"0xb5afb8e8eebc4d1c6404df2f5e1e6d2c3d24fd01e5dfc855314951ecfaae462d","urls":["bzz-raw://78586466c424f076c6a2a551d848cfbe3f7c49e723830807598484a1047b3b34","dweb:/ipfs/Qmb717ovcFxm7qgNKEShiV6M9SPR3v1qnNpAGH84D6w29p"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721Enumerable.sol":{"keccak256":"0x5191f783af281c75b7de0f1e3e36cdc6ac5cb2358d929584c4953fd02fa2b5eb","urls":["bzz-raw://d3ca2689d95ba45e297e55c8f71112e3ccec701d0087cb5e1c6ecb1b9ce86f00","dweb:/ipfs/QmNQ5xKxJpF9k7AahnmJYvg5XeGSYtRig2Lp2WHmWXyBze"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/IERC721Enumerable.sol":{"keccak256":"0x3d6954a93ac198a2ffa384fa58ccf18e7e235263e051a394328002eff4e073de","urls":["bzz-raw://1f58c799bd939d3951c94893e83ef86acd56989d1d7db7f9d180c515e29e28ff","dweb:/ipfs/QmTgAxHAAys4kq9ZfU9YB24MWYoHLGAKSxnYUigPFrNW7g"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/IERC721Metadata.sol":{"keccak256":"0x37d1aaaa5a2908a09e9dcf56a26ddf762ecf295afb5964695937344fc6802ce1","urls":["bzz-raw://ed0bfc1b92153c5000e50f4021367b931bbe96372ac6facec3c4961b72053d02","dweb:/ipfs/Qmbwp8VDerjS5SV1quwHH1oMXxPQ93fzfLVqJ2RCqbowGE"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC721/utils/ERC721Utils.sol":{"keccak256":"0x40399695922383778f9f540a620bec475a2f8e0f08d41f0005682842e28a9855","urls":["bzz-raw://746d295e403931aeb9d6065fd5a0871f43ab5459814a60623611e4b6641a09fd","dweb:/ipfs/QmWrgT8YJrQ9FfD1o3YYArwo57e7MGdpFKuM74qJ4qE34E"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Base64.sol":{"keccak256":"0xbee2b819e1b4bf569ffc1b1b9d560b4abd6a589575f3093edaab9244de18a0c2","urls":["bzz-raw://e478c0e9bbf3eb8cd3b7784f9b397603e34747f9ffd16571ed1d89ce102de389","dweb:/ipfs/QmZ6zXpwy5xRxx9RkodJmDZSUTeEqPQUanAC5TUoYqW2VR"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Context.sol":{"keccak256":"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2","urls":["bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12","dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Panic.sol":{"keccak256":"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a","urls":["bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a","dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Pausable.sol":{"keccak256":"0xb2e5f50762c27fb4b123e3619c3c02bdcba5e515309382e5bfb6f7d6486510bd","urls":["bzz-raw://1a4b83328c98d518a2699c2cbe9e9b055e78aa57fa8639f1b88deb8b3750b5dc","dweb:/ipfs/QmXdcYj5v7zQxXFPULShHkR5p4Wa2zYuupbHnFdV3cHYtc"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/SlotDerivation.sol":{"keccak256":"0x8447b57b63810fe2e367c09496a966f143ec0e825d71ddb9fce2506cff84b618","urls":["bzz-raw://996cb48f793bf151555045b37138e36b3cdb31d6bc6552d3149285260be00cfb","dweb:/ipfs/QmcLaTTMNVbkMx58xhkp6GeFt4V3GtSyupZuaKG3vYW2Zc"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Strings.sol":{"keccak256":"0x44f87e91783e88415bde66f1a63f6c7f0076f2d511548820407d5c95643ac56c","urls":["bzz-raw://13a51bc2b23827744dcf5bad10c69e72528cf015a6fe48c93632cdb2c0eb1251","dweb:/ipfs/QmZwPA47Yqgje1qtkdEFEja8ntTahMStYzKf5q3JRnaR7d"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/TransientSlot.sol":{"keccak256":"0x9303ef5a2beb555e52ce56598de205ce07ca8988fc67d073687c06cb8fc973d1","urls":["bzz-raw://8b2e48fb42844c25e6cb38e7cfa1d91dcdc054613fd10f608833dbc677acf889","dweb:/ipfs/QmT4HQxbgpWA3fZnK4dY3eXHNCoyBvpvzNq5k7eSt5mR5t"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/introspection/ERC165.sol":{"keccak256":"0xddce8e17e3d3f9ed818b4f4c4478a8262aab8b11ed322f1bf5ed705bb4bd97fa","urls":["bzz-raw://8084aa71a4cc7d2980972412a88fe4f114869faea3fefa5436431644eb5c0287","dweb:/ipfs/Qmbqfs5dRdPvHVKY8kTaeyc65NdqXRQwRK7h9s5UJEhD1p"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol":{"keccak256":"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8","urls":["bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621","dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/math/Math.sol":{"keccak256":"0xa00be322d7db5786750ce0ac7e2f5b633ac30a5ed5fa1ced1e74acfc19acecea","urls":["bzz-raw://6c84e822f87cbdc4082533b626667b6928715bb2b1e8e7eb96954cebb9e38c8d","dweb:/ipfs/QmZmy9dgxLTerBAQDuuHqbL6EpgRxddqgv5KmwpXYVbKz1"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol":{"keccak256":"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54","urls":["bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8","dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol":{"keccak256":"0xb1970fac7b64e6c09611e6691791e848d5e3fe410fa5899e7df2e0afd77a99e3","urls":["bzz-raw://db5fbb3dddd8b7047465b62575d96231ba8a2774d37fb4737fbf23340fabbb03","dweb:/ipfs/QmVUSvooZKEdEdap619tcJjTLcAuH6QBdZqAzWwnAXZAWJ"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol":{"keccak256":"0x9b161e97b8967d4bc0c08d25741889a30692cdda4b71910bf1b0e315f1962212","urls":["bzz-raw://821500c39d095eaa25b06f46e65f1d0e97c4c96b39227f79077dee7d9e84051f","dweb:/ipfs/QmSTeGorKzSWF6HAmxo32uCZiEuKNvreQdUiX1AaYtUMTz"],"license":"MIT"},"lib/solady/src/utils/ECDSA.sol":{"keccak256":"0xb0754260daabfe6f20dd16f2213823f27c8df1089b43c8eda9b3c2a6eca07478","urls":["bzz-raw://ffef4ca363ec0e2437b5e195fbb3d58bdc6750921fce32f351ca1c092ad36a75","dweb:/ipfs/QmTcnAyxwvQg3h357PdB8S8oz5bBt85J4SvEgmMqwAfPKF"],"license":"MIT"},"lib/solady/src/utils/EIP712.sol":{"keccak256":"0x53ccaa757944900e7423347c3c35ea5a905580f3f075452b8468a501a9c39839","urls":["bzz-raw://aa5688d98319fbeb5b3c46330a394e15a0f2c862d651415e183da4179b918351","dweb:/ipfs/QmZZFrFWmUCFL1qkZDVm3oqrDkQfumYnnksF6cpPkAHdtJ"],"license":"MIT"},"lib/solady/src/utils/ReentrancyGuard.sol":{"keccak256":"0xdb28f318ec45197a6c7cc2abebed67d7cb8b965838ef962e3844423256a9ddb8","urls":["bzz-raw://873cd46b77a2aeb781e7a0d131e7299151323ed884c330101a51d0727e218d98","dweb:/ipfs/QmddadCjyedztvdSgLZEyKWoRes2SqtpviSjhEbSNrkUoi"],"license":"MIT"},"lib/solady/src/utils/SignatureCheckerLib.sol":{"keccak256":"0x098c7eb88b3048f227b240e0e5bf1da4a8f7622b30f6d7c06416bfcab3225e77","urls":["bzz-raw://50c2766f652916c5d6433665fb1c3b2f04c3d9292a35c12e0f8d7c71dd6438cb","dweb:/ipfs/QmWTMwN2RDZUUPg7KkH1qFBjTSh84Zw8bbYwRBCQUtLN2h"],"license":"MIT"},"src/consensus/ConsensusRegistry.sol":{"keccak256":"0x74061b4b6c439288baa60288a43b2680bed4de1cf35cc1f287b9a06f513af1d6","urls":["bzz-raw://d5413e14ce9729aa4571b69918ce8e1950f890f3785825e2d42b904f98ad6b39","dweb:/ipfs/QmQgJxGgmLS51WrM4gkQFXzkbtzsjzjDkZpZsBwipbhA1Z"],"license":"MIT or Apache-2.0"},"src/consensus/Issuance.sol":{"keccak256":"0xdbb33a3ff5e4afa3c5d107051647db33d86e95cd2686c0207fe8602f99a7d14a","urls":["bzz-raw://082e686f08caf3840b309f72b8e480b4ba3d4b90c42c18fb831c1a4b7ecdd727","dweb:/ipfs/QmT37vqjVGk1RsDc3BJCvVNYcLNuP9hTDK9vvsvykZHohG"],"license":"MIT or Apache-2.0"},"src/consensus/StakeManager.sol":{"keccak256":"0x0b1c34f304f62b9572202a8584f1d3adc320a7be62e13c15faebb8179a5dc745","urls":["bzz-raw://6ec437743fc3d984e80d60921c39a6ba1ddfa661770e3ccd3a49a1521e7c3db0","dweb:/ipfs/QmXsF11j5xNR9WLA27NmdiGj8hrBp6n2MWJQQASkZEHV68"],"license":"MIT or Apache-2.0"},"src/consensus/SystemCallable.sol":{"keccak256":"0xed0e78873f3f574356c3bd6fcaa8f1869415aec576586530f74a599e3c767ead","urls":["bzz-raw://30b23f67de5abff6a021ff3456fa596585c57a6d09562e2a3ef4cb719b673e28","dweb:/ipfs/QmYRrBUKeSSEXBfrsw4arse3c9jCsuw3hHsHpjJeEqHNwS"],"license":"MIT or Apache-2.0"},"src/interfaces/IBlsG1.sol":{"keccak256":"0x950230ff0bed0ae8c0dbef2d22a24fb4114a00c23604619b9dccfd3cbe370ab0","urls":["bzz-raw://27432929c7726f7edb4b62981d0ca6bdb5bbada573a835f787556ff442b64c15","dweb:/ipfs/QmSBLDrPL47intGub7yHRC4JRVSyYSW4dSnQMGFQKK7Z8E"],"license":"MIT"},"src/interfaces/IConsensusRegistry.sol":{"keccak256":"0xd21fdfe6b1f601a70dd9ea80802b6cb92d98a7a751058862544cc1ccf512a6f8","urls":["bzz-raw://993174c548c1d8170e87fa3fe7e33368838492883f053ea17ee765b93ce00255","dweb:/ipfs/QmbdvPt6DhckDw1zp4AznyUqP91hqm5ihyqFUagbJj1Au5"],"license":"MIT or Apache-2.0"},"src/interfaces/IStakeManager.sol":{"keccak256":"0x735cf0dcac8c00ed2a124b4417ec55beb2b914c9c7eab1fd2a95e53abd9104cf","urls":["bzz-raw://69fdfa173369f1a05d35a1853317fcf07ee86cfdf38c232d7742bc02095537e5","dweb:/ipfs/QmWFzQMwbBgkAiahzNp5A4VoqkSh7iU2XuLmbJkwqWpL6M"],"license":"MIT or Apache-2.0"}},"version":1},"id":56} \ No newline at end of file +{"abi":[{"type":"constructor","inputs":[{"name":"genesisConfig_","type":"tuple","internalType":"struct IStakeManager.StakeConfig","components":[{"name":"stakeAmount","type":"uint256","internalType":"uint256"},{"name":"minWithdrawAmount","type":"uint256","internalType":"uint256"},{"name":"epochIssuance","type":"uint256","internalType":"uint256"},{"name":"epochDuration","type":"uint32","internalType":"uint32"}]},{"name":"initialValidators_","type":"tuple[]","internalType":"struct IConsensusRegistry.ValidatorInfo[]","components":[{"name":"validatorAddress","type":"address","internalType":"address"},{"name":"activationEpoch","type":"uint32","internalType":"uint32"},{"name":"exitEpoch","type":"uint32","internalType":"uint32"},{"name":"currentStatus","type":"uint8","internalType":"enum IConsensusRegistry.ValidatorStatus"},{"name":"isRetired","type":"bool","internalType":"bool"},{"name":"stakeVersion","type":"uint8","internalType":"uint8"},{"name":"region","type":"uint8","internalType":"uint8"}]},{"name":"blsPubkeys_","type":"bytes[]","internalType":"bytes[]"},{"name":"proofsOfPossession","type":"tuple[]","internalType":"struct IStakeManager.ProofOfPossession[]","components":[{"name":"signature","type":"bytes","internalType":"bytes"}]},{"name":"owner_","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"function","name":"SYSTEM_ADDRESS","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"activate","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"allocateIssuance","inputs":[],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"applyIncentives","inputs":[{"name":"rewardInfos","type":"tuple[]","internalType":"struct RewardInfo[]","components":[{"name":"validatorAddress","type":"address","internalType":"address"},{"name":"consensusHeaderCount","type":"uint256","internalType":"uint256"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"applySlashes","inputs":[{"name":"slashes","type":"tuple[]","internalType":"struct Slash[]","components":[{"name":"validatorAddress","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"approve","inputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"balanceOf","inputs":[{"name":"owner","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"beginExit","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"burn","inputs":[{"name":"validatorAddress","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"cancelStakeVersionChange","inputs":[{"name":"validatorAddress","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"claimRefund","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"claimStakeRewards","inputs":[{"name":"validatorAddress","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"claimableRefunds","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"claimableRewards","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"concludeEpoch","inputs":[{"name":"newCommittee","type":"address[]","internalType":"address[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"delegateStake","inputs":[{"name":"blsPubkey","type":"bytes","internalType":"bytes"},{"name":"proofOfPossession","type":"tuple","internalType":"struct IStakeManager.ProofOfPossession","components":[{"name":"signature","type":"bytes","internalType":"bytes"}]},{"name":"validatorAddress","type":"address","internalType":"address"},{"name":"validatorEIP712Signature","type":"bytes","internalType":"bytes"},{"name":"deadline","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"delegationDigest","inputs":[{"name":"blsPubkey","type":"bytes","internalType":"bytes"},{"name":"validatorAddress","type":"address","internalType":"address"},{"name":"delegator","type":"address","internalType":"address"},{"name":"deadline","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"eip712Domain","inputs":[],"outputs":[{"name":"fields","type":"bytes1","internalType":"bytes1"},{"name":"name","type":"string","internalType":"string"},{"name":"version","type":"string","internalType":"string"},{"name":"chainId","type":"uint256","internalType":"uint256"},{"name":"verifyingContract","type":"address","internalType":"address"},{"name":"salt","type":"bytes32","internalType":"bytes32"},{"name":"extensions","type":"uint256[]","internalType":"uint256[]"}],"stateMutability":"view"},{"type":"function","name":"epochInfo","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"epochIssuance","type":"uint256","internalType":"uint256"},{"name":"blockHeight","type":"uint64","internalType":"uint64"},{"name":"epochId","type":"uint32","internalType":"uint32"},{"name":"epochDuration","type":"uint32","internalType":"uint32"},{"name":"stakeVersion","type":"uint8","internalType":"uint8"}],"stateMutability":"view"},{"type":"function","name":"futureEpochInfo","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"epochIssuance","type":"uint256","internalType":"uint256"},{"name":"blockHeight","type":"uint64","internalType":"uint64"},{"name":"epochId","type":"uint32","internalType":"uint32"},{"name":"epochDuration","type":"uint32","internalType":"uint32"},{"name":"stakeVersion","type":"uint8","internalType":"uint8"}],"stateMutability":"view"},{"type":"function","name":"getApproved","inputs":[{"name":"tokenId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"getBalanceBreakdown","inputs":[{"name":"validatorAddress","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"},{"name":"","type":"uint256","internalType":"uint256"},{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getBlsPubkey","inputs":[{"name":"validatorAddress","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bytes","internalType":"bytes"}],"stateMutability":"view"},{"type":"function","name":"getCommitteeBlsPubkeys","inputs":[{"name":"epoch","type":"uint32","internalType":"uint32"}],"outputs":[{"name":"","type":"bytes[]","internalType":"bytes[]"}],"stateMutability":"view"},{"type":"function","name":"getCommitteeValidators","inputs":[{"name":"epoch","type":"uint32","internalType":"uint32"}],"outputs":[{"name":"","type":"tuple[]","internalType":"struct IConsensusRegistry.ValidatorInfo[]","components":[{"name":"validatorAddress","type":"address","internalType":"address"},{"name":"activationEpoch","type":"uint32","internalType":"uint32"},{"name":"exitEpoch","type":"uint32","internalType":"uint32"},{"name":"currentStatus","type":"uint8","internalType":"enum IConsensusRegistry.ValidatorStatus"},{"name":"isRetired","type":"bool","internalType":"bool"},{"name":"stakeVersion","type":"uint8","internalType":"uint8"},{"name":"region","type":"uint8","internalType":"uint8"}]}],"stateMutability":"view"},{"type":"function","name":"getCurrentEpoch","inputs":[],"outputs":[{"name":"","type":"uint32","internalType":"uint32"}],"stateMutability":"view"},{"type":"function","name":"getCurrentEpochInfo","inputs":[],"outputs":[{"name":"","type":"tuple","internalType":"struct IConsensusRegistry.EpochInfo","components":[{"name":"committee","type":"address[]","internalType":"address[]"},{"name":"epochIssuance","type":"uint256","internalType":"uint256"},{"name":"blockHeight","type":"uint64","internalType":"uint64"},{"name":"epochId","type":"uint32","internalType":"uint32"},{"name":"epochDuration","type":"uint32","internalType":"uint32"},{"name":"stakeVersion","type":"uint8","internalType":"uint8"}]}],"stateMutability":"view"},{"type":"function","name":"getCurrentStakeConfig","inputs":[],"outputs":[{"name":"","type":"tuple","internalType":"struct IStakeManager.StakeConfig","components":[{"name":"stakeAmount","type":"uint256","internalType":"uint256"},{"name":"minWithdrawAmount","type":"uint256","internalType":"uint256"},{"name":"epochIssuance","type":"uint256","internalType":"uint256"},{"name":"epochDuration","type":"uint32","internalType":"uint32"}]}],"stateMutability":"view"},{"type":"function","name":"getCurrentStakeVersion","inputs":[],"outputs":[{"name":"","type":"uint8","internalType":"uint8"}],"stateMutability":"view"},{"type":"function","name":"getEligibleValidatorCount","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getEpochInfo","inputs":[{"name":"epoch","type":"uint32","internalType":"uint32"}],"outputs":[{"name":"","type":"tuple","internalType":"struct IConsensusRegistry.EpochInfo","components":[{"name":"committee","type":"address[]","internalType":"address[]"},{"name":"epochIssuance","type":"uint256","internalType":"uint256"},{"name":"blockHeight","type":"uint64","internalType":"uint64"},{"name":"epochId","type":"uint32","internalType":"uint32"},{"name":"epochDuration","type":"uint32","internalType":"uint32"},{"name":"stakeVersion","type":"uint8","internalType":"uint8"}]}],"stateMutability":"view"},{"type":"function","name":"getNextCommitteeSize","inputs":[],"outputs":[{"name":"","type":"uint16","internalType":"uint16"}],"stateMutability":"view"},{"type":"function","name":"getPendingVersionChanges","inputs":[],"outputs":[{"name":"","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"getRewards","inputs":[{"name":"validatorAddress","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getValidator","inputs":[{"name":"validatorAddress","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"tuple","internalType":"struct IConsensusRegistry.ValidatorInfo","components":[{"name":"validatorAddress","type":"address","internalType":"address"},{"name":"activationEpoch","type":"uint32","internalType":"uint32"},{"name":"exitEpoch","type":"uint32","internalType":"uint32"},{"name":"currentStatus","type":"uint8","internalType":"enum IConsensusRegistry.ValidatorStatus"},{"name":"isRetired","type":"bool","internalType":"bool"},{"name":"stakeVersion","type":"uint8","internalType":"uint8"},{"name":"region","type":"uint8","internalType":"uint8"}]}],"stateMutability":"view"},{"type":"function","name":"getValidators","inputs":[{"name":"status","type":"uint8","internalType":"enum IConsensusRegistry.ValidatorStatus"}],"outputs":[{"name":"","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"getValidatorsInfo","inputs":[{"name":"status","type":"uint8","internalType":"enum IConsensusRegistry.ValidatorStatus"}],"outputs":[{"name":"","type":"tuple[]","internalType":"struct IConsensusRegistry.ValidatorInfo[]","components":[{"name":"validatorAddress","type":"address","internalType":"address"},{"name":"activationEpoch","type":"uint32","internalType":"uint32"},{"name":"exitEpoch","type":"uint32","internalType":"uint32"},{"name":"currentStatus","type":"uint8","internalType":"enum IConsensusRegistry.ValidatorStatus"},{"name":"isRetired","type":"bool","internalType":"bool"},{"name":"stakeVersion","type":"uint8","internalType":"uint8"},{"name":"region","type":"uint8","internalType":"uint8"}]}],"stateMutability":"view"},{"type":"function","name":"increaseNonce","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"isApprovedForAll","inputs":[{"name":"owner","type":"address","internalType":"address"},{"name":"operator","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isDelegated","inputs":[{"name":"validatorAddress","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isRetired","inputs":[{"name":"validatorAddress","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isValidator","inputs":[{"name":"blsPubkey","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"issuance","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address payable"}],"stateMutability":"view"},{"type":"function","name":"issuanceWithdrawal","inputs":[{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"migrateValidatorSets","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"mint","inputs":[{"name":"validatorAddress","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"name","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"ownerOf","inputs":[{"name":"tokenId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"pause","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"paused","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"renounceOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"requestStakeVersionChange","inputs":[{"name":"validatorAddress","type":"address","internalType":"address"},{"name":"targetVersion","type":"uint8","internalType":"uint8"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"safeTransferFrom","inputs":[{"name":"from","type":"address","internalType":"address"},{"name":"to","type":"address","internalType":"address"},{"name":"tokenId","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"safeTransferFrom","inputs":[{"name":"from","type":"address","internalType":"address"},{"name":"to","type":"address","internalType":"address"},{"name":"tokenId","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setApprovalForAll","inputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setNextCommitteeSize","inputs":[{"name":"newSize","type":"uint16","internalType":"uint16"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setTopUpAuthorityRequired","inputs":[{"name":"required","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setValidatorRegion","inputs":[{"name":"validatorAddress","type":"address","internalType":"address"},{"name":"region","type":"uint8","internalType":"uint8"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"stake","inputs":[{"name":"blsPubkey","type":"bytes","internalType":"bytes"},{"name":"proofOfPossession","type":"tuple","internalType":"struct IStakeManager.ProofOfPossession","components":[{"name":"signature","type":"bytes","internalType":"bytes"}]}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"stakeConfig","inputs":[{"name":"version","type":"uint8","internalType":"uint8"}],"outputs":[{"name":"","type":"tuple","internalType":"struct IStakeManager.StakeConfig","components":[{"name":"stakeAmount","type":"uint256","internalType":"uint256"},{"name":"minWithdrawAmount","type":"uint256","internalType":"uint256"},{"name":"epochIssuance","type":"uint256","internalType":"uint256"},{"name":"epochDuration","type":"uint32","internalType":"uint32"}]}],"stateMutability":"view"},{"type":"function","name":"supportsInterface","inputs":[{"name":"interfaceId","type":"bytes4","internalType":"bytes4"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"symbol","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"tokenByIndex","inputs":[{"name":"index","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"tokenOfOwnerByIndex","inputs":[{"name":"owner","type":"address","internalType":"address"},{"name":"index","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"tokenURI","inputs":[{"name":"tokenId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"topUpAuthorityRequired","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"topUpSlashedStake","inputs":[{"name":"validatorAddress","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"totalSupply","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"transferFrom","inputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"address","internalType":"address"},{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"undistributedIssuance","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"unpause","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"unstake","inputs":[{"name":"validatorAddress","type":"address","internalType":"address"},{"name":"acceptRewardShortfall","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"upgradeStakeVersion","inputs":[{"name":"newConfig","type":"tuple","internalType":"struct IStakeManager.StakeConfig","components":[{"name":"stakeAmount","type":"uint256","internalType":"uint256"},{"name":"minWithdrawAmount","type":"uint256","internalType":"uint256"},{"name":"epochIssuance","type":"uint256","internalType":"uint256"},{"name":"epochDuration","type":"uint32","internalType":"uint32"}]}],"outputs":[{"name":"","type":"uint8","internalType":"uint8"}],"stateMutability":"nonpayable"},{"type":"function","name":"validators","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"validatorAddress","type":"address","internalType":"address"},{"name":"activationEpoch","type":"uint32","internalType":"uint32"},{"name":"exitEpoch","type":"uint32","internalType":"uint32"},{"name":"currentStatus","type":"uint8","internalType":"enum IConsensusRegistry.ValidatorStatus"},{"name":"isRetired","type":"bool","internalType":"bool"},{"name":"stakeVersion","type":"uint8","internalType":"uint8"},{"name":"region","type":"uint8","internalType":"uint8"}],"stateMutability":"view"},{"type":"function","name":"versionChangeRequests","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"targetVersion","type":"uint8","internalType":"uint8"},{"name":"requestEpoch","type":"uint32","internalType":"uint32"},{"name":"funder","type":"address","internalType":"address"},{"name":"escrow","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"event","name":"Approval","inputs":[{"name":"owner","type":"address","indexed":true,"internalType":"address"},{"name":"approved","type":"address","indexed":true,"internalType":"address"},{"name":"tokenId","type":"uint256","indexed":true,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"ApprovalForAll","inputs":[{"name":"owner","type":"address","indexed":true,"internalType":"address"},{"name":"operator","type":"address","indexed":true,"internalType":"address"},{"name":"approved","type":"bool","indexed":false,"internalType":"bool"}],"anonymous":false},{"type":"event","name":"DelegationNonceIncreased","inputs":[{"name":"validatorAddress","type":"address","indexed":true,"internalType":"address"},{"name":"nonce","type":"uint64","indexed":false,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"NewEpoch","inputs":[{"name":"epoch","type":"tuple","indexed":false,"internalType":"struct IConsensusRegistry.EpochInfo","components":[{"name":"committee","type":"address[]","internalType":"address[]"},{"name":"epochIssuance","type":"uint256","internalType":"uint256"},{"name":"blockHeight","type":"uint64","internalType":"uint64"},{"name":"epochId","type":"uint32","internalType":"uint32"},{"name":"epochDuration","type":"uint32","internalType":"uint32"},{"name":"stakeVersion","type":"uint8","internalType":"uint8"}]}],"anonymous":false},{"type":"event","name":"NextCommitteeSizeUpdated","inputs":[{"name":"oldSize","type":"uint16","indexed":false,"internalType":"uint16"},{"name":"newSize","type":"uint16","indexed":false,"internalType":"uint16"},{"name":"numActiveValidators","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"Paused","inputs":[{"name":"account","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"RefundClaimed","inputs":[{"name":"recipient","type":"address","indexed":true,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"RefundQueued","inputs":[{"name":"recipient","type":"address","indexed":true,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"RewardsClaimed","inputs":[{"name":"claimant","type":"address","indexed":true,"internalType":"address"},{"name":"rewards","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"StakeVersionAuthored","inputs":[{"name":"version","type":"uint8","indexed":true,"internalType":"uint8"},{"name":"stakeAmount","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"minWithdrawAmount","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"epochIssuance","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"epochDuration","type":"uint32","indexed":false,"internalType":"uint32"}],"anonymous":false},{"type":"event","name":"StakeVersionChangeCanceled","inputs":[{"name":"validatorAddress","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"StakeVersionChangeRequested","inputs":[{"name":"validatorAddress","type":"address","indexed":true,"internalType":"address"},{"name":"targetVersion","type":"uint8","indexed":false,"internalType":"uint8"},{"name":"requestEpoch","type":"uint32","indexed":false,"internalType":"uint32"},{"name":"escrow","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"TopUpAuthorityRequirementUpdated","inputs":[{"name":"required","type":"bool","indexed":false,"internalType":"bool"}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"name":"from","type":"address","indexed":true,"internalType":"address"},{"name":"to","type":"address","indexed":true,"internalType":"address"},{"name":"tokenId","type":"uint256","indexed":true,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Unpaused","inputs":[{"name":"account","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"ValidatorActivated","inputs":[{"name":"validator","type":"tuple","indexed":false,"internalType":"struct IConsensusRegistry.ValidatorInfo","components":[{"name":"validatorAddress","type":"address","internalType":"address"},{"name":"activationEpoch","type":"uint32","internalType":"uint32"},{"name":"exitEpoch","type":"uint32","internalType":"uint32"},{"name":"currentStatus","type":"uint8","internalType":"enum IConsensusRegistry.ValidatorStatus"},{"name":"isRetired","type":"bool","internalType":"bool"},{"name":"stakeVersion","type":"uint8","internalType":"uint8"},{"name":"region","type":"uint8","internalType":"uint8"}]}],"anonymous":false},{"type":"event","name":"ValidatorExited","inputs":[{"name":"validator","type":"tuple","indexed":false,"internalType":"struct IConsensusRegistry.ValidatorInfo","components":[{"name":"validatorAddress","type":"address","internalType":"address"},{"name":"activationEpoch","type":"uint32","internalType":"uint32"},{"name":"exitEpoch","type":"uint32","internalType":"uint32"},{"name":"currentStatus","type":"uint8","internalType":"enum IConsensusRegistry.ValidatorStatus"},{"name":"isRetired","type":"bool","internalType":"bool"},{"name":"stakeVersion","type":"uint8","internalType":"uint8"},{"name":"region","type":"uint8","internalType":"uint8"}]}],"anonymous":false},{"type":"event","name":"ValidatorPendingActivation","inputs":[{"name":"validator","type":"tuple","indexed":false,"internalType":"struct IConsensusRegistry.ValidatorInfo","components":[{"name":"validatorAddress","type":"address","internalType":"address"},{"name":"activationEpoch","type":"uint32","internalType":"uint32"},{"name":"exitEpoch","type":"uint32","internalType":"uint32"},{"name":"currentStatus","type":"uint8","internalType":"enum IConsensusRegistry.ValidatorStatus"},{"name":"isRetired","type":"bool","internalType":"bool"},{"name":"stakeVersion","type":"uint8","internalType":"uint8"},{"name":"region","type":"uint8","internalType":"uint8"}]}],"anonymous":false},{"type":"event","name":"ValidatorPendingExit","inputs":[{"name":"validator","type":"tuple","indexed":false,"internalType":"struct IConsensusRegistry.ValidatorInfo","components":[{"name":"validatorAddress","type":"address","internalType":"address"},{"name":"activationEpoch","type":"uint32","internalType":"uint32"},{"name":"exitEpoch","type":"uint32","internalType":"uint32"},{"name":"currentStatus","type":"uint8","internalType":"enum IConsensusRegistry.ValidatorStatus"},{"name":"isRetired","type":"bool","internalType":"bool"},{"name":"stakeVersion","type":"uint8","internalType":"uint8"},{"name":"region","type":"uint8","internalType":"uint8"}]}],"anonymous":false},{"type":"event","name":"ValidatorRegionUpdated","inputs":[{"name":"validatorAddress","type":"address","indexed":true,"internalType":"address"},{"name":"region","type":"uint8","indexed":false,"internalType":"uint8"}],"anonymous":false},{"type":"event","name":"ValidatorRetired","inputs":[{"name":"validator","type":"tuple","indexed":false,"internalType":"struct IConsensusRegistry.ValidatorInfo","components":[{"name":"validatorAddress","type":"address","internalType":"address"},{"name":"activationEpoch","type":"uint32","internalType":"uint32"},{"name":"exitEpoch","type":"uint32","internalType":"uint32"},{"name":"currentStatus","type":"uint8","internalType":"enum IConsensusRegistry.ValidatorStatus"},{"name":"isRetired","type":"bool","internalType":"bool"},{"name":"stakeVersion","type":"uint8","internalType":"uint8"},{"name":"region","type":"uint8","internalType":"uint8"}]}],"anonymous":false},{"type":"event","name":"ValidatorSetsMigrated","inputs":[{"name":"eligibleValidatorCount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"ValidatorSlashed","inputs":[{"name":"slash","type":"tuple","indexed":false,"internalType":"struct Slash","components":[{"name":"validatorAddress","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"}]}],"anonymous":false},{"type":"event","name":"ValidatorStakeToppedUp","inputs":[{"name":"validatorAddress","type":"address","indexed":true,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"ValidatorStakeVersionUpgraded","inputs":[{"name":"validatorAddress","type":"address","indexed":true,"internalType":"address"},{"name":"oldVersion","type":"uint8","indexed":false,"internalType":"uint8"},{"name":"newVersion","type":"uint8","indexed":false,"internalType":"uint8"},{"name":"oldStakeAmount","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"newStakeAmount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"ValidatorStaked","inputs":[{"name":"validator","type":"tuple","indexed":false,"internalType":"struct IConsensusRegistry.ValidatorInfo","components":[{"name":"validatorAddress","type":"address","internalType":"address"},{"name":"activationEpoch","type":"uint32","internalType":"uint32"},{"name":"exitEpoch","type":"uint32","internalType":"uint32"},{"name":"currentStatus","type":"uint8","internalType":"enum IConsensusRegistry.ValidatorStatus"},{"name":"isRetired","type":"bool","internalType":"bool"},{"name":"stakeVersion","type":"uint8","internalType":"uint8"},{"name":"region","type":"uint8","internalType":"uint8"}]}],"anonymous":false},{"type":"error","name":"AlreadyDefined","inputs":[{"name":"validatorAddress","type":"address","internalType":"address"}]},{"type":"error","name":"BlsPubkeyNotFound","inputs":[{"name":"validatorAddress","type":"address","internalType":"address"}]},{"type":"error","name":"CommitteeRequirement","inputs":[{"name":"validatorAddress","type":"address","internalType":"address"}]},{"type":"error","name":"DelegationExpired","inputs":[{"name":"deadline","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"DuplicateBLSPubkey","inputs":[]},{"type":"error","name":"ERC721EnumerableForbiddenBatchMint","inputs":[]},{"type":"error","name":"ERC721IncorrectOwner","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"tokenId","type":"uint256","internalType":"uint256"},{"name":"owner","type":"address","internalType":"address"}]},{"type":"error","name":"ERC721InsufficientApproval","inputs":[{"name":"operator","type":"address","internalType":"address"},{"name":"tokenId","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ERC721InvalidApprover","inputs":[{"name":"approver","type":"address","internalType":"address"}]},{"type":"error","name":"ERC721InvalidOperator","inputs":[{"name":"operator","type":"address","internalType":"address"}]},{"type":"error","name":"ERC721InvalidOwner","inputs":[{"name":"owner","type":"address","internalType":"address"}]},{"type":"error","name":"ERC721InvalidReceiver","inputs":[{"name":"receiver","type":"address","internalType":"address"}]},{"type":"error","name":"ERC721InvalidSender","inputs":[{"name":"sender","type":"address","internalType":"address"}]},{"type":"error","name":"ERC721NonexistentToken","inputs":[{"name":"tokenId","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ERC721OutOfBoundsIndex","inputs":[{"name":"owner","type":"address","internalType":"address"},{"name":"index","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"EnforcedPause","inputs":[]},{"type":"error","name":"ExpectedPause","inputs":[]},{"type":"error","name":"GenesisArityMismatch","inputs":[]},{"type":"error","name":"IneligibleUnstake","inputs":[{"name":"validator","type":"tuple","internalType":"struct IConsensusRegistry.ValidatorInfo","components":[{"name":"validatorAddress","type":"address","internalType":"address"},{"name":"activationEpoch","type":"uint32","internalType":"uint32"},{"name":"exitEpoch","type":"uint32","internalType":"uint32"},{"name":"currentStatus","type":"uint8","internalType":"enum IConsensusRegistry.ValidatorStatus"},{"name":"isRetired","type":"bool","internalType":"bool"},{"name":"stakeVersion","type":"uint8","internalType":"uint8"},{"name":"region","type":"uint8","internalType":"uint8"}]}]},{"type":"error","name":"InsufficientBalance","inputs":[{"name":"available","type":"uint256","internalType":"uint256"},{"name":"required","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InsufficientRewards","inputs":[{"name":"withdrawAmount","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidBLSPubkey","inputs":[]},{"type":"error","name":"InvalidCommitteeSize","inputs":[{"name":"minCommitteeSize","type":"uint256","internalType":"uint256"},{"name":"providedCommitteeSize","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidDeficitAmount","inputs":[{"name":"validatorAddress","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"stakeVersion","type":"uint8","internalType":"uint8"}]},{"type":"error","name":"InvalidDuration","inputs":[{"name":"duration","type":"uint32","internalType":"uint32"}]},{"type":"error","name":"InvalidEpoch","inputs":[{"name":"epoch","type":"uint32","internalType":"uint32"}]},{"type":"error","name":"InvalidProofOfPossession","inputs":[{"name":"proof","type":"tuple","internalType":"struct IStakeManager.ProofOfPossession","components":[{"name":"signature","type":"bytes","internalType":"bytes"}]}]},{"type":"error","name":"InvalidStakeAmount","inputs":[{"name":"stakeAmount","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidStakeVersion","inputs":[{"name":"currentVersion","type":"uint8","internalType":"uint8"},{"name":"targetVersion","type":"uint8","internalType":"uint8"}]},{"type":"error","name":"InvalidStatus","inputs":[{"name":"status","type":"uint8","internalType":"enum IConsensusRegistry.ValidatorStatus"}]},{"type":"error","name":"InvalidSupply","inputs":[]},{"type":"error","name":"InvalidTokenId","inputs":[{"name":"tokenId","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidValidatorAddress","inputs":[]},{"type":"error","name":"IssuanceTransferFailed","inputs":[]},{"type":"error","name":"LowLevelCallFailure","inputs":[{"name":"err","type":"bytes","internalType":"bytes"}]},{"type":"error","name":"NoClaimableRefund","inputs":[]},{"type":"error","name":"NoPendingVersionChange","inputs":[]},{"type":"error","name":"NotRecipient","inputs":[{"name":"recipient","type":"address","internalType":"address"}]},{"type":"error","name":"NotTransferable","inputs":[]},{"type":"error","name":"NotValidator","inputs":[{"name":"validatorAddress","type":"address","internalType":"address"}]},{"type":"error","name":"OnlySystemCall","inputs":[{"name":"invalidCaller","type":"address","internalType":"address"}]},{"type":"error","name":"OwnableInvalidOwner","inputs":[{"name":"owner","type":"address","internalType":"address"}]},{"type":"error","name":"OwnableUnauthorizedAccount","inputs":[{"name":"account","type":"address","internalType":"address"}]},{"type":"error","name":"Reentrancy","inputs":[]},{"type":"error","name":"RequiresConsensusNFT","inputs":[]},{"type":"error","name":"StakeNotSlashed","inputs":[{"name":"validatorAddress","type":"address","internalType":"address"},{"name":"balance","type":"uint256","internalType":"uint256"},{"name":"stakeVersion","type":"uint8","internalType":"uint8"}]},{"type":"error","name":"StringsInsufficientHexLength","inputs":[{"name":"value","type":"uint256","internalType":"uint256"},{"name":"length","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"TopUpAuthorityRequired","inputs":[]}],"bytecode":{"object":"0x610120604052348015610010575f5ffd5b5060405161a3ac38038061a3ac83398101604081905261002f91611558565b806040518060400160405280600c81526020016b10dbdb9cd95b9cdd5cd3919560a21b8152506040518060400160405280600481526020016310d3919560e21b8152508181815f908161008291906116cf565b50600161008f82826116cf565b505030608052504660a0526060806100ef604080518082018252601481527f54656c636f696e205374616b654d616e61676572000000000000000000000000602080830191909152825180840190935260018352603160f81b9083015291565b815160209283012081519183019190912060c082905260e0819052604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8152938401929092529082015246606082015230608082015260a09020610100525050600d805461ff001916905550506001600160a01b03811661018d57604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b61019681610847565b50835115806101a757508251845114155b806101b457508151845114155b156101d257604051633aa3e03360e01b815260040160405180910390fd5b846060015163ffffffff165f0361020a576060850151604051630c6e911360e41b815263ffffffff9091166004820152602401610184565b5f808052600a602090815286517f13da86008ba1c6922daee3e07db95305ef49ebced9f5467a0b8613fcc6b343e3558601517f13da86008ba1c6922daee3e07db95305ef49ebced9f5467a0b8613fcc6b343e45560408601517f13da86008ba1c6922daee3e07db95305ef49ebced9f5467a0b8613fcc6b343e55560608601517f13da86008ba1c6922daee3e07db95305ef49ebced9f5467a0b8613fcc6b343e6805463ffffffff191663ffffffff9092169190911790558451600d805461ffff60d81b1916600160d81b61ffff909316929092029190911790555b600281116103b1575f601182600481106103025761030261178d565b6003020160028101805460608a0151600160401b600160801b03199091166801000000000000000063ffffffff8781169190910263ffffffff60601b1916919091176c01000000000000000000000000919092160217905560408801516001820155905081601d816004811061037a5761037a61178d565b6003020160020160086101000a81548163ffffffff021916908363ffffffff16021790555050806103aa906117b5565b90506102e6565b505f5b8451811015610837575f8582815181106103d0576103d061178d565b602002602001015190505f6104218584815181106103f0576103f061178d565b6020026020010151835f015188868151811061040e5761040e61178d565b60200260200101516108a260201b60201c565b82519091506001600160a01b03161580610445575081516001600160a01b03908116145b156104635760405163713ce51160e01b815260040160405180910390fd5b602082015163ffffffff161561049a576020820151604051634fadd4d360e11b815263ffffffff9091166004820152602401610184565b604082015163ffffffff16156104d1576040808301519051634fadd4d360e11b815263ffffffff9091166004820152602401610184565b6003826060015160068111156104e9576104e96117cd565b1461050d578160600151604051633ba7bf8960e11b81526004016101849190611801565b608082015115610533576005604051633ba7bf8960e11b81526004016101849190611801565b60a082015160ff16156105645760a082015160405163222d164360e21b815260ff9091166004820152602401610184565b5f5b6002811161061a57601181600481106105815761058161178d565b84516003919091029190910180546001810182555f91825260209091200180546001600160a01b0319166001600160a01b03909216919091179055601d81600481106105cf576105cf61178d565b84516003919091029190910180546001810182555f91825260209091200180546001600160a01b0319166001600160a01b03909216919091179055610613816117b5565b9050610566565b5085838151811061062d5761062d61178d565b60209081029190910181015183516001600160a01b03165f908152602990925260409091209061065d90826116cf565b5081516001600160a01b039081165f908152600f602090815260409182902085518154928701519387015163ffffffff908116600160c01b0263ffffffff60c01b1991909516600160a01b026001600160c01b0319909416919095161791909117928316821781556060850151859391929091839160ff60e01b191664ffffffffff60c01b1990911617600160e01b8360068111156106fe576106fe6117cd565b02179055506080820151815460a084015160c09094015160ff908116600160f81b026001600160f81b0391909516600160f01b0260ff60f01b19931515600160e81b029390931661ffff60e81b19909216919091179190911716919091179055815160035f52602a602052610794907f4adfa5efd78af8432c8ff812ed4c3d89e016f048361846e090e1a7c770f3157690610a3e565b50875182516001600160a01b039081165f908152600b60209081526040808320949094558551858352601090915292902080546001600160a01b0319169290911691909117905581516107f6906107f1816001600160a01b031690565b610a5b565b7fabab4191fe954f07230f7e34fd48dc0fdcbed492526cd060001cccceab22851b82604051610825919061180f565b60405180910390a150506001016103b4565b50509151602b55506119bf915050565b600d80546001600160a01b038381166201000081810262010000600160b01b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f81516060146108c5576040516333a234f960e11b815260040160405180910390fd5b5f825f815181106108d8576108d861178d565b016020015160f81c90506080811615806108f457506040811615155b15610912576040516333a234f960e11b815260040160405180910390fd5b5f61091d8486610ac1565b86516040519192505f91829161b1519163a65ebb2560e01b91610946918a9088906024016118b7565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516109849190611910565b5f60405180830381855afa9150503d805f81146109bc576040519150601f19603f3d011682016040523d82523d5f602084013e6109c1565b606091505b50915091508115806109d557508051602014155b156109f557806040516306fe67db60e31b8152600401610184919061191b565b80806020019051810190610a09919061192d565b610a28578760405163a865bb3560e01b81526004016101849190611946565b610a328688610b11565b98975050505050505050565b5f610a52836001600160a01b038416610b9d565b90505b92915050565b6001600160a01b038216610a8457604051633250574960e11b81525f6004820152602401610184565b5f610a90838383610be9565b90506001600160a01b03811615610abc576040516339e3563760e11b81525f6004820152602401610184565b505050565b60608251606014610ae5576040516333a234f960e11b815260040160405180910390fd5b604051610afa905f9085908590602001611960565b604051602081830303815290604052905092915050565b604080516020848101516001600160fd1b031682528483015181830152606080860151838501529091205f8181526010909252919020546001600160a01b031615610b6f57604051638d12779f60e01b815260040160405180910390fd5b5f81815260106020526040902080546001600160a01b0384166001600160a01b031990911617905592915050565b5f818152600183016020526040812054610be257508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610a55565b505f610a55565b5f80610bf6858585610cbc565b90506001600160a01b038116610c5257610c4d84600880545f838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b610c75565b846001600160a01b0316816001600160a01b031614610c7557610c758185610dae565b6001600160a01b038516610c9157610c8c84610e2b565b610cb4565b846001600160a01b0316816001600160a01b031614610cb457610cb48585610ed2565b949350505050565b5f828152600260205260408120546001600160a01b0390811690831615610ce857610ce8818486610f20565b6001600160a01b03811615610d2257610d035f858180610f84565b6001600160a01b0381165f90815260036020526040902080545f190190555b6001600160a01b03851615610d50576001600160a01b0385165f908152600360205260409020805460010190555b5f8481526002602052604080822080546001600160a01b0319166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b5f610db8836110a6565b5f838152600760209081526040808320546001600160a01b0388168452600690925290912091925090818314610e0d575f83815260208281526040808320548584528184208190558352600790915290208290555b5f938452600760209081526040808620869055938552525081205550565b6008545f90610e3c90600190611998565b5f8381526009602052604081205460088054939450909284908110610e6357610e6361178d565b905f5260205f20015490508060088381548110610e8257610e8261178d565b5f918252602080832090910192909255828152600990915260408082208490558582528120556008805480610eb957610eb96119ab565b600190038181905f5260205f20015f9055905550505050565b5f6001610ede846110a6565b610ee89190611998565b6001600160a01b039093165f908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b610f2b8383836110eb565b610abc576001600160a01b038316610f5957604051637e27328960e01b815260048101829052602401610184565b60405163177e802f60e01b81526001600160a01b038316600482015260248101829052604401610184565b8080610f9857506001600160a01b03821615155b15611077575f610fa78461116b565b90506001600160a01b03831615801590610fd35750826001600160a01b0316816001600160a01b031614155b801561100457506001600160a01b038082165f9081526005602090815260408083209387168352929052205460ff16155b1561102d5760405163a9fbf51f60e01b81526001600160a01b0384166004820152602401610184565b81156110755783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b50505f90815260046020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b5f6001600160a01b0382166110d0576040516322718ad960e21b81525f6004820152602401610184565b506001600160a01b03165f9081526003602052604090205490565b5f6001600160a01b03831615801590610cb45750826001600160a01b0316846001600160a01b0316148061114357506001600160a01b038085165f9081526005602090815260408083209387168352929052205460ff165b80610cb45750505f908152600460205260409020546001600160a01b03908116911614919050565b5f818152600260205260408120546001600160a01b031680610a5557604051637e27328960e01b815260048101849052602401610184565b634e487b7160e01b5f52604160045260245ffd5b60405160e081016001600160401b03811182821017156111d9576111d96111a3565b60405290565b604051602081016001600160401b03811182821017156111d9576111d96111a3565b604051608081016001600160401b03811182821017156111d9576111d96111a3565b604051601f8201601f191681016001600160401b038111828210171561124b5761124b6111a3565b604052919050565b805163ffffffff81168114611266575f5ffd5b919050565b5f6001600160401b03821115611283576112836111a3565b5060051b60200190565b80516001600160a01b0381168114611266575f5ffd5b80518015158114611266575f5ffd5b805160ff81168114611266575f5ffd5b5f82601f8301126112d1575f5ffd5b81516112e46112df8261126b565b611223565b80828252602082019150602060e08402860101925085831115611305575f5ffd5b602085015b838110156113af5760e08188031215611321575f5ffd5b6113296111b7565b6113328261128d565b815261134060208301611253565b602082015261135160408301611253565b6040820152606082015160078110611367575f5ffd5b6060820152611378608083016112a3565b608082015261138960a083016112b2565b60a082015261139a60c083016112b2565b60c0820152835260209092019160e00161130a565b5095945050505050565b5f82601f8301126113c8575f5ffd5b81516001600160401b038111156113e1576113e16111a3565b6113f4601f8201601f1916602001611223565b818152846020838601011115611408575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f82601f830112611433575f5ffd5b81516114416112df8261126b565b8082825260208201915060208360051b860101925085831115611462575f5ffd5b602085015b838110156113af5780516001600160401b03811115611484575f5ffd5b611493886020838a01016113b9565b84525060209283019201611467565b5f82601f8301126114b1575f5ffd5b81516114bf6112df8261126b565b8082825260208201915060208360051b8601019250858311156114e0575f5ffd5b602085015b838110156113af5780516001600160401b03811115611502575f5ffd5b86016020818903601f19011215611517575f5ffd5b61151f6111df565b60208201516001600160401b03811115611537575f5ffd5b6115468a6020838601016113b9565b825250845250602092830192016114e5565b5f5f5f5f5f85870361010081121561156e575f5ffd5b608081121561157b575f5ffd5b50611584611201565b8651815260208088015190820152604080880151908201526115a860608801611253565b606082015260808701519095506001600160401b038111156115c8575f5ffd5b6115d4888289016112c2565b60a088015190955090506001600160401b038111156115f1575f5ffd5b6115fd88828901611424565b60c088015190945090506001600160401b0381111561161a575f5ffd5b611626888289016114a2565b92505061163560e0870161128d565b90509295509295909350565b600181811c9082168061165557607f821691505b60208210810361167357634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115610abc5782821115610abc57805f5260205f20601f840160051c60208510156116a457505f5b90810190601f840160051c035f5b818110156116c7575f838201556001016116b2565b505050505050565b81516001600160401b038111156116e8576116e86111a3565b6116fc816116f68454611641565b84611679565b6020601f82116001811461172e575f83156117175750848201515b5f19600385901b1c1916600184901b178455611786565b5f84815260208120601f198516915b8281101561175d578785015182556020948501946001909201910161173d565b508482101561177a57868401515f19600387901b60f8161c191681555b505060018360011b0184555b5050505050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5f600182016117c6576117c66117a1565b5060010190565b634e487b7160e01b5f52602160045260245ffd5b600781106117fd57634e487b7160e01b5f52602160045260245ffd5b9052565b60208101610a5582846117e1565b5f60e08201905060018060a01b03835116825263ffffffff602084015116602083015263ffffffff6040840151166040830152606083015161185460608401826117e1565b5060808301511515608083015260ff60a08401511660a083015260c083015161188260c084018260ff169052565b5092915050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b606081525f6118c96060830186611889565b82810360208401526118db8186611889565b905082810360408401526118ef8185611889565b9695505050505050565b5f81518060208401855e5f93019283525090919050565b5f610a5282846118f9565b602081525f610a526020830184611889565b5f6020828403121561193d575f5ffd5b610a52826112a3565b602081525f8251602080840152610cb46040840182611889565b6001600160e81b0319841681525f61197b60038301856118f9565b60609390931b6001600160601b0319168352505060140192915050565b81810381811115610a5557610a556117a1565b634e487b7160e01b5f52603160045260245ffd5b60805160a05160c05160e051610100516189b06119fc5f395f61456f01525f61462901525f61460301525f6145b301525f61459001526189b05ff3fe608060405260043610610441575f3560e01c80636739833111610236578063a71954ec11610134578063c53a0292116100b3578063eb8535c211610078578063eb8535c214610db5578063f062476814610de2578063f2fde38b14610e01578063f66a25a414610e20578063fa52c7d814610e3f575f5ffd5b8063c53a029214610d25578063c87b56dd14610d39578063dc01f60d14610d58578063e5a2282714610d83578063e985e9c514610d96575f5ffd5b8063b88d4fde116100f9578063b88d4fde14610c16578063b97dd9e214610c35578063babc394f14610c66578063bd3e759414610c7a578063c05df7ac14610d06575f5ffd5b8063a71954ec14610b9c578063a7c5e70114610bbb578063aaffd27014610bcf578063ad6cfb8614610be3578063b5545a3c14610c02575f5ffd5b80637d06fdf8116101c05780638cc05eda116101855780638cc05eda14610b005780638da5cb5b14610b2c57806395d89b4114610b4f578063a0201be514610b63578063a22cb46514610b82575f5ffd5b80637d06fdf814610a395780638456cb5914610a8657806384b0196e14610a9a578063863623bb14610ac157806389afcb4414610ae1575f5ffd5b80636d3c6275116102065780636d3c6275146109a957806370a08231146109c8578063715018a6146109e757806379ee54f7146109fb5780637b55a30014610a1a575f5ffd5b806367398331146109195780636a6278421461093f5780636a9265911461095e5780636ae9942c1461097d575f5ffd5b80632a8e33d7116103435780633f4ba83a116102cd57806358e88dbb1161029257806358e88dbb1461088757806359ca93b6146108a05780635c975abb146108bf57806362fcde4b146108db5780636352211e146108fa575f5ffd5b80633f4ba83a146107f757806342842e0e1461080b57806343201d301461082a57806343401a001461083d5780634f6ccce714610868575f5ffd5b80633434735f116103135780633434735f1461072f578063355811a714610749578063374ed18c146107515780633894228e1461077d5780633e28391d146107d8575f5ffd5b80632a8e33d7146106bf5780632b9f4985146106de5780632f745c59146106fd5780632fb0d0251461071c575f5ffd5b80630f15f4c0116103cf5780631904bb2e116103945780631904bb2e146106255780632228dfa01461065157806323a404301461066557806323b872dd146106795780632870259d14610693575f5ffd5b80630f15f4c0146105915780630f4346fa146105a5578063127ce8e8146105c457806315b5709a146105d757806318160ddd14610611575f5ffd5b806306fdde031161041557806306fdde03146104e95780630752e017146104fd578063081812fc1461051c578063095ea7b3146105535780630a36cdef14610572575f5ffd5b80628d6acd1461044557806301ffc9a71461046d57806302ae337b1461049c578063059b916c146104bd575b5f5ffd5b348015610450575f5ffd5b5061045a600e5481565b6040519081526020015b60405180910390f35b348015610478575f5ffd5b5061048c610487366004617352565b610eca565b6040519015158152602001610464565b3480156104a7575f5ffd5b506104bb6104b63660046173b4565b610ef4565b005b3480156104c8575f5ffd5b506104dc6104d7366004617408565b6110d7565b604051610464919061744f565b3480156104f4575f5ffd5b506104dc6111a8565b348015610508575f5ffd5b506104bb610517366004617461565b611237565b348015610527575f5ffd5b5061053b610536366004617461565b61129f565b6040516001600160a01b039091168152602001610464565b34801561055e575f5ffd5b506104bb61056d366004617478565b6112c6565b34801561057d575f5ffd5b506104bb61058c3660046173b4565b6112df565b34801561059c575f5ffd5b506104bb6115b3565b3480156105b0575f5ffd5b506104bb6105bf366004617408565b611632565b6104bb6105d23660046175dd565b611779565b3480156105e2575f5ffd5b506105f66105f1366004617408565b611a12565b60408051938452602084019290925290820152606001610464565b34801561061c575f5ffd5b5060085461045a565b348015610630575f5ffd5b5061064461063f366004617408565b611a78565b604051610464919061772c565b34801561065c575f5ffd5b506104bb611b5b565b348015610670575f5ffd5b5061045a611c1b565b348015610684575f5ffd5b506104bb61056d36600461773a565b34801561069e575f5ffd5b506106b26106ad366004617774565b611c2a565b6040516104649190617792565b3480156106ca575f5ffd5b506104bb6106d93660046177ec565b611da8565b3480156106e9575f5ffd5b506104bb6106f8366004617408565b611df8565b348015610708575f5ffd5b5061045a610717366004617478565b611ebd565b6104bb61072a366004617807565b611f20565b34801561073a575f5ffd5b5061053b6002600160a01b0381565b6104bb611fa6565b34801561075c575f5ffd5b5061077061076b36600461787f565b612024565b60405161046491906178dd565b348015610788575f5ffd5b5061079c610797366004617461565b6122b9565b604080519586526001600160401b03909416602086015263ffffffff9283169385019390935216606083015260ff16608082015260a001610464565b3480156107e3575f5ffd5b5061048c6107f2366004617408565b61230d565b348015610802575f5ffd5b506104bb612333565b348015610816575f5ffd5b506104bb61082536600461773a565b612345565b6104bb610838366004617408565b61235f565b348015610848575f5ffd5b5061045a610857366004617408565b602f6020525f908152604090205481565b348015610873575f5ffd5b5061045a610882366004617461565b61268e565b348015610892575f5ffd5b5060305461048c9060ff1681565b3480156108ab575f5ffd5b5061079c6108ba366004617461565b6126e3565b3480156108ca575f5ffd5b50600d54610100900460ff1661048c565b3480156108e6575f5ffd5b506104bb6108f536600461794e565b6126f2565b348015610905575f5ffd5b5061053b610914366004617461565b6127f9565b348015610924575f5ffd5b5061092d612803565b60405160ff9091168152602001610464565b34801561094a575f5ffd5b506104bb610959366004617408565b612815565b348015610969575f5ffd5b5061048c61097836600461796f565b612892565b348015610988575f5ffd5b5061099c61099736600461787f565b61292d565b60405161046491906179a1565b3480156109b4575f5ffd5b5061048c6109c3366004617408565b612a81565b3480156109d3575f5ffd5b5061045a6109e2366004617408565b612b05565b3480156109f2575f5ffd5b506104bb612b4a565b348015610a06575f5ffd5b5061045a610a15366004617408565b612b5b565b348015610a25575f5ffd5b506104bb610a34366004617a04565b612b9d565b348015610a44575f5ffd5b50610a4d612d12565b604051610464919081518152602080830151908201526040808301519082015260609182015163ffffffff169181019190915260800190565b348015610a91575f5ffd5b506104bb612d8f565b348015610aa5575f5ffd5b50610aae612d9f565b6040516104649796959493929190617a73565b348015610acc575f5ffd5b5061053b5f5160206184375f395f51905f5281565b348015610aec575f5ffd5b506104bb610afb366004617408565b612e06565b348015610b0b575f5ffd5b50610b1f610b1a366004617774565b612eb6565b6040516104649190617b09565b348015610b37575f5ffd5b50600d546201000090046001600160a01b031661053b565b348015610b5a575f5ffd5b506104dc612eca565b348015610b6e575f5ffd5b506106b2610b7d36600461787f565b612ed9565b348015610b8d575f5ffd5b506104bb61056d366004617b1b565b348015610ba7575f5ffd5b50610a4d610bb6366004617b60565b612f92565b348015610bc6575f5ffd5b50610b1f61300c565b348015610bda575f5ffd5b506104bb613018565b348015610bee575f5ffd5b5061045a610bfd366004617b79565b613288565b348015610c0d575f5ffd5b506104bb613369565b348015610c21575f5ffd5b506104bb610c30366004617bda565b613512565b348015610c40575f5ffd5b50600d54600160b01b900463ffffffff1660405163ffffffff9091168152602001610464565b348015610c71575f5ffd5b5061077061352a565b348015610c85575f5ffd5b50610ccf610c94366004617408565b602e6020525f90815260409020805460019091015460ff821691610100810463ffffffff1691600160281b9091046001600160a01b03169084565b6040805160ff909516855263ffffffff90931660208501526001600160a01b03909116918301919091526060820152608001610464565b348015610d11575f5ffd5b5061092d610d20366004617c3d565b613637565b348015610d30575f5ffd5b506104bb613756565b348015610d44575f5ffd5b506104dc610d53366004617461565b6137eb565b348015610d63575f5ffd5b5061045a610d72366004617408565b60316020525f908152604090205481565b6104bb610d91366004617c56565b61385b565b348015610da1575f5ffd5b5061048c610db0366004617c87565b613d40565b348015610dc0575f5ffd5b50600d54600160d81b900461ffff1660405161ffff9091168152602001610464565b348015610ded575f5ffd5b506104bb610dfc366004617c56565b613d6d565b348015610e0c575f5ffd5b506104bb610e1b366004617408565b613ded565b348015610e2b575f5ffd5b506104bb610e3a366004617b1b565b613e27565b348015610e4a575f5ffd5b50610eb7610e59366004617408565b600f6020525f90815260409020546001600160a01b0381169063ffffffff600160a01b8204811691600160c01b81049091169060ff600160e01b8204811691600160e81b8104821691600160f01b8204811691600160f81b90041687565b6040516104649796959493929190617caf565b5f6001600160e01b0319821663780e9d6360e01b1480610eee5750610eee82613f12565b92915050565b336002600160a01b0314610f2257604051637eb3357160e01b81523360048201526024015b60405180910390fd5b5f5b818110156110d25736838383818110610f3f57610f3f617d02565b6040029190910191505f9050610f586020830183617408565b90506001600160a01b0381161580610f7857506001600160a01b03818116145b15610f845750506110ca565b610f946109c36020840184617408565b15610fa05750506110ca565b5f600f5f610fb16020860186617408565b6001600160a01b0316815260208101919091526040015f2054600160e01b900460ff166006811115610fe557610fe561768c565b03610ff15750506110ca565b60208201803590600b905f906110079086617408565b6001600160a01b03166001600160a01b031681526020019081526020015f2054111561107b5760208201803590600b905f906110439086617408565b6001600160a01b03166001600160a01b031681526020019081526020015f205f8282546110709190617d2a565b909155506110909050565b61109061108b6020840184617408565b613f61565b7f11a09f9b32440d896abff7453bf53f8b26ffcb18dae4dca227f7a76e2acc3a64826040516110bf9190617d3d565b60405180910390a150505b600101610f24565b505050565b6001600160a01b0381165f908152602960205260408120805460609291906110fe90617d66565b80601f016020809104026020016040519081016040528092919081815260200182805461112a90617d66565b80156111755780601f1061114c57610100808354040283529160200191611175565b820191905f5260205f20905b81548152906001019060200180831161115857829003601f168201915b5050505050905080515f03610eee57604051635f7ba20d60e11b81526001600160a01b0384166004820152602401610f19565b60605f80546111b690617d66565b80601f01602080910402602001604051908101604052809291908181526020018280546111e290617d66565b801561122d5780601f106112045761010080835404028352916020019161122d565b820191905f5260205f20905b81548152906001019060200180831161121057829003601f168201915b5050505050905090565b61123f61407e565b604051627b8a6760e11b8152600481018290523360248201525f5160206184375f395f51905f529062f714ce906044015f604051808303815f87803b158015611286575f5ffd5b505af1158015611298573d5f5f3e3d5ffd5b5050505050565b5f6112a9826140b2565b505f828152600460205260409020546001600160a01b0316610eee565b60405163dc8d8db760e01b815260040160405180910390fd5b336002600160a01b031461130857604051637eb3357160e01b8152336004820152602401610f19565b5f80826001600160401b03811115611322576113226174dd565b60405190808252806020026020018201604052801561134b578160200160208202803683370190505b5090505f5b838110156114b4573685858381811061136b5761136b617d02565b905060400201905080602001355f0361138457506114ac565b5f6113926020830183617408565b90506001600160a01b03811615806113b257506001600160a01b03818116145b156113be5750506114ac565b6113ce6109c36020840184617408565b156113da5750506114ac565b5f600f816113eb6020860186617408565b6001600160a01b0316815260208082019290925260409081015f90812054600160f01b900460ff16808252600a8452918120549193509091600b90829061143490880188617408565b6001600160a01b03166001600160a01b031681526020019081526020015f205490505f8282106114645782611466565b815b90505f611477602088013583617d9e565b9050611483818b617db5565b99508089898151811061149857611498617d02565b602002602001018181525050505050505050505b600101611350565b50815f036114c25750505050565b5f6114cb61352a565b6020015190505f600e54826114e09190617db5565b90505f5f5b8681101561159b575f8686838151811061150157611501617d02565b6020026020010151856115149190617d9e565b61151e9190617ddc565b905080156115925780600b5f8b8b8681811061153c5761153c617d02565b6115529260206040909202019081019150617408565b6001600160a01b03166001600160a01b031681526020019081526020015f205f82825461157f9190617db5565b9091555061158f90508184617db5565b92505b506001016114e5565b506115a68183617d2a565b600e5550505050505b5050565b6115bb6140ea565b3068929eee149b4bd2126854036115d95763ab143c065f526004601cfd5b3068929eee149b4bd21268556115ee33614113565b506115fa336001614181565b335f908152600f60205260409020600d54611623908290600160b01b900463ffffffff166141e7565b503868929eee149b4bd2126855565b61163a6140ea565b3068929eee149b4bd2126854036116585763ab143c065f526004601cfd5b3068929eee149b4bd212685561166d8161424c565b506001600160a01b038082165f908152602e602090815260408083208151608081018352815460ff811680835263ffffffff61010083041695830195909552600160281b90049095169185019190915260010154606084015290036116e557604051636c4da32160e11b815260040160405180910390fd5b6001600160a01b0382165f908152602e6020526040812080546001600160c81b031916815560010155611719602c836142ad565b5060608101511561173657611736816040015182606001516142c8565b6040516001600160a01b038316907fc3b65b615a42c44083fae01d75939ba9640ffd6023e130bfc06092d992560d1f905f90a2503868929eee149b4bd212685550565b6117816140ea565b5f6117c286868a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061439692505050565b90505f6117cd61352a565b60a0015190505f6117de3483614532565b90506117e987614113565b506117f4875f614181565b6001600160a01b0387165f908152600c60205260409020600201546001600160401b03600160a81b90910416611839600d546001600160a01b03620100009091041690565b6001600160a01b0316336001600160a01b03161461190e5784421115611875576040516304adae2760e21b815260048101869052602401610f19565b5f7f216bb53e82eab08749d19f6feeb2ef62024ae0bacf3d722b441671ca90f0b973858a3387868b6040516020016118b39796959493929190617def565b6040516020818303038152906040528051906020012090505f6118d58261456d565b90506118e38a828b8b614683565b61190b57604051633b4f6e2b60e21b81526001600160a01b038b166004820152602401610f19565b50505b6040518060a00160405280858152602001896001600160a01b03168152602001336001600160a01b031681526020018460ff1681526020018260016119539190617e36565b6001600160401b039081169091526001600160a01b038a81165f908152600c602090815260409182902085518155908501516001820180546001600160a01b03191691851691909117905590840151600290910180546060860151608090960151929093166001600160a81b031990931692909217600160a01b60ff909516949094029390931767ffffffffffffffff60a81b1916600160a81b9390921692909202179055611a058b8b8a86866146cd565b5050505050505050505050565b6001600160a01b0381165f908152600f6020908152604080832054600160f01b900460ff16808452600a9092528220548291829182611a5187836148a9565b6001600160a01b03979097165f908152600b60205260409020549791969550909350505050565b611a80617302565b6001600160a01b0382165f908152600f602052604090208054600160e81b900460ff16611ab257611ab083614113565b505b6040805160e08101825282546001600160a01b038116825263ffffffff600160a01b820481166020840152600160c01b82041692820192909252908290606083019060ff600160e01b909104166006811115611b1057611b1061768c565b6006811115611b2157611b2161768c565b8152905460ff600160e81b8204811615156020840152600160f01b820481166040840152600160f81b909104166060909101529392505050565b611b636140ea565b611b6c33614113565b505f611b77602b5490565b600d549091505f90601190600160d01b900460ff1660048110611b9c57611b9c617d02565b60030201549050611bad82826148d9565b611bb8336003614181565b335f908152600f60205260409020600d54815463ffffffff600160b01b909204821691600160a01b90910416811015611c0c57604051634fadd4d360e11b815263ffffffff82166004820152602401610f19565b611c1582614916565b50505050565b5f611c25602b5490565b905090565b6060611c3582614968565b5f611c3f836149b8565b90505f81516001600160401b03811115611c5b57611c5b6174dd565b604051908082528060200260200182016040528015611c9457816020015b611c81617302565b815260200190600190039081611c795790505b5090505f5b8251811015611da057600f5f848381518110611cb757611cb7617d02565b6020908102919091018101516001600160a01b0390811683528282019390935260409182015f20825160e0810184528154948516815263ffffffff600160a01b8604811693820193909352600160c01b85049092169282019290925291606083019060ff600160e01b909104166006811115611d3557611d3561768c565b6006811115611d4657611d4661768c565b8152905460ff600160e81b8204811615156020840152600160f01b820481166040840152600160f81b909104166060909101528251839083908110611d8d57611d8d617d02565b6020908102919091010152600101611c99565b509392505050565b611db061407e565b6030805460ff19168215159081179091556040519081527f52ad987b0fca51d9a6d5e0bbc656d0e3f616cff09727bf584c3275def38c4f54906020015b60405180910390a150565b611e006140ea565b3068929eee149b4bd212685403611e1e5763ab143c065f526004601cfd5b3068929eee149b4bd21268555f611e348261424c565b6001600160a01b0383165f908152600f6020526040812054919250600160f01b90910460ff1690611e668484846149ea565b9050826001600160a01b03167ffc30cddea38e2bf4d6ea7d3f9ed3b6ad7f176419f4963bd81318067a4aee73fe82604051611ea391815260200190565b60405180910390a25050503868929eee149b4bd212685550565b5f611ec783612b05565b8210611ef85760405163295f44f760e21b81526001600160a01b038416600482015260248101839052604401610f19565b506001600160a01b03919091165f908152600660209081526040808320938352929052205490565b611f286140ea565b611f68813385858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061439692505050565b505f611f7261352a565b60a0015190505f611f833483614532565b9050611f8e33614113565b50611f99335f614181565b61129885853385856146cd565b611fae61407e565b6040515f905f5160206184375f395f51905f529034908381818185875af1925050503d805f8114611ffa576040519150601f19603f3d011682016040523d82523d5f602084013e611fff565b606091505b505090508061202157604051630b567ce360e31b815260040160405180910390fd5b50565b6040805160c08101825260608082525f6020830181905292820183905281018290526080810182905260a0810191909152600d54600160b01b900463ffffffff16612070816002617e55565b63ffffffff168363ffffffff1611806120b0575060038163ffffffff16101580156120b057506120a1600382617e71565b63ffffffff168363ffffffff16105b156120d657604051634fadd4d360e11b815263ffffffff84166004820152602401610f19565b600d54600160d01b900460ff1663ffffffff82811690851611156121f5575f612100858484614a98565b60408051825460e0602082028301810190935260c08201818152919392849291849184018282801561215957602002820191905f5260205f20905b81546001600160a01b0316815260019091019060200180831161213b575b505050918352505060018201546020808301919091526002928301546001600160401b03811660408085019190915263ffffffff600160401b830481166060860152600160601b8304811660808087019190915260ff600160801b909404841660a096870152600d549093165f818152600a86529290922095860154938701939093526003909401549091169084015282015295945050505050565b612200848383614b22565b60408051825460e0602082028301810190935260c08201818152919392849291849184018282801561225957602002820191905f5260205f20905b81546001600160a01b0316815260019091019060200180831161223b575b5050509183525050600182015460208201526002909101546001600160401b038116604083015263ffffffff600160401b820481166060840152600160601b820416608083015260ff600160801b9091041660a090910152949350505050565b601181600481106122c8575f80fd5b6003020160018101546002909101549091506001600160401b03811690600160401b810463ffffffff90811691600160601b810490911690600160801b900460ff1685565b6001600160a01b038082165f908152600c60205260408120600201549091161515610eee565b61233b61407e565b612343614bc3565b565b6110d283838360405180602001604052805f815250613512565b6123676140ea565b3068929eee149b4bd2126854036123855763ab143c065f526004601cfd5b3068929eee149b4bd212685561239a81614113565b50600d546201000090046001600160a01b03166001600160a01b0316336001600160a01b0316146124425760305460ff16156123e957604051630a06fea760e01b815260040160405180910390fd5b5f6123f382614c16565b9050336001600160a01b038316148015906124175750336001600160a01b03821614155b156124405760405163172b4e7560e11b81526001600160a01b0382166004820152602401610f19565b505b6001600160a01b0381165f908152600f6020526040902054600160e01b900460ff1660018160068111156124785761247861768c565b14158015612498575060028160068111156124955761249561768c565b14155b80156124b6575060038160068111156124b3576124b361768c565b14155b156124d65780604051633ba7bf8960e11b8152600401610f199190617e8d565b6001600160a01b0382165f818152600f6020908152604080832054600160f01b900460ff16808452600a835281842054948452600b9092529091205490919081811061255057604051630ea9c27360e01b81526001600160a01b03861660048201526024810182905260ff84166044820152606401610f19565b5f61255b8284617d2a565b9050803414612597576040516315de715960e21b81526001600160a01b038716600482015234602482015260ff85166044820152606401610f19565b6001600160a01b0386165f908152600b6020526040812080548392906125be908490617db5565b90915550506040515f905f5160206184375f395f51905f529034908381818185875af1925050503d805f811461260f576040519150601f19603f3d011682016040523d82523d5f602084013e612614565b606091505b505090508061263657604051630b567ce360e31b815260040160405180910390fd5b866001600160a01b03167fe27d5554eb05db70d1fa64400b6d5aee0f805adfbc7c9c3785743c9a287db8378360405161267191815260200190565b60405180910390a25050505050503868929eee149b4bd212685550565b5f61269860085490565b82106126c05760405163295f44f760e21b81525f600482015260248101839052604401610f19565b600882815481106126d3576126d3617d02565b905f5260205f2001549050919050565b601d81600481106122c8575f80fd5b6126fa61407e565b8061ffff165f0361274d57600d54601190600160d01b900460ff166004811061272557612725617d02565b6003020154604051635700689f60e11b815260048101919091525f6024820152604401610f19565b5f612757602b5490565b9050808261ffff16111561278b57604051635700689f60e11b81526004810182905261ffff83166024820152604401610f19565b600d805461ffff848116600160d81b81810261ffff60d81b1985161790945560408051949093049091168084526020840191909152908201839052907f74cf7ca84b30b723e8b6e3cc569ec2db21f4ba2fcc09d651e5ce6770b91552f99060600160405180910390a1505050565b5f610eee826140b2565b5f61280c61352a565b60a00151905090565b61281d61407e565b61282681612b05565b151580612837575061283781612a81565b1561286057604051639fb0877960e01b81526001600160a01b0382166004820152602401610f19565b6001600160a01b0381165f818152600f6020526040902080546001600160a01b03191682179055612021908290614c45565b5f606082146128a257505f610eee565b5f6128e184848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250614ca692505050565b5f818152601060205260409020549091506001600160a01b03168061290a575f92505050610eee565b61291381612a81565b15612922575f92505050610eee565b506001949350505050565b60605f61293983612024565b5f015190505f81516001600160401b03811115612958576129586174dd565b60405190808252806020026020018201604052801561298b57816020015b60608152602001906001900390816129765790505b5090505f5b8151811015611da05760295f8483815181106129ae576129ae617d02565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f2080546129e090617d66565b80601f0160208091040260200160405190810160405280929190818152602001828054612a0c90617d66565b8015612a575780601f10612a2e57610100808354040283529160200191612a57565b820191905f5260205f20905b815481529060010190602001808311612a3a57829003601f168201915b5050505050828281518110612a6e57612a6e617d02565b6020908102919091010152600101612990565b5f612a946001600160a01b038316614cd4565b15612aa057505f919050565b5f6001600160a01b0383165f908152600f6020526040902054600160e01b900460ff166006811115612ad457612ad461768c565b03612ae057505f919050565b506001600160a01b03165f908152600f6020526040902054600160e81b900460ff1690565b5f6001600160a01b038216612b2f576040516322718ad960e21b81525f6004820152602401610f19565b506001600160a01b03165f9081526003602052604090205490565b612b5261407e565b6123435f614d27565b6001600160a01b0381165f908152600f6020908152604080832054600160f01b900460ff16808452600a909252822054612b9584826148a9565b949350505050565b336002600160a01b0314612bc657604051637eb3357160e01b8152336004820152602401610f19565b612bd08282614d82565b612bd8614e5a565b600d54600160d81b900461ffff168114612c1c57600d54604051635700689f60e11b8152600160d81b90910461ffff16600482015260248101829052604401610f19565b5f5f5f5f612c5b8686808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525061528292505050565b9350935093509350612c6e86868661561c565b612c80612c7a602b5490565b866148d9565b7fd1a5032a9ae65ebe520eba7974025750af3d884b6ab6047dad04dcf7006ab3856040518060c00160405280838152602001858152602001436001612cc59190617db5565b6001600160401b0316815263ffffffff80881660208301528516604080830191909152600d5460ff1660609092019190915251612d0291906178dd565b60405180910390a1505050505050565b612d3f60405180608001604052805f81526020015f81526020015f81526020015f63ffffffff1681525090565b50600d5460ff165f908152600a602090815260409182902082516080810184528154815260018201549281019290925260028101549282019290925260039091015463ffffffff16606082015290565b612d9761407e565b61234361585d565b600f60f81b6060805f808083612df460408051808201825260148152732a32b631b7b4b71029ba30b5b2a6b0b730b3b2b960611b602080830191909152825180840190935260018352603160f81b9083015291565b97989097965046955030945091925090565b612e0e61407e565b612e1781612a81565b15612e38576006604051633ba7bf8960e11b8152600401610f199190617e8d565b612e4181614113565b505f6001600160a01b0382165f908152600f6020526040902054600160e01b900460ff166006811115612e7657612e7661768c565b03612ead576001600160a01b0381165f908152600f60205260409020612e9b9061589c565b6120216001600160a01b0382166158fa565b61202181613f61565b6060612ec182614968565b610eee826149b8565b6060600180546111b690617d66565b60605f612ee583612024565b5f015190505f81516001600160401b03811115612f0457612f046174dd565b604051908082528060200260200182016040528015612f3d57816020015b612f2a617302565b815260200190600190039081612f225790505b5090505f5b8151811015611da057612f6d838281518110612f6057612f60617d02565b6020026020010151611a78565b828281518110612f7f57612f7f617d02565b6020908102919091010152600101612f42565b612fbf60405180608001604052805f81526020015f81526020015f81526020015f63ffffffff1681525090565b5060ff165f908152600a602090815260409182902082516080810184528154815260018201549281019290925260028101549282019290925260039091015463ffffffff16606082015290565b6060611c25602c615932565b336002600160a01b031461304157604051637eb3357160e01b8152336004820152602401610f19565b5f61304b60085490565b90505f5f5b8281101561324a575f6130656109148361268e565b6001600160a01b0381165f9081526029602052604081208054929350909161308c90617d66565b80601f01602080910402602001604051908101604052809291908181526020018280546130b890617d66565b80156131035780601f106130da57610100808354040283529160200191613103565b820191905f5260205f20905b8154815290600101906020018083116130e657829003601f168201915b5050505050905080516060036131775780516020808301919091205f9081526010918290526040812080546001600160a01b031916905583919061314684614ca6565b81526020019081526020015f205f6101000a8154816001600160a01b0302191690836001600160a01b031602179055505b6001600160a01b0382165f908152600f602052604090208054600160e81b900460ff16156131a757505050613242565b8054600160e01b900460ff165f8160068111156131c6576131c661768c565b14806131e3575060068160068111156131e1576131e161768c565b145b156131f15750505050613242565b61322284602a5f84600681111561320a5761320a61768c565b60ff16815260208101919091526040015f209061593e565b5061322c81615952565b1561323d5761323a86617e9b565b95505b505050505b600101613050565b50602b8190556040518181527fa5fe2e69fcd48b9dbe563588b5da97937ef9046641db65c59b8d49a20d75bdcc906020015b60405180910390a15050565b5f61329284614113565b5084516060146132b5576040516333a234f960e11b815260040160405180910390fd5b5f6132be61352a565b60a001516001600160a01b0386165f908152600c6020526040812060020154919250600160a81b9091046001600160401b0316906132fb88614ca6565b90505f7f216bb53e82eab08749d19f6feeb2ef62024ae0bacf3d722b441671ca90f0b97382898987878b60405160200161333b9796959493929190617def565b60405160208183030381529060405280519060200120905061335c8161456d565b9998505050505050505050565b6133716140ea565b3068929eee149b4bd21268540361338f5763ab143c065f526004601cfd5b3068929eee149b4bd2126855335f908152602f60209081526040808320546031909252909120546133c08183617db5565b5f036133df5760405163183dfd8b60e21b815260040160405180910390fd5b5f5f5160206184375f395f51905f523182116133fb578161340b565b5f5160206184375f395f51905f52315b90505f6134188285617db5565b9050805f0361343a5760405163183dfd8b60e21b815260040160405180910390fd5b335f908152602f60205260408120556134538284617d2a565b335f8181526031602052604090819020929092559051634875485760e11b81526004810191909152602481018390525f5160206184375f395f51905f52906390ea90ae9086906044015f604051808303818588803b1580156134b3575f5ffd5b505af11580156134c5573d5f5f3e3d5ffd5b50506040518481523393507f358fe4192934d3bf28ae181feda1f4bd08ca67f5e2fad55582cce5eb67304ae99250602001905060405180910390a2505050503868929eee149b4bd2126855565b61351d8484846112c6565b611c1533858585856159a5565b6040805160c08101825260608082525f6020830181905292820183905281018290526080810182905260a0810191909152600d5461358190600160b01b810463ffffffff16908190600160d01b900460ff16614b22565b60408051825460e0602082028301810190935260c0820181815291939284929184918401828280156135da57602002820191905f5260205f20905b81546001600160a01b031681526001909101906020018083116135bc575b5050509183525050600182015460208201526002909101546001600160401b038116604083015263ffffffff600160401b820481166060840152600160601b820416608083015260ff600160801b9091041660a090910152919050565b5f61364061407e565b6136486140ea565b613658608083016060840161787f565b63ffffffff165f0361369657613674608083016060840161787f565b604051630c6e911360e41b815263ffffffff9091166004820152602401610f19565b600d80545f919082906136ab9060ff16617eb3565b825460ff8083166101009490940a848102910219909116179092555f908152600a6020526040902090915083906136e28282617ed1565b505060ff81167fe99633c5fc9a4b39f3a3d7835a821420f9d4d6c5bfa62be2fcf1fde156115eeb8435602086013560408701356137256080890160608a0161787f565b6040805194855260208501939093529183015263ffffffff16606082015260800160405180910390a290505b919050565b61375f33614113565b50335f908152600c60205260408120600201805460159061378f90600160a81b90046001600160401b0316617f14565b82546001600160401b038083166101009490940a8481029102199091161790925560405190815290915033907f2372996d0929efe8a23b6f30910b8047be7f973b1bfa8bf5ef6dbe702521591f9060200160405180910390a250565b60606137f6826140b2565b505f61383161380484615ac4565b61380c615b72565b60405160200161381d929190617f4c565b604051602081830303815290604052615bbc565b905080604051602001613844919061803b565b604051602081830303815290604052915050919050565b6138636140ea565b3068929eee149b4bd2126854036138815763ab143c065f526004601cfd5b3068929eee149b4bd21268555f6138978361424c565b6001600160a01b0384165f908152600f60205260409020805491925090600160e01b900460ff1660018160068111156138d2576138d261768c565b141580156138f2575060028160068111156138ef576138ef61768c565b14155b80156139105750600381600681111561390d5761390d61768c565b14155b156139305780604051633ba7bf8960e11b8152600401610f199190617e8d565b815460ff600160f01b9091048116908516811015806139575750600d5460ff908116908616115b1561398257604051633abb443b60e21b815260ff808316600483015286166024820152604401610f19565b60ff8082165f908152600a6020526040808220549288168252812054908282116139ac575f6139b6565b6139b68383617d2a565b90508034146139da5760405163222d164360e21b8152346004820152602401610f19565b60018560068111156139ee576139ee61768c565b03613b0b57855460ff60f01b1916600160f01b60ff8a16021786556001600160a01b03808a165f908152600c60205260409020600201541615613a5c576001600160a01b0389165f908152600c60205260409020600201805460ff60a01b1916600160a01b60ff8b16021790555b8015613a94576001600160a01b0389165f908152600b602052604081208054839290613a89908490617db5565b90915550613aa89050565b82821015613aa857613aa889888585615be2565b6040805160ff80871682528a166020820152908101849052606081018390526001600160a01b038a16907f27f993440568bc502fe7db72fe27118488431975dc3239b379513a4cdb08e2c99060800160405180910390a250505050505050613d30565b5f602e5f8b6001600160a01b03166001600160a01b031681526020019081526020015f206040518060800160405290815f82015f9054906101000a900460ff1660ff1660ff1681526020015f820160019054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020015f820160059054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001600182015481525050905060405180608001604052808a60ff168152602001600d60169054906101000a900463ffffffff1663ffffffff168152602001336001600160a01b0316815260200183815250602e5f8c6001600160a01b03166001600160a01b031681526020019081526020015f205f820151815f015f6101000a81548160ff021916908360ff1602179055506020820151815f0160016101000a81548163ffffffff021916908363ffffffff1602179055506040820151815f0160056101000a8154816001600160a01b0302191690836001600160a01b0316021790555060608201518160010155905050613cad8a602c61593e90919063ffffffff16565b50606081015115613cca57613cca816040015182606001516142c8565b600d546040805160ff8c168152600160b01b90920463ffffffff16602083015281018390526001600160a01b038b16907fdffa95238a907cf8b6360a883f195928a82c8d7746dfe6fca84936929024a9d59060600160405180910390a250505050505050505b3868929eee149b4bd21268555050565b6001600160a01b039182165f90815260056020908152604080832093909416825291909152205460ff1690565b613d7561407e565b613d7e82614113565b506001600160a01b0382165f818152600f602090815260409182902080546001600160f81b0316600160f81b60ff87169081029190911790915591519182527ffa96cc66d1772e5646f86e374867e4e32b5b448b2aadb331568e34c2d063e45591015b60405180910390a25050565b613df561407e565b6001600160a01b038116613e1e57604051631e4fbdf760e01b81525f6004820152602401610f19565b61202181614d27565b613e2f6140ea565b3068929eee149b4bd212685403613e4d5763ab143c065f526004601cfd5b3068929eee149b4bd21268555f613e638361424c565b6001600160a01b0384165f908152600f60205260409020909150613e8681615cf8565b613ea5578060405163c11d33f760e01b8152600401610f19919061806c565b613eae8161589c565b5f613eba858486615d91565b9050826001600160a01b03167ffc30cddea38e2bf4d6ea7d3f9ed3b6ad7f176419f4963bd81318067a4aee73fe82604051613ef791815260200190565b60405180910390a25050503868929eee149b4bd21268555050565b5f6001600160e01b031982166380ac58cd60e01b1480613f4257506001600160e01b03198216635b5e139f60e01b145b80610eee57506301ffc9a760e01b6001600160e01b0319831614610eee565b6001600160a01b0381165f908152600f602052604090208054602b54600160e01b90910460ff1690613f9282615952565b15613fa557613fa2600182617d2a565b90505b613faf8482615ef7565b5f613fb985611a12565b506001600160a01b0387165f908152600b60205260408082208290555191935091505f5160206184375f395f51905f529083908381818185875af1925050503d805f8114614022576040519150601f19603f3d011682016040523d82523d5f602084013e614027565b606091505b505090508061404957604051630b567ce360e31b815260040160405180910390fd5b600d54614064908690600160b01b900463ffffffff16616030565b61406d8561589c565b61407686616087565b505050505050565b600d546001600160a01b03620100009091041633146123435760405163118cdaa760e01b8152336004820152602401610f19565b5f818152600260205260408120546001600160a01b031680610eee57604051637e27328960e01b815260048101849052602401610f19565b600d54610100900460ff16156123435760405163d93c066560e01b815260040160405180910390fd5b5f6001600160a01b03821661412781614cd4565b6141475760405163ed15e6cf60e01b815260048101829052602401610f19565b826001600160a01b031661415a826127f9565b6001600160a01b031614610eee576040516330fa89ab60e11b815260040160405180910390fd5b6001600160a01b0382165f908152600f6020526040902054600160e01b900460ff168160068111156141b5576141b561768c565b8160068111156141c7576141c761768c565b146110d25780604051633ba7bf8960e11b8152600401610f199190617e8d565b6141f2816001617e55565b825463ffffffff91909116600160a01b0263ffffffff60a01b1990911617825561421d8260026160f9565b7f44f68a196beb8e3ae6b6afe9504db62c81b4e511e987a263b4f1a9bc49c907628260405161327c919061806c565b5f61425682614113565b5061426082614c16565b9050336001600160a01b038316148015906142845750336001600160a01b03821614155b156137515760405163172b4e7560e11b81526001600160a01b0382166004820152602401610f19565b5f6142c1836001600160a01b038416616228565b9392505050565b805f036142d3575050565b604051634875485760e11b81526001600160a01b03831660048201525f60248201525f5160206184375f395f51905f52906390ea90ae90620186a09084906044015f604051808303818589803b15801561432b575f5ffd5b5088f1945050505050801561433e575060015b6115af576001600160a01b0382165f908152602f602052604081208054839290614369908490617db5565b90915550506040518181526001600160a01b038316905f5160206189445f395f51905f5290602001613de1565b5f81516060146143b9576040516333a234f960e11b815260040160405180910390fd5b5f825f815181106143cc576143cc617d02565b016020015160f81c90506080811615806143e857506040811615155b15614406576040516333a234f960e11b815260040160405180910390fd5b5f6144118486616312565b86516040519192505f91829161b1519163a65ebb2560e01b9161443a918a9088906024016180de565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516144789190618116565b5f60405180830381855afa9150503d805f81146144b0576040519150601f19603f3d011682016040523d82523d5f602084013e6144b5565b606091505b50915091508115806144c957508051602014155b156144e957806040516306fe67db60e31b8152600401610f19919061744f565b808060200190518101906144fd9190618121565b61451c578760405163a865bb3560e01b8152600401610f19919061813c565b6145268688616362565b98975050505050505050565b60ff81165f908152600a602052604081205483146145665760405163222d164360e21b815260048101849052602401610f19565b5090919050565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f00000000000000000000000000000000000000000000000000000000000000004614166146605750604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000009181019190915246606082015230608082015260a090205b6719010000000000005f5280601a5281603a52604260182090505f603a52919050565b5f61468d856163d2565b156146b857846001600160a01b03166146a78585856164a5565b6001600160a01b0316149050612b95565b6146c48585858561651f565b95945050505050565b6001600160a01b038381165f818152600f602081815260408084208054825160e08101845287815263ffffffff81860181815294820188815260608301898152608084018a905260ff8e811660a0860152600160f81b86041660c085018190529a909952969095528051935195518516600160c01b0263ffffffff60c01b1996909516600160a01b026001600160c01b031990921693909816929092179190911792831682178155925193949391839160ff60e01b191664ffffffffff60c01b1990911617600160e01b8360068111156147a9576147a961768c565b02179055506080820151815460a084015160c09094015161ffff60e81b19909116600160e81b9215159290920260ff60f01b191691909117600160f01b60ff94851602176001600160f81b0316600160f81b93909116929092029190911790556001600160a01b0384165f908152600f6020526040902061482b8160016160f9565b6001600160a01b0385165f90815260296020526040902061484d8789836181ac565b506001600160a01b0385165f908152600b602052604090819020849055517f9d9bab592843361c508cec6cc23820609c04fe07a621d03bf04b7520759d36419061489890839061806c565b60405180910390a150505050505050565b6001600160a01b0382165f908152600b6020526040812054818382116148cf575f6146c4565b6146c48483617d2a565b8115806148e4575080155b806148ee57508181115b156115af57604051635700689f60e11b81526004810183905260248101829052604401610f19565b6149218160046160f9565b805463ffffffff60c01b191663ffffffff60c01b1781556040517f170cba9e80cc0d156bc6ed689fa1d09ee788e1000c092512ef8698454b2081ee90611ded90839061806c565b5f81600681111561497b5761497b61768c565b1480614998575060068160068111156149965761499661768c565b145b156120215780604051633ba7bf8960e11b8152600401610f199190617e8d565b6060610eee602a5f8460068111156149d2576149d261768c565b60ff1660ff1681526020019081526020015f20615932565b5f5f6149f685846165f2565b6001600160a01b0386165f908152600b6020526040812080549293508392909190614a22908490617d2a565b9091555050604051634875485760e11b81526001600160a01b0385166004820152602481018290525f5160206184375f395f51905f52906390ea90ae906044015f604051808303815f87803b158015614a79575f5ffd5b505af1158015614a8b573d5f5f3e3d5ffd5b5092979650505050505050565b5f80600483614aa78688617e71565b614ab19190618265565b614abb919061827e565b90505f601d8260ff1660048110614ad457614ad4617d02565b6003020190508563ffffffff168160020160089054906101000a900463ffffffff1663ffffffff16146146c457604051634fadd4d360e11b815263ffffffff87166004820152602401610f19565b5f80614b2e8585617e71565b90505f600482614b3e8683618265565b614b48919061829f565b614b52919061827e565b90505f60118260ff1660048110614b6b57614b6b617d02565b6003020190508663ffffffff168160020160089054906101000a900463ffffffff1663ffffffff1614614bb957604051634fadd4d360e11b815263ffffffff88166004820152602401610f19565b9695505050505050565b614bcb616652565b600d805461ff00191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6001600160a01b038082165f908152600c6020526040812060028101549192909116806142c157509192915050565b6001600160a01b038216614c6e57604051633250574960e11b81525f6004820152602401610f19565b5f614c7a83835f61667a565b90506001600160a01b038116156110d2576040516339e3563760e11b81525f6004820152602401610f19565b604080516020838101516001600160fd1b031682528284015190820152606092830151918101919091522090565b5f811580614ce957506001600160a01b038210155b15614d0a5760405163ed15e6cf60e01b815260048101839052602401610f19565b505f908152600260205260409020546001600160a01b0316151590565b600d80546001600160a01b038381166201000081810262010000600160b01b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b60015b818110156110d257828282818110614d9f57614d9f617d02565b9050602002016020810190614db49190617408565b6001600160a01b03168383614dca600185617d2a565b818110614dd957614dd9617d02565b9050602002016020810190614dee9190617408565b6001600160a01b031610614e52578282614e09600184617d2a565b818110614e1857614e18617d02565b9050602002016020810190614e2d9190617408565b60405163836e3a7d60e01b81526001600160a01b039091166004820152602401610f19565b600101614d85565b5f614e65602c615932565b600d54909150600160b01b900463ffffffff165f805b8351811015615208575f848281518110614e9757614e97617d02565b6020908102919091018101516001600160a01b038082165f908152602e84526040908190208151608081018352815460ff811680835263ffffffff61010083041697830197909752600160281b900490931691830191909152600101546060820152909250901580614f2757506001600160a01b0382165f908152600f6020526040902054600160e81b900460ff165b15614f3c57614f3582616745565b5050615200565b6001600160a01b0382165f908152600f60209081526040808320805460ff600160f01b9091048116808652600a909452828520548651909116855291909320548181108015614fa6575060018560200151614f979190617e55565b63ffffffff168963ffffffff16105b15614fb657505050505050615200565b6001600160a01b0386165f908152602e6020526040812080546001600160c81b031916815560010155614fea602c876142ad565b505f8282111561502b5760608601516001600160a01b0388165f908152600b602052604081208054909190615020908490617db5565b909155506151299050565b5f6150368385617d2a565b6001600160a01b0389165f908152600b602052604090205490915084811061506057819250615075565b83811115615075576150728482617d2a565b92505b8215615110576001600160a01b0389165f908152600b6020526040812080548592906150a2908490617d2a565b909155505f90506150b28a614c16565b6001600160a01b0381165f908152602f60205260408120805492935086929091906150de908490617db5565b90915550506040518481526001600160a01b038216905f5160206189445f395f51905f529060200160405180910390a2505b61511a8383617d2a565b615124908c617db5565b9a5050505b8551855460ff909116600160f01b0260ff60f01b199091161785556001600160a01b038781165f908152600c6020526040902060020154161561519f5785516001600160a01b0388165f908152600c60205260409020600201805460ff909216600160a01b0260ff60a01b199092169190911790555b85516040805160ff808816825290921660208301528101849052606081018390526001600160a01b038816907f27f993440568bc502fe7db72fe27118488431975dc3239b379513a4cdb08e2c99060800160405180910390a2505050505050505b600101614e7b565b5080156110d2576040515f905f5160206184375f395f51905f529083908381818185875af1925050503d805f811461525b576040519150601f19603f3d011682016040523d82523d5f602084013e615260565b606091505b5050905080611c1557604051630b567ce360e31b815260040160405180910390fd5b600d545f9081908190606090600160d01b900460ff168260046152a6836001618265565b6152b0919061827e565b600d805460ff60d01b1916600160d01b60ff841602178082559192505f916016906152e790600160b01b900463ffffffff166182b8565b91906101000a81548163ffffffff021916908363ffffffff160217905590505f601d8360ff166004811061531d5761531d617d02565b6003020190505f61532c612d12565b90506040518060c001604052808380548060200260200160405190810160405280929190818152602001828054801561538c57602002820191905f5260205f20905b81546001600160a01b0316815260019091019060200180831161536e575b50505091835250506040808401516020830152016153ab436001617e36565b6001600160401b0316815263ffffffff80861660208301526060808501519091166040830152600d5460ff90811691909201526011908616600481106153f3576153f3617d02565b600302015f820151815f01908161540a91906182d3565b50602082015160018201556040820151600291820180546060850151608086015160a0909601516001600160401b039094166001600160601b031990921691909117600160401b63ffffffff928316021764ffffffffff60601b1916600160601b919095160260ff60801b191693909317600160801b60ff90921691909102179091555f9060049061549d908790618265565b6154a7919061827e565b90506040518060c001604052808c81526020015f81526020015f6001600160401b031681526020018560026154dc9190617e55565b63ffffffff1681525f60208201819052604090910152601d60ff83166004811061550857615508617d02565b600302015f820151815f01908161551f91906182d3565b50602082810151600183015560408084015160029093018054606080870151608088015160a09098015160ff16600160801b0260ff60801b1963ffffffff998a16600160601b021664ffffffffff60601b1999909216600160401b026001600160601b03199094166001600160401b039098169790971792909217969096161793909317909255848201519285015186548351818402810184019094528084528894939192889291839183018282801561560057602002820191905f5260205f20905b81546001600160a01b031681526001909101906020018083116155e2575b5050505050905099509950995099505050505050509193509193565b5f61562760026149b8565b90505f5b8151811015615685575f600f5f84848151811061564a5761564a617d02565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f20905061567c81616854565b5060010161562b565b505f61569160046149b8565b600d54909150600160d01b900460ff165f60046156af836001618265565b6156b9919061827e565b90505f7fbd0b8371ed11e4a5f6acd1f1a0d78b3f7e6ab3473c6396c9f28027132562600c8660405160200161570592919091825260e01b6001600160e01b031916602082015260240190565b60405160208183030381529060405280519060200120905061579460118460ff166004811061573657615736617d02565b6003020180546040805160208084028201810190925282815292919083018282801561578957602002820191905f5260205f20905b81546001600160a01b0316815260019091019060200180831161576b575b50505050508261688e565b6157ad601d8360ff166004811061573657615736617d02565b6157ea8888808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525085925061688e915050565b5f5b8451811015615852575f85828151811061580857615808617d02565b6020026020010151905061581c81846168de565b15615827575061584a565b6001600160a01b0381165f908152600f602052604090206158489089616030565b505b6001016157ec565b505050505050505050565b6158656140ea565b600d805461ff0019166101001790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258614bf93390565b6158a78160066160f9565b805460ff60e81b198116600160e81b1782556158cb906001600160a01b0316616745565b7ffab16134cb74fff6e7d137bf93f6b2ab4c1c61cbe53dad2c8cb57744353bd39b81604051611ded919061806c565b5f6159065f835f61667a565b90506001600160a01b0381166115af57604051637e27328960e01b815260048101839052602401610f19565b60605f6142c1836168fb565b5f6142c1836001600160a01b038416616954565b5f60038260068111156159675761596761768c565b1480615984575060048260068111156159825761598261768c565b145b80610eee5750600282600681111561599e5761599e61768c565b1492915050565b6001600160a01b0383163b1561129857604051630a85bd0160e11b81526001600160a01b0384169063150b7a02906159e7908890889087908790600401618357565b6020604051808303815f875af1925050508015615a21575060408051601f3d908101601f19168201909252615a1e91810190618389565b60015b615a88573d808015615a4e576040519150601f19603f3d011682016040523d82523d5f602084013e615a53565b606091505b5080515f03615a8057604051633250574960e11b81526001600160a01b0385166004820152602401610f19565b805181602001fd5b6001600160e01b03198116630a85bd0160e11b1461407657604051633250574960e11b81526001600160a01b0385166004820152602401610f19565b60605f615ad0836169a0565b6028602282012090915060601c60295b6001811115615b6957600782600f16118015615b1557506060838281518110615b0b57615b0b617d02565b016020015160f81c115b15615b5257602060f81b838281518110615b3157615b31617d02565b0160200180516001600160f81b0319908116909218909116905f82901a9053505b60049190911c90615b62816183a4565b9050615ae0565b50909392505050565b6060615b986040518061052001604052806104ed81526020016184576104ed9139615bbc565b604051602001615ba891906183b9565b604051602081830303815290604052905090565b6060610eee826040518060600160405280604081526020016189646040913960016169b6565b5f615bed8284617d2a565b6001600160a01b0386165f908152600b6020526040812054919250848210615c16575081615c2b565b83821115615c2b57615c288483617d2a565b90505b8015615c68576001600160a01b0387165f908152600b602052604081208054839290615c58908490617d2a565b90915550615c68905086826142c8565b5f615c738285617d2a565b90508015615cee576040515f905f5160206184375f395f51905f529083908381818185875af1925050503d805f8114615cc7576040519150601f19603f3d011682016040523d82523d5f602084013e615ccc565b606091505b505090508061585257604051630b567ce360e31b815260040160405180910390fd5b5050505050505050565b80545f90600160e01b900460ff166001816006811115615d1a57615d1a61768c565b03615d285750600192915050565b82545f90615d4490600160c01b900463ffffffff166001617e55565b90506005826006811115615d5a57615d5a61768c565b148015615d795750600d5463ffffffff808316600160b01b9092041610155b15615d88575060019392505050565b505f9392505050565b5f615d9b84616087565b5f5f5f615da787611a12565b925092509250825f03615dbf578293505050506142c1565b6001600160a01b0387165f908152600b60205260408120819055828410615de7575081615e64565b50825f5f5160206184375f395f51905f52615e028386617d2a565b6040515f81818185875af1925050503d805f8114615e3b576040519150601f19603f3d011682016040523d82523d5f602084013e615e40565b606091505b5050905080615e6257604051630b567ce360e31b815260040160405180910390fd5b505b858015615e7e57505f5160206184375f395f51905f523182115b15615e95575f5160206184375f395f51905f523191505b5f5160206184375f395f51905f523180831115615ee257615eb68282617db5565b615ec08484617db5565b60405163cf47918160e01b815260048101929092526024820152604401610f19565b615eed888385616b30565b61335c8383617db5565b600d54600160b01b810463ffffffff1690600160d01b900460ff165f615f1e838084614b22565b9050615f2a8186616c3e565b508054615f3785826148d9565b5f615f43856001617e55565b90505f615f51828787614a98565b9050615f5d8189616c3e565b5080549250615f6c87846148d9565b5f615f78876002617e55565b90505f615f86828989614a98565b9050615f92818b616c3e565b5080549450615fa189866148d9565b600d54600160d81b900461ffff1689101561602457600d805461ffff8b8116600160d81b90810261ffff60d81b1984161793849055604080519382900483168085529190940490911660208301529181018b90527f74cf7ca84b30b723e8b6e3cc569ec2db21f4ba2fcc09d651e5ce6770b91552f99060600160405180910390a1505b50505050505050505050565b61603b8260056160f9565b815463ffffffff60c01b1916600160c01b63ffffffff8316021782556040517f727bfc4079207401298f48a3f1a92c9b40d83e086fe5b584a7b0644fdbdb56ee9061327c90849061806c565b6160996001600160a01b0382166158fa565b6008545f036160bb576040516315ae672760e01b815260040160405180910390fd5b6001600160a01b03165f908152600c602052604081209081556001810180546001600160a01b031916905560020180546001600160e81b0319169055565b81546001600160a01b03811690600160e01b900460ff1661614182602a5f8460068111156161295761612961768c565b60ff16815260208101919091526040015f20906142ad565b505f8360068111156161555761615561768c565b14158015616175575060068360068111156161725761617261768c565b14155b156161955761619382602a5f86600681111561320a5761320a61768c565b505b5f61619f82615952565b90505f6161ab85615952565b90508180156161b8575080155b156161d457602b5f81546161cb906183a4565b909155506161f7565b811580156161df5750805b156161f757602b5f81546161f290617e9b565b909155505b85548590879060ff60e01b1916600160e01b83600681111561621b5761621b61768c565b0217905550505050505050565b5f8181526001830160205260408120548015616302575f61624a600183617d2a565b85549091505f9061625d90600190617d2a565b90508082146162bc575f865f01828154811061627b5761627b617d02565b905f5260205f200154905080875f01848154811061629b5761629b617d02565b5f918252602080832090910192909255918252600188019052604090208390555b85548690806162cd576162cd6183ea565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050610eee565b5f915050610eee565b5092915050565b60608251606014616336576040516333a234f960e11b815260040160405180910390fd5b60405161634b905f90859085906020016183fe565b604051602081830303815290604052905092915050565b5f61636c83614ca6565b5f818152601060205260409020549091506001600160a01b0316156163a457604051638d12779f60e01b815260040160405180910390fd5b5f81815260106020526040902080546001600160a01b0384166001600160a01b031990911617905592915050565b5f6017826001600160a01b03163b146163ec57505f919050565b5f826001600160a01b0316803b806020016040519081016040528181525f908060200190933c805190915060ef60f81b9082905f9061642d5761642d617d02565b01602001516001600160f81b03191614801561647057508051600160f81b908290600190811061645f5761645f617d02565b01602001516001600160f81b031916145b80156142c1575080515f908290600290811061648e5761648e617d02565b01602001516001600160f81b031916149392505050565b5f60405182604081146164c057604181146164e75750611da0565b60208581013560ff81901c601b0190915285356040526001600160ff1b03166060526164f8565b60408501355f1a6020526040856040375b50845f526020604060805f60015afa505f6060523d60601851915080604052509392505050565b5f6001600160a01b03851615612b9557604051853b6165af57826040811461654f576041811461657657506165e9565b60208581013560ff81901c601b0190915285356040526001600160ff1b0316606052616587565b60408501355f1a6020526040856040375b50845f526020600160805f60015afa5180871860601b3d119250505f606052806040526165e9565b631626ba7e60e01b80825285600483015260248201604081528460448401528486606485013760208160648701858b5afa90519091141691505b50949350505050565b60ff81165f908152600a60205260408120548161660f85836148a9565b9050801580616631575060ff84165f908152600a602052604090206001015481105b15612b9557604051633737b70960e11b815260048101829052602401610f19565b600d54610100900460ff1661234357604051638dfc202b60e01b815260040160405180910390fd5b5f5f616687858585616d43565b90506001600160a01b0381166166e3576166de84600880545f838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b616706565b846001600160a01b0316816001600160a01b031614616706576167068185616e35565b6001600160a01b0385166167225761671d84616eb2565b612b95565b846001600160a01b0316816001600160a01b031614612b9557612b958585616f59565b6001600160a01b038082165f908152602e602090815260408083208151608081018352815460ff811680835263ffffffff61010083041695830195909552600160281b90049095169185019190915260010154606084015290036167ae576110d2602c836142ad565b6001600160a01b0382165f908152602e6020526040812080546001600160c81b0319168155600101556167e2602c836142ad565b506060810151156115af5760608101516040808301516001600160a01b03165f908152602f602052908120805490919061681d908490617db5565b9250508190555080604001516001600160a01b03165f5160206189445f395f51905f528260600151604051613de191815260200190565b61685f8160036160f9565b7fabab4191fe954f07230f7e34fd48dc0fdcbed492526cd060001cccceab22851b81604051611ded919061806c565b5f5b82518110156110d2576168d660016168d06168cd8685815181106168b6576168b6617d02565b602002602001015186616fa790919063ffffffff16565b90565b90616fc1565b600101616890565b6001600160a01b0382165f9081526020829052604081205c6142c1565b6060815f0180548060200260200160405190810160405280929190818152602001828054801561694857602002820191905f5260205f20905b815481526020019060010190808311616934575b50505050509050919050565b5f81815260018301602052604081205461699957508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610eee565b505f610eee565b6060610eee6001600160a01b0383166014616fc8565b606083515f036169d4575060408051602081019091525f81526142c1565b5f82616a04576003855160046169ea9190617d9e565b6169f5906002617db5565b6169ff9190617ddc565b616a29565b600385516002616a149190617db5565b616a1e9190617ddc565b616a29906004617d9e565b90505f816001600160401b03811115616a4457616a446174dd565b6040519080825280601f01601f191660200182016040528015616a6e576020820181803683370190505b509050600185016020820187885189016020810180515f82525b82841015616ae3576003840193508351603f8160121c168701518653600186019550603f81600c1c168701518653600186019550603f8160061c168701518653600186019550603f8116870151865350600185019450616a88565b905250508515616b2457600388510660018114616b075760028114616b1a57616b22565b603d6001830353603d6002830353616b22565b603d60018303535b505b50909695505050505050565b604051634875485760e11b81526001600160a01b0384166004820152602481018290525f5160206184375f395f51905f52906390ea90ae90620186a09085906044015f604051808303818589803b158015616b89575f5ffd5b5088f19450505050508015616b9c575060015b6110d2578115616bd3576001600160a01b0383165f908152602f602052604081208054849290616bcd908490617db5565b90915550505b8015616c06576001600160a01b0383165f9081526031602052604081208054839290616c00908490617db5565b90915550505b6001600160a01b0383165f5160206189445f395f51905f52616c288385617db5565b60405190815260200160405180910390a2505050565b81545f90815b81811015616d3957836001600160a01b0316858281548110616c6857616c68617d02565b5f918252602090912001546001600160a01b031603616d315784616c8d600184617d2a565b81548110616c9d57616c9d617d02565b905f5260205f20015f9054906101000a90046001600160a01b0316858281548110616cca57616cca617d02565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b0316021790555084805480616d0557616d056183ea565b5f8281526020902081015f1990810180546001600160a01b03191690550190555060019150610eee9050565b600101616c44565b505f949350505050565b5f828152600260205260408120546001600160a01b0390811690831615616d6f57616d6f818486617139565b6001600160a01b03811615616da957616d8a5f855f5f61719d565b6001600160a01b0381165f90815260036020526040902080545f190190555b6001600160a01b03851615616dd7576001600160a01b0385165f908152600360205260409020805460010190555b5f8481526002602052604080822080546001600160a01b0319166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b5f616e3f83612b05565b5f838152600760209081526040808320546001600160a01b0388168452600690925290912091925090818314616e94575f83815260208281526040808320548584528184208190558352600790915290208290555b5f938452600760209081526040808620869055938552525081205550565b6008545f90616ec390600190617d2a565b5f8381526009602052604081205460088054939450909284908110616eea57616eea617d02565b905f5260205f20015490508060088381548110616f0957616f09617d02565b5f918252602080832090910192909255828152600990915260408082208490558582528120556008805480616f4057616f406183ea565b600190038181905f5260205f20015f9055905550505050565b5f6001616f6584612b05565b616f6f9190617d2a565b6001600160a01b039093165f908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b03165f9081526020919091526040902090565b80825d5050565b6060825f616fd7846002617d9e565b616fe2906002617db5565b6001600160401b03811115616ff957616ff96174dd565b6040519080825280601f01601f191660200182016040528015617023576020820181803683370190505b509050600360fc1b815f8151811061703d5761703d617d02565b60200101906001600160f81b03191690815f1a905350600f60fb1b8160018151811061706b5761706b617d02565b60200101906001600160f81b03191690815f1a9053505f61708d856002617d9e565b617098906001617db5565b90505b600181111561710f576f181899199a1a9b1b9c1cb0b131b232b360811b83600f16601081106170cc576170cc617d02565b1a60f81b8282815181106170e2576170e2617d02565b60200101906001600160f81b03191690815f1a90535060049290921c91617108816183a4565b905061709b565b508115612b955760405163e22e27eb60e01b81526004810186905260248101859052604401610f19565b6171448383836172a1565b6110d2576001600160a01b03831661717257604051637e27328960e01b815260048101829052602401610f19565b60405163177e802f60e01b81526001600160a01b038316600482015260248101829052604401610f19565b80806171b157506001600160a01b03821615155b15617272575f6171c0846140b2565b90506001600160a01b038316158015906171ec5750826001600160a01b0316816001600160a01b031614155b80156171ff57506171fd8184613d40565b155b156172285760405163a9fbf51f60e01b81526001600160a01b0384166004820152602401610f19565b81156172705783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b50505f90815260046020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b5f6001600160a01b03831615801590612b955750826001600160a01b0316846001600160a01b031614806172da57506172da8484613d40565b80612b955750505f908152600460205260409020546001600160a01b03908116911614919050565b6040805160e0810182525f8082526020820181905291810182905290606082019081525f602082018190526040820181905260609091015290565b6001600160e01b031981168114612021575f5ffd5b5f60208284031215617362575f5ffd5b81356142c18161733d565b5f5f83601f84011261737d575f5ffd5b5081356001600160401b03811115617393575f5ffd5b6020830191508360208260061b85010111156173ad575f5ffd5b9250929050565b5f5f602083850312156173c5575f5ffd5b82356001600160401b038111156173da575f5ffd5b6173e68582860161736d565b90969095509350505050565b80356001600160a01b0381168114613751575f5ffd5b5f60208284031215617418575f5ffd5b6142c1826173f2565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6142c16020830184617421565b5f60208284031215617471575f5ffd5b5035919050565b5f5f60408385031215617489575f5ffd5b617492836173f2565b946020939093013593505050565b5f5f83601f8401126174b0575f5ffd5b5081356001600160401b038111156174c6575f5ffd5b6020830191508360208285010111156173ad575f5ffd5b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112617500575f5ffd5b81356001600160401b03811115617519576175196174dd565b604051601f8201601f19908116603f011681016001600160401b0381118282101715617547576175476174dd565b60405281815283820160200185101561755e575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f6020828403121561758a575f5ffd5b604051602081016001600160401b03811182821017156175ac576175ac6174dd565b60405290508082356001600160401b038111156175c7575f5ffd5b6175d3858286016174f1565b8252505092915050565b5f5f5f5f5f5f5f60a0888a0312156175f3575f5ffd5b87356001600160401b03811115617608575f5ffd5b6176148a828b016174a0565b90985096505060208801356001600160401b03811115617632575f5ffd5b61763e8a828b0161757a565b95505061764d604089016173f2565b935060608801356001600160401b03811115617667575f5ffd5b6176738a828b016174a0565b989b979a50959894979596608090950135949350505050565b634e487b7160e01b5f52602160045260245ffd5b600781106176bc57634e487b7160e01b5f52602160045260245ffd5b9052565b60018060a01b03815116825263ffffffff602082015116602083015263ffffffff604082015116604083015260608101516176fe60608401826176a0565b5060808101511515608083015260ff60a08201511660a083015260c08101516110d260c084018260ff169052565b60e08101610eee82846176c0565b5f5f5f6060848603121561774c575f5ffd5b617755846173f2565b9250617763602085016173f2565b929592945050506040919091013590565b5f60208284031215617784575f5ffd5b8135600781106142c1575f5ffd5b602080825282518282018190525f918401906040840190835b818110156177d4576177be8385516176c0565b6020939093019260e092909201916001016177ab565b509095945050505050565b8015158114612021575f5ffd5b5f602082840312156177fc575f5ffd5b81356142c1816177df565b5f5f5f60408486031215617819575f5ffd5b83356001600160401b0381111561782e575f5ffd5b61783a868287016174a0565b90945092505060208401356001600160401b03811115617858575f5ffd5b6178648682870161757a565b9150509250925092565b63ffffffff81168114612021575f5ffd5b5f6020828403121561788f575f5ffd5b81356142c18161786e565b5f8151808452602084019350602083015f5b828110156178d35781516001600160a01b03168652602095860195909101906001016178ac565b5093949350505050565b602081525f825160c060208401526178f860e084018261789a565b9050602084015160408401526001600160401b03604085015116606084015263ffffffff606085015116608084015263ffffffff60808501511660a084015260ff60a08501511660c08401528091505092915050565b5f6020828403121561795e575f5ffd5b813561ffff811681146142c1575f5ffd5b5f5f60208385031215617980575f5ffd5b82356001600160401b03811115617995575f5ffd5b6173e6858286016174a0565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b828110156179f857603f198786030184526179e3858351617421565b945060209384019391909101906001016179c7565b50929695505050505050565b5f5f60208385031215617a15575f5ffd5b82356001600160401b03811115617a2a575f5ffd5b8301601f81018513617a3a575f5ffd5b80356001600160401b03811115617a4f575f5ffd5b8560208260051b8401011115617a63575f5ffd5b6020919091019590945092505050565b60ff60f81b8816815260e060208201525f617a9160e0830189617421565b8281036040840152617aa38189617421565b606084018890526001600160a01b038716608085015260a0840186905283810360c0850152845180825260208087019350909101905f5b81811015617af8578351835260209384019390920191600101617ada565b50909b9a5050505050505050505050565b602081525f6142c1602083018461789a565b5f5f60408385031215617b2c575f5ffd5b617b35836173f2565b91506020830135617b45816177df565b809150509250929050565b803560ff81168114613751575f5ffd5b5f60208284031215617b70575f5ffd5b6142c182617b50565b5f5f5f5f60808587031215617b8c575f5ffd5b84356001600160401b03811115617ba1575f5ffd5b617bad878288016174f1565b945050617bbc602086016173f2565b9250617bca604086016173f2565b9396929550929360600135925050565b5f5f5f5f60808587031215617bed575f5ffd5b617bf6856173f2565b9350617c04602086016173f2565b92506040850135915060608501356001600160401b03811115617c25575f5ffd5b617c31878288016174f1565b91505092959194509250565b5f6080828403128015617c4e575f5ffd5b509092915050565b5f5f60408385031215617c67575f5ffd5b617c70836173f2565b9150617c7e60208401617b50565b90509250929050565b5f5f60408385031215617c98575f5ffd5b617ca1836173f2565b9150617c7e602084016173f2565b6001600160a01b038816815263ffffffff87811660208301528616604082015260e08101617ce060608301876176a0565b931515608082015260ff92831660a0820152911660c090910152949350505050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b81810381811115610eee57610eee617d16565b604081016001600160a01b03617d52846173f2565b168252602092830135929091019190915290565b600181811c90821680617d7a57607f821691505b602082108103617d9857634e487b7160e01b5f52602260045260245ffd5b50919050565b8082028115828204841417610eee57610eee617d16565b80820180821115610eee57610eee617d16565b634e487b7160e01b5f52601260045260245ffd5b5f82617dea57617dea617dc8565b500490565b96875260208701959095526001600160a01b03938416604087015291909216606085015260ff90911660808401526001600160401b031660a083015260c082015260e00190565b6001600160401b038181168382160190811115610eee57610eee617d16565b63ffffffff8181168382160190811115610eee57610eee617d16565b63ffffffff8281168282160390811115610eee57610eee617d16565b60208101610eee82846176a0565b5f60018201617eac57617eac617d16565b5060010190565b5f60ff821660ff8103617ec857617ec8617d16565b60010192915050565b813581556020820135600182015560408201356002820155600381016060830135617efb8161786e565b815463ffffffff191663ffffffff919091161790555050565b5f6001600160401b0382166001600160401b038103617ec857617ec8617d16565b5f81518060208401855e5f93019283525090919050565b7f7b226e616d65223a202254656c636f696e2d4e6574776f726b20436f6e73656e8152651cdd5cd3919560d21b60208201525f617f8c6026830185617f35565b7f222c20226465736372697074696f6e223a2022455243373231204e465420776881527f6f7365206f776e657273686970206c656467657220726570726573656e74732060208201527f746865207065726d697373696f6e65642077686974656c69737420666f72207660408201527530b634b230ba37b9399116101134b6b0b3b2911d101160511b60608201526180276076820185617f35565b61227d60f01b815260020195945050505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c00000081525f6142c1601d830184617f35565b81546001600160a01b038116825263ffffffff60a082901c8116602084015260c082901c16604083015260e08201906180ae6060840160ff8360e01c166176a0565b6180c26080840160ff8360e81c1615159052565b60f081901c60ff1660a084015260f881901c60c084015261630b565b606081525f6180f06060830186617421565b82810360208401526181028186617421565b90508281036040840152614bb98185617421565b5f6142c18284617f35565b5f60208284031215618131575f5ffd5b81516142c1816177df565b602081525f8251602080840152612b956040840182617421565b5f5b828110156110d2575f82820155600101618158565b601f8211156110d257828211156110d257805f5260205f20601f840160051c602085101561819857505f5b61129881601f860160051c03828401618156565b6001600160401b038311156181c3576181c36174dd565b6181d7836181d18354617d66565b8361816d565b5f601f841160018114618208575f85156181f15750838201355b5f19600387901b1c1916600186901b178355611298565b5f83815260208120601f198716915b828110156182375786850135825560209485019460019092019101618217565b5086821015618253575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b60ff8181168382160190811115610eee57610eee617d16565b5f60ff83168061829057618290617dc8565b8060ff84160691505092915050565b60ff8281168282160390811115610eee57610eee617d16565b5f63ffffffff821663ffffffff8103617ec857617ec8617d16565b81516001600160401b038111156182ec576182ec6174dd565b600160401b811115618300576183006174dd565b81548183558082101561832457825f528160205f200161832283830382618156565b505b5060208301825f5260205f205f5b838110156140765782516001600160a01b031682820155602090920191600101618332565b6001600160a01b03858116825284166020820152604081018390526080606082018190525f90614bb990830184617421565b5f60208284031215618399575f5ffd5b81516142c18161733d565b5f816183b2576183b2617d16565b505f190190565b7f646174613a696d6167652f7376672b786d6c3b6261736536342c00000000000081525f6142c1601a830184617f35565b634e487b7160e01b5f52603160045260245ffd5b6001600160e81b0319841681525f6184196003830185617f35565b60609390931b6001600160601b031916835250506014019291505056fe00000000000000000000000007a07a07a07a07a07a07a07a07a07a07a07a07a03c7376672077696474683d22373922206865696768743d223830222076696577426f783d22302030203739203830222066696c6c3d226e6f6e652220786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f737667223e203c6d61736b2069643d226d61736b305f3834395f3334313722207374796c653d226d61736b2d747970653a616c70686122206d61736b556e6974733d227573657253706163654f6e5573652220783d22302220793d2230222077696474683d22373922206865696768743d223830223e203c726563742077696474683d2237382e30303522206865696768743d223830222066696c6c3d2223433443344334222f3e203c2f6d61736b3e203c67206d61736b3d2275726c28236d61736b305f3834395f3334313729223e203c7265637420783d2231372e393534362220793d2231382e33353435222077696474683d2234322e3239343322206865696768743d2234332e32393138222066696c6c3d227768697465222f3e203c7061746820643d224d37342e323336392032312e393839324337362e363930382032342e303331352037382e323338392032382e323537372037372e363937392033312e333733334c37322e343136362036312e333235334337312e3836362036342e343437352036382e393539322036372e383739382036352e393632392036382e393631324c33372e313934372037392e333334344333342e313938342038302e343135372032392e373432312037392e363239392032372e323936342037372e3538394c332e3831312035382e3030323143312e33353730382035352e39353938202d302e31393233382035312e3734313720302e3335383134382034382e363139354c352e36333935312031382e3636373443362e31393030342031352e3534353220392e30393638372031322e313132392031322e303933322031312e303331364c34302e3835393920302e3636363435334334332e38353632202d302e3431343835372034382e3331323520302e3337303930392035302e3735383320322e343131384c37342e323336392032312e393839325a4d34392e373634352033352e343336394c35302e393336342032392e333531334c33392e393531372032392e333638374c34312e3531362032312e333432344c33372e393538332032312e333432344333372e393538332032312e333432342033342e363332382032372e323930312032372e333030362033302e323031394c32362e323839392033352e343530334c33312e303933362033352e34364333312e303933362033352e34362032392e343637342034332e303032392032382e393331362034352e373835344332372e353637372035322e383638322033302e393830362035372e383933392033362e323238312035372e383933394333382e383630362035372e383933392034312e3831372035372e383933392034352e303937322035372e383933394c34362e363532342035312e313636364334362e323734322035312e313636362034332e383031332035312e313636362033392e323333362035312e313636364333352e393336342035312e313636362033362e313039392034392e333138392033362e373433312034362e303330354c33382e373833382033352e343333334c34392e373634352033352e343336395a222066696c6c3d2223313443384646222f3e203c2f673e203c2f7376673e03346f418777de37a432a76ace912eeb3d1d63333a4f8c59df9ae07eb09732154142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa164736f6c6343000823000a","sourceMap":"1341:81849:56:-:0;;;78410:4143;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;78653:6;2968:78:58;;;;;;;;;;;;;-1:-1:-1;;;2968:78:58;;;;;;;;;;;;;;;;-1:-1:-1;;;2968:78:58;;;3029:4;3035:6;1454:5:27;1446;:13;;;;;;:::i;:::-;-1:-1:-1;1469:7:27;:17;1479:7;1469;:17;:::i;:::-;-1:-1:-1;;3066:4:51;3028:45;;-1:-1:-1;3100:13:51;3083:30;;3124:18;;3240:23;14765:36:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;14765:36:58;;;;;14652:156;3240:23:51;3340:22;;;;;;;3454:25;;;;;;;;;3489:26;;;;3525:32;;;;3737:4;3731:11;;3802:16;3792:27;;3843:12;;;3836:30;;;;3890:12;;;3883:33;3954:9;3947:4;3940:12;;3933:31;4002:9;3995:4;3988:12;;3981:31;4055:4;4042:18;;4093:34;;-1:-1:-1;;1231:7:39;:15;;-1:-1:-1;;1231:15:39;;;-1:-1:-1;;;;;;;1273:26:20;;1269:95;;1322:31;;-1:-1:-1;;;1322:31:20;;1350:1;1322:31;;;10549:51:73;10522:18;;1322:31:20;;;;;;;;1269:95;1373:32;1392:12;1373:18;:32::i;:::-;-1:-1:-1;78737:25:56;;:30;;:81:::2;;;78800:11;:18;78771;:25;:47;;78737:81;:155;;;;78867:18;:25;78838:18;:25;:54;;78737:155;78720:237;;;78924:22;;-1:-1:-1::0;;;78924:22:56::2;;;;;;;;;;;78720:237;79008:14;:28;;;:33;;79040:1;79008:33:::0;79004:91:::2;;79066:28;::::0;::::2;::::0;79050:45:::2;::::0;-1:-1:-1;;;79050:45:56;;10785:10:73;10773:23;;;79050:45:56::2;::::0;::::2;10755:42:73::0;10728:18;;79050:45:56::2;10611:192:73::0;79004:91:56::2;79105:11;::::0;;;:8:::2;:11;::::0;;;:28;;:11;:28;;::::2;::::0;;;:11;:28;::::2;::::0;;;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;79105:28:56::2;;::::0;;::::2;::::0;;;::::2;::::0;;79291:25;;79264:17:::2;:53:::0;;-1:-1:-1;;;;79264:53:56::2;-1:-1:-1::0;;;79264:53:56::2;::::0;;::::2;::::0;;;::::2;::::0;;;::::2;::::0;;79572:312:::2;79593:1;79588;:6;79572:312;;79615:23;79641:9;79651:1;79641:12;;;;;;;:::i;:::-;;;;79667:13;::::0;::::2;:25:::0;;79728:28:::2;::::0;::::2;::::0;-1:-1:-1;;;;;;;;79706:50:56;;;79667:25;::::2;::::0;;::::2;::::0;;;::::2;-1:-1:-1::0;;;;79706:50:56;;;;;;;;;::::2;;;::::0;;79792:28:::2;::::0;::::2;::::0;-1:-1:-1;79770:19:56;::::2;:50:::0;79641:12;-1:-1:-1;79667:25:56;79835:15:::2;79667:25:::0;79835:18:::2;::::0;::::2;;;;;:::i;:::-;;;;:26;;;:38;;;;;;;;;;;;;;;;;;79601:283;79596:3;;;;:::i;:::-;;;79572:312;;;;79933:9;79928:2487;79948:18;:25;79944:1;:29;79928:2487;;;79994:37;80034:18;80053:1;80034:21;;;;;;;;:::i;:::-;;;;;;;79994:61;;80069:21;80109:98;80134:18;80153:1;80134:21;;;;;;;;:::i;:::-;;;;;;;80157:16;:33;;;80192:11;80204:1;80192:14;;;;;;;;:::i;:::-;;;;;;;80109:24;;;:98;;:::i;:::-;80490:33:::0;;80069:138;;-1:-1:-1;;;;;;80490:49:56::2;::::0;;:136:::2;;-1:-1:-1::0;80571:33:56;;-1:-1:-1;;;;;80563:63:56;;::::2;;80490:136;80469:237;;;80666:25;;-1:-1:-1::0;;;80666:25:56::2;;;;;;;;;;;80469:237;80723:32;::::0;::::2;::::0;:45:::2;;::::0;80719:137:::2;;80808:32;::::0;::::2;::::0;80795:46:::2;::::0;-1:-1:-1;;;80795:46:56;;10785:10:73;10773:23;;;80795:46:56::2;::::0;::::2;10755:42:73::0;10728:18;;80795:46:56::2;10611:192:73::0;80719:137:56::2;80873:26;::::0;::::2;::::0;:39:::2;;::::0;80869:125:::2;;80952:26;::::0;;::::2;::::0;80939:40;;-1:-1:-1;;;80939:40:56;;10785:10:73;10773:23;;;80939:40:56::2;::::0;::::2;10755:42:73::0;10728:18;;80939:40:56::2;10611:192:73::0;80869:125:56::2;81045:22;81011:16;:30;;;:56;;;;;;;;:::i;:::-;;81007:147;;81108:16;:30;;;81094:45;;-1:-1:-1::0;;;81094:45:56::2;;;;;;;;:::i;81007:147::-;81171:26;::::0;::::2;::::0;:35:::2;81167:118;;81247:22;81233:37;;-1:-1:-1::0;;;81233:37:56::2;;;;;;;;:::i;81167:118::-;81302:29;::::0;::::2;::::0;:34:::2;;::::0;81298:129:::2;;81382:29;::::0;::::2;::::0;81363:49:::2;::::0;-1:-1:-1;;;81363:49:56;;12072:4:73;12060:17;;;81363:49:56::2;::::0;::::2;12042:36:73::0;12015:18;;81363:49:56::2;11898:186:73::0;81298:129:56::2;81516:9;81511:210;81532:1;81527;:6;81511:210;;81558:9;81568:1;81558:12;;;;;;;:::i;:::-;81586:33:::0;;81558:12:::2;::::0;;;::::2;::::0;;;::::2;:62:::0;;::::2;::::0;::::2;::::0;;-1:-1:-1;81558:62:56;;;::::2;::::0;;;::::2;::::0;;-1:-1:-1;;;;;;81558:62:56::2;-1:-1:-1::0;;;;;81558:62:56;;::::2;::::0;;;::::2;::::0;;81638:15:::2;81654:1:::0;81638:18:::2;::::0;::::2;;;;;:::i;:::-;81672:33:::0;;81638:18:::2;::::0;;;::::2;::::0;;;::::2;:68:::0;;::::2;::::0;::::2;::::0;;-1:-1:-1;81638:68:56;;;::::2;::::0;;;::::2;::::0;;-1:-1:-1;;;;;;81638:68:56::2;-1:-1:-1::0;;;;;81638:68:56;;::::2;::::0;;;::::2;::::0;;81535:3:::2;::::0;::::2;:::i;:::-;;;81511:210;;;;81783:11;81795:1;81783:14;;;;;;;;:::i;:::-;;::::0;;::::2;::::0;;;;;;;81746:33;;-1:-1:-1;;;;;81735:45:56::2;;::::0;;;:10:::2;:45:::0;;;;;;;;:62:::2;::::0;:45;:62:::2;:::i;:::-;-1:-1:-1::0;81822:33:56;;-1:-1:-1;;;;;81811:45:56;;::::2;;::::0;;;:10:::2;:45;::::0;;;;;;;;:64;;;;;;::::2;::::0;;;::::2;::::0;::::2;::::0;;::::2;-1:-1:-1::0;;;81811:64:56::2;-1:-1:-1::0;;;;81811:64:56;;;::::2;-1:-1:-1::0;;;81811:64:56::2;-1:-1:-1::0;;;;;;81811:64:56;;;;;;::::2;::::0;;;;::::2;::::0;;::::2;::::0;::::2;::::0;;::::2;::::0;::::2;::::0;81859:16;;81811:45;;:64;;:45;;-1:-1:-1;;;;81811:64:56;-1:-1:-1;;;;81811:64:56;;;;-1:-1:-1;;;81811:64:56;::::2;::::0;::::2;;;;;;:::i;:::-;;;::::0;;-1:-1:-1;81811:64:56::2;::::0;::::2;::::0;;;::::2;::::0;::::2;::::0;::::2;::::0;;::::2;::::0;::::2;::::0;;::::2;-1:-1:-1::0;;;81811:64:56::2;-1:-1:-1::0;;;;;81811:64:56;;;::::2;-1:-1:-1::0;;;81811:64:56::2;-1:-1:-1::0;;;;81811:64:56;::::2;;-1:-1:-1::0;;;81811:64:56::2;::::0;;;;-1:-1:-1;;;;81811:64:56;;;;;;;;;;::::2;;::::0;;;::::2;::::0;;82037:33;;82008:22:::2;-1:-1:-1::0;81988:44:56;:13:::2;:44;::::0;:83:::2;::::0;:44;;:48:::2;:83::i;:::-;-1:-1:-1::0;82131:26:56;;82094:33;;-1:-1:-1;;;;;82085:43:56;;::::2;82131:26;82085:43:::0;;;:8:::2;:43;::::0;;;;;;;:72;;;;82213:33;;82171:39;;;:24:::2;:39:::0;;;;;;:75;;-1:-1:-1;;;;;;82171:75:56::2;::::0;;;::::2;::::0;;;::::2;::::0;;82266:33;;82260:88:::2;::::0;82301:46:::2;82266:33:::0;-1:-1:-1;;;;;14385:32:58;;14296:128;82301:46:56::2;82260:5;:88::i;:::-;82368:36;82387:16;82368:36;;;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;;79975:3:56::2;;79928:2487;;;-1:-1:-1::0;;82521:25:56;;82496:22:::2;:50:::0;-1:-1:-1;1341:81849:56;;-1:-1:-1;;1341:81849:56;2912:187:20;3004:6;;;-1:-1:-1;;;;;3020:17:20;;;3004:6;3020:17;;;-1:-1:-1;;;;;;3020:17:20;;;;;;3052:40;;3004:6;;;;;;;;3052:40;;2985:16;;3052:40;2975:124;2912:187;:::o;49806:2694:56:-;50002:7;50029:9;:16;50049:2;50029:22;50025:53;;50060:18;;-1:-1:-1;;;50060:18:56;;;;;;;;;;;50025:53;50904:11;50924:9;50934:1;50924:12;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;50959:4:56;50951:12;;:17;;:38;;-1:-1:-1;50980:4:56;50972:12;;:17;;50951:38;50947:69;;;50998:18;;-1:-1:-1;;;50998:18:56;;;;;;;;;;;50947:69;51482:23;51508:53;51533:9;51544:16;51508:24;:53::i;:::-;52177:15;;52127:89;;51482:79;;-1:-1:-1;52056:7:56;;;;572:42:60;;-1:-1:-1;;;52150:25:56;52127:89;;52194:9;;51482:79;;52127:89;;;:::i;:::-;;;;-1:-1:-1;;52127:89:56;;;;;;;;;;;;;;-1:-1:-1;;;;;52127:89:56;-1:-1:-1;;;;;;52127:89:56;;;;;;;;;;52088:138;;;;52127:89;52088:138;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52055:171;;;;52241:2;52240:3;:26;;;;52247:6;:13;52264:2;52247:19;;52240:26;52236:66;;;52295:6;52275:27;;-1:-1:-1;;;52275:27:56;;;;;;;;:::i;52236:66::-;52328:6;52317:26;;;;;;;;;;;;:::i;:::-;52312:71;;52377:5;52352:31;;-1:-1:-1;;;52352:31:56;;;;;;;;:::i;52312:71::-;52449:44;52465:9;52476:16;52449:15;:44::i;:::-;52442:51;49806:2694;-1:-1:-1;;;;;;;;49806:2694:56:o;8289:150:49:-;8359:4;8382:50;8387:3;-1:-1:-1;;;;;8407:23:49;;8382:4;:50::i;:::-;8375:57;;8289:150;;;;;:::o;9978:327:27:-;-1:-1:-1;;;;;10045:16:27;;10041:87;;10084:33;;-1:-1:-1;;;10084:33:27;;10114:1;10084:33;;;10549:51:73;10522:18;;10084:33:27;10403:203:73;10041:87:27;10137:21;10161:32;10169:2;10173:7;10137:21;10161:7;:32::i;:::-;10137:56;-1:-1:-1;;;;;;10207:27:27;;;10203:96;;10257:31;;-1:-1:-1;;;10257:31:27;;10285:1;10257:31;;;10549:51:73;10522:18;;10257:31:27;10403:203:73;10203:96:27;10031:274;9978:327;;:::o;48864:595:56:-;49014:12;49328:6;:13;49345:2;49328:19;49324:50;;49356:18;;-1:-1:-1;;;49356:18:56;;;;;;;;;;;49324:50;49391:61;;;;48437:8;;49427:6;;49435:16;;49391:61;;;:::i;:::-;;;;;;;;;;;;;49384:68;;48864:595;;;;:::o;52610:363::-;53878:4;53872:11;;53737:4;53721:21;;;53916:10;-1:-1:-1;;;;;53912:83:56;53896:100;;54042:14;;;54036:21;54016:18;;;54009:49;54104:14;;;;54098:21;54078:18;;;54071:49;54139:24;;;-1:-1:-1;52785:39:56;;;:24;:39;;;;;;;-1:-1:-1;;;;;52785:39:56;:53;52781:86;;52847:20;;-1:-1:-1;;;52847:20:56;;;;;;;;;;;52781:86;52877:39;;;;:24;:39;;;;;:58;;-1:-1:-1;;;;;52877:58:56;;-1:-1:-1;;;;;;52877:58:56;;;;;;52610:363;;;;:::o;2241:406:49:-;2304:4;4360:21;;;:14;;;:21;;;;;;2320:321;;-1:-1:-1;2362:23:49;;;;;;;;:11;:23;;;;;;;;;;;;;2544:18;;2520:21;;;:14;;;:21;;;;;;:42;;;;2576:11;;2320:321;-1:-1:-1;2625:5:49;2618:12;;2518:625:30;2613:7;;2656:32;2670:2;2674:7;2683:4;2656:13;:32::i;:::-;2632:56;-1:-1:-1;;;;;;2703:27:30;;2699:210;;2746:40;2778:7;3949:10;:17;;3922:24;;;;:15;:24;;;;;:44;;;3976:24;;;;;;;;;;;;3846:161;2746:40;2699:210;;;2824:2;-1:-1:-1;;;;;2807:19:30;:13;-1:-1:-1;;;;;2807:19:30;;2803:106;;2842:56;2875:13;2890:7;2842:32;:56::i;:::-;-1:-1:-1;;;;;2922:16:30;;2918:188;;2954:45;2991:7;2954:36;:45::i;:::-;2918:188;;;3037:2;-1:-1:-1;;;;;3020:19:30;:13;-1:-1:-1;;;;;3020:19:30;;3016:90;;3055:40;3083:2;3087:7;3055:27;:40::i;:::-;3123:13;2518:625;-1:-1:-1;;;;2518:625:30:o;8861:795:27:-;8947:7;5824:16;;;:7;:16;;;;;;-1:-1:-1;;;;;5824:16:27;;;;9058:18;;;9054:86;;9092:37;9109:4;9115;9121:7;9092:16;:37::i;:::-;-1:-1:-1;;;;;9184:18:27;;;9180:256;;9300:48;9317:1;9321:7;9317:1;;9300:8;:48::i;:::-;-1:-1:-1;;;;;9391:15:27;;;;;;:9;:15;;;;;:20;;-1:-1:-1;;9391:20:27;;;9180:256;-1:-1:-1;;;;;9450:16:27;;;9446:107;;-1:-1:-1;;;;;9510:13:27;;;;;;:9;:13;;;;;:18;;9527:1;9510:18;;;9446:107;9563:16;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;9563:21:27;-1:-1:-1;;;;;9563:21:27;;;;;;;;;9600:27;;9563:16;;9600:27;;;;;;;9645:4;8861:795;-1:-1:-1;;;;8861:795:27:o;4624:1055:30:-;4886:22;4911:15;4921:4;4911:9;:15::i;:::-;4936:18;4957:26;;;:17;:26;;;;;;;;;-1:-1:-1;;;;;5058:18:30;;;;:12;:18;;;;;;4886:40;;-1:-1:-1;4957:26:30;5180:28;;;5176:325;;5224:19;5246:35;;;;;;;;;;;;5296:31;;;;;;:45;;;5413:30;;:17;:30;;;;;:43;;;5176:325;5594:26;;;;:17;:26;;;;;;;;5587:33;;;5637:35;;;;-1:-1:-1;5637:35:30;;5630:42;-1:-1:-1;4624:1055:30:o;5967:1061::-;6241:10;:17;6216:22;;6241:21;;6261:1;;6241:21;:::i;:::-;6272:18;6293:24;;;:15;:24;;;;;;6661:10;:26;;6216:46;;-1:-1:-1;6293:24:30;;6216:46;;6661:26;;;;;;:::i;:::-;;;;;;;;;6639:48;;6723:11;6698:10;6709;6698:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;6802:28;;;:15;:28;;;;;;;:41;;;6971:24;;;;;6964:31;7005:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;6038:990;;;5967:1061;:::o;3437:214::-;3521:14;3554:1;3538:13;3548:2;3538:9;:13::i;:::-;:17;;;;:::i;:::-;-1:-1:-1;;;;;3565:16:30;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;3609:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;3437:214:30:o;7105:368:27:-;7217:38;7231:5;7238:7;7247;7217:13;:38::i;:::-;7212:255;;-1:-1:-1;;;;;7275:19:27;;7271:186;;7321:31;;-1:-1:-1;;;7321:31:27;;;;;17159:25:73;;;17132:18;;7321:31:27;17013:177:73;7271:186:27;7398:44;;-1:-1:-1;;;7398:44:27;;-1:-1:-1;;;;;17387:32:73;;7398:44:27;;;17369:51:73;17436:18;;;17429:34;;;17342:18;;7398:44:27;17195:274:73;14794:662:27;14954:9;:31;;;-1:-1:-1;;;;;;14967:18:27;;;;14954:31;14950:460;;;15001:13;15017:22;15031:7;15017:13;:22::i;:::-;15001:38;-1:-1:-1;;;;;;15167:18:27;;;;;;:35;;;15198:4;-1:-1:-1;;;;;15189:13:27;:5;-1:-1:-1;;;;;15189:13:27;;;15167:35;:69;;;;-1:-1:-1;;;;;;4038:25:27;;;4015:4;4038:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;15206:30;15167:69;15163:142;;;15263:27;;-1:-1:-1;;;15263:27:27;;-1:-1:-1;;;;;10567:32:73;;15263:27:27;;;10549:51:73;10522:18;;15263:27:27;10403:203:73;15163:142:27;15323:9;15319:81;;;15377:7;15373:2;-1:-1:-1;;;;;15357:28:27;15366:5;-1:-1:-1;;;;;15357:28:27;;;;;;;;;;;15319:81;14987:423;14950:460;-1:-1:-1;;15420:24:27;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;15420:29:27;-1:-1:-1;;;;;15420:29:27;;;;;;;;;;14794:662::o;1919:208::-;1982:7;-1:-1:-1;;;;;2005:19:27;;2001:87;;2047:30;;-1:-1:-1;;;2047:30:27;;2074:1;2047:30;;;10549:51:73;10522:18;;2047:30:27;10403:203:73;2001:87:27;-1:-1:-1;;;;;;2104:16:27;;;;;:9;:16;;;;;;;1919:208::o;6401:272::-;6504:4;-1:-1:-1;;;;;6539:21:27;;;;;;:127;;;6586:7;-1:-1:-1;;;;;6577:16:27;:5;-1:-1:-1;;;;;6577:16:27;;:52;;;-1:-1:-1;;;;;;4038:25:27;;;4015:4;4038:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;6597:32;6577:88;;;-1:-1:-1;;6033:7:27;6059:24;;;:15;:24;;;;;;-1:-1:-1;;;;;6059:24:27;;;6633:32;;;;6520:146;-1:-1:-1;6401:272:27:o;16212:241::-;16275:7;5824:16;;;:7;:16;;;;;;-1:-1:-1;;;;;5824:16:27;;16337:88;;16383:31;;-1:-1:-1;;;16383:31:27;;;;;17159:25:73;;;17132:18;;16383:31:27;17013:177:73;14:127;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:253;218:2;212:9;260:4;248:17;;-1:-1:-1;;;;;280:34:73;;316:22;;;277:62;274:88;;;342:18;;:::i;:::-;378:2;371:22;146:253;:::o;404:::-;476:2;470:9;518:4;506:17;;-1:-1:-1;;;;;538:34:73;;574:22;;;535:62;532:88;;;600:18;;:::i;662:253::-;734:2;728:9;776:4;764:17;;-1:-1:-1;;;;;796:34:73;;832:22;;;793:62;790:88;;;858:18;;:::i;920:275::-;991:2;985:9;1056:2;1037:13;;-1:-1:-1;;1033:27:73;1021:40;;-1:-1:-1;;;;;1076:34:73;;1112:22;;;1073:62;1070:88;;;1138:18;;:::i;:::-;1174:2;1167:22;920:275;;-1:-1:-1;920:275:73:o;1200:167::-;1278:13;;1331:10;1320:22;;1310:33;;1300:61;;1357:1;1354;1347:12;1300:61;1200:167;;;:::o;1372:196::-;1445:4;-1:-1:-1;;;;;1467:30:73;;1464:56;;;1500:18;;:::i;:::-;-1:-1:-1;1545:1:73;1541:14;1557:4;1537:25;;1372:196::o;1573:177::-;1652:13;;-1:-1:-1;;;;;1694:31:73;;1684:42;;1674:70;;1740:1;1737;1730:12;1755:164;1831:13;;1880;;1873:21;1863:32;;1853:60;;1909:1;1906;1899:12;1924:160;2001:13;;2054:4;2043:16;;2033:27;;2023:55;;2074:1;2071;2064:12;2089:1404;2167:5;2220:3;2213:4;2205:6;2201:17;2197:27;2187:55;;2238:1;2235;2228:12;2187:55;2271:6;2265:13;2298:77;2314:60;2367:6;2314:60;:::i;:::-;2298:77;:::i;:::-;2399:3;2423:6;2418:3;2411:19;2455:4;2450:3;2446:14;2439:21;;2519:4;2511;2503:6;2499:17;2491:6;2487:30;2483:41;2469:55;;2547:3;2539:6;2536:15;2533:35;;;2564:1;2561;2554:12;2533:35;2600:4;2592:6;2588:17;2614:848;2630:6;2625:3;2622:15;2614:848;;;2708:4;2702:3;2697;2693:13;2689:24;2686:44;;;2726:1;2723;2716:12;2686:44;2756:22;;:::i;:::-;2805:34;2835:3;2805:34;:::i;:::-;2798:5;2791:49;2878:44;2916:4;2911:3;2907:14;2878:44;:::i;:::-;2871:4;2864:5;2860:16;2853:70;2959:42;2997:2;2992:3;2988:12;2959:42;:::i;:::-;2954:2;2947:5;2943:14;2936:66;3045:2;3040:3;3036:12;3030:19;3084:1;3075:7;3072:14;3062:42;;3100:1;3097;3090:12;3062:42;3135:2;3124:14;;3117:31;3185:41;3221:3;3212:13;;3185:41;:::i;:::-;3179:3;3172:5;3168:15;3161:66;3264:42;3301:3;3296;3292:13;3264:42;:::i;:::-;3258:3;3251:5;3247:15;3240:67;3344:42;3381:3;3376;3372:13;3344:42;:::i;:::-;3338:3;3327:15;;3320:67;3400:18;;3447:4;3438:14;;;;2656:4;2647:14;2614:848;;;-1:-1:-1;3480:7:73;2089:1404;-1:-1:-1;;;;;2089:1404:73:o;3498:555::-;3551:5;3604:3;3597:4;3589:6;3585:17;3581:27;3571:55;;3622:1;3619;3612:12;3571:55;3649:13;;-1:-1:-1;;;;;3674:30:73;;3671:56;;;3707:18;;:::i;:::-;3751:59;3798:2;3775:17;;-1:-1:-1;;3771:31:73;3804:4;3767:42;3751:59;:::i;:::-;3835:6;3826:7;3819:23;3889:3;3882:4;3873:6;3865;3861:19;3857:30;3854:39;3851:59;;;3906:1;3903;3896:12;3851:59;3964:6;3957:4;3949:6;3945:17;3938:4;3929:7;3925:18;3919:52;4020:1;3991:20;;;4013:4;3987:31;3980:42;;;;3995:7;3498:555;-1:-1:-1;;;3498:555:73:o;4058:846::-;4121:5;4174:3;4167:4;4159:6;4155:17;4151:27;4141:55;;4192:1;4189;4182:12;4141:55;4225:6;4219:13;4252:77;4268:60;4321:6;4268:60;:::i;4252:77::-;4353:3;4377:6;4372:3;4365:19;4409:4;4404:3;4400:14;4393:21;;4470:4;4460:6;4457:1;4453:14;4445:6;4441:27;4437:38;4423:52;;4498:3;4490:6;4487:15;4484:35;;;4515:1;4512;4505:12;4484:35;4551:4;4543:6;4539:17;4565:308;4581:6;4576:3;4573:15;4565:308;;;4656:10;;-1:-1:-1;;;;;4682:35:73;;4679:55;;;4730:1;4727;4720:12;4679:55;4759:69;4824:3;4817:4;4803:11;4795:6;4791:24;4787:35;4759:69;:::i;:::-;4747:82;;-1:-1:-1;4858:4:73;4849:14;;;;4598;4565:308;;4909:1170;4991:5;5044:3;5037:4;5029:6;5025:17;5021:27;5011:55;;5062:1;5059;5052:12;5011:55;5095:6;5089:13;5122:77;5138:60;5191:6;5138:60;:::i;5122:77::-;5223:3;5247:6;5242:3;5235:19;5279:4;5274:3;5270:14;5263:21;;5340:4;5330:6;5327:1;5323:14;5315:6;5311:27;5307:38;5293:52;;5368:3;5360:6;5357:15;5354:35;;;5385:1;5382;5375:12;5354:35;5421:4;5413:6;5409:17;5435:613;5451:6;5446:3;5443:15;5435:613;;;5526:10;;-1:-1:-1;;;;;5552:35:73;;5549:55;;;5600:1;5597;5590:12;5549:55;5627:24;;5699:4;5675:12;;;-1:-1:-1;;5671:26:73;5667:37;5664:57;;;5717:1;5714;5707:12;5664:57;5747:22;;:::i;:::-;5812:4;5804:13;;5798:20;-1:-1:-1;;;;;5834:32:73;;5831:52;;;5879:1;5876;5869:12;5831:52;5910:62;5968:3;5961:4;5950:8;5946:2;5942:17;5938:28;5910:62;:::i;:::-;5896:77;;-1:-1:-1;5986:18:73;;-1:-1:-1;6033:4:73;6024:14;;;;5468;5435:613;;6084:1631;6372:6;6380;6388;6396;6404;6448:9;6439:7;6435:23;6478:3;6474:2;6470:12;6467:32;;;6495:1;6492;6485:12;6467:32;6519:4;6515:2;6511:13;6508:33;;;6537:1;6534;6527:12;6508:33;;6563:22;;:::i;:::-;6630:16;;6655:22;;6743:2;6728:18;;;6722:25;6763:14;;;6756:31;6853:2;6838:18;;;6832:25;6873:14;;;6866:31;6929:48;6973:2;6958:18;;6929:48;:::i;:::-;6924:2;6913:14;;6906:72;7046:4;7031:20;;7025:27;6917:5;;-1:-1:-1;;;;;;7064:30:73;;7061:50;;;7107:1;7104;7097:12;7061:50;7130:85;7207:7;7198:6;7187:9;7183:22;7130:85;:::i;:::-;7261:3;7246:19;;7240:26;7120:95;;-1:-1:-1;7240:26:73;-1:-1:-1;;;;;;7278:32:73;;7275:52;;;7323:1;7320;7313:12;7275:52;7346:72;7410:7;7399:8;7388:9;7384:24;7346:72;:::i;:::-;7464:3;7449:19;;7443:26;7336:82;;-1:-1:-1;7443:26:73;-1:-1:-1;;;;;;7481:32:73;;7478:52;;;7526:1;7523;7516:12;7478:52;7549:91;7632:7;7621:8;7610:9;7606:24;7549:91;:::i;:::-;7539:101;;;7659:50;7704:3;7693:9;7689:19;7659:50;:::i;:::-;7649:60;;6084:1631;;;;;;;;:::o;7720:380::-;7799:1;7795:12;;;;7842;;;7863:61;;7917:4;7909:6;7905:17;7895:27;;7863:61;7970:2;7962:6;7959:14;7939:18;7936:38;7933:161;;8016:10;8011:3;8007:20;8004:1;7997:31;8051:4;8048:1;8041:15;8079:4;8076:1;8069:15;7933:161;;7720:380;;;:::o;8231:692::-;8333:2;8328:3;8325:11;8322:595;;;8370:10;8365:3;8362:19;8359:548;;;8422:5;8419:1;8412:16;8470:4;8467:1;8457:18;8535:2;8523:10;8519:19;8516:1;8512:27;8574:4;8562:10;8559:20;8556:45;;;-1:-1:-1;8598:1:73;8556:45;8637:23;;;;8707:2;8698:12;;8695:1;8691:20;8687:39;8752:1;8770:123;8784:2;8781:1;8778:9;8770:123;;;8873:1;8852:19;;;8845:30;8802:1;8795:9;8770:123;;;8774:3;;;8231:692;;;:::o;9099:1299::-;9219:10;;-1:-1:-1;;;;;9241:30:73;;9238:56;;;9274:18;;:::i;:::-;9303:97;9393:6;9353:38;9385:4;9379:11;9353:38;:::i;:::-;9347:4;9303:97;:::i;:::-;9449:4;9480:2;9469:14;;9497:1;9492:649;;;;10185:1;10202:6;10199:89;;;-1:-1:-1;10254:19:73;;;10248:26;10199:89;-1:-1:-1;;9056:1:73;9052:11;;;9048:24;9044:29;9034:40;9080:1;9076:11;;;9031:57;10301:81;;9462:930;;9492:649;8178:1;8171:14;;;8215:4;8202:18;;-1:-1:-1;;9528:20:73;;;9646:222;9660:7;9657:1;9654:14;9646:222;;;9742:19;;;9736:26;9721:42;;9849:4;9834:20;;;;9802:1;9790:14;;;;9676:12;9646:222;;;9650:3;9896:6;9887:7;9884:19;9881:201;;;9957:19;;;9951:26;-1:-1:-1;;10040:1:73;10036:14;;;10052:3;10032:24;10028:37;10024:42;10009:58;9994:74;;9881:201;;;10128:1;10119:6;10116:1;10112:14;10108:22;10102:4;10095:36;9462:930;;;;9099:1299;;:::o;10808:127::-;10869:10;10864:3;10860:20;10857:1;10850:31;10900:4;10897:1;10890:15;10924:4;10921:1;10914:15;10940:127;11001:10;10996:3;10992:20;10989:1;10982:31;11032:4;11029:1;11022:15;11056:4;11053:1;11046:15;11072:135;11111:3;11132:17;;;11129:43;;11152:18;;:::i;:::-;-1:-1:-1;11199:1:73;11188:13;;11072:135::o;11212:127::-;11273:10;11268:3;11264:20;11261:1;11254:31;11304:4;11301:1;11294:15;11328:4;11325:1;11318:15;11344:243;11431:1;11424:5;11421:12;11411:143;;11476:10;11471:3;11467:20;11464:1;11457:31;11511:4;11508:1;11501:15;11539:4;11536:1;11529:15;11411:143;11563:18;;11344:243::o;11592:221::-;11745:2;11730:18;;11757:50;11734:9;11789:6;11757:50;:::i;13391:835::-;13547:4;13589:3;13578:9;13574:19;13566:27;;13656:1;13652;13647:3;13643:11;13639:19;13630:6;13624:13;13620:39;13609:9;13602:58;13728:10;13720:4;13712:6;13708:17;13702:24;13698:41;13691:4;13680:9;13676:20;13669:71;13808:10;13800:4;13792:6;13788:17;13782:24;13778:41;13771:4;13760:9;13756:20;13749:71;13867:4;13859:6;13855:17;13849:24;13882:67;13943:4;13932:9;13928:20;13914:12;13882:67;:::i;:::-;;14019:4;14011:6;14007:17;14001:24;13994:32;13987:40;13980:4;13969:9;13965:20;13958:70;14096:4;14088;14080:6;14076:17;14070:24;14066:35;14059:4;14048:9;14044:20;14037:65;14151:4;14143:6;14139:17;14133:24;14166:54;14214:4;14203:9;14199:20;14183:14;11885:4;11874:16;11862:29;;11818:75;14166:54;;13391:835;;;;:::o;14231:299::-;14283:3;14321:5;14315:12;14348:6;14343:3;14336:19;14404:6;14397:4;14390:5;14386:16;14379:4;14374:3;14370:14;14364:47;14456:1;14449:4;14440:6;14435:3;14431:16;14427:27;14420:38;14519:4;14512:2;14508:7;14503:2;14495:6;14491:15;14487:29;14482:3;14478:39;14474:50;14467:57;;;14231:299;;;;:::o;14535:570::-;14774:2;14763:9;14756:21;14737:4;14800:55;14851:2;14840:9;14836:18;14828:6;14800:55;:::i;:::-;14903:9;14895:6;14891:22;14886:2;14875:9;14871:18;14864:50;14937:43;14973:6;14965;14937:43;:::i;:::-;14923:57;;15028:9;15020:6;15016:22;15011:2;15000:9;14996:18;14989:50;15056:43;15092:6;15084;15056:43;:::i;:::-;15048:51;14535:570;-1:-1:-1;;;;;;14535:570:73:o;15110:211::-;15151:3;15189:5;15183:12;15233:6;15226:4;15219:5;15215:16;15210:3;15204:36;15295:1;15259:16;;15284:13;;;-1:-1:-1;15259:16:73;;15110:211;-1:-1:-1;15110:211:73:o;15326:189::-;15455:3;15480:29;15505:3;15497:6;15480:29;:::i;15520:228::-;15667:2;15656:9;15649:21;15630:4;15687:55;15738:2;15727:9;15723:18;15715:6;15687:55;:::i;15753:202::-;15820:6;15873:2;15861:9;15852:7;15848:23;15844:32;15841:52;;;15889:1;15886;15879:12;15841:52;15912:37;15939:9;15912:37;:::i;15960:369::-;16161:2;16150:9;16143:21;16124:4;16199:6;16193:13;16242:2;16237;16226:9;16222:18;16215:30;16262:61;16319:2;16308:9;16304:18;16290:12;16262:61;:::i;16334:409::-;-1:-1:-1;;;;;;16547:31:73;;16535:44;;16517:3;16601:37;16635:1;16626:11;;16618:6;16601:37;:::i;:::-;16694:2;16665:15;;;;-1:-1:-1;;;;;;16661:45:73;16647:60;;-1:-1:-1;;16734:2:73;16723:14;;16334:409;-1:-1:-1;;16334:409:73:o;16748:128::-;16815:9;;;16836:11;;;16833:37;;;16850:18;;:::i;16881:127::-;16942:10;16937:3;16933:20;16930:1;16923:31;16973:4;16970:1;16963:15;16997:4;16994:1;16987:15;17195:274;1341:81849:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608060405260043610610441575f3560e01c80636739833111610236578063a71954ec11610134578063c53a0292116100b3578063eb8535c211610078578063eb8535c214610db5578063f062476814610de2578063f2fde38b14610e01578063f66a25a414610e20578063fa52c7d814610e3f575f5ffd5b8063c53a029214610d25578063c87b56dd14610d39578063dc01f60d14610d58578063e5a2282714610d83578063e985e9c514610d96575f5ffd5b8063b88d4fde116100f9578063b88d4fde14610c16578063b97dd9e214610c35578063babc394f14610c66578063bd3e759414610c7a578063c05df7ac14610d06575f5ffd5b8063a71954ec14610b9c578063a7c5e70114610bbb578063aaffd27014610bcf578063ad6cfb8614610be3578063b5545a3c14610c02575f5ffd5b80637d06fdf8116101c05780638cc05eda116101855780638cc05eda14610b005780638da5cb5b14610b2c57806395d89b4114610b4f578063a0201be514610b63578063a22cb46514610b82575f5ffd5b80637d06fdf814610a395780638456cb5914610a8657806384b0196e14610a9a578063863623bb14610ac157806389afcb4414610ae1575f5ffd5b80636d3c6275116102065780636d3c6275146109a957806370a08231146109c8578063715018a6146109e757806379ee54f7146109fb5780637b55a30014610a1a575f5ffd5b806367398331146109195780636a6278421461093f5780636a9265911461095e5780636ae9942c1461097d575f5ffd5b80632a8e33d7116103435780633f4ba83a116102cd57806358e88dbb1161029257806358e88dbb1461088757806359ca93b6146108a05780635c975abb146108bf57806362fcde4b146108db5780636352211e146108fa575f5ffd5b80633f4ba83a146107f757806342842e0e1461080b57806343201d301461082a57806343401a001461083d5780634f6ccce714610868575f5ffd5b80633434735f116103135780633434735f1461072f578063355811a714610749578063374ed18c146107515780633894228e1461077d5780633e28391d146107d8575f5ffd5b80632a8e33d7146106bf5780632b9f4985146106de5780632f745c59146106fd5780632fb0d0251461071c575f5ffd5b80630f15f4c0116103cf5780631904bb2e116103945780631904bb2e146106255780632228dfa01461065157806323a404301461066557806323b872dd146106795780632870259d14610693575f5ffd5b80630f15f4c0146105915780630f4346fa146105a5578063127ce8e8146105c457806315b5709a146105d757806318160ddd14610611575f5ffd5b806306fdde031161041557806306fdde03146104e95780630752e017146104fd578063081812fc1461051c578063095ea7b3146105535780630a36cdef14610572575f5ffd5b80628d6acd1461044557806301ffc9a71461046d57806302ae337b1461049c578063059b916c146104bd575b5f5ffd5b348015610450575f5ffd5b5061045a600e5481565b6040519081526020015b60405180910390f35b348015610478575f5ffd5b5061048c610487366004617352565b610eca565b6040519015158152602001610464565b3480156104a7575f5ffd5b506104bb6104b63660046173b4565b610ef4565b005b3480156104c8575f5ffd5b506104dc6104d7366004617408565b6110d7565b604051610464919061744f565b3480156104f4575f5ffd5b506104dc6111a8565b348015610508575f5ffd5b506104bb610517366004617461565b611237565b348015610527575f5ffd5b5061053b610536366004617461565b61129f565b6040516001600160a01b039091168152602001610464565b34801561055e575f5ffd5b506104bb61056d366004617478565b6112c6565b34801561057d575f5ffd5b506104bb61058c3660046173b4565b6112df565b34801561059c575f5ffd5b506104bb6115b3565b3480156105b0575f5ffd5b506104bb6105bf366004617408565b611632565b6104bb6105d23660046175dd565b611779565b3480156105e2575f5ffd5b506105f66105f1366004617408565b611a12565b60408051938452602084019290925290820152606001610464565b34801561061c575f5ffd5b5060085461045a565b348015610630575f5ffd5b5061064461063f366004617408565b611a78565b604051610464919061772c565b34801561065c575f5ffd5b506104bb611b5b565b348015610670575f5ffd5b5061045a611c1b565b348015610684575f5ffd5b506104bb61056d36600461773a565b34801561069e575f5ffd5b506106b26106ad366004617774565b611c2a565b6040516104649190617792565b3480156106ca575f5ffd5b506104bb6106d93660046177ec565b611da8565b3480156106e9575f5ffd5b506104bb6106f8366004617408565b611df8565b348015610708575f5ffd5b5061045a610717366004617478565b611ebd565b6104bb61072a366004617807565b611f20565b34801561073a575f5ffd5b5061053b6002600160a01b0381565b6104bb611fa6565b34801561075c575f5ffd5b5061077061076b36600461787f565b612024565b60405161046491906178dd565b348015610788575f5ffd5b5061079c610797366004617461565b6122b9565b604080519586526001600160401b03909416602086015263ffffffff9283169385019390935216606083015260ff16608082015260a001610464565b3480156107e3575f5ffd5b5061048c6107f2366004617408565b61230d565b348015610802575f5ffd5b506104bb612333565b348015610816575f5ffd5b506104bb61082536600461773a565b612345565b6104bb610838366004617408565b61235f565b348015610848575f5ffd5b5061045a610857366004617408565b602f6020525f908152604090205481565b348015610873575f5ffd5b5061045a610882366004617461565b61268e565b348015610892575f5ffd5b5060305461048c9060ff1681565b3480156108ab575f5ffd5b5061079c6108ba366004617461565b6126e3565b3480156108ca575f5ffd5b50600d54610100900460ff1661048c565b3480156108e6575f5ffd5b506104bb6108f536600461794e565b6126f2565b348015610905575f5ffd5b5061053b610914366004617461565b6127f9565b348015610924575f5ffd5b5061092d612803565b60405160ff9091168152602001610464565b34801561094a575f5ffd5b506104bb610959366004617408565b612815565b348015610969575f5ffd5b5061048c61097836600461796f565b612892565b348015610988575f5ffd5b5061099c61099736600461787f565b61292d565b60405161046491906179a1565b3480156109b4575f5ffd5b5061048c6109c3366004617408565b612a81565b3480156109d3575f5ffd5b5061045a6109e2366004617408565b612b05565b3480156109f2575f5ffd5b506104bb612b4a565b348015610a06575f5ffd5b5061045a610a15366004617408565b612b5b565b348015610a25575f5ffd5b506104bb610a34366004617a04565b612b9d565b348015610a44575f5ffd5b50610a4d612d12565b604051610464919081518152602080830151908201526040808301519082015260609182015163ffffffff169181019190915260800190565b348015610a91575f5ffd5b506104bb612d8f565b348015610aa5575f5ffd5b50610aae612d9f565b6040516104649796959493929190617a73565b348015610acc575f5ffd5b5061053b5f5160206184375f395f51905f5281565b348015610aec575f5ffd5b506104bb610afb366004617408565b612e06565b348015610b0b575f5ffd5b50610b1f610b1a366004617774565b612eb6565b6040516104649190617b09565b348015610b37575f5ffd5b50600d546201000090046001600160a01b031661053b565b348015610b5a575f5ffd5b506104dc612eca565b348015610b6e575f5ffd5b506106b2610b7d36600461787f565b612ed9565b348015610b8d575f5ffd5b506104bb61056d366004617b1b565b348015610ba7575f5ffd5b50610a4d610bb6366004617b60565b612f92565b348015610bc6575f5ffd5b50610b1f61300c565b348015610bda575f5ffd5b506104bb613018565b348015610bee575f5ffd5b5061045a610bfd366004617b79565b613288565b348015610c0d575f5ffd5b506104bb613369565b348015610c21575f5ffd5b506104bb610c30366004617bda565b613512565b348015610c40575f5ffd5b50600d54600160b01b900463ffffffff1660405163ffffffff9091168152602001610464565b348015610c71575f5ffd5b5061077061352a565b348015610c85575f5ffd5b50610ccf610c94366004617408565b602e6020525f90815260409020805460019091015460ff821691610100810463ffffffff1691600160281b9091046001600160a01b03169084565b6040805160ff909516855263ffffffff90931660208501526001600160a01b03909116918301919091526060820152608001610464565b348015610d11575f5ffd5b5061092d610d20366004617c3d565b613637565b348015610d30575f5ffd5b506104bb613756565b348015610d44575f5ffd5b506104dc610d53366004617461565b6137eb565b348015610d63575f5ffd5b5061045a610d72366004617408565b60316020525f908152604090205481565b6104bb610d91366004617c56565b61385b565b348015610da1575f5ffd5b5061048c610db0366004617c87565b613d40565b348015610dc0575f5ffd5b50600d54600160d81b900461ffff1660405161ffff9091168152602001610464565b348015610ded575f5ffd5b506104bb610dfc366004617c56565b613d6d565b348015610e0c575f5ffd5b506104bb610e1b366004617408565b613ded565b348015610e2b575f5ffd5b506104bb610e3a366004617b1b565b613e27565b348015610e4a575f5ffd5b50610eb7610e59366004617408565b600f6020525f90815260409020546001600160a01b0381169063ffffffff600160a01b8204811691600160c01b81049091169060ff600160e01b8204811691600160e81b8104821691600160f01b8204811691600160f81b90041687565b6040516104649796959493929190617caf565b5f6001600160e01b0319821663780e9d6360e01b1480610eee5750610eee82613f12565b92915050565b336002600160a01b0314610f2257604051637eb3357160e01b81523360048201526024015b60405180910390fd5b5f5b818110156110d25736838383818110610f3f57610f3f617d02565b6040029190910191505f9050610f586020830183617408565b90506001600160a01b0381161580610f7857506001600160a01b03818116145b15610f845750506110ca565b610f946109c36020840184617408565b15610fa05750506110ca565b5f600f5f610fb16020860186617408565b6001600160a01b0316815260208101919091526040015f2054600160e01b900460ff166006811115610fe557610fe561768c565b03610ff15750506110ca565b60208201803590600b905f906110079086617408565b6001600160a01b03166001600160a01b031681526020019081526020015f2054111561107b5760208201803590600b905f906110439086617408565b6001600160a01b03166001600160a01b031681526020019081526020015f205f8282546110709190617d2a565b909155506110909050565b61109061108b6020840184617408565b613f61565b7f11a09f9b32440d896abff7453bf53f8b26ffcb18dae4dca227f7a76e2acc3a64826040516110bf9190617d3d565b60405180910390a150505b600101610f24565b505050565b6001600160a01b0381165f908152602960205260408120805460609291906110fe90617d66565b80601f016020809104026020016040519081016040528092919081815260200182805461112a90617d66565b80156111755780601f1061114c57610100808354040283529160200191611175565b820191905f5260205f20905b81548152906001019060200180831161115857829003601f168201915b5050505050905080515f03610eee57604051635f7ba20d60e11b81526001600160a01b0384166004820152602401610f19565b60605f80546111b690617d66565b80601f01602080910402602001604051908101604052809291908181526020018280546111e290617d66565b801561122d5780601f106112045761010080835404028352916020019161122d565b820191905f5260205f20905b81548152906001019060200180831161121057829003601f168201915b5050505050905090565b61123f61407e565b604051627b8a6760e11b8152600481018290523360248201525f5160206184375f395f51905f529062f714ce906044015f604051808303815f87803b158015611286575f5ffd5b505af1158015611298573d5f5f3e3d5ffd5b5050505050565b5f6112a9826140b2565b505f828152600460205260409020546001600160a01b0316610eee565b60405163dc8d8db760e01b815260040160405180910390fd5b336002600160a01b031461130857604051637eb3357160e01b8152336004820152602401610f19565b5f80826001600160401b03811115611322576113226174dd565b60405190808252806020026020018201604052801561134b578160200160208202803683370190505b5090505f5b838110156114b4573685858381811061136b5761136b617d02565b905060400201905080602001355f0361138457506114ac565b5f6113926020830183617408565b90506001600160a01b03811615806113b257506001600160a01b03818116145b156113be5750506114ac565b6113ce6109c36020840184617408565b156113da5750506114ac565b5f600f816113eb6020860186617408565b6001600160a01b0316815260208082019290925260409081015f90812054600160f01b900460ff16808252600a8452918120549193509091600b90829061143490880188617408565b6001600160a01b03166001600160a01b031681526020019081526020015f205490505f8282106114645782611466565b815b90505f611477602088013583617d9e565b9050611483818b617db5565b99508089898151811061149857611498617d02565b602002602001018181525050505050505050505b600101611350565b50815f036114c25750505050565b5f6114cb61352a565b6020015190505f600e54826114e09190617db5565b90505f5f5b8681101561159b575f8686838151811061150157611501617d02565b6020026020010151856115149190617d9e565b61151e9190617ddc565b905080156115925780600b5f8b8b8681811061153c5761153c617d02565b6115529260206040909202019081019150617408565b6001600160a01b03166001600160a01b031681526020019081526020015f205f82825461157f9190617db5565b9091555061158f90508184617db5565b92505b506001016114e5565b506115a68183617d2a565b600e5550505050505b5050565b6115bb6140ea565b3068929eee149b4bd2126854036115d95763ab143c065f526004601cfd5b3068929eee149b4bd21268556115ee33614113565b506115fa336001614181565b335f908152600f60205260409020600d54611623908290600160b01b900463ffffffff166141e7565b503868929eee149b4bd2126855565b61163a6140ea565b3068929eee149b4bd2126854036116585763ab143c065f526004601cfd5b3068929eee149b4bd212685561166d8161424c565b506001600160a01b038082165f908152602e602090815260408083208151608081018352815460ff811680835263ffffffff61010083041695830195909552600160281b90049095169185019190915260010154606084015290036116e557604051636c4da32160e11b815260040160405180910390fd5b6001600160a01b0382165f908152602e6020526040812080546001600160c81b031916815560010155611719602c836142ad565b5060608101511561173657611736816040015182606001516142c8565b6040516001600160a01b038316907fc3b65b615a42c44083fae01d75939ba9640ffd6023e130bfc06092d992560d1f905f90a2503868929eee149b4bd212685550565b6117816140ea565b5f6117c286868a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061439692505050565b90505f6117cd61352a565b60a0015190505f6117de3483614532565b90506117e987614113565b506117f4875f614181565b6001600160a01b0387165f908152600c60205260409020600201546001600160401b03600160a81b90910416611839600d546001600160a01b03620100009091041690565b6001600160a01b0316336001600160a01b03161461190e5784421115611875576040516304adae2760e21b815260048101869052602401610f19565b5f7f216bb53e82eab08749d19f6feeb2ef62024ae0bacf3d722b441671ca90f0b973858a3387868b6040516020016118b39796959493929190617def565b6040516020818303038152906040528051906020012090505f6118d58261456d565b90506118e38a828b8b614683565b61190b57604051633b4f6e2b60e21b81526001600160a01b038b166004820152602401610f19565b50505b6040518060a00160405280858152602001896001600160a01b03168152602001336001600160a01b031681526020018460ff1681526020018260016119539190617e36565b6001600160401b039081169091526001600160a01b038a81165f908152600c602090815260409182902085518155908501516001820180546001600160a01b03191691851691909117905590840151600290910180546060860151608090960151929093166001600160a81b031990931692909217600160a01b60ff909516949094029390931767ffffffffffffffff60a81b1916600160a81b9390921692909202179055611a058b8b8a86866146cd565b5050505050505050505050565b6001600160a01b0381165f908152600f6020908152604080832054600160f01b900460ff16808452600a9092528220548291829182611a5187836148a9565b6001600160a01b03979097165f908152600b60205260409020549791969550909350505050565b611a80617302565b6001600160a01b0382165f908152600f602052604090208054600160e81b900460ff16611ab257611ab083614113565b505b6040805160e08101825282546001600160a01b038116825263ffffffff600160a01b820481166020840152600160c01b82041692820192909252908290606083019060ff600160e01b909104166006811115611b1057611b1061768c565b6006811115611b2157611b2161768c565b8152905460ff600160e81b8204811615156020840152600160f01b820481166040840152600160f81b909104166060909101529392505050565b611b636140ea565b611b6c33614113565b505f611b77602b5490565b600d549091505f90601190600160d01b900460ff1660048110611b9c57611b9c617d02565b60030201549050611bad82826148d9565b611bb8336003614181565b335f908152600f60205260409020600d54815463ffffffff600160b01b909204821691600160a01b90910416811015611c0c57604051634fadd4d360e11b815263ffffffff82166004820152602401610f19565b611c1582614916565b50505050565b5f611c25602b5490565b905090565b6060611c3582614968565b5f611c3f836149b8565b90505f81516001600160401b03811115611c5b57611c5b6174dd565b604051908082528060200260200182016040528015611c9457816020015b611c81617302565b815260200190600190039081611c795790505b5090505f5b8251811015611da057600f5f848381518110611cb757611cb7617d02565b6020908102919091018101516001600160a01b0390811683528282019390935260409182015f20825160e0810184528154948516815263ffffffff600160a01b8604811693820193909352600160c01b85049092169282019290925291606083019060ff600160e01b909104166006811115611d3557611d3561768c565b6006811115611d4657611d4661768c565b8152905460ff600160e81b8204811615156020840152600160f01b820481166040840152600160f81b909104166060909101528251839083908110611d8d57611d8d617d02565b6020908102919091010152600101611c99565b509392505050565b611db061407e565b6030805460ff19168215159081179091556040519081527f52ad987b0fca51d9a6d5e0bbc656d0e3f616cff09727bf584c3275def38c4f54906020015b60405180910390a150565b611e006140ea565b3068929eee149b4bd212685403611e1e5763ab143c065f526004601cfd5b3068929eee149b4bd21268555f611e348261424c565b6001600160a01b0383165f908152600f6020526040812054919250600160f01b90910460ff1690611e668484846149ea565b9050826001600160a01b03167ffc30cddea38e2bf4d6ea7d3f9ed3b6ad7f176419f4963bd81318067a4aee73fe82604051611ea391815260200190565b60405180910390a25050503868929eee149b4bd212685550565b5f611ec783612b05565b8210611ef85760405163295f44f760e21b81526001600160a01b038416600482015260248101839052604401610f19565b506001600160a01b03919091165f908152600660209081526040808320938352929052205490565b611f286140ea565b611f68813385858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061439692505050565b505f611f7261352a565b60a0015190505f611f833483614532565b9050611f8e33614113565b50611f99335f614181565b61129885853385856146cd565b611fae61407e565b6040515f905f5160206184375f395f51905f529034908381818185875af1925050503d805f8114611ffa576040519150601f19603f3d011682016040523d82523d5f602084013e611fff565b606091505b505090508061202157604051630b567ce360e31b815260040160405180910390fd5b50565b6040805160c08101825260608082525f6020830181905292820183905281018290526080810182905260a0810191909152600d54600160b01b900463ffffffff16612070816002617e55565b63ffffffff168363ffffffff1611806120b0575060038163ffffffff16101580156120b057506120a1600382617e71565b63ffffffff168363ffffffff16105b156120d657604051634fadd4d360e11b815263ffffffff84166004820152602401610f19565b600d54600160d01b900460ff1663ffffffff82811690851611156121f5575f612100858484614a98565b60408051825460e0602082028301810190935260c08201818152919392849291849184018282801561215957602002820191905f5260205f20905b81546001600160a01b0316815260019091019060200180831161213b575b505050918352505060018201546020808301919091526002928301546001600160401b03811660408085019190915263ffffffff600160401b830481166060860152600160601b8304811660808087019190915260ff600160801b909404841660a096870152600d549093165f818152600a86529290922095860154938701939093526003909401549091169084015282015295945050505050565b612200848383614b22565b60408051825460e0602082028301810190935260c08201818152919392849291849184018282801561225957602002820191905f5260205f20905b81546001600160a01b0316815260019091019060200180831161223b575b5050509183525050600182015460208201526002909101546001600160401b038116604083015263ffffffff600160401b820481166060840152600160601b820416608083015260ff600160801b9091041660a090910152949350505050565b601181600481106122c8575f80fd5b6003020160018101546002909101549091506001600160401b03811690600160401b810463ffffffff90811691600160601b810490911690600160801b900460ff1685565b6001600160a01b038082165f908152600c60205260408120600201549091161515610eee565b61233b61407e565b612343614bc3565b565b6110d283838360405180602001604052805f815250613512565b6123676140ea565b3068929eee149b4bd2126854036123855763ab143c065f526004601cfd5b3068929eee149b4bd212685561239a81614113565b50600d546201000090046001600160a01b03166001600160a01b0316336001600160a01b0316146124425760305460ff16156123e957604051630a06fea760e01b815260040160405180910390fd5b5f6123f382614c16565b9050336001600160a01b038316148015906124175750336001600160a01b03821614155b156124405760405163172b4e7560e11b81526001600160a01b0382166004820152602401610f19565b505b6001600160a01b0381165f908152600f6020526040902054600160e01b900460ff1660018160068111156124785761247861768c565b14158015612498575060028160068111156124955761249561768c565b14155b80156124b6575060038160068111156124b3576124b361768c565b14155b156124d65780604051633ba7bf8960e11b8152600401610f199190617e8d565b6001600160a01b0382165f818152600f6020908152604080832054600160f01b900460ff16808452600a835281842054948452600b9092529091205490919081811061255057604051630ea9c27360e01b81526001600160a01b03861660048201526024810182905260ff84166044820152606401610f19565b5f61255b8284617d2a565b9050803414612597576040516315de715960e21b81526001600160a01b038716600482015234602482015260ff85166044820152606401610f19565b6001600160a01b0386165f908152600b6020526040812080548392906125be908490617db5565b90915550506040515f905f5160206184375f395f51905f529034908381818185875af1925050503d805f811461260f576040519150601f19603f3d011682016040523d82523d5f602084013e612614565b606091505b505090508061263657604051630b567ce360e31b815260040160405180910390fd5b866001600160a01b03167fe27d5554eb05db70d1fa64400b6d5aee0f805adfbc7c9c3785743c9a287db8378360405161267191815260200190565b60405180910390a25050505050503868929eee149b4bd212685550565b5f61269860085490565b82106126c05760405163295f44f760e21b81525f600482015260248101839052604401610f19565b600882815481106126d3576126d3617d02565b905f5260205f2001549050919050565b601d81600481106122c8575f80fd5b6126fa61407e565b8061ffff165f0361274d57600d54601190600160d01b900460ff166004811061272557612725617d02565b6003020154604051635700689f60e11b815260048101919091525f6024820152604401610f19565b5f612757602b5490565b9050808261ffff16111561278b57604051635700689f60e11b81526004810182905261ffff83166024820152604401610f19565b600d805461ffff848116600160d81b81810261ffff60d81b1985161790945560408051949093049091168084526020840191909152908201839052907f74cf7ca84b30b723e8b6e3cc569ec2db21f4ba2fcc09d651e5ce6770b91552f99060600160405180910390a1505050565b5f610eee826140b2565b5f61280c61352a565b60a00151905090565b61281d61407e565b61282681612b05565b151580612837575061283781612a81565b1561286057604051639fb0877960e01b81526001600160a01b0382166004820152602401610f19565b6001600160a01b0381165f818152600f6020526040902080546001600160a01b03191682179055612021908290614c45565b5f606082146128a257505f610eee565b5f6128e184848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250614ca692505050565b5f818152601060205260409020549091506001600160a01b03168061290a575f92505050610eee565b61291381612a81565b15612922575f92505050610eee565b506001949350505050565b60605f61293983612024565b5f015190505f81516001600160401b03811115612958576129586174dd565b60405190808252806020026020018201604052801561298b57816020015b60608152602001906001900390816129765790505b5090505f5b8151811015611da05760295f8483815181106129ae576129ae617d02565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f2080546129e090617d66565b80601f0160208091040260200160405190810160405280929190818152602001828054612a0c90617d66565b8015612a575780601f10612a2e57610100808354040283529160200191612a57565b820191905f5260205f20905b815481529060010190602001808311612a3a57829003601f168201915b5050505050828281518110612a6e57612a6e617d02565b6020908102919091010152600101612990565b5f612a946001600160a01b038316614cd4565b15612aa057505f919050565b5f6001600160a01b0383165f908152600f6020526040902054600160e01b900460ff166006811115612ad457612ad461768c565b03612ae057505f919050565b506001600160a01b03165f908152600f6020526040902054600160e81b900460ff1690565b5f6001600160a01b038216612b2f576040516322718ad960e21b81525f6004820152602401610f19565b506001600160a01b03165f9081526003602052604090205490565b612b5261407e565b6123435f614d27565b6001600160a01b0381165f908152600f6020908152604080832054600160f01b900460ff16808452600a909252822054612b9584826148a9565b949350505050565b336002600160a01b0314612bc657604051637eb3357160e01b8152336004820152602401610f19565b612bd08282614d82565b612bd8614e5a565b600d54600160d81b900461ffff168114612c1c57600d54604051635700689f60e11b8152600160d81b90910461ffff16600482015260248101829052604401610f19565b5f5f5f5f612c5b8686808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525061528292505050565b9350935093509350612c6e86868661561c565b612c80612c7a602b5490565b866148d9565b7fd1a5032a9ae65ebe520eba7974025750af3d884b6ab6047dad04dcf7006ab3856040518060c00160405280838152602001858152602001436001612cc59190617db5565b6001600160401b0316815263ffffffff80881660208301528516604080830191909152600d5460ff1660609092019190915251612d0291906178dd565b60405180910390a1505050505050565b612d3f60405180608001604052805f81526020015f81526020015f81526020015f63ffffffff1681525090565b50600d5460ff165f908152600a602090815260409182902082516080810184528154815260018201549281019290925260028101549282019290925260039091015463ffffffff16606082015290565b612d9761407e565b61234361585d565b600f60f81b6060805f808083612df460408051808201825260148152732a32b631b7b4b71029ba30b5b2a6b0b730b3b2b960611b602080830191909152825180840190935260018352603160f81b9083015291565b97989097965046955030945091925090565b612e0e61407e565b612e1781612a81565b15612e38576006604051633ba7bf8960e11b8152600401610f199190617e8d565b612e4181614113565b505f6001600160a01b0382165f908152600f6020526040902054600160e01b900460ff166006811115612e7657612e7661768c565b03612ead576001600160a01b0381165f908152600f60205260409020612e9b9061589c565b6120216001600160a01b0382166158fa565b61202181613f61565b6060612ec182614968565b610eee826149b8565b6060600180546111b690617d66565b60605f612ee583612024565b5f015190505f81516001600160401b03811115612f0457612f046174dd565b604051908082528060200260200182016040528015612f3d57816020015b612f2a617302565b815260200190600190039081612f225790505b5090505f5b8151811015611da057612f6d838281518110612f6057612f60617d02565b6020026020010151611a78565b828281518110612f7f57612f7f617d02565b6020908102919091010152600101612f42565b612fbf60405180608001604052805f81526020015f81526020015f81526020015f63ffffffff1681525090565b5060ff165f908152600a602090815260409182902082516080810184528154815260018201549281019290925260028101549282019290925260039091015463ffffffff16606082015290565b6060611c25602c615932565b336002600160a01b031461304157604051637eb3357160e01b8152336004820152602401610f19565b5f61304b60085490565b90505f5f5b8281101561324a575f6130656109148361268e565b6001600160a01b0381165f9081526029602052604081208054929350909161308c90617d66565b80601f01602080910402602001604051908101604052809291908181526020018280546130b890617d66565b80156131035780601f106130da57610100808354040283529160200191613103565b820191905f5260205f20905b8154815290600101906020018083116130e657829003601f168201915b5050505050905080516060036131775780516020808301919091205f9081526010918290526040812080546001600160a01b031916905583919061314684614ca6565b81526020019081526020015f205f6101000a8154816001600160a01b0302191690836001600160a01b031602179055505b6001600160a01b0382165f908152600f602052604090208054600160e81b900460ff16156131a757505050613242565b8054600160e01b900460ff165f8160068111156131c6576131c661768c565b14806131e3575060068160068111156131e1576131e161768c565b145b156131f15750505050613242565b61322284602a5f84600681111561320a5761320a61768c565b60ff16815260208101919091526040015f209061593e565b5061322c81615952565b1561323d5761323a86617e9b565b95505b505050505b600101613050565b50602b8190556040518181527fa5fe2e69fcd48b9dbe563588b5da97937ef9046641db65c59b8d49a20d75bdcc906020015b60405180910390a15050565b5f61329284614113565b5084516060146132b5576040516333a234f960e11b815260040160405180910390fd5b5f6132be61352a565b60a001516001600160a01b0386165f908152600c6020526040812060020154919250600160a81b9091046001600160401b0316906132fb88614ca6565b90505f7f216bb53e82eab08749d19f6feeb2ef62024ae0bacf3d722b441671ca90f0b97382898987878b60405160200161333b9796959493929190617def565b60405160208183030381529060405280519060200120905061335c8161456d565b9998505050505050505050565b6133716140ea565b3068929eee149b4bd21268540361338f5763ab143c065f526004601cfd5b3068929eee149b4bd2126855335f908152602f60209081526040808320546031909252909120546133c08183617db5565b5f036133df5760405163183dfd8b60e21b815260040160405180910390fd5b5f5f5160206184375f395f51905f523182116133fb578161340b565b5f5160206184375f395f51905f52315b90505f6134188285617db5565b9050805f0361343a5760405163183dfd8b60e21b815260040160405180910390fd5b335f908152602f60205260408120556134538284617d2a565b335f8181526031602052604090819020929092559051634875485760e11b81526004810191909152602481018390525f5160206184375f395f51905f52906390ea90ae9086906044015f604051808303818588803b1580156134b3575f5ffd5b505af11580156134c5573d5f5f3e3d5ffd5b50506040518481523393507f358fe4192934d3bf28ae181feda1f4bd08ca67f5e2fad55582cce5eb67304ae99250602001905060405180910390a2505050503868929eee149b4bd2126855565b61351d8484846112c6565b611c1533858585856159a5565b6040805160c08101825260608082525f6020830181905292820183905281018290526080810182905260a0810191909152600d5461358190600160b01b810463ffffffff16908190600160d01b900460ff16614b22565b60408051825460e0602082028301810190935260c0820181815291939284929184918401828280156135da57602002820191905f5260205f20905b81546001600160a01b031681526001909101906020018083116135bc575b5050509183525050600182015460208201526002909101546001600160401b038116604083015263ffffffff600160401b820481166060840152600160601b820416608083015260ff600160801b9091041660a090910152919050565b5f61364061407e565b6136486140ea565b613658608083016060840161787f565b63ffffffff165f0361369657613674608083016060840161787f565b604051630c6e911360e41b815263ffffffff9091166004820152602401610f19565b600d80545f919082906136ab9060ff16617eb3565b825460ff8083166101009490940a848102910219909116179092555f908152600a6020526040902090915083906136e28282617ed1565b505060ff81167fe99633c5fc9a4b39f3a3d7835a821420f9d4d6c5bfa62be2fcf1fde156115eeb8435602086013560408701356137256080890160608a0161787f565b6040805194855260208501939093529183015263ffffffff16606082015260800160405180910390a290505b919050565b61375f33614113565b50335f908152600c60205260408120600201805460159061378f90600160a81b90046001600160401b0316617f14565b82546001600160401b038083166101009490940a8481029102199091161790925560405190815290915033907f2372996d0929efe8a23b6f30910b8047be7f973b1bfa8bf5ef6dbe702521591f9060200160405180910390a250565b60606137f6826140b2565b505f61383161380484615ac4565b61380c615b72565b60405160200161381d929190617f4c565b604051602081830303815290604052615bbc565b905080604051602001613844919061803b565b604051602081830303815290604052915050919050565b6138636140ea565b3068929eee149b4bd2126854036138815763ab143c065f526004601cfd5b3068929eee149b4bd21268555f6138978361424c565b6001600160a01b0384165f908152600f60205260409020805491925090600160e01b900460ff1660018160068111156138d2576138d261768c565b141580156138f2575060028160068111156138ef576138ef61768c565b14155b80156139105750600381600681111561390d5761390d61768c565b14155b156139305780604051633ba7bf8960e11b8152600401610f199190617e8d565b815460ff600160f01b9091048116908516811015806139575750600d5460ff908116908616115b1561398257604051633abb443b60e21b815260ff808316600483015286166024820152604401610f19565b60ff8082165f908152600a6020526040808220549288168252812054908282116139ac575f6139b6565b6139b68383617d2a565b90508034146139da5760405163222d164360e21b8152346004820152602401610f19565b60018560068111156139ee576139ee61768c565b03613b0b57855460ff60f01b1916600160f01b60ff8a16021786556001600160a01b03808a165f908152600c60205260409020600201541615613a5c576001600160a01b0389165f908152600c60205260409020600201805460ff60a01b1916600160a01b60ff8b16021790555b8015613a94576001600160a01b0389165f908152600b602052604081208054839290613a89908490617db5565b90915550613aa89050565b82821015613aa857613aa889888585615be2565b6040805160ff80871682528a166020820152908101849052606081018390526001600160a01b038a16907f27f993440568bc502fe7db72fe27118488431975dc3239b379513a4cdb08e2c99060800160405180910390a250505050505050613d30565b5f602e5f8b6001600160a01b03166001600160a01b031681526020019081526020015f206040518060800160405290815f82015f9054906101000a900460ff1660ff1660ff1681526020015f820160019054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020015f820160059054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001600182015481525050905060405180608001604052808a60ff168152602001600d60169054906101000a900463ffffffff1663ffffffff168152602001336001600160a01b0316815260200183815250602e5f8c6001600160a01b03166001600160a01b031681526020019081526020015f205f820151815f015f6101000a81548160ff021916908360ff1602179055506020820151815f0160016101000a81548163ffffffff021916908363ffffffff1602179055506040820151815f0160056101000a8154816001600160a01b0302191690836001600160a01b0316021790555060608201518160010155905050613cad8a602c61593e90919063ffffffff16565b50606081015115613cca57613cca816040015182606001516142c8565b600d546040805160ff8c168152600160b01b90920463ffffffff16602083015281018390526001600160a01b038b16907fdffa95238a907cf8b6360a883f195928a82c8d7746dfe6fca84936929024a9d59060600160405180910390a250505050505050505b3868929eee149b4bd21268555050565b6001600160a01b039182165f90815260056020908152604080832093909416825291909152205460ff1690565b613d7561407e565b613d7e82614113565b506001600160a01b0382165f818152600f602090815260409182902080546001600160f81b0316600160f81b60ff87169081029190911790915591519182527ffa96cc66d1772e5646f86e374867e4e32b5b448b2aadb331568e34c2d063e45591015b60405180910390a25050565b613df561407e565b6001600160a01b038116613e1e57604051631e4fbdf760e01b81525f6004820152602401610f19565b61202181614d27565b613e2f6140ea565b3068929eee149b4bd212685403613e4d5763ab143c065f526004601cfd5b3068929eee149b4bd21268555f613e638361424c565b6001600160a01b0384165f908152600f60205260409020909150613e8681615cf8565b613ea5578060405163c11d33f760e01b8152600401610f19919061806c565b613eae8161589c565b5f613eba858486615d91565b9050826001600160a01b03167ffc30cddea38e2bf4d6ea7d3f9ed3b6ad7f176419f4963bd81318067a4aee73fe82604051613ef791815260200190565b60405180910390a25050503868929eee149b4bd21268555050565b5f6001600160e01b031982166380ac58cd60e01b1480613f4257506001600160e01b03198216635b5e139f60e01b145b80610eee57506301ffc9a760e01b6001600160e01b0319831614610eee565b6001600160a01b0381165f908152600f602052604090208054602b54600160e01b90910460ff1690613f9282615952565b15613fa557613fa2600182617d2a565b90505b613faf8482615ef7565b5f613fb985611a12565b506001600160a01b0387165f908152600b60205260408082208290555191935091505f5160206184375f395f51905f529083908381818185875af1925050503d805f8114614022576040519150601f19603f3d011682016040523d82523d5f602084013e614027565b606091505b505090508061404957604051630b567ce360e31b815260040160405180910390fd5b600d54614064908690600160b01b900463ffffffff16616030565b61406d8561589c565b61407686616087565b505050505050565b600d546001600160a01b03620100009091041633146123435760405163118cdaa760e01b8152336004820152602401610f19565b5f818152600260205260408120546001600160a01b031680610eee57604051637e27328960e01b815260048101849052602401610f19565b600d54610100900460ff16156123435760405163d93c066560e01b815260040160405180910390fd5b5f6001600160a01b03821661412781614cd4565b6141475760405163ed15e6cf60e01b815260048101829052602401610f19565b826001600160a01b031661415a826127f9565b6001600160a01b031614610eee576040516330fa89ab60e11b815260040160405180910390fd5b6001600160a01b0382165f908152600f6020526040902054600160e01b900460ff168160068111156141b5576141b561768c565b8160068111156141c7576141c761768c565b146110d25780604051633ba7bf8960e11b8152600401610f199190617e8d565b6141f2816001617e55565b825463ffffffff91909116600160a01b0263ffffffff60a01b1990911617825561421d8260026160f9565b7f44f68a196beb8e3ae6b6afe9504db62c81b4e511e987a263b4f1a9bc49c907628260405161327c919061806c565b5f61425682614113565b5061426082614c16565b9050336001600160a01b038316148015906142845750336001600160a01b03821614155b156137515760405163172b4e7560e11b81526001600160a01b0382166004820152602401610f19565b5f6142c1836001600160a01b038416616228565b9392505050565b805f036142d3575050565b604051634875485760e11b81526001600160a01b03831660048201525f60248201525f5160206184375f395f51905f52906390ea90ae90620186a09084906044015f604051808303818589803b15801561432b575f5ffd5b5088f1945050505050801561433e575060015b6115af576001600160a01b0382165f908152602f602052604081208054839290614369908490617db5565b90915550506040518181526001600160a01b038316905f5160206189445f395f51905f5290602001613de1565b5f81516060146143b9576040516333a234f960e11b815260040160405180910390fd5b5f825f815181106143cc576143cc617d02565b016020015160f81c90506080811615806143e857506040811615155b15614406576040516333a234f960e11b815260040160405180910390fd5b5f6144118486616312565b86516040519192505f91829161b1519163a65ebb2560e01b9161443a918a9088906024016180de565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516144789190618116565b5f60405180830381855afa9150503d805f81146144b0576040519150601f19603f3d011682016040523d82523d5f602084013e6144b5565b606091505b50915091508115806144c957508051602014155b156144e957806040516306fe67db60e31b8152600401610f19919061744f565b808060200190518101906144fd9190618121565b61451c578760405163a865bb3560e01b8152600401610f19919061813c565b6145268688616362565b98975050505050505050565b60ff81165f908152600a602052604081205483146145665760405163222d164360e21b815260048101849052602401610f19565b5090919050565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f00000000000000000000000000000000000000000000000000000000000000004614166146605750604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000009181019190915246606082015230608082015260a090205b6719010000000000005f5280601a5281603a52604260182090505f603a52919050565b5f61468d856163d2565b156146b857846001600160a01b03166146a78585856164a5565b6001600160a01b0316149050612b95565b6146c48585858561651f565b95945050505050565b6001600160a01b038381165f818152600f602081815260408084208054825160e08101845287815263ffffffff81860181815294820188815260608301898152608084018a905260ff8e811660a0860152600160f81b86041660c085018190529a909952969095528051935195518516600160c01b0263ffffffff60c01b1996909516600160a01b026001600160c01b031990921693909816929092179190911792831682178155925193949391839160ff60e01b191664ffffffffff60c01b1990911617600160e01b8360068111156147a9576147a961768c565b02179055506080820151815460a084015160c09094015161ffff60e81b19909116600160e81b9215159290920260ff60f01b191691909117600160f01b60ff94851602176001600160f81b0316600160f81b93909116929092029190911790556001600160a01b0384165f908152600f6020526040902061482b8160016160f9565b6001600160a01b0385165f90815260296020526040902061484d8789836181ac565b506001600160a01b0385165f908152600b602052604090819020849055517f9d9bab592843361c508cec6cc23820609c04fe07a621d03bf04b7520759d36419061489890839061806c565b60405180910390a150505050505050565b6001600160a01b0382165f908152600b6020526040812054818382116148cf575f6146c4565b6146c48483617d2a565b8115806148e4575080155b806148ee57508181115b156115af57604051635700689f60e11b81526004810183905260248101829052604401610f19565b6149218160046160f9565b805463ffffffff60c01b191663ffffffff60c01b1781556040517f170cba9e80cc0d156bc6ed689fa1d09ee788e1000c092512ef8698454b2081ee90611ded90839061806c565b5f81600681111561497b5761497b61768c565b1480614998575060068160068111156149965761499661768c565b145b156120215780604051633ba7bf8960e11b8152600401610f199190617e8d565b6060610eee602a5f8460068111156149d2576149d261768c565b60ff1660ff1681526020019081526020015f20615932565b5f5f6149f685846165f2565b6001600160a01b0386165f908152600b6020526040812080549293508392909190614a22908490617d2a565b9091555050604051634875485760e11b81526001600160a01b0385166004820152602481018290525f5160206184375f395f51905f52906390ea90ae906044015f604051808303815f87803b158015614a79575f5ffd5b505af1158015614a8b573d5f5f3e3d5ffd5b5092979650505050505050565b5f80600483614aa78688617e71565b614ab19190618265565b614abb919061827e565b90505f601d8260ff1660048110614ad457614ad4617d02565b6003020190508563ffffffff168160020160089054906101000a900463ffffffff1663ffffffff16146146c457604051634fadd4d360e11b815263ffffffff87166004820152602401610f19565b5f80614b2e8585617e71565b90505f600482614b3e8683618265565b614b48919061829f565b614b52919061827e565b90505f60118260ff1660048110614b6b57614b6b617d02565b6003020190508663ffffffff168160020160089054906101000a900463ffffffff1663ffffffff1614614bb957604051634fadd4d360e11b815263ffffffff88166004820152602401610f19565b9695505050505050565b614bcb616652565b600d805461ff00191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6001600160a01b038082165f908152600c6020526040812060028101549192909116806142c157509192915050565b6001600160a01b038216614c6e57604051633250574960e11b81525f6004820152602401610f19565b5f614c7a83835f61667a565b90506001600160a01b038116156110d2576040516339e3563760e11b81525f6004820152602401610f19565b604080516020838101516001600160fd1b031682528284015190820152606092830151918101919091522090565b5f811580614ce957506001600160a01b038210155b15614d0a5760405163ed15e6cf60e01b815260048101839052602401610f19565b505f908152600260205260409020546001600160a01b0316151590565b600d80546001600160a01b038381166201000081810262010000600160b01b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b60015b818110156110d257828282818110614d9f57614d9f617d02565b9050602002016020810190614db49190617408565b6001600160a01b03168383614dca600185617d2a565b818110614dd957614dd9617d02565b9050602002016020810190614dee9190617408565b6001600160a01b031610614e52578282614e09600184617d2a565b818110614e1857614e18617d02565b9050602002016020810190614e2d9190617408565b60405163836e3a7d60e01b81526001600160a01b039091166004820152602401610f19565b600101614d85565b5f614e65602c615932565b600d54909150600160b01b900463ffffffff165f805b8351811015615208575f848281518110614e9757614e97617d02565b6020908102919091018101516001600160a01b038082165f908152602e84526040908190208151608081018352815460ff811680835263ffffffff61010083041697830197909752600160281b900490931691830191909152600101546060820152909250901580614f2757506001600160a01b0382165f908152600f6020526040902054600160e81b900460ff165b15614f3c57614f3582616745565b5050615200565b6001600160a01b0382165f908152600f60209081526040808320805460ff600160f01b9091048116808652600a909452828520548651909116855291909320548181108015614fa6575060018560200151614f979190617e55565b63ffffffff168963ffffffff16105b15614fb657505050505050615200565b6001600160a01b0386165f908152602e6020526040812080546001600160c81b031916815560010155614fea602c876142ad565b505f8282111561502b5760608601516001600160a01b0388165f908152600b602052604081208054909190615020908490617db5565b909155506151299050565b5f6150368385617d2a565b6001600160a01b0389165f908152600b602052604090205490915084811061506057819250615075565b83811115615075576150728482617d2a565b92505b8215615110576001600160a01b0389165f908152600b6020526040812080548592906150a2908490617d2a565b909155505f90506150b28a614c16565b6001600160a01b0381165f908152602f60205260408120805492935086929091906150de908490617db5565b90915550506040518481526001600160a01b038216905f5160206189445f395f51905f529060200160405180910390a2505b61511a8383617d2a565b615124908c617db5565b9a5050505b8551855460ff909116600160f01b0260ff60f01b199091161785556001600160a01b038781165f908152600c6020526040902060020154161561519f5785516001600160a01b0388165f908152600c60205260409020600201805460ff909216600160a01b0260ff60a01b199092169190911790555b85516040805160ff808816825290921660208301528101849052606081018390526001600160a01b038816907f27f993440568bc502fe7db72fe27118488431975dc3239b379513a4cdb08e2c99060800160405180910390a2505050505050505b600101614e7b565b5080156110d2576040515f905f5160206184375f395f51905f529083908381818185875af1925050503d805f811461525b576040519150601f19603f3d011682016040523d82523d5f602084013e615260565b606091505b5050905080611c1557604051630b567ce360e31b815260040160405180910390fd5b600d545f9081908190606090600160d01b900460ff168260046152a6836001618265565b6152b0919061827e565b600d805460ff60d01b1916600160d01b60ff841602178082559192505f916016906152e790600160b01b900463ffffffff166182b8565b91906101000a81548163ffffffff021916908363ffffffff160217905590505f601d8360ff166004811061531d5761531d617d02565b6003020190505f61532c612d12565b90506040518060c001604052808380548060200260200160405190810160405280929190818152602001828054801561538c57602002820191905f5260205f20905b81546001600160a01b0316815260019091019060200180831161536e575b50505091835250506040808401516020830152016153ab436001617e36565b6001600160401b0316815263ffffffff80861660208301526060808501519091166040830152600d5460ff90811691909201526011908616600481106153f3576153f3617d02565b600302015f820151815f01908161540a91906182d3565b50602082015160018201556040820151600291820180546060850151608086015160a0909601516001600160401b039094166001600160601b031990921691909117600160401b63ffffffff928316021764ffffffffff60601b1916600160601b919095160260ff60801b191693909317600160801b60ff90921691909102179091555f9060049061549d908790618265565b6154a7919061827e565b90506040518060c001604052808c81526020015f81526020015f6001600160401b031681526020018560026154dc9190617e55565b63ffffffff1681525f60208201819052604090910152601d60ff83166004811061550857615508617d02565b600302015f820151815f01908161551f91906182d3565b50602082810151600183015560408084015160029093018054606080870151608088015160a09098015160ff16600160801b0260ff60801b1963ffffffff998a16600160601b021664ffffffffff60601b1999909216600160401b026001600160601b03199094166001600160401b039098169790971792909217969096161793909317909255848201519285015186548351818402810184019094528084528894939192889291839183018282801561560057602002820191905f5260205f20905b81546001600160a01b031681526001909101906020018083116155e2575b5050505050905099509950995099505050505050509193509193565b5f61562760026149b8565b90505f5b8151811015615685575f600f5f84848151811061564a5761564a617d02565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f20905061567c81616854565b5060010161562b565b505f61569160046149b8565b600d54909150600160d01b900460ff165f60046156af836001618265565b6156b9919061827e565b90505f7fbd0b8371ed11e4a5f6acd1f1a0d78b3f7e6ab3473c6396c9f28027132562600c8660405160200161570592919091825260e01b6001600160e01b031916602082015260240190565b60405160208183030381529060405280519060200120905061579460118460ff166004811061573657615736617d02565b6003020180546040805160208084028201810190925282815292919083018282801561578957602002820191905f5260205f20905b81546001600160a01b0316815260019091019060200180831161576b575b50505050508261688e565b6157ad601d8360ff166004811061573657615736617d02565b6157ea8888808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525085925061688e915050565b5f5b8451811015615852575f85828151811061580857615808617d02565b6020026020010151905061581c81846168de565b15615827575061584a565b6001600160a01b0381165f908152600f602052604090206158489089616030565b505b6001016157ec565b505050505050505050565b6158656140ea565b600d805461ff0019166101001790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258614bf93390565b6158a78160066160f9565b805460ff60e81b198116600160e81b1782556158cb906001600160a01b0316616745565b7ffab16134cb74fff6e7d137bf93f6b2ab4c1c61cbe53dad2c8cb57744353bd39b81604051611ded919061806c565b5f6159065f835f61667a565b90506001600160a01b0381166115af57604051637e27328960e01b815260048101839052602401610f19565b60605f6142c1836168fb565b5f6142c1836001600160a01b038416616954565b5f60038260068111156159675761596761768c565b1480615984575060048260068111156159825761598261768c565b145b80610eee5750600282600681111561599e5761599e61768c565b1492915050565b6001600160a01b0383163b1561129857604051630a85bd0160e11b81526001600160a01b0384169063150b7a02906159e7908890889087908790600401618357565b6020604051808303815f875af1925050508015615a21575060408051601f3d908101601f19168201909252615a1e91810190618389565b60015b615a88573d808015615a4e576040519150601f19603f3d011682016040523d82523d5f602084013e615a53565b606091505b5080515f03615a8057604051633250574960e11b81526001600160a01b0385166004820152602401610f19565b805181602001fd5b6001600160e01b03198116630a85bd0160e11b1461407657604051633250574960e11b81526001600160a01b0385166004820152602401610f19565b60605f615ad0836169a0565b6028602282012090915060601c60295b6001811115615b6957600782600f16118015615b1557506060838281518110615b0b57615b0b617d02565b016020015160f81c115b15615b5257602060f81b838281518110615b3157615b31617d02565b0160200180516001600160f81b0319908116909218909116905f82901a9053505b60049190911c90615b62816183a4565b9050615ae0565b50909392505050565b6060615b986040518061052001604052806104ed81526020016184576104ed9139615bbc565b604051602001615ba891906183b9565b604051602081830303815290604052905090565b6060610eee826040518060600160405280604081526020016189646040913960016169b6565b5f615bed8284617d2a565b6001600160a01b0386165f908152600b6020526040812054919250848210615c16575081615c2b565b83821115615c2b57615c288483617d2a565b90505b8015615c68576001600160a01b0387165f908152600b602052604081208054839290615c58908490617d2a565b90915550615c68905086826142c8565b5f615c738285617d2a565b90508015615cee576040515f905f5160206184375f395f51905f529083908381818185875af1925050503d805f8114615cc7576040519150601f19603f3d011682016040523d82523d5f602084013e615ccc565b606091505b505090508061585257604051630b567ce360e31b815260040160405180910390fd5b5050505050505050565b80545f90600160e01b900460ff166001816006811115615d1a57615d1a61768c565b03615d285750600192915050565b82545f90615d4490600160c01b900463ffffffff166001617e55565b90506005826006811115615d5a57615d5a61768c565b148015615d795750600d5463ffffffff808316600160b01b9092041610155b15615d88575060019392505050565b505f9392505050565b5f615d9b84616087565b5f5f5f615da787611a12565b925092509250825f03615dbf578293505050506142c1565b6001600160a01b0387165f908152600b60205260408120819055828410615de7575081615e64565b50825f5f5160206184375f395f51905f52615e028386617d2a565b6040515f81818185875af1925050503d805f8114615e3b576040519150601f19603f3d011682016040523d82523d5f602084013e615e40565b606091505b5050905080615e6257604051630b567ce360e31b815260040160405180910390fd5b505b858015615e7e57505f5160206184375f395f51905f523182115b15615e95575f5160206184375f395f51905f523191505b5f5160206184375f395f51905f523180831115615ee257615eb68282617db5565b615ec08484617db5565b60405163cf47918160e01b815260048101929092526024820152604401610f19565b615eed888385616b30565b61335c8383617db5565b600d54600160b01b810463ffffffff1690600160d01b900460ff165f615f1e838084614b22565b9050615f2a8186616c3e565b508054615f3785826148d9565b5f615f43856001617e55565b90505f615f51828787614a98565b9050615f5d8189616c3e565b5080549250615f6c87846148d9565b5f615f78876002617e55565b90505f615f86828989614a98565b9050615f92818b616c3e565b5080549450615fa189866148d9565b600d54600160d81b900461ffff1689101561602457600d805461ffff8b8116600160d81b90810261ffff60d81b1984161793849055604080519382900483168085529190940490911660208301529181018b90527f74cf7ca84b30b723e8b6e3cc569ec2db21f4ba2fcc09d651e5ce6770b91552f99060600160405180910390a1505b50505050505050505050565b61603b8260056160f9565b815463ffffffff60c01b1916600160c01b63ffffffff8316021782556040517f727bfc4079207401298f48a3f1a92c9b40d83e086fe5b584a7b0644fdbdb56ee9061327c90849061806c565b6160996001600160a01b0382166158fa565b6008545f036160bb576040516315ae672760e01b815260040160405180910390fd5b6001600160a01b03165f908152600c602052604081209081556001810180546001600160a01b031916905560020180546001600160e81b0319169055565b81546001600160a01b03811690600160e01b900460ff1661614182602a5f8460068111156161295761612961768c565b60ff16815260208101919091526040015f20906142ad565b505f8360068111156161555761615561768c565b14158015616175575060068360068111156161725761617261768c565b14155b156161955761619382602a5f86600681111561320a5761320a61768c565b505b5f61619f82615952565b90505f6161ab85615952565b90508180156161b8575080155b156161d457602b5f81546161cb906183a4565b909155506161f7565b811580156161df5750805b156161f757602b5f81546161f290617e9b565b909155505b85548590879060ff60e01b1916600160e01b83600681111561621b5761621b61768c565b0217905550505050505050565b5f8181526001830160205260408120548015616302575f61624a600183617d2a565b85549091505f9061625d90600190617d2a565b90508082146162bc575f865f01828154811061627b5761627b617d02565b905f5260205f200154905080875f01848154811061629b5761629b617d02565b5f918252602080832090910192909255918252600188019052604090208390555b85548690806162cd576162cd6183ea565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050610eee565b5f915050610eee565b5092915050565b60608251606014616336576040516333a234f960e11b815260040160405180910390fd5b60405161634b905f90859085906020016183fe565b604051602081830303815290604052905092915050565b5f61636c83614ca6565b5f818152601060205260409020549091506001600160a01b0316156163a457604051638d12779f60e01b815260040160405180910390fd5b5f81815260106020526040902080546001600160a01b0384166001600160a01b031990911617905592915050565b5f6017826001600160a01b03163b146163ec57505f919050565b5f826001600160a01b0316803b806020016040519081016040528181525f908060200190933c805190915060ef60f81b9082905f9061642d5761642d617d02565b01602001516001600160f81b03191614801561647057508051600160f81b908290600190811061645f5761645f617d02565b01602001516001600160f81b031916145b80156142c1575080515f908290600290811061648e5761648e617d02565b01602001516001600160f81b031916149392505050565b5f60405182604081146164c057604181146164e75750611da0565b60208581013560ff81901c601b0190915285356040526001600160ff1b03166060526164f8565b60408501355f1a6020526040856040375b50845f526020604060805f60015afa505f6060523d60601851915080604052509392505050565b5f6001600160a01b03851615612b9557604051853b6165af57826040811461654f576041811461657657506165e9565b60208581013560ff81901c601b0190915285356040526001600160ff1b0316606052616587565b60408501355f1a6020526040856040375b50845f526020600160805f60015afa5180871860601b3d119250505f606052806040526165e9565b631626ba7e60e01b80825285600483015260248201604081528460448401528486606485013760208160648701858b5afa90519091141691505b50949350505050565b60ff81165f908152600a60205260408120548161660f85836148a9565b9050801580616631575060ff84165f908152600a602052604090206001015481105b15612b9557604051633737b70960e11b815260048101829052602401610f19565b600d54610100900460ff1661234357604051638dfc202b60e01b815260040160405180910390fd5b5f5f616687858585616d43565b90506001600160a01b0381166166e3576166de84600880545f838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b616706565b846001600160a01b0316816001600160a01b031614616706576167068185616e35565b6001600160a01b0385166167225761671d84616eb2565b612b95565b846001600160a01b0316816001600160a01b031614612b9557612b958585616f59565b6001600160a01b038082165f908152602e602090815260408083208151608081018352815460ff811680835263ffffffff61010083041695830195909552600160281b90049095169185019190915260010154606084015290036167ae576110d2602c836142ad565b6001600160a01b0382165f908152602e6020526040812080546001600160c81b0319168155600101556167e2602c836142ad565b506060810151156115af5760608101516040808301516001600160a01b03165f908152602f602052908120805490919061681d908490617db5565b9250508190555080604001516001600160a01b03165f5160206189445f395f51905f528260600151604051613de191815260200190565b61685f8160036160f9565b7fabab4191fe954f07230f7e34fd48dc0fdcbed492526cd060001cccceab22851b81604051611ded919061806c565b5f5b82518110156110d2576168d660016168d06168cd8685815181106168b6576168b6617d02565b602002602001015186616fa790919063ffffffff16565b90565b90616fc1565b600101616890565b6001600160a01b0382165f9081526020829052604081205c6142c1565b6060815f0180548060200260200160405190810160405280929190818152602001828054801561694857602002820191905f5260205f20905b815481526020019060010190808311616934575b50505050509050919050565b5f81815260018301602052604081205461699957508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610eee565b505f610eee565b6060610eee6001600160a01b0383166014616fc8565b606083515f036169d4575060408051602081019091525f81526142c1565b5f82616a04576003855160046169ea9190617d9e565b6169f5906002617db5565b6169ff9190617ddc565b616a29565b600385516002616a149190617db5565b616a1e9190617ddc565b616a29906004617d9e565b90505f816001600160401b03811115616a4457616a446174dd565b6040519080825280601f01601f191660200182016040528015616a6e576020820181803683370190505b509050600185016020820187885189016020810180515f82525b82841015616ae3576003840193508351603f8160121c168701518653600186019550603f81600c1c168701518653600186019550603f8160061c168701518653600186019550603f8116870151865350600185019450616a88565b905250508515616b2457600388510660018114616b075760028114616b1a57616b22565b603d6001830353603d6002830353616b22565b603d60018303535b505b50909695505050505050565b604051634875485760e11b81526001600160a01b0384166004820152602481018290525f5160206184375f395f51905f52906390ea90ae90620186a09085906044015f604051808303818589803b158015616b89575f5ffd5b5088f19450505050508015616b9c575060015b6110d2578115616bd3576001600160a01b0383165f908152602f602052604081208054849290616bcd908490617db5565b90915550505b8015616c06576001600160a01b0383165f9081526031602052604081208054839290616c00908490617db5565b90915550505b6001600160a01b0383165f5160206189445f395f51905f52616c288385617db5565b60405190815260200160405180910390a2505050565b81545f90815b81811015616d3957836001600160a01b0316858281548110616c6857616c68617d02565b5f918252602090912001546001600160a01b031603616d315784616c8d600184617d2a565b81548110616c9d57616c9d617d02565b905f5260205f20015f9054906101000a90046001600160a01b0316858281548110616cca57616cca617d02565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b0316021790555084805480616d0557616d056183ea565b5f8281526020902081015f1990810180546001600160a01b03191690550190555060019150610eee9050565b600101616c44565b505f949350505050565b5f828152600260205260408120546001600160a01b0390811690831615616d6f57616d6f818486617139565b6001600160a01b03811615616da957616d8a5f855f5f61719d565b6001600160a01b0381165f90815260036020526040902080545f190190555b6001600160a01b03851615616dd7576001600160a01b0385165f908152600360205260409020805460010190555b5f8481526002602052604080822080546001600160a01b0319166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b5f616e3f83612b05565b5f838152600760209081526040808320546001600160a01b0388168452600690925290912091925090818314616e94575f83815260208281526040808320548584528184208190558352600790915290208290555b5f938452600760209081526040808620869055938552525081205550565b6008545f90616ec390600190617d2a565b5f8381526009602052604081205460088054939450909284908110616eea57616eea617d02565b905f5260205f20015490508060088381548110616f0957616f09617d02565b5f918252602080832090910192909255828152600990915260408082208490558582528120556008805480616f4057616f406183ea565b600190038181905f5260205f20015f9055905550505050565b5f6001616f6584612b05565b616f6f9190617d2a565b6001600160a01b039093165f908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b03165f9081526020919091526040902090565b80825d5050565b6060825f616fd7846002617d9e565b616fe2906002617db5565b6001600160401b03811115616ff957616ff96174dd565b6040519080825280601f01601f191660200182016040528015617023576020820181803683370190505b509050600360fc1b815f8151811061703d5761703d617d02565b60200101906001600160f81b03191690815f1a905350600f60fb1b8160018151811061706b5761706b617d02565b60200101906001600160f81b03191690815f1a9053505f61708d856002617d9e565b617098906001617db5565b90505b600181111561710f576f181899199a1a9b1b9c1cb0b131b232b360811b83600f16601081106170cc576170cc617d02565b1a60f81b8282815181106170e2576170e2617d02565b60200101906001600160f81b03191690815f1a90535060049290921c91617108816183a4565b905061709b565b508115612b955760405163e22e27eb60e01b81526004810186905260248101859052604401610f19565b6171448383836172a1565b6110d2576001600160a01b03831661717257604051637e27328960e01b815260048101829052602401610f19565b60405163177e802f60e01b81526001600160a01b038316600482015260248101829052604401610f19565b80806171b157506001600160a01b03821615155b15617272575f6171c0846140b2565b90506001600160a01b038316158015906171ec5750826001600160a01b0316816001600160a01b031614155b80156171ff57506171fd8184613d40565b155b156172285760405163a9fbf51f60e01b81526001600160a01b0384166004820152602401610f19565b81156172705783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b50505f90815260046020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b5f6001600160a01b03831615801590612b955750826001600160a01b0316846001600160a01b031614806172da57506172da8484613d40565b80612b955750505f908152600460205260409020546001600160a01b03908116911614919050565b6040805160e0810182525f8082526020820181905291810182905290606082019081525f602082018190526040820181905260609091015290565b6001600160e01b031981168114612021575f5ffd5b5f60208284031215617362575f5ffd5b81356142c18161733d565b5f5f83601f84011261737d575f5ffd5b5081356001600160401b03811115617393575f5ffd5b6020830191508360208260061b85010111156173ad575f5ffd5b9250929050565b5f5f602083850312156173c5575f5ffd5b82356001600160401b038111156173da575f5ffd5b6173e68582860161736d565b90969095509350505050565b80356001600160a01b0381168114613751575f5ffd5b5f60208284031215617418575f5ffd5b6142c1826173f2565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6142c16020830184617421565b5f60208284031215617471575f5ffd5b5035919050565b5f5f60408385031215617489575f5ffd5b617492836173f2565b946020939093013593505050565b5f5f83601f8401126174b0575f5ffd5b5081356001600160401b038111156174c6575f5ffd5b6020830191508360208285010111156173ad575f5ffd5b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112617500575f5ffd5b81356001600160401b03811115617519576175196174dd565b604051601f8201601f19908116603f011681016001600160401b0381118282101715617547576175476174dd565b60405281815283820160200185101561755e575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f6020828403121561758a575f5ffd5b604051602081016001600160401b03811182821017156175ac576175ac6174dd565b60405290508082356001600160401b038111156175c7575f5ffd5b6175d3858286016174f1565b8252505092915050565b5f5f5f5f5f5f5f60a0888a0312156175f3575f5ffd5b87356001600160401b03811115617608575f5ffd5b6176148a828b016174a0565b90985096505060208801356001600160401b03811115617632575f5ffd5b61763e8a828b0161757a565b95505061764d604089016173f2565b935060608801356001600160401b03811115617667575f5ffd5b6176738a828b016174a0565b989b979a50959894979596608090950135949350505050565b634e487b7160e01b5f52602160045260245ffd5b600781106176bc57634e487b7160e01b5f52602160045260245ffd5b9052565b60018060a01b03815116825263ffffffff602082015116602083015263ffffffff604082015116604083015260608101516176fe60608401826176a0565b5060808101511515608083015260ff60a08201511660a083015260c08101516110d260c084018260ff169052565b60e08101610eee82846176c0565b5f5f5f6060848603121561774c575f5ffd5b617755846173f2565b9250617763602085016173f2565b929592945050506040919091013590565b5f60208284031215617784575f5ffd5b8135600781106142c1575f5ffd5b602080825282518282018190525f918401906040840190835b818110156177d4576177be8385516176c0565b6020939093019260e092909201916001016177ab565b509095945050505050565b8015158114612021575f5ffd5b5f602082840312156177fc575f5ffd5b81356142c1816177df565b5f5f5f60408486031215617819575f5ffd5b83356001600160401b0381111561782e575f5ffd5b61783a868287016174a0565b90945092505060208401356001600160401b03811115617858575f5ffd5b6178648682870161757a565b9150509250925092565b63ffffffff81168114612021575f5ffd5b5f6020828403121561788f575f5ffd5b81356142c18161786e565b5f8151808452602084019350602083015f5b828110156178d35781516001600160a01b03168652602095860195909101906001016178ac565b5093949350505050565b602081525f825160c060208401526178f860e084018261789a565b9050602084015160408401526001600160401b03604085015116606084015263ffffffff606085015116608084015263ffffffff60808501511660a084015260ff60a08501511660c08401528091505092915050565b5f6020828403121561795e575f5ffd5b813561ffff811681146142c1575f5ffd5b5f5f60208385031215617980575f5ffd5b82356001600160401b03811115617995575f5ffd5b6173e6858286016174a0565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b828110156179f857603f198786030184526179e3858351617421565b945060209384019391909101906001016179c7565b50929695505050505050565b5f5f60208385031215617a15575f5ffd5b82356001600160401b03811115617a2a575f5ffd5b8301601f81018513617a3a575f5ffd5b80356001600160401b03811115617a4f575f5ffd5b8560208260051b8401011115617a63575f5ffd5b6020919091019590945092505050565b60ff60f81b8816815260e060208201525f617a9160e0830189617421565b8281036040840152617aa38189617421565b606084018890526001600160a01b038716608085015260a0840186905283810360c0850152845180825260208087019350909101905f5b81811015617af8578351835260209384019390920191600101617ada565b50909b9a5050505050505050505050565b602081525f6142c1602083018461789a565b5f5f60408385031215617b2c575f5ffd5b617b35836173f2565b91506020830135617b45816177df565b809150509250929050565b803560ff81168114613751575f5ffd5b5f60208284031215617b70575f5ffd5b6142c182617b50565b5f5f5f5f60808587031215617b8c575f5ffd5b84356001600160401b03811115617ba1575f5ffd5b617bad878288016174f1565b945050617bbc602086016173f2565b9250617bca604086016173f2565b9396929550929360600135925050565b5f5f5f5f60808587031215617bed575f5ffd5b617bf6856173f2565b9350617c04602086016173f2565b92506040850135915060608501356001600160401b03811115617c25575f5ffd5b617c31878288016174f1565b91505092959194509250565b5f6080828403128015617c4e575f5ffd5b509092915050565b5f5f60408385031215617c67575f5ffd5b617c70836173f2565b9150617c7e60208401617b50565b90509250929050565b5f5f60408385031215617c98575f5ffd5b617ca1836173f2565b9150617c7e602084016173f2565b6001600160a01b038816815263ffffffff87811660208301528616604082015260e08101617ce060608301876176a0565b931515608082015260ff92831660a0820152911660c090910152949350505050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b81810381811115610eee57610eee617d16565b604081016001600160a01b03617d52846173f2565b168252602092830135929091019190915290565b600181811c90821680617d7a57607f821691505b602082108103617d9857634e487b7160e01b5f52602260045260245ffd5b50919050565b8082028115828204841417610eee57610eee617d16565b80820180821115610eee57610eee617d16565b634e487b7160e01b5f52601260045260245ffd5b5f82617dea57617dea617dc8565b500490565b96875260208701959095526001600160a01b03938416604087015291909216606085015260ff90911660808401526001600160401b031660a083015260c082015260e00190565b6001600160401b038181168382160190811115610eee57610eee617d16565b63ffffffff8181168382160190811115610eee57610eee617d16565b63ffffffff8281168282160390811115610eee57610eee617d16565b60208101610eee82846176a0565b5f60018201617eac57617eac617d16565b5060010190565b5f60ff821660ff8103617ec857617ec8617d16565b60010192915050565b813581556020820135600182015560408201356002820155600381016060830135617efb8161786e565b815463ffffffff191663ffffffff919091161790555050565b5f6001600160401b0382166001600160401b038103617ec857617ec8617d16565b5f81518060208401855e5f93019283525090919050565b7f7b226e616d65223a202254656c636f696e2d4e6574776f726b20436f6e73656e8152651cdd5cd3919560d21b60208201525f617f8c6026830185617f35565b7f222c20226465736372697074696f6e223a2022455243373231204e465420776881527f6f7365206f776e657273686970206c656467657220726570726573656e74732060208201527f746865207065726d697373696f6e65642077686974656c69737420666f72207660408201527530b634b230ba37b9399116101134b6b0b3b2911d101160511b60608201526180276076820185617f35565b61227d60f01b815260020195945050505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c00000081525f6142c1601d830184617f35565b81546001600160a01b038116825263ffffffff60a082901c8116602084015260c082901c16604083015260e08201906180ae6060840160ff8360e01c166176a0565b6180c26080840160ff8360e81c1615159052565b60f081901c60ff1660a084015260f881901c60c084015261630b565b606081525f6180f06060830186617421565b82810360208401526181028186617421565b90508281036040840152614bb98185617421565b5f6142c18284617f35565b5f60208284031215618131575f5ffd5b81516142c1816177df565b602081525f8251602080840152612b956040840182617421565b5f5b828110156110d2575f82820155600101618158565b601f8211156110d257828211156110d257805f5260205f20601f840160051c602085101561819857505f5b61129881601f860160051c03828401618156565b6001600160401b038311156181c3576181c36174dd565b6181d7836181d18354617d66565b8361816d565b5f601f841160018114618208575f85156181f15750838201355b5f19600387901b1c1916600186901b178355611298565b5f83815260208120601f198716915b828110156182375786850135825560209485019460019092019101618217565b5086821015618253575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b60ff8181168382160190811115610eee57610eee617d16565b5f60ff83168061829057618290617dc8565b8060ff84160691505092915050565b60ff8281168282160390811115610eee57610eee617d16565b5f63ffffffff821663ffffffff8103617ec857617ec8617d16565b81516001600160401b038111156182ec576182ec6174dd565b600160401b811115618300576183006174dd565b81548183558082101561832457825f528160205f200161832283830382618156565b505b5060208301825f5260205f205f5b838110156140765782516001600160a01b031682820155602090920191600101618332565b6001600160a01b03858116825284166020820152604081018390526080606082018190525f90614bb990830184617421565b5f60208284031215618399575f5ffd5b81516142c18161733d565b5f816183b2576183b2617d16565b505f190190565b7f646174613a696d6167652f7376672b786d6c3b6261736536342c00000000000081525f6142c1601a830184617f35565b634e487b7160e01b5f52603160045260245ffd5b6001600160e81b0319841681525f6184196003830185617f35565b60609390931b6001600160601b031916835250506014019291505056fe00000000000000000000000007a07a07a07a07a07a07a07a07a07a07a07a07a03c7376672077696474683d22373922206865696768743d223830222076696577426f783d22302030203739203830222066696c6c3d226e6f6e652220786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f737667223e203c6d61736b2069643d226d61736b305f3834395f3334313722207374796c653d226d61736b2d747970653a616c70686122206d61736b556e6974733d227573657253706163654f6e5573652220783d22302220793d2230222077696474683d22373922206865696768743d223830223e203c726563742077696474683d2237382e30303522206865696768743d223830222066696c6c3d2223433443344334222f3e203c2f6d61736b3e203c67206d61736b3d2275726c28236d61736b305f3834395f3334313729223e203c7265637420783d2231372e393534362220793d2231382e33353435222077696474683d2234322e3239343322206865696768743d2234332e32393138222066696c6c3d227768697465222f3e203c7061746820643d224d37342e323336392032312e393839324337362e363930382032342e303331352037382e323338392032382e323537372037372e363937392033312e333733334c37322e343136362036312e333235334337312e3836362036342e343437352036382e393539322036372e383739382036352e393632392036382e393631324c33372e313934372037392e333334344333342e313938342038302e343135372032392e373432312037392e363239392032372e323936342037372e3538394c332e3831312035382e3030323143312e33353730382035352e39353938202d302e31393233382035312e3734313720302e3335383134382034382e363139354c352e36333935312031382e3636373443362e31393030342031352e3534353220392e30393638372031322e313132392031322e303933322031312e303331364c34302e3835393920302e3636363435334334332e38353632202d302e3431343835372034382e3331323520302e3337303930392035302e3735383320322e343131384c37342e323336392032312e393839325a4d34392e373634352033352e343336394c35302e393336342032392e333531334c33392e393531372032392e333638374c34312e3531362032312e333432344c33372e393538332032312e333432344333372e393538332032312e333432342033342e363332382032372e323930312032372e333030362033302e323031394c32362e323839392033352e343530334c33312e303933362033352e34364333312e303933362033352e34362032392e343637342034332e303032392032382e393331362034352e373835344332372e353637372035322e383638322033302e393830362035372e383933392033362e323238312035372e383933394333382e383630362035372e383933392034312e3831372035372e383933392034352e303937322035372e383933394c34362e363532342035312e313636364334362e323734322035312e313636362034332e383031332035312e313636362033392e323333362035312e313636364333352e393336342035312e313636362033362e313039392034392e333138392033362e373433312034362e303330354c33382e373833382033352e343333334c34392e373634352033352e343336395a222066696c6c3d2223313443384646222f3e203c2f673e203c2f7376673e03346f418777de37a432a76ace912eeb3d1d63333a4f8c59df9ae07eb09732154142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa164736f6c6343000823000a","sourceMap":"1341:81849:56:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1753:36;;;;;;;;;;;;;;;;;;;160:25:73;;;148:2;133:18;1753:36:56;;;;;;;;1435:222:30;;;;;;;;;;-1:-1:-1;1435:222:30;;;;;:::i;:::-;;:::i;:::-;;;843:14:73;;836:22;818:41;;806:2;791:18;1435:222:30;678:187:73;10819:2134:56;;;;;;;;;;-1:-1:-1;10819:2134:56;;;;;:::i;:::-;;:::i;:::-;;24439:249;;;;;;;;;;-1:-1:-1;24439:249:56;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;2364:89:27:-;;;;;;;;;;;;;:::i;47484:136:56:-;;;;;;;;;;-1:-1:-1;47484:136:56;;;;;:::i;:::-;;:::i;3496:154:27:-;;;;;;;;;;-1:-1:-1;3496:154:27;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;3241:32:73;;;3223:51;;3211:2;3196:18;3496:154:27;3077:203:73;6688:194:58;;;;;;;;;;-1:-1:-1;6688:194:58;;;;;:::i;:::-;;:::i;7705:3069:56:-;;;;;;;;;;-1:-1:-1;7705:3069:56;;;;;:::i;:::-;;:::i;34265:513::-;;;;;;;;;;;;;:::i;39433:644::-;;;;;;;;;;-1:-1:-1;39433:644:56;;;;;:::i;:::-;;:::i;29852:1893::-;;;;;;:::i;:::-;;:::i;27353:481::-;;;;;;;;;;-1:-1:-1;27353:481:56;;;;;:::i;:::-;;:::i;:::-;;;;7248:25:73;;;7304:2;7289:18;;7282:34;;;;7332:18;;;7325:34;7236:2;7221:18;27353:481:56;7046:319:73;2062:102:30;;;;;;;;;;-1:-1:-1;2140:10:30;:17;2062:102;;25137:397:56;;;;;;;;;;-1:-1:-1;25137:397:56;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;43725:866::-;;;;;;;;;;;;;:::i;20841:118::-;;;;;;;;;;;;;:::i;6344:239:58:-;;;;;;;;;;-1:-1:-1;6344:239:58;;;;;:::i;23515:401:56:-;;;;;;;;;;-1:-1:-1;23515:401:56;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;47665:185::-;;;;;;;;;;-1:-1:-1;47665:185:56;;;;;:::i;:::-;;:::i;35452:393::-;;;;;;;;;;-1:-1:-1;35452:393:56;;;;;:::i;:::-;;:::i;1736:255:30:-;;;;;;;;;;-1:-1:-1;1736:255:30;;;;;:::i;:::-;;:::i;28936:877:56:-;;;;;;:::i;:::-;;:::i;453:92:59:-;;;;;;;;;;;;-1:-1:-1;;;;;453:92:59;;47221:224:56;;;:::i;22116:1137::-;;;;;;;;;;-1:-1:-1;22116:1137:56;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;1918:29::-;;;;;;;;;;-1:-1:-1;1918:29:56;;;;;:::i;:::-;;:::i;:::-;;;;13097:25:73;;;-1:-1:-1;;;;;13158:31:73;;;13153:2;13138:18;;13131:59;13238:10;13226:23;;;13206:18;;;13199:51;;;;13286:23;13281:2;13266:18;;13259:51;13359:4;13347:17;13341:3;13326:19;;13319:46;13084:3;13069:19;1918:29:56;12848:523:73;26331:130:56;;;;;;;;;;-1:-1:-1;26331:130:56;;;;;:::i;:::-;;:::i;77838:65::-;;;;;;;;;;;;;:::i;4786:132:27:-;;;;;;;;;;-1:-1:-1;4786:132:27;;;;;:::i;:::-;;:::i;32045:2175:56:-;;;;;;:::i;:::-;;:::i;3879:51::-;;;;;;;;;;-1:-1:-1;3879:51:56;;;;;:::i;:::-;;;;;;;;;;;;;;2236:226:30;;;;;;;;;;-1:-1:-1;2236:226:30;;;;;:::i;:::-;;:::i;4106:34:56:-;;;;;;;;;;-1:-1:-1;4106:34:56;;;;;;;;1953:35;;;;;;;;;;-1:-1:-1;1953:35:56;;;;;:::i;:::-;;:::i;1850:84:39:-;;;;;;;;;;-1:-1:-1;1920:7:39;;;;;;;1850:84;;19943:570:56;;;;;;;;;;-1:-1:-1;19943:570:56;;;;;:::i;:::-;;:::i;2184:118:27:-;;;;;;;;;;-1:-1:-1;2184:118:27;;;;;:::i;:::-;;:::i;21423:311:56:-;;;;;;;;;;;;;:::i;:::-;;;13825:4:73;13813:17;;;13795:36;;13783:2;13768:18;21423:311:56;13653:184:73;45620:760:56;;;;;;;;;;-1:-1:-1;45620:760:56;;;;;:::i;:::-;;:::i;25579:707::-;;;;;;;;;;-1:-1:-1;25579:707:56;;;;;:::i;:::-;;:::i;24733:359::-;;;;;;;;;;-1:-1:-1;24733:359:56;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;26506:477::-;;;;;;;;;;-1:-1:-1;26506:477:56;;;;;:::i;:::-;;:::i;1919:208:27:-;;;;;;;;;;-1:-1:-1;1919:208:27;;;;;:::i;:::-;;:::i;2293:101:20:-;;;;;;;;;;;;;:::i;27022:292:56:-;;;;;;;;;;-1:-1:-1;27022:292:56;;;;;:::i;:::-;;:::i;6025:1635::-;;;;;;;;;;-1:-1:-1;6025:1635:56;;;;;:::i;:::-;;:::i;4261:272:58:-;;;;;;;;;;;;;:::i;:::-;;;;;;15880:13:73;;15862:32;;15950:4;15938:17;;;15932:24;15910:20;;;15903:54;16013:4;16001:17;;;15995:24;15973:20;;;15966:54;16080:4;16068:17;;;16062:24;16088:10;16058:41;16036:20;;;16029:71;;;;15849:3;15834:19;;15655:451;77601:61:56;;;;;;;;;;;;;:::i;11383:596:51:-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;1198:94:58:-;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1198:94:58;;46419:763:56;;;;;;;;;;-1:-1:-1;46419:763:56;;;;;:::i;:::-;;:::i;23298:172::-;;;;;;;;;;-1:-1:-1;23298:172:56;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;1638:85:20:-;;;;;;;;;;-1:-1:-1;1710:6:20;;;;;-1:-1:-1;;;;;1710:6:20;1638:85;;2517:93:27;;;;;;;;;;;;;:::i;23961:433:56:-;;;;;;;;;;-1:-1:-1;23961:433:56;;;;;:::i;:::-;;:::i;6987:208:58:-;;;;;;;;;;-1:-1:-1;6987:208:58;;;;;:::i;4095:126::-;;;;;;;;;;-1:-1:-1;4095:126:58;;;;;:::i;:::-;;:::i;41547:131:56:-;;;;;;;;;;;;;:::i;18375:1216::-;;;;;;;;;;;;;:::i;27874:972::-;;;;;;;;;;-1:-1:-1;27874:972:56;;;;;:::i;:::-;;:::i;40117:1336::-;;;;;;;;;;;;;:::i;4984:233:27:-;;;;;;;;;;-1:-1:-1;4984:233:27;;;;;:::i;:::-;;:::i;21779:92:56:-;;;;;;;;;;-1:-1:-1;21852:12:56;;-1:-1:-1;;;21852:12:56;;;;21779:92;;20042:10:73;20030:23;;;20012:42;;20000:2;19985:18;21779:92:56;19868:192:73;21916:155:56;;;;;;;;;;;;;:::i;3607:74::-;;;;;;;;;;-1:-1:-1;3607:74:56;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;3607:74:56;;;-1:-1:-1;;;;;3607:74:56;;;;;;;;20320:4:73;20308:17;;;20290:36;;20374:10;20362:23;;;20357:2;20342:18;;20335:51;-1:-1:-1;;;;;20422:32:73;;;20402:18;;;20395:60;;;;20486:2;20471:18;;20464:34;20277:3;20262:19;3607:74:56;20065:439:73;82593:595:56;;;;;;;;;;-1:-1:-1;82593:595:56;;;;;:::i;:::-;;:::i;31785:215::-;;;;;;;;;;;;;:::i;7251:672:58:-;;;;;;;;;;-1:-1:-1;7251:672:58;;;;;:::i;:::-;;:::i;4543:51:56:-;;;;;;;;;;-1:-1:-1;4543:51:56;;;;;:::i;:::-;;;;;;;;;;;;;;35885:3508;;;;;;:::i;:::-;;:::i;3927:153:27:-;;;;;;;;;;-1:-1:-1;3927:153:27;;;;;:::i;:::-;;:::i;20558:104:56:-;;;;;;;;;;-1:-1:-1;20638:17:56;;-1:-1:-1;;;20638:17:56;;;;20558:104;;21450:6:73;21438:19;;;21420:38;;21408:2;21393:18;20558:104:56;21276:188:73;19636:262:56;;;;;;;;;;-1:-1:-1;19636:262:56;;;;;:::i;:::-;;:::i;2543:215:20:-;;;;;;;;;;-1:-1:-1;2543:215:20;;;;;:::i;:::-;;:::i;44630:904:56:-;;;;;;;;;;-1:-1:-1;44630:904:56;;;;;:::i;:::-;;:::i;1795:51::-;;;;;;;;;;-1:-1:-1;1795:51:56;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;1795:51:56;;;;-1:-1:-1;;;1795:51:56;;;;;-1:-1:-1;;;1795:51:56;;;;;;;-1:-1:-1;;;1795:51:56;;;;;-1:-1:-1;;;1795:51:56;;;;;-1:-1:-1;;;1795:51:56;;;;;-1:-1:-1;;;1795:51:56;;;;;;;;;;;;;;;;;;:::i;1435:222:30:-;1537:4;-1:-1:-1;;;;;;1560:50:30;;-1:-1:-1;;;1560:50:30;;:90;;;1614:36;1638:11;1614:23;:36::i;:::-;1553:97;1435:222;-1:-1:-1;;1435:222:30:o;10819:2134:56:-;592:10:59;-1:-1:-1;;;;;592:28:59;588:67;;629:26;;-1:-1:-1;;;629:26:59;;644:10;629:26;;;3223:51:73;3196:18;;629:26:59;;;;;;;;588:67;10915:9:56::1;10910:2037;10926:18:::0;;::::1;10910:2037;;;10965:20;10988:7;;10996:1;10988:10;;;;;;;:::i;:::-;;;::::0;;;::::1;::::0;-1:-1:-1;11237:15:56::1;::::0;-1:-1:-1;11263:22:56::1;;::::0;::::1;10988:10:::0;11263:22:::1;:::i;:::-;11237:49:::0;-1:-1:-1;;;;;;11304:12:56;::::1;::::0;;:44:::1;;-1:-1:-1::0;;;;;;11320:28:56;;::::1;;11304:44;11300:58;;;11350:8;;;;11300:58;11543:33;11553:22;;::::0;::::1;:5:::0;:22:::1;:::i;11543:33::-;11539:47;;;11578:8;;;;11539:47;12331:25;12279:10;:34;12290:22;;::::0;::::1;:5:::0;:22:::1;:::i;:::-;-1:-1:-1::0;;;;;12279:34:56::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;12279:34:56;:48;-1:-1:-1;;;12279:48:56;::::1;;;:77;::::0;::::1;;;;;;:::i;:::-;::::0;12275:91:::1;;12358:8;;;;12275:91;12420:12;::::0;::::1;::::0;::::1;::::0;12385:8:::1;::::0;:32:::1;::::0;12394:22:::1;::::0;12420:5;12394:22:::1;:::i;:::-;-1:-1:-1::0;;;;;12385:32:56::1;-1:-1:-1::0;;;;;12385:32:56::1;;;;;;;;;;;;;:47;12381:513;;;12726:12;::::0;::::1;::::0;::::1;::::0;12690:8:::1;::::0;:32:::1;::::0;12699:22:::1;::::0;12726:5;12699:22:::1;:::i;:::-;-1:-1:-1::0;;;;;12690:32:56::1;-1:-1:-1::0;;;;;12690:32:56::1;;;;;;;;;;;;;:48;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;12381:513:56::1;::::0;-1:-1:-1;12381:513:56::1;;12841:38;12856:22;;::::0;::::1;:5:::0;:22:::1;:::i;:::-;12841:14;:38::i;:::-;12913:23;12930:5;12913:23;;;;;;:::i;:::-;;;;;;;;10951:1996;;10910:2037;10946:3;;10910:2037;;;;10819:2134:::0;;:::o;24439:249::-;-1:-1:-1;;;;;24554:28:56;;24532:19;24554:28;;;:10;:28;;;;;24532:50;;24508:12;;24532:19;24554:28;24532:50;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24596:6;:13;24613:1;24596:18;24592:66;;24623:35;;-1:-1:-1;;;24623:35:56;;-1:-1:-1;;;;;3241:32:73;;24623:35:56;;;3223:51:73;3196:18;;24623:35:56;3077:203:73;2364:89:27;2409:13;2441:5;2434:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2364:89;:::o;47484:136:56:-;1531:13:20;:11;:13::i;:::-;47566:47:56::1;::::0;-1:-1:-1;;;47566:47:56;;::::1;::::0;::::1;23555:25:73::0;;;47602:10:56::1;23596:18:73::0;;;23589:60;-1:-1:-1;;;;;;;;;;;1249:42:58;47566:27:56::1;::::0;23528:18:73;;47566:47:56::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47484:136:::0;:::o;3496:154:27:-;3563:7;3582:22;3596:7;3582:13;:22::i;:::-;-1:-1:-1;6033:7:27;6059:24;;;:15;:24;;;;;;-1:-1:-1;;;;;6059:24:27;3622:21;5963:127;6688:194:58;6858:17;;-1:-1:-1;;;6858:17:58;;;;;;;;;;;7705:3069:56;592:10:59;-1:-1:-1;;;;;592:28:59;588:67;;629:26;;-1:-1:-1;;;629:26:59;;644:10;629:26;;;3223:51:73;3196:18;;629:26:59;3077:203:73;588:67:59;7893:19:56::1;::::0;7963:11;-1:-1:-1;;;;;7949:33:56;::::1;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;7949:33:56::1;;7922:60;;7997:9;7992:1802;8008:22:::0;;::::1;7992:1802;;;8051:26;8080:11;;8092:1;8080:14;;;;;;;:::i;:::-;;;;;;8051:43;;8112:6;:27;;;8143:1;8112:32:::0;8108:46:::1;;8146:8;;;8108:46;8393:16;8420:23;;::::0;::::1;:6:::0;:23:::1;:::i;:::-;8393:51:::0;-1:-1:-1;;;;;;8462:13:56;::::1;::::0;;:46:::1;;-1:-1:-1::0;;;;;;8479:29:56;;::::1;;8462:46;8458:60;;;8510:8;;;;8458:60;8703:34;8713:23;;::::0;::::1;:6:::0;:23:::1;:::i;8703:34::-;8699:48;;;8739:8;;;;8699:48;8762:21;8786:10;8762:21:::0;8797:23:::1;;::::0;::::1;:6:::0;:23:::1;:::i;:::-;-1:-1:-1::0;;;;;8786:35:56::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;-1:-1:-1;8786:35:56;;;:48;-1:-1:-1;;;8786:48:56;::::1;;;9174:25:::0;;;:8:::1;:25:::0;;;;;:37;8786:48;;-1:-1:-1;9174:37:56;;9243:8:::1;::::0;-1:-1:-1;;9252:23:56::1;::::0;;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;;;;;9243:33:56::1;-1:-1:-1::0;;;;;9243:33:56::1;;;;;;;;;;;;;9225:51;;9561:19;9593:18;9583:7;:28;:59;;9624:18;9583:59;;;9614:7;9583:59;9561:81:::0;-1:-1:-1;9656:14:56::1;9673:41;9687:27;::::0;::::1;;9561:81:::0;9673:41:::1;:::i;:::-;9656:58:::0;-1:-1:-1;9729:21:56::1;9656:58:::0;9729:21;::::1;:::i;:::-;;;9777:6;9764:7;9772:1;9764:10;;;;;;;;:::i;:::-;;;;;;:19;;;::::0;::::1;8037:1757;;;;;;;7992:1802;8032:3;;7992:1802;;;;9808:11;9823:1;9808:16:::0;9804:29:::1;;9826:7;;7705:3069:::0;;:::o;9804:29::-:1;9925:21;9949;:19;:21::i;:::-;:35;;;9925:59;;9994:34;10047:21;;10031:13;:37;;;;:::i;:::-;9994:74;;10152:25;10192:9;10187:442;10203:22:::0;;::::1;10187:442;;;10363:20;10430:11;10416:7;10424:1;10416:10;;;;;;;;:::i;:::-;;;;;;;10387:26;:39;;;;:::i;:::-;10386:55;;;;:::i;:::-;10363:78:::0;-1:-1:-1;10460:16:56;;10456:163:::1;;10541:12;10496:8;:41;10505:11;;10517:1;10505:14;;;;;;;:::i;:::-;:31;::::0;::::1;:14;::::0;;::::1;;:31:::0;;::::1;::::0;-1:-1:-1;10505:31:56::1;:::i;:::-;-1:-1:-1::0;;;;;10496:41:56::1;-1:-1:-1::0;;;;;10496:41:56::1;;;;;;;;;;;;;:57;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;10571:33:56::1;::::0;-1:-1:-1;10592:12:56;10571:33;::::1;:::i;:::-;;;10456:163;-1:-1:-1::0;10227:3:56::1;;10187:442;;;-1:-1:-1::0;10721:46:56::1;10750:17:::0;10721:26;:46:::1;:::i;:::-;10697:21;:70:::0;-1:-1:-1;;;;;665:1:59::1;7705:3069:56::0;;:::o;34265:513::-;1474:19:39;:17;:19::i;:::-;1635:9:54::1;1610:22;1604:29;1601:44:::0;1598:158:::1;;1677:10;1671:4;1664:24;1737:4;1731;1724:18;1598:158;1800:9;1776:22;1769:41;34430:35:56::2;34454:10;34430:23;:35::i;:::-;;34521:57;34543:10;34555:22;34521:21;:57::i;:::-;34634:10;34589:31;34623:22:::0;;;:10:::2;:22;::::0;;;;34758:12:::2;::::0;34730:41:::2;::::0;34623:22;;-1:-1:-1;;;34758:12:56;::::2;;;34730:16;:41::i;:::-;34330:448;1937:10:54::1;1913:22;1906:42;34265:513:56:o:0;39433:644::-;1474:19:39;:17;:19::i;:::-;1635:9:54::1;1610:22;1604:29;1601:44:::0;1598:158:::1;;1677:10;1671:4;1664:24;1737:4;1731;1724:18;1598:158;1800:9;1776:22;1769:41;39614:39:56::2;39636:16;39614:21;:39::i;:::-;-1:-1:-1::0;;;;;;39707:39:56;;::::2;39664:40;39707:39:::0;;;:21:::2;:39;::::0;;;;;;;39664:82;;::::2;::::0;::::2;::::0;;;;::::2;::::0;::::2;::::0;;;::::2;;::::0;::::2;;::::0;;::::2;::::0;;;;-1:-1:-1;;;39664:82:56;::::2;::::0;;::::2;::::0;;;;;;;;::::2;::::0;;;;;39760:26;;39756:63:::2;;39795:24;;-1:-1:-1::0;;;39795:24:56::2;;;;;;;;;;;39756:63;-1:-1:-1::0;;;;;39837:39:56;::::2;;::::0;;;:21:::2;:39;::::0;;;;39830:46;;-1:-1:-1;;;;;;39830:46:56;;;;::::2;::::0;39886::::2;:21;39859:16:::0;39886:28:::2;:46::i;:::-;-1:-1:-1::0;39946:14:56::2;::::0;::::2;::::0;:18;39942:68:::2;;39966:44;39979:7;:14;;;39995:7;:14;;;39966:12;:44::i;:::-;40026;::::0;-1:-1:-1;;;;;40026:44:56;::::2;::::0;::::2;::::0;;;::::2;39538:539;1937:10:54::1;1913:22;1906:42;39433:644:56::0;:::o;29852:1893::-;1474:19:39;:17;:19::i;:::-;30272:21:56::1;30296:72;30321:17;30340:16;30358:9;;30296:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;30296:24:56::1;::::0;-1:-1:-1;;;30296:72:56:i:1;:::-;30272:96;;30489:22;30514:21;:19;:21::i;:::-;:34;;;30489:59;;30558:16;30577:45;30594:9;30605:16;30577;:45::i;:::-;30558:64;;30632:41;30656:16;30632:23;:41::i;:::-;;30735:66;30757:16;30775:25;30735:21;:66::i;:::-;-1:-1:-1::0;;;;;30826:29:56;::::1;30811:12;30826:29:::0;;;:11:::1;:29;::::0;;;;:35:::1;;::::0;-1:-1:-1;;;;;;;;30826:35:56;;::::1;;30970:7;1710:6:20::0;;-1:-1:-1;;;;;1710:6:20;;;;;;1638:85;30970:7:56::1;-1:-1:-1::0;;;;;30956:21:56::1;:10;-1:-1:-1::0;;;;;30956:21:56::1;;30952:568;;31015:8;30997:15;:26;30993:66;;;31032:27;::::0;-1:-1:-1;;;31032:27:56;;::::1;::::0;::::1;160:25:73::0;;;133:18;;31032:27:56::1;14:177:73::0;30993:66:56::1;31073:18;1417:156:58;31174:13:56;31189:16;31207:10;31219:16;31237:5;31244:8;31121:149;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;31094:190;;;;;;31073:211;;31298:14;31315:26;31330:10;31315:14;:26::i;:::-;31298:43;;31360:78;31387:16;31405:6;31413:24;;31360:26;:78::i;:::-;31355:155;;31465:30;::::0;-1:-1:-1;;;31465:30:56;;-1:-1:-1;;;;;3241:32:73;;31465:30:56::1;::::0;::::1;3223:51:73::0;3196:18;;31465:30:56::1;3077:203:73::0;31355:155:56::1;30979:541;;30952:568;31574:84;;;;;;;;31585:13;31574:84;;;;31600:16;-1:-1:-1::0;;;;;31574:84:56::1;;;;;31618:10;-1:-1:-1::0;;;;;31574:84:56::1;;;;;31630:16;31574:84;;;;;;31648:5;31656:1;31648:9;;;;:::i;:::-;-1:-1:-1::0;;;;;31574:84:56;;::::1;::::0;;;-1:-1:-1;;;;;31530:29:56;;::::1;;::::0;;;:11:::1;:29;::::0;;;;;;;;:128;;;;;;::::1;::::0;::::1;::::0;::::1;::::0;;-1:-1:-1;;;;;;31530:128:56::1;::::0;;::::1;::::0;;;::::1;::::0;;;;::::1;::::0;::::1;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;;;;::::1;-1:-1:-1::0;;;;;;31530:128:56;;;;;;;-1:-1:-1;;;31530:128:56::1;::::0;;::::1;::::0;;;::::1;::::0;;;::::1;-1:-1:-1::0;;;;31530:128:56::1;-1:-1:-1::0;;;31530:128:56;;;::::1;::::0;;;::::1;;::::0;;31668:70:::1;31682:9:::0;;31530:29;31711:16;31729:8;31668:13:::1;:70::i;:::-;30152:1593;;;;29852:1893:::0;;;;;;;:::o;27353:481::-;-1:-1:-1;;;;;27500:28:56;;27438:7;27500:28;;;:10;:28;;;;;;;;:41;-1:-1:-1;;;27500:41:56;;;;27580:26;;;:8;:26;;;;;:38;27438:7;;;;;27646:49;27500:28;27580:38;27646:11;:49::i;:::-;-1:-1:-1;;;;;27734:26:56;;;;27705;27734;;;:8;:26;;;;;;;27799:18;;;-1:-1:-1;27353:481:56;;-1:-1:-1;;;;27353:481:56:o;25137:397::-;25206:20;;:::i;:::-;-1:-1:-1;;;;;25267:28:56;;25238:26;25267:28;;;:10;:28;;;;;25389:14;;-1:-1:-1;;;25389:14:56;;;;25384:122;;25454:41;25478:16;25454:23;:41::i;:::-;;25384:122;25516:11;;;;;;;;;;-1:-1:-1;;;;;25516:11:56;;;;;-1:-1:-1;;;25516:11:56;;;;;;;;-1:-1:-1;;;25516:11:56;;;;;;;;;;;25523:4;;25516:11;;;;;-1:-1:-1;;;25516:11:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;;25516:11:56;;;;;;;;;;-1:-1:-1;;;25516:11:56;;;;;;;;-1:-1:-1;;;25516:11:56;;;;;;;;;;25137:397;-1:-1:-1;;;25137:397:56:o;43725:866::-;1474:19:39;:17;:19::i;:::-;43878:35:56::1;43902:10;43878:23;:35::i;:::-;;43970:17;43990:25;21354:22:::0;;;21270:113;43990:25:::1;44059:12;::::0;43970:45;;-1:-1:-1;44025:21:56::1;::::0;44049:9:::1;::::0;-1:-1:-1;;;44059:12:56;::::1;;;44049:23;::::0;::::1;;;;;:::i;:::-;;;;:40:::0;;-1:-1:-1;44099:45:56::1;44119:9:::0;44049:40;44099:19:::1;:45::i;:::-;44238:57;44260:10;44272:22;44238:21;:57::i;:::-;44350:10;44305:31;44339:22:::0;;;:10:::1;:22;::::0;;;;44388:12:::1;::::0;44424:25;;44388:12:::1;-1:-1:-1::0;;;44388:12:56;;::::1;::::0;::::1;::::0;-1:-1:-1;;;44424:25:56;;::::1;;44414:35:::0;::::1;44410:94;;;44472:21;::::0;-1:-1:-1;;;44472:21:56;;20042:10:73;20030:23;;44472:21:56::1;::::0;::::1;20012:42:73::0;19985:18;;44472:21:56::1;19868:192:73::0;44410:94:56::1;44563:21;44574:9;44563:10;:21::i;:::-;43778:813;;;;43725:866::o:0;20841:118::-;20901:7;20927:25;21354:22;;;21270:113;20927:25;20920:32;;20841:118;:::o;23515:401::-;23587:22;23621:29;23643:6;23621:21;:29::i;:::-;23661:22;23686;23701:6;23686:14;:22::i;:::-;23661:47;;23718:28;23769:5;:12;-1:-1:-1;;;;;23749:33:56;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;23718:64;;23797:9;23792:95;23812:5;:12;23808:1;:16;23792:95;;;23856:10;:20;23867:5;23873:1;23867:8;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;23856:20:56;;;;;;;;;;;;;;;;-1:-1:-1;23856:20:56;23845:31;;;;;;;;;;;;;;;-1:-1:-1;;;23845:31:56;;;;;;;;;;;-1:-1:-1;;;23845:31:56;;;;;;;;;;;;;;;;;;-1:-1:-1;;;23845:31:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;;23845:31:56;;;;;;;;;;-1:-1:-1;;;23845:31:56;;;;;;;;-1:-1:-1;;;23845:31:56;;;;;;;;;:8;;:5;;23851:1;;23845:8;;;;;;:::i;:::-;;;;;;;;;;:31;23826:3;;23792:95;;;-1:-1:-1;23904:5:56;23515:401;-1:-1:-1;;;23515:401:56:o;47665:185::-;1531:13:20;:11;:13::i;:::-;47753:22:56::1;:33:::0;;-1:-1:-1;;47753:33:56::1;::::0;::::1;;::::0;;::::1;::::0;;;47801:42:::1;::::0;818:41:73;;;47801:42:56::1;::::0;806:2:73;791:18;47801:42:56::1;;;;;;;;47665:185:::0;:::o;35452:393::-;1474:19:39;:17;:19::i;:::-;1635:9:54::1;1610:22;1604:29;1601:44:::0;1598:158:::1;;1677:10;1671:4;1664:24;1737:4;1731;1724:18;1598:158;1800:9;1776:22;1769:41;35560:17:56::2;35580:39;35602:16;35580:21;:39::i;:::-;-1:-1:-1::0;;;;;35654:28:56;::::2;35629:22;35654:28:::0;;;:10:::2;:28;::::0;;;;:41;35560:59;;-1:-1:-1;;;;35654:41:56;;::::2;;;::::0;35723:65:::2;35654:28:::0;35560:59;35654:41;35723:18:::2;:65::i;:::-;35705:83;;35819:9;-1:-1:-1::0;;;;;35804:34:56::2;;35830:7;35804:34;;;;160:25:73::0;;148:2;133:18;;14:177;35804:34:56::2;;;;;;;;35550:295;;;1937:10:54::1;1913:22;1906:42;35452:393:56::0;:::o;1736:255:30:-;1824:7;1856:16;1866:5;1856:9;:16::i;:::-;1847:5;:25;1843:99;;1895:36;;-1:-1:-1;;;1895:36:30;;-1:-1:-1;;;;;25302:32:73;;1895:36:30;;;25284:51:73;25351:18;;;25344:34;;;25257:18;;1895:36:30;25110:274:73;1843:99:30;-1:-1:-1;;;;;;1958:19:30;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;1736:255::o;28936:877:56:-;1474:19:39;:17;:19::i;:::-;29213:66:56::1;29238:17;29257:10;29269:9;;29213:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;29213:24:56::1;::::0;-1:-1:-1;;;29213:66:56:i:1;:::-;;29388:22;29413:21;:19;:21::i;:::-;:34;;;29388:59;;29457:16;29476:45;29493:9;29504:16;29476;:45::i;:::-;29457:64;;29531:35;29555:10;29531:23;:35::i;:::-;;29624:60;29646:10;29658:25;29624:21;:60::i;:::-;29742:64;29756:9;;29767:10;29779:16;29797:8;29742:13;:64::i;47221:224::-:0;1531:13:20;:11;:13::i;:::-;47307:37:56::1;::::0;47296:6:::1;::::0;-1:-1:-1;;;;;;;;;;;1249:42:58;47329:9:56::1;::::0;47296:6;47307:37;47296:6;47307:37;47329:9;1249:42:58;47307:37:56::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47295:49;;;47404:1;47399:39;;47414:24;;-1:-1:-1::0;;;47414:24:56::1;;;;;;;;;;;47399:39;47285:160;47221:224::o:0;22116:1137::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22218:12:56;;-1:-1:-1;;;22218:12:56;;;;22252:11;22218:12;22262:1;22252:11;:::i;:::-;22244:19;;:5;:19;;;:60;;;;22279:1;22268:7;:12;;;;:35;;;;-1:-1:-1;22292:11:56;22302:1;22292:7;:11;:::i;:::-;22284:19;;:5;:19;;;22268:35;22240:117;;;22327:19;;-1:-1:-1;;;22327:19:56;;20042:10:73;20030:23;;22327:19:56;;;20012:42:73;19985:18;;22327:19:56;19868:192:73;22240:117:56;22390:12;;-1:-1:-1;;;22390:12:56;;;;22416:15;;;;;;;;22412:835;;;22798:23;22824:51;22844:5;22851:7;22860:14;22824:19;:51::i;:::-;22798:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22798:77:56;;;;;;;;;;;;;;;;-1:-1:-1;;;22798:77:56;;;-1:-1:-1;;22798:77:56;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22798:77:56;;;;;;;;;;;-1:-1:-1;;;22798:77:56;;;;;;;;-1:-1:-1;;;22798:77:56;;;;;;;;;;;;;-1:-1:-1;;;22798:77:56;;;;;;;;;;22933:12;;;;;-1:-1:-1;22924:22:56;;;:8;:22;;;;;;22983:26;;;;22960:20;;;:49;;;;23046:26;;;;;;;;23023:20;;;:49;23086:19;;:34;22798:77;22116:1137;-1:-1:-1;;;;;22116:1137:56:o;22412:835::-;23185:51;23205:5;23212:7;23221:14;23185:19;:51::i;:::-;23178:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23178:58:56;;;;;;;;;;;;;;;;-1:-1:-1;;;23178:58:56;;;-1:-1:-1;;23178:58:56;;;;;;;;;;;;;-1:-1:-1;;;;;23178:58:56;;;;;;;-1:-1:-1;;;23178:58:56;;;;;;;;-1:-1:-1;;;23178:58:56;;;;;;;;-1:-1:-1;;;23178:58:56;;;;;;;;;;22116:1137;-1:-1:-1;;;;22116:1137:56:o;1918:29::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1918:29:56;;;-1:-1:-1;;;1918:29:56;;;;;;;-1:-1:-1;;;1918:29:56;;;;;;-1:-1:-1;;;1918:29:56;;;;;:::o;26331:130::-;-1:-1:-1;;;;;13296:29:58;;;26401:4:56;13296:29:58;;;:11;:29;;;;;:39;;;26401:4:56;;13296:39:58;:53;;26424:30:56;13202:154:58;77838:65:56;1531:13:20;:11;:13::i;:::-;77886:10:56::1;:8;:10::i;:::-;77838:65::o:0;4786:132:27:-;4872:39;4889:4;4895:2;4899:7;4872:39;;;;;;;;;;;;:16;:39::i;32045:2175:56:-;1474:19:39;:17;:19::i;:::-;1635:9:54::1;1610:22;1604:29;1601:44:::0;1598:158:::1;;1677:10;1671:4;1664:24;1737:4;1731;1724:18;1598:158;1800:9;1776:22;1769:41;32271::56::2;32295:16;32271:23;:41::i;:::-;-1:-1:-1::0;1710:6:20;;;;;-1:-1:-1;;;;;1710:6:20;-1:-1:-1;;;;;32481:21:56::2;:10;-1:-1:-1::0;;;;;32481:21:56::2;;32477:283;;32522:22;::::0;::::2;;32518:59;;;32553:24;;-1:-1:-1::0;;;32553:24:56::2;;;;;;;;;;;32518:59;32591:17;32611:31;32625:16;32611:13;:31::i;:::-;32591:51:::0;-1:-1:-1;32660:10:56::2;-1:-1:-1::0;;;;;32660:30:56;::::2;;::::0;::::2;::::0;:57:::2;;-1:-1:-1::0;32694:10:56::2;-1:-1:-1::0;;;;;32694:23:56;::::2;;;32660:57;32656:93;;;32726:23;::::0;-1:-1:-1;;;32726:23:56;;-1:-1:-1;;;;;3241:32:73;;32726:23:56::2;::::0;::::2;3223:51:73::0;3196:18;;32726:23:56::2;3077:203:73::0;32656:93:56::2;32504:256;32477:283;-1:-1:-1::0;;;;;32877:28:56;::::2;32852:22;32877:28:::0;;;:10:::2;:28;::::0;;;;:42;-1:-1:-1;;;32877:42:56;::::2;;;32956:22;32946:6;:32;;;;;;;;:::i;:::-;;;:79;;;;-1:-1:-1::0;32992:33:56::2;32982:6;:43;;;;;;;;:::i;:::-;;;32946:79;:131;;;;-1:-1:-1::0;33055:22:56::2;33045:6;:32;;;;;;;;:::i;:::-;;;32946:131;32929:212;;;33123:6;33109:21;;-1:-1:-1::0;;;33109:21:56::2;;;;;;;;:::i;32929:212::-;-1:-1:-1::0;;;;;33176:28:56;::::2;33151:22;33176:28:::0;;;:10:::2;:28;::::0;;;;;;;:41;-1:-1:-1;;;33176:41:56;::::2;;;33249:26:::0;;;:8:::2;:26:::0;;;;;:38;33322:26;;;:8:::2;:26:::0;;;;;;;33176:41;;33249:38;33362:29;;::::2;33358:134;;33414:67;::::0;-1:-1:-1;;;33414:67:56;;-1:-1:-1;;;;;26388:32:73;;33414:67:56::2;::::0;::::2;26370:51:73::0;26437:18;;;26430:34;;;26512:4;26500:17;;26480:18;;;26473:45;26343:18;;33414:67:56::2;26172:352:73::0;33358:134:56::2;33502:15;33520:28;33534:14:::0;33520:11;:28:::2;:::i;:::-;33502:46;;33575:7;33562:9;:20;33558:125;;33605:67;::::0;-1:-1:-1;;;33605:67:56;;-1:-1:-1;;;;;26388:32:73;;33605:67:56::2;::::0;::::2;26370:51:73::0;33644:9:56::2;26437:18:73::0;;;26430:34;26512:4;26500:17;;26480:18;;;26473:45;26343:18;;33605:67:56::2;26172:352:73::0;33558:125:56::2;-1:-1:-1::0;;;;;33693:26:56;::::2;;::::0;;;:8:::2;:26;::::0;;;;:37;;33723:7;;33693:26;:37:::2;::::0;33723:7;;33693:37:::2;:::i;:::-;::::0;;;-1:-1:-1;;34017:37:56::2;::::0;34006:6:::2;::::0;-1:-1:-1;;;;;;;;;;;1249:42:58;34039:9:56::2;::::0;34006:6;34017:37;34006:6;34017:37;34039:9;1249:42:58;34017:37:56::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34005:49;;;34114:1;34109:39;;34124:24;;-1:-1:-1::0;;;34124:24:56::2;;;;;;;;;;;34109:39;34187:16;-1:-1:-1::0;;;;;34164:49:56::2;;34205:7;34164:49;;;;160:25:73::0;;148:2;133:18;;14:177;34164:49:56::2;;;;;;;;32151:2069;;;;;;1937:10:54::1;1913:22;1906:42;32045:2175:56::0;:::o;2236:226:30:-;2302:7;2334:13;2140:10;:17;;2062:102;2334:13;2325:5;:22;2321:101;;2370:41;;-1:-1:-1;;;2370:41:30;;2401:1;2370:41;;;25284:51:73;25351:18;;;25344:34;;;25257:18;;2370:41:30;25110:274:73;2321:101:30;2438:10;2449:5;2438:17;;;;;;;;:::i;:::-;;;;;;;;;2431:24;;2236:226;;;:::o;1953:35:56:-;;;;;;;;;;;19943:570;1531:13:20;:11;:13::i;:::-;20022:7:56::1;:12;;20033:1;20022:12:::0;20018:115:::1;;20088:12;::::0;20078:9:::1;::::0;-1:-1:-1;;;20088:12:56;::::1;;;20078:23;::::0;::::1;;;;;:::i;:::-;;;;:40:::0;20057:65:::1;::::0;-1:-1:-1;;;20057:65:56;;::::1;::::0;::::1;26711:25:73::0;;;;20078:33:56::1;26752:18:73::0;;;26745:34;26684:18;;20057:65:56::1;26529:256:73::0;20018:115:56::1;20199:16;20218:25;21354:22:::0;;;21270:113;20218:25:::1;20199:44;;20267:8;20257:7;:18;;;20253:104;;;20298:48;::::0;-1:-1:-1;;;20298:48:56;;::::1;::::0;::::1;26711:25:73::0;;;20329:16:56::1;::::0;::::1;26752:18:73::0;;;26745:34;26684:18;;20298:48:56::1;26529:256:73::0;20253:104:56::1;20384:17;::::0;;::::1;20411:27:::0;;::::1;-1:-1:-1::0;;;20411:27:56;;::::1;-1:-1:-1::0;;;;20411:27:56;::::1;;::::0;;;20454:52:::1;::::0;;20384:17;;;::::1;::::0;;::::1;27241:38:73::0;;;27310:2;27295:18;;27288:47;;;;27351:18;;;27344:34;;;20384:17:56;20454:52:::1;::::0;27229:2:73;27214:18;20454:52:56::1;;;;;;;20008:505;;19943:570:::0;:::o;2184:118:27:-;2247:7;2273:22;2287:7;2273:13;:22::i;21423:311:56:-;21487:5;21693:21;:19;:21::i;:::-;:34;;;21686:41;;21423:311;:::o;45620:760::-;1531:13:20;:11;:13::i;:::-;45791:27:56::1;45801:16;45791:9;:27::i;:::-;:32:::0;::::1;::::0;:63:::1;;;45827:27;45837:16;45827:9;:27::i;:::-;45787:133;;;45877:32;::::0;-1:-1:-1;;;45877:32:56;;-1:-1:-1;;;;;3241:32:73;;45877::56::1;::::0;::::1;3223:51:73::0;3196:18;;45877:32:56::1;3077:203:73::0;45787:133:56::1;-1:-1:-1::0;;;;;46210:28:56;::::1;;::::0;;;:10:::1;:28;::::0;;;;:64;;-1:-1:-1;;;;;;46210:64:56::1;::::0;::::1;::::0;;46319:54:::1;::::0;46210:28;;46319:5:::1;:54::i;25579:707::-:0;25647:4;25744:2;25724:22;;25720:40;;-1:-1:-1;25755:5:56;25748:12;;25720:40;25861:21;25885:20;25895:9;;25885:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25885:9:56;;-1:-1:-1;;;25885:20:56:i;:::-;25915:24;25942:39;;;:24;:39;;;;;;25861:44;;-1:-1:-1;;;;;;25942:39:56;;26047:48;;26090:5;26083:12;;;;;;26047:48;26216:27;26226:16;26216:9;:27::i;:::-;26212:45;;;26252:5;26245:12;;;;;;26212:45;-1:-1:-1;26275:4:56;;25579:707;-1:-1:-1;;;;25579:707:56:o;24733:359::-;24800:14;24826:26;24855:19;24868:5;24855:12;:19::i;:::-;:29;;;24826:58;;24894:22;24931:9;:16;-1:-1:-1;;;;;24919:29:56;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24894:54;;24963:9;24958:103;24978:7;:14;24974:1;:18;24958:103;;;25026:10;:24;25037:9;25047:1;25037:12;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;25026:24:56;-1:-1:-1;;;;;25026:24:56;;;;;;;;;;;;25013:37;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:7;25021:1;25013:10;;;;;;;;:::i;:::-;;;;;;;;;;:37;24994:3;;24958:103;;26506:477;26572:4;26592:38;-1:-1:-1;;;;;14385:32:58;;26592:7:56;:38::i;:::-;26588:333;;;-1:-1:-1;26709:5:56;;26506:477;-1:-1:-1;26506:477:56:o;26588:333::-;26781:25;-1:-1:-1;;;;;26735:28:56;;;;;;:10;:28;;;;;:42;-1:-1:-1;;;26735:42:56;;;;:71;;;;;;;;:::i;:::-;;26731:190;;-1:-1:-1;26905:5:56;;26506:477;-1:-1:-1;26506:477:56:o;26731:190::-;-1:-1:-1;;;;;;26938:28:56;;;;;:10;:28;;;;;:38;-1:-1:-1;;;26938:38:56;;;;;26506:477::o;1919:208:27:-;1982:7;-1:-1:-1;;;;;2005:19:27;;2001:87;;2047:30;;-1:-1:-1;;;2047:30:27;;2074:1;2047:30;;;3223:51:73;3196:18;;2047:30:27;3077:203:73;2001:87:27;-1:-1:-1;;;;;;2104:16:27;;;;;:9;:16;;;;;;;1919:208::o;2293:101:20:-;1531:13;:11;:13::i;:::-;2357:30:::1;2384:1;2357:18;:30::i;27022:292:56:-:0;-1:-1:-1;;;;;27138:28:56;;27098:7;27138:28;;;:10;:28;;;;;;;;:41;-1:-1:-1;;;27138:41:56;;;;27212:22;;;:8;:22;;;;;:34;27264:43;27138:28;27212:34;27264:11;:43::i;:::-;27257:50;27022:292;-1:-1:-1;;;;27022:292:56:o;6025:1635::-;592:10:59;-1:-1:-1;;;;;592:28:59;588:67;;629:26;;-1:-1:-1;;;629:26:59;;644:10;629:26;;;3223:51:73;3196:18;;629:26:59;3077:203:73;588:67:59;6169:29:56::1;6185:12;;6169:15;:29::i;:::-;6644:27;:25;:27::i;:::-;6975:17;::::0;-1:-1:-1;;;6975:17:56;::::1;;;6952:40:::0;::::1;6948:138;;7036:17;::::0;7015:60:::1;::::0;-1:-1:-1;;;7015:60:56;;-1:-1:-1;;;7036:17:56;;::::1;;;7015:60;::::0;::::1;27562:38:73::0;27616:18;;;27609:34;;;27535:18;;7015:60:56::1;27389:260:73::0;6948:138:56::1;7155:15;7172:21;7195:15;7212:34;7262:30;7279:12;;7262:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;7262:16:56::1;::::0;-1:-1:-1;;;7262:30:56:i:1;:::-;7154:138;;;;;;;;7302:45;7324:12;;7338:8;7302:21;:45::i;:::-;7435:67;7455:25;21354:22:::0;;;21270:113;7455:25:::1;7482:12:::0;7435:19:::1;:67::i;:::-;7518:135;7540:103;;;;;;;;7550:17;7540:103;;;;7569:13;7540:103;;;;7591:12;7606:1;7591:16;;;;:::i;:::-;-1:-1:-1::0;;;;;7540:103:56::1;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;;::::1;::::0;;;;;;;;7630:12:::1;::::0;::::1;;7540:103:::0;;;;;;;;7518:135;::::1;::::0;;::::1;:::i;:::-;;;;;;;;6114:1546;;;;6025:1635:::0;;:::o;4261:272:58:-;4315:18;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4315:18:58;-1:-1:-1;4513:12:58;;;;4504:22;;;;:8;:22;;;;;;;;;4497:29;;;;;;;;;;;4513:12;4497:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4261:272::o;77601:61:56:-;1531:13:20;:11;:13::i;:::-;77647:8:56::1;:6;:8::i;11383:596:51:-:0;-1:-1:-1;;;11508:18:51;;11481:13;;;11508:18;11779:23;14765:36:58;;;;;;;;;;;-1:-1:-1;;;14765:36:58;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;14765:36:58;;;;;14652:156;11779:23:51;11383:596;;11761:41;;;-1:-1:-1;11822:13:51;;-1:-1:-1;11873:4:51;;-1:-1:-1;11383:596:51;;-1:-1:-1;11383:596:51;:::o;46419:763:56:-;1531:13:20;:11;:13::i;:::-;46501:27:56::1;46511:16;46501:9;:27::i;:::-;46497:74;;;46551:19;46537:34;;-1:-1:-1::0;;;46537:34:56::1;;;;;;;;:::i;46497:74::-;46681:41;46705:16;46681:23;:41::i;:::-;-1:-1:-1::0;46783:25:56::1;-1:-1:-1::0;;;;;46737:28:56;::::1;;::::0;;;:10:::1;:28;::::0;;;;:42;-1:-1:-1;;;46737:42:56;::::1;;;:71;::::0;::::1;;;;;;:::i;:::-;::::0;46733:443:::1;;-1:-1:-1::0;;;;;46941:28:56;::::1;;::::0;;;:10:::1;:28;::::0;;;;46933:37:::1;::::0;:7:::1;:37::i;:::-;46984:36;-1:-1:-1::0;;;;;14385:32:58;;46984:5:56::1;:36::i;46733:443::-;47133:32;47148:16;47133:14;:32::i;23298:172::-:0;23366:16;23394:29;23416:6;23394:21;:29::i;:::-;23441:22;23456:6;23441:14;:22::i;2517:93:27:-;2564:13;2596:7;2589:14;;;;;:::i;23961:433:56:-;24028:22;24062:26;24091:19;24104:5;24091:12;:19::i;:::-;:29;;;24062:58;;24130:42;24195:9;:16;-1:-1:-1;;;;;24175:37:56;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;24130:82;;24227:9;24222:129;24242:19;:26;24238:1;:30;24222:129;;;24314:26;24327:9;24337:1;24327:12;;;;;;;;:::i;:::-;;;;;;;24314;:26::i;:::-;24289:19;24309:1;24289:22;;;;;;;;:::i;:::-;;;;;;;;;;:51;24270:3;;24222:129;;4095:126:58;4160:18;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4160:18:58;-1:-1:-1;4197:17:58;;;;;;:8;:17;;;;;;;;;4190:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4095:126::o;41547:131:56:-;41606:16;41641:30;:21;:28;:30::i;18375:1216::-;592:10:59;-1:-1:-1;;;;;592:28:59;588:67;;629:26;;-1:-1:-1;;;629:26:59;;644:10;629:26;;;3223:51:73;3196:18;;629:26:59;3077:203:73;588:67:59;18441:14:56::1;18458:13;2140:10:30::0;:17;;2062:102;18458:13:56::1;18441:30;;18481:16;18512:9;18507:988;18527:6;18523:1;:10;18507:988;;;18554:24;18581;18589:15;18602:1;18589:12;:15::i;18581:24::-;-1:-1:-1::0;;;;;18830:28:56;::::1;18805:22;18830:28:::0;;;:10:::1;:28;::::0;;;;18805:53;;18554:51;;-1:-1:-1;18805:22:56;;:53:::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18876:9;:16;18896:2;18876:22:::0;18872:197:::1;;18950:20:::0;;::::1;::::0;;::::1;::::0;;;;18925:46:::1;::::0;;;:24:::1;:46:::0;;;;;;;18918:53;;-1:-1:-1;;;;;;18918:53:56::1;::::0;;19038:16;;18925:24;19014:20:::1;18960:9:::0;19014::::1;:20::i;:::-;18989:46;;;;;;;;;;;;:65;;;;;-1:-1:-1::0;;;;;18989:65:56::1;;;;;-1:-1:-1::0;;;;;18989:65:56::1;;;;;;18872:197;-1:-1:-1::0;;;;;19117:28:56;::::1;19083:31;19117:28:::0;;;:10:::1;:28;::::0;;;;19163:19;;-1:-1:-1;;;19163:19:56;::::1;;;19159:33;;;19184:8;;;;;19159:33;19232:23:::0;;-1:-1:-1;;;19232:23:56;::::1;;;19207:22;19273:6;:35;;;;;;;;:::i;:::-;;:68;;;-1:-1:-1::0;19322:19:56::1;19312:6;:29;;;;;;;;:::i;:::-;;19273:68;19269:82;;;19343:8;;;;;;19269:82;19366:50;19399:16;19366:13;:28;19386:6;19380:13;;;;;;;;:::i;:::-;19366:28;;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;19366:28:56;;:32:::1;:50::i;:::-;;19434:38;19465:6;19434:30;:38::i;:::-;19430:54;;;19474:10;::::0;::::1;:::i;:::-;;;19430:54;18540:955;;;;18507:988;18535:3;;18507:988;;;-1:-1:-1::0;19505:22:56::1;:33:::0;;;19553:31:::1;::::0;160:25:73;;;19553:31:56::1;::::0;148:2:73;133:18;19553:31:56::1;;;;;;;;18431:1160;;18375:1216::o:0;27874:972::-;28089:7;28112:41;28136:16;28112:23;:41::i;:::-;;28367:9;:16;28387:2;28367:22;28363:53;;28398:18;;-1:-1:-1;;;28398:18:56;;;;;;;;;;;28363:53;28426:18;28447:21;:19;:21::i;:::-;:34;;;-1:-1:-1;;;;;28506:29:56;;28491:12;28506:29;;;:11;:29;;;;;:35;;;28447:34;;-1:-1:-1;;;;28506:35:56;;;-1:-1:-1;;;;;28506:35:56;;28575:20;28585:9;28575;:20::i;:::-;28551:44;;28605:18;1417:156:58;28698:13:56;28713:16;28731:9;28742:12;28756:5;28763:8;28649:136;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;28626:169;;;;;;28605:190;;28813:26;28828:10;28813:14;:26::i;:::-;28806:33;27874:972;-1:-1:-1;;;;;;;;;27874:972:56:o;40117:1336::-;1474:19:39;:17;:19::i;:::-;1635:9:54::1;1610:22;1604:29;1601:44:::0;1598:158:::1;;1677:10;1671:4;1664:24;1737:4;1731;1724:18;1598:158;1800:9;1776:22;1769:41:::0;40231:10:56::2;40195:16;40214:28:::0;;;:16:::2;:28;::::0;;;;;;;;40272:16:::2;:28:::0;;;;;;;40314:20:::2;40272:28:::0;40214;40314:20:::2;:::i;:::-;40338:1;40314:25:::0;40310:57:::2;;40348:19;;-1:-1:-1::0;;;40348:19:56::2;;;;;;;;;;;40310:57;40658:22;-1:-1:-1::0;;;;;;;;;;;40695:16:56::2;40683:28:::0;::::2;:59;;40733:9;40683:59;;;-1:-1:-1::0;;;;;;;;;;;40714:16:56::2;40683:59;40658:84:::0;-1:-1:-1;40752:14:56::2;40769:25;40658:84:::0;40769:8;:25:::2;:::i;:::-;40752:42;;40991:6;41001:1;40991:11:::0;40987:43:::2;;41011:19;;-1:-1:-1::0;;;41011:19:56::2;;;;;;;;;;;40987:43;41058:10;41072:1;41041:28:::0;;;:16:::2;:28;::::0;;;;:32;41114:26:::2;41126:14:::0;41114:9;:26:::2;:::i;:::-;41100:10;41083:28;::::0;;;:16:::2;:28;::::0;;;;;;:57;;;;41310:87;;-1:-1:-1;;;41310:87:56;;::::2;::::0;::::2;25284:51:73::0;;;;25351:18;;;25344:34;;;-1:-1:-1;;;;;;;;;;;1249:42:58;41310:40:56::2;::::0;41359:8;;25257:18:73;;41310:87:56::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;41413:33:56::2;::::0;160:25:73;;;41427:10:56::2;::::0;-1:-1:-1;41413:33:56::2;::::0;-1:-1:-1;148:2:73;133:18;;-1:-1:-1;41413:33:56::2;;;;;;;40185:1268;;;;1937:10:54::1;1913:22;1906:42;40117:1336:56:o:0;4984:233:27:-;5097:31;5110:4;5116:2;5120:7;5097:12;:31::i;:::-;5138:72;735:10:36;5186:4:27;5192:2;5196:7;5205:4;5138:33;:72::i;21916:155:56:-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22023:12:56;;22003:61;;-1:-1:-1;;;22023:12:56;;;;;;;-1:-1:-1;;;22051:12:56;;;;22003:19;:61::i;:::-;21996:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21996:68:56;;;;;;;;;;;;;;;;-1:-1:-1;;;21996:68:56;;;-1:-1:-1;;21996:68:56;;;;;;;;;;;;;-1:-1:-1;;;;;21996:68:56;;;;;;;-1:-1:-1;;;21996:68:56;;;;;;;;-1:-1:-1;;;21996:68:56;;;;;;;;-1:-1:-1;;;21996:68:56;;;;;;;;;;21916:155;-1:-1:-1;21916:155:56:o;82593:595::-;82745:5;1531:13:20;:11;:13::i;:::-;1474:19:39::1;:17;:19::i;:::-;82770:23:56::2;::::0;;;::::2;::::0;::::2;;:::i;:::-;:28;;82797:1;82770:28:::0;82766:81:::2;;82823:23;::::0;;;::::2;::::0;::::2;;:::i;:::-;82807:40;::::0;-1:-1:-1;;;82807:40:56;;20042:10:73;20030:23;;;82807:40:56::2;::::0;::::2;20012:42:73::0;19985:18;;82807:40:56::2;19868:192:73::0;82766:81:56::2;82879:12;82877:14:::0;;82858:16:::2;::::0;82879:12;82858:16;;82877:14:::2;::::0;::::2;;;:::i;:::-;::::0;;::::2;::::0;;::::2;;::::0;;;::::2;::::0;;::::2;::::0;::::2;;::::0;;::::2;;::::0;;;-1:-1:-1;82901:20:56;;;:8:::2;:20;::::0;;;;82877:14;;-1:-1:-1;82924:9:56;;82901:32:::2;82924:9:::0;82901:20;:32:::2;:::i;:::-;-1:-1:-1::0;;82949:204:56::2;::::0;::::2;;83007:21:::0;::::2;83042:27;::::0;::::2;;83083:23;::::0;::::2;;83120;::::0;;;::::2;::::0;::::2;;:::i;:::-;82949:204;::::0;;28899:25:73;;;28955:2;28940:18;;28933:34;;;;28983:18;;;28976:34;29058:10;29046:23;29041:2;29026:18;;29019:51;28886:3;28871:19;82949:204:56::2;;;;;;;83171:10:::0;-1:-1:-1;1503:1:39::2;82593:595:56::0;;;:::o;31785:215::-;31838:35;31862:10;31838:23;:35::i;:::-;-1:-1:-1;31915:10:56;31883:15;31903:23;;;:11;:23;;;;;:29;;31901:31;;31903:29;;31901:31;;-1:-1:-1;;;31901:31:56;;-1:-1:-1;;;;;31901:31:56;;:::i;:::-;;;-1:-1:-1;;;;;31901:31:56;;;;;;;;;;;;;;;;;;;;;31947:46;;29434:50:73;;;31901:31:56;;-1:-1:-1;31972:10:56;;31947:46;;29422:2:73;29407:18;31947:46:56;;;;;;;31828:172;31785:215::o;7251:672:58:-;7324:13;7349:22;7363:7;7349:13;:22::i;:::-;;7382:18;7403:443;7550:54;7594:7;7550:27;:54::i;:::-;7768:10;:8;:10::i;:::-;7453:369;;;;;;;;;:::i;:::-;;;;;;;;;;;;;7403:13;:443::i;:::-;7382:464;;7911:4;7864:52;;;;;;;;:::i;:::-;;;;;;;;;;;;;7857:59;;;7251:672;;;:::o;35885:3508:56:-;1474:19:39;:17;:19::i;:::-;1635:9:54::1;1610:22;1604:29;1601:44:::0;1598:158:::1;;1677:10;1671:4;1664:24;1737:4;1731;1724:18;1598:158;1800:9;1776:22;1769:41;36165:17:56::2;36185:39;36207:16;36185:21;:39::i;:::-;-1:-1:-1::0;;;;;36339:28:56;::::2;36305:31;36339:28:::0;;;:10:::2;:28;::::0;;;;36402:23;;36165:59;;-1:-1:-1;36339:28:56;-1:-1:-1;;;36402:23:56;::::2;;;36462:22;36452:6;:32;;;;;;;;:::i;:::-;;;:79;;;;-1:-1:-1::0;36498:33:56::2;36488:6;:43;;;;;;;;:::i;:::-;;;36452:79;:131;;;;-1:-1:-1::0;36561:22:56::2;36551:6;:32;;;;;;;;:::i;:::-;;;36452:131;36435:212;;;36629:6;36615:21;;-1:-1:-1::0;;;36615:21:56::2;;;;;;;;:::i;36435:212::-;36748:22:::0;;::::2;-1:-1:-1::0;;;36748:22:56;;::::2;::::0;::::2;::::0;36784:27;::::2;::::0;-1:-1:-1;36784:27:56::2;::::0;:59:::2;;-1:-1:-1::0;36831:12:56::2;::::0;::::2;::::0;;::::2;36815:28:::0;;::::2;;36784:59;36780:143;;;36866:46;::::0;-1:-1:-1;;;36866:46:56;;31362:4:73;31350:17;;;36866:46:56::2;::::0;::::2;31332:36:73::0;31404:17;;31384:18;;;31377:45;31305:18;;36866:46:56::2;31166:262:73::0;36780:143:56::2;37051:20;::::0;;::::2;37026:22;37051:20:::0;;;:8:::2;:20;::::0;;;;;:32;37118:23;;::::2;::::0;;;;:35;;37181:31;;::::2;:69;;37249:1;37181:69;;;37215:31;37232:14:::0;37215;:31:::2;:::i;:::-;37163:87;;37277:7;37264:9;:20;37260:62;;37293:29;::::0;-1:-1:-1;;;37293:29:56;;37312:9:::2;37293:29;::::0;::::2;160:25:73::0;133:18;;37293:29:56::2;14:177:73::0;37260:62:56::2;37534:22;37524:6;:32;;;;;;;;:::i;:::-;::::0;37520:1165:::2;;38058:38:::0;;-1:-1:-1;;;;38058:38:56::2;-1:-1:-1::0;;;38058:38:56::2;::::0;::::2;;;::::0;;-1:-1:-1;;;;;13296:29:58;;;-1:-1:-1;13296:29:58;;;:11;:29;;;;;:39;;;;:53;38110:131:56::2;;-1:-1:-1::0;;;;;38164:29:56;::::2;;::::0;;;:11:::2;:29;::::0;;;;:46:::2;;:62:::0;;-1:-1:-1;;;;38164:62:56::2;-1:-1:-1::0;;;38164:62:56::2;::::0;::::2;;;::::0;;38110:131:::2;38259:11:::0;;38255:244:::2;;-1:-1:-1::0;;;;;38290:26:56;::::2;;::::0;;;:8:::2;:26;::::0;;;;:37;;38320:7;;38290:26;:37:::2;::::0;38320:7;;38290:37:::2;:::i;:::-;::::0;;;-1:-1:-1;38255:244:56::2;::::0;-1:-1:-1;38255:244:56::2;;38369:14;38352;:31;38348:151;;;38403:81;38424:16;38442:9;38453:14;38469;38403:20;:81::i;:::-;38518:136;::::0;;31686:4:73;31674:17;;;31656:36;;31728:17;;31723:2;31708:18;;31701:45;31762:18;;;31755:34;;;31820:2;31805:18;;31798:34;;;-1:-1:-1;;;;;38518:136:56;::::2;::::0;::::2;::::0;31643:3:73;31628:19;38518:136:56::2;;;;;;;38668:7;;;;;;;;;37520:1165;38943:38;38984:21;:39;39006:16;-1:-1:-1::0;;;;;38984:39:56::2;-1:-1:-1::0;;;;;38984:39:56::2;;;;;;;;;;;;38943:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;38943:80:56::2;-1:-1:-1::0;;;;;38943:80:56::2;-1:-1:-1::0;;;;;38943:80:56::2;;;;;;;;;;;::::0;::::2;;;39087:75;;;;;;;;39113:13;39087:75;;;;;;39128:12;;;;;;;;;;;39087:75;;;;;;39142:10;-1:-1:-1::0;;;;;39087:75:56::2;;;;;39154:7;39087:75;;::::0;39033:21:::2;:39;39055:16;-1:-1:-1::0;;;;;39033:39:56::2;-1:-1:-1::0;;;;;39033:39:56::2;;;;;;;;;;;;:129;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;39033:129:56::2;;;;;-1:-1:-1::0;;;;;39033:129:56::2;;;;;;;;;;;;;;;;;39172:43;39198:16;39172:21;:25;;:43;;;;:::i;:::-;-1:-1:-1::0;39229:12:56::2;::::0;::::2;::::0;:16;39225:62:::2;;39247:40;39260:5;:12;;;39274:5;:12;;;39247;:40::i;:::-;39364:12;::::0;39303:83:::2;::::0;;32069:4:73;32057:17;;32039:36;;-1:-1:-1;;;39364:12:56;;::::2;;;32106:2:73::0;32091:18;;32084:51;32151:18;;32144:34;;;-1:-1:-1;;;;;39303:83:56;::::2;::::0;::::2;::::0;32027:2:73;32012:18;39303:83:56::2;;;;;;;36086:3307;;;;;;;;1829:1:54;1937:10:::1;1913:22;1906:42;35885:3508:56::0;;:::o;3927:153:27:-;-1:-1:-1;;;;;4038:25:27;;;4015:4;4038:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;3927:153::o;19636:262:56:-;1531:13:20;:11;:13::i;:::-;19733:41:56::1;19757:16;19733:23;:41::i;:::-;-1:-1:-1::0;;;;;;19784:28:56;::::1;;::::0;;;:10:::1;:28;::::0;;;;;;;;:44;;-1:-1:-1;;;;;19784:44:56::1;-1:-1:-1::0;;;19784:44:56::1;::::0;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;19843:48;;13795:36:73;;;19843:48:56::1;::::0;13768:18:73;19843:48:56::1;;;;;;;;19636:262:::0;;:::o;2543:215:20:-;1531:13;:11;:13::i;:::-;-1:-1:-1;;;;;2627:22:20;::::1;2623:91;;2672:31;::::0;-1:-1:-1;;;2672:31:20;;2700:1:::1;2672:31;::::0;::::1;3223:51:73::0;3196:18;;2672:31:20::1;3077:203:73::0;2623:91:20::1;2723:28;2742:8;2723:18;:28::i;44630:904:56:-:0;1474:19:39;:17;:19::i;:::-;1635:9:54::1;1610:22;1604:29;1601:44:::0;1598:158:::1;;1677:10;1671:4;1664:24;1737:4;1731;1724:18;1598:158;1800:9;1776:22;1769:41;44855:17:56::2;44875:39;44897:16;44875:21;:39::i;:::-;-1:-1:-1::0;;;;;44959:28:56;::::2;44925:31;44959:28:::0;;;:10:::2;:28;::::0;;;;44855:59;;-1:-1:-1;45095:30:56::2;44959:28:::0;45095:19:::2;:30::i;:::-;45090:72;;45152:9;45134:28;;-1:-1:-1::0;;;45134:28:56::2;;;;;;;;:::i;45090:72::-;45243:18;45251:9;45243:7;:18::i;:::-;45383:23;45409:60;45418:16;45436:9;45447:21;45409:8;:60::i;:::-;45383:86;;45500:9;-1:-1:-1::0;;;;;45485:42:56::2;;45511:15;45485:42;;;;160:25:73::0;;148:2;133:18;;14:177;45485:42:56::2;;;;;;;;44746:788;;;1937:10:54::1;1913:22;1906:42;44630:904:56::0;;:::o;1560:300:27:-;1662:4;-1:-1:-1;;;;;;1697:40:27;;-1:-1:-1;;;1697:40:27;;:104;;-1:-1:-1;;;;;;;1753:48:27;;-1:-1:-1;;;1753:48:27;1697:104;:156;;;-1:-1:-1;;;;;;;;;;862:40:44;;;1817:36:27;763:146:44;68689:1637:56;-1:-1:-1;;;;;68792:28:56;;68758:31;68792:28;;;:10;:28;;;;;68855:23;;21354:22;;-1:-1:-1;;;68855:23:56;;;;;;69147:38;68855:23;69147:30;:38::i;:::-;69143:98;;;69215:15;69229:1;69215:11;:15;:::i;:::-;69201:29;;69143:98;69250:51;69271:16;69289:11;69250:20;:51::i;:::-;69341:23;69369:37;69389:16;69369:19;:37::i;:::-;-1:-1:-1;;;;;;69550:26:56;;69579:1;69550:26;;;:8;:26;;;;;;:30;;;69787:43;69338:68;;-1:-1:-1;69579:1:56;-1:-1:-1;;;;;;;;;;;;1249:42:58;69338:68:56;;69579:1;69787:43;69579:1;69787:43;69338:68;1249:42:58;69787:43:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;69775:55;;;69890:1;69885:39;;69900:24;;-1:-1:-1;;;69900:24:56;;;;;;;;;;;69885:39;70233:12;;70216:30;;70222:9;;-1:-1:-1;;;70233:12:56;;;;70216:5;:30::i;:::-;70256:18;70264:9;70256:7;:18::i;:::-;70284:35;70302:16;70284:17;:35::i;:::-;68748:1578;;;;;68689:1637;:::o;1796:162:20:-;1710:6;;-1:-1:-1;;;;;1710:6:20;;;;;735:10:36;1855:23:20;1851:101;;1901:40;;-1:-1:-1;;;1901:40:20;;735:10:36;1901:40:20;;;3223:51:73;3196:18;;1901:40:20;3077:203:73;16212:241:27;16275:7;5824:16;;;:7;:16;;;;;;-1:-1:-1;;;;;5824:16:27;;16337:88;;16383:31;;-1:-1:-1;;;16383:31:27;;;;;160:25:73;;;133:18;;16383:31:27;14:177:73;2002:128:39;1920:7;;;;;;;2063:61;;;2098:15;;-1:-1:-1;;;2098:15:39;;;;;;;;;;;13966:324:58;14048:7;-1:-1:-1;;;;;14385:32:58;;14129:16;14385:32;14129:7;:16::i;:::-;14124:53;;14154:23;;-1:-1:-1;;;14154:23:58;;;;;160:25:73;;;133:18;;14154:23:58;14:177:73;14124:53:58;14211:16;-1:-1:-1;;;;;14191:36:58;:16;14199:7;14191;:16::i;:::-;-1:-1:-1;;;;;14191:36:58;;14187:71;;14236:22;;-1:-1:-1;;;14236:22:58;;;;;;;;;;;74245:254:56;-1:-1:-1;;;;;74382:28:56;;74357:22;74382:28;;;:10;:28;;;;;:42;-1:-1:-1;;;74382:42:56;;;;74448:14;74438:24;;;;;;;;:::i;:::-;:6;:24;;;;;;;;:::i;:::-;;74434:58;;74485:6;74471:21;;-1:-1:-1;;;74471:21:56;;;;;;;;:::i;57991:255::-;58111:9;:5;58119:1;58111:9;:::i;:::-;58083:37;;;;;;;-1:-1:-1;;;58083:37:56;-1:-1:-1;;;;58083:37:56;;;;;;58130:56;58083:9;58152:33;58130:10;:56::i;:::-;58202:37;58229:9;58202:37;;;;;;:::i;35101:312::-;35180:17;35209:41;35233:16;35209:23;:41::i;:::-;;35272:31;35286:16;35272:13;:31::i;:::-;35260:43;-1:-1:-1;35317:10:56;-1:-1:-1;;;;;35317:30:56;;;;;;:57;;-1:-1:-1;35351:10:56;-1:-1:-1;;;;;35351:23:56;;;;35317:57;35313:93;;;35383:23;;-1:-1:-1;;;35383:23:56;;-1:-1:-1;;;;;3241:32:73;;35383:23:56;;;3223:51:73;3196:18;;35383:23:56;3077:203:73;8607:156:49;8680:4;8703:53;8711:3;-1:-1:-1;;;;;8731:23:49;;8703:7;:53::i;:::-;8696:60;8607:156;-1:-1:-1;;;8607:156:49:o;61630:412:56:-;61710:6;61720:1;61710:11;61706:24;;61630:412;;:::o;61706:24::-;61743:94;;-1:-1:-1;;;61743:94:56;;-1:-1:-1;;;;;25302:32:73;;61743:94:56;;;25284:51:73;61835:1:56;25351:18:73;;;25344:34;-1:-1:-1;;;;;;;;;;;1249:42:58;61743:40:56;;5532:7;;61792:6;;25257:18:73;;61743:94:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;61739:297;;-1:-1:-1;;;;;61938:27:56;;;;;;:16;:27;;;;;:37;;61969:6;;61938:27;:37;;61969:6;;61938:37;:::i;:::-;;;;-1:-1:-1;;61994:31:56;;160:25:73;;;-1:-1:-1;;;;;61994:31:56;;;-1:-1:-1;;;;;;;;;;;61994:31:56;148:2:73;133:18;61994:31:56;14:177:73;49806:2694:56;50002:7;50029:9;:16;50049:2;50029:22;50025:53;;50060:18;;-1:-1:-1;;;50060:18:56;;;;;;;;;;;50025:53;50904:11;50924:9;50934:1;50924:12;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;50959:4:56;50951:12;;:17;;:38;;-1:-1:-1;50980:4:56;50972:12;;:17;;50951:38;50947:69;;;50998:18;;-1:-1:-1;;;50998:18:56;;;;;;;;;;;50947:69;51482:23;51508:53;51533:9;51544:16;51508:24;:53::i;:::-;52177:15;;52127:89;;51482:79;;-1:-1:-1;52056:7:56;;;;572:42:60;;-1:-1:-1;;;52150:25:56;52127:89;;52194:9;;51482:79;;52127:89;;;:::i;:::-;;;;-1:-1:-1;;52127:89:56;;;;;;;;;;;;;;-1:-1:-1;;;;;52127:89:56;-1:-1:-1;;;;;;52127:89:56;;;;;;;;;;52088:138;;;;52127:89;52088:138;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52055:171;;;;52241:2;52240:3;:26;;;;52247:6;:13;52264:2;52247:19;;52240:26;52236:66;;;52295:6;52275:27;;-1:-1:-1;;;52275:27:56;;;;;;;;:::i;52236:66::-;52328:6;52317:26;;;;;;;;;;;;:::i;:::-;52312:71;;52377:5;52352:31;;-1:-1:-1;;;52352:31:56;;;;;;;;:::i;52312:71::-;52449:44;52465:9;52476:16;52449:15;:44::i;:::-;52442:51;49806:2694;-1:-1:-1;;;;;;;;49806:2694:56:o;12635:216:58:-;12749:17;;;12717:7;12749:17;;;:8;:17;;;;;:29;12740:38;;12736:76;;12787:25;;-1:-1:-1;;;12787:25:58;;;;;160::73;;;133:18;;12787:25:58;14:177:73;12736:76:58;-1:-1:-1;12838:5:58;;12635:216;-1:-1:-1;12635:216:58:o;6666:885:51:-;6975:22;13508:11;13649:9;13646:25;13463:14;13619:9;13616:28;13612:60;7011:73;;-1:-1:-1;12939:4:51;12933:11;;13000:16;12990:27;;12777:15;13044:4;13037:12;;13030:31;12820:18;13095:12;;;13088:33;;;;13155:9;13148:4;13141:12;;13134:31;13199:9;13192:4;13185:12;;13178:31;13248:4;13235:18;;7011:73;7218:18;7212:4;7205:32;7284:6;7278:4;7271:20;7348:10;7342:4;7335:24;7424:4;7418;7408:21;7398:31;;7533:1;7527:4;7520:15;6666:885;;;:::o;55198:648:56:-;55379:4;55403:41;55427:16;55403:23;:41::i;:::-;55399:339;;;55711:16;-1:-1:-1;;;;;55664:63:56;:43;55689:6;55697:9;;55664:24;:43::i;:::-;-1:-1:-1;;;;;55664:63:56;;55657:70;;;;55399:339;55755:84;55803:16;55821:6;55829:9;;55755:47;:84::i;:::-;55748:91;55198:648;-1:-1:-1;;;;;55198:648:56:o;56988:902::-;-1:-1:-1;;;;;57397:28:56;;;57382:12;57397:28;;;:10;:28;;;;;;;;:35;;57473:135;;;;;;;;;;4744:16;57473:135;;;;;;;;;;;;;;;;;;;;;;;;57397:35;57473:135;;;;;;;-1:-1:-1;;;57397:35:56;;;57473:135;;;;;;57442:28;;;;;;;;:166;;;;;;;;-1:-1:-1;;;57442:166:56;-1:-1:-1;;;;57442:166:56;;;;-1:-1:-1;;;57442:166:56;-1:-1:-1;;;;;;57442:166:56;;;;;;;;;;;;;;;;;;;;;;;;57397:35;;57473:135;57442:166;57397:28;;-1:-1:-1;;;;57442:166:56;-1:-1:-1;;;;57442:166:56;;;;-1:-1:-1;;;57442:166:56;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;57442:166:56;;;;;;;;;;;;;;;-1:-1:-1;;;;57442:166:56;;;-1:-1:-1;;;57442:166:56;;;;;;;-1:-1:-1;;;;57442:166:56;;;;;-1:-1:-1;;;57442:166:56;;;;;;-1:-1:-1;;;;;57442:166:56;-1:-1:-1;;;57442:166:56;;;;;;;;;;;;;;-1:-1:-1;;;;;57655:28:56;;-1:-1:-1;57655:28:56;;;:10;:28;;;;;57693:48;57655:28;-1:-1:-1;57693:10:56;:48::i;:::-;-1:-1:-1;;;;;57751:28:56;;;;;;:10;:28;;;;;:40;57782:9;;57751:28;:40;:::i;:::-;-1:-1:-1;;;;;;57801:26:56;;;;;;:8;:26;;;;;;;:37;;;57854:29;;;;;57870:12;;57854:29;:::i;:::-;;;;;;;;57160:730;;56988:902;;;;;:::o;12857:274:58:-;-1:-1:-1;;;;;12994:26:58;;12957:7;12994:26;;;:8;:26;;;;;;12957:7;13048:22;;;:51;;13098:1;13048:51;;;13073:22;13083:12;13073:7;:22;:::i;73865:274:56:-;73970:20;;;:42;;-1:-1:-1;73994:18:56;;73970:42;:77;;;;74032:15;74016:13;:31;73970:77;73966:167;;;74070:52;;-1:-1:-1;;;74070:52:56;;;;;26711:25:73;;;26752:18;;;26745:34;;;26684:18;;74070:52:56;26529:256:73;58706:221:56;58778:50;58789:9;58800:27;58778:10;:50::i;:::-;58838:35;;-1:-1:-1;;;;58838:35:56;-1:-1:-1;;;58838:35:56;;;58889:31;;;;;;58838:9;;58889:31;:::i;77164:212::-;77257:25;77247:6;:35;;;;;;;;:::i;:::-;;:68;;;-1:-1:-1;77296:19:56;77286:6;:29;;;;;;;;:::i;:::-;;77247:68;77243:127;;;77352:6;77338:21;;-1:-1:-1;;;77338:21:56;;;;;;;;:::i;76800:150::-;76871:16;76906:37;:13;:28;76926:6;76920:13;;;;;;;;:::i;:::-;76906:28;;;;;;;;;;;;;;;:35;:37::i;8153:490:58:-;8330:7;8427:15;8445:49;8459:16;8477;8445:13;:49::i;:::-;-1:-1:-1;;;;;8504:26:58;;;;;;:8;:26;;;;;:37;;8427:67;;-1:-1:-1;8427:67:58;;8504:26;;;:37;;8427:67;;8504:37;:::i;:::-;;;;-1:-1:-1;;8551:60:58;;-1:-1:-1;;;8551:60:58;;-1:-1:-1;;;;;25302:32:73;;8551:60:58;;;25284:51:73;25351:18;;;25344:34;;;-1:-1:-1;;;;;;;;;;;1249:42:58;8551:40;;25257:18:73;;8551:60:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8629:7:58;;8153:490;-1:-1:-1;;;;;;;8153:490:58:o;72120:419:56:-;72279:17;;72379:1;72361:14;72341:16;72350:7;72341:6;:16;:::i;:::-;72335:40;;;;:::i;:::-;72334:46;;;;:::i;:::-;72312:68;;72390:22;72415:15;72431:13;72415:30;;;;;;;;;:::i;:::-;;;;72390:55;;72475:6;72459:22;;:4;:12;;;;;;;;;;;;:22;;;72455:55;;72490:20;;-1:-1:-1;;;72490:20:56;;20042:10:73;20030:23;;72490:20:56;;;20012:42:73;19985:18;;72490:20:56;19868:192:73;72649:550:56;72808:17;;72905:16;72915:6;72905:7;:16;:::i;:::-;72879:43;-1:-1:-1;72997:13:56;73050:1;72879:43;73014:18;73018:14;73050:1;73014:18;:::i;:::-;:32;;;;:::i;:::-;73013:38;;;;:::i;:::-;72997:54;;73062:22;73087:9;73097:7;73087:18;;;;;;;;;:::i;:::-;;;;73062:43;;73135:6;73119:22;;:4;:12;;;;;;;;;;;;:22;;;73115:55;;73150:20;;-1:-1:-1;;;73150:20:56;;20042:10:73;20030:23;;73150:20:56;;;20012:42:73;19985:18;;73150:20:56;19868:192:73;73115:55:56;73188:4;72649:550;-1:-1:-1;;;;;;72649:550:56:o;2710:117:39:-;1721:16;:14;:16::i;:::-;2768:7:::1;:15:::0;;-1:-1:-1;;2768:15:39::1;::::0;;2798:22:::1;735:10:36::0;2807:12:39::1;2798:22;::::0;-1:-1:-1;;;;;3241:32:73;;;3223:51;;3211:2;3196:18;2798:22:39::1;;;;;;;2710:117::o:0;13538:305:58:-;-1:-1:-1;;;;;13661:29:58;;;13610:7;13661:29;;;:11;:29;;;;;13720:20;;;;13610:7;;13661:29;;13720:20;;13750:59;;-1:-1:-1;13793:16:58;;13827:9;-1:-1:-1;;13538:305:58:o;9978:327:27:-;-1:-1:-1;;;;;10045:16:27;;10041:87;;10084:33;;-1:-1:-1;;;10084:33:27;;10114:1;10084:33;;;3223:51:73;3196:18;;10084:33:27;3077:203:73;10041:87:27;10137:21;10161:32;10169:2;10173:7;10190:1;10161:7;:32::i;:::-;10137:56;-1:-1:-1;;;;;;10207:27:27;;;10203:96;;10257:31;;-1:-1:-1;;;10257:31:27;;10285:1;10257:31;;;3223:51:73;3196:18;;10257:31:27;3077:203:73;53598:581:56;53878:4;53872:11;;53737:4;53721:21;;;53916:10;-1:-1:-1;;;;;53912:83:56;53896:100;;54042:14;;;54036:21;54016:18;;;54009:49;54104:14;;;;54098:21;54078:18;;;54071:49;;;;54139:24;;53598:581::o;14430:216:58:-;14495:4;14515:12;;;:44;;-1:-1:-1;;;;;;14531:28:58;;;14515:44;14511:80;;;14568:23;;-1:-1:-1;;;14568:23:58;;;;;160:25:73;;;133:18;;14568:23:58;14:177:73;14511:80:58;-1:-1:-1;14637:1:58;5824:16:27;;;:7;:16;;;;;;-1:-1:-1;;;;;5824:16:27;14608:31:58;;;14430:216::o;2912:187:20:-;3004:6;;;-1:-1:-1;;;;;3020:17:20;;;3004:6;3020:17;;;-1:-1:-1;;;;;;3020:17:20;;;;;;3052:40;;3004:6;;;;;;;;3052:40;;2985:16;;3052:40;2975:124;2912:187;:::o;73205:477:56:-;73514:1;73497:179;73517:26;;;73497:179;;;73594:15;;73610:1;73594:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;73568:44:56;:15;;73584:5;73588:1;73584;:5;:::i;:::-;73568:22;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;73568:44:56;;73564:101;;73642:15;;73658:5;73662:1;73658;:5;:::i;:::-;73642:22;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;73621:44;;-1:-1:-1;;;73621:44:56;;-1:-1:-1;;;;;3241:32:73;;;73621:44:56;;;3223:51:73;3196:18;;73621:44:56;3077:203:73;73564:101:56;73545:3;;73497:179;;13654:3644;13793:23;13819:30;:21;:28;:30::i;:::-;13881:12;;13793:56;;-1:-1:-1;;;;13881:12:56;;;;13859:19;;13938:3053;13958:6;:13;13954:1;:17;13938:3053;;;13992:24;14019:6;14026:1;14019:9;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;14085:39:56;;;14042:40;14085:39;;;:21;:39;;;;;;;14042:82;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;14042:82:56;;;;;;;;;;;;;;;;;;;14019:9;;-1:-1:-1;14042:82:56;14301:26;;:68;;-1:-1:-1;;;;;;14331:28:56;;;;;;:10;:28;;;;;:38;-1:-1:-1;;;14331:38:56;;;;14301:68;14297:176;;;14389:43;14415:16;14389:25;:43::i;:::-;14450:8;;;;14297:176;-1:-1:-1;;;;;14521:28:56;;14487:31;14521:28;;;:10;:28;;;;;;;;14582:22;;;-1:-1:-1;;;14582:22:56;;;;;14643:20;;;:8;:20;;;;;;:32;14723:21;;14714:31;;;;;;;;;:43;14976:31;;;:100;;;;;5190:1;15026:7;:20;;;:50;;;;:::i;:::-;15011:65;;:12;:65;;;14976:100;14972:159;;;15108:8;;;;;;;;14972:159;-1:-1:-1;;;;;15152:39:56;;;;;;:21;:39;;;;;15145:46;;-1:-1:-1;;;;;;15145:46:56;;;;;;15205;:21;15174:16;15205:28;:46::i;:::-;;15266:14;15315;15298;:31;15294:1310;;;15574:14;;;;-1:-1:-1;;;;;15544:26:56;;;;;;:8;:26;;;;;:44;;:26;;;:44;;15574:14;;15544:44;:::i;:::-;;;;-1:-1:-1;15294:1310:56;;-1:-1:-1;15294:1310:56;;15881:15;15899:31;15916:14;15899;:31;:::i;:::-;-1:-1:-1;;;;;15973:26:56;;15948:22;15973:26;;;:8;:26;;;;;;15881:49;;-1:-1:-1;16021:32:56;;;16017:219;;16086:7;16077:16;;16017:219;;;16139:14;16122;:31;16118:118;;;16186:31;16203:14;16186;:31;:::i;:::-;16177:40;;16118:118;16257:10;;16253:283;;-1:-1:-1;;;;;16291:26:56;;;;;;:8;:26;;;;;:36;;16321:6;;16291:26;:36;;16321:6;;16291:36;:::i;:::-;;;;-1:-1:-1;16349:17:56;;-1:-1:-1;16369:31:56;16383:16;16369:13;:31::i;:::-;-1:-1:-1;;;;;16422:27:56;;;;;;:16;:27;;;;;:37;;16349:51;;-1:-1:-1;16453:6:56;;16422:27;;;:37;;16453:6;;16422:37;:::i;:::-;;;;-1:-1:-1;;16486:31:56;;160:25:73;;;-1:-1:-1;;;;;16486:31:56;;;-1:-1:-1;;;;;;;;;;;16486:31:56;148:2:73;133:18;16486:31:56;;;;;;;16269:267;16253:283;16573:16;16583:6;16573:7;:16;:::i;:::-;16553:36;;;;:::i;:::-;;;15609:995;;15294:1310;16643:21;;16618:46;;;;;;-1:-1:-1;;;16618:46:56;-1:-1:-1;;;;16618:46:56;;;;;;-1:-1:-1;;;;;13296:29:58;;;-1:-1:-1;13296:29:58;;;:11;:29;;;;;:39;;;;:53;16678:139:56;;16781:21;;-1:-1:-1;;;;;16732:29:56;;16781:21;16732:29;;;:11;:29;;;;;:46;;:70;;;;;;-1:-1:-1;;;16732:70:56;-1:-1:-1;;;;16732:70:56;;;;;;;;;16678:139;16913:21;;16836:144;;;31686:4:73;31674:17;;;31656:36;;31728:17;;;31723:2;31708:18;;31701:45;31762:18;;31755:34;;;31820:2;31805:18;;31798:34;;;-1:-1:-1;;;;;16836:144:56;;;;;31643:3:73;31628:19;16836:144:56;;;;;;;13978:3013;;;;;;;13938:3053;13973:3;;13938:3053;;;-1:-1:-1;17087:20:56;;17083:209;;17135:44;;17124:6;;-1:-1:-1;;;;;;;;;;;1249:42:58;17157:16:56;;17124:6;17135:44;17124:6;17135:44;17157:16;1249:42:58;17135:44:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17123:56;;;17247:1;17242:39;;17257:24;;-1:-1:-1;;;17257:24:56;;;;;;;;;;;70443:1404;70675:12;;70537:6;;;;;;70562:16;;-1:-1:-1;;;70675:12:56;;;;70537:6;70746:1;70722:20;70675:12;70741:1;70722:20;:::i;:::-;70721:26;;;;:::i;:::-;70799:12;:30;;-1:-1:-1;;;;70799:30:56;-1:-1:-1;;;70799:30:56;;;;;;;;;;-1:-1:-1;;;70859:12:56;;70857:14;;-1:-1:-1;;;70857:14:56;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;70839:32;;70881:30;70914:15;70930;70914:32;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;70914:42:56;71002:23;:21;:23::i;:::-;70966:59;;71064:215;;;;;;;;71087:12;71064:215;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;71064:215:56;;;;;;;;;;;;;;;;-1:-1:-1;;;71064:215:56;;;-1:-1:-1;;71113:28:56;;;;;71064:215;;;;;71155:24;71162:12;71178:1;71155:24;:::i;:::-;-1:-1:-1;;;;;71064:215:56;;;;;;;;;;;71215:28;;;;;71064:215;;;;;;;71257:12;;;;;;71064:215;;;;;71035:9;;:26;;;;;;;;;:::i;:::-;;;;:244;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;71035:244:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;71035:244:56;;;-1:-1:-1;;;;;;71035:244:56;;;;;;;-1:-1:-1;;;71035:244:56;;;;;;-1:-1:-1;;;;71035:244:56;-1:-1:-1;;;71035:244:56;;;;;-1:-1:-1;;;;71035:244:56;;;;;-1:-1:-1;;;71035:244:56;;;;;;;;;;;;-1:-1:-1;;71631:1:56;;71608:19;;:15;;:19;:::i;:::-;71607:25;;;;:::i;:::-;71574:58;;71686:52;;;;;;;;71696:15;71686:52;;;;71713:1;71686:52;;;;71716:1;-1:-1:-1;;;;;71686:52:56;;;;;71719:8;71730:1;71719:12;;;;:::i;:::-;71686:52;;;;71733:1;71686:52;;;;;;;;;;;71642:15;71686:52;71642:41;;;;;;;;;:::i;:::-;;;;:96;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;71642:96:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;71642:96:56;-1:-1:-1;;;;71642:96:56;;;;-1:-1:-1;;;71642:96:56;;-1:-1:-1;;;;71642:96:56;;;;-1:-1:-1;;;71642:96:56;-1:-1:-1;;;;;;71642:96:56;;;-1:-1:-1;;;;;71642:96:56;;;;;;;;;;;;;;;;;;;;;;;71767:28;;;;71797;;;;71749:91;;;;;;;;;;;;;;;;;71757:8;;71767:28;71797;;71827:12;;71749:91;71827:12;;71749:91;;71827:12;71749:91;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;71749:91:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;70443:1404;;;;;:::o;64655:1684::-;64849:34;64886:49;64901:33;64886:14;:49::i;:::-;64849:86;;64950:9;64945:193;64965:17;:24;64961:1;:28;64945:193;;;65010:39;65052:10;:32;65063:17;65081:1;65063:20;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;65052:32:56;-1:-1:-1;;;;;65052:32:56;;;;;;;;;;;;65010:74;;65099:28;65109:17;65099:9;:28::i;:::-;-1:-1:-1;64991:3:56;;64945:193;;;;65148:28;65179:43;65194:27;65179:14;:43::i;:::-;65260:12;;65148:74;;-1:-1:-1;;;;65260:12:56;;;;65232:25;65335:1;65308:23;65260:12;65330:1;65308:23;:::i;:::-;65307:29;;;;:::i;:::-;65282:54;;65663:20;5695:53;65730:7;65696:42;;;;;;;;38596:19:73;;;38671:3;38649:16;-1:-1:-1;;;;;;38645:43:73;38640:2;38631:12;;38624:65;38714:2;38705:12;;38441:282;65696:42:56;;;;;;;;;;;;;65686:53;;;;;;65663:76;;65749:77;65771:9;65781:19;65771:30;;;;;;;;;:::i;:::-;;;;65749:77;;;;;;;;;;;;;;;;;;;;65771:30;65749:77;;;65771:30;65749:77;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;65749:77:56;;;;;;;;;;;;;;;;;;;;;65813:12;65749:21;:77::i;:::-;65836:80;65858:15;65874:16;65858:33;;;;;;;;;:::i;65836:80::-;65926:52;65948:15;;65926:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;65965:12:56;;-1:-1:-1;65926:21:56;;-1:-1:-1;;65926:52:56:i;:::-;65993:9;65988:345;66008:11;:18;66004:1;:22;65988:345;;;66047:24;66074:11;66086:1;66074:14;;;;;;;;:::i;:::-;;;;;;;66047:41;;66204:50;66223:16;66241:12;66204:18;:50::i;:::-;66200:64;;;66256:8;;;66200:64;-1:-1:-1;;;;;66284:28:56;;;;;;:10;:28;;;;;66278:44;;66314:7;66278:5;:44::i;:::-;66033:300;65988:345;66028:3;;65988:345;;;;64747:1592;;;;;64655:1684;;;:::o;2463:115:39:-;1474:19;:17;:19::i;:::-;2522:7:::1;:14:::0;;-1:-1:-1;;2522:14:39::1;;;::::0;;2551:20:::1;2558:12;735:10:36::0;;656:96;59663:658:56;59914:42;59925:9;59936:19;59914:10;:42::i;:::-;59966:26;;-1:-1:-1;;;;59966:26:56;;-1:-1:-1;;;59966:26:56;;;60218:53;;-1:-1:-1;;;;;60244:26:56;60218:25;:53::i;:::-;60287:27;60304:9;60287:27;;;;;;:::i;11510:227:27:-;11561:21;11585:40;11601:1;11605:7;11622:1;11585:7;:40::i;:::-;11561:64;-1:-1:-1;;;;;;11639:27:27;;11635:96;;11689:31;;-1:-1:-1;;;11689:31:27;;;;;160:25:73;;;133:18;;11689:31:27;14:177:73;10243:273:49;10306:16;10334:22;10359:19;10367:3;10359:7;:19::i;8289:150::-;8359:4;8382:50;8387:3;-1:-1:-1;;;;;8407:23:49;;8382:4;:50::i;75648:255:56:-;75735:4;75769:22;75759:6;:32;;;;;;;;:::i;:::-;;:73;;;-1:-1:-1;75805:27:56;75795:6;:37;;;;;;;;:::i;:::-;;75759:73;:136;;;-1:-1:-1;75862:33:56;75852:6;:43;;;;;;;;:::i;:::-;;75751:145;75648:255;-1:-1:-1;;75648:255:56:o;985:924:33:-;-1:-1:-1;;;;;1165:14:33;;;:18;1161:742;;1203:67;;-1:-1:-1;;;1203:67:33;;-1:-1:-1;;;;;1203:36:33;;;;;:67;;1240:8;;1250:4;;1256:7;;1265:4;;1203:67;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1203:67:33;;;;;;;;-1:-1:-1;;1203:67:33;;;;;;;;;;;;:::i;:::-;;;1199:694;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1560:6;:13;1577:1;1560:18;1556:323;;1664:39;;-1:-1:-1;;;1664:39:33;;-1:-1:-1;;;;;3241:32:73;;1664:39:33;;;3223:51:73;3196:18;;1664:39:33;3077:203:73;1556:323:33;1831:6;1825:13;1816:6;1812:2;1808:15;1801:38;1199:694;-1:-1:-1;;;;;;1317:51:33;;-1:-1:-1;;;1317:51:33;1313:182;;1437:39;;-1:-1:-1;;;1437:39:33;;-1:-1:-1;;;;;3241:32:73;;1437:39:33;;;3223:51:73;3196:18;;1437:39:33;3077:203:73;3297:723:42;3363:13;3388:19;3416:17;3428:4;3416:11;:17::i;:::-;3635:2;3628:4;3616:17;;3606:32;3388:46;;-1:-1:-1;3602:2:42;3598:41;3676:2;3659:324;3684:1;3680;:5;3659:324;;;3816:1;3798:9;3810:3;3798:15;:19;:44;;;;;3840:2;3827:6;3834:1;3827:9;;;;;;;;:::i;:::-;;;;;;;3821:21;3798:44;3794:150;;;3925:4;3912:17;;:6;3919:1;3912:9;;;;;;;;:::i;:::-;;;;:17;;-1:-1:-1;;;;;;3912:17:42;;;;;;;;;;;;;;;;;3794:150;3971:1;3957:15;;;;;3687:3;;;:::i;:::-;;;3659:324;;;-1:-1:-1;4006:6:42;;3297:723;-1:-1:-1;;;3297:723:42:o;7929:169:58:-;7989:13;8065:25;8085:3;;;;;;;;;;;;;;;;;8065:13;:25::i;:::-;8021:70;;;;;;;;:::i;:::-;;;;;;;;;;;;;8014:77;;7929:169;:::o;663:124:35:-;721:13;753:27;761:4;767:6;;;;;;;;;;;;;;;;;775:4;753:7;:27::i;41983:1697:56:-;42174:15;42192:31;42209:14;42192;:31;:::i;:::-;-1:-1:-1;;;;;42258:26:56;;42233:22;42258:26;;;:8;:26;;;;;;42174:49;;-1:-1:-1;42328:32:56;;;42324:319;;-1:-1:-1;42439:7:56;42324:319;;;42484:14;42467;:31;42463:180;;;42601:31;42618:14;42601;:31;:::i;:::-;42586:46;;42463:180;42716:16;;42712:591;;-1:-1:-1;;;;;42748:26:56;;;;;;:8;:26;;;;;:42;;42778:12;;42748:26;:42;;42778:12;;42748:42;:::i;:::-;;;;-1:-1:-1;43255:37:56;;-1:-1:-1;43268:9:56;43279:12;43255;:37::i;:::-;43403:25;43431:22;43441:12;43431:7;:22;:::i;:::-;43403:50;-1:-1:-1;43467:21:56;;43463:211;;43516:45;;43505:6;;-1:-1:-1;;;;;;;;;;;1249:42:58;43538:17:56;;43505:6;43516:45;43505:6;43516:45;43538:17;1249:42:58;43516:45:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43504:57;;;43629:1;43624:39;;43639:24;;-1:-1:-1;;;43639:24:56;;;;;;;;;;;43463:211;42164:1516;;;;41983:1697;;;;:::o;76015:411::-;76141:23;;76100:4;;-1:-1:-1;;;76141:23:56;;;;76188:22;76178:6;:32;;;;;;;;:::i;:::-;;76174:49;;-1:-1:-1;76219:4:56;;76015:411;-1:-1:-1;;76015:411:56:o;76174:49::-;76257:19;;76234:20;;76257:23;;-1:-1:-1;;;76257:19:56;;;;76279:1;76257:23;:::i;:::-;76234:46;-1:-1:-1;76304:22:56;76294:6;:32;;;;;;;;:::i;:::-;;:65;;;;-1:-1:-1;76330:12:56;;:29;;;;-1:-1:-1;;;76330:12:56;;;;:29;;76294:65;76290:107;;;-1:-1:-1;76382:4:56;;76015:411;-1:-1:-1;;;76015:411:56:o;76290:107::-;-1:-1:-1;76414:5:56;;76015:411;-1:-1:-1;;;76015:411:56:o;9453:2147:58:-;9624:7;9647:35;9665:16;9647:17;:35::i;:::-;9694:11;9707:16;9725:15;9744:37;9764:16;9744:19;:37::i;:::-;9693:88;;;;;;9854:3;9861:1;9854:8;9850:24;;9871:3;9864:10;;;;;;;9850:24;-1:-1:-1;;;;;9976:26:58;;10005:1;9976:26;;;:8;:26;;;;;:30;;;10048:15;;;10044:582;;-1:-1:-1;10186:8:58;10044:582;;;-1:-1:-1;10335:3:58;10460:6;-1:-1:-1;;;;;;;;;;;10493:14:58;10335:3;10493:8;:14;:::i;:::-;10471:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10459:54;;;10581:1;10576:39;;10591:24;;-1:-1:-1;;;10591:24:58;;;;;;;;;;;10576:39;10211:415;10044:582;10836:21;:51;;;;-1:-1:-1;;;;;;;;;;;;10871:16:58;10861:26;;10836:51;10832:83;;;-1:-1:-1;;;;;;;;;;;10899:16:58;;-1:-1:-1;10832:83:58;-1:-1:-1;;;;;;;;;;;11223:16:58;11253:21;;;11249:135;;;11326:24;11340:10;11326:11;:24;:::i;:::-;11352:20;11365:7;11352:10;:20;:::i;:::-;11297:76;;-1:-1:-1;;;11297:76:58;;;;;26711:25:73;;;;26752:18;;;26745:34;26684:18;;11297:76:58;26529:256:73;11249:135:58;11505:50;11524:9;11535:10;11547:7;11505:18;:50::i;:::-;11573:20;11586:7;11573:10;:20;:::i;66528:1455:56:-;66641:12;;-1:-1:-1;;;66641:12:56;;;;;-1:-1:-1;;;66691:12:56;;;;66624:14;66750:58;66641:12;;66691;66750:19;:58::i;:::-;:68;-1:-1:-1;66828:42:56;66750:68;66853:16;66828:6;:42::i;:::-;-1:-1:-1;66904:23:56;;66937:47;66957:11;66904:23;66937:19;:47::i;:::-;66995:16;67014:11;:7;67024:1;67014:11;:::i;:::-;66995:30;;67035:31;67069:60;67089:9;67100:7;67109:19;67069;:60::i;:::-;:70;-1:-1:-1;67149:39:56;67069:70;67171:16;67149:6;:39::i;:::-;-1:-1:-1;67214:20:56;;;-1:-1:-1;67244:47:56;67264:11;67214:20;67244:19;:47::i;:::-;67302:22;67327:11;:7;67337:1;67327:11;:::i;:::-;67302:36;;67348:37;67396:66;67416:15;67433:7;67442:19;67396;:66::i;:::-;:76;-1:-1:-1;67482:45:56;67396:76;67510:16;67482:6;:45::i;:::-;-1:-1:-1;67553:26:56;;;-1:-1:-1;67589:47:56;67609:11;67553:26;67589:19;:47::i;:::-;67748:17;;-1:-1:-1;;;67748:17:56;;;;-1:-1:-1;;67744:233:56;;;67812:17;;;;67843:39;;;-1:-1:-1;;;67843:39:56;;;-1:-1:-1;;;;67843:39:56;;;;;;;67901:65;;;67812:17;;;;;;27241:38:73;;;67935:17:56;;;;;;;27310:2:73;27295:18;;27288:47;27351:18;;;27344:34;;;67901:65:56;;27229:2:73;27214:18;67901:65:56;;;;;;;67781:196;67744:233;66614:1369;;;;;;;;66528:1455;;:::o;59174:212::-;59255:45;59266:9;59277:22;59255:10;:45::i;:::-;59310:27;;-1:-1:-1;;;;59310:27:56;-1:-1:-1;;;59310:27:56;;;;;;;59353:26;;;;;;59310:27;;59353:26;:::i;9229:218:58:-;9301:36;-1:-1:-1;;;;;14385:32:58;;46984:5:56::1;:36::i;9301::58:-:0;2140:10:30;:17;9368:1:58;9351:18;9347:46;;9378:15;;-1:-1:-1;;;9378:15:58;;;;;;;;;;;9347:46;-1:-1:-1;;;;;9411:29:58;;;;;:11;:29;;;;;9404:36;;;;;;;;-1:-1:-1;;;;;;9404:36:58;;;;;;;-1:-1:-1;;;;;;9404:36:58;;;9229:218::o;63384:783:56:-;63497:26;;-1:-1:-1;;;;;63497:26:56;;;-1:-1:-1;;;63561:23:56;;;;63595:44;63497:26;63595:13;63482:12;63561:23;63609:16;;;;;;;;:::i;:::-;63595:31;;;;;;;;;;;;;-1:-1:-1;63595:31:56;;:38;:44::i;:::-;-1:-1:-1;63666:25:56;63653:9;:38;;;;;;;;:::i;:::-;;;:74;;;;-1:-1:-1;63708:19:56;63695:9;:32;;;;;;;;:::i;:::-;;;63653:74;63649:146;;;63743:41;63779:4;63743:13;:31;63763:9;63757:16;;;;;;;;:::i;63743:41::-;;63649:146;63805:16;63824:41;63855:9;63824:30;:41::i;:::-;63805:60;;63875:16;63894:41;63925:9;63894:30;:41::i;:::-;63875:60;;63949:11;:27;;;;;63965:11;63964:12;63949:27;63945:170;;;63994:22;;63992:24;;;;;:::i;:::-;;;;-1:-1:-1;63945:170:56;;;64038:11;64037:12;:27;;;;;64053:11;64037:27;64033:82;;;64082:22;;64080:24;;;;;:::i;:::-;;;;-1:-1:-1;64033:82:56;64125:35;;64151:9;;64125;;-1:-1:-1;;;;64125:35:56;-1:-1:-1;;;64151:9:56;64125:35;;;;;;;;:::i;:::-;;;;;;63472:695;;;;63384:783;;:::o;2815:1368:49:-;2881:4;3010:21;;;:14;;;:21;;;;;;3046:13;;3042:1135;;3413:18;3434:12;3445:1;3434:8;:12;:::i;:::-;3480:18;;3413:33;;-1:-1:-1;3460:17:49;;3480:22;;3501:1;;3480:22;:::i;:::-;3460:42;;3535:9;3521:10;:23;3517:378;;3564:17;3584:3;:11;;3596:9;3584:22;;;;;;;;:::i;:::-;;;;;;;;;3564:42;;3731:9;3705:3;:11;;3717:10;3705:23;;;;;;;;:::i;:::-;;;;;;;;;;;;:35;;;;3844:25;;;:14;;;:25;;;;;:36;;;3517:378;3973:17;;:3;;:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;4076:3;:14;;:21;4091:5;4076:21;;;;;;;;;;;4069:28;;;4119:4;4112:11;;;;;;;3042:1135;4161:5;4154:12;;;;;3042:1135;2887:1296;2815:1368;;;;:::o;48864:595:56:-;49014:12;49328:6;:13;49345:2;49328:19;49324:50;;49356:18;;-1:-1:-1;;;49356:18:56;;;;;;;;;;;49324:50;49391:61;;;;48437:8;;49427:6;;49435:16;;49391:61;;;:::i;:::-;;;;;;;;;;;;;49384:68;;48864:595;;;;:::o;52610:363::-;52702:21;52751:20;52761:9;52751;:20::i;:::-;52836:1;52785:39;;;:24;:39;;;;;;52735:36;;-1:-1:-1;;;;;;52785:39:56;:53;52781:86;;52847:20;;-1:-1:-1;;;52847:20:56;;;;;;;;;;;52781:86;52877:39;;;;:24;:39;;;;;:58;;-1:-1:-1;;;;;52877:58:56;;-1:-1:-1;;;;;;52877:58:56;;;;;;52610:363;;;;:::o;56536:299::-;56609:4;56002:2;56629:7;-1:-1:-1;;;;;56629:19:56;;:48;56625:66;;-1:-1:-1;56686:5:56;;56536:299;-1:-1:-1;56536:299:56:o;56625:66::-;56702:17;56722:7;-1:-1:-1;;;;;56722:12:56;;;;;;;;;;;;;;;;;;;;;;;;56751:7;;56702:32;;-1:-1:-1;;;;56762:12:56;56702:32;;56756:1;;56751:7;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;56751:7:56;:23;:50;;;;-1:-1:-1;56778:7:56;;-1:-1:-1;;;56789:12:56;56778:4;;56796;;56778:7;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;56778:7:56;:23;56751:50;:77;;;;-1:-1:-1;56805:7:56;;56823:4;;56805;;56810:1;;56805:7;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;56805:7:56;:23;56744:84;56536:299;-1:-1:-1;;;56536:299:56:o;9664:1284:50:-;9779:14;9896:4;9890:11;9934:16;9972:2;9967:297;;;;10286:2;10281:204;;;;10512:5;;;9967:297;10042:4;10020:27;;;10007:41;10090:3;10086:12;;;10100:2;10082:21;10069:35;;;10146:30;;10140:4;10133:44;-1:-1:-1;;;;;10219:18:50;10213:4;10206:32;9967:297;;10281:204;10367:4;10349:16;10345:27;10332:41;10329:1;10324:50;10318:4;10311:64;10441:4;10423:16;10417:4;10404:42;9927:592;;10549:4;10543;10536:18;10614:4;10608;10602;10596;10593:1;10586:5;10575:44;10571:49;10650:1;10644:4;10637:15;10810:16;10804:4;10800:27;10794:34;10784:44;;10858:1;10852:4;10845:15;9879:24;9664:1284;;;;;:::o;4225:2099:55:-;4365:12;-1:-1:-1;;;;;4397:20:55;;4393:40;4419:14;4393:40;4524:4;4518:11;4594:6;4582:19;4572:1072;;4632:16;4674:2;4669:317;;;;5012:2;5007:208;;;;5246:5;;;4669:317;4748:4;4726:27;;;4713:41;4800:3;4796:12;;;4810:2;4792:21;4779:35;;;4860:30;;4854:4;4847:44;-1:-1:-1;;;;;4937:18:55;4931:4;4924:32;4669:317;;5007:208;5097:4;5079:16;5075:27;5062:41;5059:1;5054:50;5048:4;5041:64;5175:4;5157:16;5151:4;5138:42;4625:628;;5287:4;5281;5274:18;5375:4;5369;5363;5357;5354:1;5347:5;5336:44;5330:51;5454:9;5446:6;5442:22;5438:2;5434:31;5416:16;5413:53;5402:64;;;5500:1;5494:4;5487:15;5562:1;5556:4;5549:15;5621:5;;4572:1072;5679:10;5674:3;5670:20;5717:1;5714;5707:12;5816:4;5809;5806:1;5802:12;5795:26;5854:4;5851:1;5847:12;5886:4;5883:1;5876:15;5979:16;5972:4;5969:1;5965:12;5958:38;6104:16;6086;6079:4;6076:1;6072:12;6059:62;6210:4;6207:1;6200:4;6182:16;6178:27;6175:1;6167:6;6160:5;6149:66;6250:8;;6247:15;;;6243:29;;-1:-1:-1;4542:1766:55;4546:2;4225:2099;;;;;;:::o;12201:428:58:-;12342:26;;;12300:7;12342:26;;;:8;:26;;;;;:38;12300:7;12408:43;12420:16;12342:38;12408:11;:43::i;:::-;12390:61;-1:-1:-1;12466:12:58;;;:70;;-1:-1:-1;12492:26:58;;;;;;;:8;:26;;;;;:44;;;12482:54;;12466:70;12462:136;;;12559:28;;-1:-1:-1;;;12559:28:58;;;;;160:25:73;;;133:18;;12559:28:58;14:177:73;2202:126:39;1920:7;;;;;;;2260:62;;2296:15;;-1:-1:-1;;;2296:15:39;;;;;;;;;;;2518:625:30;2613:7;2632:21;2656:32;2670:2;2674:7;2683:4;2656:13;:32::i;:::-;2632:56;-1:-1:-1;;;;;;2703:27:30;;2699:210;;2746:40;2778:7;3949:10;:17;;3922:24;;;;:15;:24;;;;;:44;;;3976:24;;;;;;;;;;;;3846:161;2746:40;2699:210;;;2824:2;-1:-1:-1;;;;;2807:19:30;:13;-1:-1:-1;;;;;2807:19:30;;2803:106;;2842:56;2875:13;2890:7;2842:32;:56::i;:::-;-1:-1:-1;;;;;2922:16:30;;2918:188;;2954:45;2991:7;2954:36;:45::i;:::-;2918:188;;;3037:2;-1:-1:-1;;;;;3020:19:30;:13;-1:-1:-1;;;;;3020:19:30;;3016:90;;3055:40;3083:2;3087:7;3055:27;:40::i;60694:641:56:-;-1:-1:-1;;;;;60817:39:56;;;60774:40;60817:39;;;:21;:39;;;;;;;;60774:82;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;60774:82:56;;;;;;;;;;;;;;;;;;;60870:26;;60866:179;;60968:46;:21;60997:16;60968:28;:46::i;60866:179::-;-1:-1:-1;;;;;61062:39:56;;;;;;:21;:39;;;;;61055:46;;-1:-1:-1;;;;;;61055:46:56;;;;;;61111;:21;61084:16;61111:28;:46::i;:::-;-1:-1:-1;61171:14:56;;;;:18;61167:162;;61241:14;;;;61222;;;;;-1:-1:-1;;;;;61205:32:56;;;;;:16;:32;;;;;:50;;:32;;;:50;;61241:14;;61205:50;:::i;:::-;;;;;;;;61287:7;:14;;;-1:-1:-1;;;;;61274:44:56;-1:-1:-1;;;;;;;;;;;61303:7:56;:14;;;61274:44;;;;160:25:73;;148:2;133:18;;14:177;58382:168:56;58453:45;58464:9;58475:22;58453:10;:45::i;:::-;58514:29;58533:9;58514:29;;;;;;:::i;75012:238::-;75116:9;75111:133;75131:9;:16;75127:1;:20;75111:133;;;75168:65;75228:4;75168:52;:40;75195:9;75205:1;75195:12;;;;;;;;:::i;:::-;;;;;;;75168;:26;;:40;;;;:::i;:::-;1766:4:43;1663:115;75168:52:56;:59;;:65::i;:::-;75149:3;;75111:133;;75342:192;-1:-1:-1;;;;;2831:25:40;;75440:4:56;2818:39:40;;;2877:4;2870:18;;;2927:4;2911:21;;3369:11:43;75463:64:56;3243:153:43;5581:109:49;5637:16;5672:3;:11;;5665:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5581:109;;;:::o;2241:406::-;2304:4;4360:21;;;:14;;;:21;;;;;;2320:321;;-1:-1:-1;2362:23:49;;;;;;;;:11;:23;;;;;;;;;;;;;2544:18;;2520:21;;;:14;;;:21;;;;;;:42;;;;2576:11;;2320:321;-1:-1:-1;2625:5:49;2618:12;;2973:148:42;3031:13;3063:51;-1:-1:-1;;;;;3075:22:42;;448:2;3063:11;:51::i;1186:4022:35:-;1283:13;1515:4;:11;1530:1;1515:16;1511:31;;-1:-1:-1;1533:9:35;;;;;;;;;-1:-1:-1;1533:9:35;;;;1511:31;2480:20;2503:11;:69;;2571:1;2552:4;:11;2548:1;:15;;;;:::i;:::-;:19;;2566:1;2548:19;:::i;:::-;2547:25;;;;:::i;:::-;2503:69;;;2542:1;2523:4;:11;2537:1;2523:15;;;;:::i;:::-;2522:21;;;;:::i;:::-;2517:27;;:1;:27;:::i;:::-;2480:92;;2583:20;2617:12;-1:-1:-1;;;;;2606:24:35;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2606:24:35;;2583:47;;2778:1;2771:5;2767:13;2879:4;2871:6;2867:17;2912:4;2959;2953:11;2947:4;2943:22;3207:4;3199:6;3195:17;3249:8;3243:15;3288:4;3278:8;3271:22;3360:1259;3393:6;3384:7;3381:19;3360:1259;;;3495:1;3486:7;3482:15;3471:26;;3533:7;3527:14;4120:4;4112:5;4108:2;4104:14;4100:25;4090:8;4086:40;4080:47;4069:9;4061:67;4173:1;4162:9;4158:17;4145:30;;4263:4;4255:5;4251:2;4247:14;4243:25;4233:8;4229:40;4223:47;4212:9;4204:67;4316:1;4305:9;4301:17;4288:30;;4405:4;4397:5;4394:1;4390:13;4386:24;4376:8;4372:39;4366:46;4355:9;4347:66;4458:1;4447:9;4443:17;4430:30;;4539:4;4532:5;4528:16;4518:8;4514:31;4508:38;4497:9;4489:58;;4592:1;4581:9;4577:17;4564:30;;3360:1259;;;4680:28;;-1:-1:-1;;4722:446:35;;;;4907:1;4900:4;4894:11;4890:19;4931:1;4926:132;;;;5080:1;5075:79;;;;4883:271;;4926:132;4982:4;4978:1;4967:9;4963:17;4955:32;5035:4;5031:1;5020:9;5016:17;5008:32;4926:132;;5075:79;5131:4;5127:1;5116:9;5112:17;5104:32;4883:271;;4722:446;-1:-1:-1;5195:6:35;;1186:4022;-1:-1:-1;;;;;;1186:4022:35:o;62081:751:56:-;62197:104;;-1:-1:-1;;;62197:104:56;;-1:-1:-1;;;;;25302:32:73;;62197:104:56;;;25284:51:73;25351:18;;;25344:34;;;-1:-1:-1;;;;;;;;;;;1249:42:58;62197:40:56;;5532:7;;62246:10;;25257:18:73;;62197:104:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;62193:633;;62625:14;;62621:61;;-1:-1:-1;;;;;62641:27:56;;;;;;:16;:27;;;;;:41;;62672:10;;62641:27;:41;;62672:10;;62641:41;:::i;:::-;;;;-1:-1:-1;;62621:61:56;62700:11;;62696:55;;-1:-1:-1;;;;;62713:27:56;;;;;;:16;:27;;;;;:38;;62744:7;;62713:27;:38;;62744:7;;62713:38;:::i;:::-;;;;-1:-1:-1;;62696:55:56;-1:-1:-1;;;;;62770:45:56;;-1:-1:-1;;;;;;;;;;;62794:20:56;62807:7;62794:10;:20;:::i;:::-;62770:45;;160:25:73;;;148:2;133:18;62770:45:56;;;;;;;10910:2037:::1;10819:2134:::0;;:::o;67989:394::-;68108:16;;68078:4;;;68134:221;68154:3;68150:1;:7;68134:221;;;68198:16;-1:-1:-1;;;;;68182:32:56;:9;68192:1;68182:12;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;68182:12:56;:32;68178:167;;68249:9;68259:7;68265:1;68259:3;:7;:::i;:::-;68249:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;68249:18:56;68234:9;68244:1;68234:12;;;;;;;;:::i;:::-;;;;;;;;;:33;;;;;-1:-1:-1;;;;;68234:33:56;;;;;-1:-1:-1;;;;;68234:33:56;;;;;;68285:9;:15;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;68285:15:56;;;;;-1:-1:-1;;;;;;68285:15:56;;;;;;-1:-1:-1;68285:15:56;;-1:-1:-1;68319:11:56;;-1:-1:-1;68319:11:56;68178:167;68159:3;;68134:221;;;-1:-1:-1;68371:5:56;;67989:394;-1:-1:-1;;;;67989:394:56:o;8861:795:27:-;8947:7;5824:16;;;:7;:16;;;;;;-1:-1:-1;;;;;5824:16:27;;;;9058:18;;;9054:86;;9092:37;9109:4;9115;9121:7;9092:16;:37::i;:::-;-1:-1:-1;;;;;9184:18:27;;;9180:256;;9300:48;9317:1;9321:7;9338:1;9342:5;9300:8;:48::i;:::-;-1:-1:-1;;;;;9391:15:27;;;;;;:9;:15;;;;;:20;;-1:-1:-1;;9391:20:27;;;9180:256;-1:-1:-1;;;;;9450:16:27;;;9446:107;;-1:-1:-1;;;;;9510:13:27;;;;;;:9;:13;;;;;:18;;9527:1;9510:18;;;9446:107;9563:16;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;9563:21:27;-1:-1:-1;;;;;9563:21:27;;;;;;;;;9600:27;;9563:16;;9600:27;;;;;;;9645:4;8861:795;-1:-1:-1;;;;8861:795:27:o;4624:1055:30:-;4886:22;4911:15;4921:4;4911:9;:15::i;:::-;4936:18;4957:26;;;:17;:26;;;;;;;;;-1:-1:-1;;;;;5058:18:30;;;;:12;:18;;;;;;4886:40;;-1:-1:-1;4957:26:30;5180:28;;;5176:325;;5224:19;5246:35;;;;;;;;;;;;5296:31;;;;;;:45;;;5413:30;;:17;:30;;;;;:43;;;5176:325;5594:26;;;;:17;:26;;;;;;;;5587:33;;;5637:35;;;;-1:-1:-1;5637:35:30;;5630:42;-1:-1:-1;4624:1055:30:o;5967:1061::-;6241:10;:17;6216:22;;6241:21;;6261:1;;6241:21;:::i;:::-;6272:18;6293:24;;;:15;:24;;;;;;6661:10;:26;;6216:46;;-1:-1:-1;6293:24:30;;6216:46;;6661:26;;;;;;:::i;:::-;;;;;;;;;6639:48;;6723:11;6698:10;6709;6698:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;6802:28;;;:15;:28;;;;;;;:41;;;6971:24;;;;;6964:31;7005:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;6038:990;;;5967:1061;:::o;3437:214::-;3521:14;3554:1;3538:13;3548:2;3538:9;:13::i;:::-;:17;;;;:::i;:::-;-1:-1:-1;;;;;3565:16:30;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;3609:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;3437:214:30:o;2680:268:40:-;-1:-1:-1;;;;;2831:25:40;2753:14;2818:39;;;2877:4;2870:18;;;;2927:4;2911:21;;;2680:268::o;3485:139:43:-;3602:5;3596:4;3589:19;3485:139;;:::o;2289:525:42:-;2364:13;2410:5;2389:18;2457:10;2461:6;2457:1;:10;:::i;:::-;:14;;2470:1;2457:14;:::i;:::-;-1:-1:-1;;;;;2447:25:42;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2447:25:42;;2425:47;;-1:-1:-1;;;2482:6:42;2489:1;2482:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;2482:15:42;;;;;;;;;-1:-1:-1;;;2507:6:42;2514:1;2507:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;2507:15:42;;;;;;;;-1:-1:-1;2537:9:42;2549:10;2553:6;2549:1;:10;:::i;:::-;:14;;2562:1;2549:14;:::i;:::-;2537:26;;2532:140;2569:1;2565;:5;2532:140;;;-1:-1:-1;;;2614:10:42;2627:3;2614:16;2603:28;;;;;;;:::i;:::-;;;;2591:6;2598:1;2591:9;;;;;;;;:::i;:::-;;;;:40;-1:-1:-1;;;;;2591:40:42;;;;;;;;-1:-1:-1;2660:1:42;2645:16;;;;;2572:3;;;:::i;:::-;;;2532:140;;;-1:-1:-1;2685:15:42;;2681:96;;2723:43;;-1:-1:-1;;;2723:43:42;;;;;26711:25:73;;;26752:18;;;26745:34;;;26684:18;;2723:43:42;26529:256:73;7105:368:27;7217:38;7231:5;7238:7;7247;7217:13;:38::i;:::-;7212:255;;-1:-1:-1;;;;;7275:19:27;;7271:186;;7321:31;;-1:-1:-1;;;7321:31:27;;;;;160:25:73;;;133:18;;7321:31:27;14:177:73;7271:186:27;7398:44;;-1:-1:-1;;;7398:44:27;;-1:-1:-1;;;;;25302:32:73;;7398:44:27;;;25284:51:73;25351:18;;;25344:34;;;25257:18;;7398:44:27;25110:274:73;14794:662:27;14954:9;:31;;;-1:-1:-1;;;;;;14967:18:27;;;;14954:31;14950:460;;;15001:13;15017:22;15031:7;15017:13;:22::i;:::-;15001:38;-1:-1:-1;;;;;;15167:18:27;;;;;;:35;;;15198:4;-1:-1:-1;;;;;15189:13:27;:5;-1:-1:-1;;;;;15189:13:27;;;15167:35;:69;;;;;15207:29;15224:5;15231:4;15207:16;:29::i;:::-;15206:30;15167:69;15163:142;;;15263:27;;-1:-1:-1;;;15263:27:27;;-1:-1:-1;;;;;3241:32:73;;15263:27:27;;;3223:51:73;3196:18;;15263:27:27;3077:203:73;15163:142:27;15323:9;15319:81;;;15377:7;15373:2;-1:-1:-1;;;;;15357:28:27;15366:5;-1:-1:-1;;;;;15357:28:27;;;;;;;;;;;15319:81;14987:423;14950:460;-1:-1:-1;;15420:24:27;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;15420:29:27;-1:-1:-1;;;;;15420:29:27;;;;;;;;;;14794:662::o;6401:272::-;6504:4;-1:-1:-1;;;;;6539:21:27;;;;;;:127;;;6586:7;-1:-1:-1;;;;;6577:16:27;:5;-1:-1:-1;;;;;6577:16:27;;:52;;;;6597:32;6614:5;6621:7;6597:16;:32::i;:::-;6577:88;;;-1:-1:-1;;6033:7:27;6059:24;;;:15;:24;;;;;;-1:-1:-1;;;;;6059:24:27;;;6633:32;;;;6520:146;-1:-1:-1;6401:272:27:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;196:131:73:-;-1:-1:-1;;;;;;270:32:73;;260:43;;250:71;;317:1;314;307:12;332:245;390:6;443:2;431:9;422:7;418:23;414:32;411:52;;;459:1;456;449:12;411:52;498:9;485:23;517:30;541:5;517:30;:::i;870:381::-;947:8;957:6;1011:3;1004:4;996:6;992:17;988:27;978:55;;1029:1;1026;1019:12;978:55;-1:-1:-1;1052:20:73;;-1:-1:-1;;;;;1084:30:73;;1081:50;;;1127:1;1124;1117:12;1081:50;1164:4;1156:6;1152:17;1140:29;;1224:3;1217:4;1207:6;1204:1;1200:14;1192:6;1188:27;1184:38;1181:47;1178:67;;;1241:1;1238;1231:12;1178:67;870:381;;;;;:::o;1256:477::-;1368:6;1376;1429:2;1417:9;1408:7;1404:23;1400:32;1397:52;;;1445:1;1442;1435:12;1397:52;1485:9;1472:23;-1:-1:-1;;;;;1510:6:73;1507:30;1504:50;;;1550:1;1547;1540:12;1504:50;1589:84;1665:7;1656:6;1645:9;1641:22;1589:84;:::i;:::-;1692:8;;1563:110;;-1:-1:-1;1256:477:73;-1:-1:-1;;;;1256:477:73:o;1738:173::-;1806:20;;-1:-1:-1;;;;;1855:31:73;;1845:42;;1835:70;;1901:1;1898;1891:12;1916:186;1975:6;2028:2;2016:9;2007:7;2003:23;1999:32;1996:52;;;2044:1;2041;2034:12;1996:52;2067:29;2086:9;2067:29;:::i;2107:288::-;2148:3;2186:5;2180:12;2213:6;2208:3;2201:19;2269:6;2262:4;2255:5;2251:16;2244:4;2239:3;2235:14;2229:47;2321:1;2314:4;2305:6;2300:3;2296:16;2292:27;2285:38;2384:4;2377:2;2373:7;2368:2;2360:6;2356:15;2352:29;2347:3;2343:39;2339:50;2332:57;;;2107:288;;;;:::o;2400:217::-;2547:2;2536:9;2529:21;2510:4;2567:44;2607:2;2596:9;2592:18;2584:6;2567:44;:::i;2846:226::-;2905:6;2958:2;2946:9;2937:7;2933:23;2929:32;2926:52;;;2974:1;2971;2964:12;2926:52;-1:-1:-1;3019:23:73;;2846:226;-1:-1:-1;2846:226:73:o;3285:300::-;3353:6;3361;3414:2;3402:9;3393:7;3389:23;3385:32;3382:52;;;3430:1;3427;3420:12;3382:52;3453:29;3472:9;3453:29;:::i;:::-;3443:39;3551:2;3536:18;;;;3523:32;;-1:-1:-1;;;3285:300:73:o;4077:347::-;4128:8;4138:6;4192:3;4185:4;4177:6;4173:17;4169:27;4159:55;;4210:1;4207;4200:12;4159:55;-1:-1:-1;4233:20:73;;-1:-1:-1;;;;;4265:30:73;;4262:50;;;4308:1;4305;4298:12;4262:50;4345:4;4337:6;4333:17;4321:29;;4397:3;4390:4;4381:6;4373;4369:19;4365:30;4362:39;4359:59;;;4414:1;4411;4404:12;4429:127;4490:10;4485:3;4481:20;4478:1;4471:31;4521:4;4518:1;4511:15;4545:4;4542:1;4535:15;4561:745;4603:5;4656:3;4649:4;4641:6;4637:17;4633:27;4623:55;;4674:1;4671;4664:12;4623:55;4714:6;4701:20;-1:-1:-1;;;;;4736:6:73;4733:30;4730:56;;;4766:18;;:::i;:::-;4835:2;4829:9;4927:2;4889:17;;-1:-1:-1;;4885:31:73;;;4918:2;4881:40;4877:54;4865:67;;-1:-1:-1;;;;;4947:34:73;;4983:22;;;4944:62;4941:88;;;5009:18;;:::i;:::-;5045:2;5038:22;5069;;;5110:19;;;5131:4;5106:30;5103:39;-1:-1:-1;5100:59:73;;;5155:1;5152;5145:12;5100:59;5219:6;5212:4;5204:6;5200:17;5193:4;5185:6;5181:17;5168:58;5274:1;5246:19;;;5267:4;5242:30;5235:41;;;;5250:6;4561:745;-1:-1:-1;;;4561:745:73:o;5311:563::-;5375:5;5423:4;5411:9;5406:3;5402:19;5398:30;5395:50;;;5441:1;5438;5431:12;5395:50;5494:2;5488:9;5536:4;5524:17;;-1:-1:-1;;;;;5556:34:73;;5592:22;;;5553:62;5550:88;;;5618:18;;:::i;:::-;5654:2;5647:22;5687:6;-1:-1:-1;5687:6:73;5716:23;;-1:-1:-1;;;;;5751:30:73;;5748:50;;;5794:1;5791;5784:12;5748:50;5822:45;5863:3;5854:6;5843:9;5839:22;5822:45;:::i;:::-;5814:6;5807:61;;;5311:563;;;;:::o;5879:1162::-;6032:6;6040;6048;6056;6064;6072;6080;6133:3;6121:9;6112:7;6108:23;6104:33;6101:53;;;6150:1;6147;6140:12;6101:53;6190:9;6177:23;-1:-1:-1;;;;;6215:6:73;6212:30;6209:50;;;6255:1;6252;6245:12;6209:50;6294:58;6344:7;6335:6;6324:9;6320:22;6294:58;:::i;:::-;6371:8;;-1:-1:-1;6268:84:73;-1:-1:-1;;6459:2:73;6444:18;;6431:32;-1:-1:-1;;;;;6475:32:73;;6472:52;;;6520:1;6517;6510:12;6472:52;6543:70;6605:7;6594:8;6583:9;6579:24;6543:70;:::i;:::-;6533:80;;;6632:38;6666:2;6655:9;6651:18;6632:38;:::i;:::-;6622:48;;6723:2;6712:9;6708:18;6695:32;-1:-1:-1;;;;;6742:8:73;6739:32;6736:52;;;6784:1;6781;6774:12;6736:52;6823:60;6875:7;6864:8;6853:9;6849:24;6823:60;:::i;:::-;5879:1162;;;;-1:-1:-1;5879:1162:73;;;;;;7006:3;6991:19;;;6978:33;;5879:1162;-1:-1:-1;;;;5879:1162:73:o;7469:127::-;7530:10;7525:3;7521:20;7518:1;7511:31;7561:4;7558:1;7551:15;7585:4;7582:1;7575:15;7601:243;7688:1;7681:5;7678:12;7668:143;;7733:10;7728:3;7724:20;7721:1;7714:31;7768:4;7765:1;7758:15;7796:4;7793:1;7786:15;7668:143;7820:18;;7601:243::o;7929:642::-;8043:1;8039;8034:3;8030:11;8026:19;8018:5;8012:12;8008:38;8003:3;7996:51;8108:10;8100:4;8093:5;8089:16;8083:23;8079:40;8072:4;8067:3;8063:14;8056:64;8181:10;8173:4;8166:5;8162:16;8156:23;8152:40;8145:4;8140:3;8136:14;8129:64;8239:4;8232:5;8228:16;8222:23;8254:61;8309:4;8304:3;8300:14;8286:12;8254:61;:::i;:::-;;8378:4;8371:5;8367:16;8361:23;8354:31;8347:39;8340:4;8335:3;8331:14;8324:63;8448:4;8440;8433:5;8429:16;8423:23;8419:34;8412:4;8407:3;8403:14;8396:58;8502:4;8495:5;8491:16;8485:23;8517:48;8559:4;8554:3;8550:14;8534;7916:4;7905:16;7893:29;;7849:75;8576:267;8774:3;8759:19;;8787:50;8763:9;8819:6;8787:50;:::i;8848:374::-;8925:6;8933;8941;8994:2;8982:9;8973:7;8969:23;8965:32;8962:52;;;9010:1;9007;9000:12;8962:52;9033:29;9052:9;9033:29;:::i;:::-;9023:39;;9081:38;9115:2;9104:9;9100:18;9081:38;:::i;:::-;8848:374;;9071:48;;-1:-1:-1;;;9188:2:73;9173:18;;;;9160:32;;8848:374::o;9227:277::-;9307:6;9360:2;9348:9;9339:7;9335:23;9331:32;9328:52;;;9376:1;9373;9366:12;9328:52;9415:9;9402:23;9454:1;9447:5;9444:12;9434:40;;9470:1;9467;9460:12;9509:702;9763:2;9775:21;;;9845:13;;9748:18;;;9867:22;;;9715:4;;9946:15;;;9920:2;9905:18;;;9715:4;9989:196;10003:6;10000:1;9997:13;9989:196;;;10052:51;10099:3;10090:6;10084:13;10052:51;:::i;:::-;10172:2;10160:15;;;;;10132:4;10123:14;;;;;10025:1;10018:9;9989:196;;;-1:-1:-1;10202:3:73;;9509:702;-1:-1:-1;;;;;9509:702:73:o;10216:118::-;10302:5;10295:13;10288:21;10281:5;10278:32;10268:60;;10324:1;10321;10314:12;10339:241;10395:6;10448:2;10436:9;10427:7;10423:23;10419:32;10416:52;;;10464:1;10461;10454:12;10416:52;10503:9;10490:23;10522:28;10544:5;10522:28;:::i;10585:669::-;10700:6;10708;10716;10769:2;10757:9;10748:7;10744:23;10740:32;10737:52;;;10785:1;10782;10775:12;10737:52;10825:9;10812:23;-1:-1:-1;;;;;10850:6:73;10847:30;10844:50;;;10890:1;10887;10880:12;10844:50;10929:58;10979:7;10970:6;10959:9;10955:22;10929:58;:::i;:::-;11006:8;;-1:-1:-1;10903:84:73;-1:-1:-1;;11094:2:73;11079:18;;11066:32;-1:-1:-1;;;;;11110:32:73;;11107:52;;;11155:1;11152;11145:12;11107:52;11178:70;11240:7;11229:8;11218:9;11214:24;11178:70;:::i;:::-;11168:80;;;10585:669;;;;;:::o;11259:121::-;11344:10;11337:5;11333:22;11326:5;11323:33;11313:61;;11370:1;11367;11360:12;11385:245;11443:6;11496:2;11484:9;11475:7;11471:23;11467:32;11464:52;;;11512:1;11509;11502:12;11464:52;11551:9;11538:23;11570:30;11594:5;11570:30;:::i;11635:446::-;11688:3;11726:5;11720:12;11753:6;11748:3;11741:19;11785:4;11780:3;11776:14;11769:21;;11824:4;11817:5;11813:16;11847:1;11857:199;11871:6;11868:1;11865:13;11857:199;;;11936:13;;-1:-1:-1;;;;;11932:39:73;11920:52;;12001:4;11992:14;;;;12029:17;;;;11968:1;11886:9;11857:199;;;-1:-1:-1;12072:3:73;;11635:446;-1:-1:-1;;;;11635:446:73:o;12086:757::-;12271:2;12260:9;12253:21;12234:4;12309:6;12303:13;12352:4;12347:2;12336:9;12332:18;12325:32;12380:63;12438:3;12427:9;12423:19;12409:12;12380:63;:::i;:::-;12366:77;;12497:2;12489:6;12485:15;12479:22;12474:2;12463:9;12459:18;12452:50;-1:-1:-1;;;;;12560:2:73;12552:6;12548:15;12542:22;12538:47;12533:2;12522:9;12518:18;12511:75;12651:10;12645:2;12637:6;12633:15;12627:22;12623:39;12617:3;12606:9;12602:19;12595:68;12729:10;12722:3;12714:6;12710:16;12704:23;12700:40;12694:3;12683:9;12679:19;12672:69;12808:4;12801:3;12793:6;12789:16;12783:23;12779:34;12772:4;12761:9;12757:20;12750:64;12831:6;12823:14;;;12086:757;;;;:::o;13376:272::-;13434:6;13487:2;13475:9;13466:7;13462:23;13458:32;13455:52;;;13503:1;13500;13493:12;13455:52;13542:9;13529:23;13592:6;13585:5;13581:18;13574:5;13571:29;13561:57;;13614:1;13611;13604:12;13842:409;13912:6;13920;13973:2;13961:9;13952:7;13948:23;13944:32;13941:52;;;13989:1;13986;13979:12;13941:52;14029:9;14016:23;-1:-1:-1;;;;;14054:6:73;14051:30;14048:50;;;14094:1;14091;14084:12;14048:50;14133:58;14183:7;14174:6;14163:9;14159:22;14133:58;:::i;14256:779::-;14416:4;14464:2;14453:9;14449:18;14494:2;14483:9;14476:21;14517:6;14552;14546:13;14583:6;14575;14568:22;14621:2;14610:9;14606:18;14599:25;;14683:2;14673:6;14670:1;14666:14;14655:9;14651:30;14647:39;14633:53;;14721:2;14713:6;14709:15;14742:1;14752:254;14766:6;14763:1;14760:13;14752:254;;;14859:2;14855:7;14843:9;14835:6;14831:22;14827:36;14822:3;14815:49;14887:39;14919:6;14910;14904:13;14887:39;:::i;:::-;14877:49;-1:-1:-1;14961:2:73;14984:12;;;;14949:15;;;;;14788:1;14781:9;14752:254;;;-1:-1:-1;15023:6:73;;14256:779;-1:-1:-1;;;;;;14256:779:73:o;15040:610::-;15126:6;15134;15187:2;15175:9;15166:7;15162:23;15158:32;15155:52;;;15203:1;15200;15193:12;15155:52;15243:9;15230:23;-1:-1:-1;;;;;15268:6:73;15265:30;15262:50;;;15308:1;15305;15298:12;15262:50;15331:22;;15384:4;15376:13;;15372:27;-1:-1:-1;15362:55:73;;15413:1;15410;15403:12;15362:55;15453:2;15440:16;-1:-1:-1;;;;;15471:6:73;15468:30;15465:50;;;15511:1;15508;15501:12;15465:50;15564:7;15559:2;15549:6;15546:1;15542:14;15538:2;15534:23;15530:32;15527:45;15524:65;;;15585:1;15582;15575:12;15524:65;15616:2;15608:11;;;;;15638:6;;-1:-1:-1;15040:610:73;-1:-1:-1;;;15040:610:73:o;16111:1236::-;16517:3;16512;16508:13;16500:6;16496:26;16485:9;16478:45;16559:3;16554:2;16543:9;16539:18;16532:31;16459:4;16586:45;16626:3;16615:9;16611:19;16603:6;16586:45;:::i;:::-;16679:9;16671:6;16667:22;16662:2;16651:9;16647:18;16640:50;16713:32;16738:6;16730;16713:32;:::i;:::-;16776:2;16761:18;;16754:34;;;-1:-1:-1;;;;;16825:32:73;;16819:3;16804:19;;16797:61;16845:3;16874:19;;16867:35;;;16939:22;;;16933:3;16918:19;;16911:51;17011:13;;17033:22;;;17083:2;17109:15;;;;-1:-1:-1;17071:15:73;;;;-1:-1:-1;17152:169:73;17166:6;17163:1;17160:13;17152:169;;;17227:13;;17215:26;;17270:2;17296:15;;;;17261:12;;;;17188:1;17181:9;17152:169;;;-1:-1:-1;17338:3:73;;16111:1236;-1:-1:-1;;;;;;;;;;;16111:1236:73:o;17576:261::-;17755:2;17744:9;17737:21;17718:4;17775:56;17827:2;17816:9;17812:18;17804:6;17775:56;:::i;17842:315::-;17907:6;17915;17968:2;17956:9;17947:7;17943:23;17939:32;17936:52;;;17984:1;17981;17974:12;17936:52;18007:29;18026:9;18007:29;:::i;:::-;17997:39;;18086:2;18075:9;18071:18;18058:32;18099:28;18121:5;18099:28;:::i;:::-;18146:5;18136:15;;;17842:315;;;;;:::o;18162:156::-;18228:20;;18288:4;18277:16;;18267:27;;18257:55;;18308:1;18305;18298:12;18323:182;18380:6;18433:2;18421:9;18412:7;18408:23;18404:32;18401:52;;;18449:1;18446;18439:12;18401:52;18472:27;18489:9;18472:27;:::i;18510:583::-;18605:6;18613;18621;18629;18682:3;18670:9;18661:7;18657:23;18653:33;18650:53;;;18699:1;18696;18689:12;18650:53;18739:9;18726:23;-1:-1:-1;;;;;18764:6:73;18761:30;18758:50;;;18804:1;18801;18794:12;18758:50;18827:49;18868:7;18859:6;18848:9;18844:22;18827:49;:::i;:::-;18817:59;;;18895:38;18929:2;18918:9;18914:18;18895:38;:::i;:::-;18885:48;;18952:38;18986:2;18975:9;18971:18;18952:38;:::i;:::-;18510:583;;;;-1:-1:-1;18942:48:73;;19059:2;19044:18;19031:32;;-1:-1:-1;;18510:583:73:o;19280:::-;19375:6;19383;19391;19399;19452:3;19440:9;19431:7;19427:23;19423:33;19420:53;;;19469:1;19466;19459:12;19420:53;19492:29;19511:9;19492:29;:::i;:::-;19482:39;;19540:38;19574:2;19563:9;19559:18;19540:38;:::i;:::-;19530:48;-1:-1:-1;19647:2:73;19632:18;;19619:32;;-1:-1:-1;19726:2:73;19711:18;;19698:32;-1:-1:-1;;;;;19742:30:73;;19739:50;;;19785:1;19782;19775:12;19739:50;19808:49;19849:7;19840:6;19829:9;19825:22;19808:49;:::i;:::-;19798:59;;;19280:583;;;;;;;:::o;20509:236::-;20600:6;20660:3;20648:9;20639:7;20635:23;20631:33;20676:2;20673:22;;;20691:1;20688;20681:12;20673:22;-1:-1:-1;20730:9:73;;20509:236;-1:-1:-1;;20509:236:73:o;20750:256::-;20816:6;20824;20877:2;20865:9;20856:7;20852:23;20848:32;20845:52;;;20893:1;20890;20883:12;20845:52;20916:29;20935:9;20916:29;:::i;:::-;20906:39;;20964:36;20996:2;20985:9;20981:18;20964:36;:::i;:::-;20954:46;;20750:256;;;;;:::o;21011:260::-;21079:6;21087;21140:2;21128:9;21119:7;21115:23;21111:32;21108:52;;;21156:1;21153;21146:12;21108:52;21179:29;21198:9;21179:29;:::i;:::-;21169:39;;21227:38;21261:2;21250:9;21246:18;21227:38;:::i;21469:731::-;-1:-1:-1;;;;;21803:32:73;;21785:51;;21884:10;21872:23;;;21867:2;21852:18;;21845:51;21932:23;;21927:2;21912:18;;21905:51;21772:3;21757:19;;21965:59;22020:2;22005:18;;21997:6;21965:59;:::i;:::-;22068:14;;22061:22;22055:3;22040:19;;22033:51;22133:4;22121:17;;;22115:3;22100:19;;22093:46;22176:17;;22170:3;22155:19;;;22148:46;21469:731;;-1:-1:-1;;;;21469:731:73:o;22205:127::-;22266:10;22261:3;22257:20;22254:1;22247:31;22297:4;22294:1;22287:15;22321:4;22318:1;22311:15;22337:127;22398:10;22393:3;22389:20;22386:1;22379:31;22429:4;22426:1;22419:15;22453:4;22450:1;22443:15;22469:128;22536:9;;;22557:11;;;22554:37;;;22571:18;;:::i;22602:389::-;22786:2;22771:18;;-1:-1:-1;;;;;22820:26:73;22839:6;22820:26;:::i;:::-;22816:52;22798:71;;22935:4;22923:17;;;22910:31;22957:20;;;;22950:35;;;;22602:389;:::o;22996:380::-;23075:1;23071:12;;;;23118;;;23139:61;;23193:4;23185:6;23181:17;23171:27;;23139:61;23246:2;23238:6;23235:14;23215:18;23212:38;23209:161;;23292:10;23287:3;23283:20;23280:1;23273:31;23327:4;23324:1;23317:15;23355:4;23352:1;23345:15;23209:161;;22996:380;;;:::o;23660:168::-;23733:9;;;23764;;23781:15;;;23775:22;;23761:37;23751:71;;23802:18;;:::i;23833:125::-;23898:9;;;23919:10;;;23916:36;;;23932:18;;:::i;23963:127::-;24024:10;24019:3;24015:20;24012:1;24005:31;24055:4;24052:1;24045:15;24079:4;24076:1;24069:15;24095:120;24135:1;24161;24151:35;;24166:18;;:::i;:::-;-1:-1:-1;24200:9:73;;24095:120::o;24220:689::-;24529:25;;;24585:2;24570:18;;24563:34;;;;-1:-1:-1;;;;;24633:32:73;;;24628:2;24613:18;;24606:60;24702:32;;;;24697:2;24682:18;;24675:60;24784:4;24772:17;;;24766:3;24751:19;;24744:46;-1:-1:-1;;;;;24827:31:73;24653:3;24806:19;;24799:60;24890:3;24875:19;;24868:35;24516:3;24501:19;;24220:689::o;24914:191::-;-1:-1:-1;;;;;24982:26:73;;;25010;;;24978:59;;25049:27;;25046:53;;;25079:18;;:::i;25599:167::-;25694:10;25667:18;;;25687;;;25663:43;;25718:19;;25715:45;;;25740:18;;:::i;25771:170::-;25868:10;25861:18;;;25841;;;25837:43;;25892:20;;25889:46;;;25915:18;;:::i;25946:221::-;26099:2;26084:18;;26111:50;26088:9;26143:6;26111:50;:::i;27654:135::-;27693:3;27714:17;;;27711:43;;27734:18;;:::i;:::-;-1:-1:-1;27781:1:73;27770:13;;27654:135::o;27794:175::-;27831:3;27875:4;27868:5;27864:16;27904:4;27895:7;27892:17;27889:43;;27912:18;;:::i;:::-;27961:1;27948:15;;27794:175;-1:-1:-1;;27794:175:73:o;27974:691::-;28158:19;;28186:21;;28276:2;28265:14;;28252:28;28306:1;28296:12;;28289:29;28387:2;28376:14;;28363:28;28417:1;28407:12;;28400:29;28466:1;28456:12;;28516:2;28505:14;;28492:28;28529:32;28492:28;28529:32;:::i;:::-;28596:17;;-1:-1:-1;;28592:39:73;28646:10;28633:24;;;;28589:69;28570:89;;-1:-1:-1;;27974:691:73:o;29081:204::-;29119:3;-1:-1:-1;;;;;29156:5:73;29152:30;-1:-1:-1;;;;;29197:7:73;29194:31;29191:57;;29228:18;;:::i;29495:212::-;29537:3;29575:5;29569:12;29619:6;29612:4;29605:5;29601:16;29596:3;29590:36;29681:1;29645:16;;29670:13;;;-1:-1:-1;29645:16:73;;29495:212;-1:-1:-1;29495:212:73:o;29712:1099::-;30213:66;30208:3;30201:79;-1:-1:-1;;;30305:2:73;30300:3;30296:12;30289:30;30183:3;30338:39;30373:2;30368:3;30364:12;30356:6;30338:39;:::i;:::-;30397:66;30386:78;;30493:34;30488:2;30480:11;;30473:55;30557:34;30552:2;30544:11;;30537:55;-1:-1:-1;;;30616:2:73;30608:11;;30601:76;30699:39;30733:3;30725:12;;30717:6;30699:39;:::i;:::-;-1:-1:-1;;;30747:29:73;;30803:1;30792:13;;29712:1099;-1:-1:-1;;;;;29712:1099:73:o;30816:345::-;31068:31;31063:3;31056:44;31038:3;31116:39;31151:2;31146:3;31142:12;31134:6;31116:39;:::i;32189:789::-;32418:13;;-1:-1:-1;;;;;32458:35:73;;32440:54;;32557:10;32481:3;32536:19;;;32532:36;;32525:4;32510:20;;32503:66;32604:3;32600:19;;;32596:36;32649:4;32634:20;;7423:35;32388:3;32373:19;;;32664:85;32743:4;32732:9;32728:20;32721:4;32709:9;32704:3;32700:19;32696:30;32664:85;:::i;:::-;32758:69;32821:4;32810:9;32806:20;32799:4;32787:9;32782:3;32778:19;32774:30;652:13;645:21;633:34;;582:91;32758:69;32861:3;32857:19;;;32878:4;32853:30;32900:3;32885:19;;7893:29;32935:3;32931:19;;;32967:3;32952:19;;7893:29;32914:58;7849:75;33270:537;33509:2;33498:9;33491:21;33472:4;33535:44;33575:2;33564:9;33560:18;33552:6;33535:44;:::i;:::-;33627:9;33619:6;33615:22;33610:2;33599:9;33595:18;33588:50;33661:32;33686:6;33678;33661:32;:::i;:::-;33647:46;;33741:9;33733:6;33729:22;33724:2;33713:9;33709:18;33702:50;33769:32;33794:6;33786;33769:32;:::i;33812:190::-;33941:3;33966:30;33992:3;33984:6;33966:30;:::i;34007:245::-;34074:6;34127:2;34115:9;34106:7;34102:23;34098:32;34095:52;;;34143:1;34140;34133:12;34095:52;34175:9;34169:16;34194:28;34216:5;34194:28;:::i;34257:358::-;34458:2;34447:9;34440:21;34421:4;34496:6;34490:13;34539:2;34534;34523:9;34519:18;34512:30;34559:50;34605:2;34594:9;34590:18;34576:12;34559:50;:::i;34745:181::-;34826:1;34836:84;34850:9;34847:1;34844:16;34836:84;;;34916:1;34897:17;;;34890:28;34875:1;34868:9;34836:84;;34931:508;35032:2;35027:3;35024:11;35021:412;;;35069:10;35064:3;35061:19;35058:365;;;35121:5;35118:1;35111:16;35169:4;35166:1;35156:18;35234:2;35222:10;35218:19;35215:1;35211:27;35273:4;35261:10;35258:20;35255:45;;;-1:-1:-1;35297:1:73;35255:45;35317:92;35395:12;35389:2;35384:3;35380:12;35377:1;35373:20;35369:39;35354:12;35348:4;35344:23;35317:92;:::i;35615:1194::-;-1:-1:-1;;;;;35732:3:73;35729:27;35726:53;;;35759:18;;:::i;:::-;35788:93;35877:3;35837:38;35869:4;35863:11;35837:38;:::i;:::-;35831:4;35788:93;:::i;:::-;35907:1;35932:2;35927:3;35924:11;35949:1;35944:607;;;;36595:1;36612:3;36609:93;;;-1:-1:-1;36668:19:73;;;36655:33;36609:93;-1:-1:-1;;35572:1:73;35568:11;;;35564:24;35560:29;35550:40;35596:1;35592:11;;;35547:57;36715:78;;35917:886;;35944:607;34692:1;34685:14;;;34729:4;34716:18;;-1:-1:-1;;35980:17:73;;;36094:229;36108:7;36105:1;36102:14;36094:229;;;36197:19;;;36184:33;36169:49;;36304:4;36289:20;;;;36257:1;36245:14;;;;36124:12;36094:229;;;36098:3;36351;36342:7;36339:16;36336:159;;;36475:1;36471:6;36465:3;36459;36456:1;36452:11;36448:21;36444:34;36440:39;36427:9;36422:3;36418:19;36405:33;36401:79;36393:6;36386:95;36336:159;;;36538:1;36532:3;36529:1;36525:11;36521:19;36515:4;36508:33;35917:886;;35615:1194;;;:::o;36814:148::-;36902:4;36881:12;;;36895;;;36877:31;;36920:13;;36917:39;;;36936:18;;:::i;36967:157::-;36997:1;37031:4;37028:1;37024:12;37055:3;37045:37;;37062:18;;:::i;:::-;37114:3;37107:4;37104:1;37100:12;37096:22;37091:27;;;36967:157;;;;:::o;37129:151::-;37219:4;37212:12;;;37198;;;37194:31;;37237:14;;37234:40;;;37254:18;;:::i;37285:188::-;37323:3;37367:10;37360:5;37356:22;37402:10;37393:7;37390:23;37387:49;;37416:18;;:::i;37478:958::-;37628:3;37622:10;-1:-1:-1;;;;;37647:6:73;37644:30;37641:56;;;37677:18;;:::i;:::-;-1:-1:-1;;;37712:6:73;37709:32;37706:58;;;37744:18;;:::i;:::-;37793:3;37787:10;37818:6;37813:3;37806:19;37848:6;37840;37837:18;37834:204;;;37888:3;37885:1;37878:14;37948:6;37941:4;37938:1;37928:18;37924:31;37968:60;38020:6;38012;38008:19;37995:11;37968:60;:::i;:::-;;37834:204;;38070:4;38065:3;38061:14;38094:3;38091:1;38084:14;38132:4;38129:1;38119:18;38155:1;38165:265;38179:6;38176:1;38173:13;38165:265;;;38241:13;;-1:-1:-1;;;;;38307:31:73;38398:12;;;38391:29;38373:4;38361:17;;;;38335:1;38194:9;38165:265;;38728:484;-1:-1:-1;;;;;38959:32:73;;;38941:51;;39028:32;;39023:2;39008:18;;39001:60;39092:2;39077:18;;39070:34;;;39140:3;39135:2;39120:18;;39113:31;;;-1:-1:-1;;39161:45:73;;39186:19;;39178:6;39161:45;:::i;39217:249::-;39286:6;39339:2;39327:9;39318:7;39314:23;39310:32;39307:52;;;39355:1;39352;39345:12;39307:52;39387:9;39381:16;39406:30;39430:5;39406:30;:::i;39471:136::-;39510:3;39538:5;39528:39;;39547:18;;:::i;:::-;-1:-1:-1;;;39583:18:73;;39471:136::o;39612:342::-;39864:28;39859:3;39852:41;39834:3;39909:39;39944:2;39939:3;39935:12;39927:6;39909:39;:::i;39959:127::-;40020:10;40015:3;40011:20;40008:1;40001:31;40051:4;40048:1;40041:15;40075:4;40072:1;40065:15;40091:418;-1:-1:-1;;;;;;40304:31:73;;40292:44;;40274:3;40358:38;40393:1;40384:11;;40376:6;40358:38;:::i;:::-;40427:2;40423:15;;;;-1:-1:-1;;;;;;40419:53:73;40405:68;;-1:-1:-1;;40500:2:73;40489:14;;40091:418;-1:-1:-1;;40091:418:73:o","linkReferences":{},"immutableReferences":{"49312":[{"start":17808,"length":32}],"49314":[{"start":17843,"length":32}],"49316":[{"start":17923,"length":32}],"49318":[{"start":17961,"length":32}],"49320":[{"start":17775,"length":32}]}},"methodIdentifiers":{"SYSTEM_ADDRESS()":"3434735f","activate()":"0f15f4c0","allocateIssuance()":"355811a7","applyIncentives((address,uint256)[])":"0a36cdef","applySlashes((address,uint256)[])":"02ae337b","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","beginExit()":"2228dfa0","burn(address)":"89afcb44","cancelStakeVersionChange(address)":"0f4346fa","claimRefund()":"b5545a3c","claimStakeRewards(address)":"2b9f4985","claimableRefunds(address)":"43401a00","claimableRewards(address)":"dc01f60d","concludeEpoch(address[])":"7b55a300","delegateStake(bytes,(bytes),address,bytes,uint256)":"127ce8e8","delegationDigest(bytes,address,address,uint256)":"ad6cfb86","eip712Domain()":"84b0196e","epochInfo(uint256)":"3894228e","futureEpochInfo(uint256)":"59ca93b6","getApproved(uint256)":"081812fc","getBalanceBreakdown(address)":"15b5709a","getBlsPubkey(address)":"059b916c","getCommitteeBlsPubkeys(uint32)":"6ae9942c","getCommitteeValidators(uint32)":"a0201be5","getCurrentEpoch()":"b97dd9e2","getCurrentEpochInfo()":"babc394f","getCurrentStakeConfig()":"7d06fdf8","getCurrentStakeVersion()":"67398331","getEligibleValidatorCount()":"23a40430","getEpochInfo(uint32)":"374ed18c","getNextCommitteeSize()":"eb8535c2","getPendingVersionChanges()":"a7c5e701","getRewards(address)":"79ee54f7","getValidator(address)":"1904bb2e","getValidators(uint8)":"8cc05eda","getValidatorsInfo(uint8)":"2870259d","increaseNonce()":"c53a0292","isApprovedForAll(address,address)":"e985e9c5","isDelegated(address)":"3e28391d","isRetired(address)":"6d3c6275","isValidator(bytes)":"6a926591","issuance()":"863623bb","issuanceWithdrawal(uint256)":"0752e017","migrateValidatorSets()":"aaffd270","mint(address)":"6a627842","name()":"06fdde03","owner()":"8da5cb5b","ownerOf(uint256)":"6352211e","pause()":"8456cb59","paused()":"5c975abb","renounceOwnership()":"715018a6","requestStakeVersionChange(address,uint8)":"e5a22827","safeTransferFrom(address,address,uint256)":"42842e0e","safeTransferFrom(address,address,uint256,bytes)":"b88d4fde","setApprovalForAll(address,bool)":"a22cb465","setNextCommitteeSize(uint16)":"62fcde4b","setTopUpAuthorityRequired(bool)":"2a8e33d7","setValidatorRegion(address,uint8)":"f0624768","stake(bytes,(bytes))":"2fb0d025","stakeConfig(uint8)":"a71954ec","supportsInterface(bytes4)":"01ffc9a7","symbol()":"95d89b41","tokenByIndex(uint256)":"4f6ccce7","tokenOfOwnerByIndex(address,uint256)":"2f745c59","tokenURI(uint256)":"c87b56dd","topUpAuthorityRequired()":"58e88dbb","topUpSlashedStake(address)":"43201d30","totalSupply()":"18160ddd","transferFrom(address,address,uint256)":"23b872dd","transferOwnership(address)":"f2fde38b","undistributedIssuance()":"008d6acd","unpause()":"3f4ba83a","unstake(address,bool)":"f66a25a4","upgradeStakeVersion((uint256,uint256,uint256,uint32))":"c05df7ac","validators(address)":"fa52c7d8","versionChangeRequests(address)":"bd3e7594"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.35+commit.47b9dedd\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minWithdrawAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"epochIssuance\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"epochDuration\",\"type\":\"uint32\"}],\"internalType\":\"struct IStakeManager.StakeConfig\",\"name\":\"genesisConfig_\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"activationEpoch\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"exitEpoch\",\"type\":\"uint32\"},{\"internalType\":\"enum IConsensusRegistry.ValidatorStatus\",\"name\":\"currentStatus\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isRetired\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"stakeVersion\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"region\",\"type\":\"uint8\"}],\"internalType\":\"struct IConsensusRegistry.ValidatorInfo[]\",\"name\":\"initialValidators_\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[]\",\"name\":\"blsPubkeys_\",\"type\":\"bytes[]\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"struct IStakeManager.ProofOfPossession[]\",\"name\":\"proofsOfPossession\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"owner_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"}],\"name\":\"AlreadyDefined\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"}],\"name\":\"BlsPubkeyNotFound\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"}],\"name\":\"CommitteeRequirement\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"DelegationExpired\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DuplicateBLSPubkey\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ERC721EnumerableForbiddenBatchMint\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC721IncorrectOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ERC721InsufficientApproval\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC721InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"ERC721InvalidOperator\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC721InvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC721InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC721InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ERC721NonexistentToken\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"ERC721OutOfBoundsIndex\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EnforcedPause\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExpectedPause\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GenesisArityMismatch\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"activationEpoch\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"exitEpoch\",\"type\":\"uint32\"},{\"internalType\":\"enum IConsensusRegistry.ValidatorStatus\",\"name\":\"currentStatus\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isRetired\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"stakeVersion\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"region\",\"type\":\"uint8\"}],\"internalType\":\"struct IConsensusRegistry.ValidatorInfo\",\"name\":\"validator\",\"type\":\"tuple\"}],\"name\":\"IneligibleUnstake\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"available\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"required\",\"type\":\"uint256\"}],\"name\":\"InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"withdrawAmount\",\"type\":\"uint256\"}],\"name\":\"InsufficientRewards\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidBLSPubkey\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"minCommitteeSize\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"providedCommitteeSize\",\"type\":\"uint256\"}],\"name\":\"InvalidCommitteeSize\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"stakeVersion\",\"type\":\"uint8\"}],\"name\":\"InvalidDeficitAmount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"duration\",\"type\":\"uint32\"}],\"name\":\"InvalidDuration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"epoch\",\"type\":\"uint32\"}],\"name\":\"InvalidEpoch\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"struct IStakeManager.ProofOfPossession\",\"name\":\"proof\",\"type\":\"tuple\"}],\"name\":\"InvalidProofOfPossession\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"InvalidStakeAmount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"currentVersion\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"targetVersion\",\"type\":\"uint8\"}],\"name\":\"InvalidStakeVersion\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enum IConsensusRegistry.ValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidSupply\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"InvalidTokenId\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidValidatorAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IssuanceTransferFailed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"err\",\"type\":\"bytes\"}],\"name\":\"LowLevelCallFailure\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoClaimableRefund\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoPendingVersionChange\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"NotRecipient\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotTransferable\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"}],\"name\":\"NotValidator\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"invalidCaller\",\"type\":\"address\"}],\"name\":\"OnlySystemCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Reentrancy\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RequiresConsensusNFT\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"stakeVersion\",\"type\":\"uint8\"}],\"name\":\"StakeNotSlashed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"StringsInsufficientHexLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TopUpAuthorityRequired\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"approved\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"DelegationNonceIncreased\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address[]\",\"name\":\"committee\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"epochIssuance\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"blockHeight\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"epochId\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"epochDuration\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"stakeVersion\",\"type\":\"uint8\"}],\"indexed\":false,\"internalType\":\"struct IConsensusRegistry.EpochInfo\",\"name\":\"epoch\",\"type\":\"tuple\"}],\"name\":\"NewEpoch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"oldSize\",\"type\":\"uint16\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"newSize\",\"type\":\"uint16\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"numActiveValidators\",\"type\":\"uint256\"}],\"name\":\"NextCommitteeSizeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"RefundClaimed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"RefundQueued\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"claimant\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rewards\",\"type\":\"uint256\"}],\"name\":\"RewardsClaimed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"minWithdrawAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"epochIssuance\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"epochDuration\",\"type\":\"uint32\"}],\"name\":\"StakeVersionAuthored\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"}],\"name\":\"StakeVersionChangeCanceled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"targetVersion\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"requestEpoch\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"escrow\",\"type\":\"uint256\"}],\"name\":\"StakeVersionChangeRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"required\",\"type\":\"bool\"}],\"name\":\"TopUpAuthorityRequirementUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"activationEpoch\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"exitEpoch\",\"type\":\"uint32\"},{\"internalType\":\"enum IConsensusRegistry.ValidatorStatus\",\"name\":\"currentStatus\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isRetired\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"stakeVersion\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"region\",\"type\":\"uint8\"}],\"indexed\":false,\"internalType\":\"struct IConsensusRegistry.ValidatorInfo\",\"name\":\"validator\",\"type\":\"tuple\"}],\"name\":\"ValidatorActivated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"activationEpoch\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"exitEpoch\",\"type\":\"uint32\"},{\"internalType\":\"enum IConsensusRegistry.ValidatorStatus\",\"name\":\"currentStatus\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isRetired\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"stakeVersion\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"region\",\"type\":\"uint8\"}],\"indexed\":false,\"internalType\":\"struct IConsensusRegistry.ValidatorInfo\",\"name\":\"validator\",\"type\":\"tuple\"}],\"name\":\"ValidatorExited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"activationEpoch\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"exitEpoch\",\"type\":\"uint32\"},{\"internalType\":\"enum IConsensusRegistry.ValidatorStatus\",\"name\":\"currentStatus\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isRetired\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"stakeVersion\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"region\",\"type\":\"uint8\"}],\"indexed\":false,\"internalType\":\"struct IConsensusRegistry.ValidatorInfo\",\"name\":\"validator\",\"type\":\"tuple\"}],\"name\":\"ValidatorPendingActivation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"activationEpoch\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"exitEpoch\",\"type\":\"uint32\"},{\"internalType\":\"enum IConsensusRegistry.ValidatorStatus\",\"name\":\"currentStatus\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isRetired\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"stakeVersion\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"region\",\"type\":\"uint8\"}],\"indexed\":false,\"internalType\":\"struct IConsensusRegistry.ValidatorInfo\",\"name\":\"validator\",\"type\":\"tuple\"}],\"name\":\"ValidatorPendingExit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"region\",\"type\":\"uint8\"}],\"name\":\"ValidatorRegionUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"activationEpoch\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"exitEpoch\",\"type\":\"uint32\"},{\"internalType\":\"enum IConsensusRegistry.ValidatorStatus\",\"name\":\"currentStatus\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isRetired\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"stakeVersion\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"region\",\"type\":\"uint8\"}],\"indexed\":false,\"internalType\":\"struct IConsensusRegistry.ValidatorInfo\",\"name\":\"validator\",\"type\":\"tuple\"}],\"name\":\"ValidatorRetired\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"eligibleValidatorCount\",\"type\":\"uint256\"}],\"name\":\"ValidatorSetsMigrated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"struct Slash\",\"name\":\"slash\",\"type\":\"tuple\"}],\"name\":\"ValidatorSlashed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ValidatorStakeToppedUp\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"oldVersion\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"newVersion\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldStakeAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newStakeAmount\",\"type\":\"uint256\"}],\"name\":\"ValidatorStakeVersionUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"activationEpoch\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"exitEpoch\",\"type\":\"uint32\"},{\"internalType\":\"enum IConsensusRegistry.ValidatorStatus\",\"name\":\"currentStatus\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isRetired\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"stakeVersion\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"region\",\"type\":\"uint8\"}],\"indexed\":false,\"internalType\":\"struct IConsensusRegistry.ValidatorInfo\",\"name\":\"validator\",\"type\":\"tuple\"}],\"name\":\"ValidatorStaked\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"SYSTEM_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"activate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"allocateIssuance\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"consensusHeaderCount\",\"type\":\"uint256\"}],\"internalType\":\"struct RewardInfo[]\",\"name\":\"rewardInfos\",\"type\":\"tuple[]\"}],\"name\":\"applyIncentives\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"struct Slash[]\",\"name\":\"slashes\",\"type\":\"tuple[]\"}],\"name\":\"applySlashes\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"beginExit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"}],\"name\":\"cancelStakeVersionChange\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"claimRefund\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"}],\"name\":\"claimStakeRewards\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"claimableRefunds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"claimableRewards\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"newCommittee\",\"type\":\"address[]\"}],\"name\":\"concludeEpoch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"blsPubkey\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"struct IStakeManager.ProofOfPossession\",\"name\":\"proofOfPossession\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"validatorEIP712Signature\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"delegateStake\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"blsPubkey\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"delegationDigest\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"eip712Domain\",\"outputs\":[{\"internalType\":\"bytes1\",\"name\":\"fields\",\"type\":\"bytes1\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"verifyingContract\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"extensions\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"epochInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"epochIssuance\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"blockHeight\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"epochId\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"epochDuration\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"stakeVersion\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"futureEpochInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"epochIssuance\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"blockHeight\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"epochId\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"epochDuration\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"stakeVersion\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"}],\"name\":\"getBalanceBreakdown\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"}],\"name\":\"getBlsPubkey\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"epoch\",\"type\":\"uint32\"}],\"name\":\"getCommitteeBlsPubkeys\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"\",\"type\":\"bytes[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"epoch\",\"type\":\"uint32\"}],\"name\":\"getCommitteeValidators\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"activationEpoch\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"exitEpoch\",\"type\":\"uint32\"},{\"internalType\":\"enum IConsensusRegistry.ValidatorStatus\",\"name\":\"currentStatus\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isRetired\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"stakeVersion\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"region\",\"type\":\"uint8\"}],\"internalType\":\"struct IConsensusRegistry.ValidatorInfo[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCurrentEpoch\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCurrentEpochInfo\",\"outputs\":[{\"components\":[{\"internalType\":\"address[]\",\"name\":\"committee\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"epochIssuance\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"blockHeight\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"epochId\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"epochDuration\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"stakeVersion\",\"type\":\"uint8\"}],\"internalType\":\"struct IConsensusRegistry.EpochInfo\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCurrentStakeConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minWithdrawAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"epochIssuance\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"epochDuration\",\"type\":\"uint32\"}],\"internalType\":\"struct IStakeManager.StakeConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCurrentStakeVersion\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getEligibleValidatorCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"epoch\",\"type\":\"uint32\"}],\"name\":\"getEpochInfo\",\"outputs\":[{\"components\":[{\"internalType\":\"address[]\",\"name\":\"committee\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"epochIssuance\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"blockHeight\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"epochId\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"epochDuration\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"stakeVersion\",\"type\":\"uint8\"}],\"internalType\":\"struct IConsensusRegistry.EpochInfo\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNextCommitteeSize\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPendingVersionChanges\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"}],\"name\":\"getRewards\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"activationEpoch\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"exitEpoch\",\"type\":\"uint32\"},{\"internalType\":\"enum IConsensusRegistry.ValidatorStatus\",\"name\":\"currentStatus\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isRetired\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"stakeVersion\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"region\",\"type\":\"uint8\"}],\"internalType\":\"struct IConsensusRegistry.ValidatorInfo\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum IConsensusRegistry.ValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"getValidators\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum IConsensusRegistry.ValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"getValidatorsInfo\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"activationEpoch\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"exitEpoch\",\"type\":\"uint32\"},{\"internalType\":\"enum IConsensusRegistry.ValidatorStatus\",\"name\":\"currentStatus\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isRetired\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"stakeVersion\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"region\",\"type\":\"uint8\"}],\"internalType\":\"struct IConsensusRegistry.ValidatorInfo[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"increaseNonce\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"}],\"name\":\"isDelegated\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"}],\"name\":\"isRetired\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"blsPubkey\",\"type\":\"bytes\"}],\"name\":\"isValidator\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"issuance\",\"outputs\":[{\"internalType\":\"address payable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"issuanceWithdrawal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"migrateValidatorSets\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"targetVersion\",\"type\":\"uint8\"}],\"name\":\"requestStakeVersionChange\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"newSize\",\"type\":\"uint16\"}],\"name\":\"setNextCommitteeSize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"required\",\"type\":\"bool\"}],\"name\":\"setTopUpAuthorityRequired\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"region\",\"type\":\"uint8\"}],\"name\":\"setValidatorRegion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"blsPubkey\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"struct IStakeManager.ProofOfPossession\",\"name\":\"proofOfPossession\",\"type\":\"tuple\"}],\"name\":\"stake\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"stakeConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minWithdrawAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"epochIssuance\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"epochDuration\",\"type\":\"uint32\"}],\"internalType\":\"struct IStakeManager.StakeConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"tokenByIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"tokenOfOwnerByIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"tokenURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"topUpAuthorityRequired\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"}],\"name\":\"topUpSlashedStake\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"undistributedIssuance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"acceptRewardShortfall\",\"type\":\"bool\"}],\"name\":\"unstake\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minWithdrawAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"epochIssuance\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"epochDuration\",\"type\":\"uint32\"}],\"internalType\":\"struct IStakeManager.StakeConfig\",\"name\":\"newConfig\",\"type\":\"tuple\"}],\"name\":\"upgradeStakeVersion\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"validators\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"activationEpoch\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"exitEpoch\",\"type\":\"uint32\"},{\"internalType\":\"enum IConsensusRegistry.ValidatorStatus\",\"name\":\"currentStatus\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isRetired\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"stakeVersion\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"region\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"versionChangeRequests\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"targetVersion\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"requestEpoch\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"funder\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"escrow\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Telcoin AssociationHuwonk\",\"details\":\"This contract should be deployed to a predefined system address for use with system calls\",\"errors\":{\"AlreadyDefined(address)\":[{\"params\":{\"validatorAddress\":\"The address that was already defined\"}}],\"BlsPubkeyNotFound(address)\":[{\"details\":\"Covers both the zero-address case and addresses that have never staked (or have been burned/retired and had their pubkey state cleared)\",\"params\":{\"validatorAddress\":\"The address whose BLS pubkey lookup failed\"}}],\"CommitteeRequirement(address)\":[{\"params\":{\"validatorAddress\":\"The address at which the sort invariant was violated\"}}],\"DelegationExpired(uint256)\":[{\"params\":{\"deadline\":\"The unix timestamp past which the signature is no longer valid\"}}],\"ERC721EnumerableForbiddenBatchMint()\":[{\"details\":\"Batch mint is not allowed.\"}],\"ERC721IncorrectOwner(address,uint256,address)\":[{\"details\":\"Indicates an error related to the ownership over a particular token. Used in transfers.\",\"params\":{\"owner\":\"Address of the current owner of a token.\",\"sender\":\"Address whose tokens are being transferred.\",\"tokenId\":\"Identifier number of a token.\"}}],\"ERC721InsufficientApproval(address,uint256)\":[{\"details\":\"Indicates a failure with the `operator`\\u2019s approval. Used in transfers.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\",\"tokenId\":\"Identifier number of a token.\"}}],\"ERC721InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC721InvalidOperator(address)\":[{\"details\":\"Indicates a failure with the `operator` to be approved. Used in approvals.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC721InvalidOwner(address)\":[{\"details\":\"Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-20. Used in balance queries.\",\"params\":{\"owner\":\"Address of the current owner of a token.\"}}],\"ERC721InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC721InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC721NonexistentToken(uint256)\":[{\"details\":\"Indicates a `tokenId` whose `owner` is the zero address.\",\"params\":{\"tokenId\":\"Identifier number of a token.\"}}],\"ERC721OutOfBoundsIndex(address,uint256)\":[{\"details\":\"An `owner`'s token query was out of bounds for `index`. NOTE: The owner being `address(0)` indicates a global out of bounds index.\"}],\"EnforcedPause()\":[{\"details\":\"The operation failed because the contract is paused.\"}],\"ExpectedPause()\":[{\"details\":\"The operation failed because the contract is not paused.\"}],\"IneligibleUnstake((address,uint32,uint32,uint8,bool,uint8,uint8))\":[{\"details\":\"Validators may unstake only if Staked (pre-activation) or Exited with at least one full epoch elapsed\",\"params\":{\"validator\":\"The full ValidatorInfo of the ineligible validator\"}}],\"InsufficientRewards(uint256)\":[{\"params\":{\"withdrawAmount\":\"The reward amount that was insufficient\"}}],\"InvalidCommitteeSize(uint256,uint256)\":[{\"params\":{\"minCommitteeSize\":\"The minimum acceptable committee size\",\"providedCommitteeSize\":\"The committee size that was rejected\"}}],\"InvalidDeficitAmount(address,uint256,uint8)\":[{\"params\":{\"stakeVersion\":\"The validator's stake version defining the required stake amount\",\"validatorAddress\":\"The validator being topped up\",\"value\":\"The `msg.value` that was provided\"}}],\"InvalidDuration(uint32)\":[{\"params\":{\"duration\":\"The invalid duration value\"}}],\"InvalidEpoch(uint32)\":[{\"params\":{\"epoch\":\"The epoch number that was rejected\"}}],\"InvalidProofOfPossession((bytes))\":[{\"params\":{\"proof\":\"The proof of possession that failed verification\"}}],\"InvalidStakeAmount(uint256)\":[{\"params\":{\"stakeAmount\":\"The invalid stake value that was provided\"}}],\"InvalidStakeVersion(uint8,uint8)\":[{\"details\":\"Target version must be strictly greater than current and not exceed global `stakeVersion`\",\"params\":{\"currentVersion\":\"The validator's current stake version\",\"targetVersion\":\"The requested target version that was rejected\"}}],\"InvalidStatus(uint8)\":[{\"params\":{\"status\":\"The validator's actual status that caused the revert\"}}],\"InvalidTokenId(uint256)\":[{\"params\":{\"tokenId\":\"The invalid token ID\"}}],\"NotRecipient(address)\":[{\"params\":{\"recipient\":\"The expected reward recipient (delegator if delegated, else the validator)\"}}],\"NotValidator(address)\":[{\"params\":{\"validatorAddress\":\"The validator whose signature was invalid\"}}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"Reentrancy()\":[{\"details\":\"Unauthorized reentrant call.\"}],\"StakeNotSlashed(address,uint256,uint8)\":[{\"params\":{\"balance\":\"The validator's current outstanding balance\",\"stakeVersion\":\"The validator's stake version defining the required stake amount\",\"validatorAddress\":\"The validator that is not slashed\"}}],\"StringsInsufficientHexLength(uint256,uint256)\":[{\"details\":\"The `value` string doesn't fit in the specified `length`.\"}]},\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when `owner` enables `approved` to manage the `tokenId` token.\"},\"ApprovalForAll(address,address,bool)\":{\"details\":\"Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\"},\"DelegationNonceIncreased(address,uint64)\":{\"params\":{\"nonce\":\"The new delegation nonce\",\"validatorAddress\":\"The validator whose delegation nonce advanced\"}},\"NewEpoch((address[],uint256,uint64,uint32,uint32,uint8))\":{\"params\":{\"epoch\":\"The new epoch's full configuration including committee and block height\"}},\"NextCommitteeSizeUpdated(uint16,uint16,uint256)\":{\"params\":{\"newSize\":\"The updated nextCommitteeSize value\",\"numActiveValidators\":\"The current count of committee-eligible validators\",\"oldSize\":\"The previous nextCommitteeSize value\"}},\"Paused(address)\":{\"details\":\"Emitted when the pause is triggered by `account`.\"},\"RefundClaimed(address,uint256)\":{\"params\":{\"amount\":\"The amount transferred\",\"recipient\":\"The address that received its credit\"}},\"RefundQueued(address,uint256)\":{\"params\":{\"amount\":\"The amount added to the recipient's credit\",\"recipient\":\"The address holding the claimable credit\"}},\"RewardsClaimed(address,uint256)\":{\"params\":{\"claimant\":\"The address that received the funds (validator or its delegator)\",\"rewards\":\"The amount of TEL claimed\"}},\"StakeVersionAuthored(uint8,uint256,uint256,uint256,uint32)\":{\"params\":{\"epochDuration\":\"The version's epoch duration\",\"epochIssuance\":\"The version's total TEL distributed as rewards per epoch\",\"minWithdrawAmount\":\"The version's minimum reward threshold for claims\",\"stakeAmount\":\"The version's required native TEL stake per validator\",\"version\":\"The newly authored version index (the new global `stakeVersion`)\"}},\"StakeVersionChangeCanceled(address)\":{\"params\":{\"validatorAddress\":\"The validator whose pending change was cancelled\"}},\"StakeVersionChangeRequested(address,uint8,uint32,uint256)\":{\"params\":{\"escrow\":\"The exact stake deficit escrowed for an increase; zero otherwise\",\"requestEpoch\":\"The epoch in which the request was recorded\",\"targetVersion\":\"The version to adopt at the boundary flip\",\"validatorAddress\":\"The validator whose version change was requested\"}},\"TopUpAuthorityRequirementUpdated(bool)\":{\"params\":{\"required\":\"The new value of the `topUpAuthorityRequired` flag\"}},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `tokenId` token is transferred from `from` to `to`.\"},\"Unpaused(address)\":{\"details\":\"Emitted when the pause is lifted by `account`.\"},\"ValidatorActivated((address,uint32,uint32,uint8,bool,uint8,uint8))\":{\"params\":{\"validator\":\"The newly activated validator's info\"}},\"ValidatorExited((address,uint32,uint32,uint8,bool,uint8,uint8))\":{\"params\":{\"validator\":\"The exited validator's info\"}},\"ValidatorPendingActivation((address,uint32,uint32,uint8,bool,uint8,uint8))\":{\"details\":\"Activation completes automatically at the start of the next epoch\",\"params\":{\"validator\":\"The validator entering PendingActivation status\"}},\"ValidatorPendingExit((address,uint32,uint32,uint8,bool,uint8,uint8))\":{\"details\":\"Exit completes when the validator is no longer required in any future committee\",\"params\":{\"validator\":\"The validator entering PendingExit status\"}},\"ValidatorRegionUpdated(address,uint8)\":{\"params\":{\"region\":\"The new geographic region identifier\",\"validatorAddress\":\"The validator whose region was updated\"}},\"ValidatorRetired((address,uint32,uint32,uint8,bool,uint8,uint8))\":{\"params\":{\"validator\":\"The retired validator's info\"}},\"ValidatorSetsMigrated(uint256)\":{\"params\":{\"eligibleValidatorCount\":\"The committee-eligible count after the back-fill\"}},\"ValidatorSlashed((address,uint256))\":{\"details\":\"If the slash reduces the balance to zero, the validator is forcibly ejected and retired\",\"params\":{\"slash\":\"The slash details including validator address and penalty amount\"}},\"ValidatorStakeToppedUp(address,uint256)\":{\"params\":{\"amount\":\"The deficit that was provided and consolidated on the Issuance contract\",\"validatorAddress\":\"The validator whose stake was topped up\"}},\"ValidatorStakeVersionUpgraded(address,uint8,uint8,uint256,uint256)\":{\"params\":{\"newStakeAmount\":\"The stakeAmount associated with the new version\",\"newVersion\":\"The validator's new stake version\",\"oldStakeAmount\":\"The stakeAmount associated with the old version\",\"oldVersion\":\"The validator's previous stake version\",\"validatorAddress\":\"The validator whose stake version was upgraded\"}},\"ValidatorStaked((address,uint32,uint32,uint8,bool,uint8,uint8))\":{\"params\":{\"validator\":\"The newly staked validator's info\"}}},\"kind\":\"dev\",\"methods\":{\"activate()\":{\"details\":\"Self-activation function for validators, gaining `PendingActivation` status and setting next epoch as activation epoch to ensure rewards eligibility only after completing a full epoch\"},\"allocateIssuance()\":{\"details\":\"Permissioned function to allocate TEL for epoch issuance, ie consensus block rewards\"},\"applyIncentives((address,uint256)[])\":{\"details\":\"First boundary system call in the closing block: runs before `applySlashes` so weights reflect pre-slash collateral, and before `concludeEpoch` so weights reflect the versions active during the closing epoch. Entries with sentinel addresses (token ids 0 and type(uint160).max) or retired validators are skipped rather than reverting, so a malformed entry cannot stall the boundary. Issuance distribution is not yet enabled during the pilot; the protocol passes an empty array\"},\"applySlashes((address,uint256)[])\":{\"details\":\"Second boundary system call in the closing block: MUST run before `concludeEpoch` so slashes land on the full old-version collateral ahead of the version-queue settlement, and so the protocol's post-slash committee reads see any ejections. Entries with sentinel addresses or retired validators are skipped rather than reverting. Slashing is not yet enabled during the pilot; the protocol passes an empty array\"},\"balanceOf(address)\":{\"details\":\"See {IERC721-balanceOf}.\"},\"beginExit()\":{\"details\":\"Issues an exit request for a validator to be retired from the `Active` validator set\"},\"burn(address)\":{\"details\":\"In the case of malicious or erroneous node operator behavior, governance can use this function to burn a validator's `ConsensusNFT` and immediately eject from consensus committees if applicableIntended for sparing use; only reverts if burning results in empty committee\",\"params\":{\"from\":\"Refers to the struct member `ValidatorInfo.validatorAddress` in `IConsensusRegistry`\"}},\"cancelStakeVersionChange(address)\":{\"details\":\"Withdraws a pending stake version change without settling it, returning any escrow to its funder\",\"params\":{\"validatorAddress\":\"The validator whose pending change should be cancelled\"}},\"claimRefund()\":{\"details\":\"Transfers the caller's accumulated refund credit\"},\"claimStakeRewards(address)\":{\"details\":\"Used by rewardees to claim staking rewards\"},\"concludeEpoch(address[])\":{\"details\":\"The protocol sequences the closing block as `applyIncentives`, then `applySlashes`, then this call. That ordering is a security invariant: it lets the protocol assemble `newCommittee` and read `nextCommitteeSize` after slash-to-zero ejections have landed (so this call's committee checks cannot revert against a stale pre-slash view, and an ejected validator is never seated in a future committee), and it makes the version-queue settlement here read post-slash balances. Settlement refunds accrue as `claimRefund` credits rather than transfers, so this call performs no external calls beyond the trusted Issuance consolidation and its cost is storage-bounded regardless of recipient behavior.\",\"params\":{\"newCommittee\":\"The future validator committee for `$.currentEpoch + 3`\"}},\"constructor\":{\"details\":\"Stake for `initialValidators_` is allocated directly to the ConsensusRegistry balance and decremented directly from the TEL precompile within the protocol on the rust sideOnly governance delegation is enabled at genesis\",\"params\":{\"initialValidators_\":\"The initial validator set running Telcoin Network; these validators will comprise the voter committee for the first three epochs, ie `epochInfo[0:2]`\"}},\"delegateStake(bytes,(bytes),address,bytes,uint256)\":{\"details\":\"Accepts delegated stake from a non-validator caller authorized by a validator's EIP712 signature\",\"params\":{\"deadline\":\"Unix timestamp past which `validatorSig` is rejected (ignored for governance calls)\"}},\"delegationDigest(bytes,address,address,uint256)\":{\"params\":{\"deadline\":\"Unix timestamp past which the produced signature must be rejected\"},\"returns\":{\"_0\":\"_ EIP-712 typed struct hash used to enable delegated proof of stake\"}},\"eip712Domain()\":{\"details\":\"See: https://eips.ethereum.org/EIPS/eip-5267\"},\"getApproved(uint256)\":{\"details\":\"See {IERC721-getApproved}.\"},\"getBalanceBreakdown(address)\":{\"details\":\"Returns staking information for the given address\"},\"getBlsPubkey(address)\":{\"details\":\"Fetches the BLS pubkey for a given validator address\"},\"getCommitteeBlsPubkeys(uint32)\":{\"details\":\"Fetches the BLS pubkeys for the committee of a given epoch\"},\"getCommitteeValidators(uint32)\":{\"details\":\"Fetches the committee for a given epoch\"},\"getCurrentEpoch()\":{\"details\":\"Returns the current epoch\"},\"getCurrentEpochInfo()\":{\"details\":\"Returns the current epoch's committee and block height\"},\"getCurrentStakeConfig()\":{\"details\":\"Returns the latest authored stake configuration, which becomes active at the next epoch start\"},\"getCurrentStakeVersion()\":{\"details\":\"Returns the stake version active for the current epoch, ie the version stamped into the epoch's info at its start\"},\"getEpochInfo(uint32)\":{\"details\":\"Returns information about the provided epoch. Only four latest & two future epochs are stored\"},\"getRewards(address)\":{\"details\":\"Fetches the claimable rewards accrued for a given validator address\",\"returns\":{\"_0\":\"_ The validator's claimable rewards, not including the validator's stake\"}},\"getValidator(address)\":{\"details\":\"Fetches the `ValidatorInfo` for a given `validatorAddress == ConsensusNFT tokenId`\"},\"getValidators(uint8)\":{\"details\":\"Returns the addresses of validators in exactly the provided status's set, in the set's current order. Reverts on `Undefined` and `Any` (neither maintains a set).\"},\"getValidatorsInfo(uint8)\":{\"details\":\"Like `getValidators`, but returns the full `ValidatorInfo` for each validator in the set.\"},\"increaseNonce()\":{\"details\":\"Caller must hold a ConsensusNFT; lets a validator revoke a delegation it authorized but no longer wants honored\"},\"isApprovedForAll(address,address)\":{\"details\":\"See {IERC721-isApprovedForAll}.\"},\"isDelegated(address)\":{\"details\":\"Returns whether a validator's stake was delegated (ie has a delegator)\"},\"isRetired(address)\":{\"details\":\"Returns whether a validator is exited && unstaked, ie \\\"retired\\\"\"},\"isValidator(bytes)\":{\"details\":\"Check if a BLS public key corresponds to an active validator\",\"params\":{\"blsPubkey\":\"The compressed 96-byte BLS public key to check\"},\"returns\":{\"_0\":\"bool True if the validator exists and is not retired, false otherwise\"}},\"issuanceWithdrawal(uint256)\":{\"details\":\"Permissioned function to withdraw TEL from the Issuance contract to the caller\",\"params\":{\"amount\":\"The amount of TEL to withdraw from the Issuance contract\"}},\"migrateValidatorSets()\":{\"details\":\"The storage layout is a clean append (the sets were appended after the pre-existing variables), so `validators[*]` and the ConsensusNFTs survive the code swap untouched; only `validatorSets` / `eligibleValidatorCount` start empty and must be rebuilt before the new read paths (`getValidators` / `getValidatorsInfo` / `concludeEpoch`) work. Walks the ConsensusNFT enumeration and re-derives each set from `currentStatus` (the preserved source of truth), mirroring `_setStatus`: retired, `Undefined`, and `Any` validators carry no set and are skipped. Idempotent - set adds dedupe and the count is recomputed from scratch - so a redundant call (or a call against a freshly seeded genesis) is a no-op. System-gated so the protocol invokes it once during the fork that swaps in this implementation.\"},\"mint(address)\":{\"details\":\"The StakeManager's ERC721 ledger serves a permissioning role over validators, requiring Telcoin governance to approve each node operator and manually issue them a `ConsensusNFT`\",\"params\":{\"to\":\"Refers to the struct member `ValidatorInfo.validatorAddress` in `IConsensusRegistry`\"}},\"name()\":{\"details\":\"See {IERC721Metadata-name}.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"ownerOf(uint256)\":{\"details\":\"See {IERC721-ownerOf}.\"},\"pause()\":{\"details\":\"Emergency function to pause validator and stake management\"},\"paused()\":{\"details\":\"Returns true if the contract is paused, and false otherwise.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"requestStakeVersionChange(address,uint8)\":{\"details\":\"Requests a stake version change for a validator; callable by the validator or its delegator. Only callable for validators with status Staked, PendingActivation, or Active.\",\"params\":{\"targetVersion\":\"The version to adopt (must be strictly greater than current and not exceed the latest authored version)\",\"validatorAddress\":\"The validator whose stake version should change\"}},\"safeTransferFrom(address,address,uint256)\":{\"details\":\"See {IERC721-safeTransferFrom}.\"},\"safeTransferFrom(address,address,uint256,bytes)\":{\"details\":\"See {IERC721-safeTransferFrom}.\"},\"setNextCommitteeSize(uint16)\":{\"details\":\"This is managed off-chain and read by the protocol to shuffle n-validators for `concludeEpoch` call.\"},\"setTopUpAuthorityRequired(bool)\":{\"details\":\"Only callable by governance (owner)\"},\"setValidatorRegion(address,uint8)\":{\"params\":{\"region\":\"The GSMA region identifier (uint8; 0=unspecified, 1-8=GSMA regions)\",\"validatorAddress\":\"The address of the validator to update\"}},\"stake(bytes,(bytes))\":{\"details\":\"Accepts the native TEL stake amount from the calling validator, enabling later self-activation\"},\"stakeConfig(uint8)\":{\"details\":\"Returns the queried stake configuration\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"symbol()\":{\"details\":\"See {IERC721Metadata-symbol}.\"},\"tokenByIndex(uint256)\":{\"details\":\"See {IERC721Enumerable-tokenByIndex}.\"},\"tokenOfOwnerByIndex(address,uint256)\":{\"details\":\"See {IERC721Enumerable-tokenOfOwnerByIndex}.\"},\"topUpSlashedStake(address)\":{\"details\":\"`msg.value` must equal the exact deficit; it is consolidated on the Issuance contract since this contract retains the full stake-backed native TEL when slashes are appliedCallable by governance at any time; by the validator or its delegator only while `topUpAuthorityRequired` is false\",\"params\":{\"validatorAddress\":\"The slashed validator to top up; must be `Staked`, `PendingActivation`, or `Active`\"}},\"totalSupply()\":{\"details\":\"See {IERC721Enumerable-totalSupply}.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"unpause()\":{\"details\":\"Emergency function to unpause validator and stake management\"},\"unstake(address,bool)\":{\"details\":\"Returns previously staked funds in addition to accrued rewards, if any, to the staker\",\"params\":{\"acceptRewardShortfall\":\"When true, caps the rewards payout at the Issuance contract's available balance and permanently forfeits only the shortfall, so an underfunded reward pool can never block a stake withdrawal; identical to a normal unstake whenever Issuance can cover the rewards\"}},\"upgradeStakeVersion((uint256,uint256,uint256,uint32))\":{\"details\":\"Permissioned function to upgrade stake, withdrawal, and consensus block reward configurations\"}},\"stateVariables\":{\"EIP7702_DESIGNATOR_LENGTH\":{\"details\":\"Byte length of an EIP-7702 delegation designator: the 3-byte prefix plus an address\"},\"PENDING_EPOCH\":{\"details\":\"Signals a validator's pending status until activation/exit to correctly apply incentives\"},\"POP_INTENT_PREFIX\":{\"details\":\"The serialized telcoin proof-of-possession intent prefix (`scope=0, version=0, app=0`), which domain-separates PoP messages from other BLS signatures. Mirrors `Intent::telcoin(IntentScope::ProofOfPossession)` in tn-types; the off-chain `pop_message_layout_is_onchain_constructible` test pins it to `0x000000`.\"},\"REFUND_GAS_LIMIT\":{\"details\":\"Gas forwarded with settlement pushes initiated inside `concludeEpoch`. Covers an EOA receive or a multisig fallback-handler dispatch while bounding what a hostile recipient can consume inside the system call; failed pushes fall back to a `claimRefund` credit.\"},\"STAKE_DECREASE_DELAY_EPOCHS\":{\"details\":\"Boundaries a stake-decreasing version change must age before settling. The closing boundary's slashes always land before settlement regardless, so this covers only slashes whose detection lags the offense, by up to this many epochs. Must track the slashing pipeline's worst-case detection latency when programmatic slashing ships.\"},\"_COMMITTEE_TSET\":{\"details\":\"Namespace for the per-epoch transient committee-membership set (see `_markCommitteeMembers`)\"},\"claimableRefunds\":{\"details\":\"Refund credits keyed by recipient, detached from the validator lifecycle: escrow returns and boundary refunds that could not be pushed accumulate here until `claimRefund`\"},\"claimableRewards\":{\"details\":\"The Issuance-backed half of the credit ledger, keyed by recipient: the reward leg of a withdrawal whose push failed. Held separately from `claimableRefunds` because the two are backed by different contracts - stake by this one, rewards by Issuance - and `claimRefund` pays each from its own source. Appended at the storage tail to preserve every existing slot\"},\"eligibleValidatorCount\":{\"details\":\"Cached size of the committee-eligible union `{ PendingActivation, Active, PendingExit }`, kept in sync by `_setStatus` so the hot count path (`concludeEpoch` et al.) stays a single SLOAD rather than three set-length reads. Invariant-tested against the eligible set sizes.\"},\"pendingVersionChanges\":{\"details\":\"Queue of in-service stake version changes, settled automatically inside `concludeEpoch`. One entry per validator; `versionChangeRequests[addr].targetVersion == 0` means none pending. Appended at the storage tail: this contract's variables follow all inherited ones in the flattened layout, so growth here preserves every existing slot for in-place upgrades.\"},\"validatorSets\":{\"details\":\"Per-status index of validators, keyed by `ValidatorStatus`. `_setStatus` is the single point that mutates membership, keeping each set in lockstep with `validators[addr].currentStatus`. Only real statuses get members; `Undefined` and `Any` never do. Retiring removes a validator from its set (it should not appear in any status query, exactly as the old scan skipped `isRetired`), but its `validators[addr]` record is retained as a tombstone (`isRetired = true`) that blocks re-joining. Replaces the old O(n) `tokenByIndex` scan: per-status queries are now O(set).\"},\"versionChangeRequests\":{\"details\":\"The queue entries backing `pendingVersionChanges` membership\"}},\"title\":\"ConsensusRegistry\",\"version\":1},\"userdoc\":{\"errors\":{\"AlreadyDefined(address)\":[{\"notice\":\"Thrown when minting a ConsensusNFT for an address that already holds one or is retired\"}],\"BlsPubkeyNotFound(address)\":[{\"notice\":\"Thrown when no BLS public key is stored for the queried validator address\"}],\"CommitteeRequirement(address)\":[{\"notice\":\"Thrown when the committee array is not sorted in strictly ascending address order\"}],\"DelegationExpired(uint256)\":[{\"notice\":\"Thrown when a delegation signature is submitted after its signed deadline\"}],\"DuplicateBLSPubkey()\":[{\"notice\":\"Thrown when a BLS public key has already been registered to another validator\"}],\"GenesisArityMismatch()\":[{\"notice\":\"Thrown during genesis when initialValidators is empty or its length mismatches proofsOfPossession\"}],\"IneligibleUnstake((address,uint32,uint32,uint8,bool,uint8,uint8))\":[{\"notice\":\"Thrown when a validator attempts to unstake but is ineligible\"}],\"InsufficientRewards(uint256)\":[{\"notice\":\"Thrown when claimable rewards are zero or below the version's minWithdrawAmount\"}],\"InvalidBLSPubkey()\":[{\"notice\":\"Thrown when a registered BLS public key is not a well-formed 96-byte compressed G2 point\"}],\"InvalidCommitteeSize(uint256,uint256)\":[{\"notice\":\"Thrown when a committee size is zero or exceeds the number of eligible validators\"}],\"InvalidDeficitAmount(address,uint256,uint8)\":[{\"notice\":\"Thrown when a top-up's `msg.value` does not exactly match the validator's stake deficit\"}],\"InvalidDuration(uint32)\":[{\"notice\":\"Thrown in upgradeStakeVersion when the new epoch duration is zero\"}],\"InvalidEpoch(uint32)\":[{\"notice\":\"Thrown when a queried epoch is outside the stored range or genesis epoch values are nonzero\"}],\"InvalidProofOfPossession((bytes))\":[{\"notice\":\"Thrown when BLS proof-of-possession signature verification fails\"}],\"InvalidStakeAmount(uint256)\":[{\"notice\":\"Thrown when msg.value does not match the required stake amount for the operation\"}],\"InvalidStakeVersion(uint8,uint8)\":[{\"notice\":\"Thrown when a stake version upgrade targets an invalid version\"}],\"InvalidStatus(uint8)\":[{\"notice\":\"Thrown when a validator's current status does not match the required status for the operation\"}],\"InvalidSupply()\":[{\"notice\":\"Thrown when unstaking would reduce ConsensusNFT totalSupply to zero\"}],\"InvalidTokenId(uint256)\":[{\"notice\":\"Thrown when a token ID is zero, exceeds type(uint160).max, or does not exist\"}],\"InvalidValidatorAddress()\":[{\"notice\":\"Thrown during genesis initialization when a validator has address(0)\"}],\"IssuanceTransferFailed()\":[{\"notice\":\"Thrown when a low-level ETH transfer to the Issuance contract fails\"}],\"LowLevelCallFailure(bytes)\":[{\"notice\":\"Thrown when the BLS precompile staticcall fails or returns an unexpected payload\"}],\"NoClaimableRefund()\":[{\"notice\":\"Thrown when `claimRefund` is called by an address with no claimable refund credit\"}],\"NoPendingVersionChange()\":[{\"notice\":\"Thrown when cancelling a stake version change for a validator with none pending\"}],\"NotRecipient(address)\":[{\"notice\":\"Thrown when the caller is neither the validator nor its delegator\"}],\"NotTransferable()\":[{\"notice\":\"Thrown on transfer, approve, or setApprovalForAll because ConsensusNFTs are soulbound\"}],\"NotValidator(address)\":[{\"notice\":\"Thrown when a delegated-stake EIP-712 signature fails verification\"}],\"RequiresConsensusNFT()\":[{\"notice\":\"Thrown when the provided address does not own the expected ConsensusNFT\"}],\"StakeNotSlashed(address,uint256,uint8)\":[{\"notice\":\"Thrown on top-up attempts for a validator whose balance is not below its stake amount\"}],\"TopUpAuthorityRequired()\":[{\"notice\":\"Thrown when a top-up is attempted by a non-governance caller while top-ups are restricted to the governance top-up authority\"}]},\"events\":{\"DelegationNonceIncreased(address,uint64)\":{\"notice\":\"Emitted when a validator invalidates outstanding delegation signatures by bumping its nonce\"},\"NewEpoch((address[],uint256,uint64,uint32,uint32,uint8))\":{\"notice\":\"Emitted at epoch conclusion when a new epoch begins\"},\"NextCommitteeSizeUpdated(uint16,uint16,uint256)\":{\"notice\":\"Emitted when governance or the protocol adjusts the next epoch's committee size\"},\"RefundClaimed(address,uint256)\":{\"notice\":\"Emitted when an accumulated refund credit is claimed\"},\"RefundQueued(address,uint256)\":{\"notice\":\"Emitted when a refund or escrow return is credited for a later `claimRefund` pull: every boundary settlement refund, escrow returns on retirement, and user-initiated escrow returns whose push failed\"},\"RewardsClaimed(address,uint256)\":{\"notice\":\"Emitted when a stake originator claims accrued rewards or unstakes\"},\"StakeVersionAuthored(uint8,uint256,uint256,uint256,uint32)\":{\"notice\":\"Emitted when governance authors a new global stake-config version, which validators may subsequently adopt via per-validator version changes\"},\"StakeVersionChangeCanceled(address)\":{\"notice\":\"Emitted when a pending stake version change is withdrawn before settlement\"},\"StakeVersionChangeRequested(address,uint8,uint32,uint256)\":{\"notice\":\"Emitted when an in-service validator requests a stake version change, queued for automatic settlement inside `concludeEpoch`\"},\"TopUpAuthorityRequirementUpdated(bool)\":{\"notice\":\"Emitted when governance toggles whether `topUpSlashedStake` is restricted to the governance top-up authority\"},\"ValidatorActivated((address,uint32,uint32,uint8,bool,uint8,uint8))\":{\"notice\":\"Emitted when a validator's activation resolves at epoch conclusion or at genesis\"},\"ValidatorExited((address,uint32,uint32,uint8,bool,uint8,uint8))\":{\"notice\":\"Emitted when a pending-exit validator is removed from the active set by the protocol\"},\"ValidatorPendingActivation((address,uint32,uint32,uint8,bool,uint8,uint8))\":{\"notice\":\"Emitted when a staked validator self-activates, entering the activation queue\"},\"ValidatorPendingExit((address,uint32,uint32,uint8,bool,uint8,uint8))\":{\"notice\":\"Emitted when an active validator requests exit, entering the exit queue\"},\"ValidatorRegionUpdated(address,uint8)\":{\"notice\":\"Emitted when governance updates a validator's geographic region assignment\"},\"ValidatorRetired((address,uint32,uint32,uint8,bool,uint8,uint8))\":{\"notice\":\"Emitted when a validator is permanently retired and its address can never rejoin\"},\"ValidatorSetsMigrated(uint256)\":{\"notice\":\"Emitted once when `migrateValidatorSets` back-fills the per-status sets during an in-place upgrade from a deployment that predates them\"},\"ValidatorSlashed((address,uint256))\":{\"notice\":\"Emitted for each slash applied to a validator's outstanding balance\"},\"ValidatorStakeToppedUp(address,uint256)\":{\"notice\":\"Emitted when a slashed validator's balance is restored to its version's full stake amount\"},\"ValidatorStakeVersionUpgraded(address,uint8,uint8,uint256,uint256)\":{\"notice\":\"Emitted when a validator's stake version is upgraded in-place\"},\"ValidatorStaked((address,uint32,uint32,uint8,bool,uint8,uint8))\":{\"notice\":\"Emitted when a validator first stakes, entering the Staked lifecycle state\"}},\"kind\":\"user\",\"methods\":{\"activate()\":{\"notice\":\"Caller must own a ConsensusNFT and be `Staked` status, ie staked or delegated\"},\"allocateIssuance()\":{\"notice\":\"Allocated TEL leaves the Issuance contract only as staking issuance rewards or through a governance withdrawal via `issuanceWithdrawal`Only governance may allocate TEL in this manner\"},\"applyIncentives((address,uint256)[])\":{\"notice\":\"Distributes the closing epoch's issuance to stake originators, weighted by initial stake and consensus header count\"},\"applySlashes((address,uint256)[])\":{\"notice\":\"Applies the closing epoch's penalties to outstanding balances, ejecting validators slashed to zero\"},\"approve(address,uint256)\":{\"notice\":\"Wouldn't do anything because transfers are disabled but explicitly disallow anyway\"},\"beginExit()\":{\"notice\":\"Reverts if the exit queue is full, ie if active validator count would drop too low\"},\"cancelStakeVersionChange(address)\":{\"notice\":\"Callable by the validator or its delegator\"},\"claimRefund()\":{\"notice\":\"Credits accrue from boundary settlement refunds, escrow returns on retirement, and user-initiated escrow returns and withdrawal payouts whose push failed; they are detached from the validator lifecycle and survive burns and retirementA withdrawal payout credit carries a reward leg paid from Issuance. That leg is capped at Issuance's balance and any remainder stays credited, so a reward pool that has run dry defers part of a claim rather than blocking it\"},\"concludeEpoch(address[])\":{\"notice\":\"The final epoch-boundary system call: settles queued stake version changes and rotates the epoch, seating the provided future committee\"},\"delegateStake(bytes,(bytes),address,bytes,uint256)\":{\"notice\":\"`validatorAddress` must be a validator already in possession of a `ConsensusNFT`Ensuring `uncompressedPubkey` corresponds to `ValidatorInfo::blsPubkey` is better performed externally in Rust by the protocol due to EIP2537 precompile & EVM limitations so this contract does not perform any (un)compression checks`validatorSig` must come from the authority that owns the validator address itself. For an externally owned account that is its secp256k1 key, whether or not the account has attached an EIP-7702 delegation; a delegated wallet program is not accepted as a stand-in for the key. Only a genuine contract account authorizes through ERC-1271.\"},\"delegationDigest(bytes,address,address,uint256)\":{\"notice\":\"Returns the delegation digest that a validator should sign to accept a delegation\"},\"getBlsPubkey(address)\":{\"notice\":\"Reverts with `BlsPubkeyNotFound` if no pubkey is stored for `validatorAddress` (including the zero-address case)\"},\"getCurrentStakeConfig()\":{\"notice\":\"Not necessarily the epoch-active config: during any epoch in which governance has authored a new version, this differs from `stakeConfig(getCurrentStakeVersion())`\"},\"getCurrentStakeVersion()\":{\"notice\":\"Differs from `getCurrentStakeConfig` during any epoch in which governance has authored a new version, since newly authored versions activate at the next epoch start\"},\"getEligibleValidatorCount()\":{\"notice\":\"Number of committee-eligible validators: the unretired `{ PendingActivation, Active, PendingExit }` set. Derived O(1) from the per-status set sizes.\"},\"getEpochInfo(uint32)\":{\"notice\":\"For future epochs, the config fields (issuance, duration, stake version) are a projection from the latest authored configuration and can change until the epoch is stamped at its start; `blockHeight` is always 0 as it is not yet known\"},\"getNextCommitteeSize()\":{\"notice\":\"Returns the next committee size\"},\"getPendingVersionChanges()\":{\"notice\":\"Returns the validators with a queued stake version change, in set order\"},\"getValidators(uint8)\":{\"notice\":\"Per-status only: the `Active` query no longer folds in `PendingActivation`/`PendingExit`. The committee-eligible pool is the union of the `{ PendingActivation, Active, PendingExit }` queries; the protocol unions those three calls off-chain. `getEligibleValidatorCount()` returns that union's size on-chain.\"},\"increaseNonce()\":{\"notice\":\"Invalidates any outstanding delegation signature for the caller by advancing its nonce\"},\"isRetired(address)\":{\"notice\":\"After retiring, a validator's `tokenId == validatorAddress` cannot be reused\"},\"issuanceWithdrawal(uint256)\":{\"notice\":\"Only governance may withdraw in this manner, eg to recover consolidated slash funds or to reduce a prior issuance allocation\"},\"migrateValidatorSets()\":{\"notice\":\"One-time back-fill of the per-status validator sets, the cached eligible count, and the BLS pubkey reverse index for an in-place upgrade from a deployment that predates them.\"},\"mint(address)\":{\"notice\":\"For each mintee, `tokenId == uint160(to)`Access-gated in ConsensusRegistry to its owner, which is a Telcoin governance address\"},\"pause()\":{\"notice\":\"Does not pause system callable or ConsensusNFT fns. Only accessible by `owner`\"},\"requestStakeVersionChange(address,uint8)\":{\"notice\":\"`Staked` validators settle immediately: they are not in service, are never members of a committee, and can already reclaim their full stake at any time via `unstake`.In-service (PendingActivation/Active) validators are queued instead: the change is applied automatically inside `concludeEpoch` at an epoch boundary, after that boundary's slashes have landed, so no request or settlement timing can move value ahead of a slash. Stake increases settle at the first boundary; stake decreases settle only once `STAKE_DECREASE_DELAY_EPOCHS` further boundaries have passed, covering slashes whose detection lags the offense by up to that many epochs.If the new version requires more stake, `msg.value` must equal the exact deficit; it is escrowed in the queue entry (not in the stake balance) until the boundary flip.If the new version requires less stake, no value moves at request time. At settlement the surplus above the new stake amount, computed from the balance as it stands post-slash, is credited to the reward recipient for `claimRefund` withdrawal; the slashed remainder of the surplus is consolidated on Issuance.A repeat request overwrites the pending entry, returning any prior escrow to its funder and re-stamping the request epoch.If a validator has been slashed and has accrued rewards, settling a lower `stakeAmount` may zero claimable rewards since rewards are derived as `balance - stakeAmount`. The recipient still receives the correct total ETH via the refund. Validators should claim rewards before requesting if they have both accrued rewards and pending slashes.\"},\"setApprovalForAll(address,bool)\":{\"notice\":\"Wouldn't do anything because transfers are disabled but explicitly disallow anyway\"},\"setNextCommitteeSize(uint16)\":{\"notice\":\"Set the internal value for the nextCommitteeSize.Reverts if the newSize is larger than the number of active/pending validators.\"},\"setTopUpAuthorityRequired(bool)\":{\"notice\":\"Toggles whether `topUpSlashedStake` is restricted to the governance top-up authority\"},\"setValidatorRegion(address,uint8)\":{\"notice\":\"Sets the GSMA region identifier for a validator. Only callable by governance (owner).\"},\"stake(bytes,(bytes))\":{\"notice\":\"Caller must already have been issued a `ConsensusNFT` by Telcoin governanceEnsuring `uncompressedPubkey` corresponds to `ValidatorInfo::blsPubkey` is better performed externally in Rust by the protocol due to EIP2537 precompile & EVM limitations so this contract does not perform any (un)compression checks\"},\"tokenURI(uint256)\":{\"notice\":\"Read-only mechanism, not yet live\"},\"topUpAuthorityRequired()\":{\"notice\":\"When true, `topUpSlashedStake` is restricted to governance; when false, validators and their delegators may also restore their own slashed stake\"},\"topUpSlashedStake(address)\":{\"notice\":\"Restores a slashed validator's balance to its version's full stake amount\"},\"transferFrom(address,address,uint256)\":{\"notice\":\"Consensus NFTs are soulbound to validators and cannot be transferred unless burned\"},\"unpause()\":{\"notice\":\"Does not affect system callable or ConsensusNFT fns. Only accessible by `owner`\"},\"unstake(address,bool)\":{\"notice\":\"May be used to reverse validator onboarding pre-activation or permanently retire after full exitOnce unstaked and retired, validator addresses cannot be reusedThe payout is pushed with a bounded gas stipend and falls back to a `claimRefund` credit for the full amount if the recipient rejects it, so a recipient that becomes uncallable cannot strand the stake. The withdrawal settles and the validator retires either way\"},\"upgradeStakeVersion((uint256,uint256,uint256,uint32))\":{\"notice\":\"The new version takes effect in the next epoch\"}},\"notice\":\"A Telcoin ContractThis contract manages consensus validator external keys, staking, and committees\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/consensus/ConsensusRegistry.sol\":\"ConsensusRegistry\"},\"evmVersion\":\"prague\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@ensdomains/=lib/v4-core/node_modules/@ensdomains/\",\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/\",\":@uniswap/v4-core/=lib/v4-core/\",\":ds-test/=lib/v4-core/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-gas-snapshot/=lib/v4-periphery/lib/permit2/lib/forge-gas-snapshot/src/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/\",\":hardhat/=lib/v4-core/node_modules/hardhat/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/\",\":permit2/=lib/v4-periphery/lib/permit2/\",\":safe-contracts/=lib/safe-contracts/\",\":solady/=lib/solady/src/\",\":solmate/=lib/v4-core/lib/solmate/\",\":v4-core/=lib/v4-core/src/\",\":v4-periphery/=lib/v4-periphery/\"]},\"sources\":{\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x880da465c203cec76b10d72dbd87c80f387df4102274f23eea1f9c9b0918792b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://399594cd8bb0143bc9e55e0f1d071d0d8c850a394fb7a319d50edd55d9ed822b\",\"dweb:/ipfs/QmbPZzgtT6LEm9CMqWfagQFwETbV1ztpECBB1DtQHrKiRz\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC721/ERC721.sol\":{\"keccak256\":\"0x39ed367e54765186281efcfe83e47cf0ad62cc879f10e191360712507125f29a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c5ae6d85bd48cca8d6d2fcec8c63efd86f56f8a5832577a47e403ce0e65cb09\",\"dweb:/ipfs/QmUtcS8AbRSWhuc61puYet58os8FvSqm329ChoW8wwZXZk\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0x5dc63d1c6a12fe1b17793e1745877b2fcbe1964c3edfd0a482fac21ca8f18261\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6b7f97c5960a50fd1822cb298551ffc908e37b7893a68d6d08bce18a11cb0f11\",\"dweb:/ipfs/QmQQvxBytoY1eBt3pRQDmvH2hZ2yjhs12YqVfzGm7KSURq\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC721/IERC721Receiver.sol\":{\"keccak256\":\"0xb5afb8e8eebc4d1c6404df2f5e1e6d2c3d24fd01e5dfc855314951ecfaae462d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://78586466c424f076c6a2a551d848cfbe3f7c49e723830807598484a1047b3b34\",\"dweb:/ipfs/Qmb717ovcFxm7qgNKEShiV6M9SPR3v1qnNpAGH84D6w29p\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721Enumerable.sol\":{\"keccak256\":\"0x5191f783af281c75b7de0f1e3e36cdc6ac5cb2358d929584c4953fd02fa2b5eb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d3ca2689d95ba45e297e55c8f71112e3ccec701d0087cb5e1c6ecb1b9ce86f00\",\"dweb:/ipfs/QmNQ5xKxJpF9k7AahnmJYvg5XeGSYtRig2Lp2WHmWXyBze\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/IERC721Enumerable.sol\":{\"keccak256\":\"0x3d6954a93ac198a2ffa384fa58ccf18e7e235263e051a394328002eff4e073de\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1f58c799bd939d3951c94893e83ef86acd56989d1d7db7f9d180c515e29e28ff\",\"dweb:/ipfs/QmTgAxHAAys4kq9ZfU9YB24MWYoHLGAKSxnYUigPFrNW7g\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/IERC721Metadata.sol\":{\"keccak256\":\"0x37d1aaaa5a2908a09e9dcf56a26ddf762ecf295afb5964695937344fc6802ce1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ed0bfc1b92153c5000e50f4021367b931bbe96372ac6facec3c4961b72053d02\",\"dweb:/ipfs/Qmbwp8VDerjS5SV1quwHH1oMXxPQ93fzfLVqJ2RCqbowGE\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC721/utils/ERC721Utils.sol\":{\"keccak256\":\"0x40399695922383778f9f540a620bec475a2f8e0f08d41f0005682842e28a9855\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://746d295e403931aeb9d6065fd5a0871f43ab5459814a60623611e4b6641a09fd\",\"dweb:/ipfs/QmWrgT8YJrQ9FfD1o3YYArwo57e7MGdpFKuM74qJ4qE34E\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Base64.sol\":{\"keccak256\":\"0xbee2b819e1b4bf569ffc1b1b9d560b4abd6a589575f3093edaab9244de18a0c2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e478c0e9bbf3eb8cd3b7784f9b397603e34747f9ffd16571ed1d89ce102de389\",\"dweb:/ipfs/QmZ6zXpwy5xRxx9RkodJmDZSUTeEqPQUanAC5TUoYqW2VR\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Pausable.sol\":{\"keccak256\":\"0xb2e5f50762c27fb4b123e3619c3c02bdcba5e515309382e5bfb6f7d6486510bd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1a4b83328c98d518a2699c2cbe9e9b055e78aa57fa8639f1b88deb8b3750b5dc\",\"dweb:/ipfs/QmXdcYj5v7zQxXFPULShHkR5p4Wa2zYuupbHnFdV3cHYtc\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/SlotDerivation.sol\":{\"keccak256\":\"0x8447b57b63810fe2e367c09496a966f143ec0e825d71ddb9fce2506cff84b618\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://996cb48f793bf151555045b37138e36b3cdb31d6bc6552d3149285260be00cfb\",\"dweb:/ipfs/QmcLaTTMNVbkMx58xhkp6GeFt4V3GtSyupZuaKG3vYW2Zc\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Strings.sol\":{\"keccak256\":\"0x44f87e91783e88415bde66f1a63f6c7f0076f2d511548820407d5c95643ac56c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://13a51bc2b23827744dcf5bad10c69e72528cf015a6fe48c93632cdb2c0eb1251\",\"dweb:/ipfs/QmZwPA47Yqgje1qtkdEFEja8ntTahMStYzKf5q3JRnaR7d\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/TransientSlot.sol\":{\"keccak256\":\"0x9303ef5a2beb555e52ce56598de205ce07ca8988fc67d073687c06cb8fc973d1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8b2e48fb42844c25e6cb38e7cfa1d91dcdc054613fd10f608833dbc677acf889\",\"dweb:/ipfs/QmT4HQxbgpWA3fZnK4dY3eXHNCoyBvpvzNq5k7eSt5mR5t\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xddce8e17e3d3f9ed818b4f4c4478a8262aab8b11ed322f1bf5ed705bb4bd97fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8084aa71a4cc7d2980972412a88fe4f114869faea3fefa5436431644eb5c0287\",\"dweb:/ipfs/Qmbqfs5dRdPvHVKY8kTaeyc65NdqXRQwRK7h9s5UJEhD1p\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"keccak256\":\"0xa00be322d7db5786750ce0ac7e2f5b633ac30a5ed5fa1ced1e74acfc19acecea\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c84e822f87cbdc4082533b626667b6928715bb2b1e8e7eb96954cebb9e38c8d\",\"dweb:/ipfs/QmZmy9dgxLTerBAQDuuHqbL6EpgRxddqgv5KmwpXYVbKz1\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0xb1970fac7b64e6c09611e6691791e848d5e3fe410fa5899e7df2e0afd77a99e3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://db5fbb3dddd8b7047465b62575d96231ba8a2774d37fb4737fbf23340fabbb03\",\"dweb:/ipfs/QmVUSvooZKEdEdap619tcJjTLcAuH6QBdZqAzWwnAXZAWJ\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol\":{\"keccak256\":\"0x9b161e97b8967d4bc0c08d25741889a30692cdda4b71910bf1b0e315f1962212\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://821500c39d095eaa25b06f46e65f1d0e97c4c96b39227f79077dee7d9e84051f\",\"dweb:/ipfs/QmSTeGorKzSWF6HAmxo32uCZiEuKNvreQdUiX1AaYtUMTz\"]},\"lib/solady/src/utils/ECDSA.sol\":{\"keccak256\":\"0xb0754260daabfe6f20dd16f2213823f27c8df1089b43c8eda9b3c2a6eca07478\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ffef4ca363ec0e2437b5e195fbb3d58bdc6750921fce32f351ca1c092ad36a75\",\"dweb:/ipfs/QmTcnAyxwvQg3h357PdB8S8oz5bBt85J4SvEgmMqwAfPKF\"]},\"lib/solady/src/utils/EIP712.sol\":{\"keccak256\":\"0x53ccaa757944900e7423347c3c35ea5a905580f3f075452b8468a501a9c39839\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://aa5688d98319fbeb5b3c46330a394e15a0f2c862d651415e183da4179b918351\",\"dweb:/ipfs/QmZZFrFWmUCFL1qkZDVm3oqrDkQfumYnnksF6cpPkAHdtJ\"]},\"lib/solady/src/utils/ReentrancyGuard.sol\":{\"keccak256\":\"0xdb28f318ec45197a6c7cc2abebed67d7cb8b965838ef962e3844423256a9ddb8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://873cd46b77a2aeb781e7a0d131e7299151323ed884c330101a51d0727e218d98\",\"dweb:/ipfs/QmddadCjyedztvdSgLZEyKWoRes2SqtpviSjhEbSNrkUoi\"]},\"lib/solady/src/utils/SignatureCheckerLib.sol\":{\"keccak256\":\"0x098c7eb88b3048f227b240e0e5bf1da4a8f7622b30f6d7c06416bfcab3225e77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://50c2766f652916c5d6433665fb1c3b2f04c3d9292a35c12e0f8d7c71dd6438cb\",\"dweb:/ipfs/QmWTMwN2RDZUUPg7KkH1qFBjTSh84Zw8bbYwRBCQUtLN2h\"]},\"src/consensus/ConsensusRegistry.sol\":{\"keccak256\":\"0x8b8716bbaacf5895e5dc8d716217b50de18a021c515f2a57419bac8c16248375\",\"license\":\"MIT or Apache-2.0\",\"urls\":[\"bzz-raw://6172c1e319b5b8236d9e2d9fe9cada878b5c2ce1b53bb21edd798255aece58fb\",\"dweb:/ipfs/QmdUC5aXd4vNPQzmb7AhsMMAxiZPbw8SDF81KA63PF3jPZ\"]},\"src/consensus/Issuance.sol\":{\"keccak256\":\"0xdbb33a3ff5e4afa3c5d107051647db33d86e95cd2686c0207fe8602f99a7d14a\",\"license\":\"MIT or Apache-2.0\",\"urls\":[\"bzz-raw://082e686f08caf3840b309f72b8e480b4ba3d4b90c42c18fb831c1a4b7ecdd727\",\"dweb:/ipfs/QmT37vqjVGk1RsDc3BJCvVNYcLNuP9hTDK9vvsvykZHohG\"]},\"src/consensus/StakeManager.sol\":{\"keccak256\":\"0xeca79ef817e46ae16b09057227db217ce4788e4136574dd09f8434e9c748a57e\",\"license\":\"MIT or Apache-2.0\",\"urls\":[\"bzz-raw://e466ebc4b2654b440b4ecb6fd051b09d60169115f02b0321807d693a24d31484\",\"dweb:/ipfs/QmQ1iWvigtc1eb7kbVc8w22CxH2Uw6htgQsLTfw3xquJRQ\"]},\"src/consensus/SystemCallable.sol\":{\"keccak256\":\"0xed0e78873f3f574356c3bd6fcaa8f1869415aec576586530f74a599e3c767ead\",\"license\":\"MIT or Apache-2.0\",\"urls\":[\"bzz-raw://30b23f67de5abff6a021ff3456fa596585c57a6d09562e2a3ef4cb719b673e28\",\"dweb:/ipfs/QmYRrBUKeSSEXBfrsw4arse3c9jCsuw3hHsHpjJeEqHNwS\"]},\"src/interfaces/IBlsG1.sol\":{\"keccak256\":\"0x950230ff0bed0ae8c0dbef2d22a24fb4114a00c23604619b9dccfd3cbe370ab0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://27432929c7726f7edb4b62981d0ca6bdb5bbada573a835f787556ff442b64c15\",\"dweb:/ipfs/QmSBLDrPL47intGub7yHRC4JRVSyYSW4dSnQMGFQKK7Z8E\"]},\"src/interfaces/IConsensusRegistry.sol\":{\"keccak256\":\"0xd21fdfe6b1f601a70dd9ea80802b6cb92d98a7a751058862544cc1ccf512a6f8\",\"license\":\"MIT or Apache-2.0\",\"urls\":[\"bzz-raw://993174c548c1d8170e87fa3fe7e33368838492883f053ea17ee765b93ce00255\",\"dweb:/ipfs/QmbdvPt6DhckDw1zp4AznyUqP91hqm5ihyqFUagbJj1Au5\"]},\"src/interfaces/IStakeManager.sol\":{\"keccak256\":\"0x9ebbe68f51a2762faf78f5ed41297f784ad7e0e2acd7c90015f17d7c401fc7bc\",\"license\":\"MIT or Apache-2.0\",\"urls\":[\"bzz-raw://9b6ef102e0109e15142fff1b7bc20450ed92a7b6b7eabb7106abfc1432ef77e5\",\"dweb:/ipfs/QmcL9t5oEp3zFo1d2Fe9i73wCtnoPVS6ruaVAYdpKX6zuy\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.35+commit.47b9dedd"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"struct IStakeManager.StakeConfig","name":"genesisConfig_","type":"tuple","components":[{"internalType":"uint256","name":"stakeAmount","type":"uint256"},{"internalType":"uint256","name":"minWithdrawAmount","type":"uint256"},{"internalType":"uint256","name":"epochIssuance","type":"uint256"},{"internalType":"uint32","name":"epochDuration","type":"uint32"}]},{"internalType":"struct IConsensusRegistry.ValidatorInfo[]","name":"initialValidators_","type":"tuple[]","components":[{"internalType":"address","name":"validatorAddress","type":"address"},{"internalType":"uint32","name":"activationEpoch","type":"uint32"},{"internalType":"uint32","name":"exitEpoch","type":"uint32"},{"internalType":"enum IConsensusRegistry.ValidatorStatus","name":"currentStatus","type":"uint8"},{"internalType":"bool","name":"isRetired","type":"bool"},{"internalType":"uint8","name":"stakeVersion","type":"uint8"},{"internalType":"uint8","name":"region","type":"uint8"}]},{"internalType":"bytes[]","name":"blsPubkeys_","type":"bytes[]"},{"internalType":"struct IStakeManager.ProofOfPossession[]","name":"proofsOfPossession","type":"tuple[]","components":[{"internalType":"bytes","name":"signature","type":"bytes"}]},{"internalType":"address","name":"owner_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address"}],"type":"error","name":"AlreadyDefined"},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address"}],"type":"error","name":"BlsPubkeyNotFound"},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address"}],"type":"error","name":"CommitteeRequirement"},{"inputs":[{"internalType":"uint256","name":"deadline","type":"uint256"}],"type":"error","name":"DelegationExpired"},{"inputs":[],"type":"error","name":"DuplicateBLSPubkey"},{"inputs":[],"type":"error","name":"ERC721EnumerableForbiddenBatchMint"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"owner","type":"address"}],"type":"error","name":"ERC721IncorrectOwner"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"type":"error","name":"ERC721InsufficientApproval"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"type":"error","name":"ERC721InvalidApprover"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"type":"error","name":"ERC721InvalidOperator"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"type":"error","name":"ERC721InvalidOwner"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"type":"error","name":"ERC721InvalidReceiver"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"type":"error","name":"ERC721InvalidSender"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"type":"error","name":"ERC721NonexistentToken"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"type":"error","name":"ERC721OutOfBoundsIndex"},{"inputs":[],"type":"error","name":"EnforcedPause"},{"inputs":[],"type":"error","name":"ExpectedPause"},{"inputs":[],"type":"error","name":"GenesisArityMismatch"},{"inputs":[{"internalType":"struct IConsensusRegistry.ValidatorInfo","name":"validator","type":"tuple","components":[{"internalType":"address","name":"validatorAddress","type":"address"},{"internalType":"uint32","name":"activationEpoch","type":"uint32"},{"internalType":"uint32","name":"exitEpoch","type":"uint32"},{"internalType":"enum IConsensusRegistry.ValidatorStatus","name":"currentStatus","type":"uint8"},{"internalType":"bool","name":"isRetired","type":"bool"},{"internalType":"uint8","name":"stakeVersion","type":"uint8"},{"internalType":"uint8","name":"region","type":"uint8"}]}],"type":"error","name":"IneligibleUnstake"},{"inputs":[{"internalType":"uint256","name":"available","type":"uint256"},{"internalType":"uint256","name":"required","type":"uint256"}],"type":"error","name":"InsufficientBalance"},{"inputs":[{"internalType":"uint256","name":"withdrawAmount","type":"uint256"}],"type":"error","name":"InsufficientRewards"},{"inputs":[],"type":"error","name":"InvalidBLSPubkey"},{"inputs":[{"internalType":"uint256","name":"minCommitteeSize","type":"uint256"},{"internalType":"uint256","name":"providedCommitteeSize","type":"uint256"}],"type":"error","name":"InvalidCommitteeSize"},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint8","name":"stakeVersion","type":"uint8"}],"type":"error","name":"InvalidDeficitAmount"},{"inputs":[{"internalType":"uint32","name":"duration","type":"uint32"}],"type":"error","name":"InvalidDuration"},{"inputs":[{"internalType":"uint32","name":"epoch","type":"uint32"}],"type":"error","name":"InvalidEpoch"},{"inputs":[{"internalType":"struct IStakeManager.ProofOfPossession","name":"proof","type":"tuple","components":[{"internalType":"bytes","name":"signature","type":"bytes"}]}],"type":"error","name":"InvalidProofOfPossession"},{"inputs":[{"internalType":"uint256","name":"stakeAmount","type":"uint256"}],"type":"error","name":"InvalidStakeAmount"},{"inputs":[{"internalType":"uint8","name":"currentVersion","type":"uint8"},{"internalType":"uint8","name":"targetVersion","type":"uint8"}],"type":"error","name":"InvalidStakeVersion"},{"inputs":[{"internalType":"enum IConsensusRegistry.ValidatorStatus","name":"status","type":"uint8"}],"type":"error","name":"InvalidStatus"},{"inputs":[],"type":"error","name":"InvalidSupply"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"type":"error","name":"InvalidTokenId"},{"inputs":[],"type":"error","name":"InvalidValidatorAddress"},{"inputs":[],"type":"error","name":"IssuanceTransferFailed"},{"inputs":[{"internalType":"bytes","name":"err","type":"bytes"}],"type":"error","name":"LowLevelCallFailure"},{"inputs":[],"type":"error","name":"NoClaimableRefund"},{"inputs":[],"type":"error","name":"NoPendingVersionChange"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"}],"type":"error","name":"NotRecipient"},{"inputs":[],"type":"error","name":"NotTransferable"},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address"}],"type":"error","name":"NotValidator"},{"inputs":[{"internalType":"address","name":"invalidCaller","type":"address"}],"type":"error","name":"OnlySystemCall"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"type":"error","name":"OwnableInvalidOwner"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"type":"error","name":"OwnableUnauthorizedAccount"},{"inputs":[],"type":"error","name":"Reentrancy"},{"inputs":[],"type":"error","name":"RequiresConsensusNFT"},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint8","name":"stakeVersion","type":"uint8"}],"type":"error","name":"StakeNotSlashed"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"length","type":"uint256"}],"type":"error","name":"StringsInsufficientHexLength"},{"inputs":[],"type":"error","name":"TopUpAuthorityRequired"},{"inputs":[{"internalType":"address","name":"owner","type":"address","indexed":true},{"internalType":"address","name":"approved","type":"address","indexed":true},{"internalType":"uint256","name":"tokenId","type":"uint256","indexed":true}],"type":"event","name":"Approval","anonymous":false},{"inputs":[{"internalType":"address","name":"owner","type":"address","indexed":true},{"internalType":"address","name":"operator","type":"address","indexed":true},{"internalType":"bool","name":"approved","type":"bool","indexed":false}],"type":"event","name":"ApprovalForAll","anonymous":false},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address","indexed":true},{"internalType":"uint64","name":"nonce","type":"uint64","indexed":false}],"type":"event","name":"DelegationNonceIncreased","anonymous":false},{"inputs":[{"internalType":"struct IConsensusRegistry.EpochInfo","name":"epoch","type":"tuple","components":[{"internalType":"address[]","name":"committee","type":"address[]"},{"internalType":"uint256","name":"epochIssuance","type":"uint256"},{"internalType":"uint64","name":"blockHeight","type":"uint64"},{"internalType":"uint32","name":"epochId","type":"uint32"},{"internalType":"uint32","name":"epochDuration","type":"uint32"},{"internalType":"uint8","name":"stakeVersion","type":"uint8"}],"indexed":false}],"type":"event","name":"NewEpoch","anonymous":false},{"inputs":[{"internalType":"uint16","name":"oldSize","type":"uint16","indexed":false},{"internalType":"uint16","name":"newSize","type":"uint16","indexed":false},{"internalType":"uint256","name":"numActiveValidators","type":"uint256","indexed":false}],"type":"event","name":"NextCommitteeSizeUpdated","anonymous":false},{"inputs":[{"internalType":"address","name":"previousOwner","type":"address","indexed":true},{"internalType":"address","name":"newOwner","type":"address","indexed":true}],"type":"event","name":"OwnershipTransferred","anonymous":false},{"inputs":[{"internalType":"address","name":"account","type":"address","indexed":false}],"type":"event","name":"Paused","anonymous":false},{"inputs":[{"internalType":"address","name":"recipient","type":"address","indexed":true},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false}],"type":"event","name":"RefundClaimed","anonymous":false},{"inputs":[{"internalType":"address","name":"recipient","type":"address","indexed":true},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false}],"type":"event","name":"RefundQueued","anonymous":false},{"inputs":[{"internalType":"address","name":"claimant","type":"address","indexed":true},{"internalType":"uint256","name":"rewards","type":"uint256","indexed":false}],"type":"event","name":"RewardsClaimed","anonymous":false},{"inputs":[{"internalType":"uint8","name":"version","type":"uint8","indexed":true},{"internalType":"uint256","name":"stakeAmount","type":"uint256","indexed":false},{"internalType":"uint256","name":"minWithdrawAmount","type":"uint256","indexed":false},{"internalType":"uint256","name":"epochIssuance","type":"uint256","indexed":false},{"internalType":"uint32","name":"epochDuration","type":"uint32","indexed":false}],"type":"event","name":"StakeVersionAuthored","anonymous":false},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address","indexed":true}],"type":"event","name":"StakeVersionChangeCanceled","anonymous":false},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address","indexed":true},{"internalType":"uint8","name":"targetVersion","type":"uint8","indexed":false},{"internalType":"uint32","name":"requestEpoch","type":"uint32","indexed":false},{"internalType":"uint256","name":"escrow","type":"uint256","indexed":false}],"type":"event","name":"StakeVersionChangeRequested","anonymous":false},{"inputs":[{"internalType":"bool","name":"required","type":"bool","indexed":false}],"type":"event","name":"TopUpAuthorityRequirementUpdated","anonymous":false},{"inputs":[{"internalType":"address","name":"from","type":"address","indexed":true},{"internalType":"address","name":"to","type":"address","indexed":true},{"internalType":"uint256","name":"tokenId","type":"uint256","indexed":true}],"type":"event","name":"Transfer","anonymous":false},{"inputs":[{"internalType":"address","name":"account","type":"address","indexed":false}],"type":"event","name":"Unpaused","anonymous":false},{"inputs":[{"internalType":"struct IConsensusRegistry.ValidatorInfo","name":"validator","type":"tuple","components":[{"internalType":"address","name":"validatorAddress","type":"address"},{"internalType":"uint32","name":"activationEpoch","type":"uint32"},{"internalType":"uint32","name":"exitEpoch","type":"uint32"},{"internalType":"enum IConsensusRegistry.ValidatorStatus","name":"currentStatus","type":"uint8"},{"internalType":"bool","name":"isRetired","type":"bool"},{"internalType":"uint8","name":"stakeVersion","type":"uint8"},{"internalType":"uint8","name":"region","type":"uint8"}],"indexed":false}],"type":"event","name":"ValidatorActivated","anonymous":false},{"inputs":[{"internalType":"struct IConsensusRegistry.ValidatorInfo","name":"validator","type":"tuple","components":[{"internalType":"address","name":"validatorAddress","type":"address"},{"internalType":"uint32","name":"activationEpoch","type":"uint32"},{"internalType":"uint32","name":"exitEpoch","type":"uint32"},{"internalType":"enum IConsensusRegistry.ValidatorStatus","name":"currentStatus","type":"uint8"},{"internalType":"bool","name":"isRetired","type":"bool"},{"internalType":"uint8","name":"stakeVersion","type":"uint8"},{"internalType":"uint8","name":"region","type":"uint8"}],"indexed":false}],"type":"event","name":"ValidatorExited","anonymous":false},{"inputs":[{"internalType":"struct IConsensusRegistry.ValidatorInfo","name":"validator","type":"tuple","components":[{"internalType":"address","name":"validatorAddress","type":"address"},{"internalType":"uint32","name":"activationEpoch","type":"uint32"},{"internalType":"uint32","name":"exitEpoch","type":"uint32"},{"internalType":"enum IConsensusRegistry.ValidatorStatus","name":"currentStatus","type":"uint8"},{"internalType":"bool","name":"isRetired","type":"bool"},{"internalType":"uint8","name":"stakeVersion","type":"uint8"},{"internalType":"uint8","name":"region","type":"uint8"}],"indexed":false}],"type":"event","name":"ValidatorPendingActivation","anonymous":false},{"inputs":[{"internalType":"struct IConsensusRegistry.ValidatorInfo","name":"validator","type":"tuple","components":[{"internalType":"address","name":"validatorAddress","type":"address"},{"internalType":"uint32","name":"activationEpoch","type":"uint32"},{"internalType":"uint32","name":"exitEpoch","type":"uint32"},{"internalType":"enum IConsensusRegistry.ValidatorStatus","name":"currentStatus","type":"uint8"},{"internalType":"bool","name":"isRetired","type":"bool"},{"internalType":"uint8","name":"stakeVersion","type":"uint8"},{"internalType":"uint8","name":"region","type":"uint8"}],"indexed":false}],"type":"event","name":"ValidatorPendingExit","anonymous":false},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address","indexed":true},{"internalType":"uint8","name":"region","type":"uint8","indexed":false}],"type":"event","name":"ValidatorRegionUpdated","anonymous":false},{"inputs":[{"internalType":"struct IConsensusRegistry.ValidatorInfo","name":"validator","type":"tuple","components":[{"internalType":"address","name":"validatorAddress","type":"address"},{"internalType":"uint32","name":"activationEpoch","type":"uint32"},{"internalType":"uint32","name":"exitEpoch","type":"uint32"},{"internalType":"enum IConsensusRegistry.ValidatorStatus","name":"currentStatus","type":"uint8"},{"internalType":"bool","name":"isRetired","type":"bool"},{"internalType":"uint8","name":"stakeVersion","type":"uint8"},{"internalType":"uint8","name":"region","type":"uint8"}],"indexed":false}],"type":"event","name":"ValidatorRetired","anonymous":false},{"inputs":[{"internalType":"uint256","name":"eligibleValidatorCount","type":"uint256","indexed":false}],"type":"event","name":"ValidatorSetsMigrated","anonymous":false},{"inputs":[{"internalType":"struct Slash","name":"slash","type":"tuple","components":[{"internalType":"address","name":"validatorAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"indexed":false}],"type":"event","name":"ValidatorSlashed","anonymous":false},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address","indexed":true},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false}],"type":"event","name":"ValidatorStakeToppedUp","anonymous":false},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address","indexed":true},{"internalType":"uint8","name":"oldVersion","type":"uint8","indexed":false},{"internalType":"uint8","name":"newVersion","type":"uint8","indexed":false},{"internalType":"uint256","name":"oldStakeAmount","type":"uint256","indexed":false},{"internalType":"uint256","name":"newStakeAmount","type":"uint256","indexed":false}],"type":"event","name":"ValidatorStakeVersionUpgraded","anonymous":false},{"inputs":[{"internalType":"struct IConsensusRegistry.ValidatorInfo","name":"validator","type":"tuple","components":[{"internalType":"address","name":"validatorAddress","type":"address"},{"internalType":"uint32","name":"activationEpoch","type":"uint32"},{"internalType":"uint32","name":"exitEpoch","type":"uint32"},{"internalType":"enum IConsensusRegistry.ValidatorStatus","name":"currentStatus","type":"uint8"},{"internalType":"bool","name":"isRetired","type":"bool"},{"internalType":"uint8","name":"stakeVersion","type":"uint8"},{"internalType":"uint8","name":"region","type":"uint8"}],"indexed":false}],"type":"event","name":"ValidatorStaked","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"SYSTEM_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"activate"},{"inputs":[],"stateMutability":"payable","type":"function","name":"allocateIssuance"},{"inputs":[{"internalType":"struct RewardInfo[]","name":"rewardInfos","type":"tuple[]","components":[{"internalType":"address","name":"validatorAddress","type":"address"},{"internalType":"uint256","name":"consensusHeaderCount","type":"uint256"}]}],"stateMutability":"nonpayable","type":"function","name":"applyIncentives"},{"inputs":[{"internalType":"struct Slash[]","name":"slashes","type":"tuple[]","components":[{"internalType":"address","name":"validatorAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}]}],"stateMutability":"nonpayable","type":"function","name":"applySlashes"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"approve"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"view","type":"function","name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"beginExit"},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"burn"},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"cancelStakeVersionChange"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"claimRefund"},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"claimStakeRewards"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function","name":"claimableRefunds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function","name":"claimableRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address[]","name":"newCommittee","type":"address[]"}],"stateMutability":"nonpayable","type":"function","name":"concludeEpoch"},{"inputs":[{"internalType":"bytes","name":"blsPubkey","type":"bytes"},{"internalType":"struct IStakeManager.ProofOfPossession","name":"proofOfPossession","type":"tuple","components":[{"internalType":"bytes","name":"signature","type":"bytes"}]},{"internalType":"address","name":"validatorAddress","type":"address"},{"internalType":"bytes","name":"validatorEIP712Signature","type":"bytes"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"stateMutability":"payable","type":"function","name":"delegateStake"},{"inputs":[{"internalType":"bytes","name":"blsPubkey","type":"bytes"},{"internalType":"address","name":"validatorAddress","type":"address"},{"internalType":"address","name":"delegator","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"stateMutability":"view","type":"function","name":"delegationDigest","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"eip712Domain","outputs":[{"internalType":"bytes1","name":"fields","type":"bytes1"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"version","type":"string"},{"internalType":"uint256","name":"chainId","type":"uint256"},{"internalType":"address","name":"verifyingContract","type":"address"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"uint256[]","name":"extensions","type":"uint256[]"}]},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"epochInfo","outputs":[{"internalType":"uint256","name":"epochIssuance","type":"uint256"},{"internalType":"uint64","name":"blockHeight","type":"uint64"},{"internalType":"uint32","name":"epochId","type":"uint32"},{"internalType":"uint32","name":"epochDuration","type":"uint32"},{"internalType":"uint8","name":"stakeVersion","type":"uint8"}]},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"futureEpochInfo","outputs":[{"internalType":"uint256","name":"epochIssuance","type":"uint256"},{"internalType":"uint64","name":"blockHeight","type":"uint64"},{"internalType":"uint32","name":"epochId","type":"uint32"},{"internalType":"uint32","name":"epochDuration","type":"uint32"},{"internalType":"uint8","name":"stakeVersion","type":"uint8"}]},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"stateMutability":"view","type":"function","name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address"}],"stateMutability":"view","type":"function","name":"getBalanceBreakdown","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address"}],"stateMutability":"view","type":"function","name":"getBlsPubkey","outputs":[{"internalType":"bytes","name":"","type":"bytes"}]},{"inputs":[{"internalType":"uint32","name":"epoch","type":"uint32"}],"stateMutability":"view","type":"function","name":"getCommitteeBlsPubkeys","outputs":[{"internalType":"bytes[]","name":"","type":"bytes[]"}]},{"inputs":[{"internalType":"uint32","name":"epoch","type":"uint32"}],"stateMutability":"view","type":"function","name":"getCommitteeValidators","outputs":[{"internalType":"struct IConsensusRegistry.ValidatorInfo[]","name":"","type":"tuple[]","components":[{"internalType":"address","name":"validatorAddress","type":"address"},{"internalType":"uint32","name":"activationEpoch","type":"uint32"},{"internalType":"uint32","name":"exitEpoch","type":"uint32"},{"internalType":"enum IConsensusRegistry.ValidatorStatus","name":"currentStatus","type":"uint8"},{"internalType":"bool","name":"isRetired","type":"bool"},{"internalType":"uint8","name":"stakeVersion","type":"uint8"},{"internalType":"uint8","name":"region","type":"uint8"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getCurrentEpoch","outputs":[{"internalType":"uint32","name":"","type":"uint32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getCurrentEpochInfo","outputs":[{"internalType":"struct IConsensusRegistry.EpochInfo","name":"","type":"tuple","components":[{"internalType":"address[]","name":"committee","type":"address[]"},{"internalType":"uint256","name":"epochIssuance","type":"uint256"},{"internalType":"uint64","name":"blockHeight","type":"uint64"},{"internalType":"uint32","name":"epochId","type":"uint32"},{"internalType":"uint32","name":"epochDuration","type":"uint32"},{"internalType":"uint8","name":"stakeVersion","type":"uint8"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getCurrentStakeConfig","outputs":[{"internalType":"struct IStakeManager.StakeConfig","name":"","type":"tuple","components":[{"internalType":"uint256","name":"stakeAmount","type":"uint256"},{"internalType":"uint256","name":"minWithdrawAmount","type":"uint256"},{"internalType":"uint256","name":"epochIssuance","type":"uint256"},{"internalType":"uint32","name":"epochDuration","type":"uint32"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getCurrentStakeVersion","outputs":[{"internalType":"uint8","name":"","type":"uint8"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getEligibleValidatorCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint32","name":"epoch","type":"uint32"}],"stateMutability":"view","type":"function","name":"getEpochInfo","outputs":[{"internalType":"struct IConsensusRegistry.EpochInfo","name":"","type":"tuple","components":[{"internalType":"address[]","name":"committee","type":"address[]"},{"internalType":"uint256","name":"epochIssuance","type":"uint256"},{"internalType":"uint64","name":"blockHeight","type":"uint64"},{"internalType":"uint32","name":"epochId","type":"uint32"},{"internalType":"uint32","name":"epochDuration","type":"uint32"},{"internalType":"uint8","name":"stakeVersion","type":"uint8"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getNextCommitteeSize","outputs":[{"internalType":"uint16","name":"","type":"uint16"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getPendingVersionChanges","outputs":[{"internalType":"address[]","name":"","type":"address[]"}]},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address"}],"stateMutability":"view","type":"function","name":"getRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address"}],"stateMutability":"view","type":"function","name":"getValidator","outputs":[{"internalType":"struct IConsensusRegistry.ValidatorInfo","name":"","type":"tuple","components":[{"internalType":"address","name":"validatorAddress","type":"address"},{"internalType":"uint32","name":"activationEpoch","type":"uint32"},{"internalType":"uint32","name":"exitEpoch","type":"uint32"},{"internalType":"enum IConsensusRegistry.ValidatorStatus","name":"currentStatus","type":"uint8"},{"internalType":"bool","name":"isRetired","type":"bool"},{"internalType":"uint8","name":"stakeVersion","type":"uint8"},{"internalType":"uint8","name":"region","type":"uint8"}]}]},{"inputs":[{"internalType":"enum IConsensusRegistry.ValidatorStatus","name":"status","type":"uint8"}],"stateMutability":"view","type":"function","name":"getValidators","outputs":[{"internalType":"address[]","name":"","type":"address[]"}]},{"inputs":[{"internalType":"enum IConsensusRegistry.ValidatorStatus","name":"status","type":"uint8"}],"stateMutability":"view","type":"function","name":"getValidatorsInfo","outputs":[{"internalType":"struct IConsensusRegistry.ValidatorInfo[]","name":"","type":"tuple[]","components":[{"internalType":"address","name":"validatorAddress","type":"address"},{"internalType":"uint32","name":"activationEpoch","type":"uint32"},{"internalType":"uint32","name":"exitEpoch","type":"uint32"},{"internalType":"enum IConsensusRegistry.ValidatorStatus","name":"currentStatus","type":"uint8"},{"internalType":"bool","name":"isRetired","type":"bool"},{"internalType":"uint8","name":"stakeVersion","type":"uint8"},{"internalType":"uint8","name":"region","type":"uint8"}]}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"increaseNonce"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"stateMutability":"view","type":"function","name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address"}],"stateMutability":"view","type":"function","name":"isDelegated","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address"}],"stateMutability":"view","type":"function","name":"isRetired","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"bytes","name":"blsPubkey","type":"bytes"}],"stateMutability":"view","type":"function","name":"isValidator","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"issuance","outputs":[{"internalType":"address payable","name":"","type":"address"}]},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"issuanceWithdrawal"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"migrateValidatorSets"},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"mint"},{"inputs":[],"stateMutability":"view","type":"function","name":"name","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"stateMutability":"view","type":"function","name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"pause"},{"inputs":[],"stateMutability":"view","type":"function","name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"renounceOwnership"},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address"},{"internalType":"uint8","name":"targetVersion","type":"uint8"}],"stateMutability":"payable","type":"function","name":"requestStakeVersionChange"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"safeTransferFrom"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"safeTransferFrom"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function","name":"setApprovalForAll"},{"inputs":[{"internalType":"uint16","name":"newSize","type":"uint16"}],"stateMutability":"nonpayable","type":"function","name":"setNextCommitteeSize"},{"inputs":[{"internalType":"bool","name":"required","type":"bool"}],"stateMutability":"nonpayable","type":"function","name":"setTopUpAuthorityRequired"},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address"},{"internalType":"uint8","name":"region","type":"uint8"}],"stateMutability":"nonpayable","type":"function","name":"setValidatorRegion"},{"inputs":[{"internalType":"bytes","name":"blsPubkey","type":"bytes"},{"internalType":"struct IStakeManager.ProofOfPossession","name":"proofOfPossession","type":"tuple","components":[{"internalType":"bytes","name":"signature","type":"bytes"}]}],"stateMutability":"payable","type":"function","name":"stake"},{"inputs":[{"internalType":"uint8","name":"version","type":"uint8"}],"stateMutability":"view","type":"function","name":"stakeConfig","outputs":[{"internalType":"struct IStakeManager.StakeConfig","name":"","type":"tuple","components":[{"internalType":"uint256","name":"stakeAmount","type":"uint256"},{"internalType":"uint256","name":"minWithdrawAmount","type":"uint256"},{"internalType":"uint256","name":"epochIssuance","type":"uint256"},{"internalType":"uint32","name":"epochDuration","type":"uint32"}]}]},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"stateMutability":"view","type":"function","name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"stateMutability":"view","type":"function","name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"stateMutability":"view","type":"function","name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"stateMutability":"view","type":"function","name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"topUpAuthorityRequired","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address"}],"stateMutability":"payable","type":"function","name":"topUpSlashedStake"},{"inputs":[],"stateMutability":"view","type":"function","name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"transferFrom"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"transferOwnership"},{"inputs":[],"stateMutability":"view","type":"function","name":"undistributedIssuance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"unpause"},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address"},{"internalType":"bool","name":"acceptRewardShortfall","type":"bool"}],"stateMutability":"nonpayable","type":"function","name":"unstake"},{"inputs":[{"internalType":"struct IStakeManager.StakeConfig","name":"newConfig","type":"tuple","components":[{"internalType":"uint256","name":"stakeAmount","type":"uint256"},{"internalType":"uint256","name":"minWithdrawAmount","type":"uint256"},{"internalType":"uint256","name":"epochIssuance","type":"uint256"},{"internalType":"uint32","name":"epochDuration","type":"uint32"}]}],"stateMutability":"nonpayable","type":"function","name":"upgradeStakeVersion","outputs":[{"internalType":"uint8","name":"","type":"uint8"}]},{"inputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function","name":"validators","outputs":[{"internalType":"address","name":"validatorAddress","type":"address"},{"internalType":"uint32","name":"activationEpoch","type":"uint32"},{"internalType":"uint32","name":"exitEpoch","type":"uint32"},{"internalType":"enum IConsensusRegistry.ValidatorStatus","name":"currentStatus","type":"uint8"},{"internalType":"bool","name":"isRetired","type":"bool"},{"internalType":"uint8","name":"stakeVersion","type":"uint8"},{"internalType":"uint8","name":"region","type":"uint8"}]},{"inputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function","name":"versionChangeRequests","outputs":[{"internalType":"uint8","name":"targetVersion","type":"uint8"},{"internalType":"uint32","name":"requestEpoch","type":"uint32"},{"internalType":"address","name":"funder","type":"address"},{"internalType":"uint256","name":"escrow","type":"uint256"}]}],"devdoc":{"kind":"dev","methods":{"activate()":{"details":"Self-activation function for validators, gaining `PendingActivation` status and setting next epoch as activation epoch to ensure rewards eligibility only after completing a full epoch"},"allocateIssuance()":{"details":"Permissioned function to allocate TEL for epoch issuance, ie consensus block rewards"},"applyIncentives((address,uint256)[])":{"details":"First boundary system call in the closing block: runs before `applySlashes` so weights reflect pre-slash collateral, and before `concludeEpoch` so weights reflect the versions active during the closing epoch. Entries with sentinel addresses (token ids 0 and type(uint160).max) or retired validators are skipped rather than reverting, so a malformed entry cannot stall the boundary. Issuance distribution is not yet enabled during the pilot; the protocol passes an empty array"},"applySlashes((address,uint256)[])":{"details":"Second boundary system call in the closing block: MUST run before `concludeEpoch` so slashes land on the full old-version collateral ahead of the version-queue settlement, and so the protocol's post-slash committee reads see any ejections. Entries with sentinel addresses or retired validators are skipped rather than reverting. Slashing is not yet enabled during the pilot; the protocol passes an empty array"},"balanceOf(address)":{"details":"See {IERC721-balanceOf}."},"beginExit()":{"details":"Issues an exit request for a validator to be retired from the `Active` validator set"},"burn(address)":{"details":"In the case of malicious or erroneous node operator behavior, governance can use this function to burn a validator's `ConsensusNFT` and immediately eject from consensus committees if applicableIntended for sparing use; only reverts if burning results in empty committee","params":{"from":"Refers to the struct member `ValidatorInfo.validatorAddress` in `IConsensusRegistry`"}},"cancelStakeVersionChange(address)":{"details":"Withdraws a pending stake version change without settling it, returning any escrow to its funder","params":{"validatorAddress":"The validator whose pending change should be cancelled"}},"claimRefund()":{"details":"Transfers the caller's accumulated refund credit"},"claimStakeRewards(address)":{"details":"Used by rewardees to claim staking rewards"},"concludeEpoch(address[])":{"details":"The protocol sequences the closing block as `applyIncentives`, then `applySlashes`, then this call. That ordering is a security invariant: it lets the protocol assemble `newCommittee` and read `nextCommitteeSize` after slash-to-zero ejections have landed (so this call's committee checks cannot revert against a stale pre-slash view, and an ejected validator is never seated in a future committee), and it makes the version-queue settlement here read post-slash balances. Settlement refunds accrue as `claimRefund` credits rather than transfers, so this call performs no external calls beyond the trusted Issuance consolidation and its cost is storage-bounded regardless of recipient behavior.","params":{"newCommittee":"The future validator committee for `$.currentEpoch + 3`"}},"constructor":{"details":"Stake for `initialValidators_` is allocated directly to the ConsensusRegistry balance and decremented directly from the TEL precompile within the protocol on the rust sideOnly governance delegation is enabled at genesis","params":{"initialValidators_":"The initial validator set running Telcoin Network; these validators will comprise the voter committee for the first three epochs, ie `epochInfo[0:2]`"}},"delegateStake(bytes,(bytes),address,bytes,uint256)":{"details":"Accepts delegated stake from a non-validator caller authorized by a validator's EIP712 signature","params":{"deadline":"Unix timestamp past which `validatorSig` is rejected (ignored for governance calls)"}},"delegationDigest(bytes,address,address,uint256)":{"params":{"deadline":"Unix timestamp past which the produced signature must be rejected"},"returns":{"_0":"_ EIP-712 typed struct hash used to enable delegated proof of stake"}},"eip712Domain()":{"details":"See: https://eips.ethereum.org/EIPS/eip-5267"},"getApproved(uint256)":{"details":"See {IERC721-getApproved}."},"getBalanceBreakdown(address)":{"details":"Returns staking information for the given address"},"getBlsPubkey(address)":{"details":"Fetches the BLS pubkey for a given validator address"},"getCommitteeBlsPubkeys(uint32)":{"details":"Fetches the BLS pubkeys for the committee of a given epoch"},"getCommitteeValidators(uint32)":{"details":"Fetches the committee for a given epoch"},"getCurrentEpoch()":{"details":"Returns the current epoch"},"getCurrentEpochInfo()":{"details":"Returns the current epoch's committee and block height"},"getCurrentStakeConfig()":{"details":"Returns the latest authored stake configuration, which becomes active at the next epoch start"},"getCurrentStakeVersion()":{"details":"Returns the stake version active for the current epoch, ie the version stamped into the epoch's info at its start"},"getEpochInfo(uint32)":{"details":"Returns information about the provided epoch. Only four latest & two future epochs are stored"},"getRewards(address)":{"details":"Fetches the claimable rewards accrued for a given validator address","returns":{"_0":"_ The validator's claimable rewards, not including the validator's stake"}},"getValidator(address)":{"details":"Fetches the `ValidatorInfo` for a given `validatorAddress == ConsensusNFT tokenId`"},"getValidators(uint8)":{"details":"Returns the addresses of validators in exactly the provided status's set, in the set's current order. Reverts on `Undefined` and `Any` (neither maintains a set)."},"getValidatorsInfo(uint8)":{"details":"Like `getValidators`, but returns the full `ValidatorInfo` for each validator in the set."},"increaseNonce()":{"details":"Caller must hold a ConsensusNFT; lets a validator revoke a delegation it authorized but no longer wants honored"},"isApprovedForAll(address,address)":{"details":"See {IERC721-isApprovedForAll}."},"isDelegated(address)":{"details":"Returns whether a validator's stake was delegated (ie has a delegator)"},"isRetired(address)":{"details":"Returns whether a validator is exited && unstaked, ie \"retired\""},"isValidator(bytes)":{"details":"Check if a BLS public key corresponds to an active validator","params":{"blsPubkey":"The compressed 96-byte BLS public key to check"},"returns":{"_0":"bool True if the validator exists and is not retired, false otherwise"}},"issuanceWithdrawal(uint256)":{"details":"Permissioned function to withdraw TEL from the Issuance contract to the caller","params":{"amount":"The amount of TEL to withdraw from the Issuance contract"}},"migrateValidatorSets()":{"details":"The storage layout is a clean append (the sets were appended after the pre-existing variables), so `validators[*]` and the ConsensusNFTs survive the code swap untouched; only `validatorSets` / `eligibleValidatorCount` start empty and must be rebuilt before the new read paths (`getValidators` / `getValidatorsInfo` / `concludeEpoch`) work. Walks the ConsensusNFT enumeration and re-derives each set from `currentStatus` (the preserved source of truth), mirroring `_setStatus`: retired, `Undefined`, and `Any` validators carry no set and are skipped. Idempotent - set adds dedupe and the count is recomputed from scratch - so a redundant call (or a call against a freshly seeded genesis) is a no-op. System-gated so the protocol invokes it once during the fork that swaps in this implementation."},"mint(address)":{"details":"The StakeManager's ERC721 ledger serves a permissioning role over validators, requiring Telcoin governance to approve each node operator and manually issue them a `ConsensusNFT`","params":{"to":"Refers to the struct member `ValidatorInfo.validatorAddress` in `IConsensusRegistry`"}},"name()":{"details":"See {IERC721Metadata-name}."},"owner()":{"details":"Returns the address of the current owner."},"ownerOf(uint256)":{"details":"See {IERC721-ownerOf}."},"pause()":{"details":"Emergency function to pause validator and stake management"},"paused()":{"details":"Returns true if the contract is paused, and false otherwise."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."},"requestStakeVersionChange(address,uint8)":{"details":"Requests a stake version change for a validator; callable by the validator or its delegator. Only callable for validators with status Staked, PendingActivation, or Active.","params":{"targetVersion":"The version to adopt (must be strictly greater than current and not exceed the latest authored version)","validatorAddress":"The validator whose stake version should change"}},"safeTransferFrom(address,address,uint256)":{"details":"See {IERC721-safeTransferFrom}."},"safeTransferFrom(address,address,uint256,bytes)":{"details":"See {IERC721-safeTransferFrom}."},"setNextCommitteeSize(uint16)":{"details":"This is managed off-chain and read by the protocol to shuffle n-validators for `concludeEpoch` call."},"setTopUpAuthorityRequired(bool)":{"details":"Only callable by governance (owner)"},"setValidatorRegion(address,uint8)":{"params":{"region":"The GSMA region identifier (uint8; 0=unspecified, 1-8=GSMA regions)","validatorAddress":"The address of the validator to update"}},"stake(bytes,(bytes))":{"details":"Accepts the native TEL stake amount from the calling validator, enabling later self-activation"},"stakeConfig(uint8)":{"details":"Returns the queried stake configuration"},"supportsInterface(bytes4)":{"details":"See {IERC165-supportsInterface}."},"symbol()":{"details":"See {IERC721Metadata-symbol}."},"tokenByIndex(uint256)":{"details":"See {IERC721Enumerable-tokenByIndex}."},"tokenOfOwnerByIndex(address,uint256)":{"details":"See {IERC721Enumerable-tokenOfOwnerByIndex}."},"topUpSlashedStake(address)":{"details":"`msg.value` must equal the exact deficit; it is consolidated on the Issuance contract since this contract retains the full stake-backed native TEL when slashes are appliedCallable by governance at any time; by the validator or its delegator only while `topUpAuthorityRequired` is false","params":{"validatorAddress":"The slashed validator to top up; must be `Staked`, `PendingActivation`, or `Active`"}},"totalSupply()":{"details":"See {IERC721Enumerable-totalSupply}."},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."},"unpause()":{"details":"Emergency function to unpause validator and stake management"},"unstake(address,bool)":{"details":"Returns previously staked funds in addition to accrued rewards, if any, to the staker","params":{"acceptRewardShortfall":"When true, caps the rewards payout at the Issuance contract's available balance and permanently forfeits only the shortfall, so an underfunded reward pool can never block a stake withdrawal; identical to a normal unstake whenever Issuance can cover the rewards"}},"upgradeStakeVersion((uint256,uint256,uint256,uint32))":{"details":"Permissioned function to upgrade stake, withdrawal, and consensus block reward configurations"}},"version":1},"userdoc":{"kind":"user","methods":{"activate()":{"notice":"Caller must own a ConsensusNFT and be `Staked` status, ie staked or delegated"},"allocateIssuance()":{"notice":"Allocated TEL leaves the Issuance contract only as staking issuance rewards or through a governance withdrawal via `issuanceWithdrawal`Only governance may allocate TEL in this manner"},"applyIncentives((address,uint256)[])":{"notice":"Distributes the closing epoch's issuance to stake originators, weighted by initial stake and consensus header count"},"applySlashes((address,uint256)[])":{"notice":"Applies the closing epoch's penalties to outstanding balances, ejecting validators slashed to zero"},"approve(address,uint256)":{"notice":"Wouldn't do anything because transfers are disabled but explicitly disallow anyway"},"beginExit()":{"notice":"Reverts if the exit queue is full, ie if active validator count would drop too low"},"cancelStakeVersionChange(address)":{"notice":"Callable by the validator or its delegator"},"claimRefund()":{"notice":"Credits accrue from boundary settlement refunds, escrow returns on retirement, and user-initiated escrow returns and withdrawal payouts whose push failed; they are detached from the validator lifecycle and survive burns and retirementA withdrawal payout credit carries a reward leg paid from Issuance. That leg is capped at Issuance's balance and any remainder stays credited, so a reward pool that has run dry defers part of a claim rather than blocking it"},"concludeEpoch(address[])":{"notice":"The final epoch-boundary system call: settles queued stake version changes and rotates the epoch, seating the provided future committee"},"delegateStake(bytes,(bytes),address,bytes,uint256)":{"notice":"`validatorAddress` must be a validator already in possession of a `ConsensusNFT`Ensuring `uncompressedPubkey` corresponds to `ValidatorInfo::blsPubkey` is better performed externally in Rust by the protocol due to EIP2537 precompile & EVM limitations so this contract does not perform any (un)compression checks`validatorSig` must come from the authority that owns the validator address itself. For an externally owned account that is its secp256k1 key, whether or not the account has attached an EIP-7702 delegation; a delegated wallet program is not accepted as a stand-in for the key. Only a genuine contract account authorizes through ERC-1271."},"delegationDigest(bytes,address,address,uint256)":{"notice":"Returns the delegation digest that a validator should sign to accept a delegation"},"getBlsPubkey(address)":{"notice":"Reverts with `BlsPubkeyNotFound` if no pubkey is stored for `validatorAddress` (including the zero-address case)"},"getCurrentStakeConfig()":{"notice":"Not necessarily the epoch-active config: during any epoch in which governance has authored a new version, this differs from `stakeConfig(getCurrentStakeVersion())`"},"getCurrentStakeVersion()":{"notice":"Differs from `getCurrentStakeConfig` during any epoch in which governance has authored a new version, since newly authored versions activate at the next epoch start"},"getEligibleValidatorCount()":{"notice":"Number of committee-eligible validators: the unretired `{ PendingActivation, Active, PendingExit }` set. Derived O(1) from the per-status set sizes."},"getEpochInfo(uint32)":{"notice":"For future epochs, the config fields (issuance, duration, stake version) are a projection from the latest authored configuration and can change until the epoch is stamped at its start; `blockHeight` is always 0 as it is not yet known"},"getNextCommitteeSize()":{"notice":"Returns the next committee size"},"getPendingVersionChanges()":{"notice":"Returns the validators with a queued stake version change, in set order"},"getValidators(uint8)":{"notice":"Per-status only: the `Active` query no longer folds in `PendingActivation`/`PendingExit`. The committee-eligible pool is the union of the `{ PendingActivation, Active, PendingExit }` queries; the protocol unions those three calls off-chain. `getEligibleValidatorCount()` returns that union's size on-chain."},"increaseNonce()":{"notice":"Invalidates any outstanding delegation signature for the caller by advancing its nonce"},"isRetired(address)":{"notice":"After retiring, a validator's `tokenId == validatorAddress` cannot be reused"},"issuanceWithdrawal(uint256)":{"notice":"Only governance may withdraw in this manner, eg to recover consolidated slash funds or to reduce a prior issuance allocation"},"migrateValidatorSets()":{"notice":"One-time back-fill of the per-status validator sets, the cached eligible count, and the BLS pubkey reverse index for an in-place upgrade from a deployment that predates them."},"mint(address)":{"notice":"For each mintee, `tokenId == uint160(to)`Access-gated in ConsensusRegistry to its owner, which is a Telcoin governance address"},"pause()":{"notice":"Does not pause system callable or ConsensusNFT fns. Only accessible by `owner`"},"requestStakeVersionChange(address,uint8)":{"notice":"`Staked` validators settle immediately: they are not in service, are never members of a committee, and can already reclaim their full stake at any time via `unstake`.In-service (PendingActivation/Active) validators are queued instead: the change is applied automatically inside `concludeEpoch` at an epoch boundary, after that boundary's slashes have landed, so no request or settlement timing can move value ahead of a slash. Stake increases settle at the first boundary; stake decreases settle only once `STAKE_DECREASE_DELAY_EPOCHS` further boundaries have passed, covering slashes whose detection lags the offense by up to that many epochs.If the new version requires more stake, `msg.value` must equal the exact deficit; it is escrowed in the queue entry (not in the stake balance) until the boundary flip.If the new version requires less stake, no value moves at request time. At settlement the surplus above the new stake amount, computed from the balance as it stands post-slash, is credited to the reward recipient for `claimRefund` withdrawal; the slashed remainder of the surplus is consolidated on Issuance.A repeat request overwrites the pending entry, returning any prior escrow to its funder and re-stamping the request epoch.If a validator has been slashed and has accrued rewards, settling a lower `stakeAmount` may zero claimable rewards since rewards are derived as `balance - stakeAmount`. The recipient still receives the correct total ETH via the refund. Validators should claim rewards before requesting if they have both accrued rewards and pending slashes."},"setApprovalForAll(address,bool)":{"notice":"Wouldn't do anything because transfers are disabled but explicitly disallow anyway"},"setNextCommitteeSize(uint16)":{"notice":"Set the internal value for the nextCommitteeSize.Reverts if the newSize is larger than the number of active/pending validators."},"setTopUpAuthorityRequired(bool)":{"notice":"Toggles whether `topUpSlashedStake` is restricted to the governance top-up authority"},"setValidatorRegion(address,uint8)":{"notice":"Sets the GSMA region identifier for a validator. Only callable by governance (owner)."},"stake(bytes,(bytes))":{"notice":"Caller must already have been issued a `ConsensusNFT` by Telcoin governanceEnsuring `uncompressedPubkey` corresponds to `ValidatorInfo::blsPubkey` is better performed externally in Rust by the protocol due to EIP2537 precompile & EVM limitations so this contract does not perform any (un)compression checks"},"tokenURI(uint256)":{"notice":"Read-only mechanism, not yet live"},"topUpAuthorityRequired()":{"notice":"When true, `topUpSlashedStake` is restricted to governance; when false, validators and their delegators may also restore their own slashed stake"},"topUpSlashedStake(address)":{"notice":"Restores a slashed validator's balance to its version's full stake amount"},"transferFrom(address,address,uint256)":{"notice":"Consensus NFTs are soulbound to validators and cannot be transferred unless burned"},"unpause()":{"notice":"Does not affect system callable or ConsensusNFT fns. Only accessible by `owner`"},"unstake(address,bool)":{"notice":"May be used to reverse validator onboarding pre-activation or permanently retire after full exitOnce unstaked and retired, validator addresses cannot be reusedThe payout is pushed with a bounded gas stipend and falls back to a `claimRefund` credit for the full amount if the recipient rejects it, so a recipient that becomes uncallable cannot strand the stake. The withdrawal settles and the validator retires either way"},"upgradeStakeVersion((uint256,uint256,uint256,uint32))":{"notice":"The new version takes effect in the next epoch"}},"version":1}},"settings":{"remappings":["@ensdomains/=lib/v4-core/node_modules/@ensdomains/","@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/","@uniswap/v4-core/=lib/v4-core/","ds-test/=lib/v4-core/lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/","forge-gas-snapshot/=lib/v4-periphery/lib/permit2/lib/forge-gas-snapshot/src/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/","hardhat/=lib/v4-core/node_modules/hardhat/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/","permit2/=lib/v4-periphery/lib/permit2/","safe-contracts/=lib/safe-contracts/","solady/=lib/solady/src/","solmate/=lib/v4-core/lib/solmate/","v4-core/=lib/v4-core/src/","v4-periphery/=lib/v4-periphery/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"none"},"compilationTarget":{"src/consensus/ConsensusRegistry.sol":"ConsensusRegistry"},"evmVersion":"prague","libraries":{}},"sources":{"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/Ownable.sol":{"keccak256":"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb","urls":["bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6","dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol":{"keccak256":"0x880da465c203cec76b10d72dbd87c80f387df4102274f23eea1f9c9b0918792b","urls":["bzz-raw://399594cd8bb0143bc9e55e0f1d071d0d8c850a394fb7a319d50edd55d9ed822b","dweb:/ipfs/QmbPZzgtT6LEm9CMqWfagQFwETbV1ztpECBB1DtQHrKiRz"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC721/ERC721.sol":{"keccak256":"0x39ed367e54765186281efcfe83e47cf0ad62cc879f10e191360712507125f29a","urls":["bzz-raw://2c5ae6d85bd48cca8d6d2fcec8c63efd86f56f8a5832577a47e403ce0e65cb09","dweb:/ipfs/QmUtcS8AbRSWhuc61puYet58os8FvSqm329ChoW8wwZXZk"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC721/IERC721.sol":{"keccak256":"0x5dc63d1c6a12fe1b17793e1745877b2fcbe1964c3edfd0a482fac21ca8f18261","urls":["bzz-raw://6b7f97c5960a50fd1822cb298551ffc908e37b7893a68d6d08bce18a11cb0f11","dweb:/ipfs/QmQQvxBytoY1eBt3pRQDmvH2hZ2yjhs12YqVfzGm7KSURq"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC721/IERC721Receiver.sol":{"keccak256":"0xb5afb8e8eebc4d1c6404df2f5e1e6d2c3d24fd01e5dfc855314951ecfaae462d","urls":["bzz-raw://78586466c424f076c6a2a551d848cfbe3f7c49e723830807598484a1047b3b34","dweb:/ipfs/Qmb717ovcFxm7qgNKEShiV6M9SPR3v1qnNpAGH84D6w29p"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721Enumerable.sol":{"keccak256":"0x5191f783af281c75b7de0f1e3e36cdc6ac5cb2358d929584c4953fd02fa2b5eb","urls":["bzz-raw://d3ca2689d95ba45e297e55c8f71112e3ccec701d0087cb5e1c6ecb1b9ce86f00","dweb:/ipfs/QmNQ5xKxJpF9k7AahnmJYvg5XeGSYtRig2Lp2WHmWXyBze"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/IERC721Enumerable.sol":{"keccak256":"0x3d6954a93ac198a2ffa384fa58ccf18e7e235263e051a394328002eff4e073de","urls":["bzz-raw://1f58c799bd939d3951c94893e83ef86acd56989d1d7db7f9d180c515e29e28ff","dweb:/ipfs/QmTgAxHAAys4kq9ZfU9YB24MWYoHLGAKSxnYUigPFrNW7g"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/IERC721Metadata.sol":{"keccak256":"0x37d1aaaa5a2908a09e9dcf56a26ddf762ecf295afb5964695937344fc6802ce1","urls":["bzz-raw://ed0bfc1b92153c5000e50f4021367b931bbe96372ac6facec3c4961b72053d02","dweb:/ipfs/Qmbwp8VDerjS5SV1quwHH1oMXxPQ93fzfLVqJ2RCqbowGE"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC721/utils/ERC721Utils.sol":{"keccak256":"0x40399695922383778f9f540a620bec475a2f8e0f08d41f0005682842e28a9855","urls":["bzz-raw://746d295e403931aeb9d6065fd5a0871f43ab5459814a60623611e4b6641a09fd","dweb:/ipfs/QmWrgT8YJrQ9FfD1o3YYArwo57e7MGdpFKuM74qJ4qE34E"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Base64.sol":{"keccak256":"0xbee2b819e1b4bf569ffc1b1b9d560b4abd6a589575f3093edaab9244de18a0c2","urls":["bzz-raw://e478c0e9bbf3eb8cd3b7784f9b397603e34747f9ffd16571ed1d89ce102de389","dweb:/ipfs/QmZ6zXpwy5xRxx9RkodJmDZSUTeEqPQUanAC5TUoYqW2VR"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Context.sol":{"keccak256":"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2","urls":["bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12","dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Panic.sol":{"keccak256":"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a","urls":["bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a","dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Pausable.sol":{"keccak256":"0xb2e5f50762c27fb4b123e3619c3c02bdcba5e515309382e5bfb6f7d6486510bd","urls":["bzz-raw://1a4b83328c98d518a2699c2cbe9e9b055e78aa57fa8639f1b88deb8b3750b5dc","dweb:/ipfs/QmXdcYj5v7zQxXFPULShHkR5p4Wa2zYuupbHnFdV3cHYtc"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/SlotDerivation.sol":{"keccak256":"0x8447b57b63810fe2e367c09496a966f143ec0e825d71ddb9fce2506cff84b618","urls":["bzz-raw://996cb48f793bf151555045b37138e36b3cdb31d6bc6552d3149285260be00cfb","dweb:/ipfs/QmcLaTTMNVbkMx58xhkp6GeFt4V3GtSyupZuaKG3vYW2Zc"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Strings.sol":{"keccak256":"0x44f87e91783e88415bde66f1a63f6c7f0076f2d511548820407d5c95643ac56c","urls":["bzz-raw://13a51bc2b23827744dcf5bad10c69e72528cf015a6fe48c93632cdb2c0eb1251","dweb:/ipfs/QmZwPA47Yqgje1qtkdEFEja8ntTahMStYzKf5q3JRnaR7d"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/TransientSlot.sol":{"keccak256":"0x9303ef5a2beb555e52ce56598de205ce07ca8988fc67d073687c06cb8fc973d1","urls":["bzz-raw://8b2e48fb42844c25e6cb38e7cfa1d91dcdc054613fd10f608833dbc677acf889","dweb:/ipfs/QmT4HQxbgpWA3fZnK4dY3eXHNCoyBvpvzNq5k7eSt5mR5t"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/introspection/ERC165.sol":{"keccak256":"0xddce8e17e3d3f9ed818b4f4c4478a8262aab8b11ed322f1bf5ed705bb4bd97fa","urls":["bzz-raw://8084aa71a4cc7d2980972412a88fe4f114869faea3fefa5436431644eb5c0287","dweb:/ipfs/Qmbqfs5dRdPvHVKY8kTaeyc65NdqXRQwRK7h9s5UJEhD1p"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol":{"keccak256":"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8","urls":["bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621","dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/math/Math.sol":{"keccak256":"0xa00be322d7db5786750ce0ac7e2f5b633ac30a5ed5fa1ced1e74acfc19acecea","urls":["bzz-raw://6c84e822f87cbdc4082533b626667b6928715bb2b1e8e7eb96954cebb9e38c8d","dweb:/ipfs/QmZmy9dgxLTerBAQDuuHqbL6EpgRxddqgv5KmwpXYVbKz1"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol":{"keccak256":"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54","urls":["bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8","dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol":{"keccak256":"0xb1970fac7b64e6c09611e6691791e848d5e3fe410fa5899e7df2e0afd77a99e3","urls":["bzz-raw://db5fbb3dddd8b7047465b62575d96231ba8a2774d37fb4737fbf23340fabbb03","dweb:/ipfs/QmVUSvooZKEdEdap619tcJjTLcAuH6QBdZqAzWwnAXZAWJ"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol":{"keccak256":"0x9b161e97b8967d4bc0c08d25741889a30692cdda4b71910bf1b0e315f1962212","urls":["bzz-raw://821500c39d095eaa25b06f46e65f1d0e97c4c96b39227f79077dee7d9e84051f","dweb:/ipfs/QmSTeGorKzSWF6HAmxo32uCZiEuKNvreQdUiX1AaYtUMTz"],"license":"MIT"},"lib/solady/src/utils/ECDSA.sol":{"keccak256":"0xb0754260daabfe6f20dd16f2213823f27c8df1089b43c8eda9b3c2a6eca07478","urls":["bzz-raw://ffef4ca363ec0e2437b5e195fbb3d58bdc6750921fce32f351ca1c092ad36a75","dweb:/ipfs/QmTcnAyxwvQg3h357PdB8S8oz5bBt85J4SvEgmMqwAfPKF"],"license":"MIT"},"lib/solady/src/utils/EIP712.sol":{"keccak256":"0x53ccaa757944900e7423347c3c35ea5a905580f3f075452b8468a501a9c39839","urls":["bzz-raw://aa5688d98319fbeb5b3c46330a394e15a0f2c862d651415e183da4179b918351","dweb:/ipfs/QmZZFrFWmUCFL1qkZDVm3oqrDkQfumYnnksF6cpPkAHdtJ"],"license":"MIT"},"lib/solady/src/utils/ReentrancyGuard.sol":{"keccak256":"0xdb28f318ec45197a6c7cc2abebed67d7cb8b965838ef962e3844423256a9ddb8","urls":["bzz-raw://873cd46b77a2aeb781e7a0d131e7299151323ed884c330101a51d0727e218d98","dweb:/ipfs/QmddadCjyedztvdSgLZEyKWoRes2SqtpviSjhEbSNrkUoi"],"license":"MIT"},"lib/solady/src/utils/SignatureCheckerLib.sol":{"keccak256":"0x098c7eb88b3048f227b240e0e5bf1da4a8f7622b30f6d7c06416bfcab3225e77","urls":["bzz-raw://50c2766f652916c5d6433665fb1c3b2f04c3d9292a35c12e0f8d7c71dd6438cb","dweb:/ipfs/QmWTMwN2RDZUUPg7KkH1qFBjTSh84Zw8bbYwRBCQUtLN2h"],"license":"MIT"},"src/consensus/ConsensusRegistry.sol":{"keccak256":"0x8b8716bbaacf5895e5dc8d716217b50de18a021c515f2a57419bac8c16248375","urls":["bzz-raw://6172c1e319b5b8236d9e2d9fe9cada878b5c2ce1b53bb21edd798255aece58fb","dweb:/ipfs/QmdUC5aXd4vNPQzmb7AhsMMAxiZPbw8SDF81KA63PF3jPZ"],"license":"MIT or Apache-2.0"},"src/consensus/Issuance.sol":{"keccak256":"0xdbb33a3ff5e4afa3c5d107051647db33d86e95cd2686c0207fe8602f99a7d14a","urls":["bzz-raw://082e686f08caf3840b309f72b8e480b4ba3d4b90c42c18fb831c1a4b7ecdd727","dweb:/ipfs/QmT37vqjVGk1RsDc3BJCvVNYcLNuP9hTDK9vvsvykZHohG"],"license":"MIT or Apache-2.0"},"src/consensus/StakeManager.sol":{"keccak256":"0xeca79ef817e46ae16b09057227db217ce4788e4136574dd09f8434e9c748a57e","urls":["bzz-raw://e466ebc4b2654b440b4ecb6fd051b09d60169115f02b0321807d693a24d31484","dweb:/ipfs/QmQ1iWvigtc1eb7kbVc8w22CxH2Uw6htgQsLTfw3xquJRQ"],"license":"MIT or Apache-2.0"},"src/consensus/SystemCallable.sol":{"keccak256":"0xed0e78873f3f574356c3bd6fcaa8f1869415aec576586530f74a599e3c767ead","urls":["bzz-raw://30b23f67de5abff6a021ff3456fa596585c57a6d09562e2a3ef4cb719b673e28","dweb:/ipfs/QmYRrBUKeSSEXBfrsw4arse3c9jCsuw3hHsHpjJeEqHNwS"],"license":"MIT or Apache-2.0"},"src/interfaces/IBlsG1.sol":{"keccak256":"0x950230ff0bed0ae8c0dbef2d22a24fb4114a00c23604619b9dccfd3cbe370ab0","urls":["bzz-raw://27432929c7726f7edb4b62981d0ca6bdb5bbada573a835f787556ff442b64c15","dweb:/ipfs/QmSBLDrPL47intGub7yHRC4JRVSyYSW4dSnQMGFQKK7Z8E"],"license":"MIT"},"src/interfaces/IConsensusRegistry.sol":{"keccak256":"0xd21fdfe6b1f601a70dd9ea80802b6cb92d98a7a751058862544cc1ccf512a6f8","urls":["bzz-raw://993174c548c1d8170e87fa3fe7e33368838492883f053ea17ee765b93ce00255","dweb:/ipfs/QmbdvPt6DhckDw1zp4AznyUqP91hqm5ihyqFUagbJj1Au5"],"license":"MIT or Apache-2.0"},"src/interfaces/IStakeManager.sol":{"keccak256":"0x9ebbe68f51a2762faf78f5ed41297f784ad7e0e2acd7c90015f17d7c401fc7bc","urls":["bzz-raw://9b6ef102e0109e15142fff1b7bc20450ed92a7b6b7eabb7106abfc1432ef77e5","dweb:/ipfs/QmcL9t5oEp3zFo1d2Fe9i73wCtnoPVS6ruaVAYdpKX6zuy"],"license":"MIT or Apache-2.0"}},"version":1},"id":56} \ No newline at end of file diff --git a/src/consensus/ConsensusRegistry.sol b/src/consensus/ConsensusRegistry.sol index bc3a5ce..ce9034c 100644 --- a/src/consensus/ConsensusRegistry.sol +++ b/src/consensus/ConsensusRegistry.sol @@ -65,6 +65,11 @@ contract ConsensusRegistry is StakeManager, Pausable, Ownable, ReentrancyGuard, /// @notice When true, `topUpSlashedStake` is restricted to governance; when false, validators /// and their delegators may also restore their own slashed stake bool public topUpAuthorityRequired; + /// @dev The Issuance-backed half of the credit ledger, keyed by recipient: the reward leg of a + /// withdrawal whose push failed. Held separately from `claimableRefunds` because the two are + /// backed by different contracts - stake by this one, rewards by Issuance - and `claimRefund` + /// pays each from its own source. Appended at the storage tail to preserve every existing slot + mapping(address => uint256) public claimableRewards; /// @dev Signals a validator's pending status until activation/exit to correctly apply incentives uint32 internal constant PENDING_EPOCH = type(uint32).max; @@ -149,6 +154,9 @@ contract ConsensusRegistry is StakeManager, Pausable, Ownable, ReentrancyGuard, // (restorable via `topUpSlashedStake`). Rewards above the stake amount never add weight uint256 versionStakeAmount = versions[rewardeeVersion].stakeAmount; uint256 balance = balances[reward.validatorAddress]; + // this cap is also what makes an entry naming a never-staked address inert: its balance + // is zero, so it carries no weight and receives nothing. `applySlashes` cannot rely on + // the same property and screens those entries explicitly uint256 stakeAmount = balance < versionStakeAmount ? balance : versionStakeAmount; uint256 weight = stakeAmount * reward.consensusHeaderCount; @@ -193,6 +201,15 @@ contract ConsensusRegistry is StakeManager, Pausable, Ownable, ReentrancyGuard, // unless validator was forcibly retired & ejected via burn: skip if (isRetired(slash.validatorAddress)) continue; + // an `Undefined` entry never staked, so it backs no balance and there is nothing to + // decrement: it either holds no ConsensusNFT at all or was whitelisted by governance + // and never staked. `isRetired` is false in both cases, so without this skip the zero + // balance falls through to the ejection branch, which would burn a nonexistent token + // and stall the boundary, or ship a full stake amount drawn from other validators' + // collateral to Issuance. The system caller does no membership filtering, so entries + // are screened here, the same short-circuit `burn` applies before ejecting + if (validators[slash.validatorAddress].currentStatus == ValidatorStatus.Undefined) continue; + if (balances[slash.validatorAddress] > slash.amount) { // ledger-only decrement: the confiscated native TEL remains held by this contract // and is consolidated on Issuance at settlement (unstake, burn, or a queued @@ -639,7 +656,7 @@ contract ConsensusRegistry is StakeManager, Pausable, Ownable, ReentrancyGuard, } /// @inheritdoc IConsensusRegistry - function topUpSlashedStake(address validatorAddress) external payable override whenNotPaused { + function topUpSlashedStake(address validatorAddress) external payable override whenNotPaused nonReentrant { // require `validatorAddress` is known & whitelisted, having been issued a ConsensusNFT by governance _checkConsensusNFTOwner(validatorAddress); @@ -684,7 +701,7 @@ contract ConsensusRegistry is StakeManager, Pausable, Ownable, ReentrancyGuard, } /// @inheritdoc IConsensusRegistry - function activate() external override whenNotPaused { + function activate() external override whenNotPaused nonReentrant { // require caller is whitelisted, having been issued a ConsensusNFT by governance _checkConsensusNFTOwner(msg.sender); @@ -753,17 +770,22 @@ contract ConsensusRegistry is StakeManager, Pausable, Ownable, ReentrancyGuard, // 5. `Staked` validators settle immediately: they are not in service, never members of a // committee, and can already reclaim their full stake at any time via `unstake` if (status == ValidatorStatus.Staked) { + // record the new version before settling. The decrease branch debits the balance and + // then pushes the surplus to the recipient, and every function the recipient reenters + // during that push resolves the stake amount through the recorded version: were the + // version still the old one, the debited balance would read as a slash of exactly the + // surplus, and `topUpSlashedStake` would restore stake the validator never lost + validator.stakeVersion = targetVersion; + if (_isDelegated(validatorAddress)) { + delegations[validatorAddress].validatorVersion = targetVersion; + } + if (deficit > 0) { balances[validatorAddress] += deficit; } else if (newStakeAmount < oldStakeAmount) { _settleStakeDecrease(validatorAddress, recipient, oldStakeAmount, newStakeAmount); } - validator.stakeVersion = targetVersion; - if (_isDelegated(validatorAddress)) { - delegations[validatorAddress].validatorVersion = targetVersion; - } - emit ValidatorStakeVersionUpgraded( validatorAddress, oldVersion, targetVersion, oldStakeAmount, newStakeAmount ); @@ -799,15 +821,27 @@ contract ConsensusRegistry is StakeManager, Pausable, Ownable, ReentrancyGuard, /// @inheritdoc IStakeManager function claimRefund() external override whenNotPaused nonReentrant { - uint256 amount = claimableRefunds[msg.sender]; - if (amount == 0) revert NoClaimableRefund(); + uint256 stakeLeg = claimableRefunds[msg.sender]; + uint256 rewardLeg = claimableRewards[msg.sender]; + if (stakeLeg + rewardLeg == 0) revert NoClaimableRefund(); + + // the stake leg is this contract's own native TEL and is always payable; the reward leg is + // paid out of Issuance, so cap it at what Issuance holds and leave the remainder credited + // rather than reverting the whole claim over a reward pool that ran dry + uint256 payableRewards = rewardLeg > issuance.balance ? issuance.balance : rewardLeg; + uint256 payout = stakeLeg + payableRewards; + // a reward-only credit against a pool that has run dry has nothing to deliver yet; say so + // rather than completing as a transfer of zero and reporting it as a claim + if (payout == 0) revert NoClaimableRefund(); + claimableRefunds[msg.sender] = 0; + claimableRewards[msg.sender] = rewardLeg - payableRewards; // full-gas push through Issuance; a revert here affects only the caller, whose credit is // preserved by the transaction reverting as a whole - Issuance(issuance).distributeStakeReward{ value: amount }(msg.sender, 0); + Issuance(issuance).distributeStakeReward{ value: stakeLeg }(msg.sender, payableRewards); - emit RefundClaimed(msg.sender, amount); + emit RefundClaimed(msg.sender, payout); } /// @notice Returns the validators with a queued stake version change, in set order @@ -840,8 +874,12 @@ contract ConsensusRegistry is StakeManager, Pausable, Ownable, ReentrancyGuard, if (refundAmount > 0) { balances[validatorAddress] -= refundAmount; - // Route through Issuance (same pattern as _unstake) - Issuance(issuance).distributeStakeReward{ value: refundAmount }(recipient, 0); + // push with a gas cap and fall back to a `claimRefund` credit, matching what the + // boundary lane does for this same settlement. The recipient of a delegated validator's + // refund is its delegator, an address the validator can neither change nor remove, so + // the two lanes must agree that a recipient which stops accepting value defers its own + // payout rather than blocking the operation + _settleValue(recipient, refundAmount); } // consolidate confiscated slash remainder on Issuance (same as _unstake pattern) @@ -906,6 +944,11 @@ contract ConsensusRegistry is StakeManager, Pausable, Ownable, ReentrancyGuard, revert AlreadyDefined(validatorAddress); } + // stamp the address onto the still-`Undefined` record so a governance burn before the + // validator ever stakes emits lifecycle events naming it; every other field is left at its + // default and `_recordStaked` overwrites the record wholesale at stake time + validators[validatorAddress].validatorAddress = validatorAddress; + // issue the ConsensusNFT _mint(validatorAddress, _getTokenId(validatorAddress)); } @@ -1205,6 +1248,19 @@ contract ConsensusRegistry is StakeManager, Pausable, Ownable, ReentrancyGuard, } } + /// @inheritdoc StakeManager + function _settleStakePayout(address recipient, uint256 unstakeAmt, uint256 rewards) internal override { + try Issuance(issuance).distributeStakeReward{ value: unstakeAmt, gas: REFUND_GAS_LIMIT }(recipient, rewards) { } + catch { + // the recipient rejected the push, so each leg stays where it already sits and backs its + // half of the credit: the stake on this contract, the rewards on Issuance. `claimRefund` + // then delivers both in the single transfer this push would have made + if (unstakeAmt > 0) claimableRefunds[recipient] += unstakeAmt; + if (rewards > 0) claimableRewards[recipient] += rewards; + emit RefundQueued(recipient, unstakeAmt + rewards); + } + } + /// @dev The single point that mutates per-status set membership and the cached eligible count. Removes /// the validator from its old status set and adds it to the new one, keeping the sets in lockstep with /// `currentStatus`. `Undefined` and `Any` carry no set (the latter is the retired sentinel), so they are diff --git a/src/consensus/StakeManager.sol b/src/consensus/StakeManager.sol index 06d6eb3..0fee07e 100644 --- a/src/consensus/StakeManager.sol +++ b/src/consensus/StakeManager.sol @@ -253,12 +253,27 @@ abstract contract StakeManager is ERC721Enumerable, EIP712, IStakeManager { // shortfall, so an underfunded reward pool can never block a stake withdrawal if (acceptRewardShortfall && rewards > issuance.balance) rewards = issuance.balance; + // a reward pool that cannot cover the rewards leg is the caller's decision to make, so raise it + // here rather than let the payout's credit fallback absorb it: settling for less than the full + // amount stays reachable only by accepting the shortfall + uint256 issuanceBal = issuance.balance; + if (rewards > issuanceBal) { + revert Issuance.InsufficientBalance(issuanceBal + unstakeAmt, unstakeAmt + rewards); + } + // debit `unstakeAmt` due to recipient from this contract balance, debit rewards from Issuance balance - Issuance(issuance).distributeStakeReward{ value: unstakeAmt }(recipient, rewards); + _settleStakePayout(recipient, unstakeAmt, rewards); return unstakeAmt + rewards; } + /// @dev Delivers a settled withdrawal of `unstakeAmt` from this contract's balance plus `rewards` + /// from Issuance's to `recipient`. Left to the inheriting registry so the push can degrade to a + /// pull-based credit: the recipient of a delegated validator's stake is its delegator, an address + /// the validator cannot change or remove, so a delegator that becomes uncallable after the + /// delegation is formed must not be able to hold the validator's stake hostage. + function _settleStakePayout(address recipient, uint256 unstakeAmt, uint256 rewards) internal virtual; + function _checkRewards(address validatorAddress, uint8 validatorVersion) internal virtual returns (uint256) { uint256 initialStake = versions[validatorVersion].stakeAmount; uint256 rewards = _getRewards(validatorAddress, initialStake); diff --git a/src/consensus/invariants.md b/src/consensus/invariants.md index f611929..732e5b9 100644 --- a/src/consensus/invariants.md +++ b/src/consensus/invariants.md @@ -58,6 +58,7 @@ - `delegateStake` accepts a delegation only from the authority that owns the validator address: an EOA is held to its secp256k1 key whether or not it carries an EIP-7702 delegation designator, and only a genuine contract account authorizes through ERC-1271. Code size does not decide this - a delegated EOA has 23 bytes of code - so the designator is matched by its `0xef0100` prefix, which EIP-3541 makes unambiguous. A validator's delegated wallet program is never accepted as a stand-in for its key, since that program is revocable and the digest is public - the boundary is three system calls the protocol sequences within the closing block - applyIncentives, then applySlashes, then concludeEpoch - and that ordering is a security invariant: slashes land on full old-version collateral before the version-queue settlement inside concludeEpoch reads post-slash balances, and the protocol assembles the committee after slashes so ejections are reflected in both the committee contents and the size check - applyIncentives and applySlashes skip sentinel-address and retired entries rather than reverting, so no malformed system-call input can stall the boundary +- neither system call may act on an address that never staked, whether it holds no ConsensusNFT at all or was whitelisted and never staked; the system caller does no membership filtering of its own. `applySlashes` screens those entries by status, since a zero balance otherwise falls through to its ejection branch, which would burn a nonexistent token and stall the boundary or ship a stake amount the address never deposited to Issuance out of other validators' collateral. `applyIncentives` needs no such check: capping weight at the outstanding balance already leaves a zero-balance entry weightless, and screening by status there costs measurable gas per rewardee on the boundary path - in-service validator stake versions change only inside concludeEpoch, so reward weights are stable within an epoch: applyIncentives always reads the version that was active for the entire closing epoch - a queued stake increase's escrow lives in the queue entry, never in `balances`, so it is invisible to reward accounting until the boundary flip credits it and raises the reward floor atomically - stake decreases age `STAKE_DECREASE_DELAY_EPOCHS` boundaries before settling; settlement refunds are computed from post-slash balances, and no request or cancellation timing can move value ahead of a slash @@ -66,9 +67,13 @@ - validators with both accrued rewards and a pending slash should claim rewards before requesting a stake-decreasing change; a stake-decreasing settlement on a partially slashed validator may zero claimable rewards (the recipient still receives the correct total ETH via the refund) - boundary settlement refunds always accrue as `claimRefund` credits, so concludeEpoch performs no recipient-facing external calls and no recipient can revert or grief it; credits are keyed by recipient and survive validator retirement; user-initiated escrow returns push with a gas cap and fall back to the same credit - retiring a validator (unstake, governance burn, slash-to-zero) drops its queue entry and credits any escrow back to the funder; escrow is never confiscable -- the registry's native balance always backs the sum of stake balances (up to lazily consolidated slash remainders), queue escrows, and unclaimed refund credits +- the registry's native balance always backs the sum of stake balances (up to lazily consolidated slash remainders), queue escrows, and unclaimed refund credits; the Issuance balance backs unclaimed reward credits, the reward leg of a withdrawal whose push failed +- every recipient-facing push in a user operation carries a gas cap and a `claimRefund` credit fallback: the withdrawal payout, the immediate `Staked` stake-decrease surplus, and user-initiated escrow returns. A recipient that stops accepting value therefore defers only its own payout and can never block the operation, matching what the boundary lane already does by crediting unconditionally +- a withdrawal payout is pushed with a gas cap and falls back to a `claimRefund` credit for the full amount, so no recipient can be stranded by its own account code. This matters for a delegated validator specifically: the recipient is the delegator, an address the validator can neither change nor remove, and a delegator that becomes uncallable after the delegation is formed would otherwise leave `burn` (which confiscates) as governance's only remedy. The credit splits along the two funding sources - stake leg on the registry, reward leg on Issuance - and `claimRefund` pays both in the single transfer the push would have made, capping the reward leg at Issuance's balance so a dry reward pool defers that leg rather than blocking the stake leg +- an uncoverable rewards leg still reverts `unstake` outright rather than degrading to a credit, so `acceptRewardShortfall` remains the only way to settle for less than the full amount - `requestStakeVersionChange` only permits forward version changes (targetVersion > currentVersion); moving to an earlier version index is rejected - `requestStakeVersionChange` is restricted to validators with status Staked, PendingActivation, or Active; `Staked` validators settle immediately since they are not in service and can already unstake in full at any time +- the immediate `Staked` settlement records the new stake version before pushing the surplus, so the recorded version and the balance never disagree across an external call. A validator whose balance has been debited while the old version is still recorded reads as slashed by exactly the surplus, which `topUpSlashedStake` would let it restore as stake it never lost; `topUpSlashedStake` and `activate` are additionally `nonReentrant` so neither can be entered from within another guarded function's push **protocol** diff --git a/src/interfaces/IStakeManager.sol b/src/interfaces/IStakeManager.sol index 43ca1c3..40d4c18 100644 --- a/src/interfaces/IStakeManager.sol +++ b/src/interfaces/IStakeManager.sol @@ -171,6 +171,9 @@ interface IStakeManager { /// @param acceptRewardShortfall When true, caps the rewards payout at the Issuance contract's available /// balance and permanently forfeits only the shortfall, so an underfunded reward pool can never /// block a stake withdrawal; identical to a normal unstake whenever Issuance can cover the rewards + /// @notice The payout is pushed with a bounded gas stipend and falls back to a `claimRefund` credit + /// for the full amount if the recipient rejects it, so a recipient that becomes uncallable cannot + /// strand the stake. The withdrawal settles and the validator retires either way function unstake(address validatorAddress, bool acceptRewardShortfall) external; /// @notice Returns the delegation digest that a validator should sign to accept a delegation @@ -256,8 +259,11 @@ interface IStakeManager { /// @dev Transfers the caller's accumulated refund credit /// @notice Credits accrue from boundary settlement refunds, escrow returns on retirement, and - /// user-initiated escrow returns whose push failed; they are detached from the validator - /// lifecycle and survive burns and retirement + /// user-initiated escrow returns and withdrawal payouts whose push failed; they are detached + /// from the validator lifecycle and survive burns and retirement + /// @notice A withdrawal payout credit carries a reward leg paid from Issuance. That leg is capped + /// at Issuance's balance and any remainder stays credited, so a reward pool that has run dry + /// defers part of a claim rather than blocking it function claimRefund() external; /// @dev Permissioned function to withdraw TEL from the Issuance contract to the caller diff --git a/test/consensus/ConsensusRegistryEIP7702Test.t.sol b/test/consensus/ConsensusRegistryEIP7702Test.t.sol index edc9227..6489787 100644 --- a/test/consensus/ConsensusRegistryEIP7702Test.t.sol +++ b/test/consensus/ConsensusRegistryEIP7702Test.t.sol @@ -25,6 +25,46 @@ contract PermissiveWallet { receive() external payable { } } +/// @dev A wallet program that snapshots the registry's view of its own account the moment it is +/// paid. Under EIP-7702 this runs in the delegating EOA's context, so `address(this)` is the +/// validator and the recorded values land in the EOA's storage. +contract ObservingWallet { + address public immutable registry; + + uint256 public observedBalance; + uint256 public observedStakeAmount; + + constructor(address registry_) { + registry = registry_; + } + + receive() external payable { + (observedBalance, observedStakeAmount,) = IStakeManager(registry).getBalanceBreakdown(address(this)); + } +} + +/// @dev A wallet program that reenters `topUpSlashedStake` for its own account the instant it is +/// paid, forwarding exactly the value it just received. The reentrant call's failure is swallowed +/// so the outer settlement proceeds either way and its end state can be asserted. +contract ReenteringTopUpWallet { + address public immutable registry; + + bool public reentryAttempted; + bool public reentrySucceeded; + + constructor(address registry_) { + registry = registry_; + } + + receive() external payable { + reentryAttempted = true; + (bool ok,) = registry.call{ value: msg.value }( + abi.encodeWithSelector(IConsensusRegistry.topUpSlashedStake.selector, address(this)) + ); + reentrySucceeded = ok; + } +} + /// @dev A genuine contract account that answers ERC-1271 against a fixed secp256k1 signer contract ERC1271Wallet { address public immutable signer; @@ -60,6 +100,7 @@ contract ConsensusRegistryEIP7702Test is ConsensusRegistryTestUtils { /// @dev A validator key distinct from the genesis set and from `validator5` uint256 internal constant DELEGATED_VALIDATOR_PK = 77; uint256 internal constant STRANGER_PK = 1337; + uint256 internal constant DELEGATOR_PK = 42; function setUp() public { consensusRegistry = ConsensusRegistry(0x07E17e17E17e17E17e17E17E17E17e17e17E17e1); @@ -94,10 +135,54 @@ contract ConsensusRegistryEIP7702Test is ConsensusRegistryTestUtils { vm.prank(crOwner); consensusRegistry.mint(validatorAddress); - delegator = _addressFromPrivateKey(42); + delegator = _addressFromPrivateKey(DELEGATOR_PK); vm.deal(delegator, stakeAmount_); } + /// @dev Mints and stakes `validator5`, leaving it `Staked` - the lane where a version change + /// settles immediately - then authors a lower stake version. Returns that version and the + /// surplus its settlement refunds. + function _prepareStakeDecrease(uint256 newStakeAmount) internal returns (uint8 newVersion, uint256 surplus) { + vm.deal(validator5, stakeAmount_); + vm.prank(crOwner); + consensusRegistry.mint(validator5); + vm.prank(validator5); + consensusRegistry.stake{ value: stakeAmount_ }( + validator5BlsPubkey, IStakeManager.ProofOfPossession(validator5BlsSig) + ); + + newVersion = _fuzz_upgradeGlobalStakeVersion(newStakeAmount); + surplus = stakeAmount_ - newStakeAmount; + } + + /// @dev Onboards a delegated validator whose stake came from `delegator`, leaving it `Staked`: + /// eligible to unstake, and the lane where a version change settles immediately. + function _delegatedValidator() internal returns (address validatorAddress, address delegator) { + validatorAddress = vm.addr(DELEGATED_VALIDATOR_PK); + delegator = _prepareDelegation(validatorAddress); + bytes memory blsPubkey = _blsDummyPubkeyFromSecret(DELEGATED_VALIDATOR_PK); + bytes memory blsSig = _blsDummySigFromSecret(DELEGATED_VALIDATOR_PK); + + uint256 deadline = block.timestamp + 1 days; + bytes memory validatorSig = _sign( + DELEGATED_VALIDATOR_PK, consensusRegistry.delegationDigest(blsPubkey, validatorAddress, delegator, deadline) + ); + + vm.prank(delegator); + consensusRegistry.delegateStake{ value: stakeAmount_ }( + blsPubkey, IStakeManager.ProofOfPossession(blsSig), validatorAddress, validatorSig, deadline + ); + } + + /// @dev The same, with an epoch of rewards accrued to the validator. + function _delegatedValidatorWithRewards() internal returns (address validatorAddress, address delegator) { + (validatorAddress, delegator) = _delegatedValidator(); + + RewardInfo[] memory rewards = new RewardInfo[](1); + rewards[0] = RewardInfo(validatorAddress, 100); + _concludeEpochWithRewards(_sortedGenesisCommittee(), rewards); + } + function _sign(uint256 pk, bytes32 digest) internal pure returns (bytes memory) { (uint8 v, bytes32 r, bytes32 s) = vm.sign(pk, digest); return abi.encodePacked(r, s, v); @@ -488,4 +573,167 @@ contract ConsensusRegistryEIP7702Test is ConsensusRegistryTestUtils { assertEq(consensusRegistry.claimableRefunds(validator5), deficit, "escrow credited, not pushed"); _assertSetInvariant(); } + + /* + * the stake-decrease settlement window + */ + + /// Settlement debits the balance and then pushes the surplus, and every function reachable from + /// that push resolves the stake amount through the recorded version. The version is therefore + /// written first: were the old one still recorded, the debited balance would read as a slash of + /// exactly the surplus for the duration of the push. + function test_requestStakeVersionChange_settlementPushSeesNewVersion() public { + uint256 newStakeAmount = stakeAmount_ / 2; + (uint8 newVersion, uint256 surplus) = _prepareStakeDecrease(newStakeAmount); + + ObservingWallet observer = new ObservingWallet(address(consensusRegistry)); + vm.signAndAttachDelegation(address(observer), validator5Secret); + + vm.prank(validator5); + consensusRegistry.requestStakeVersionChange(validator5, newVersion); + + assertEq(validator5.balance, surplus, "the surplus must reach the recipient"); + assertEq( + ObservingWallet(payable(validator5)).observedStakeAmount(), + newStakeAmount, + "the recorded version must already resolve to the new stake amount mid-push" + ); + assertEq( + ObservingWallet(payable(validator5)).observedBalance(), + newStakeAmount, + "balance and recorded version must agree, or the debit reads as a slash" + ); + assertEq(consensusRegistry.getRewards(validator5), 0, "settlement must manufacture no rewards"); + } + + /// The concrete exploit that window enabled: a validator whose 7702 handler reenters + /// `topUpSlashedStake` while being paid its surplus, restoring stake it never lost and booking + /// the difference as rewards `applyIncentives` never issued. + function testRevert_topUpSlashedStake_reentrantDuringStakeDecreaseSettlement() public { + uint256 newStakeAmount = stakeAmount_ / 2; + (uint8 newVersion, uint256 surplus) = _prepareStakeDecrease(newStakeAmount); + + ReenteringTopUpWallet attacker = new ReenteringTopUpWallet(address(consensusRegistry)); + vm.signAndAttachDelegation(address(attacker), validator5Secret); + + vm.prank(validator5); + consensusRegistry.requestStakeVersionChange(validator5, newVersion); + + assertTrue(ReenteringTopUpWallet(payable(validator5)).reentryAttempted(), "the handler must have run"); + assertFalse(ReenteringTopUpWallet(payable(validator5)).reentrySucceeded(), "the reentrant top-up must fail"); + assertEq(validator5.balance, surplus, "the surplus stays with the recipient, not restored as stake"); + + (uint256 outstanding, uint256 initialStake, uint256 rewards) = + consensusRegistry.getBalanceBreakdown(validator5); + assertEq(outstanding, newStakeAmount); + assertEq(initialStake, newStakeAmount); + assertEq(rewards, 0, "no rewards may be manufactured against a validator that was never slashed"); + } + + /* + * a withdrawal payout survives a recipient that stops accepting value + */ + + /// A delegated validator's stake is paid to its delegator, an address the validator can neither + /// change nor remove: `delegations` clears only on burn. A delegator that was a plain EOA when + /// the delegation was formed can attach a reverting 7702 handler afterwards, which would strand + /// the stake permanently - governance's only remedy being `burn`, which confiscates rather than + /// returns it. The payout degrades to a pull-based credit instead. + function test_unstake_revertingDelegatorCreditsRatherThanBricks() public { + (address validatorAddress, address delegator) = _delegatedValidatorWithRewards(); + uint256 rewards = consensusRegistry.getRewards(validatorAddress); + assertGt(rewards, 0); + + uint256 registryBalBefore = address(consensusRegistry).balance; + uint256 issuanceBalBefore = issuance.balance; + + // only now does the delegator become uncallable + vm.signAndAttachDelegation(address(revertingWallet), DELEGATOR_PK); + (bool reachable,) = delegator.call{ value: 0 }(""); + assertFalse(reachable, "the delegator must reject plain calls for this test to mean anything"); + + vm.expectEmit(true, true, true, true); + emit RefundQueued(delegator, stakeAmount_ + rewards); + vm.prank(validatorAddress); + consensusRegistry.unstake(validatorAddress, false); + + assertTrue(consensusRegistry.isRetired(validatorAddress), "the withdrawal must still settle"); + assertEq(consensusRegistry.claimableRefunds(delegator), stakeAmount_, "the stake leg is credited"); + assertEq(consensusRegistry.claimableRewards(delegator), rewards, "the reward leg is credited"); + assertEq(delegator.balance, 0); + assertEq(address(consensusRegistry).balance, registryBalBefore, "the stake leg stays here, backing its credit"); + assertEq(issuance.balance, issuanceBalBefore, "the reward leg stays on Issuance, backing its credit"); + + // the delegator moves to a wallet program that accepts value and pulls the full amount + vm.signAndAttachDelegation(address(permissiveWallet), DELEGATOR_PK); + vm.prank(delegator); + consensusRegistry.claimRefund(); + + assertEq(delegator.balance, stakeAmount_ + rewards, "both legs deliver in one transfer"); + assertEq(consensusRegistry.claimableRefunds(delegator), 0); + assertEq(consensusRegistry.claimableRewards(delegator), 0); + } + + /// The immediate `Staked` lane pushes a stake-decrease surplus to the recipient where the + /// boundary lane credits it. A hostile delegator must not be able to block the operation + /// through that difference, so both lanes settle the same way. + function test_requestStakeVersionChange_revertingDelegatorCreditsSurplus() public { + (address validatorAddress, address delegator) = _delegatedValidator(); + + uint256 newStakeAmount = stakeAmount_ / 2; + uint8 newVersion = _fuzz_upgradeGlobalStakeVersion(newStakeAmount); + uint256 surplus = stakeAmount_ - newStakeAmount; + + // only now does the delegator become uncallable + vm.signAndAttachDelegation(address(revertingWallet), DELEGATOR_PK); + + vm.expectEmit(true, true, true, true); + emit RefundQueued(delegator, surplus); + vm.prank(validatorAddress); + consensusRegistry.requestStakeVersionChange(validatorAddress, newVersion); + + assertEq(consensusRegistry.claimableRefunds(delegator), surplus, "the surplus is credited, not pushed"); + assertEq(delegator.balance, 0); + (uint256 outstanding, uint256 initialStake, uint256 rewards) = + consensusRegistry.getBalanceBreakdown(validatorAddress); + assertEq(outstanding, newStakeAmount, "the decrease must still settle"); + assertEq(initialStake, newStakeAmount); + assertEq(rewards, 0); + } + + /// The credit's reward leg is paid from Issuance, so a reward pool that has run dry defers that + /// leg rather than blocking the stake leg with it. Nothing is forfeited: the remainder stays + /// credited until Issuance is funded again. + function test_claimRefund_dryIssuanceDefersRewardLegOnly() public { + (address validatorAddress, address delegator) = _delegatedValidatorWithRewards(); + uint256 rewards = consensusRegistry.getRewards(validatorAddress); + + vm.signAndAttachDelegation(address(revertingWallet), DELEGATOR_PK); + vm.prank(validatorAddress); + consensusRegistry.unstake(validatorAddress, false); + + // the pool can cover only half the credited rewards by the time the delegator claims + uint256 payable_ = rewards / 2; + vm.deal(issuance, payable_); + vm.signAndAttachDelegation(address(permissiveWallet), DELEGATOR_PK); + vm.prank(delegator); + consensusRegistry.claimRefund(); + + assertEq(delegator.balance, stakeAmount_ + payable_, "the stake leg must not be held up by the reward leg"); + assertEq(consensusRegistry.claimableRefunds(delegator), 0); + assertEq(consensusRegistry.claimableRewards(delegator), rewards - payable_, "the remainder stays credited"); + + // with only an unpayable reward leg left, a claim reports that rather than transferring zero + vm.deal(issuance, 0); + vm.prank(delegator); + vm.expectRevert(NoClaimableRefund.selector); + consensusRegistry.claimRefund(); + + // funding the pool makes the remainder claimable + vm.deal(issuance, rewards - payable_); + vm.prank(delegator); + consensusRegistry.claimRefund(); + assertEq(delegator.balance, stakeAmount_ + rewards); + assertEq(consensusRegistry.claimableRewards(delegator), 0); + } } diff --git a/test/consensus/ConsensusRegistryEjectionTest.t.sol b/test/consensus/ConsensusRegistryEjectionTest.t.sol index f4b69f9..a137065 100644 --- a/test/consensus/ConsensusRegistryEjectionTest.t.sol +++ b/test/consensus/ConsensusRegistryEjectionTest.t.sol @@ -478,6 +478,94 @@ contract ConsensusRegistryEjectionTest is ConsensusRegistryTestUtils { assertEq(rewardsAfter, 0, "reward claim wiped with the ledger"); } + /// C5: an address that never held a ConsensusNFT is skipped rather than ejected. Nothing else on + /// the path catches it: `isRetired` is false for an address that never existed, and a zero + /// balance fails the `>` test for every amount including zero, so the entry would otherwise + /// reach `_consensusBurn` and burn a nonexistent token, reverting the whole closing block. The + /// system caller does no membership filtering, so the batch has to absorb the entry here. + function test_applySlashes_skipsUnregisteredAddress() public { + uint256 issuanceBalBefore = issuance.balance; + uint256 registryBalBefore = address(consensusRegistry).balance; + uint256 supplyBefore = consensusRegistry.totalSupply(); + + Slash[] memory slashes = new Slash[](3); + slashes[0] = Slash(address(0xdead), stakeAmount_); + slashes[1] = Slash(address(0xbeef), 0); // a zero amount fails `balance > amount` just the same + slashes[2] = Slash(validator1, 100); // the registered entry in the batch still lands + + vm.recordLogs(); + _concludeEpochWithSlashes(_sortedGenesisCommittee(), slashes); + Vm.Log[] memory logs = vm.getRecordedLogs(); + + assertEq(_countSlashedLogs(logs), 1, "only the registered entry may be slashed"); + assertEq(_firstSlashedLog(logs).validatorAddress, validator1); + + (uint256 outstanding,,) = consensusRegistry.getBalanceBreakdown(validator1); + assertEq(outstanding, stakeAmount_ - 100); + assertEq(issuance.balance, issuanceBalBefore, "an unregistered entry must move no value"); + assertEq(address(consensusRegistry).balance, registryBalBefore); + assertEq(consensusRegistry.totalSupply(), supplyBefore); + assertEq(consensusRegistry.getEligibleValidatorCount(), 4, "no ejection"); + assertEq(consensusRegistry.getCurrentEpoch(), 1, "the boundary must still close"); + _assertSetInvariant(); + } + + /// C6: the same skip covers a governance-whitelisted address that never staked. Its ConsensusNFT + /// exists, so the burn would succeed silently and settle a full genesis stake amount to Issuance + /// for an address that deposited nothing, drawing on the collateral backing every other + /// validator. The registry's native balance is the assertion that matters here. + function test_applySlashes_skipsWhitelistedButNeverStaked() public { + vm.prank(crOwner); + consensusRegistry.mint(validator5); + + uint256 issuanceBalBefore = issuance.balance; + uint256 registryBalBefore = address(consensusRegistry).balance; + + Slash[] memory slashes = new Slash[](1); + slashes[0] = Slash(validator5, stakeAmount_); + + vm.recordLogs(); + _concludeEpochWithSlashes(_sortedGenesisCommittee(), slashes); + assertEq(_countSlashedLogs(vm.getRecordedLogs()), 0, "a never-staked entry must fire no event"); + + assertEq( + address(consensusRegistry).balance, registryBalBefore, "collateral backing other validators must not move" + ); + assertEq(issuance.balance, issuanceBalBefore); + assertFalse(consensusRegistry.isRetired(validator5)); + assertEq(consensusRegistry.ownerOf(uint160(validator5)), validator5, "the whitelist entry must survive intact"); + assertEq(uint8(consensusRegistry.getValidator(validator5).currentStatus), uint8(ValidatorStatus.Undefined)); + _assertSetInvariant(); + + // the untouched whitelist entry still onboards normally + vm.prank(validator5); + consensusRegistry.stake{ value: stakeAmount_ }( + validator5BlsPubkey, IStakeManager.ProofOfPossession(validator5BlsSig) + ); + assertEq(uint8(consensusRegistry.getValidator(validator5).currentStatus), uint8(ValidatorStatus.Staked)); + } + + /// C7: burning a whitelisted validator before it ever stakes retires the address governance + /// named. `mint` stamps the address onto the record, so the lifecycle event carries it rather + /// than the zero address, which no log-based monitor could attribute. + function test_burn_whitelistedButNeverStaked_eventNamesValidator() public { + vm.prank(crOwner); + consensusRegistry.mint(validator5); + + ValidatorInfo memory retired = consensusRegistry.getValidator(validator5); + assertEq(retired.validatorAddress, validator5, "mint must record the address it whitelisted"); + retired.currentStatus = ValidatorStatus.Any; + retired.isRetired = true; + + vm.expectEmit(true, true, true, true); + emit ValidatorRetired(retired); + _burn(validator5); + + assertTrue(consensusRegistry.isRetired(validator5)); + assertEq(consensusRegistry.balanceOf(validator5), 0); + _assertSetInvariant(); + } + /* * D. boundary incentives with retired validators */