19 txs
20 calls
constructor
constructor(address usdt_, address engine_)
functions
allowance
viewfunction allowance(address owner, address spender) view returns (uint256)
balanceOf
viewfunction balanceOf(address account) view returns (uint256)
BPS
viewfunction BPS() view returns (uint16)
BUY_FEE_BPS
viewfunction BUY_FEE_BPS() view returns (uint16)
BUY_TO_MKT_BPS
viewfunction BUY_TO_MKT_BPS() view returns (uint16)
BUY_TO_NAV_BPS
viewfunction BUY_TO_NAV_BPS() view returns (uint16)
currentWeek
viewfunction currentWeek() view returns (uint256)
decimals
viewfunction decimals() view returns (uint8)
defaultSponsor
viewfunction defaultSponsor() view returns (address)
engine
viewfunction engine() view returns (address)
feeSplitBuyBps
purefunction feeSplitBuyBps() pure returns (uint16 toNav, uint16 toMkt)
feeSplitSellBps
purefunction feeSplitSellBps() pure returns (uint16 toNav, uint16 toMkt, uint16 toMlm, uint16 toVip)
getAccount
viewfunction getAccount(address user) view returns (uint256 tokenBalance, uint256 valueAtNav, uint256 investedGross, uint256 withdrawnNet, address sponsor)
getMlmStats
viewfunction getMlmStats(address user) view returns (uint256[5] amounts, uint256[5] counts)
getSponsorAtLevel
viewfunction getSponsorAtLevel(address user, uint8 level) view returns (address)
INITIAL_NAV
viewfunction INITIAL_NAV() view returns (uint256)
MLM_SELL_L1_OF_POOL_BPS
viewfunction MLM_SELL_L1_OF_POOL_BPS() view returns (uint16)
MLM_SELL_L2_OF_POOL_BPS
viewfunction MLM_SELL_L2_OF_POOL_BPS() view returns (uint16)
MLM_SELL_L3_OF_POOL_BPS
viewfunction MLM_SELL_L3_OF_POOL_BPS() view returns (uint16)
MLM_SELL_L4_OF_POOL_BPS
viewfunction MLM_SELL_L4_OF_POOL_BPS() view returns (uint16)
MLM_SELL_L5_OF_POOL_BPS
viewfunction MLM_SELL_L5_OF_POOL_BPS() view returns (uint16)
mlmLevelsOnSellBps
purefunction mlmLevelsOnSellBps() pure returns (uint16, uint16, uint16, uint16, uint16)
name
viewfunction name() view returns (string)
nav
viewfunction nav() view returns (uint256)
navInfo
viewfunction navInfo() view returns (uint256 navUsdtUnits, uint8 usdtDec, uint256 supply)
owner
viewfunction owner() view returns (address)
quoteBuyGivenUsdt
viewfunction quoteBuyGivenUsdt(uint256 usdtInGross) view returns (uint256 tokensOut, uint256 navBefore)
quoteSell
viewfunction quoteSell(uint256 tokensIn) view returns (uint256 usdtOutNet, uint256 navBefore)
SELL_FEE_BPS
viewfunction SELL_FEE_BPS() view returns (uint16)
SELL_TO_MKT_BPS
viewfunction SELL_TO_MKT_BPS() view returns (uint16)
SELL_TO_MLM_BPS
viewfunction SELL_TO_MLM_BPS() view returns (uint16)
SELL_TO_NAV_BPS
viewfunction SELL_TO_NAV_BPS() view returns (uint16)
SELL_TO_VIP_BPS
viewfunction SELL_TO_VIP_BPS() view returns (uint16)
symbol
viewfunction symbol() view returns (string)
teamVolumeNet
viewfunction teamVolumeNet(uint256, address) view returns (int256)
totalEngineFees
viewfunction totalEngineFees() view returns (uint256)
totalSupply
viewfunction totalSupply() view returns (uint256)
treasuryCore
viewfunction treasuryCore() view returns (uint256)
U
viewfunction U() view returns (uint256)
uplineMinHoldingNAV
viewfunction uplineMinHoldingNAV() view returns (uint256)
USDT
viewfunction USDT() view returns (address)
usdtDecimals
viewfunction usdtDecimals() view returns (uint8)
valueOf
viewfunction valueOf(address user) view returns (uint256)
vipClaimed
viewfunction vipClaimed(uint256, address) view returns (bool)
vipEligible
viewfunction vipEligible(uint256, address) view returns (bool)
vipEligibleCount
viewfunction vipEligibleCount(uint256) view returns (uint256)
vipMinHoldingNAV
viewfunction vipMinHoldingNAV() view returns (uint256)
vipPoolPerWeek
viewfunction vipPoolPerWeek(uint256) view returns (uint256)
vipReserveTotal
viewfunction vipReserveTotal() view returns (uint256)
vipSharePerWinner
viewfunction vipSharePerWinner(uint256) view returns (uint256)
vipThresholdTeamVol
viewfunction vipThresholdTeamVol() view returns (uint256)
vipWeekFinalized
viewfunction vipWeekFinalized(uint256) view returns (bool)
vipWeekInfo
viewfunction vipWeekInfo(uint256 weekId) view returns (uint256 pool, uint256 winners, uint256 share, bool finalized)
WEEK
viewfunction WEEK() view returns (uint256)
approve
nonpayablefunction approve(address spender, uint256 value) returns (bool)
buy
nonpayablefunction buy(uint256 usdtInGross, uint256 minTokensOut, address to)
claimVip
nonpayablefunction claimVip(uint256 weekId)
renounce
nonpayablefunction renounce()
renounceOwnership
nonpayablefunction renounceOwnership()
sell
nonpayablefunction sell(uint256 tokensIn, uint256 minUsdtOutNet, address to)
setSponsor
nonpayablefunction setSponsor(address sponsor)
sweep
nonpayablefunction sweep(address token, address to, uint256 amt)
transfer
nonpayablefunction transfer(address to, uint256 value) returns (bool)
transferFrom
nonpayablefunction transferFrom(address from, address to, uint256 value) returns (bool)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
events
Approval
event Approval(address indexed owner, address indexed spender, uint256 value)
Bought
event Bought(address indexed user, uint256 usdtIn, uint256 fee, uint256 tokensOut, uint256 navBefore, uint256 navAfter, uint256 ts)
MlmPaidSell
event MlmPaidSell(address indexed from, address indexed to, uint8 level, uint256 amount, bool toNav)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
Sold
event Sold(address indexed user, uint256 tokensIn, uint256 fee, uint256 usdtOutNet, uint256 navBefore, uint256 navAfter, uint256 ts)
SponsorSet
event SponsorSet(address indexed user, address indexed sponsor)
Transfer
event Transfer(address indexed from, address indexed to, uint256 value)
VipAccrued
event VipAccrued(uint256 indexed weekId, uint256 amount)
VipClaimed
event VipClaimed(uint256 indexed weekId, address indexed user, uint256 amount)
VipWeekFinalized
event VipWeekFinalized(uint256 indexed weekId, uint256 winners, uint256 sharePerWinner)
errors
ERC20InsufficientAllowance
error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed)
ERC20InsufficientBalance
error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed)
ERC20InvalidApprover
error ERC20InvalidApprover(address approver)
ERC20InvalidReceiver
error ERC20InvalidReceiver(address receiver)
ERC20InvalidSender
error ERC20InvalidSender(address sender)
ERC20InvalidSpender
error ERC20InvalidSpender(address spender)
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
creation bytecode
0x6101a0604052348015610010575f5ffd5b5060405161308a38038061308a83398101604081905261002f91610326565b3360405180604001604052806005815260200164426c6f636b60d81b81525060405180604001604052806005815260200164424c4f434b60d81b815250816003908161007b91906103ef565b50600461008882826103ef565b50506001600555506001600160a01b0381166100be57604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b6100c7816102ba565b506001600160a01b038216158015906100e857506001600160a01b03811615155b61011d5760405162461bcd60e51b81526004016100b5906020808252600490820152637a65726f60e01b604082015260600190565b6001600160a01b038083166080819052908216610100819052610120526040805163313ce56760e01b8152905163313ce567916004808201926020929091908290030181865afa158015610173573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061019791906104a9565b60ff1660a08190526101aa90600a6105c9565b60c08190526101ba9060016105d7565b60e05260c0516101cc906103e86105d7565b6101405260c0516101df906127106105d7565b6101605260c0516101f2906103e86105d7565b61018052612710610207610fa06117706105ee565b146102485760405162461bcd60e51b81526020600482015260116024820152706275792073706c697420213d203130302560781b60448201526064016100b5565b6127106103e86107d061025d816113886105ee565b61026791906105ee565b61027191906105ee565b146102b35760405162461bcd60e51b815260206004820152601260248201527173656c6c2073706c697420213d203130302560701b60448201526064016100b5565b5050610601565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b80516001600160a01b0381168114610321575f5ffd5b919050565b5f5f60408385031215610337575f5ffd5b6103408361030b565b915061034e6020840161030b565b90509250929050565b634e487b7160e01b5f52604160045260245ffd5b600181811c9082168061037f57607f821691505b60208210810361039d57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156103ea57805f5260205f20601f840160051c810160208510156103c85750805b601f840160051c820191505b818110156103e7575f81556001016103d4565b50505b505050565b81516001600160401b0381111561040857610408610357565b61041c81610416845461036b565b846103a3565b6020601f82116001811461044e575f83156104375750848201515b5f19600385901b1c1916600184901b1784556103e7565b5f84815260208120601f198516915b8281101561047d578785015182556020948501946001909201910161045d565b508482101561049a57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f602082840312156104b9575f5ffd5b815160ff811681146104c9575f5ffd5b9392505050565b634e487b7160e01b5f52601160045260245ffd5b6001815b600184111561051f57808504811115610503576105036104d0565b600184161561051157908102905b60019390931c9280026104e8565b935093915050565b5f82610535575060016105c3565b8161054157505f6105c3565b816001811461055757600281146105615761057d565b60019150506105c3565b60ff841115610572576105726104d0565b50506001821b6105c3565b5060208310610133831016604e8410600b84101617156105a0575081810a6105c3565b6105ac5f1984846104e4565b805f19048211156105bf576105bf6104d0565b0290505b92915050565b5f6104c960ff841683610527565b80820281158282048414176105c3576105c36104d0565b808201808211156105c3576105c36104d0565b60805160a05160c05160e05161010051610120516101405161016051610180516129986106f25f395f818161070b015261212901525f818161090b0152611d9701525f81816108660152611d4801525f81816104da01528181610ce70152611b6f01525f818161082401528181610c8201528181610f53015261142f01525f8181610687015261127e01525f6104b301525f81816106e40152610a6501525f81816107fd01528181610d3c01528181610dd401528181610e0001528181610f31015281816110ab0152818161140d015281816114800152818161171501528181611f0c015261216201526129985ff3fe608060405234801561000f575f5ffd5b5060043610610352575f3560e01c806370a08231116101c4578063c0105a5e11610101578063d7df8917116100a5578063d7df891714610861578063dd62ed3e14610888578063e1b262ed1461089b578063e5d5c84b146108ae578063f2fde38b146108e0578063f4359ce5146108f3578063f4364515146108fd578063f657114514610906578063fbcbc0f11461092d575f5ffd5b8063c0105a5e146107d1578063c1590cd7146107f0578063c54e44eb146107f8578063c9d4623f1461081f578063d04c698314610846578063d0b6783414610859578063d1c6905614610647578063d5dc535d14610647575f5ffd5b80638ec88916116101685780638ec889161461073e57806391a62ef01461076057806395d89b41146107885780639731aa2e14610647578063a48028aa14610790578063a64190c4146107a3578063a9059cbb146107b6578063b15be2f5146107c9575f5ffd5b806370a0823114610667578063715018a61461067a57806373bb610a14610682578063745f2a04146106a957806381042ac4146106d657806382543b32146106df57806384f6f02b146107065780638da5cb5b1461072d575f5ffd5b8063344af28e1161029257806353972e231161023657806353972e231461035657806359753fb11461060357806359a87bc11461061857806362c067671461062b57806366e672bc1461063e578063670e8f9e146103ef57806367876a9d146106475780636993c8f914610650575f5ffd5b8063344af28e1461055b5780633c1032fa1461056457806347ac6a641461056d57806348fe6eb81461058c5780634b581862146105b15780634bdac827146105ba5780634c9fa438146105c357806351059d42146105e4575f5ffd5b806323b872dd116102f957806323b872dd14610465578063249d39e91461047857806324dbdc45146104815780632688454a146104ae578063279cc4ea146104d557806329872695146105095780632a7ea0a71461051c578063313ce56714610546575f5ffd5b8063028b9a4e1461035657806305b764221461037757806306575c89146103af57806306fdde03146103b7578063095ea7b3146103cc5780630cdaef5d146103ef578063161f8aea146103f857806318160ddd1461045d575b5f5ffd5b61035f610fa081565b60405161ffff90911681526020015b60405180910390f35b6103a16103853660046125da565b600f60209081525f928352604080842090915290825290205481565b60405190815260200161036e565b6103a1610971565b6103bf61097f565b60405161036e9190612604565b6103df6103da366004612639565b610a0f565b604051901515815260200161036e565b61035f6107d081565b61043b610406366004612661565b5f90815260096020908152604080832054600c835281842054600d845282852054600e90945291909320549293909260ff1690565b604080519485526020850193909352918301521515606082015260800161036e565b6002546103a1565b6103df610473366004612678565b610a28565b61035f61271081565b6103df61048f3660046125da565b600a60209081525f928352604080842090915290825290205460ff1681565b6103a17f000000000000000000000000000000000000000000000000000000000000000081565b6104fc7f000000000000000000000000000000000000000000000000000000000000000081565b60405161036e91906126b2565b6104fc6105173660046126c6565b610a4d565b6040805161138881526107d060208201819052918101919091526103e8606082015260800161036e565b60125b60405160ff909116815260200161036e565b61035f6105dc81565b61035f61177081565b6103a161057b366004612661565b600d6020525f908152604090205481565b610594610a58565b6040805193845260ff90921660208401529082015260600161036e565b6103a160085481565b6103a160075481565b6105d66105d1366004612700565b610a98565b60405161036e92919061273b565b6103a16105f2366004612661565b60096020525f908152604090205481565b610616610611366004612700565b610b33565b005b610616610626366004612757565b610c3c565b610616610639366004612678565b6110a1565b61035f61138881565b61035f6103e881565b604080516117708152610fa060208201520161036e565b6103a1610675366004612700565b61112e565b610616611148565b6103a17f000000000000000000000000000000000000000000000000000000000000000081565b6103df6106b73660046125da565b600b60209081525f928352604080842090915290825290205460ff1681565b61035f6109c481565b6105497f000000000000000000000000000000000000000000000000000000000000000081565b6103a17f000000000000000000000000000000000000000000000000000000000000000081565b6006546001600160a01b03166104fc565b6103df61074c366004612661565b600e6020525f908152604090205460ff1681565b61077361076e366004612661565b61115b565b6040805192835260208301919091520161036e565b6103bf6111b2565b6103a161079e366004612700565b6111c1565b6107736107b1366004612661565b6111f0565b6103df6107c4366004612639565b61124b565b610616611258565b6103a16107df366004612661565b600c6020525f908152604090205481565b6103a1611268565b6104fc7f000000000000000000000000000000000000000000000000000000000000000081565b6104fc7f000000000000000000000000000000000000000000000000000000000000000081565b610616610854366004612757565b6112ce565b6103a1611551565b6103a17f000000000000000000000000000000000000000000000000000000000000000081565b6103a1610896366004612789565b61155a565b6106166108a9366004612661565b611584565b60408051610fa081526109c460208201526105dc918101919091526103e860608201819052608082015260a00161036e565b6106166108ee366004612700565b611781565b6103a162093a8081565b61035f6101f481565b6103a17f000000000000000000000000000000000000000000000000000000000000000081565b61094061093b366004612700565b6117bb565b6040805195865260208601949094529284019190915260608301526001600160a01b0316608082015260a00161036e565b5f61097a611809565b905090565b60606003805461098e906127b1565b80601f01602080910402602001604051908101604052809291908181526020018280546109ba906127b1565b8015610a055780601f106109dc57610100808354040283529160200191610a05565b820191905f5260205f20905b8154815290600101906020018083116109e857829003601f168201915b5050505050905090565b5f33610a1c818585611817565b60019150505b92915050565b5f33610a35858285611824565b610a40858585611875565b60019150505b9392505050565b5f610a4683836118d2565b5f5f5f610a63611268565b7f0000000000000000000000000000000000000000000000000000000000000000610a8d60025490565b925092509250909192565b610aa06125a1565b610aa86125a1565b6001600160a01b0383165f9081526010602052604090819020815160a0810192839052909160038301916008840191839060059082845b815481526020019060010190808311610adf5750506040805160a081019182905294965085935060059250905082845b815481526020019060010190808311610b0f57505050505090509250925050915091565b6001600160a01b03811615801590610b5457506001600160a01b0381163314155b610b795760405162461bcd60e51b8152600401610b70906127e9565b60405180910390fd5b335f9081526010602052604090208054600160a01b900460ff16158015610ba65750610ba43361112e565b155b610bdb5760405162461bcd60e51b81526020600482015260066024820152651b1bd8dad95960d21b6044820152606401610b70565b80546001600160a81b0319166001600160a01b03831617600160a01b178155610c033361193d565b6040516001600160a01b0383169033907f9199ab96d9b0a32eef646dfb440f2e682272b59a20bd07bb8fa5222f98e10b33905f90a35050565b610c4461198e565b5f83118015610c5b57506001600160a01b03811615155b610c775760405162461bcd60e51b8152600401610b70906127e9565b610c7f6119b8565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031603610ce15760405162461bcd60e51b815260206004820152600760248201526637379039b2b63360c91b6044820152606401610b70565b610d0b337f0000000000000000000000000000000000000000000000000000000000000000611b17565b335f90815260106020526040902054610d2e9082906001600160a01b0316611b17565b5f610d37611268565b90505f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401610d8691906126b2565b602060405180830381865afa158015610da1573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dc59190612806565b9050610dfc6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016333088611bf3565b5f817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401610e4a91906126b2565b602060405180830381865afa158015610e65573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e899190612806565b610e939190612831565b90505f8111610ecf5760405162461bcd60e51b81526020600482015260086024820152676e6f2066756e647360c01b6044820152606401610b70565b5f612710610edf6101f484612844565b610ee9919061285b565b90505f612710610efb610fa084612844565b610f05919061285b565b90508015610f78578060085f828254610f1e919061287a565b90915550610f7890506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000083611c5a565b5f610f838385612831565b90505f86610f9983670de0b6b3a7640000612844565b610fa3919061285b565b9050888110158015610fb457505f81115b610fd05760405162461bcd60e51b8152600401610b709061288d565b610fda8882611c8b565b335f9081526010602052604081206001018054879290610ffb90849061287a565b909155505f905061100a611809565b6001600160a01b03808b165f908152601060205260409020549192506110339188911683611cc3565b5f61103c611268565b9050336001600160a01b03167f15053609d51f61ee8a7b1c2250290b901d8ef6cb2afec5d8987f3d8cafa06c4f8888868d8642604051611081969594939291906128ab565b60405180910390a250505050505050505061109c6001600555565b505050565b6110a9611e8a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b03160361111a5760405162461bcd60e51b815260206004820152600d60248201526c1b9bc81cddd9595c081554d115609a1b6044820152606401610b70565b61109c6001600160a01b0384168383611c5a565b6001600160a01b03165f9081526020819052604090205490565b611150611e8a565b6111595f611eb7565b565b5f5f611165611268565b90505f6127106111776101f486612844565b611181919061285b565b61118b9085612831565b9050816111a082670de0b6b3a7640000612844565b6111aa919061285b565b925050915091565b60606004805461098e906127b1565b5f670de0b6b3a76400006111d3611268565b6111dc8461112e565b6111e69190612844565b610a22919061285b565b5f5f6111fa611268565b90505f670de0b6b3a76400006112108386612844565b61121a919061285b565b90505f61271061122c6103e884612844565b611236919061285b565b90506112428183612831565b93505050915091565b5f33610a1c818585611875565b611260611e8a565b611159611148565b5f5f61127360025490565b9050805f036112a3577f000000000000000000000000000000000000000000000000000000000000000091505090565b806112ac611f08565b6112be90670de0b6b3a7640000612844565b6112c8919061285b565b91505090565b6112d661198e565b5f831180156112ed57506001600160a01b03811615155b6113095760405162461bcd60e51b8152600401610b70906127e9565b6113116119b8565b5f61131a611268565b90505f670de0b6b3a76400006113308387612844565b61133a919061285b565b90505f61271061134c6103e884612844565b611356919061285b565b90505f6127106113686107d084612844565b611372919061285b565b90505f6127106113846103e885612844565b61138e919061285b565b90505f6127106113a06107d086612844565b6113aa919061285b565b90505f6113b78587612831565b9050888110156113d95760405162461bcd60e51b8152600401610b709061288d565b6113e3338b611fb3565b8315611454578360085f8282546113fa919061287a565b9091555061145490506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000086611c5a565b82156114635761146383611fe7565b8115611473576114733383612071565b6114a76001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168983611c5a565b335f90815260106020526040812060020180548392906114c890849061287a565b909155505f90506114d7611809565b90506115036114e5886128d3565b335f908152601060205260409020546001600160a01b031683611cc3565b5f61150c611268565b9050336001600160a01b03167fb7cfccdb200d3b32433aeb5d2b829c5191534e3602213c2fbb1d2de273a91f208d89868d8642604051611081969594939291906128ab565b5f61097a611f08565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b61158c61198e565b6115946119b8565b5f818152600e602052604090205460ff166115dd5760405162461bcd60e51b81526020600482015260096024820152681b9bdd08199a5b985b60ba1b6044820152606401610b70565b5f818152600a6020908152604080832033845290915290205460ff166116345760405162461bcd60e51b815260206004820152600c60248201526b6e6f7420656c696769626c6560a01b6044820152606401610b70565b5f818152600b6020908152604080832033845290915290205460ff16156116875760405162461bcd60e51b815260206004820152600760248201526618db185a5b595960ca1b6044820152606401610b70565b5f818152600d6020526040902054806116cd5760405162461bcd60e51b81526020600482015260086024820152676e6f20736861726560c01b6044820152606401610b70565b5f828152600b602090815260408083203384529091528120805460ff1916600117905560078054839290611702908490612831565b9091555061173c90506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163383611c5a565b604051818152339083907f681952543accb977e52d0c7af8fd067a012f0b36ea35134112f24c7057646b5b9060200160405180910390a35061177e6001600555565b50565b611789611e8a565b6001600160a01b0381166117b2575f604051631e4fbdf760e01b8152600401610b7091906126b2565b61177e81611eb7565b5f5f5f5f5f6117c98661112e565b94506117d4866111c1565b6001600160a01b039687165f908152601060205260409020600181015460028201549154979992989097919650169350915050565b5f61097a62093a804261285b565b61109c83838360016122da565b5f61182f848461155a565b90505f1981101561186f578181101561186157828183604051637dc7a0d960e11b8152600401610b70939291906128ed565b61186f84848484035f6122da565b50505050565b6001600160a01b03831661189e575f604051634b637e8f60e11b8152600401610b7091906126b2565b6001600160a01b0382166118c7575f60405163ec442f0560e01b8152600401610b7091906126b2565b61109c8383836123ac565b6001600160a01b038083165f908152601060205260409020541660015b8260ff168160ff1610801561190c57506001600160a01b03821615155b15611936576001600160a01b039182165f90815260106020526040902054909116906001016118ef565b5092915050565b6001600160a01b0381165f90815260106020526040902054600160a81b900460ff1661177e576001600160a01b0381165f908152601060205260409020805460ff60a81b1916600160a81b17905550565b6002600554036119b157604051633ee5aeb560e01b815260040160405180910390fd5b6002600555565b5f6119c1611809565b9050805f036119cd5750565b5f6119d9600183612831565b5f818152600e602052604090205490915060ff16156119f6575050565b5f818152600c6020908152604080832054600990925282205490918215801590611a1f57505f82115b15611a8a57611a2e838361285b565b5f858152600d60205260408120829055909150611a4b8483612844565b90505f611a588285612831565b90508015611a83575f8781526009602052604081208054839290611a7d90849061287a565b90915550505b5050611ab3565b8115611ab3575f8581526009602052604081208054849290611aad90849061287a565b90915550505b5f848152600e602052604090819020805460ff191660011790555184907fc0ab22666f5f990ff20d91d8adf55fbf9b2c62a1a9cbf15efd8ba539e55f34f790611b089086908590918252602082015260400190565b60405180910390a25050505050565b6001600160a01b0382165f9081526010602052604090208054600160a01b900460ff16611bea575f6001600160a01b03831615801590611b695750836001600160a01b0316836001600160a01b031614155b611b93577f0000000000000000000000000000000000000000000000000000000000000000611b95565b825b82546001600160a81b0319166001600160a01b03808316918217600160a01b1785556040519293509091908616907f9199ab96d9b0a32eef646dfb440f2e682272b59a20bd07bb8fa5222f98e10b33905f90a3505b61109c8361193d565b6040516001600160a01b03848116602483015283811660448301526064820183905261186f9186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050612417565b6040516001600160a01b0383811660248301526044820183905261109c91859182169063a9059cbb90606401611c28565b6001600160a01b038216611cb4575f60405163ec442f0560e01b8152600401610b7091906126b2565b611cbf5f83836123ac565b5050565b815f5b60148160ff16108015611ce157506001600160a01b03821615155b15611e83575f838152600f602090815260408083206001600160a01b038616845290915281208054879290611d1790849061290e565b90915550505f838152600a602090815260408083206001600160a01b038616845290915281205460ff1690611d6c847f000000000000000000000000000000000000000000000000000000000000000061247a565b8015611db957505f858152600f602090815260408083206001600160a01b03881684529091529020547f000000000000000000000000000000000000000000000000000000000000000013155b905080151582151514611e5c575f858152600a602090815260408083206001600160a01b03881684529091529020805460ff19168215801591909117909155611e25575f858152600c60205260408120805460019290611e1a90849061287a565b90915550611e5c9050565b5f858152600c602052604090205415611e5c575f858152600c60205260408120805460019290611e56908490612831565b90915550505b50506001600160a01b039182165f9081526010602052604090205490911690600101611cc6565b5050505050565b6006546001600160a01b03163314611159573360405163118cdaa760e01b8152600401610b7091906126b2565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401611f5691906126b2565b602060405180830381865afa158015611f71573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f959190612806565b90506007548111611fa6575f6112c8565b6007546112c89082612831565b6001600160a01b038216611fdc575f604051634b637e8f60e11b8152600401610b7091906126b2565b611cbf825f836123ac565b805f03611ff15750565b8060075f828254612002919061287a565b909155505f9050612011611809565b90508160095f8381526020019081526020015f205f828254612033919061287a565b909155505060405182815281907f657e784bb0145b63c6a47080b5456b0a574f122d80ec18220be02cb62cbe0ee99060200160405180910390a25050565b805f0361207c575050565b6040805160a081018252610fa081526109c460208201526105dc918101919091526103e86060820181905260808201525f5b60058160ff16101561186f575f6127108360ff8416600581106120d3576120d3612935565b60200201516120e69061ffff1686612844565b6120f0919061285b565b905080156122d1575f61210d86612108856001612949565b6118d2565b90505f6001600160a01b0382161580159061214d575061214d827f000000000000000000000000000000000000000000000000000000000000000061247a565b90508015612273576121896001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168385611c5a565b6001600160a01b0382165f908152601060205260409020839060030160ff8616600581106121b9576121b9612935565b015f8282546121c8919061287a565b90915550506001600160a01b0382165f90815260106020526040902060019060080160ff8616600581106121fe576121fe612935565b015f82825461220d919061287a565b90915550506001600160a01b038083169088167f69c1f49d5401b66eaf4468533a0e0a687085690aae1473bd36a6d3a87620283561224c876001612949565b6040805160ff9092168252602082018890525f9082015260600160405180910390a36122ce565b5f6001600160a01b0388167f69c1f49d5401b66eaf4468533a0e0a687085690aae1473bd36a6d3a8762028356122aa876001612949565b6040805160ff90921682526020820188905260019082015260600160405180910390a35b50505b506001016120ae565b6001600160a01b038416612303575f60405163e602df0560e01b8152600401610b7091906126b2565b6001600160a01b03831661232c575f604051634a1406b160e11b8152600401610b7091906126b2565b6001600160a01b038085165f908152600160209081526040808320938716835292905220829055801561186f57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161239e91815260200190565b60405180910390a350505050565b6001600160a01b038316158015906123cc57506001600160a01b03821615155b1561240c5760405162461bcd60e51b815260206004820152601060248201526f6e6f6e2d7472616e7366657261626c6560801b6044820152606401610b70565b61109c83838361248e565b5f5f60205f8451602086015f885af180612436576040513d5f823e3d81fd5b50505f513d9150811561244d57806001141561245a565b6001600160a01b0384163b155b1561186f5783604051635274afe760e01b8152600401610b7091906126b2565b5f81612485846111c1565b10159392505050565b6001600160a01b0383166124b8578060025f8282546124ad919061287a565b909155506125159050565b6001600160a01b0383165f90815260208190526040902054818110156124f75783818360405163391434e360e21b8152600401610b70939291906128ed565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b0382166125315760028054829003905561254f565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161259491815260200190565b60405180910390a3505050565b6040518060a001604052806005906020820280368337509192915050565b80356001600160a01b03811681146125d5575f5ffd5b919050565b5f5f604083850312156125eb575f5ffd5b823591506125fb602084016125bf565b90509250929050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f5f6040838503121561264a575f5ffd5b612653836125bf565b946020939093013593505050565b5f60208284031215612671575f5ffd5b5035919050565b5f5f5f6060848603121561268a575f5ffd5b612693846125bf565b92506126a1602085016125bf565b929592945050506040919091013590565b6001600160a01b0391909116815260200190565b5f5f604083850312156126d7575f5ffd5b6126e0836125bf565b9150602083013560ff811681146126f5575f5ffd5b809150509250929050565b5f60208284031215612710575f5ffd5b610a46826125bf565b805f5b600581101561186f57815184526020938401939091019060010161271c565b610140810161274a8285612719565b610a4660a0830184612719565b5f5f5f60608486031215612769575f5ffd5b8335925060208401359150612780604085016125bf565b90509250925092565b5f5f6040838503121561279a575f5ffd5b6127a3836125bf565b91506125fb602084016125bf565b600181811c908216806127c557607f821691505b6020821081036127e357634e487b7160e01b5f52602260045260245ffd5b50919050565b60208082526003908201526234b73b60e91b604082015260600190565b5f60208284031215612816575f5ffd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610a2257610a2261281d565b8082028115828204841417610a2257610a2261281d565b5f8261287557634e487b7160e01b5f52601260045260245ffd5b500490565b80820180821115610a2257610a2261281d565b6020808252600490820152630736c69760e41b604082015260600190565b958652602086019490945260408501929092526060840152608083015260a082015260c00190565b5f600160ff1b82016128e7576128e761281d565b505f0390565b6001600160a01b039390931683526020830191909152604082015260600190565b8082018281125f83128015821682158216171561292d5761292d61281d565b505092915050565b634e487b7160e01b5f52603260045260245ffd5b60ff8181168382160190811115610a2257610a2261281d56fea2646970667358221220d5ab3009877b97434ebe1cdeaa49a3ad63b216387893c85ec169a4c9169730e964736f6c634300081e003300000000000000000000000055d398326f99059ff775485246999027b31979550000000000000000000000009c1eb8cd53a98e748ee0449dfe20fe5aa30c531f