3.2k txs
3.2k calls
constructor
constructor(address nftContractAddress, address projectTokenAddress, address btcbTokenAddress, address dexPoolAddress, address initialOwner)
functions
btcbToken
viewfunction btcbToken() view returns (address)
dexPool
viewfunction dexPool() view returns (address)
electricityPricePerTHPerHour
viewfunction electricityPricePerTHPerHour() view returns (uint256)
getAllClaimHistory
viewfunction getAllClaimHistory(uint256 fromTime, uint256 toTime) view returns (tuple[])
getPendingRewards
viewfunction getPendingRewards(address stakerAddress) view returns (uint256 rewardAmount, uint256 electricityDebt)
getStakedNFTs
viewfunction getStakedNFTs(address _staker) view returns (uint256[])
nftContract
viewfunction nftContract() view returns (address)
nftOwners
viewfunction nftOwners(uint256) view returns (address)
owner
viewfunction owner() view returns (address)
PRICE_PRECISION
viewfunction PRICE_PRECISION() view returns (uint256)
PROJECT_TOKEN_DISCOUNT
viewfunction PROJECT_TOKEN_DISCOUNT() view returns (uint256)
projectToken
viewfunction projectToken() view returns (address)
rewardMinimum
viewfunction rewardMinimum() view returns (uint256)
rewardPerTHPerDay
viewfunction rewardPerTHPerDay() view returns (uint256)
stakedNFTs
viewfunction stakedNFTs(address, uint256) view returns (uint256)
stakerAddresses
viewfunction stakerAddresses(uint256) view returns (address)
stakers
viewfunction stakers(address) view returns (uint256 totalPower, uint256 lastRewardTimestamp, uint256 pendingRewards, uint256 electricityDebt)
totalPowerStaked
viewfunction totalPowerStaked() view returns (uint256)
TWAP_PERIOD
viewfunction TWAP_PERIOD() view returns (uint256)
claimRewards
nonpayablefunction claimRewards(bool payWithProjectToken)
distributeRewards
nonpayablefunction distributeRewards(uint256 rewardAmount)
renounceOwnership
nonpayablefunction renounceOwnership()
setElectricityPrice
nonpayablefunction setElectricityPrice(uint256 _pricePerTHPerHour)
setProjectToken
nonpayablefunction setProjectToken(address newProjectToken)
setRewardMinimum
nonpayablefunction setRewardMinimum(uint256 _rewardMinimum)
setRewardRate
nonpayablefunction setRewardRate(uint256 _rewardPerTHPerDay)
stake
nonpayablefunction stake(uint256 tokenId)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
unstake
nonpayablefunction unstake(uint256 tokenId)
events
NewElectricityPriceSet
event NewElectricityPriceSet(uint256 price)
NewRewardRateSet
event NewRewardRateSet(uint256 rewardRate)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
ProjectTokenUpdated
event ProjectTokenUpdated(address indexed newProjectToken)
RewardsClaimed
event RewardsClaimed(address indexed staker, uint256 rewardAmount, uint256 electricityDebt, bool paidWithProjectToken)
RewardsDistributed
event RewardsDistributed(uint256 totalRewardAmount)
Staked
event Staked(address indexed staker, uint256 tokenId, uint256 power)
Unstaked
event Unstaked(address indexed staker, uint256 tokenId, uint256 power)
errors
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
creation bytecode
0x60e06040523480156200001157600080fd5b5060405162003c5f38038062003c5f8339818101604052810190620000379190620002fa565b80600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603620000ad5760006040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401620000a4919062000393565b60405180910390fd5b620000be81620001cc60201b60201c565b508473ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505083600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250508173ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff1681525050640306dc4200600881905550655af3107a400060098190555064174876e800600a819055505050505050620003b0565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620002c28262000295565b9050919050565b620002d481620002b5565b8114620002e057600080fd5b50565b600081519050620002f481620002c9565b92915050565b600080600080600060a0868803121562000319576200031862000290565b5b60006200032988828901620002e3565b95505060206200033c88828901620002e3565b94505060406200034f88828901620002e3565b93505060606200036288828901620002e3565b92505060806200037588828901620002e3565b9150509295509295909350565b6200038d81620002b5565b82525050565b6000602082019050620003aa600083018462000382565b92915050565b60805160a05160c051613839620004266000396000818161069301526113e301526000818161090901528181610a25015281816118ba0152612129015260008181610bef01528181610f430152818161134e01528181611c6001528181611d5201528181612032015261210501526138396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c80638e91e56111610104578063c8e52783116100a2578063efe9c9e211610071578063efe9c9e2146104fd578063f2fde38b14610519578063f6ed201714610535578063f706004814610566576101cf565b8063c8e5278314610485578063d56d229d146104a3578063de9a7e19146104c1578063e0a9b720146104df576101cf565b80639e447fc6116100de5780639e447fc6146103ff578063a694fc3a1461041b578063bbd94c2f14610437578063c83a06ff14610467576101cf565b80638e91e561146103925780639168ae72146103ae57806395082d25146103e1576101cf565b806359974e3811610171578063715018a61161014b578063715018a61461032e578063719e42aa146103385780637ca25184146103565780638da5cb5b14610374576101cf565b806359974e38146102c457806362614e50146102e05780636f70d212146102fe576101cf565b8063459598a2116101ad578063459598a21461022a5780634b60ce771461025a57806357a62252146102785780635969597614610294576101cf565b80630e6878a3146101d45780632e17de78146101f05780633d2fa2d21461020c575b600080fd5b6101ee60048036038101906101e99190612777565b610596565b005b61020a600480360381019061020591906127da565b610e9e565b005b6102146113e1565b6040516102219190612886565b60405180910390f35b610244600480360381019061023f91906127da565b611405565b60405161025191906128c2565b60405180910390f35b610262611444565b60405161026f91906128fe565b60405180910390f35b610292600480360381019061028d91906127da565b61146a565b005b6102ae60048036038101906102a99190612919565b6114b3565b6040516102bb9190612bd8565b60405180910390f35b6102de60048036038101906102d991906127da565b61186d565b005b6102e8611ac9565b6040516102f59190612c09565b60405180910390f35b61031860048036038101906103139190612c50565b611acf565b6040516103259190612cec565b60405180910390f35b610336611b66565b005b610340611b7a565b60405161034d9190612c09565b60405180910390f35b61035e611b80565b60405161036b9190612c09565b60405180910390f35b61037c611b87565b60405161038991906128c2565b60405180910390f35b6103ac60048036038101906103a791906127da565b611bb0565b005b6103c860048036038101906103c39190612c50565b611bc2565b6040516103d89493929190612d0e565b60405180910390f35b6103e9611bf2565b6040516103f69190612c09565b60405180910390f35b610419600480360381019061041491906127da565b611bfe565b005b610435600480360381019061043091906127da565b611c47565b005b610451600480360381019061044c91906127da565b6120c4565b60405161045e91906128c2565b60405180910390f35b61046f6120f7565b60405161047c9190612c09565b60405180910390f35b61048d6120fd565b60405161049a9190612c09565b60405180910390f35b6104ab612103565b6040516104b89190612d74565b60405180910390f35b6104c9612127565b6040516104d691906128fe565b60405180910390f35b6104e761214b565b6040516104f49190612c09565b60405180910390f35b61051760048036038101906105129190612c50565b612151565b005b610533600480360381019061052e9190612c50565b61224f565b005b61054f600480360381019061054a9190612c50565b6122d5565b60405161055d929190612d8f565b60405180910390f35b610580600480360381019061057b9190612db8565b6123cd565b60405161058d9190612c09565b60405180910390f35b61059f336123fe565b6000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008160020154905060008260030154905060008060008411806106065750600083115b610645576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161063c90612e55565b60405180910390fd5b600a548411610689576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161068090612ec1565b60405180910390fd5b85156108e85760007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f30d3d1b620151806040518263ffffffff1660e01b81526004016106ed9190612c09565b602060405180830381865afa15801561070a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061072e9190612ef6565b905060008111610773576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076a90612f6f565b60405180910390fd5b60006103e8610384866107869190612fbe565b610790919061302f565b905081670de0b6b3a7640000826107a79190612fbe565b6107b1919061302f565b9250600083116107f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ed906130ac565b60405180910390fd5b809350600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd33610840611b87565b866040518463ffffffff1660e01b815260040161085f939291906130cc565b6020604051808303816000875af115801561087e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108a29190613118565b6108e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d8906131b7565b60405180910390fd5b5050610a06565b838311156109f357600084846108fe91906131d7565b9050839250600094507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166323b872dd3361094c611b87565b846040518463ffffffff1660e01b815260040161096b939291906130cc565b6020604051808303816000875af115801561098a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ae9190613118565b6109ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e49061327d565b60405180910390fd5b50610a05565b8291508284610a0291906131d7565b93505b5b60008560020181905550600085600301819055506000841115610b01577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33866040518363ffffffff1660e01b8152600401610a7e92919061329d565b6020604051808303816000875af1158015610a9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ac19190613118565b610b00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af790613312565b60405180910390fd5b5b6000600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015610b8c57602002820191906000526020600020905b815481526020019060010190808311610b78575b505050505090506000815167ffffffffffffffff811115610bb057610baf613332565b5b604051908082528060200260200182016040528015610bde5781602001602082028036833780820191505090505b50905060005b8251811015610cd3577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166309a32e1c848381518110610c3c57610c3b613361565b5b60200260200101516040518263ffffffff1660e01b8152600401610c609190612c09565b602060405180830381865afa158015610c7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca19190612ef6565b828281518110610cb457610cb3613361565b5b6020026020010181815250508080610ccb90613390565b915050610be4565b5060066040518061014001604052803373ffffffffffffffffffffffffffffffffffffffff168152602001428152602001888152602001878152602001868152602001858152602001896000015481526020018481526020018381526020018a151581525090806001815401808255809150506001900390600052602060002090600a020160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e0820151816007019080519060200190610e00929190612665565b50610100820151816008019080519060200190610e1e929190612665565b506101208201518160090160006101000a81548160ff02191690831515021790555050503373ffffffffffffffffffffffffffffffffffffffff167fbd495203fc7db8566cbc6106126be5d4cbce9f7aba0102877256794d7f4b4c4287878b604051610e8c939291906133e7565b60405180910390a25050505050505050565b3373ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3690613490565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166309a32e1c836040518263ffffffff1660e01b8152600401610f9a9190612c09565b602060405180830381865afa158015610fb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fdb9190612ef6565b9050610fe6336123fe565b6000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508181600001600082825461103d91906131d7565b92505081905550816007600082825461105691906131d7565b925050819055506000600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060005b818054905081101561116157848282815481106110c3576110c2613361565b5b90600052602060002001540361114e5781600183805490506110e591906131d7565b815481106110f6576110f5613361565b5b906000526020600020015482828154811061111457611113613361565b5b906000526020600020018190555081805480611133576111326134b0565b5b60019003818190600052602060002001600090559055611161565b808061115990613390565b9150506110a3565b5060008260000154036112fc5760005b6005805490508110156112fa573373ffffffffffffffffffffffffffffffffffffffff16600582815481106111a9576111a8613361565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036112e7576005600160058054905061120391906131d7565b8154811061121457611213613361565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166005828154811061125357611252613361565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060058054806112ad576112ac6134b0565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556112fa565b80806112f290613390565b915050611171565b505b3373ffffffffffffffffffffffffffffffffffffffff167f7fc4727e062e336010f2c282598ef5f14facb3de68cf8195c2f23e1454b2b74e8585604051611344929190612d8f565b60405180910390a27f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663beabacc83033876040518463ffffffff1660e01b81526004016113a9939291906130cc565b600060405180830381600087803b1580156113c357600080fd5b505af11580156113d7573d6000803e3d6000fd5b5050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6005818154811061141557600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611472612512565b806008819055507fa73391ca57ef5f2b1fbb0f7fde161d9effbee9312949fa88fc57da6687e9ab8f816040516114a89190612c09565b60405180910390a150565b60608183106114f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ee9061352b565b60405180910390fd5b4282111561153a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153190613597565b60405180910390fd5b6000805b6006805490508110156115cc5784600682815481106115605761155f613361565b5b90600052602060002090600a020160010154101580156115a5575083600682815481106115905761158f613361565b5b90600052602060002090600a02016001015411155b156115b95781806115b590613390565b9250505b80806115c490613390565b91505061153e565b5060008167ffffffffffffffff8111156115e9576115e8613332565b5b60405190808252806020026020018201604052801561162257816020015b61160f6126b2565b8152602001906001900390816116075790505b5090506000805b60068054905081101561186057866006828154811061164b5761164a613361565b5b90600052602060002090600a020160010154101580156116905750856006828154811061167b5761167a613361565b5b90600052602060002090600a02016001015411155b1561184d57600681815481106116a9576116a8613361565b5b90600052602060002090600a0201604051806101400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820154815260200160068201548152602001600782018054806020026020016040519081016040528092919081815260200182805480156117a457602002820191906000526020600020905b815481526020019060010190808311611790575b50505050508152602001600882018054806020026020016040519081016040528092919081815260200182805480156117fc57602002820191906000526020600020905b8154815260200190600101908083116117e8575b505050505081526020016009820160009054906101000a900460ff16151515158152505083838151811061183357611832613361565b5b6020026020010181905250818061184990613390565b9250505b808061185890613390565b915050611629565b5081935050505092915050565b611875612512565b600081116118b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118af90613629565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b8152600401611915939291906130cc565b6020604051808303816000875af1158015611934573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119589190613118565b611997576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198e90613312565b60405180910390fd5b6000600754826119a7919061302f565b905060005b600580549050811015611a8d576000600582815481106119cf576119ce613361565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050611a48826123fe565b6000848260000154611a5a9190612fbe565b905080826002016000828254611a709190613649565b925050819055505050508080611a8590613390565b9150506119ac565b507f6d1c76d614228b523baa4dcd9539e2c713b54ff4ab3ff2d1627e7f6cd32be44282604051611abd9190612c09565b60405180910390a15050565b61038481565b6060600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015611b5a57602002820191906000526020600020905b815481526020019060010190808311611b46575b50505050509050919050565b611b6e612512565b611b786000612599565b565b600a5481565b6201518081565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611bb8612512565b80600a8190555050565b60026020528060005260406000206000915090508060000154908060010154908060020154908060030154905084565b670de0b6b3a764000081565b611c06612512565b806009819055507fdb3bb7ae0e8842522a177dc21bbba36c593edeb0926bbe8e123441e875c88d1c81604051611c3c9190612c09565b60405180910390a150565b3373ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ea01ea22836040518263ffffffff1660e01b8152600401611cb79190612c09565b602060405180830381865afa158015611cd4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cf89190613692565b73ffffffffffffffffffffffffffffffffffffffff1614611d4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d459061370b565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166309a32e1c836040518263ffffffff1660e01b8152600401611da99190612c09565b602060405180830381865afa158015611dc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dea9190612ef6565b905060008111611e2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2690613777565b60405180910390fd5b6000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000816000015403611eeb576005339080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055504281600101819055505b611ef4336123fe565b81816000016000828254611f089190613649565b92505081905550600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020839080600181540180825580915050600190039060005260206000200160009091909190915055336003600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160076000828254611fd99190613649565b925050819055503373ffffffffffffffffffffffffffffffffffffffff167f1449c6dd7851abc30abf37f57715f492010519147cc2652fbc38202c18a6ee908484604051612028929190612d8f565b60405180910390a27f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663beabacc83330866040518463ffffffff1660e01b815260040161208d939291906130cc565b600060405180830381600087803b1580156120a757600080fd5b505af11580156120bb573d6000803e3d6000fd5b50505050505050565b60036020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60075481565b60085481565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60095481565b612159612512565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036121c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121bf906137e3565b60405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f7d4472c87c10f649366c8f885beb86eaf0979d29afe4c6d21d9a1a0985a9dc0560405160405180910390a250565b612257612512565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036122c95760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016122c091906128c2565b60405180910390fd5b6122d281612599565b50565b6000806000600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600081600101544261232d91906131d7565b90508160020154935081600301549250600081118015612351575060008260000154115b156123c6576201518081600954846000015461236d9190612fbe565b6123779190612fbe565b612381919061302f565b8461238c9190613649565b9350610e108160085484600001546123a49190612fbe565b6123ae9190612fbe565b6123b8919061302f565b836123c39190613649565b92505b5050915091565b600460205281600052604060002081815481106123e957600080fd5b90600052602060002001600091509150505481565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600081600101544261245391906131d7565b9050600081118015612469575060008260000154115b1561250d576000620151808260095485600001546124879190612fbe565b6124919190612fbe565b61249b919061302f565b90506000610e108360085486600001546124b59190612fbe565b6124bf9190612fbe565b6124c9919061302f565b9050818460020160008282546124df9190613649565b92505081905550808460030160008282546124fa9190613649565b9250508190555042846001018190555050505b505050565b61251a61265d565b73ffffffffffffffffffffffffffffffffffffffff16612538611b87565b73ffffffffffffffffffffffffffffffffffffffff16146125975761255b61265d565b6040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161258e91906128c2565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600033905090565b8280548282559060005260206000209081019282156126a1579160200282015b828111156126a0578251825591602001919060010190612685565b5b5090506126ae919061271d565b5090565b604051806101400160405280600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160608152602001606081526020016000151581525090565b5b8082111561273657600081600090555060010161271e565b5090565b600080fd5b60008115159050919050565b6127548161273f565b811461275f57600080fd5b50565b6000813590506127718161274b565b92915050565b60006020828403121561278d5761278c61273a565b5b600061279b84828501612762565b91505092915050565b6000819050919050565b6127b7816127a4565b81146127c257600080fd5b50565b6000813590506127d4816127ae565b92915050565b6000602082840312156127f0576127ef61273a565b5b60006127fe848285016127c5565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061284c61284761284284612807565b612827565b612807565b9050919050565b600061285e82612831565b9050919050565b600061287082612853565b9050919050565b61288081612865565b82525050565b600060208201905061289b6000830184612877565b92915050565b60006128ac82612807565b9050919050565b6128bc816128a1565b82525050565b60006020820190506128d760008301846128b3565b92915050565b60006128e882612853565b9050919050565b6128f8816128dd565b82525050565b600060208201905061291360008301846128ef565b92915050565b600080604083850312156129305761292f61273a565b5b600061293e858286016127c5565b925050602061294f858286016127c5565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61298e816128a1565b82525050565b61299d816127a4565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b60006129db8383612994565b60208301905092915050565b6000602082019050919050565b60006129ff826129a3565b612a0981856129ae565b9350612a14836129bf565b8060005b83811015612a45578151612a2c88826129cf565b9750612a37836129e7565b925050600181019050612a18565b5085935050505092915050565b612a5b8161273f565b82525050565b600061014083016000830151612a7a6000860182612985565b506020830151612a8d6020860182612994565b506040830151612aa06040860182612994565b506060830151612ab36060860182612994565b506080830151612ac66080860182612994565b5060a0830151612ad960a0860182612994565b5060c0830151612aec60c0860182612994565b5060e083015184820360e0860152612b0482826129f4565b915050610100830151848203610100860152612b2082826129f4565b915050610120830151612b37610120860182612a52565b508091505092915050565b6000612b4e8383612a61565b905092915050565b6000602082019050919050565b6000612b6e82612959565b612b788185612964565b935083602082028501612b8a85612975565b8060005b85811015612bc65784840389528151612ba78582612b42565b9450612bb283612b56565b925060208a01995050600181019050612b8e565b50829750879550505050505092915050565b60006020820190508181036000830152612bf28184612b63565b905092915050565b612c03816127a4565b82525050565b6000602082019050612c1e6000830184612bfa565b92915050565b612c2d816128a1565b8114612c3857600080fd5b50565b600081359050612c4a81612c24565b92915050565b600060208284031215612c6657612c6561273a565b5b6000612c7484828501612c3b565b91505092915050565b600082825260208201905092915050565b6000612c99826129a3565b612ca38185612c7d565b9350612cae836129bf565b8060005b83811015612cdf578151612cc688826129cf565b9750612cd1836129e7565b925050600181019050612cb2565b5085935050505092915050565b60006020820190508181036000830152612d068184612c8e565b905092915050565b6000608082019050612d236000830187612bfa565b612d306020830186612bfa565b612d3d6040830185612bfa565b612d4a6060830184612bfa565b95945050505050565b6000612d5e82612853565b9050919050565b612d6e81612d53565b82525050565b6000602082019050612d896000830184612d65565b92915050565b6000604082019050612da46000830185612bfa565b612db16020830184612bfa565b9392505050565b60008060408385031215612dcf57612dce61273a565b5b6000612ddd85828601612c3b565b9250506020612dee858286016127c5565b9150509250929050565b600082825260208201905092915050565b7f4e6f2072657761726473206f7220646562747320746f20636c61696d00000000600082015250565b6000612e3f601c83612df8565b9150612e4a82612e09565b602082019050919050565b60006020820190508181036000830152612e6e81612e32565b9050919050565b7f436c61696d20616d6f756e7420697320746f6f20736d616c6c00000000000000600082015250565b6000612eab601983612df8565b9150612eb682612e75565b602082019050919050565b60006020820190508181036000830152612eda81612e9e565b9050919050565b600081519050612ef0816127ae565b92915050565b600060208284031215612f0c57612f0b61273a565b5b6000612f1a84828501612ee1565b91505092915050565b7f496e76616c69642070726f6a65637420746f6b656e2070726963650000000000600082015250565b6000612f59601b83612df8565b9150612f6482612f23565b602082019050919050565b60006020820190508181036000830152612f8881612f4c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612fc9826127a4565b9150612fd4836127a4565b9250828202612fe2816127a4565b91508282048414831517612ff957612ff8612f8f565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061303a826127a4565b9150613045836127a4565b92508261305557613054613000565b5b828204905092915050565b7f50726f6a65637420746f6b656e20616d6f756e7420746f6f20736d616c6c0000600082015250565b6000613096601e83612df8565b91506130a182613060565b602082019050919050565b600060208201905081810360008301526130c581613089565b9050919050565b60006060820190506130e160008301866128b3565b6130ee60208301856128b3565b6130fb6040830184612bfa565b949350505050565b6000815190506131128161274b565b92915050565b60006020828403121561312e5761312d61273a565b5b600061313c84828501613103565b91505092915050565b7f4661696c656420746f207472616e736665722070726f6a65637420746f6b656e60008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006131a1602183612df8565b91506131ac82613145565b604082019050919050565b600060208201905081810360008301526131d081613194565b9050919050565b60006131e2826127a4565b91506131ed836127a4565b925082820390508181111561320557613204612f8f565b5b92915050565b7f4661696c656420746f207472616e736665722072656d61696e696e672042544360008201527f4220646562740000000000000000000000000000000000000000000000000000602082015250565b6000613267602683612df8565b91506132728261320b565b604082019050919050565b600060208201905081810360008301526132968161325a565b9050919050565b60006040820190506132b260008301856128b3565b6132bf6020830184612bfa565b9392505050565b7f4661696c656420746f207472616e736665722072657761726473000000000000600082015250565b60006132fc601a83612df8565b9150613307826132c6565b602082019050919050565b6000602082019050818103600083015261332b816132ef565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061339b826127a4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036133cd576133cc612f8f565b5b600182019050919050565b6133e18161273f565b82525050565b60006060820190506133fc6000830186612bfa565b6134096020830185612bfa565b61341660408301846133d8565b949350505050565b7f4e6f7420746865206f776e6572206f662074686973204e46542e20486176652060008201527f796f7520616c7265616479207374616b65642074686973204e46543f00000000602082015250565b600061347a603c83612df8565b91506134858261341e565b604082019050919050565b600060208201905081810360008301526134a98161346d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f496e76616c69642074696d652072616e67650000000000000000000000000000600082015250565b6000613515601283612df8565b9150613520826134df565b602082019050919050565b6000602082019050818103600083015261354481613508565b9050919050565b7f456e642074696d652063616e6e6f7420626520696e2066757475726500000000600082015250565b6000613581601c83612df8565b915061358c8261354b565b602082019050919050565b600060208201905081810360008301526135b081613574565b9050919050565b7f52657761726420616d6f756e74206d757374206265206772656174657220746860008201527f616e203000000000000000000000000000000000000000000000000000000000602082015250565b6000613613602483612df8565b915061361e826135b7565b604082019050919050565b6000602082019050818103600083015261364281613606565b9050919050565b6000613654826127a4565b915061365f836127a4565b925082820190508082111561367757613676612f8f565b5b92915050565b60008151905061368c81612c24565b92915050565b6000602082840312156136a8576136a761273a565b5b60006136b68482850161367d565b91505092915050565b7f4e6f7420746865206f776e6572206f662074686973204e46542e000000000000600082015250565b60006136f5601a83612df8565b9150613700826136bf565b602082019050919050565b60006020820190508181036000830152613724816136e8565b9050919050565b7f4e465420686173206e6f20706f77657200000000000000000000000000000000600082015250565b6000613761601083612df8565b915061376c8261372b565b602082019050919050565b6000602082019050818103600083015261379081613754565b9050919050565b7f496e76616c696420746f6b656e20616464726573730000000000000000000000600082015250565b60006137cd601583612df8565b91506137d882613797565b602082019050919050565b600060208201905081810360008301526137fc816137c0565b905091905056fea2646970667358221220593b65e0b5a70373ec99433b9911973d5d23e86c7a6c850e46e45d7ea0b57ec464736f6c634300081400330000000000000000000000006f0432d01ddc77d2c86a6bd5405786d12aa6b4980000000000000000000000002c25eaca82e885a1afbc73aacd861318caaf97430000000000000000000000007130d2a12b9bcbfae4f2634d864a1ee1ce3ead9c000000000000000000000000da9e3112fb434a6361b5da11b75fd02a9e5f4bf100000000000000000000000082503946e026e9f3c82a5a494e6f27fbfd3f7350