0 txs
13.3k calls
constructor
constructor()
functions
currentState
viewfunction currentState() view returns (uint8)
custody
viewfunction custody() view returns (address)
ethContributions
viewfunction ethContributions(address) view returns (uint256)
exchangeRate
viewfunction exchangeRate() view returns (uint256)
getIDOInfo
viewfunction getIDOInfo() view returns (address tokenAddress, uint256 rate, uint256 raised, uint256 allocated, uint256 cap, uint256 minContrib, uint256 maxContrib, uint8 state)
getUserAllocation
viewfunction getUserAllocation(address _user) view returns (uint256 ethContributed, uint256 tokensAllocated, bool claimed)
hasClaimed
viewfunction hasClaimed(address) view returns (bool)
maxContribution
viewfunction maxContribution() view returns (uint256)
maxEthCap
viewfunction maxEthCap() view returns (uint256)
merkleRoot
viewfunction merkleRoot() view returns (bytes32)
minContribution
viewfunction minContribution() view returns (uint256)
owner
viewfunction owner() view returns (address)
previewTokensForEth
viewfunction previewTokensForEth(uint256 _ethAmount) view returns (uint256)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
token
viewfunction token() view returns (address)
tokenAllocations
viewfunction tokenAllocations(address) view returns (uint256)
totalEthRaised
viewfunction totalEthRaised() view returns (uint256)
totalTokensAllocated
viewfunction totalTokensAllocated() view returns (uint256)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
verifyWhitelist
viewfunction verifyWhitelist(address _user, bytes32[] _merkleProof) view returns (bool)
claimTokens
nonpayablefunction claimTokens()
contribute
payablefunction contribute() payable
contributeWithProof
payablefunction contributeWithProof(bytes32[] _merkleProof) payable
editIDOState
nonpayablefunction editIDOState(uint8 _newState)
emergencyTokenWithdraw
nonpayablefunction emergencyTokenWithdraw(address _token, uint256 _amount)
endIDO
nonpayablefunction endIDO()
initialize
nonpayablefunction initialize(address _owner, address _token, address _custody)
renounceOwnership
nonpayablefunction renounceOwnership()
setContributionLimits
nonpayablefunction setContributionLimits(uint256 _minContribution, uint256 _maxContribution)
setCustody
nonpayablefunction setCustody(address _custody)
setExchangeRate
nonpayablefunction setExchangeRate(uint256 _exchangeRate)
setMaxEthCap
nonpayablefunction setMaxEthCap(uint256 _maxEthCap)
setMerkleRoot
nonpayablefunction setMerkleRoot(bytes32 _merkleRoot)
setToken
nonpayablefunction setToken(address _token)
startDistribution
nonpayablefunction startDistribution()
startIDO
nonpayablefunction startIDO()
startPublicIDO
nonpayablefunction startPublicIDO()
startWhitelistIDO
nonpayablefunction startWhitelistIDO()
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
withdrawEth
nonpayablefunction withdrawEth()
events
ContributionLimitsSet
event ContributionLimitsSet(uint256 minContribution, uint256 maxContribution)
ContributionMade
event ContributionMade(address indexed contributor, uint256 ethAmount, uint256 tokensAllocated)
CustodySet
event CustodySet(address newCustody)
EthWithdrawn
event EthWithdrawn(address indexed owner, uint256 amount)
ExchangeRateSet
event ExchangeRateSet(uint256 newRate)
IDOStateChanged
event IDOStateChanged(uint8 oldState, uint8 newState)
Initialized
event Initialized(uint64 version)
MaxEthCapSet
event MaxEthCapSet(uint256 maxEthCap)
MerkleRootSet
event MerkleRootSet(bytes32 newMerkleRoot)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
TokensClaimed
event TokensClaimed(address indexed user, uint256 tokenAmount)
TokenSet
event TokenSet(address tokenAddress)
Upgraded
event Upgraded(address indexed implementation)
errors
AddressEmptyCode
error AddressEmptyCode(address target)
AlreadyClaimed
error AlreadyClaimed()
ContributionTooHigh
error ContributionTooHigh(uint256 total, uint256 maximum)
ContributionTooLow
error ContributionTooLow(uint256 sent, uint256 minimum)
DirectEthNotAllowed
error DirectEthNotAllowed()
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
EthWithdrawalFailed
error EthWithdrawalFailed()
FailedCall
error FailedCall()
InsufficientTokenBalance
error InsufficientTokenBalance()
InvalidExchangeRate
error InvalidExchangeRate()
InvalidIDOState
error InvalidIDOState()
InvalidInitialization
error InvalidInitialization()
InvalidMaxEthCap
error InvalidMaxEthCap()
InvalidMerkleProof
error InvalidMerkleProof()
InvalidState
error InvalidState(uint8 required, uint8 current)
MaxEthCapExceeded
error MaxEthCapExceeded(uint256 wouldRaise, uint256 maxCap)
NoContribution
error NoContribution()
NotInitializing
error NotInitializing()
NotWhitelisted
error NotWhitelisted()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
TokenNotSet
error TokenNotSet()
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
ZeroAddress
error ZeroAddress()
creation bytecode
0x60a060405230608052348015610013575f5ffd5b5061001c610021565b6100d3565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100715760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d05780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516121d26100f95f395f81816117cc015281816117f5015261193401526121d25ff3fe608060405260043610610241575f3560e01c80638da5cb5b11610134578063c0c53b8b116100b3578063db068e0e11610078578063db068e0e146106a4578063dda79b75146106c3578063e730395a146106e7578063f2fde38b14610712578063faad0fc114610731578063fc0c546a14610745575f5ffd5b8063c0c53b8b14610635578063c67e04d814610654578063c9e904be14610673578063d7bb99ba14610688578063d83623dd14610690575f5ffd5b8063ad3cb1cc116100f9578063ad3cb1cc14610546578063ae7a3a6f14610583578063affc8eec146105a2578063b920ade2146105b5578063c07f773a14610620575f5ffd5b80638da5cb5b146104c957806399ef10a8146104f5578063a0ef91df14610509578063a12f17621461051d578063aaffadf314610531575f5ffd5b806343a38c98116101c057806366a4559b1161018557806366a4559b14610410578063715018a61461045357806373b2e80e146104675780637cb64759146104955780638d3d6576146104b4575f5ffd5b806343a38c981461039757806348c54b9d146103b65780634e785008146103ca5780634f1ef286146103e957806352d1902d146103fc575f5ffd5b806315c6cd8f1161020657806315c6cd8f1461030057806329f8e5581461032f5780632eb4a7ab1461034e578063317cb151146103635780633ba0b9a914610382575f5ffd5b80630a4b4b2b146102545780630b6d621c1461027c5780630c1c011b146102a75780630c3f6acf146102bb578063144fa6d7146102e1575f5ffd5b366102505761024e610763565b005b5f5ffd5b34801561025f575f5ffd5b5061026960045481565b6040519081526020015b60405180910390f35b348015610287575f5ffd5b50610269610296366004611d53565b600a6020525f908152604090205481565b3480156102b2575f5ffd5b5061024e6107da565b3480156102c6575f5ffd5b506007546102d49060ff1681565b6040516102739190611da0565b3480156102ec575f5ffd5b5061024e6102fb366004611d53565b6108e8565b34801561030b575f5ffd5b5061031f61031a366004611df6565b61096b565b6040519015158152602001610273565b34801561033a575f5ffd5b5061024e610349366004611e45565b610981565b348015610359575f5ffd5b5061026960085481565b34801561036e575f5ffd5b5061024e61037d366004611e5c565b6109de565b34801561038d575f5ffd5b5061026960015481565b3480156103a2575f5ffd5b5061024e6103b1366004611e84565b610a06565b3480156103c1575f5ffd5b5061024e610a39565b3480156103d5575f5ffd5b506102696103e4366004611e45565b610b7e565b61024e6103f7366004611eb6565b610b8e565b348015610407575f5ffd5b50610269610ba9565b34801561041b575f5ffd5b505f54600154600254600354600454600554600654600754604051610273986001600160a01b03169796959493929160ff1690611f7a565b34801561045e575f5ffd5b5061024e610bc4565b348015610472575f5ffd5b5061031f610481366004611d53565b600b6020525f908152604090205460ff1681565b3480156104a0575f5ffd5b5061024e6104af366004611e45565b610bd5565b3480156104bf575f5ffd5b5061026960065481565b3480156104d4575f5ffd5b506104dd610c12565b6040516001600160a01b039091168152602001610273565b348015610500575f5ffd5b5061024e610c40565b348015610514575f5ffd5b5061024e610d13565b348015610528575f5ffd5b5061024e610ea3565b34801561053c575f5ffd5b5061026960055481565b348015610551575f5ffd5b50610576604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516102739190611fcf565b34801561058e575f5ffd5b5061024e61059d366004611d53565b610ef6565b61024e6105b0366004612004565b610f54565b3480156105c0575f5ffd5b506106036105cf366004611d53565b6001600160a01b03165f90815260096020908152604080832054600a835281842054600b9093529220549192909160ff1690565b604080519384526020840192909252151590820152606001610273565b34801561062b575f5ffd5b5061026960035481565b348015610640575f5ffd5b5061024e61064f366004612043565b610fe8565b34801561065f575f5ffd5b5061024e61066e366004612083565b61117b565b34801561067e575f5ffd5b5061026960025481565b61024e610763565b34801561069b575f5ffd5b5061024e6111ca565b3480156106af575f5ffd5b5061024e6106be366004611e45565b6112f7565b3480156106ce575f5ffd5b506007546104dd9061010090046001600160a01b031681565b3480156106f2575f5ffd5b50610269610701366004611d53565b60096020525f908152604090205481565b34801561071d575f5ffd5b5061024e61072c366004611d53565b611354565b34801561073c575f5ffd5b5061024e61138e565b348015610750575f5ffd5b505f546104dd906001600160a01b031681565b61076b61145f565b60028060075460ff16600481111561078557610785611d6c565b146107b757600754604051633bf2e2f960e11b81526107ae91839160ff909116906004016120a3565b60405180910390fd5b6107c13334611496565b506107d860015f51602061217d5f395f51905f5255565b565b6107e261166e565b5f8060075460ff1660048111156107fb576107fb611d6c565b1461082457600754604051633bf2e2f960e11b81526107ae91839160ff909116906004016120a3565b5f546001600160a01b031661084c57604051634b62f01360e01b815260040160405180910390fd5b61085461145f565b6001545f036108765760405163a2ec3a5560e01b815260040160405180910390fd5b6007805460ff81169160029160ff19166001835b02179055506007546040517fab1bbf05cbbf6896d8a694faad62a2c50faba68ae54d3b3fb4a539df9f444bfa916108c691849160ff16906120a3565b60405180910390a1506108e560015f51602061217d5f395f51905f5255565b50565b6108f061166e565b6001600160a01b03811661091757604051634b62f01360e01b815260040160405180910390fd5b5f80546001600160a01b0319166001600160a01b0383169081179091556040519081527fa07c91c183e42229e705a9795a1c06d76528b673788b849597364528c96eefb7906020015b60405180910390a150565b5f6109778484846116a0565b90505b9392505050565b61098961166e565b805f036109a957604051632a38c53560e21b815260040160405180910390fd5b60048190556040518181527f99392e32ea4851b7c7100ca32636475aa3f82447201dac05f6364ffa3e1aea8b90602001610960565b6109e661166e565b610a026109f1610c12565b6001600160a01b0384169083611738565b5050565b610a0e61166e565b610a1661145f565b6007805460ff811691839160ff1916600183600481111561088a5761088a611d6c565b610a4161145f565b60048060075460ff166004811115610a5b57610a5b611d6c565b14610a8457600754604051633bf2e2f960e11b81526107ae91839160ff909116906004016120a3565b335f818152600b602052604090205460ff1615610ab457604051630c8d9eab60e31b815260040160405180910390fd5b6001600160a01b0381165f908152600a6020526040812080549082905590819003610af257604051631971fbf360e21b815260040160405180910390fd5b6001600160a01b038083165f908152600b60205260408120805460ff1916600117905554610b2291168383611738565b816001600160a01b03167f896e034966eaaf1adc54acc0f257056febbd300c9e47182cf761982cf1f5e43082604051610b5d91815260200190565b60405180910390a25050506107d860015f51602061217d5f395f51905f5255565b5f610b888261178f565b92915050565b610b966117c1565b610b9f82611865565b610a02828261186d565b5f610bb2611929565b505f51602061215d5f395f51905f5290565b610bcc61166e565b6107d85f611972565b610bdd61166e565b60088190556040518181527f42cbc405e4dbf1b691e85b9a34b08ecfcf7a9ad9078bf4d645ccfa1fac11c10b90602001610960565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b610c4861166e565b5f8060075460ff166004811115610c6157610c61611d6c565b14610c8a57600754604051633bf2e2f960e11b81526107ae91839160ff909116906004016120a3565b5f546001600160a01b0316610cb257604051634b62f01360e01b815260040160405180910390fd5b610cba61145f565b6001545f03610cdc5760405163a2ec3a5560e01b815260040160405180910390fd5b600854610cfc57604051630b094f2760e31b815260040160405180910390fd5b6007805460ff81169160019160ff1916828061088a565b610d1b61166e565b610d2361145f565b600360075460ff166004811115610d3c57610d3c611d6c565b14158015610d615750600460075460ff166004811115610d5e57610d5e611d6c565b14155b15610d7f5760405163c3480b0960e01b815260040160405180910390fd5b475f819003610da157604051631971fbf360e21b815260040160405180910390fd5b60075461010090046001600160a01b0316610dcf5760405163d92e233d60e01b815260040160405180910390fd5b6007546040515f9161010090046001600160a01b03169083908381818185875af1925050503d805f8114610e1e576040519150601f19603f3d011682016040523d82523d5f602084013e610e23565b606091505b5050905080610e4557604051630ca79afd60e01b815260040160405180910390fd5b6007546040518381526101009091046001600160a01b0316907f8455ae6be5d92f1df1c3c1484388e247a36c7e60d72055ae216dbc258f257d4b9060200160405180910390a250506107d860015f51602061217d5f395f51905f5255565b610eab61166e565b60018060075460ff166004811115610ec557610ec5611d6c565b14610eee57600754604051633bf2e2f960e11b81526107ae91839160ff909116906004016120a3565b61087661145f565b610efe61166e565b60078054610100600160a81b0319166101006001600160a01b038416908102919091179091556040519081527f60b048864301ff46e0567e64212906117754e6d3b9c61a4d9ec9a44fde20424390602001610960565b610f5c61145f565b60018060075460ff166004811115610f7657610f76611d6c565b14610f9f57600754604051633bf2e2f960e11b81526107ae91839160ff909116906004016120a3565b610faa3384846116a0565b610fc75760405163582f497d60e11b815260040160405180910390fd5b610fd13334611496565b50610a0260015f51602061217d5f395f51905f5255565b5f610ff16119e2565b805490915060ff600160401b820416159067ffffffffffffffff165f811580156110185750825b90505f8267ffffffffffffffff1660011480156110345750303b155b905081158015611042575080155b156110605760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561108a57845460ff60401b1916600160401b1785555b611092611a0a565b61109b88611a12565b6110a3611a23565b600780546001600160a01b03888116610100026001600160a81b03199092169190911790915567016345785d8a00006006556815857b549a961400006004555f80549189166001600160a01b0319909216821790556040519081527fa07c91c183e42229e705a9795a1c06d76528b673788b849597364528c96eefb79060200160405180910390a1831561117157845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b61118361166e565b6005829055600681905560408051838152602081018390527fb9d4f422b27d3b806364c4d3de6dd5e296848bc343b5a0f875735b49509e2da6910160405180910390a15050565b6111d261166e565b60038060075460ff1660048111156111ec576111ec611d6c565b1461121557600754604051633bf2e2f960e11b81526107ae91839160ff909116906004016120a3565b5f80546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa15801561125b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061127f91906120be565b90506003548110156112a457604051637222ae5760e11b815260040160405180910390fd5b60078054600460ff198216811790925560405160ff909116917fab1bbf05cbbf6896d8a694faad62a2c50faba68ae54d3b3fb4a539df9f444bfa916112ea9184916120a3565b60405180910390a1505050565b6112ff61166e565b805f0361131f5760405163a2ec3a5560e01b815260040160405180910390fd5b60018190556040518181527f972aba470577c14606bbf4bbdec1fed4925f242fcef40b4a8d242983365d029190602001610960565b61135c61166e565b6001600160a01b03811661138557604051631e4fbdf760e01b81525f60048201526024016107ae565b6108e581611972565b61139661166e565b61139e61145f565b600160075460ff1660048111156113b7576113b7611d6c565b141580156113dc5750600260075460ff1660048111156113d9576113d9611d6c565b14155b156113fa5760405163c3480b0960e01b815260040160405180910390fd5b60078054600360ff198216811790925560405160ff909116917fab1bbf05cbbf6896d8a694faad62a2c50faba68ae54d3b3fb4a539df9f444bfa916114409184916120a3565b60405180910390a1506107d860015f51602061217d5f395f51905f5255565b5f51602061217d5f395f51905f5280546001190161149057604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b6005548110156114c757600554604051633b9cb33b60e01b81526107ae918391600401918252602082015260400190565b6001600160a01b0382165f908152600960205260408120546114ea9083906120e9565b905060065481111561151d57600654604051632c14d4e360e01b81526107ae918391600401918252602082015260400190565b5f8260025461152c91906120e9565b905060045481111561155c5760048054604051635035a29560e11b815291820183905260248201526044016107ae565b5f6115668461178f565b9050805f036115885760405163a2ec3a5560e01b815260040160405180910390fd5b6001600160a01b0385165f90815260096020526040812080548692906115af9084906120e9565b90915550506001600160a01b0385165f908152600a6020526040812080548392906115db9084906120e9565b925050819055508360025f8282546115f391906120e9565b925050819055508060035f82825461160b91906120e9565b909155505060408051858152602081018390526001600160a01b038716917f5dc1fe5ab986a852c4eda8e8bb94247d13307065c593fb83f1a09be273679382910160405180910390a25050505050565b60015f51602061217d5f395f51905f5255565b33611677610c12565b6001600160a01b0316146107d85760405163118cdaa760e01b81523360048201526024016107ae565b6008545f906116b057505f61097a565b6040516bffffffffffffffffffffffff19606086901b1660208201524660348201525f9060540160405160208183030381529060405280519060200120905061172f8484808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250506008549150849050611a33565b95945050505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261178a908490611a48565b505050565b5f6001545f036117a057505f919050565b670de0b6b3a7640000600154836117b791906120fc565b610b889190612113565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061184757507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661183b5f51602061215d5f395f51905f52546001600160a01b031690565b6001600160a01b031614155b156107d85760405163703e46dd60e11b815260040160405180910390fd5b6108e561166e565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156118c7575060408051601f3d908101601f191682019092526118c4918101906120be565b60015b6118ef57604051634c9c8ce360e01b81526001600160a01b03831660048201526024016107ae565b5f51602061215d5f395f51905f52811461191f57604051632a87526960e21b8152600481018290526024016107ae565b61178a8383611aba565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146107d85760405163703e46dd60e11b815260040160405180910390fd5b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00610b88565b6107d8611b0f565b611a1a611b0f565b6108e581611b34565b611a2b611b0f565b6107d8611b3c565b5f82611a3f8584611b44565b14949350505050565b5f5f60205f8451602086015f885af180611a67576040513d5f823e3d81fd5b50505f513d91508115611a7e578060011415611a8b565b6001600160a01b0384163b155b15611ab457604051635274afe760e01b81526001600160a01b03851660048201526024016107ae565b50505050565b611ac382611b86565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a2805115611b075761178a8282611be9565b610a02611c52565b611b17611c71565b6107d857604051631afcd79f60e31b815260040160405180910390fd5b61135c611b0f565b61165b611b0f565b5f81815b8451811015611b7e57611b7482868381518110611b6757611b67612132565b6020026020010151611c8a565b9150600101611b48565b509392505050565b806001600160a01b03163b5f03611bbb57604051634c9c8ce360e01b81526001600160a01b03821660048201526024016107ae565b5f51602061215d5f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f846001600160a01b031684604051611c059190612146565b5f60405180830381855af49150503d805f8114611c3d576040519150601f19603f3d011682016040523d82523d5f602084013e611c42565b606091505b509150915061172f858383611cb3565b34156107d85760405163b398979f60e01b815260040160405180910390fd5b5f611c7a6119e2565b54600160401b900460ff16919050565b5f818310611ca4575f82815260208490526040902061097a565b505f9182526020526040902090565b606082611cc857611cc382611d0f565b61097a565b8151158015611cdf57506001600160a01b0384163b155b15611d0857604051639996b31560e01b81526001600160a01b03851660048201526024016107ae565b508061097a565b805115611d1f5780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b80356001600160a01b0381168114611d4e575f5ffd5b919050565b5f60208284031215611d63575f5ffd5b61097a82611d38565b634e487b7160e01b5f52602160045260245ffd5b60058110611d9c57634e487b7160e01b5f52602160045260245ffd5b9052565b60208101610b888284611d80565b5f5f83601f840112611dbe575f5ffd5b50813567ffffffffffffffff811115611dd5575f5ffd5b6020830191508360208260051b8501011115611def575f5ffd5b9250929050565b5f5f5f60408486031215611e08575f5ffd5b611e1184611d38565b9250602084013567ffffffffffffffff811115611e2c575f5ffd5b611e3886828701611dae565b9497909650939450505050565b5f60208284031215611e55575f5ffd5b5035919050565b5f5f60408385031215611e6d575f5ffd5b611e7683611d38565b946020939093013593505050565b5f60208284031215611e94575f5ffd5b81356005811061097a575f5ffd5b634e487b7160e01b5f52604160045260245ffd5b5f5f60408385031215611ec7575f5ffd5b611ed083611d38565b9150602083013567ffffffffffffffff811115611eeb575f5ffd5b8301601f81018513611efb575f5ffd5b803567ffffffffffffffff811115611f1557611f15611ea2565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715611f4457611f44611ea2565b604052818152828201602001871015611f5b575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b6001600160a01b03891681526020810188905260408101879052606081018690526080810185905260a0810184905260c081018390526101008101611fc260e0830184611d80565b9998505050505050505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f5f60208385031215612015575f5ffd5b823567ffffffffffffffff81111561202b575f5ffd5b61203785828601611dae565b90969095509350505050565b5f5f5f60608486031215612055575f5ffd5b61205e84611d38565b925061206c60208501611d38565b915061207a60408501611d38565b90509250925092565b5f5f60408385031215612094575f5ffd5b50508035926020909101359150565b604081016120b18285611d80565b61097a6020830184611d80565b5f602082840312156120ce575f5ffd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610b8857610b886120d5565b8082028115828204841417610b8857610b886120d5565b5f8261212d57634e487b7160e01b5f52601260045260245ffd5b500490565b634e487b7160e01b5f52603260045260245ffd5b5f82518060208501845e5f92019182525091905056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a26469706673582212206c22220b0bc57538bfdb196614e987a0ff5bcdeb3bd0b37216a0aa83daf1131e64736f6c634300081c0033