0 txs
148 calls
constructor
constructor()
functions
authorizedAddresses
viewfunction authorizedAddresses(uint256) view returns (address)
currentClaimRoot
viewfunction currentClaimRoot() view returns (bytes32)
currentRound
viewfunction currentRound() view returns (uint256)
getDelegatedAmount
viewfunction getDelegatedAmount(address delegator, address delegatee) view returns (uint256)
getStakedBalance
viewfunction getStakedBalance(address staker) view returns (uint256)
getTotalDelegatedToAddress
viewfunction getTotalDelegatedToAddress(address delegatee) view returns (uint256)
lastClaimedRound
viewfunction lastClaimedRound(address) view returns (uint256)
owner
viewfunction owner() view returns (address)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
stakedAmount
viewfunction stakedAmount(address) view returns (uint256)
token
viewfunction token() view returns (address)
totalStaked
viewfunction totalStaked() view returns (uint256)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
verifyEntitled
viewfunction verifyEntitled(address recipient, uint256 value, bytes32[] proof) view returns (bool)
claim
nonpayablefunction claim(uint256 amount, bytes32[] proof)
delegate
nonpayablefunction delegate(address delegatee, uint256 amount)
initialize
nonpayablefunction initialize(address superRareToken, bytes32 merkleRoot, address initialOwner)
renounceOwnership
nonpayablefunction renounceOwnership()
stake
nonpayablefunction stake(uint256 amount)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
unstake
nonpayablefunction unstake(uint256 amount)
updateMerkleRoot
nonpayablefunction updateMerkleRoot(bytes32 newRoot)
updateTokenAddress
nonpayablefunction updateTokenAddress(address _newToken)
upgradeTo
nonpayablefunction upgradeTo(address newImplementation)
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
events
DelegationUpdated
event DelegationUpdated(address indexed delegator, address indexed delegatee, uint256 amount, uint256 timestamp)
Initialized
event Initialized(uint64 version)
NewClaimRootAdded
event NewClaimRootAdded(bytes32 indexed root, uint256 indexed round, uint256 timestamp)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
Staked
event Staked(address indexed staker, uint256 amount, uint256 timestamp)
TokensClaimed
event TokensClaimed(bytes32 indexed root, address indexed addr, uint256 amount, uint256 round)
Unstaked
event Unstaked(address indexed staker, uint256 amount, uint256 timestamp)
Upgraded
event Upgraded(address indexed implementation)
errors
AddressEmptyCode
error AddressEmptyCode(address target)
AlreadyClaimed
error AlreadyClaimed()
CannotDelegateToSelf
error CannotDelegateToSelf()
EmptyMerkleRoot
error EmptyMerkleRoot()
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
FailedCall
error FailedCall()
InsufficientDelegationBalance
error InsufficientDelegationBalance()
InsufficientStakedBalance
error InsufficientStakedBalance()
InvalidInitialization
error InvalidInitialization()
InvalidMerkleProof
error InvalidMerkleProof()
NotInitializing
error NotInitializing()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
ZeroStakeAmount
error ZeroStakeAmount()
ZeroTokenAddress
error ZeroTokenAddress()
ZeroUnstakeAmount
error ZeroUnstakeAmount()
creation bytecode
0x60a06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff16815250348015610042575f5ffd5b5061005161005660201b60201c565b6101b6565b5f61006561015460201b60201c565b9050805f0160089054906101000a900460ff16156100af576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff8016815f015f9054906101000a900467ffffffffffffffff1667ffffffffffffffff16146101515767ffffffffffffffff815f015f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d267ffffffffffffffff604051610148919061019d565b60405180910390a15b50565b5f7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00905090565b5f67ffffffffffffffff82169050919050565b6101978161017b565b82525050565b5f6020820190506101b05f83018461018e565b92915050565b608051612ece6101dc5f395f818161198d015281816119e20152611c230152612ece5ff3fe608060405260043610610165575f3560e01c8063817b1cd2116100d0578063ad3cb1cc11610089578063ea7a703311610063578063ea7a703314610515578063f2fde38b1461053f578063f993185514610567578063fc0c546a146105a357610165565b8063ad3cb1cc14610487578063c3709caf146104b1578063d26b3e6e146104ed57610165565b8063817b1cd2146103695780638a19c8bc146103935780638da5cb5b146103bd5780638f76a1f7146103e75780639587463114610423578063a694fc3a1461045f57610165565b80634783f0ef116101225780634783f0ef146102815780634f1ef286146102a957806352d1902d146102c5578063636592ed146102ef5780636691461a1461032b578063715018a61461035357610165565b8063026e402b1461016957806310955187146101915780632e17de78146101cd5780632f52ebb7146101f55780633659cfe61461021d5780633a02a42d14610245575b5f5ffd5b348015610174575f5ffd5b5061018f600480360381019061018a91906124c2565b6105cd565b005b34801561019c575f5ffd5b506101b760048036038101906101b29190612500565b610a53565b6040516101c4919061253a565b60405180910390f35b3480156101d8575f5ffd5b506101f360048036038101906101ee9190612553565b610a99565b005b348015610200575f5ffd5b5061021b600480360381019061021691906125df565b610cfb565b005b348015610228575f5ffd5b50610243600480360381019061023e9190612500565b610f10565b005b348015610250575f5ffd5b5061026b60048036038101906102669190612500565b610f79565b604051610278919061253a565b60405180910390f35b34801561028c575f5ffd5b506102a760048036038101906102a2919061266f565b610fbf565b005b6102c360048036038101906102be91906127d2565b611116565b005b3480156102d0575f5ffd5b506102d9611135565b6040516102e6919061283b565b60405180910390f35b3480156102fa575f5ffd5b5061031560048036038101906103109190612854565b611166565b604051610322919061253a565b60405180910390f35b348015610336575f5ffd5b50610351600480360381019061034c9190612500565b6111e8565b005b34801561035e575f5ffd5b50610367611298565b005b348015610374575f5ffd5b5061037d6112ab565b60405161038a919061253a565b60405180910390f35b34801561039e575f5ffd5b506103a76112b1565b6040516103b4919061253a565b60405180910390f35b3480156103c8575f5ffd5b506103d16112b7565b6040516103de91906128a1565b60405180910390f35b3480156103f2575f5ffd5b5061040d60048036038101906104089190612500565b6112ec565b60405161041a919061253a565b60405180910390f35b34801561042e575f5ffd5b5061044960048036038101906104449190612553565b611301565b60405161045691906128a1565b60405180910390f35b34801561046a575f5ffd5b5061048560048036038101906104809190612553565b61133c565b005b348015610492575f5ffd5b5061049b611496565b6040516104a8919061291a565b60405180910390f35b3480156104bc575f5ffd5b506104d760048036038101906104d291906129fa565b6114cf565b6040516104e49190612a80565b60405180910390f35b3480156104f8575f5ffd5b50610513600480360381019061050e9190612a99565b611510565b005b348015610520575f5ffd5b506105296117d4565b604051610536919061283b565b60405180910390f35b34801561054a575f5ffd5b5061056560048036038101906105609190612500565b6117d9565b005b348015610572575f5ffd5b5061058d60048036038101906105889190612500565b61185d565b60405161059a919061253a565b60405180910390f35b3480156105ae575f5ffd5b506105b7611872565b6040516105c491906128a1565b60405180910390f35b6105d561189a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610639576040517fef99396c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8103610672576040517ff69a94d300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f61067b61189a565b90508160045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410156106f4576040517f8b4b873200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505f838260085f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546107bb9190612b16565b6107c59190612b49565b905060045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205481111561083e576040517f8b4b873200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b838260075f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546108889190612b16565b6108929190612b49565b60075f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508360065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550838260085f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461099a9190612b16565b6109a49190612b49565b60085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508473ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f13757d45ac88e89e512f273fbdf623c4d809217880ce366dad19d9a526322b758642604051610a44929190612b7c565b60405180910390a35050505050565b5f60075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610aa16118a1565b5f8103610ada576040517f2d3087f900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f610ae361189a565b90505f60045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610b60576040517f8b4b873200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050808483610bae9190612b16565b1015610be6576040517f8b4b873200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8360045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610c329190612b16565b925050819055508360055f828254610c4a9190612b16565b92505081905550610c9d838560015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166118f59092919063ffffffff16565b8273ffffffffffffffffffffffffffffffffffffffff167f7fc4727e062e336010f2c282598ef5f14facb3de68cf8195c2f23e1454b2b74e8542604051610ce5929190612b7c565b60405180910390a2505050610cf8611974565b50565b610d036118a1565b610d55610d0e61189a565b848484808060200260200160405190810160405280939291908181526020018383602002808284375f81840152601f19601f820116905080830192505050505050506114cf565b610d8b576040517fb05e92fa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025460035f610d9961189a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410610e0a576040517f646cf55800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025460035f610e1861189a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550610ea8610e6061189a565b8460015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166118f59092919063ffffffff16565b610eb061189a565b73ffffffffffffffffffffffffffffffffffffffff165f547f19c3d6d051ad5a83e527f1443dcef37d901099edcd26560404f5de0edc9d3eed85600254604051610efb929190612b7c565b60405180910390a3610f0b611974565b505050565b610f1861198b565b610f20611a71565b610f76815f67ffffffffffffffff811115610f3e57610f3d6126ae565b5b6040519080825280601f01601f191660200182016040528015610f705781602001600182028036833780820191505090505b50611116565b50565b5f60045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610fc76112b7565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580611041575073c2f394a45e994bc81eff678bde9172e10f7c8ddc73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b611080576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107790612c13565b60405180910390fd5b5f5f1b81036110bb576040517f85ac2b9900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805f8190555060025f8154809291906110d390612c31565b9190505550600254817f91c29cbb4a588bd83c10bb6790021858b7b6fb0a1a200aea99e82c63fa9fd4514260405161110b919061253a565b60405180910390a350565b61111e61198b565b61112782611af8565b6111318282611b03565b5050565b5f61113e611c21565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b905090565b5f60065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b6111f0611a71565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611255576040517f6b093aad00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6112a0611a71565b6112a95f611ca8565b565b60055481565b60025481565b5f5f6112c1611d79565b9050805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691505090565b6003602052805f5260405f205f915090505481565b60098181548110611310575f80fd5b905f5260205f20015f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f8103611375576040517ff69a94d300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113ca61138061189a565b308360015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611da0909392919063ffffffff16565b8060045f6113d661189a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461141d9190612b49565b925050819055508060055f8282546114359190612b49565b9250508190555061144461189a565b73ffffffffffffffffffffffffffffffffffffffff167f1449c6dd7851abc30abf37f57715f492010519147cc2652fbc38202c18a6ee90824260405161148b929190612b7c565b60405180910390a250565b6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b5f5f84846040516020016114e4929190612cdd565b6040516020818303038152906040528051906020012090506115068184611e22565b9150509392505050565b5f611519611e37565b90505f815f0160089054906101000a900460ff161590505f825f015f9054906101000a900467ffffffffffffffff1690505f5f8267ffffffffffffffff161480156115615750825b90505f60018367ffffffffffffffff1614801561159457505f3073ffffffffffffffffffffffffffffffffffffffff163b145b9050811580156115a2575080155b156115d9576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001855f015f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055508315611626576001855f0160086101000a81548160ff0219169083151502179055505b5f73ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff160361168b576040517f6b093aad00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5f1b87036116c6576040517f85ac2b9900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116ce611e5e565b6116d786611e68565b6116df611e7c565b6116e7611e86565b8760015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550865f819055506001600281905550600254877f91c29cbb4a588bd83c10bb6790021858b7b6fb0a1a200aea99e82c63fa9fd45142604051611768919061253a565b60405180910390a383156117ca575f855f0160086101000a81548160ff0219169083151502179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d260016040516117c19190612d5d565b60405180910390a15b5050505050505050565b5f5481565b6117e1611a71565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611851575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161184891906128a1565b60405180910390fd5b61185a81611ca8565b50565b6004602052805f5260405f205f915090505481565b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f33905090565b5f6118aa611e98565b90506002815f0154036118e9576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002815f018190555050565b61196f838473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8585604051602401611928929190612d76565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611ebf565b505050565b5f61197d611e98565b90506001815f018190555050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161480611a3857507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16611a1f611f5a565b73ffffffffffffffffffffffffffffffffffffffff1614155b15611a6f576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b611a7961189a565b73ffffffffffffffffffffffffffffffffffffffff16611a976112b7565b73ffffffffffffffffffffffffffffffffffffffff1614611af657611aba61189a565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401611aed91906128a1565b60405180910390fd5b565b611b00611a71565b50565b8173ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611b6b57506040513d601f19601f82011682018060405250810190611b689190612db1565b60015b611bac57816040517f4c9c8ce3000000000000000000000000000000000000000000000000000000008152600401611ba391906128a1565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b8114611c1257806040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600401611c09919061283b565b60405180910390fd5b611c1c8383611fad565b505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614611ca6576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f611cb1611d79565b90505f815f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905082825f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505050565b5f7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300905090565b611e1c848573ffffffffffffffffffffffffffffffffffffffff166323b872dd868686604051602401611dd593929190612ddc565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611ebf565b50505050565b5f611e2f825f548561201f565b905092915050565b5f7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00905090565b611e66612035565b565b611e70612035565b611e7981612075565b50565b611e84612035565b565b611e8e612035565b611e966120f9565b565b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00905090565b5f5f60205f8451602086015f885af180611ede576040513d5f823e3d81fd5b3d92505f519150505f8214611ef7576001811415611f12565b5f8473ffffffffffffffffffffffffffffffffffffffff163b145b15611f5457836040517f5274afe7000000000000000000000000000000000000000000000000000000008152600401611f4b91906128a1565b60405180910390fd5b50505050565b5f611f867f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b612118565b5f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611fb682612121565b8173ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a25f815111156120125761200c82826121ea565b5061201b565b61201a61226a565b5b5050565b5f8261202b85846122a6565b1490509392505050565b61203d6122f7565b612073576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b61207d612035565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036120ed575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016120e491906128a1565b60405180910390fd5b6120f681611ca8565b50565b612101612035565b5f61210a611e98565b90506001815f018190555050565b5f819050919050565b5f8173ffffffffffffffffffffffffffffffffffffffff163b0361217c57806040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815260040161217391906128a1565b60405180910390fd5b806121a87f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b612118565b5f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60605f5f8473ffffffffffffffffffffffffffffffffffffffff16846040516122139190612e55565b5f60405180830381855af49150503d805f811461224b576040519150601f19603f3d011682016040523d82523d5f602084013e612250565b606091505b5091509150612260858383612315565b9250505092915050565b5f3411156122a4576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f5f8290505f5f90505b84518110156122ec576122dd828683815181106122d0576122cf612e6b565b5b60200260200101516123a2565b915080806001019150506122b0565b508091505092915050565b5f612300611e37565b5f0160089054906101000a900460ff16905090565b60608261232a57612325826123cc565b61239a565b5f825114801561235057505f8473ffffffffffffffffffffffffffffffffffffffff163b145b1561239257836040517f9996b31500000000000000000000000000000000000000000000000000000000815260040161238991906128a1565b60405180910390fd5b81905061239b565b5b9392505050565b5f8183106123b9576123b48284612410565b6123c4565b6123c38383612410565b5b905092915050565b5f815111156123de5780518082602001fd5b6040517fd6bda27500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f825f528160205260405f20905092915050565b5f604051905090565b5f5ffd5b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61245e82612435565b9050919050565b61246e81612454565b8114612478575f5ffd5b50565b5f8135905061248981612465565b92915050565b5f819050919050565b6124a18161248f565b81146124ab575f5ffd5b50565b5f813590506124bc81612498565b92915050565b5f5f604083850312156124d8576124d761242d565b5b5f6124e58582860161247b565b92505060206124f6858286016124ae565b9150509250929050565b5f602082840312156125155761251461242d565b5b5f6125228482850161247b565b91505092915050565b6125348161248f565b82525050565b5f60208201905061254d5f83018461252b565b92915050565b5f602082840312156125685761256761242d565b5b5f612575848285016124ae565b91505092915050565b5f5ffd5b5f5ffd5b5f5ffd5b5f5f83601f84011261259f5761259e61257e565b5b8235905067ffffffffffffffff8111156125bc576125bb612582565b5b6020830191508360208202830111156125d8576125d7612586565b5b9250929050565b5f5f5f604084860312156125f6576125f561242d565b5b5f612603868287016124ae565b935050602084013567ffffffffffffffff81111561262457612623612431565b5b6126308682870161258a565b92509250509250925092565b5f819050919050565b61264e8161263c565b8114612658575f5ffd5b50565b5f8135905061266981612645565b92915050565b5f602082840312156126845761268361242d565b5b5f6126918482850161265b565b91505092915050565b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6126e48261269e565b810181811067ffffffffffffffff82111715612703576127026126ae565b5b80604052505050565b5f612715612424565b905061272182826126db565b919050565b5f67ffffffffffffffff8211156127405761273f6126ae565b5b6127498261269e565b9050602081019050919050565b828183375f83830152505050565b5f61277661277184612726565b61270c565b9050828152602081018484840111156127925761279161269a565b5b61279d848285612756565b509392505050565b5f82601f8301126127b9576127b861257e565b5b81356127c9848260208601612764565b91505092915050565b5f5f604083850312156127e8576127e761242d565b5b5f6127f58582860161247b565b925050602083013567ffffffffffffffff81111561281657612815612431565b5b612822858286016127a5565b9150509250929050565b6128358161263c565b82525050565b5f60208201905061284e5f83018461282c565b92915050565b5f5f6040838503121561286a5761286961242d565b5b5f6128778582860161247b565b92505060206128888582860161247b565b9150509250929050565b61289b81612454565b82525050565b5f6020820190506128b45f830184612892565b92915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f6128ec826128ba565b6128f681856128c4565b93506129068185602086016128d4565b61290f8161269e565b840191505092915050565b5f6020820190508181035f83015261293281846128e2565b905092915050565b5f67ffffffffffffffff821115612954576129536126ae565b5b602082029050602081019050919050565b5f6129776129728461293a565b61270c565b9050808382526020820190506020840283018581111561299a57612999612586565b5b835b818110156129c357806129af888261265b565b84526020840193505060208101905061299c565b5050509392505050565b5f82601f8301126129e1576129e061257e565b5b81356129f1848260208601612965565b91505092915050565b5f5f5f60608486031215612a1157612a1061242d565b5b5f612a1e8682870161247b565b9350506020612a2f868287016124ae565b925050604084013567ffffffffffffffff811115612a5057612a4f612431565b5b612a5c868287016129cd565b9150509250925092565b5f8115159050919050565b612a7a81612a66565b82525050565b5f602082019050612a935f830184612a71565b92915050565b5f5f5f60608486031215612ab057612aaf61242d565b5b5f612abd8682870161247b565b9350506020612ace8682870161265b565b9250506040612adf8682870161247b565b9150509250925092565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612b208261248f565b9150612b2b8361248f565b9250828203905081811115612b4357612b42612ae9565b5b92915050565b5f612b538261248f565b9150612b5e8361248f565b9250828201905080821115612b7657612b75612ae9565b5b92915050565b5f604082019050612b8f5f83018561252b565b612b9c602083018461252b565b9392505050565b7f4e6f7420617574686f72697a656420746f20757064617465206d65726b6c65205f8201527f726f6f7400000000000000000000000000000000000000000000000000000000602082015250565b5f612bfd6024836128c4565b9150612c0882612ba3565b604082019050919050565b5f6020820190508181035f830152612c2a81612bf1565b9050919050565b5f612c3b8261248f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612c6d57612c6c612ae9565b5b600182019050919050565b5f8160601b9050919050565b5f612c8e82612c78565b9050919050565b5f612c9f82612c84565b9050919050565b612cb7612cb282612454565b612c95565b82525050565b5f819050919050565b612cd7612cd28261248f565b612cbd565b82525050565b5f612ce88285612ca6565b601482019150612cf88284612cc6565b6020820191508190509392505050565b5f819050919050565b5f67ffffffffffffffff82169050919050565b5f819050919050565b5f612d47612d42612d3d84612d08565b612d24565b612d11565b9050919050565b612d5781612d2d565b82525050565b5f602082019050612d705f830184612d4e565b92915050565b5f604082019050612d895f830185612892565b612d96602083018461252b565b9392505050565b5f81519050612dab81612645565b92915050565b5f60208284031215612dc657612dc561242d565b5b5f612dd384828501612d9d565b91505092915050565b5f606082019050612def5f830186612892565b612dfc6020830185612892565b612e09604083018461252b565b949350505050565b5f81519050919050565b5f81905092915050565b5f612e2f82612e11565b612e398185612e1b565b9350612e498185602086016128d4565b80840191505092915050565b5f612e608284612e25565b915081905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffdfea2646970667358221220a87d31d7d48b568d2e16fbe58b695d46259e330de4391c52b6c80082989a57ff64736f6c634300081c0033