UNPKG

@towns-protocol/generated

Version:

## How to generate contract types

1,309 lines (1,307 loc) 61.7 kB
/* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; import type { Provider, TransactionRequest } from "@ethersproject/providers"; import type { PromiseOrValue } from "../common"; import type { RewardsDistributionV2, RewardsDistributionV2Interface, } from "../RewardsDistributionV2"; const _abi = [ { type: "function", name: "__RewardsDistribution_init", inputs: [ { name: "stakeToken", type: "address", internalType: "address", }, { name: "rewardToken", type: "address", internalType: "address", }, { name: "rewardDuration", type: "uint256", internalType: "uint256", }, ], outputs: [], stateMutability: "nonpayable", }, { type: "function", name: "changeBeneficiary", inputs: [ { name: "depositId", type: "uint256", internalType: "uint256", }, { name: "newBeneficiary", type: "address", internalType: "address", }, ], outputs: [], stateMutability: "nonpayable", }, { type: "function", name: "claimReward", inputs: [ { name: "beneficiary", type: "address", internalType: "address", }, { name: "recipient", type: "address", internalType: "address", }, ], outputs: [ { name: "reward", type: "uint256", internalType: "uint256", }, ], stateMutability: "nonpayable", }, { type: "function", name: "currentReward", inputs: [ { name: "beneficiary", type: "address", internalType: "address", }, ], outputs: [ { name: "", type: "uint256", internalType: "uint256", }, ], stateMutability: "view", }, { type: "function", name: "currentRewardPerTokenAccumulated", inputs: [], outputs: [ { name: "", type: "uint256", internalType: "uint256", }, ], stateMutability: "view", }, { type: "function", name: "currentSpaceDelegationReward", inputs: [ { name: "operator", type: "address", internalType: "address", }, ], outputs: [ { name: "", type: "uint256", internalType: "uint256", }, ], stateMutability: "view", }, { type: "function", name: "delegationProxyById", inputs: [ { name: "depositId", type: "uint256", internalType: "uint256", }, ], outputs: [ { name: "", type: "address", internalType: "address", }, ], stateMutability: "view", }, { type: "function", name: "depositById", inputs: [ { name: "depositId", type: "uint256", internalType: "uint256", }, ], outputs: [ { name: "deposit", type: "tuple", internalType: "struct StakingRewards.Deposit", components: [ { name: "amount", type: "uint96", internalType: "uint96", }, { name: "owner", type: "address", internalType: "address", }, { name: "commissionEarningPower", type: "uint96", internalType: "uint96", }, { name: "delegatee", type: "address", internalType: "address", }, { name: "pendingWithdrawal", type: "uint96", internalType: "uint96", }, { name: "beneficiary", type: "address", internalType: "address", }, ], }, ], stateMutability: "view", }, { type: "function", name: "getDepositsByDepositor", inputs: [ { name: "depositor", type: "address", internalType: "address", }, ], outputs: [ { name: "", type: "uint256[]", internalType: "uint256[]", }, ], stateMutability: "view", }, { type: "function", name: "getPeriodRewardAmount", inputs: [], outputs: [ { name: "", type: "uint256", internalType: "uint256", }, ], stateMutability: "view", }, { type: "function", name: "implementation", inputs: [], outputs: [ { name: "result", type: "address", internalType: "address", }, ], stateMutability: "view", }, { type: "function", name: "increaseStake", inputs: [ { name: "depositId", type: "uint256", internalType: "uint256", }, { name: "amount", type: "uint96", internalType: "uint96", }, ], outputs: [], stateMutability: "nonpayable", }, { type: "function", name: "initiateWithdraw", inputs: [ { name: "depositId", type: "uint256", internalType: "uint256", }, ], outputs: [ { name: "amount", type: "uint96", internalType: "uint96", }, ], stateMutability: "nonpayable", }, { type: "function", name: "isRewardNotifier", inputs: [ { name: "notifier", type: "address", internalType: "address", }, ], outputs: [ { name: "", type: "bool", internalType: "bool", }, ], stateMutability: "view", }, { type: "function", name: "lastTimeRewardDistributed", inputs: [], outputs: [ { name: "", type: "uint256", internalType: "uint256", }, ], stateMutability: "view", }, { type: "function", name: "notifyRewardAmount", inputs: [ { name: "reward", type: "uint256", internalType: "uint256", }, ], outputs: [], stateMutability: "nonpayable", }, { type: "function", name: "permitAndIncreaseStake", inputs: [ { name: "depositId", type: "uint256", internalType: "uint256", }, { name: "amount", type: "uint96", internalType: "uint96", }, { name: "nonce", type: "uint256", internalType: "uint256", }, { name: "deadline", type: "uint256", internalType: "uint256", }, { name: "signature", type: "bytes", internalType: "bytes", }, ], outputs: [], stateMutability: "nonpayable", }, { type: "function", name: "permitAndStake", inputs: [ { name: "amount", type: "uint96", internalType: "uint96", }, { name: "delegatee", type: "address", internalType: "address", }, { name: "beneficiary", type: "address", internalType: "address", }, { name: "nonce", type: "uint256", internalType: "uint256", }, { name: "deadline", type: "uint256", internalType: "uint256", }, { name: "signature", type: "bytes", internalType: "bytes", }, ], outputs: [ { name: "depositId", type: "uint256", internalType: "uint256", }, ], stateMutability: "nonpayable", }, { type: "function", name: "redelegate", inputs: [ { name: "depositId", type: "uint256", internalType: "uint256", }, { name: "delegatee", type: "address", internalType: "address", }, ], outputs: [], stateMutability: "nonpayable", }, { type: "function", name: "setPeriodRewardAmount", inputs: [ { name: "amount", type: "uint256", internalType: "uint256", }, ], outputs: [], stateMutability: "nonpayable", }, { type: "function", name: "setRewardNotifier", inputs: [ { name: "notifier", type: "address", internalType: "address", }, { name: "enabled", type: "bool", internalType: "bool", }, ], outputs: [], stateMutability: "nonpayable", }, { type: "function", name: "stake", inputs: [ { name: "amount", type: "uint96", internalType: "uint96", }, { name: "delegatee", type: "address", internalType: "address", }, { name: "beneficiary", type: "address", internalType: "address", }, ], outputs: [ { name: "depositId", type: "uint256", internalType: "uint256", }, ], stateMutability: "nonpayable", }, { type: "function", name: "stakeOnBehalf", inputs: [ { name: "amount", type: "uint96", internalType: "uint96", }, { name: "delegatee", type: "address", internalType: "address", }, { name: "beneficiary", type: "address", internalType: "address", }, { name: "owner", type: "address", internalType: "address", }, { name: "", type: "uint256", internalType: "uint256", }, { name: "", type: "bytes", internalType: "bytes", }, ], outputs: [ { name: "depositId", type: "uint256", internalType: "uint256", }, ], stateMutability: "nonpayable", }, { type: "function", name: "stakedByDepositor", inputs: [ { name: "depositor", type: "address", internalType: "address", }, ], outputs: [ { name: "amount", type: "uint96", internalType: "uint96", }, ], stateMutability: "view", }, { type: "function", name: "stakingState", inputs: [], outputs: [ { name: "state", type: "tuple", internalType: "struct IRewardsDistributionBase.StakingState", components: [ { name: "riverToken", type: "address", internalType: "address", }, { name: "totalStaked", type: "uint96", internalType: "uint96", }, { name: "rewardDuration", type: "uint256", internalType: "uint256", }, { name: "rewardEndTime", type: "uint256", internalType: "uint256", }, { name: "lastUpdateTime", type: "uint256", internalType: "uint256", }, { name: "rewardRate", type: "uint256", internalType: "uint256", }, { name: "rewardPerTokenAccumulated", type: "uint256", internalType: "uint256", }, { name: "nextDepositId", type: "uint256", internalType: "uint256", }, ], }, ], stateMutability: "view", }, { type: "function", name: "treasureByBeneficiary", inputs: [ { name: "beneficiary", type: "address", internalType: "address", }, ], outputs: [ { name: "treasure", type: "tuple", internalType: "struct StakingRewards.Treasure", components: [ { name: "earningPower", type: "uint96", internalType: "uint96", }, { name: "rewardPerTokenAccumulated", type: "uint256", internalType: "uint256", }, { name: "unclaimedRewardSnapshot", type: "uint256", internalType: "uint256", }, ], }, ], stateMutability: "view", }, { type: "function", name: "upgradeDelegationProxy", inputs: [ { name: "newImplementation", type: "address", internalType: "address", }, ], outputs: [], stateMutability: "nonpayable", }, { type: "function", name: "withdraw", inputs: [ { name: "depositId", type: "uint256", internalType: "uint256", }, ], outputs: [ { name: "amount", type: "uint96", internalType: "uint96", }, ], stateMutability: "nonpayable", }, { type: "event", name: "ChangeBeneficiary", inputs: [ { name: "depositId", type: "uint256", indexed: true, internalType: "uint256", }, { name: "newBeneficiary", type: "address", indexed: true, internalType: "address", }, ], anonymous: false, }, { type: "event", name: "ClaimReward", inputs: [ { name: "beneficiary", type: "address", indexed: true, internalType: "address", }, { name: "recipient", type: "address", indexed: true, internalType: "address", }, { name: "reward", type: "uint256", indexed: false, internalType: "uint256", }, ], anonymous: false, }, { type: "event", name: "ClaimerSet", inputs: [ { name: "delegator", type: "address", indexed: true, internalType: "address", }, { name: "claimer", type: "address", indexed: true, internalType: "address", }, ], anonymous: false, }, { type: "event", name: "CrossDomainMessengerSet", inputs: [ { name: "messenger", type: "address", indexed: false, internalType: "address", }, ], anonymous: false, }, { type: "event", name: "DelegationDigestSet", inputs: [ { name: "digest", type: "bytes32", indexed: false, internalType: "bytes32", }, ], anonymous: false, }, { type: "event", name: "DelegationProxyDeployed", inputs: [ { name: "depositId", type: "uint256", indexed: true, internalType: "uint256", }, { name: "delegatee", type: "address", indexed: true, internalType: "address", }, { name: "proxy", type: "address", indexed: false, internalType: "address", }, ], anonymous: false, }, { type: "event", name: "DelegationRemoved", inputs: [ { name: "delegator", type: "address", indexed: true, internalType: "address", }, ], anonymous: false, }, { type: "event", name: "DelegationSet", inputs: [ { name: "delegator", type: "address", indexed: true, internalType: "address", }, { name: "operator", type: "address", indexed: true, internalType: "address", }, { name: "quantity", type: "uint256", indexed: false, internalType: "uint256", }, ], anonymous: false, }, { type: "event", name: "IncreaseStake", inputs: [ { name: "depositId", type: "uint256", indexed: true, internalType: "uint256", }, { name: "amount", type: "uint96", indexed: false, internalType: "uint96", }, ], anonymous: false, }, { type: "event", name: "Initialized", inputs: [ { name: "version", type: "uint32", indexed: false, internalType: "uint32", }, ], anonymous: false, }, { type: "event", name: "InitiateWithdraw", inputs: [ { name: "owner", type: "address", indexed: true, internalType: "address", }, { name: "depositId", type: "uint256", indexed: true, internalType: "uint256", }, { name: "amount", type: "uint96", indexed: false, internalType: "uint96", }, ], anonymous: false, }, { type: "event", name: "InterfaceAdded", inputs: [ { name: "interfaceId", type: "bytes4", indexed: true, internalType: "bytes4", }, ], anonymous: false, }, { type: "event", name: "InterfaceRemoved", inputs: [ { name: "interfaceId", type: "bytes4", indexed: true, internalType: "bytes4", }, ], anonymous: false, }, { type: "event", name: "NotifyRewardAmount", inputs: [ { name: "notifier", type: "address", indexed: true, internalType: "address", }, { name: "reward", 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: "PeriodRewardAmountSet", inputs: [ { name: "amount", type: "uint256", indexed: false, internalType: "uint256", }, ], anonymous: false, }, { type: "event", name: "ProxyDelegationSet", inputs: [ { name: "proxyDelegation", type: "address", indexed: false, internalType: "address", }, ], anonymous: false, }, { type: "event", name: "Redelegate", inputs: [ { name: "depositId", type: "uint256", indexed: true, internalType: "uint256", }, { name: "delegatee", type: "address", indexed: true, internalType: "address", }, ], anonymous: false, }, { type: "event", name: "RewardNotifierSet", inputs: [ { name: "notifier", type: "address", indexed: true, internalType: "address", }, { name: "enabled", type: "bool", indexed: false, internalType: "bool", }, ], anonymous: false, }, { type: "event", name: "RewardsDistributionInitialized", inputs: [ { name: "stakeToken", type: "address", indexed: false, internalType: "address", }, { name: "rewardToken", type: "address", indexed: false, internalType: "address", }, { name: "rewardDuration", type: "uint256", indexed: false, internalType: "uint256", }, ], anonymous: false, }, { type: "event", name: "SpaceRewardsSwept", inputs: [ { name: "space", type: "address", indexed: true, internalType: "address", }, { name: "operator", type: "address", indexed: true, internalType: "address", }, { name: "scaledReward", type: "uint256", indexed: false, internalType: "uint256", }, ], anonymous: false, }, { type: "event", name: "Stake", inputs: [ { name: "owner", type: "address", indexed: true, internalType: "address", }, { name: "delegatee", type: "address", indexed: true, internalType: "address", }, { name: "beneficiary", type: "address", indexed: true, internalType: "address", }, { name: "depositId", type: "uint256", indexed: false, internalType: "uint256", }, { name: "amount", type: "uint96", indexed: false, internalType: "uint96", }, ], anonymous: false, }, { type: "event", name: "Upgraded", inputs: [ { name: "implementation", type: "address", indexed: true, internalType: "address", }, ], anonymous: false, }, { type: "event", name: "Withdraw", inputs: [ { name: "depositId", type: "uint256", indexed: true, internalType: "uint256", }, { name: "amount", type: "uint96", indexed: false, internalType: "uint96", }, ], anonymous: false, }, { type: "error", name: "DelegationAlreadySet", inputs: [ { name: "delegator", type: "address", internalType: "address", }, { name: "operator", type: "address", internalType: "address", }, ], }, { type: "error", name: "DelegationNotSet", inputs: [], }, { type: "error", name: "Initializable_InInitializingState", inputs: [], }, { type: "error", name: "Initializable_NotInInitializingState", inputs: [], }, { type: "error", name: "Introspection_AlreadySupported", inputs: [], }, { type: "error", name: "Introspection_NotSupported", inputs: [], }, { type: "error", name: "InvalidAccountNonce", inputs: [ { name: "account", type: "address", internalType: "address", }, { name: "currentNonce", type: "uint256", internalType: "uint256", }, ], }, { type: "error", name: "InvalidClaimer", inputs: [ { name: "claimer", type: "address", internalType: "address", }, ], }, { type: "error", name: "InvalidDelegator", inputs: [ { name: "delegator", type: "address", internalType: "address", }, ], }, { type: "error", name: "InvalidOperator", inputs: [ { name: "operator", type: "address", internalType: "address", }, ], }, { type: "error", name: "InvalidOwner", inputs: [ { name: "owner", type: "address", internalType: "address", }, ], }, { type: "error", name: "InvalidQuantity", inputs: [ { name: "quantity", type: "uint256", internalType: "uint256", }, ], }, { type: "error", name: "NewImplementationHasNoCode", inputs: [], }, { type: "error", name: "Ownable__NotOwner", inputs: [ { name: "account", type: "address", internalType: "address", }, ], }, { type: "error", name: "Ownable__ZeroAddress", inputs: [], }, { type: "error", name: "RewardsDistribution__CannotWithdrawFromSelf", inputs: [], }, { type: "error", name: "RewardsDistribution__ExpiredDeadline", inputs: [], }, { type: "error", name: "RewardsDistribution__InvalidSignature", inputs: [], }, { type: "error", name: "RewardsDistribution__NoPendingWithdrawal", inputs: [], }, { type: "error", name: "RewardsDistribution__NotActiveOperator", inputs: [], }, { type: "error", name: "RewardsDistribution__NotBeneficiary", inputs: [], }, { type: "error", name: "RewardsDistribution__NotClaimer", inputs: [], }, { type: "error", name: "RewardsDistribution__NotDepositOwner", inputs: [], }, { type: "error", name: "RewardsDistribution__NotOperatorOrSpace", inputs: [], }, { type: "error", name: "RewardsDistribution__NotRewardNotifier", inputs: [], }, ] as const; const _bytecode = "0x6080604052348015600e575f5ffd5b5060156019565b60bd565b7f59b501c3653afc186af7d48dda36cf6732bd21629a6295693664240a6ef520008054640100000000900460ff16156064576040516366008a2d60e01b815260040160405180910390fd5b805463ffffffff908116101560ba57805463ffffffff191663ffffffff90811782556040519081527fe9c9b456cb2994b80aeef036cf59d26e9617df80f816a6ee5a5b4166e07e2f5c9060200160405180910390a15b50565b614485806100ca5f395ff3fe608060405234801561000f575f5ffd5b50600436106101bb575f3560e01c80636fd9c1f8116100f35780639d18e4b011610093578063e082f1d41161006e578063e082f1d414610613578063e2ba385b1461069f578063e69f9495146106bf578063e70f9445146106d2575f5ffd5b80639d18e4b0146105e5578063b0070a30146105f8578063ddda8a111461060b575f5ffd5b80637e108d52116100ce5780637e108d52146105995780638cf0f587146105ac57806393e876bc146105bf5780639ad4f752146105d2575f5ffd5b80636fd9c1f81461056057806372aba5d3146105735780637d84ed2614610586575f5ffd5b80633f1921121161015e5780635d331f32116101395780635d331f321461034b5780636805a4d81461035e5780636aa69573146104eb5780636cd965d01461054d575f5ffd5b80633f192112146103155780634953c782146103285780635c60da1b1461033b575f5ffd5b8063255a4f7311610199578063255a4f731461027a5780632b2e91031461028f5780632e1a7d4d146102d25780633c6b16ab14610302575f5ffd5b80630b8ddfe6146101bf5780630cbca9da146101da5780630d8221bb14610201575b5f5ffd5b6101c7610739565b6040519081526020015b60405180910390f35b7f7b071c8e0da733b969167f083e1913dbb26456aeda63d64176fc92d3926ff30e546101c7565b61025561020f366004613592565b5f9081527f7b071c8e0da733b969167f083e1913dbb26456aeda63d64176fc92d3926ff30b602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d1565b61028d6102883660046135cc565b61076a565b005b6102a261029d366004613605565b61088a565b6040805182516bffffffffffffffffffffffff1681526020808401519082015291810151908201526060016101d1565b6102e56102e0366004613592565b610931565b6040516bffffffffffffffffffffffff90911681526020016101d1565b61028d610310366004613592565b610b02565b6101c7610323366004613605565b610bbe565b6101c761033636600461361e565b610bce565b68911c5a209f08d5ec5e54610255565b61028d61035936600461364f565b610da4565b61043461036c366004613592565b604080515f8082526020808301828152838501838152606085018481526080860185815260a087018681529886527f7b071c8e0da733b969167f083e1913dbb26456aeda63d64176fc92d3926ff30a9094529386902060c0860190965285546bffffffffffffffffffffffff808216875273ffffffffffffffffffffffffffffffffffffffff6c010000000000000000000000009283900481169094526001880154808216909352918190048316909452600290950154948516909152920490911690915290565b6040516101d191905f60c0820190506bffffffffffffffffffffffff835116825273ffffffffffffffffffffffffffffffffffffffff60208401511660208301526bffffffffffffffffffffffff604084015116604083015273ffffffffffffffffffffffffffffffffffffffff60608401511660608301526bffffffffffffffffffffffff608084015116608083015273ffffffffffffffffffffffffffffffffffffffff60a08401511660a083015292915050565b6102e56104f9366004613605565b73ffffffffffffffffffffffffffffffffffffffff165f9081527f7b071c8e0da733b969167f083e1913dbb26456aeda63d64176fc92d3926ff30860205260409020546bffffffffffffffffffffffff1690565b61028d61055b366004613605565b61100d565b61028d61056e366004613592565b61108b565b6101c76105813660046136e9565b611159565b61028d61059436600461376c565b611181565b6102e56105a7366004613592565b611190565b6101c76105ba36600461378d565b61138f565b61028d6105cd3660046137cd565b6113a5565b61028d6105e0366004613839565b6113c6565b6101c76105f3366004613605565b61163e565b61028d610606366004613839565b6116d0565b6101c76117ed565b61061b611818565b6040516101d191905f6101008201905073ffffffffffffffffffffffffffffffffffffffff83511682526bffffffffffffffffffffffff602084015116602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015160e083015292915050565b6106b26106ad366004613605565b6119d8565b6040516101d1919061385a565b6101c76106cd36600461389c565b611a49565b6107296106e0366004613605565b73ffffffffffffffffffffffffffffffffffffffff165f9081527f7b071c8e0da733b969167f083e1913dbb26456aeda63d64176fc92d3926ff30c602052604090205460ff1690565b60405190151581526020016101d1565b5f7f7b071c8e0da733b969167f083e1913dbb26456aeda63d64176fc92d3926ff30061076481611a57565b91505090565b7f4675fa8241f86f37157864d3d49b85ad4b164352c516da28e1678a90470ae3005473ffffffffffffffffffffffffffffffffffffffff1633146107e1576040517f65f490650000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82165f8181527f7b071c8e0da733b969167f083e1913dbb26456aeda63d64176fc92d3926ff30c602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685151590811790915591519182527fb33ca1dabfb28a2e1bd06b332c396b1a3d538278691341a5503bbad53f91919791015b60405180910390a25050565b6108b960405180606001604052805f6bffffffffffffffffffffffff1681526020015f81526020015f81525090565b73ffffffffffffffffffffffffffffffffffffffff919091165f9081527f7b071c8e0da733b969167f083e1913dbb26456aeda63d64176fc92d3926ff309602090815260409182902060608401835280546bffffffffffffffffffffffff168452600181015491840191909152600201549082015290565b5f8181527f7b071c8e0da733b969167f083e1913dbb26456aeda63d64176fc92d3926ff30a6020526040812080547f7b071c8e0da733b969167f083e1913dbb26456aeda63d64176fc92d3926ff30091906c01000000000000000000000000900473ffffffffffffffffffffffffffffffffffffffff166109b181611ae2565b3073ffffffffffffffffffffffffffffffffffffffff8216036109f7576109f77f60fb71c600000000000000000000000000000000000000000000000000000000611b24565b60028201546bffffffffffffffffffffffff1693505f849003610a4257610a3d7f7f7af02100000000000000000000000000000000000000000000000000000000611b24565b610ab7565b6002820180547fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001690555f858152600b84016020526040902054600184015473ffffffffffffffffffffffffffffffffffffffff91821691610ab5911682846bffffffffffffffffffffffff8916611b2c565b505b6040516bffffffffffffffffffffffff8516815285907f379f5516239c4d5aa59274f4ec7af0b3fe40f0c9abbb4d4ca20bd49f4caa0fcd9060200160405180910390a2505050919050565b335f9081527f7b071c8e0da733b969167f083e1913dbb26456aeda63d64176fc92d3926ff30c60205260409020547f7b071c8e0da733b969167f083e1913dbb26456aeda63d64176fc92d3926ff3009060ff16610b8257610b827faa948c2400000000000000000000000000000000000000000000000000000000611b24565b610b8c8183611b8e565b60405182815233907ff6b60b7da8e0f883e399412005b6205515604a993e7e3f0c3b199b9cb07d6ae69060200161087e565b5f610bc882611d28565b92915050565b5f7f7b071c8e0da733b969167f083e1913dbb26456aeda63d64176fc92d3926ff30073ffffffffffffffffffffffffffffffffffffffff84163314610d015773ffffffffffffffffffffffffffffffffffffffff8481165f9081527f264df150e9e008a39dd109254e3af3cdadbfbd33261903d1163f43eaee68e7026020526040902054163314610d0157610c6284611e69565b15610cbc5773ffffffffffffffffffffffffffffffffffffffff8481165f9081527f3355c1fbe959688d71c13b5c967b2a46ceae34fb425fbcad0cb6451b53f36e05602052604090205416610cb681611ed6565b50610d01565b610cc584611f73565b15610cd857610cd384611ed6565b610d01565b610d017f446194b700000000000000000000000000000000000000000000000000000000611b24565b610d0b8185611f9f565b91508115610d36578054610d369073ffffffffffffffffffffffffffffffffffffffff168484612024565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f7e77f685b38c861064cb08f2776eb5dfd3c82f652ed9f21221b8c53b75628e5184604051610d9591815260200190565b60405180910390a35092915050565b7f59b501c3653afc186af7d48dda36cf6732bd21629a6295693664240a6ef5200054640100000000900460ff16610e07576040517f77a399b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f7b071c8e0da733b969167f083e1913dbb26456aeda63d64176fc92d3926ff3028190557f7b071c8e0da733b969167f083e1913dbb26456aeda63d64176fc92d3926ff300805473ffffffffffffffffffffffffffffffffffffffff8481167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161783557f7b071c8e0da733b969167f083e1913dbb26456aeda63d64176fc92d3926ff3018054918716919092161790556040518190610eeb90610ecc90613585565b604051809103905ff080158015610ee5573d5f5f3e3d5ffd5b5061107f565b60078101545f5b81811015610fac575f818152600b8501602052604090205473ffffffffffffffffffffffffffffffffffffffff168015610fa3576040517ff7e7d1fd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015282169063f7e7d1fd906024015f604051808303815f87803b158015610f8c575f5ffd5b505af1158015610f9e573d5f5f3e3d5ffd5b505050505b50600101610ef2565b506040805173ffffffffffffffffffffffffffffffffffffffff8089168252871660208201529081018590527fdaec16f9d0b7c133a3ec8632d36571e8a2c4bbb4361bc90076ad402e1ce632e29060600160405180910390a1505050505050565b7f4675fa8241f86f37157864d3d49b85ad4b164352c516da28e1678a90470ae3005473ffffffffffffffffffffffffffffffffffffffff16331461107f576040517f65f490650000000000000000000000000000000000000000000000000000000081523360048201526024016107d8565b61108881612077565b50565b7f4675fa8241f86f37157864d3d49b85ad4b164352c516da28e1678a90470ae3005473ffffffffffffffffffffffffffffffffffffffff1633146110fd576040517f65f490650000000000000000000000000000000000000000000000000000000081523360048201526024016107d8565b807f7b071c8e0da733b969167f083e1913dbb26456aeda63d64176fc92d3926ff300600e01556040518181527ffd459cfaa5ac02180581a60c1f500dbe56adf2912fb8866b2e1419e1df8c84a99060200160405180910390a150565b5f61116788868686866120d4565b6111758888883360016121de565b98975050505050505050565b61118c82825f61239e565b5050565b5f8181527f7b071c8e0da733b969167f083e1913dbb26456aeda63d64176fc92d3926ff30a6020526040812080547f7b071c8e0da733b969167f083e1913dbb26456aeda63d64176fc92d3926ff30091906c01000000000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1661121081611ae2565b60018201546c01000000000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1661124584846125a0565b945073ffffffffffffffffffffffffffffffffffffffff821630146112f7575f868152600b850160205260408082205490517f6f267190000000000000000000000000000000000000000000000000000000008152600481019290925273ffffffffffffffffffffffffffffffffffffffff16908190636f267190906024015f604051808303815f87803b1580156112db575f5ffd5b505af11580156112ed573d5f5f3e3d5ffd5b5050505050611322565b6002830180547fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001690555b61132b816126ff565b6040516bffffffffffffffffffffffff86168152869073ffffffffffffffffffffffffffffffffffffffff8416907f83a8fb903cd44ada83e49af5f21f61369a370e61ae03b95f73a462cc4d38d14e9060200160405180910390a350505050919050565b5f61139d848484335f6121de565b949350505050565b6113b285858585856120d4565b6113be8686600161239e565b505050505050565b5f8281527f7b071c8e0da733b969167f083e1913dbb26456aeda63d64176fc92d3926ff30a6020526040902080547f7b071c8e0da733b969167f083e1913dbb26456aeda63d64176fc92d3926ff30091906c01000000000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1661144681611ae2565b61144f846127f1565b60028201546bffffffffffffffffffffffff165f61146c86612838565b9050816bffffffffffffffffffffffff165f036114945761148f8585888461289a565b61153b565b60028401546114d39086908690869086908b906c01000000000000000000000000900473ffffffffffffffffffffffffffffffffffffffff168761295c565b6001840180546bffffffffffffffffffffffff166c0100000000000000000000000073ffffffffffffffffffffffffffffffffffffffff8916021790556002840180547fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001690555b611544866126ff565b73ffffffffffffffffffffffffffffffffffffffff831630146115f3575f878152600b86016020526040908190205490517f6f26719000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152909116908190636f267190906024015f604051808303815f87803b1580156115db575f5ffd5b505af11580156115ed573d5f5f3e3d5ffd5b50505050505b60405173ffffffffffffffffffffffffffffffffffffffff87169088907fa6494190270aff4668179671a838f4079a7b83070d0dc4aafc1252956fa93d13905f90a350505050505050565b73ffffffffffffffffffffffffffffffffffffffff81165f9081527f7b071c8e0da733b969167f083e1913dbb26456aeda63d64176fc92d3926ff309602052604081207f7b071c8e0da733b969167f083e1913dbb26456aeda63d64176fc92d3926ff300906ec097ce7bc90715b34b9f1000000000906116bf908390612a67565b6116c99190613934565b9392505050565b5f8281527f7b071c8e0da733b969167f083e1913dbb26456aeda63d64176fc92d3926ff30a6020526040902080547f7b071c8e0da733b969167f083e1913dbb26456aeda63d64176fc92d3926ff3009190611750906c01000000000000000000000000900473ffffffffffffffffffffffffffffffffffffffff16611ae2565b60018101546c01000000000000000000000000900473ffffffffffffffffffffffffffffffffffffffff16611784816127f1565b61179b828561179284612838565b86929190612aa6565b6117a4816126ff565b60405173ffffffffffffffffffffffffffffffffffffffff85169086907f465099fe7523b081d53bc8776cdf5ae8d5629f83535fb55f947e85000b1fd571905f90a35050505050565b5f7f7b071c8e0da733b969167f083e1913dbb26456aeda63d64176fc92d3926ff30061076481612bbf565b61187c6040518061010001604052805f73ffffffffffffffffffffffffffffffffffffffff1681526020015f6bffffffffffffffffffffffff1681526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b610100810160409081527f7b071c8e0da733b969167f083e1913dbb26456aeda63d64176fc92d3926ff3015473ffffffffffffffffffffffffffffffffffffffff811683527401000000000000000000000000000000000000000090046bffffffffffffffffffffffff1660208301527f7b071c8e0da733b969167f083e1913dbb26456aeda63d64176fc92d3926ff30254908201527f7b071c8e0da733b969167f083e1913dbb26456aeda63d64176fc92d3926ff3035460608201527f7b071c8e0da733b969167f083e1913dbb26456aeda63d64176fc92d3926ff3045460808201527f7b071c8e0da733b969167f083e1913dbb26456aeda63d64176fc92d3926ff3055460a08201527f7b071c8e0da733b969167f083e1913dbb26456aeda63d64176fc92d3926ff3065460c08201527f7b071c8e0da733b969167f083e1913dbb26456aeda63d64176fc92d3926ff3075460e082015290565b73ffffffffffffffffffffffffffffffffffffffff81165f9081527f7b071c8e0da733b969167f083e1913dbb26456aeda63d64176fc92d3926ff30d602052604090206060907f7b071c8e0da733b969167f083e1913dbb26456aeda63d64176fc92d3926ff300906116c990612bd4565b5f611175888888885f6121de565b60018101546004820154600583015460068401545f937401000000000000000000000000000000000000000090046bffffffffffffffffffffffff16929190838503611aa65795945050505050565b5f83611ab188612bbf565b039050611acd8382876bffffffffffffffffffffffff16612be0565b611ad7908361396c565b979650505050505050565b3373ffffffffffffffffffffffffffffffffffffffff821614611088576110887f4ea09ec2000000000000000000000000000000000000000000000000000000005b805f5260045ffd5b60405181606052826040528360601b602c526f23b872dd000000000000000000000000600c5260205f6064601c5f895af18060015f511416611b8057803d873b151710611b8057637939f4245f526004601cfd5b505f60605260405250505050565b611b9782611a57565b6006830155600282015460038301545f611bc1846ec097ce7bc90715b34b9f100000000085612be0565b905042821115611bed57600585015442830390611bdf908286612be0565b611be9908361396c565b9150505b611bf7834261396c565b6005860182905542600487015560038601556ec097ce7bc90715b34b9f1000000000811015611c4957611c497f10beb8b700000000000000000000000000000000000000000000000000000000611b24565b84546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa158015611cb4573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cd8919061397f565b611cf282856ec097ce7bc90715b34b9f1000000000612be0565b1115611d2157611d217f07d3df2b00000000000000000000000000000000000000000000000000000000611b24565b5050505050565b73ffffffffffffffffffffffffffffffffffffffff81165f9081527f3355c1fbe959688d71c13b5c967b2a46ceae34fb425fbcad0cb6451b53f36e04602052604081207f7b071c8e0da733b969167f083e1913dbb26456aeda63d64176fc92d3926ff300908290611d9890612bd4565b90505f611da483611a57565b90505f5f5b8351811015611e45575f856009015f868481518110611dca57611dca613996565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff1682528101919091526040015f20600181015481549086039450909150611e219084906bffffffffffffffffffffffff166139c3565b8160020154611e30919061396c565b611e3a908861396c565b965050600101611da9565b50611e5f6ec097ce7bc90715b34b9f100000000086613934565b9695505050505050565b5f80611eb88373ffffffffffffffffffffffffffffffffffffffff9081165f9081527f3355c1fbe959688d71c13b5c967b2a46ceae34fb425fbcad0cb6451b53f36e0560205260409020541690565b73ffffffffffffffffffffffffffffffffffffffff16141592915050565b73ffffffffffffffffffffffffffffffffffffffff8181165f9081527f988e8266be98e92aff755bdd688f8f4a2421e26daa6089c7e2668053a3bf550460205260409020547f988e8266be98e92aff755bdd688f8f4a2421e26daa6089c7e2668053a3bf55009116338114611f6e57611f6e7f2872c94b00000000000000000000000000000000000000000000000000000000611b24565b505050565b5f7f988e8266be98e92aff755bdd688f8f4a2421e26daa6089c7e2668053a3bf55006116c98184612c8d565b5f611fa983612cbb565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526009840160205260409020611fd98482612cda565b6ec097ce7bc90715b34b9f10000000008160020154611ff89190613934565b9150811561201d576002810180546ec097ce7bc90715b34b9f10000000008402900390555b5092915050565b81601452806034526fa9059cbb0000000000000000000000005f5260205f604460105f875af18060015f51141661206d57803d853b15171061206d576390b8ec185f526004601cfd5b505f603452505050565b73ffffffffffffffffffffffffffffffffffffffff16803b6120a057636d3e283b5f526004601cfd5b8068911c5a209f08d5ec5e55807fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f38a250565b7f7b071c8e0da733b969167f083e1913dbb26456aeda63d64176fc92d3926ff301546040805160a08101825273ffffffffffffffffffffffffffffffffffffffff909216606083018181526bffffffffffffffffffffffff8916608085018190529084526020808501899052848401889052835180850185523081529081019190915291517f30f28b7a00000000000000000000000000000000000000000000000000000000815290926e22d473030f116ddee9f6b43ac78ba3926330f28b7a926121a99291903390899089906004016139da565b5f604051808303815f87803b1580156121c0575f5ffd5b505af11580156121d2573d5f5f3e3d5ffd5b50505050505050505050565b5f6121e8856127f1565b7f7b071c8e0da733b969167f083e1913dbb26456aeda63d64176fc92d3926ff3006122248488888861221982612838565b869493929190612cf7565b915061222f866126ff565b73ffffffffffffffffffffffffffffffffffffffff841630146122ce575f6122578388612e3d565b9050836122985760018201546122939073ffffffffffffffffffffffffffffffffffffffff1633836bffffffffffffffffffffffff8c16611b2c565b6122cc565b60018201546122cc9073ffffffffffffffffffffffffffffffffffffffff16826bffffffffffffffffffffffff8b16612024565b505b73ffffffffffffffffffffffffffffffffffffffff84165f908152600d8201602052604090206122fe9083612f7b565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167ffc8744d74019c166abf1c554364af2a3d067ea57fa6f635f4552411ea44d29c7858b60405161238c9291909182526bffffffffffffffffffffffff16602082015260400190565b60405180910390a45095945050505050565b5f8381527f7b071c8e0da733b969167f083e1913dbb26456aeda63d64176fc92d3926ff30a6020526040902080547f7b071c8e0da733b969167f083e1913dbb26456aeda63d64176fc92d3926ff30091906c01000000000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1661241e81611ae2565b60018201546c01000000000000000000000000900473ffffffffffffffffffffffffffffffffffffffff16612452816127f1565b6124938383888487600201600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661248787612838565b8a95949392919061295c565b61249c816126ff565b73ffffffffffffffffffffffffffffffffffffffff82163014612554575f878152600b8501602052604090205473ffffffffffffffffffffffffffffffffffffffff168561251e5760018501546125199073ffffffffffffffffffffffffffffffffffffffff1633836bffffffffffffffffffffffff8b16611b2c565b612552565b60018501546125529073ffffffffffffffffffffffffffffffffffffffff16826bffffffffffffffffffffffff8a16612024565b505b6040516bffffffffffffffffffffffff8716815287907f82eeeecf3fcd1639730b92bca89ac4aa5a7c4a252fb716d0817957e83ca6ccb39060200160405180910390a250505050505050565b5f6125aa83612cbb565b60028201546c01000000000000000000000000900473ffffffffffffffffffffffffffffffffffffffff165f90815260098401602052604090206125ee8482612cda565b82546001850180546bffffffffffffffffffffffff80841674010000000000000000000000000000000000000000808404831682900383160273ffffffffffffffffffffffffffffffffffffffff938416179093556c01000000000000000000000000909304165f818152600888016020526040902080548085168490039094167fffffffffffffffffffffffffffffffffffffffff00000000000000000000000090941693909317909255906126a6868685612f86565b506002840180546bffffffffffffffffffffffff8084167fffffffffffffffffffffffffffffffffffffffff00000000000000000000000092831617909255600186018054909216909155845416845591505092915050565b73ffffffffffffffffffffffffffffffffffffffff8181165f9081527f3355c1fbe959688d71c13b5c967b2a46ceae34fb425fbcad0cb6451b53f36e056020526040902054168061274e575050565b7f7b071c8e0da733b969167f083e1913dbb26456aeda63d64176fc92d3926ff3005f61277b828585613110565b905080156127eb578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fbb9e81030bc0a5bf3882ff3a63042541f2285d5562359eaac3e7f3e24ca7d75d836040516127e291815260200190565b60405180910390a35b50505050565b6127fa81611e69565b156128025750565b61280b81613173565b611088576110887f4fb6cb8900000000000000000000000000000000000000000000000000000000611b24565b5f61284282611e69565b15612853576128508261320e565b91505b5073ffffffffffffffffffffffffffffffffffffffff165f9081527f988e8266be98e92aff755bdd688f8f4a2421e26daa6089c7e2668053a3bf5503602052604090205490565b6128a384612cbb565b60028301546c01000000000000000000000000900473ffffffffffffffffffffffffffffffffffffffff165f90815260098501602052604090206128e78582612cda565b6128f2858583612f86565b8354612913908690869084906bffffffffffffffffffffffff16878761328f565b50506001909101805473ffffffffffffffffffffffffffffffffffffffff9092166c01000000000000000000000000026bffffffffffffffffffffffff90921691909117905550565b61296587612cbb565b73ffffffffffffffffffffffffffffffffffffffff82165f90815260098801602052604090206129958882612cda565b848860010160148282829054906101000a90046bffffffffffffffffffffffff166129c09190613ab8565b82546bffffffffffffffffffffffff9182166101009390930a92830292820219169190911790915573ffffffffffffffffffffffffffffffffffffffff88165f90815260088b01602052604090208054808316890183167fffffffffffffffffffffffffffffffffffffffff0000000000000000000000009182161790915589548083168901909216911617885550612a5d88888388888761328f565b5050505050505050565b5f5f8260010154612a7785611a57565b84549190039150612a979082906bffffffffffffffffffffffff166139c3565b836002015461139d919061396c565b73ffffffffffffffffffffffffffffffffffffffff8216612aea57612aea7f27c5ec8800000000000000000000000000000000000000000000000000000000611b24565b612af384612cbb565b8254600284018054600186015473ffffffffffffffffffffffffffffffffffffffff8681166c010000000000000000000000009081026bffffffffffffffffffffffff858116919091179095559283900481165f81815260098b0160205260409020949095169493929091041690612b6b8882612cda565b612b76888883612f86565b73ffffffffffffffffffffffffffffffffffffffff86165f9081526009890160205260409020612ba68982612cda565b612bb489898388878b61328f565b505050505050505050565b5f610bc8826003015442808218908211021890565b60605f6116c9836133bf565b82820281838583041485151702612c86577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8385098181108201900382848609835f038416828511612c395763ae47f7025f526004601cfd5b93849004938382119092035f8390038390046001010292030417600260038302811880840282030280840282030280840282030280840282030280840282030280840290910302026116c9565b0492915050565b73ffffffffffffffffffffffffffffffffffffffff81165f90815260018301602052604081205415156116c9565b612cc481611a57565b6006820155612cd281612bbf565b600490910155565b612ce48282612a67565b6002820155600690910154600190910155565b5f846bffffffffffffffffffffffff165f03612d3657612d367f57699ff400000000000000000000000000000000000000000000000000000000611b24565b73ffffffffffffffffffffffffffffffffffffffff84161580612d6d575073ffffffffffffffffffffffffffffffffffffffff8316155b15612d9b57612d9b7f27c5ec8800000000000000000000000000000000000000000000000000000000611b24565b600787018054905f612dac83613adc565b909155505f818152600a89016020526040902060018101805473ffffffffffffffffffffffffffffffffffffffff8089166c010000000000000000000000009081026bffffffffffffffffffffffff93841617909355600284018054828a1685029084161790558354908b169092029116178155909150612e328882898989898961295c565b509695505050505050565b5f7f7b071c8e0da733b969167f083e1913dbb26456aeda63d64176fc92d3926ff300612e693085613418565b5f858152600b830160205260409081902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff848116918217909255600185015492517f485cc9550000000000000000000000000000000000000000000000000000000081529282166004840152908616602483015291935063485cc955906044015f604051808303815f87803b158015612f19575f5ffd5b505af1158015612f2b573d5f5f3e3d5ffd5b505060405173ffffffffffffffffffffffffffffffffffffffff8581168252861692508691507f9cc45a93930c8a80c99a1f194086c25c0e14b43109f4a5adfd9689aaa703ec4c90602001610d95565b5f6116c98383613424565b815460018301546bffffffffffffffffffffffff918216918116906c01000000000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1682821115612ff857612ff87fd596dda700000000000000000000000000000000000000000000000000000000611b24565b816bffffffffffffffffffffffff165f0361304f5783546bffffffffffffffffffffffff808216859003167fffffffffffffffffffffffffffffffffffffffff0000000000000000000000009091161784556113be565b6001850180547fffffffffffffffffffffffffffffffffffffffff00000000000000000000000090811690915584548385036bffffffffffffffffffffffff8281169190910316911617845573ffffffffffffffffffffffffffffffffffffffff81165f90815260098701602052604090206130cb8