143 txs
138 calls
constructor
constructor(address _usdc, address _usdt, address _ethReceiver, address _priceFeed)
functions
claimingEnabled
viewfunction claimingEnabled() view returns (bool)
contributions
viewfunction contributions(address, address) view returns (uint256)
currentStageId
viewfunction currentStageId() view returns (uint8)
ETH_ADDRESS
viewfunction ETH_ADDRESS() view returns (address)
ethPriceFeed
viewfunction ethPriceFeed() view returns (address)
ethReceiver
viewfunction ethReceiver() view returns (address)
getContribution
viewfunction getContribution(address user, address token) view returns (uint256)
getCurrentStage
viewfunction getCurrentStage() view returns (string name, uint256 price, uint256 tokenAllocation, uint256 tokensSold, bool active)
getEthPrice
viewfunction getEthPrice() view returns (uint256)
hasClaimed
viewfunction hasClaimed(address) view returns (bool)
lynoToken
viewfunction lynoToken() view returns (address)
owner
viewfunction owner() view returns (address)
paused
viewfunction paused() view returns (bool)
PRECISION
viewfunction PRECISION() view returns (uint256)
purchasedTokens
viewfunction purchasedTokens(address) view returns (uint256)
stages
viewfunction stages(uint8) view returns (string name, uint256 price, uint256 tokenAllocation, uint256 tokensSold, bool active)
totalContributions
viewfunction totalContributions(address token) view returns (uint256)
totalContributionsByToken
viewfunction totalContributionsByToken(address) view returns (uint256)
totalTokensSold
viewfunction totalTokensSold() view returns (uint256)
usdcAddress
viewfunction usdcAddress() view returns (address)
usdtAddress
viewfunction usdtAddress() view returns (address)
buyWithETH
payablefunction buyWithETH() payable
buyWithUSDC
nonpayablefunction buyWithUSDC(uint256 amount)
buyWithUSDT
nonpayablefunction buyWithUSDT(uint256 amount)
claim
nonpayablefunction claim()
enableClaiming
nonpayablefunction enableClaiming()
pause
nonpayablefunction pause()
renounceOwnership
nonpayablefunction renounceOwnership()
setStage
nonpayablefunction setStage(uint8 newStageId)
setToken
nonpayablefunction setToken(address _lynoToken)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
unpause
nonpayablefunction unpause()
withdrawERC20
nonpayablefunction withdrawERC20(address token)
events
ClaimingEnabled
event ClaimingEnabled()
Contribution
event Contribution(address indexed user, address indexed token, uint256 amount, uint256 tokensAllocated, uint8 stageId, uint256 timestamp)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
Paused
event Paused(address account)
StageChanged
event StageChanged(uint8 oldStageId, uint8 newStageId)
TokensClaimed
event TokensClaimed(address indexed user, uint256 amount)
Unpaused
event Unpaused(address account)
errors
EnforcedPause
error EnforcedPause()
ExpectedPause
error ExpectedPause()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
creation bytecode
0x60806040525f600660156101000a81548160ff021916908315150217905550348015610029575f5ffd5b5060405161477a38038061477a833981810160405281019061004b9190610b22565b335f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036100bc575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016100b39190610b95565b60405180910390fd5b6100cb816103a260201b60201c565b50600180819055505f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610141576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161013890610c08565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036101af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101a690610c70565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361021d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161021490610cd8565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361028b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161028290610d40565b60405180910390fd5b8360025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508260035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160045f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061039961046360201b60201c565b505050506110d8565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6040518060a001604052806040518060400160405280600a81526020017f4561726c79204269726400000000000000000000000000000000000000000000815250815260200166b1a2bc2ec500008152602001670de0b6b3a764000062f424006104cd9190610d94565b81526020015f815260200160011515815250600c5f5f60ff1681526020019081526020015f205f820151815f0190816105069190611009565b506020820151816001015560408201518160020155606082015181600301556080820151816004015f6101000a81548160ff0219169083151502179055509050506040518060a001604052806040518060400160405280600781526020017f5374616765203100000000000000000000000000000000000000000000000000815250815260200166c3663566a580008152602001670de0b6b3a76400006301406f406105b29190610d94565b81526020015f81526020015f1515815250600c5f600160ff1681526020019081526020015f205f820151815f0190816105eb9190611009565b506020820151816001015560408201518160020155606082015181600301556080820151816004015f6101000a81548160ff0219169083151502179055509050506040518060a001604052806040518060400160405280600781526020017f5374616765203200000000000000000000000000000000000000000000000000815250815260200166d529ae9e8600008152602001670de0b6b3a76400006301406f406106979190610d94565b81526020015f81526020015f1515815250600c5f600260ff1681526020019081526020015f205f820151815f0190816106d09190611009565b506020820151816001015560408201518160020155606082015181600301556080820151816004015f6101000a81548160ff0219169083151502179055509050506040518060a001604052806040518060400160405280600781526020017f5374616765203300000000000000000000000000000000000000000000000000815250815260200166f8b0a10e4700008152602001670de0b6b3a76400006301406f4061077c9190610d94565b81526020015f81526020015f1515815250600c5f600360ff1681526020019081526020015f205f820151815f0190816107b59190611009565b506020820151816001015560408201518160020155606082015181600301556080820151816004015f6101000a81548160ff0219169083151502179055509050506040518060a001604052806040518060400160405280600781526020017f5374616765203400000000000000000000000000000000000000000000000000815250815260200167011c37937e0800008152602001670de0b6b3a76400006301406f406108629190610d94565b81526020015f81526020015f1515815250600c5f600460ff1681526020019081526020015f205f820151815f01908161089b9190611009565b506020820151816001015560408201518160020155606082015181600301556080820151816004015f6101000a81548160ff0219169083151502179055509050506040518060a001604052806040518060400160405280600781526020017f5374616765203500000000000000000000000000000000000000000000000000815250815260200167012dfb0cb5e880008152602001670de0b6b3a764000063016e36006109489190610d94565b81526020015f81526020015f1515815250600c5f600560ff1681526020019081526020015f205f820151815f0190816109819190611009565b506020820151816001015560408201518160020155606082015181600301556080820151816004015f6101000a81548160ff0219169083151502179055509050506040518060a001604052806040518060400160405280600a81526020017f426f6e7573204669726500000000000000000000000000000000000000000000815250815260200167016345785d8a00008152602001670de0b6b3a764000062f42400610a2d9190610d94565b81526020015f81526020015f1515815250600c5f600660ff1681526020019081526020015f205f820151815f019081610a669190611009565b506020820151816001015560408201518160020155606082015181600301556080820151816004015f6101000a81548160ff0219169083151502179055509050505f600660146101000a81548160ff021916908360ff160217905550565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610af182610ac8565b9050919050565b610b0181610ae7565b8114610b0b575f5ffd5b50565b5f81519050610b1c81610af8565b92915050565b5f5f5f5f60808587031215610b3a57610b39610ac4565b5b5f610b4787828801610b0e565b9450506020610b5887828801610b0e565b9350506040610b6987828801610b0e565b9250506060610b7a87828801610b0e565b91505092959194509250565b610b8f81610ae7565b82525050565b5f602082019050610ba85f830184610b86565b92915050565b5f82825260208201905092915050565b7f496e76616c6964205553444320616464726573730000000000000000000000005f82015250565b5f610bf2601483610bae565b9150610bfd82610bbe565b602082019050919050565b5f6020820190508181035f830152610c1f81610be6565b9050919050565b7f496e76616c6964205553445420616464726573730000000000000000000000005f82015250565b5f610c5a601483610bae565b9150610c6582610c26565b602082019050919050565b5f6020820190508181035f830152610c8781610c4e565b9050919050565b7f496e76616c6964204554482072656365697665722061646472657373000000005f82015250565b5f610cc2601c83610bae565b9150610ccd82610c8e565b602082019050919050565b5f6020820190508181035f830152610cef81610cb6565b9050919050565b7f496e76616c6964207072696365206665656420616464726573730000000000005f82015250565b5f610d2a601a83610bae565b9150610d3582610cf6565b602082019050919050565b5f6020820190508181035f830152610d5781610d1e565b9050919050565b5f819050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610d9e82610d5e565b9150610da983610d5e565b9250828202610db781610d5e565b91508282048414831517610dce57610dcd610d67565b5b5092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680610e5057607f821691505b602082108103610e6357610e62610e0c565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302610ec57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610e8a565b610ecf8683610e8a565b95508019841693508086168417925050509392505050565b5f819050919050565b5f610f0a610f05610f0084610d5e565b610ee7565b610d5e565b9050919050565b5f819050919050565b610f2383610ef0565b610f37610f2f82610f11565b848454610e96565b825550505050565b5f5f905090565b610f4e610f3f565b610f59818484610f1a565b505050565b5b81811015610f7c57610f715f82610f46565b600181019050610f5f565b5050565b601f821115610fc157610f9281610e69565b610f9b84610e7b565b81016020851015610faa578190505b610fbe610fb685610e7b565b830182610f5e565b50505b505050565b5f82821c905092915050565b5f610fe15f1984600802610fc6565b1980831691505092915050565b5f610ff98383610fd2565b9150826002028217905092915050565b61101282610dd5565b67ffffffffffffffff81111561102b5761102a610ddf565b5b6110358254610e39565b611040828285610f80565b5f60209050601f831160018114611071575f841561105f578287015190505b6110698582610fee565b8655506110d0565b601f19841661107f86610e69565b5f5b828110156110a657848901518255600182019150602085019450602081019050611081565b868310156110c357848901516110bf601f891682610fd2565b8355505b6001600288020188555050505b505050505050565b613695806110e55f395ff3fe6080604052600436106101ed575f3560e01c806373b2e80e1161010c578063aeccf7351161009f578063e282a8741161006e578063e282a8741461066d578063ec45127a146106a9578063eedbe31d146106d3578063f2fde38b14610701578063f4f3b20014610729576101ed565b8063aeccf735146105c9578063af7665ce146105f1578063b98884721461061b578063ce3cd99714610645576101ed565b80639ab4a445116100db5780639ab4a44514610523578063a734f06e1461054d578063a7c6016014610577578063aaf5eb681461059f576101ed565b806373b2e80e1461046b5780637ed3deba146104a75780638456cb59146104e35780638da5cb5b146104f9576101ed565b80632a23a6b6116101845780635c975abb116101535780635c975abb146103d757806363b201171461040157806367c9b0171461042b578063715018a614610455576101ed565b80632a23a6b6146103455780633f4ba83a1461036f5780634bae6f3f146103855780634e71d92d146103c1576101ed565b8063150d283d116101c0578063150d283d146102a95780631e88b2aa146102b35780632081a88c146102f357806329369ccf14610309576101ed565b806302d45457146101f15780630e141a9b1461021b578063126eac4314610245578063144fa6d714610281575b5f5ffd5b3480156101fc575f5ffd5b50610205610751565b6040516102129190612901565b60405180910390f35b348015610226575f5ffd5b5061022f610776565b60405161023c9190612934565b60405180910390f35b348015610250575f5ffd5b5061026b6004803603810190610266919061297b565b610789565b60405161027891906129d1565b60405180910390f35b34801561028c575f5ffd5b506102a760048036038101906102a291906129ea565b61093b565b005b6102b1610a83565b005b3480156102be575f5ffd5b506102d960048036038101906102d49190612a4b565b610ef0565b6040516102ea959493929190612ae6565b60405180910390f35b3480156102fe575f5ffd5b50610307610fb4565b005b348015610314575f5ffd5b5061032f600480360381019061032a919061297b565b611094565b60405161033c91906129d1565b60405180910390f35b348015610350575f5ffd5b506103596110b4565b6040516103669190612901565b60405180910390f35b34801561037a575f5ffd5b506103836110d9565b005b348015610390575f5ffd5b506103ab60048036038101906103a691906129ea565b6110eb565b6040516103b891906129d1565b60405180910390f35b3480156103cc575f5ffd5b506103d5611100565b005b3480156103e2575f5ffd5b506103eb61139b565b6040516103f89190612934565b60405180910390f35b34801561040c575f5ffd5b506104156113b0565b60405161042291906129d1565b60405180910390f35b348015610436575f5ffd5b5061043f6113b6565b60405161044c91906129d1565b60405180910390f35b348015610460575f5ffd5b506104696114a5565b005b348015610476575f5ffd5b50610491600480360381019061048c91906129ea565b6114b8565b60405161049e9190612934565b60405180910390f35b3480156104b2575f5ffd5b506104cd60048036038101906104c891906129ea565b6114d5565b6040516104da91906129d1565b60405180910390f35b3480156104ee575f5ffd5b506104f761164b565b005b348015610504575f5ffd5b5061050d61165d565b60405161051a9190612901565b60405180910390f35b34801561052e575f5ffd5b50610537611684565b6040516105449190612901565b60405180910390f35b348015610558575f5ffd5b506105616116a9565b60405161056e9190612901565b60405180910390f35b348015610582575f5ffd5b5061059d60048036038101906105989190612b68565b6116c1565b005b3480156105aa575f5ffd5b506105b3611ac0565b6040516105c091906129d1565b60405180910390f35b3480156105d4575f5ffd5b506105ef60048036038101906105ea9190612b68565b611acc565b005b3480156105fc575f5ffd5b50610605611ecb565b6040516106129190612bee565b60405180910390f35b348015610626575f5ffd5b5061062f611ef0565b60405161063c9190612901565b60405180910390f35b348015610650575f5ffd5b5061066b60048036038101906106669190612a4b565b611f15565b005b348015610678575f5ffd5b50610693600480360381019061068e91906129ea565b612093565b6040516106a091906129d1565b60405180910390f35b3480156106b4575f5ffd5b506106bd6120a8565b6040516106ca9190612c16565b60405180910390f35b3480156106de575f5ffd5b506106e76120bb565b6040516106f8959493929190612ae6565b60405180910390f35b34801561070c575f5ffd5b50610727600480360381019061072291906129ea565b6121e6565b005b348015610734575f5ffd5b5061074f600480360381019061074a91906129ea565b61226a565b005b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660159054906101000a900460ff1681565b5f73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161480610824575060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b8061087b575060035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b6108ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b190612c79565b60405180910390fd5b600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b610943612444565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036109b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a890612ce1565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3790612d49565b60405180910390fd5b8060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610a8b6124cb565b610a93612511565b5f3411610ad5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610acc90612dd7565b60405180910390fd5b5f600c5f600660149054906101000a900460ff1660ff1660ff1681526020019081526020015f209050806004015f9054906101000a900460ff16610b4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4590612e3f565b60405180910390fd5b5f610b576113b6565b90505f670de0b6b3a76400008234610b6f9190612e8a565b610b799190612ef8565b90505f8360010154670de0b6b3a764000083610b959190612e8a565b610b9f9190612ef8565b90505f8190508460020154818660030154610bba9190612f28565b1115610bfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf290612fa5565b60405180910390fd5b80856003015f828254610c0e9190612f28565b925050819055508060075f828254610c269190612f28565b925050819055508060085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610c799190612f28565b9250508190555034600a5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610d1b9190612f28565b9250508190555034600b5f73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610d829190612f28565b925050819055505f60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1634604051610dcf90612ff0565b5f6040518083038185875af1925050503d805f8114610e09576040519150601f19603f3d011682016040523d82523d5f602084013e610e0e565b606091505b5050905080610e52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e499061304e565b60405180910390fd5b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f99090e5231c4c7765fabae78f8cca1dbd9296387cdc37a898de0d3cb7f3647b83485600660149054906101000a900460ff1642604051610ed8949392919061306c565b60405180910390a3505050505050610eee612552565b565b600c602052805f5260405f205f91509050805f018054610f0f906130dc565b80601f0160208091040260200160405190810160405280929190818152602001828054610f3b906130dc565b8015610f865780601f10610f5d57610100808354040283529160200191610f86565b820191905f5260205f20905b815481529060010190602001808311610f6957829003601f168201915b505050505090806001015490806002015490806003015490806004015f9054906101000a900460ff16905085565b610fbc612444565b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361104b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104290613156565b60405180910390fd5b6001600660156101000a81548160ff0219169083151502179055507f25b238f97b16f614c2cc471460ad0d72c33c632bde1300d098e531ed9b5a627a60405160405180910390a1565b600a602052815f5260405f20602052805f5260405f205f91509150505481565b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6110e1612444565b6110e961255b565b565b6008602052805f5260405f205f915090505481565b6111086124cb565b600660159054906101000a900460ff16611157576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114e906131be565b60405180910390fd5b5f60085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054116111d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111cd90613226565b60405180910390fd5b60095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615611260576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112579061328e565b60405180910390fd5b5f60085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050600160095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550611342338260055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166125bc9092919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff167f896e034966eaaf1adc54acc0f257056febbd300c9e47182cf761982cf1f5e4308260405161138891906129d1565b60405180910390a250611399612552565b565b5f5f60149054906101000a900460ff16905090565b60075481565b5f5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015611422573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114469190613332565b5050509150505f811361148e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611485906133f3565b60405180910390fd5b6402540be4008161149f9190612e8a565b91505090565b6114ad612444565b6114b65f61263b565b565b6009602052805f5260405f205f915054906101000a900460ff1681565b5f73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161480611570575060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b806115c7575060035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b611606576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115fd90612c79565b60405180910390fd5b600b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b611653612444565b61165b6126fc565b565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b6116c96124cb565b6116d1612511565b5f8111611713576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170a9061345b565b60405180910390fd5b5f600c5f600660149054906101000a900460ff1660ff1660ff1681526020019081526020015f209050806004015f9054906101000a900460ff1661178c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178390612e3f565b60405180910390fd5b5f64e8d4a510008361179e9190612e8a565b90505f8260010154670de0b6b3a7640000836117ba9190612e8a565b6117c49190612ef8565b90505f81905083600201548185600301546117df9190612f28565b1115611820576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181790612fa5565b60405180910390fd5b80846003015f8282546118339190612f28565b925050819055508060075f82825461184b9190612f28565b925050819055508060085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461189e9190612f28565b9250508190555084600a5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461194d9190612f28565b9250508190555084600b5f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546119c19190612f28565b92505081905550611a1633308760035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661275e909392919063ffffffff16565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f99090e5231c4c7765fabae78f8cca1dbd9296387cdc37a898de0d3cb7f3647b88784600660149054906101000a900460ff1642604051611aa9949392919061306c565b60405180910390a350505050611abd612552565b50565b670de0b6b3a764000081565b611ad46124cb565b611adc612511565b5f8111611b1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b159061345b565b60405180910390fd5b5f600c5f600660149054906101000a900460ff1660ff1660ff1681526020019081526020015f209050806004015f9054906101000a900460ff16611b97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8e90612e3f565b60405180910390fd5b5f64e8d4a5100083611ba99190612e8a565b90505f8260010154670de0b6b3a764000083611bc59190612e8a565b611bcf9190612ef8565b90505f8190508360020154818560030154611bea9190612f28565b1115611c2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2290612fa5565b60405180910390fd5b80846003015f828254611c3e9190612f28565b925050819055508060075f828254611c569190612f28565b925050819055508060085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254611ca99190612f28565b9250508190555084600a5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254611d589190612f28565b9250508190555084600b5f60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254611dcc9190612f28565b92505081905550611e2133308760025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661275e909392919063ffffffff16565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f99090e5231c4c7765fabae78f8cca1dbd9296387cdc37a898de0d3cb7f3647b88784600660149054906101000a900460ff1642604051611eb4949392919061306c565b60405180910390a350505050611ec8612552565b50565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611f1d612444565b60068160ff161115611f64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5b906134c3565b60405180910390fd5b600660149054906101000a900460ff1660ff168160ff1603611fbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb29061352b565b60405180910390fd5b5f600c5f600660149054906101000a900460ff1660ff1660ff1681526020019081526020015f206004015f6101000a81548160ff0219169083151502179055506001600c5f8360ff1660ff1681526020019081526020015f206004015f6101000a81548160ff0219169083151502179055507f0f63b8bffe147a0fe1362da0e6e3ae0fcffce5497482f4d438715fe53890acf1600660149054906101000a900460ff168260405161206d929190613549565b60405180910390a180600660146101000a81548160ff021916908360ff16021790555050565b600b602052805f5260405f205f915090505481565b600660149054906101000a900460ff1681565b60605f5f5f5f5f600c5f600660149054906101000a900460ff1660ff1660ff1681526020019081526020015f206040518060a00160405290815f82018054612102906130dc565b80601f016020809104026020016040519081016040528092919081815260200182805461212e906130dc565b80156121795780601f1061215057610100808354040283529160200191612179565b820191905f5260205f20905b81548152906001019060200180831161215c57829003601f168201915b50505050508152602001600182015481526020016002820154815260200160038201548152602001600482015f9054906101000a900460ff1615151515815250509050805f0151816020015182604001518360600151846080015195509550955095509550509091929394565b6121ee612444565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361225e575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016122559190612901565b60405180910390fd5b6122678161263b565b50565b612272612444565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480612319575060035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b612358576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234f90612c79565b60405180910390fd5b5f8173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016123929190612901565b602060405180830381865afa1580156123ad573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123d19190613570565b90505f8111612415576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240c906135e5565b60405180910390fd5b61244033828473ffffffffffffffffffffffffffffffffffffffff166125bc9092919063ffffffff16565b5050565b61244c6127e0565b73ffffffffffffffffffffffffffffffffffffffff1661246a61165d565b73ffffffffffffffffffffffffffffffffffffffff16146124c95761248d6127e0565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016124c09190612901565b60405180910390fd5b565b600260015403612507576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600181905550565b61251961139b565b15612550576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60018081905550565b6125636127e7565b5f5f60146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6125a56127e0565b6040516125b29190612901565b60405180910390a1565b612636838473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85856040516024016125ef929190613603565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612827565b505050565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612704612511565b60015f60146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586127476127e0565b6040516127549190612901565b60405180910390a1565b6127da848573ffffffffffffffffffffffffffffffffffffffff166323b872dd8686866040516024016127939392919061362a565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612827565b50505050565b5f33905090565b6127ef61139b565b612825576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f5f60205f8451602086015f885af180612846576040513d5f823e3d81fd5b3d92505f519150505f821461285f57600181141561287a565b5f8473ffffffffffffffffffffffffffffffffffffffff163b145b156128bc57836040517f5274afe70000000000000000000000000000000000000000000000000000000081526004016128b39190612901565b60405180910390fd5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6128eb826128c2565b9050919050565b6128fb816128e1565b82525050565b5f6020820190506129145f8301846128f2565b92915050565b5f8115159050919050565b61292e8161291a565b82525050565b5f6020820190506129475f830184612925565b92915050565b5f5ffd5b61295a816128e1565b8114612964575f5ffd5b50565b5f8135905061297581612951565b92915050565b5f5f604083850312156129915761299061294d565b5b5f61299e85828601612967565b92505060206129af85828601612967565b9150509250929050565b5f819050919050565b6129cb816129b9565b82525050565b5f6020820190506129e45f8301846129c2565b92915050565b5f602082840312156129ff576129fe61294d565b5b5f612a0c84828501612967565b91505092915050565b5f60ff82169050919050565b612a2a81612a15565b8114612a34575f5ffd5b50565b5f81359050612a4581612a21565b92915050565b5f60208284031215612a6057612a5f61294d565b5b5f612a6d84828501612a37565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f612ab882612a76565b612ac28185612a80565b9350612ad2818560208601612a90565b612adb81612a9e565b840191505092915050565b5f60a0820190508181035f830152612afe8188612aae565b9050612b0d60208301876129c2565b612b1a60408301866129c2565b612b2760608301856129c2565b612b346080830184612925565b9695505050505050565b612b47816129b9565b8114612b51575f5ffd5b50565b5f81359050612b6281612b3e565b92915050565b5f60208284031215612b7d57612b7c61294d565b5b5f612b8a84828501612b54565b91505092915050565b5f819050919050565b5f612bb6612bb1612bac846128c2565b612b93565b6128c2565b9050919050565b5f612bc782612b9c565b9050919050565b5f612bd882612bbd565b9050919050565b612be881612bce565b82525050565b5f602082019050612c015f830184612bdf565b92915050565b612c1081612a15565b82525050565b5f602082019050612c295f830184612c07565b92915050565b7f556e737570706f7274656420746f6b656e0000000000000000000000000000005f82015250565b5f612c63601183612a80565b9150612c6e82612c2f565b602082019050919050565b5f6020820190508181035f830152612c9081612c57565b9050919050565b7f496e76616c696420746f6b656e206164647265737300000000000000000000005f82015250565b5f612ccb601583612a80565b9150612cd682612c97565b602082019050919050565b5f6020820190508181035f830152612cf881612cbf565b9050919050565b7f546f6b656e20616c7265616479207365740000000000000000000000000000005f82015250565b5f612d33601183612a80565b9150612d3e82612cff565b602082019050919050565b5f6020820190508181035f830152612d6081612d27565b9050919050565b7f45544820616d6f756e74206d7573742062652067726561746572207468616e205f8201527f3000000000000000000000000000000000000000000000000000000000000000602082015250565b5f612dc1602183612a80565b9150612dcc82612d67565b604082019050919050565b5f6020820190508181035f830152612dee81612db5565b9050919050565b7f43757272656e74207374616765206e6f742061637469766500000000000000005f82015250565b5f612e29601883612a80565b9150612e3482612df5565b602082019050919050565b5f6020820190508181035f830152612e5681612e1d565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612e94826129b9565b9150612e9f836129b9565b9250828202612ead816129b9565b91508282048414831517612ec457612ec3612e5d565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f612f02826129b9565b9150612f0d836129b9565b925082612f1d57612f1c612ecb565b5b828204905092915050565b5f612f32826129b9565b9150612f3d836129b9565b9250828201905080821115612f5557612f54612e5d565b5b92915050565b7f4578636565647320737461676520616c6c6f636174696f6e00000000000000005f82015250565b5f612f8f601883612a80565b9150612f9a82612f5b565b602082019050919050565b5f6020820190508181035f830152612fbc81612f83565b9050919050565b5f81905092915050565b50565b5f612fdb5f83612fc3565b9150612fe682612fcd565b5f82019050919050565b5f612ffa82612fd0565b9150819050919050565b7f455448207472616e73666572206661696c6564000000000000000000000000005f82015250565b5f613038601383612a80565b915061304382613004565b602082019050919050565b5f6020820190508181035f8301526130658161302c565b9050919050565b5f60808201905061307f5f8301876129c2565b61308c60208301866129c2565b6130996040830185612c07565b6130a660608301846129c2565b95945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806130f357607f821691505b602082108103613106576131056130af565b5b50919050565b7f546f6b656e206e6f7420736574000000000000000000000000000000000000005f82015250565b5f613140600d83612a80565b915061314b8261310c565b602082019050919050565b5f6020820190508181035f83015261316d81613134565b9050919050565b7f436c61696d696e67206e6f7420656e61626c65642079657400000000000000005f82015250565b5f6131a8601883612a80565b91506131b382613174565b602082019050919050565b5f6020820190508181035f8301526131d58161319c565b9050919050565b7f4e6f20746f6b656e7320746f20636c61696d00000000000000000000000000005f82015250565b5f613210601283612a80565b915061321b826131dc565b602082019050919050565b5f6020820190508181035f83015261323d81613204565b9050919050565b7f416c726561647920636c61696d656400000000000000000000000000000000005f82015250565b5f613278600f83612a80565b915061328382613244565b602082019050919050565b5f6020820190508181035f8301526132a58161326c565b9050919050565b5f69ffffffffffffffffffff82169050919050565b6132ca816132ac565b81146132d4575f5ffd5b50565b5f815190506132e5816132c1565b92915050565b5f819050919050565b6132fd816132eb565b8114613307575f5ffd5b50565b5f81519050613318816132f4565b92915050565b5f8151905061332c81612b3e565b92915050565b5f5f5f5f5f60a0868803121561334b5761334a61294d565b5b5f613358888289016132d7565b95505060206133698882890161330a565b945050604061337a8882890161331e565b935050606061338b8882890161331e565b925050608061339c888289016132d7565b9150509295509295909350565b7f496e76616c6964204554482070726963650000000000000000000000000000005f82015250565b5f6133dd601183612a80565b91506133e8826133a9565b602082019050919050565b5f6020820190508181035f83015261340a816133d1565b9050919050565b7f416d6f756e74206d7573742062652067726561746572207468616e20300000005f82015250565b5f613445601d83612a80565b915061345082613411565b602082019050919050565b5f6020820190508181035f83015261347281613439565b9050919050565b7f496e76616c6964207374616765204944000000000000000000000000000000005f82015250565b5f6134ad601083612a80565b91506134b882613479565b602082019050919050565b5f6020820190508181035f8301526134da816134a1565b9050919050565b7f416c726561647920696e207468697320737461676500000000000000000000005f82015250565b5f613515601583612a80565b9150613520826134e1565b602082019050919050565b5f6020820190508181035f83015261354281613509565b9050919050565b5f60408201905061355c5f830185612c07565b6135696020830184612c07565b9392505050565b5f602082840312156135855761358461294d565b5b5f6135928482850161331e565b91505092915050565b7f4e6f20746f6b656e7320746f20776974686472617700000000000000000000005f82015250565b5f6135cf601583612a80565b91506135da8261359b565b602082019050919050565b5f6020820190508181035f8301526135fc816135c3565b9050919050565b5f6040820190506136165f8301856128f2565b61362360208301846129c2565b9392505050565b5f60608201905061363d5f8301866128f2565b61364a60208301856128f2565b61365760408301846129c2565b94935050505056fea26469706673582212200b670c59cfbb6e60e5c7c2683d8790816b4f27ce0515f03205b9a019c535e89f64736f6c634300081e0033000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7000000000000000000000000a7565c6f03e0584671d945dd7949a26abb1dcae40000000000000000000000005f4ec3df9cbd43714fe2740f5e3616155c5b8419