0 txs
88.3k calls
constructor
No constructor.
functions
calculateBuy
viewfunction calculateBuy(address token, uint256 amount) view returns (uint256 wlfiAmount, uint256 costUSD)
calculateMaxContribution
viewfunction calculateMaxContribution() view returns (uint256 maxEth, uint256 maxUsd)
counter
viewfunction counter(address) view returns (uint256)
eip712Domain
viewfunction eip712Domain() view returns (bytes1 fields, string name, string version, uint256 chainId, address verifyingContract, bytes32 salt, uint256[] extensions)
ETH
viewfunction ETH() view returns (address)
getAggregatedSaleData
viewfunction getAggregatedSaleData() view returns (uint256 _tokensCap, uint256 _price, uint256 _availableTokensToBuy, uint256 maxEth, uint256 maxUsd, bool _paused)
getCurrentPrice
viewfunction getCurrentPrice() view returns (uint256)
getLatestETHPrice
viewfunction getLatestETHPrice() view returns (uint256)
isGuardian
viewfunction isGuardian(address guardian) view returns (bool guardianStatus)
owner
viewfunction owner() view returns (address)
paused
viewfunction paused() view returns (bool)
pendingOwner
viewfunction pendingOwner() view returns (address)
purchases
viewfunction purchases(address) view returns (uint256)
signer
viewfunction signer() view returns (address)
tokensCap
viewfunction tokensCap() view returns (uint256)
tokensPrice
viewfunction tokensPrice() view returns (uint256)
tokensSold
viewfunction tokensSold() view returns (uint256)
treasury
viewfunction treasury() view returns (address)
USDC
viewfunction USDC() view returns (address)
USDT
viewfunction USDT() view returns (address)
WETH
viewfunction WETH() view returns (address)
wlfiToken
viewfunction wlfiToken() view returns (address)
acceptOwnership
nonpayablefunction acceptOwnership()
buy
payablefunction buy(address token, uint256 amount, bytes signature) payable
initialize
nonpayablefunction initialize(address _ETH, address _WETH, address _USDC, address _USDT, address _wlfiToken, address _ethPriceFeed, address _signer, address _treasury, uint256 _tokensCap, uint256 _tokensPrice)
pause
nonpayablefunction pause()
renounceOwnership
nonpayablefunction renounceOwnership()
rescueTokens
nonpayablefunction rescueTokens(address recipient, address token, uint256 value)
setGuardian
nonpayablefunction setGuardian(address _guardian, bool _status)
setSigner
nonpayablefunction setSigner(address _signer)
setTreasury
nonpayablefunction setTreasury(address _treasury)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
unPause
nonpayablefunction unPause()
events
Buy
event Buy(address indexed buyer, address indexed token, uint256 amount, uint256 cost, uint256 wlfiPrice, uint256 amountContributed)
EIP712DomainChanged
event EIP712DomainChanged()
Initialized
event Initialized(uint64 version)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
OwnershipTransferStarted
event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner)
Paused
event Paused(address account)
SetGuardian
event SetGuardian(address indexed guardian, bool status)
SetTreasury
event SetTreasury(address indexed treasury)
SignerChanged
event SignerChanged(address indexed signer)
Unpaused
event Unpaused(address account)
errors
AddressEmptyCode
error AddressEmptyCode(address target)
AddressInsufficientBalance
error AddressInsufficientBalance(address account)
AMOUNT_MUST_BE_POSITIVE
error AMOUNT_MUST_BE_POSITIVE()
AMOUNT_MUST_BE_ZERO
error AMOUNT_MUST_BE_ZERO()
ECDSAInvalidSignature
error ECDSAInvalidSignature()
ECDSAInvalidSignatureLength
error ECDSAInvalidSignatureLength(uint256 length)
ECDSAInvalidSignatureS
error ECDSAInvalidSignatureS(bytes32 s)
EnforcedPause
error EnforcedPause()
ExpectedPause
error ExpectedPause()
FailedInnerCall
error FailedInnerCall()
INVALID_TOKEN
error INVALID_TOKEN()
InvalidInitialization
error InvalidInitialization()
NotInitializing
error NotInitializing()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
SOLD_OUT
error SOLD_OUT()
creation bytecode
0x6080604052348015600f57600080fd5b5061395f8061001f6000396000f3fe6080604052600436106101fe5760003560e01c8063842a77d31161011d578063c54e44eb116100b0578063eb91d37e1161007f578063f2fde38b11610064578063f2fde38b1461068a578063f496a610146106aa578063f7b188a5146106bd57600080fd5b8063eb91d37e14610655578063f0f442601461066a57600080fd5b8063c54e44eb146105c6578063cdb86f44146105f3578063cea9d26f14610620578063e30c39781461064057600080fd5b806389a30271116100ec57806389a302711461052a5780638da5cb5b14610557578063ad5c46481461056c578063c12327b81461059957600080fd5b8063842a77d31461047c5780638456cb59146104a957806384b0196e146104be57806385670b73146104e657600080fd5b80635c975abb11610195578063777e0d8611610164578063777e0d861461041057806379ba5097146104255780638322fff21461043a57806383f0b1841461046757600080fd5b80635c975abb1461037757806361d027b3146103ae5780636c19e783146103db578063715018a6146103fb57600080fd5b806315a8435f116101d157806315a8435f146102cd578063238ac933146102ef5780632b8a1c5a14610341578063518ab2a81461036157600080fd5b806304fb30111461020357806305dc5e821461022c578063085ceb30146102615780630c68ba2114610277575b600080fd5b34801561020f57600080fd5b5061021960095481565b6040519081526020015b60405180910390f35b34801561023857600080fd5b5061024c610247366004613228565b6106d2565b60408051928352602083019190915201610223565b34801561026d57600080fd5b5061021960085481565b34801561028357600080fd5b506102bd610292366004613252565b73ffffffffffffffffffffffffffffffffffffffff166000908152600c602052604090205460ff1690565b6040519015158152602001610223565b3480156102d957600080fd5b506102ed6102e836600461326d565b610969565b005b3480156102fb57600080fd5b5060055461031c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610223565b34801561034d57600080fd5b506102ed61035c366004613327565b610d93565b34801561036d57600080fd5b5061021960075481565b34801561038357600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166102bd565b3480156103ba57600080fd5b5060045461031c9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103e757600080fd5b506102ed6103f6366004613252565b610ea7565b34801561040757600080fd5b506102ed610f9b565b34801561041c57600080fd5b50610219610faf565b34801561043157600080fd5b506102ed611224565b34801561044657600080fd5b5060005461031c9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561047357600080fd5b5061024c61129f565b34801561048857600080fd5b50610219610497366004613252565b600a6020526000908152604090205481565b3480156104b557600080fd5b506102ed611306565b3480156104ca57600080fd5b506104d36113c4565b60405161022397969594939291906133cc565b3480156104f257600080fd5b506104fb6114c0565b6040805196875260208701959095529385019290925260608401526080830152151560a082015260c001610223565b34801561053657600080fd5b5060025461031c9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561056357600080fd5b5061031c61152b565b34801561057857600080fd5b5060015461031c9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156105a557600080fd5b506102196105b4366004613252565b600b6020526000908152604090205481565b3480156105d257600080fd5b5060035461031c9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156105ff57600080fd5b5060065461031c9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561062c57600080fd5b506102ed61063b36600461348e565b61156d565b34801561064c57600080fd5b5061031c61183b565b34801561066157600080fd5b50610219611864565b34801561067657600080fd5b506102ed610685366004613252565b6118ab565b34801561069657600080fd5b506102ed6106a5366004613252565b61199f565b6102ed6106b83660046134f9565b611a56565b3480156106c957600080fd5b506102ed612306565b6000806106dd612316565b60005473ffffffffffffffffffffffffffffffffffffffff858116911614801590610723575060025473ffffffffffffffffffffffffffffffffffffffff858116911614155b801561074a575060035473ffffffffffffffffffffffffffffffffffffffff858116911614155b8015610771575060015473ffffffffffffffffffffffffffffffffffffffff858116911614155b156107a8576040517fd0995cf200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006107b2610faf565b60005490915073ffffffffffffffffffffffffffffffffffffffff908116908616036108325783600003610812576040517f0fd83b4c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6305f5e1006108218286613611565b61082b9190613628565b91506108b0565b8360000361086c576040517f0fd83b4c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60015473ffffffffffffffffffffffffffffffffffffffff9081169086160361089e576305f5e1006108218286613611565b6108ad8464e8d4a51000613611565b91505b60075460085483916000916108c59190613663565b90506000670de0b6b3a7640000600954836108e09190613611565b6108ea9190613628565b905080831161091d5760095461090884670de0b6b3a7640000613611565b6109129190613628565b95506000925061094b565b60095461093282670de0b6b3a7640000613611565b61093c9190613628565b95506109488184613663565b92505b821561095e5761095b8386613663565b94505b505050509250929050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156109b45750825b905060008267ffffffffffffffff1660011480156109d15750303b155b9050811580156109df575080155b15610a16576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001660011785558315610a775784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b610a8088612372565b610af46040518060400160405280600a81526020017f574c464953616c652d32000000000000000000000000000000000000000000008152506040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250612383565b610afc612399565b610b046123a9565b8e6000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508d600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508c600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508b600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508a600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555089600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555087600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555088600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508660088190555085600981905550610d216123b9565b8315610d825784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050505050505050505050565b610d9b612459565b73ffffffffffffffffffffffffffffffffffffffff8216610e1d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f496e76616c696420677561726469616e2061646472657373000000000000000060448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000818152600c602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685151590811790915591519182527fca139a0ba60fe6426dd1d713a05ec0c645224f72d7a9912d64163974672dd410910160405180910390a25050565b610eaf612459565b73ffffffffffffffffffffffffffffffffffffffff8116610f2c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f496e76616c6964207369676e65722061646472657373000000000000000000006044820152606401610e14565b600580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f5719a5656c5cfdaafa148ecf366fd3b0a7fae06449ce2a46225977fb7417e29d90600090a250565b610fa3612459565b610fad60006124b1565b565b6000806000806000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015611024573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110489190613690565b945094505093509350600083136110bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f436861696e6c696e6b207072696365203c3d20300000000000000000000000006044820152606401610e14565b81600003611125576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f496e636f6d706c65746520726f756e64000000000000000000000000000000006044820152606401610e14565b8369ffffffffffffffffffff168169ffffffffffffffffffff1610156111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f5374616c652070726963650000000000000000000000000000000000000000006044820152606401610e14565b6115186111b48342613663565b1061121b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f5072696365206973206f757464617465640000000000000000000000000000006044820152606401610e14565b50909392505050565b338061122e61183b565b73ffffffffffffffffffffffffffffffffffffffff1614611293576040517f118cdaa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610e14565b61129c816124b1565b50565b60008060006112ac610faf565b905060006007546008546112c09190613663565b9050670de0b6b3a7640000600954826112d99190613611565b6112e39190613628565b9250816112f4846305f5e100613611565b6112fe9190613628565b935050509091565b61130e61152b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806113565750336000908152600c602052604090205460ff165b6113bc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f496e76616c6964206d756c7469736967206f7220677561726469616e000000006044820152606401610e14565b610fad6123b9565b600060608082808083817fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100805490915015801561140357506001810154155b611469576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4549503731323a20556e696e697469616c697a656400000000000000000000006044820152606401610e14565b611471612501565b6114796125d6565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009c939b5091995046985030975095509350915050565b6000806000806000806114d161129f565b600854600954600754939650919450916114eb9083613663565b85856115187fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1690565b949b939a50919850965094509092509050565b6000807f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005b5473ffffffffffffffffffffffffffffffffffffffff1692915050565b611575612459565b73ffffffffffffffffffffffffffffffffffffffff83166115f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f726563697069656e742069732061646472657373207a65726f000000000000006044820152606401610e14565b6000811161165c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f76616c7565206973207a65726f000000000000000000000000000000000000006044820152606401610e14565b73ffffffffffffffffffffffffffffffffffffffff821673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee036117735747600081831161169d578261169f565b815b905060008573ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d80600081146116fb576040519150601f19603f3d011682016040523d82523d6000602084013e611700565b606091505b505090508061176b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f455448207472616e73666572206661696c6564000000000000000000000000006044820152606401610e14565b505050505050565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa1580156117e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061180491906136e0565b905081818111156118125750805b61183373ffffffffffffffffffffffffffffffffffffffff85168683612627565b50505b505050565b6000807f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c00611550565b60006008546007541015611879575060095490565b6040517f3e5a3da400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118b3612459565b73ffffffffffffffffffffffffffffffffffffffff8116611930576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f496e76616c6964207472656173757279206164647265737300000000000000006044820152606401610e14565b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517fcb7ef3e545f5cdb893f5c568ba710fe08f336375a2d9fd66e161033f8fc09ef390600090a250565b6119a7612459565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081178255611a1061152b565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a35050565b611a5e612316565b611a666126a8565b60005473ffffffffffffffffffffffffffffffffffffffff848116911614801590611aac575060025473ffffffffffffffffffffffffffffffffffffffff848116911614155b8015611ad3575060035473ffffffffffffffffffffffffffffffffffffffff848116911614155b8015611afa575060015473ffffffffffffffffffffffffffffffffffffffff848116911614155b15611b31576040517fd0995cf200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006040518060400160405280611b453390565b73ffffffffffffffffffffffffffffffffffffffff168152336000908152600b60209081526040909120549101529050611b7f8183612729565b600080611b8a610faf565b60005490915073ffffffffffffffffffffffffffffffffffffffff90811690871603611c0a5734600003611bea576040517f0fd83b4c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6305f5e100611bf98234613611565b611c039190613628565b9150611ce2565b3415611c42576040517feb89e94900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84600003611c7c576040517f0fd83b4c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c9e73ffffffffffffffffffffffffffffffffffffffff8716333088612844565b60015473ffffffffffffffffffffffffffffffffffffffff90811690871603611cd0576305f5e100611bf98287613611565b611cdf8564e8d4a51000613611565b91505b60008290506000806000600754600854611cfc9190613663565b90506000670de0b6b3a764000060095483611d179190613611565b611d219190613628565b9050808511611da857600954611d3f86670de0b6b3a7640000613611565b611d499190613628565b93508360076000828254611d5d91906136f9565b9091555050336000908152600a602052604081208054869290611d819084906136f9565b9091555050600954611d939085613611565b611d9d90846136f9565b925060009450611e2a565b600954611dbd82670de0b6b3a7640000613611565b611dc79190613628565b93508360076000828254611ddb91906136f9565b9091555050336000908152600a602052604081208054869290611dff9084906136f9565b9091555050600954611e119085613611565b611e1b90846136f9565b9250611e278186613663565b94505b6000600754600854611e3c9190613663565b9050600081118015611e4f575060858111155b15611ea0578060076000828254611e6691906136f9565b90915550611e76905081866136f9565b336000908152600a6020526040812080549297508392909190611e9a9084906136f9565b90915550505b336000908152600b60205260408120805460019290611ec09084906136f9565b9091555060009050861561203b5760005473ffffffffffffffffffffffffffffffffffffffff908116908e1603611fc55787611f00886305f5e100613611565b611f0a9190613628565b604051909150600090339083908381818185875af1925050503d8060008114611f4f576040519150601f19603f3d011682016040523d82523d6000602084013e611f54565b606091505b5050905080611fbf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f526566756e6420455448207472616e73666572206661696c65640000000000006044820152606401610e14565b5061203b565b60015473ffffffffffffffffffffffffffffffffffffffff908116908e16036120085787611ff7886305f5e100613611565b6120019190613628565b905061201a565b61201764e8d4a5100088613628565b90505b61203b73ffffffffffffffffffffffffffffffffffffffff8e163383612627565b60005473ffffffffffffffffffffffffffffffffffffffff908116908e160361212e5760045460405160009173ffffffffffffffffffffffffffffffffffffffff169047908381818185875af1925050503d80600081146120b8576040519150601f19603f3d011682016040523d82523d6000602084013e6120bd565b606091505b5050905080612128576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f455448207472616e73666572206661696c6564000000000000000000000000006044820152606401610e14565b5061217b565b60045461217b9073ffffffffffffffffffffffffffffffffffffffff16612155838f613663565b8f73ffffffffffffffffffffffffffffffffffffffff166126279092919063ffffffff16565b61219f3360065473ffffffffffffffffffffffffffffffffffffffff169088612627565b8415806121aa575085155b156121e1576040517f3e5a3da400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006121ed8787613628565b905060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168f73ffffffffffffffffffffffffffffffffffffffff161461224b578d61224d565b345b905073ffffffffffffffffffffffffffffffffffffffff8f163373ffffffffffffffffffffffffffffffffffffffff167f75a85e7be0265abefef113ee168a0d751385a985c3a37920ae97ae192d2eadb48a8c8f6122ab9190613663565b60408051928352602083019190915281018690526060810185905260800160405180910390a350505050505050505050505061183660017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b61230e612459565b610fad6128b6565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615610fad576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61237a61292c565b61129c81612993565b61238b61292c565b61239582826129eb565b5050565b6123a161292c565b610fad612a5e565b6123b161292c565b610fad612a66565b6123c1612316565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a150565b3361246261152b565b73ffffffffffffffffffffffffffffffffffffffff1614610fad576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610e14565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080547fffffffffffffffffffffffff000000000000000000000000000000000000000016815561239582612ab7565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10280546060917fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100916125529061370c565b80601f016020809104026020016040519081016040528092919081815260200182805461257e9061370c565b80156125cb5780601f106125a0576101008083540402835291602001916125cb565b820191906000526020600020905b8154815290600101906020018083116125ae57829003601f168201915b505050505091505090565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10380546060917fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100916125529061370c565b60405173ffffffffffffffffffffffffffffffffffffffff83811660248301526044820183905261183691859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612b4d565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01612723576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b815160208084015160405160009361278c937fef7a70da4d9f06740ff6bc3d786933691d450f7476b4f8de46c4956ac74dfcbf9391920192835273ffffffffffffffffffffffffffffffffffffffff919091166020830152604082015260600190565b60405160208183030381529060405280519060200120905060006127af82612be3565b905060006127bd8285612c31565b60055490915073ffffffffffffffffffffffffffffffffffffffff808316911614611833576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f496e76616c6964207369676e61747572650000000000000000000000000000006044820152606401610e14565b60405173ffffffffffffffffffffffffffffffffffffffff848116602483015283811660448301526064820183905261288a9186918216906323b872dd90608401612661565b50505050565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6128be612c5b565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa3361242e565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16610fad576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61299b61292c565b73ffffffffffffffffffffffffffffffffffffffff8116611293576040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260006004820152602401610e14565b6129f361292c565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1007fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d102612a3f84826137a7565b5060038101612a4e83826137a7565b5060008082556001909101555050565b61289061292c565b612a6e61292c565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080547fffffffffffffffffffffffff0000000000000000000000000000000000000000811673ffffffffffffffffffffffffffffffffffffffff848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6000612b6f73ffffffffffffffffffffffffffffffffffffffff841683612cb6565b90508051600014158015612b94575080806020019051810190612b9291906138c1565b155b15611836576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610e14565b6000612c2b612bf0612ccb565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b92915050565b600080600080612c418686612cda565b925092509250612c518282612d27565b5090949350505050565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610fad576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060612cc483836000612e2b565b9392505050565b6000612cd5612eee565b905090565b60008060008351604103612d145760208401516040850151606086015160001a612d0688828585612f62565b955095509550505050612d20565b50508151600091506002905b9250925092565b6000826003811115612d3b57612d3b6138de565b03612d44575050565b6001826003811115612d5857612d586138de565b03612d8f576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002826003811115612da357612da36138de565b03612ddd576040517ffce698f700000000000000000000000000000000000000000000000000000000815260048101829052602401610e14565b6003826003811115612df157612df16138de565b03612395576040517fd78bce0c00000000000000000000000000000000000000000000000000000000815260048101829052602401610e14565b606081471015612e69576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610e14565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051612e92919061390d565b60006040518083038185875af1925050503d8060008114612ecf576040519150601f19603f3d011682016040523d82523d6000602084013e612ed4565b606091505b5091509150612ee486838361305c565b9695505050505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f612f196130eb565b612f21613167565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115612f9d5750600091506003905082613052565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015612ff1573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661304857506000925060019150829050613052565b9250600091508190505b9450945094915050565b6060826130715761306c826131bd565b612cc4565b8151158015613095575073ffffffffffffffffffffffffffffffffffffffff84163b155b156130e4576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610e14565b5080612cc4565b60007fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10081613117612501565b80519091501561312f57805160209091012092915050565b8154801561313e579392505050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470935050505090565b60007fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100816131936125d6565b8051909150156131ab57805160209091012092915050565b6001820154801561313e579392505050565b8051156131cd5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461322357600080fd5b919050565b6000806040838503121561323b57600080fd5b613244836131ff565b946020939093013593505050565b60006020828403121561326457600080fd5b612cc4826131ff565b6000806000806000806000806000806101408b8d03121561328d57600080fd5b6132968b6131ff565b99506132a460208c016131ff565b98506132b260408c016131ff565b97506132c060608c016131ff565b96506132ce60808c016131ff565b95506132dc60a08c016131ff565b94506132ea60c08c016131ff565b93506132f860e08c016131ff565b92506101008b013591506101208b013590509295989b9194979a5092959850565b801515811461129c57600080fd5b6000806040838503121561333a57600080fd5b613343836131ff565b9150602083013561335381613319565b809150509250929050565b60005b83811015613379578181015183820152602001613361565b50506000910152565b6000815180845261339a81602086016020860161335e565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e0602084015261340960e084018a613382565b838103604085015261341b818a613382565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b8181101561347c57835183529284019291840191600101613460565b50909c9b505050505050505050505050565b6000806000606084860312156134a357600080fd5b6134ac846131ff565b92506134ba602085016131ff565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060006060848603121561350e57600080fd5b613517846131ff565b925060208401359150604084013567ffffffffffffffff8082111561353b57600080fd5b818601915086601f83011261354f57600080fd5b813581811115613561576135616134ca565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156135a7576135a76134ca565b816040528281528960208487010111156135c057600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082028115828204841417612c2b57612c2b6135e2565b60008261365e577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b81810381811115612c2b57612c2b6135e2565b805169ffffffffffffffffffff8116811461322357600080fd5b600080600080600060a086880312156136a857600080fd5b6136b186613676565b94506020860151935060408601519250606086015191506136d460808701613676565b90509295509295909350565b6000602082840312156136f257600080fd5b5051919050565b80820180821115612c2b57612c2b6135e2565b600181811c9082168061372057607f821691505b602082108103613759577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b601f821115611836576000816000526020600020601f850160051c810160208610156137885750805b601f850160051c820191505b8181101561176b57828155600101613794565b815167ffffffffffffffff8111156137c1576137c16134ca565b6137d5816137cf845461370c565b8461375f565b602080601f83116001811461382857600084156137f25750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b17855561176b565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561387557888601518255948401946001909101908401613856565b50858210156138b157878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156138d357600080fd5b8151612cc481613319565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6000825161391f81846020870161335e565b919091019291505056fea26469706673582212206283572f516474c558692bd8689238483522e10d81eb5a901ad7574dabf2150964736f6c63430008190033