1.4k txs
3.7k calls
constructor
constructor(address _treasury, address _router, address _dai, address admin)
functions
activeStakerCount
viewfunction activeStakerCount() view returns (uint256)
BASE_RATE
viewfunction BASE_RATE() view returns (uint256)
bondStakes
viewfunction bondStakes(address, uint256) view returns (bool active, uint256 valueEFI, uint256 startBlock, uint256 endBlock, uint256 flatBonusPct, uint256 lastCompoundEpoch)
BURN_ADDRESS
viewfunction BURN_ADDRESS() view returns (address)
currentDAOTier
viewfunction currentDAOTier(address user) view returns (uint8)
currentRewardRate
viewfunction currentRewardRate() view returns (uint256)
DAI_LOCK_DELAY
viewfunction DAI_LOCK_DELAY() view returns (uint256)
dai
viewfunction dai() view returns (address)
daiLocks
viewfunction daiLocks(address, uint256) view returns (uint256 daiAmount, uint256 lockTimestamp)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
EFI_SUPPLY_THRESHOLD_BURNING
viewfunction EFI_SUPPLY_THRESHOLD_BURNING() view returns (uint256)
efi
viewfunction efi() view returns (address)
energyBalance
viewfunction energyBalance(address) view returns (uint256)
EPOCH_LENGTH
viewfunction EPOCH_LENGTH() view returns (uint256)
epochEnd
viewfunction epochEnd() view returns (uint256)
epochNumber
viewfunction epochNumber() view returns (uint256)
flatBonusPct
viewfunction flatBonusPct() view returns (uint256)
getPriceUSD
viewfunction getPriceUSD() view returns (uint256)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
isReferralQualified
viewfunction isReferralQualified(address, address) view returns (bool)
lastMLMEpoch
viewfunction lastMLMEpoch(address) view returns (uint256)
levelStake
viewfunction levelStake(address, uint256) view returns (uint256)
MIN_RATE
viewfunction MIN_RATE() view returns (uint256)
MLM_FEE_PCT
viewfunction MLM_FEE_PCT() view returns (uint256)
MLM_FEE_THRESHOLD
viewfunction MLM_FEE_THRESHOLD() view returns (uint256)
oracle
viewfunction oracle() view returns (address)
overrideRates
viewfunction overrideRates(uint256) view returns (uint8)
pricePair
viewfunction pricePair() view returns (address)
qualifiedDirectReferralsCount
viewfunction qualifiedDirectReferralsCount(address) view returns (uint256)
reqDirects
viewfunction reqDirects(uint256) view returns (uint8)
reqSelfStakeUSD
viewfunction reqSelfStakeUSD(uint256) view returns (uint256)
router
viewfunction router() view returns (address)
sefi
viewfunction sefi() view returns (address)
selfStakeTotal
viewfunction selfStakeTotal(address) view returns (uint256)
SLAB_SIZE
viewfunction SLAB_SIZE() view returns (uint256)
stakeBalance
viewfunction stakeBalance(address) view returns (uint256)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
termBlocks
viewfunction termBlocks() view returns (uint256)
totalLongTermPrincipal
viewfunction totalLongTermPrincipal() view returns (uint256)
treasury
viewfunction treasury() view returns (address)
tree
viewfunction tree() view returns (address)
unclaimedDAO
viewfunction unclaimedDAO(address) view returns (uint256)
unclaimedMLM
viewfunction unclaimedMLM(address) view returns (uint256)
viewActiveTeamStake
viewfunction viewActiveTeamStake(address user) view returns (uint256)
viewBondCompoundRewards
viewfunction viewBondCompoundRewards(address user, uint256 idx) view returns (uint256 reward)
viewPendingDAORewards
viewfunction viewPendingDAORewards(address user) view returns (uint256)
viewPendingMLMRewards
viewfunction viewPendingMLMRewards(address user) view returns (uint256 total)
buyEnergyBurningEFI
nonpayablefunction buyEnergyBurningEFI(uint256 amount)
claimBondCompoundingRewards
nonpayablefunction claimBondCompoundingRewards(uint256 idx)
claimDAORewards
nonpayablefunction claimDAORewards(uint256 efiAmount)
claimMLMRewards
nonpayablefunction claimMLMRewards(uint256 efiAmount)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
rebase
nonpayablefunction rebase()
redeemBond
nonpayablefunction redeemBond(uint256 idx)
releaseDaiLock
nonpayablefunction releaseDaiLock(uint256 idx)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
setContracts
nonpayablefunction setContracts(address _efi, address _sEFI, address _oracle, address _treasury, address _tree)
setMlmFeeThreshold
nonpayablefunction setMlmFeeThreshold(uint256 _mlmFeeThreshold, uint256 _efiSupplyThreshold)
setPricePair
nonpayablefunction setPricePair(address _pricePair, address _router, address _dai)
stakeBond
nonpayablefunction stakeBond(uint256 amount, bool asDAI)
stakeEFI
nonpayablefunction stakeEFI(uint256 amount)
unstakeEFI
nonpayablefunction unstakeEFI(uint256 amount)
events
ClaimedBondCompoundingRewards
event ClaimedBondCompoundingRewards(address indexed user, uint256 idx, uint256 interest)
ClaimedMLM
event ClaimedMLM(address indexed user, uint256 netReward)
DaiLockCreated
event DaiLockCreated(address indexed user, uint256 lockID, uint256 daiAmount, uint256 lockTimestamp)
DaiLockReleased
event DaiLockReleased(address indexed user, uint256 lockID, uint256 daiAmount, uint256 efiReturned)
DAOClaim
event DAOClaim(address indexed user, uint8 tierPct, uint256 reward, uint256 epochs)
DAOTiersSet
event DAOTiersSet()
EnergyPurchased
event EnergyPurchased(address indexed user, uint256 EFIamount, uint256 energy)
Rebased
event Rebased(uint256 epochNumber, uint256 totalStaking, uint256 profit)
RedeemedBond
event RedeemedBond(address indexed user, uint256 idx, uint256 compoundInterest, uint256 principal, uint256 flatBonus)
RoleAdminChanged
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole)
RoleGranted
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender)
RoleRevoked
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender)
SetContracts
event SetContracts(address _EFI, address _sEFI, address _oracle, address _treasury)
SetMlmFeeThreshold
event SetMlmFeeThreshold(uint256 _mlmFeeThreshold)
SetPairData
event SetPairData(address _pricePair, address _router, address _dai)
StakedBond
event StakedBond(address indexed user, uint256 amount)
StakedEFI
event StakedEFI(address indexed user, uint256 amount)
UnstakedEFI
event UnstakedEFI(address indexed user, uint256 amount)
UserRegistration
event UserRegistration(address indexed user, address indexed upline)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
creation bytecode
0x6207a12060089081556a295be96e6406697200000060095562ed4e0060145566f8b0a10e470000601555610260604052600a608090815260a091909152600760c052600560e08190526101008190526101208190526101405260046101608190526101808190526101a08190526101c08190526101e08190526102008190526102208190526102405261009690601c90600f6103e3565b50604080516101e08101825260018152600260208201526003918101919091526004606082015260056080820152600660a0820152600760c0820152600860e08201526009610100820152600a610120820152600b610140820152600c610160820152600d610180820152600e6101a0820152600f6101c0820181905261011f91601d916103e3565b50604080516101e08101825268056bc75e2d631000008152681043561a88293000006020820152681b1ae4d6e2ef50000091810191909152683635c9adc5dea000006060820152685150ae84a8cdf000006080820152686c6b935b8bbd40000060a082015268a2a15d09519be0000060c082015268d8d726b7177a80000060e082015269010f0cf064dd5920000061010082015269014542ba12a337c0000061012082015269017b7883c069166000006101408201526901b1ae4d6e2ef50000006101608201526901e7e4171bf4d3a0000061018082015269021e19e0c9bab24000006101a08201526902544faa778090e000006101c082015261022790601e90600f610473565b50348015610233575f5ffd5b50604051614039380380614039833981016040819052610252916104d7565b6001600160a01b0383161580159061027257506001600160a01b03821615155b801561028657506001600160a01b03841615155b801561029a57506001600160a01b03811615155b6102d95760405162461bcd60e51b815260206004820152600c60248201526b5a65726f206164647265737360a01b604482015260640160405180910390fd5b600480546001600160a01b038087166001600160a01b0319928316179092556001805486841690831617905560038054928516929091169190911790556103205f8261033a565b5061032d61258043610533565b600f555061055292505050565b5f828152602081815260408083206001600160a01b038516845290915281205460ff166103da575f838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556103923390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016103dd565b505f5b92915050565b600183019183908215610463579160200282015f5b8382111561043557835183826101000a81548160ff021916908360ff16021790555092602001926001016020815f010492830192600103026103f8565b80156104615782816101000a81549060ff02191690556001016020815f01049283019260010302610435565b505b5061046f9291506104ac565b5090565b82600f8101928215610463579160200282015b8281111561046357825182906001600160501b0316905591602001919060010190610486565b5b8082111561046f575f81556001016104ad565b6001600160a01b03811681146104d4575f5ffd5b50565b5f5f5f5f608085870312156104ea575f5ffd5b84516104f5816104c0565b6020860151909450610506816104c0565b6040860151909350610517816104c0565b6060860151909250610528816104c0565b939692955090935050565b808201808211156103dd57634e487b7160e01b5f52601160045260245ffd5b613ada8061055f5f395ff3fe608060405234801561000f575f5ffd5b50600436106103be575f3560e01c806388f0aa99116101f5578063d819bfef11610114578063f4b9fa75116100a9578063f887ea4011610079578063f887ea401461088e578063fccc2813146108a1578063fd54b228146108aa578063ff2747c9146108bd575f5ffd5b8063f4b9fa7514610857578063f51ace701461086a578063f63bf8bd14610872578063f7057a5314610885575f5ffd5b8063ea6b4708116100e4578063ea6b470814610813578063ed7653e71461081c578063ee7071c21461083b578063f4145a831461084e575f5ffd5b8063d819bfef146107da578063e2ce6ca3146107e3578063e46e5c66146107f6578063e4cc420414610800575f5ffd5b8063a74645591161018a578063c24fb4681161015a578063c24fb46814610782578063cc0fa52b146107a1578063cdc4207a146107b4578063d547741f146107c7575f5ffd5b8063a74645591461074b578063ac4746ab1461075e578063af14052c14610767578063bd70eb021461076f575f5ffd5b806398f717a6116101c557806398f717a614610715578063993f164f146107285780639d8fd01b14610731578063a217fddf14610744575f5ffd5b806388f0aa99146106a35780638e2f1cee146106c257806391d14854146106d5578063960f1201146106e8575f5ffd5b80634e7c57a6116102e1578063769c0245116102765780637dc0d1d0116102465780637dc0d1d014610657578063815b1e511461066a578063863a66291461067d5780638817603214610690575f5ffd5b8063769c024514610609578063773e8e7b146106285780637a8cbb9e1461063b5780637c50aaeb14610644575f5ffd5b806361aa4d77116102b157806361aa4d77146105ba57806361d027b3146105cd5780636b9bd89b146105f85780637299b73414610601575f5ffd5b80634e7c57a61461056157806355a8e5281461058057806357a9579e1461059f5780635f00b0f2146105a7575f5ffd5b80632f2ff15d11610357578063412913a011610327578063412913a01461051d57806341910f90146105455780634bb6b58f1461054e5780634e73db6414610557575f5ffd5b80632f2ff15d146104c5578063363b3a12146104d857806336568abe146104eb5780633c8cf36e146104fe575f5ffd5b80630c01e713116103925780630c01e713146104335780632299616e1461043c578063248a9ca3146104615780632e64cacf14610483575f5ffd5b8062baa668146103c257806301ffc9a7146103e8578063034de7081461040b578063042a207714610420575b5f5ffd5b6103d56103d0366004613516565b6108d0565b6040519081526020015b60405180910390f35b6103fb6103f6366004613538565b61096a565b60405190151581526020016103df565b61041e61041936600461355f565b61099e565b005b61041e61042e36600461355f565b610d15565b6103d560095481565b61044f61044a36600461355f565b610f60565b60405160ff90911681526020016103df565b6103d561046f36600461355f565b5f9081526020819052604090206001015490565b610496610491366004613576565b610f89565b6040805196151587526020870195909552938501929092526060840152608083015260a082015260c0016103df565b61041e6104d33660046135a0565b610fdd565b61044f6104e6366004613516565b611007565b61041e6104f93660046135a0565b611073565b6103d561050c366004613516565b600d6020525f908152604090205481565b61053061052b366004613576565b6110ab565b604080519283526020830191909152016103df565b6103d5610d0581565b6103d5600f5481565b6103d56201518081565b6103d561056f366004613516565b60106020525f908152604090205481565b6103d561058e366004613516565b60196020525f908152604090205481565b6103d56110e3565b6103d56105b536600461355f565b611278565b61041e6105c83660046135db565b61128e565b6004546105e0906001600160a01b031681565b6040516001600160a01b0390911681526020016103df565b6103d560115481565b6103d5601981565b6103d5610617366004613516565b601b6020525f908152604090205481565b61041e61063636600461355f565b611724565b6103d560085481565b6103d5610652366004613576565b611824565b602d546105e0906001600160a01b031681565b6103d5610678366004613576565b611846565b6002546105e0906001600160a01b031681565b6103d561069e366004613516565b611939565b6103d56106b1366004613516565b600c6020525f908152604090205481565b61044f6106d036600461355f565b611a59565b6103fb6106e33660046135a0565b611a68565b6103fb6106f63660046135fe565b601a60209081525f928352604080842090915290825290205460ff1681565b61041e61072336600461355f565b611a90565b6103d560155481565b61041e61073f36600461355f565b611c1f565b6103d55f81565b6005546105e0906001600160a01b031681565b6103d561258081565b61041e611e91565b6006546105e0906001600160a01b031681565b6103d5610790366004613516565b60186020525f908152604090205481565b61041e6107af36600461362a565b612065565b61041e6107c236600461355f565b6120b1565b61041e6107d53660046135a0565b6121f1565b6103d561091d81565b61041e6107f136600461355f565b612215565b6103d562030d4081565b61041e61080e36600461364a565b612657565b6103d560145481565b6103d561082a366004613516565b600b6020525f908152604090205481565b61041e61084936600461355f565b6126e6565b6103d5600e5481565b6003546105e0906001600160a01b031681565b6103d561284b565b61041e610880366004613692565b6128a5565b6103d560135481565b6001546105e0906001600160a01b031681565b6105e061dead81565b6007546105e0906001600160a01b031681565b6103d56108cb366004613516565b612952565b602d54600e54604051631e3d66c960e11b81525f926001600160a01b031691633c7acd92916109039186916004016136ff565b602060405180830381865afa15801561091e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109429190613718565b6001600160a01b0383165f908152600d60205260409020546109649190613743565b92915050565b5f6001600160e01b03198216637965db0b60e01b148061096457506301ffc9a760e01b6001600160e01b0319831614610964565b3332146109c65760405162461bcd60e51b81526004016109bd90613756565b60405180910390fd5b600e54335f908152601b6020526040812054906109e38284613780565b90505f805b600f8160ff161015610aa757335f90815260176020526040812060ff8316600f8110610a1657610a16613793565b01549050805f03610a275750610a9f565b5f620f4240610a38610d05846137a7565b610a4291906137be565b9050606485601c8560ff16600f8110610a5d57610a5d613793565b602081049190910154610a7c91601f166101000a900460ff16846137a7565b610a8691906137a7565b610a9091906137be565b610a9a9085613743565b935050505b6001016109e8565b50335f908152601b60209081526040808320879055600c909152812054610acf908390613743565b90505f86118015610ae05750808611155b610b1f5760405162461bcd60e51b815260206004820152601060248201526f416d6f756e7420746f6f206c6172676560801b60448201526064016109bd565b600854601154118015610ba6575060095460065f9054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b80573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ba49190613718565b115b15610c2157335f908152600b6020526040902054861115610bfd5760405162461bcd60e51b81526020600482015260116024820152704e6f7420656e6f75676820656e6572677960781b60448201526064016109bd565b335f908152600b602052604081208054889290610c1b908490613780565b90915550505b610c2b8682613780565b335f818152600c6020526040908190209290925560065491516340c10f1960e01b81526001600160a01b03909216916340c10f1991610c6e918a906004016136ff565b5f604051808303815f87803b158015610c85575f5ffd5b505af1158015610c97573d5f5f3e3d5ffd5b505050505f610ca46110e3565b90505f670de0b6b3a7640000610cba838a6137a7565b610cc491906137be565b90508015610cd657610cd633826129be565b60405188815233907f0466e5f7ba17148f8c3b6a265e615e1c1514f9c8972433831794eec5197080b29060200160405180910390a25050505050505050565b333214610d345760405162461bcd60e51b81526004016109bd90613756565b335f908152601660205260408120805483908110610d5457610d54613793565b5f9182526020909120600690910201805490915060ff16610db75760405162461bcd60e51b815260206004820152601860248201527f52656465656d3a20616c72656164792072656465656d6564000000000000000060448201526064016109bd565b8060030154431015610e0b5760405162461bcd60e51b815260206004820152601760248201527f52656465656d3a206e6f7420796574206d61747572656400000000000000000060448201526064016109bd565b5f610e163384611846565b600e546005840155825460ff191683556001830154909150610e39903390612b1e565b600182015460048301545f90670de0b6b3a764000090610e5990846137a7565b610e6391906137be565b90505f83610e718385613743565b610e7b9190613743565b90508260135410610ea2578260135f828254610e979190613780565b90915550610ea79050565b5f6013555b8015610f0d576006546040516340c10f1960e01b81526001600160a01b03909116906340c10f1990610edf90339085906004016136ff565b5f604051808303815f87803b158015610ef6575f5ffd5b505af1158015610f08573d5f5f3e3d5ffd5b505050505b60408051878152602081018690529081018490526060810183905233907f846759512813d29ba20c50c09715e075a6baf38858183161d45c8488ff037f4f906080015b60405180910390a2505050505050565b601c81600f8110610f6f575f80fd5b60209182820401919006915054906101000a900460ff1681565b6016602052815f5260405f208181548110610fa2575f80fd5b5f91825260209091206006909102018054600182015460028301546003840154600485015460059095015460ff909416965091945092909186565b5f82815260208190526040902060010154610ff781612c16565b6110018383612c23565b50505050565b602d546040516327db2b4360e21b81526001600160a01b0383811660048301525f921690639f6cad0c90602401602060405180830381865afa15801561104f573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061096491906137dd565b6001600160a01b038116331461109c5760405163334bd91960e11b815260040160405180910390fd5b6110a68282612cb2565b505050565b600a602052815f5260405f2081815481106110c4575f80fd5b5f91825260209091206002909102018054600190910154909250905082565b5f5f5f60025f9054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611136573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061115a9190613818565b5060065460025460408051630dfe168160e01b815290519496509294505f9384936001600160a01b039384169390921691630dfe16819160048083019260209291908290030181865afa1580156111b3573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111d79190613859565b6001600160a01b0316146111ec5782846111ef565b83835b6001600160701b031691506001600160701b031691505f8211801561121357505f81115b6112525760405162461bcd60e51b815260206004820152601060248201526f496e76616c696420726573657276657360801b60448201526064016109bd565b8161126582670de0b6b3a76400006137a7565b61126f91906137be565b94505050505090565b601e81600f8110611287575f80fd5b0154905081565b3332146112ad5760405162461bcd60e51b81526004016109bd90613756565b5f82116112cc5760405162461bcd60e51b81526004016109bd90613874565b8015611350576003546040516323b872dd60e01b8152336004820152306024820152604481018490526001600160a01b03909116906323b872dd906064016020604051808303815f875af1158015611326573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061134a9190613899565b506113ca565b6006546040516323b872dd60e01b8152336004820152306024820152604481018490526001600160a01b03909116906323b872dd906064016020604051808303815f875af11580156113a4573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113c89190613899565b505b5f6113d66002846137be565b90505f611405836113f2576006546001600160a01b03166113ff565b6003546001600160a01b03165b83612d1b565b6003546001549192506001600160a01b039081169163095ea7b391168561142c578361142e565b845b6040518363ffffffff1660e01b815260040161144b9291906136ff565b6020604051808303815f875af1158015611467573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061148b9190613899565b506006546001546001600160a01b039182169163095ea7b39116856114b057846114b2565b835b6040518363ffffffff1660e01b81526004016114cf9291906136ff565b6020604051808303815f875af11580156114eb573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061150f9190613899565b506001546003546006546001600160a01b039283169263e8e3370092811691168661153a578461153c565b855b876115475786611549565b855b6004805460405160e088901b6001600160e01b03191681526001600160a01b03968716928101929092529385166024820152604481019290925260648201525f6084820181905260a4820152911660c48201524260e4820152610104016060604051808303815f875af11580156115c2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115e691906138b4565b5050505f6115f26110e3565b90505f84611600578561161d565b8161161387670de0b6b3a76400006137a7565b61161d91906137be565b60145490915043905f906116319083613743565b90505f60155490508360135f82825461164a9190613743565b9091555050335f818152601660209081526040808320815160c08101835260018082528185018b81529382018a8152606083018a8152608084018a8152600e5460a0860190815286548086018855968a529790982093516006909502909301805460ff1916941515949094178455935190830155915160028201559051600382015591516004830155516005909101556116e49085612ee4565b60405189815233907f5e3b69025a77391de5f89890ee948126e5dfe683947c0cf3733bea6cfcc6d9e09060200160405180910390a2505050505050505050565b5f81116117435760405162461bcd60e51b81526004016109bd90613874565b60065460405163508ec67360e11b81526001600160a01b039091169063a11d8ce69061177590339085906004016136ff565b5f604051808303815f87803b15801561178c575f5ffd5b505af115801561179e573d5f5f3e3d5ffd5b505050505f60198260646117b291906137a7565b6117bc91906137be565b335f908152600b60205260408120805492935083929091906117df908490613743565b9091555050604080518381526020810183905233917f7d1f0497fd8309dcce3b22746ddfcfe02e2dcd8b7a525b252c46cf4f0bb7adcb91015b60405180910390a25050565b6017602052815f5260405f2081600f811061183d575f80fd5b01549150829050565b6001600160a01b0382165f90815260166020526040812080548291908490811061187257611872613793565b905f5260205f209060060201905080600501545f03611894575f915050610964565b805460ff1615155f036118aa575f915050610964565b5f8160050154600e54116118be575f6118d0565b8160050154600e546118d09190613780565b9050805f036118e3575f92505050610964565b5f6118ec61284b565b90505f6119056118ff83620f4240613743565b84612fa0565b9050620f42406119158183613780565b856001015461192491906137a7565b61192e91906137be565b979650505050505050565b6001600160a01b0381165f908152600c6020908152604080832054601b90925290912054600e5481811115611a52575f6119738383613780565b90505f61197e61284b565b90505f5b600f8160ff161015611a4e576001600160a01b0387165f90815260176020526040812060ff8316600f81106119b9576119b9613793565b01549050805f036119ca5750611a46565b5f601c8360ff16600f81106119e1576119e1613793565b602081049091015460ff601f9092166101000a90041690505f6064620f42408784611a0c89886137a7565b611a1691906137a7565b611a2091906137a7565b611a2a91906137be565b611a3491906137be565b9050611a40818a613743565b98505050505b600101611982565b5050505b5050919050565b601d81600f8110610f6f575f80fd5b5f918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b333214611aaf5760405162461bcd60e51b81526004016109bd90613756565b5f8111611ace5760405162461bcd60e51b81526004016109bd90613874565b60055460405163508ec67360e11b81526001600160a01b039091169063a11d8ce690611b0090339085906004016136ff565b5f604051808303815f87803b158015611b17575f5ffd5b505af1158015611b29573d5f5f3e3d5ffd5b50506006546040516340c10f1960e01b81526001600160a01b0390911692506340c10f199150611b5f90339085906004016136ff565b5f604051808303815f87803b158015611b76575f5ffd5b505af1158015611b88573d5f5f3e3d5ffd5b5050335f9081526010602052604090205483119150611bcc905057335f9081526010602052604081208054839290611bc1908490613780565b90915550611bdc9050565b335f908152601060205260408120555b611be63382612b1e565b60405181815233907f5d7a8abf351d1cf95b904a0e79a9490c4a5aa13a6901d681b6f4469d03992ec7906020015b60405180910390a250565b333214611c3e5760405162461bcd60e51b81526004016109bd90613756565b335f908152600a6020526040902080548210611c915760405162461bcd60e51b8152602060048201526012602482015271092dcecc2d8d2c840d8dec6d640d2dcc8caf60731b60448201526064016109bd565b5f818381548110611ca457611ca4613793565b5f9182526020918290206040805180820190915260029092020180548252600101549181018290529150611cdc906201518090613743565b421015611d215760405162461bcd60e51b8152602060048201526013602482015272546f6f20736f6f6e20746f2072656c6561736560681b60448201526064016109bd565b5f611d2a6110e3565b90505f81835f0151670de0b6b3a7640000611d4591906137a7565b611d4f91906137be565b90508015611db7576006546040516340c10f1960e01b81526001600160a01b03909116906340c10f1990611d8990339085906004016136ff565b5f604051808303815f87803b158015611da0575f5ffd5b505af1158015611db2573d5f5f3e3d5ffd5b505050505b83545f90611dc790600190613780565b9050808614611e1e57848181548110611de257611de2613793565b905f5260205f209060020201858781548110611e0057611e00613793565b5f918252602090912082546002909202019081556001918201549101555b84805480611e2e57611e2e6138df565b5f8281526020812060025f1990930192830201818155600101559055835160405133917fa33f0df2afabd684ecfa3b7de6c199064e84016676b66ede5ae8d7c80c44898c91610f50918a9187909283526020830191909152604082015260600190565b600f54431015611e9d57565b5f612580600f5443611eaf9190613780565b611eb991906137be565b611ec4906001613743565b905080600e5f828254611ed79190613743565b90915550611ee99050612580826137a7565b600f5f828254611ef99190613743565b9091555050600554604080516318160ddd60e01b815290515f926001600160a01b0316916318160ddd9160048083019260209291908290030181865afa158015611f45573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f699190613718565b6013549091505f611f7a8284613743565b90505f611f8561284b565b90505f620f424086611f9784866137a7565b611fa191906137a7565b611fab91906137be565b60055460405163bc4f2d6d60e01b8152600481018390529192506001600160a01b03169063bc4f2d6d906024016020604051808303815f875af1158015611ff4573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120189190613718565b50600e54604080519182526020820185905281018290527fd1a8a452d776b1b6802824ca2e8489c6448e2cb0963f552a9a19ab4ae064ca58906060015b60405180910390a1505050505050565b5f61206f81612c16565b600883905560098290556040518381527fb4e3a72fee4e0112860de0a2ccddef555efbecece86e56c94198c8b36e4b2d9b9060200160405180910390a1505050565b3332146120d05760405162461bcd60e51b81526004016109bd90613756565b5f6120db3383611846565b90505f81116121235760405162461bcd60e51b81526020600482015260146024820152734e6f20636f6d706f756e6420746f20636c61696d60601b60448201526064016109bd565b600e54335f90815260166020526040902080548490811061214657612146613793565b5f918252602090912060069182020160050191909155546040516340c10f1960e01b81526001600160a01b03909116906340c10f199061218c90339085906004016136ff565b5f604051808303815f87803b1580156121a3575f5ffd5b505af11580156121b5573d5f5f3e3d5ffd5b505060408051858152602081018590523393507f924144d4d2b822f675b7ed5c52e3d13060076f8c003b8f5da962367ed31755a8925001611818565b5f8281526020819052604090206001015461220b81612c16565b6110018383612cb2565b3332146122345760405162461bcd60e51b81526004016109bd90613756565b600e54602d546040516327db2b4360e21b81523360048201525f916001600160a01b031690639f6cad0c90602401602060405180830381865afa15801561227d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122a191906137dd565b602d54604051631e3d66c960e11b81529192505f916001600160a01b0390911690633c7acd92906122d890339087906004016136ff565b602060405180830381865afa1580156122f3573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123179190613718565b90505f8111806123345750335f908152600d602052604090205415155b6123715760405162461bcd60e51b815260206004820152600e60248201526d4e6f2044414f207265776172647360901b60448201526064016109bd565b602d5460405163c3bf10b760e01b81526001600160a01b039091169063c3bf10b7906123a390339087906004016136ff565b5f604051808303815f87803b1580156123ba575f5ffd5b505af11580156123cc573d5f5f3e3d5ffd5b5050335f908152600d6020526040812080548594509092506123ef908490613743565b9091555050335f908152600d602052604090205484158015906124125750808511155b6124515760405162461bcd60e51b815260206004820152601060248201526f416d6f756e7420746f6f206c6172676560801b60448201526064016109bd565b5f61245a6110e3565b90505f670de0b6b3a764000061247083896137a7565b61247a91906137be565b9050801561248c5761248c33826129be565b600854601154118015612513575060095460065f9054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124ed573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125119190613718565b115b1561258e57335f908152600b602052604090205487111561256a5760405162461bcd60e51b81526020600482015260116024820152704e6f7420656e6f75676820656e6572677960781b60448201526064016109bd565b335f908152600b602052604081208054899290612588908490613780565b90915550505b6125988784613780565b335f818152600d6020526040908190209290925560065491516340c10f1960e01b81526001600160a01b03909216916340c10f19916125db918b906004016136ff565b5f604051808303815f87803b1580156125f2575f5ffd5b505af1158015612604573d5f5f3e3d5ffd5b50506040805160ff89168152602081018b90529081018990523392507f6b79df38e666a77ef4bfebaf0dfe2068817bc7153b1a83b870c6cdb4e9e684fc915060600160405180910390a250505050505050565b5f61266181612c16565b600280546001600160a01b038681166001600160a01b0319928316811790935560018054878316908416811790915560038054928716929093168217909255604080519384526020840192909252908201527fddbd9778d033889a045ea2820502521e906077931f230c39e20b72182b5ed41e9060600160405180910390a150505050565b3332146127055760405162461bcd60e51b81526004016109bd90613756565b5f81116127245760405162461bcd60e51b81526004016109bd90613874565b61272c611e91565b60065460405163508ec67360e11b81526001600160a01b039091169063a11d8ce69061275e90339085906004016136ff565b5f604051808303815f87803b158015612775575f5ffd5b505af1158015612787573d5f5f3e3d5ffd5b50506005546040516340c10f1960e01b81526001600160a01b0390911692506340c10f1991506127bd90339085906004016136ff565b5f604051808303815f87803b1580156127d4575f5ffd5b505af11580156127e6573d5f5f3e3d5ffd5b5050335f9081526010602052604081208054859450909250612809908490613743565b9091555061281990503382612ee4565b60405181815233907fd668602ccbba632aa4c1e5710d9857e6b9f3499118f024d688ca60fcc1d7075890602001611c14565b5f5f62030d4060115461285e91906137be565b9050600a81106128715761091d91505090565b5f61287d8260646137a7565b90505f81610d05116128915761091d61289d565b61289d82610d05613780565b949350505050565b5f6128af81612c16565b600680546001600160a01b038881166001600160a01b03199283168117909355600580548983169084168117909155602d8054898416908516811790915560048054898516908616811790915560078054948916949095169390931790935560408051948552602085019190915283019190915260608201527f1d21195c03da605048da93174c3593269a15de81574f2d23469842f314d08e6c90608001612055565b602d546040516340337dd360e11b81526001600160a01b0383811660048301525f921690638066fba690602401602060405180830381865afa15801561299a573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109649190613718565b600354600480546040516323b872dd60e01b81526001600160a01b03868116938201939093529082166024820152604481018490529116906323b872dd906064016020604051808303815f875af1158015612a1b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a3f9190613899565b612a815760405162461bcd60e51b8152602060048201526013602482015272111052481d1c985b9cd9995c8819985a5b1959606a1b60448201526064016109bd565b6001600160a01b0382165f818152600a60208181526040808420815180830190925286825242828401908152815460018181018455838852858820945160029092029094019081559051908301559385905291905290547fdf46e35d2d765bbfd1de3b3c6fce26e72d2980190081ad0e480dc7a00f76d36191612b0391613780565b60408051918252602082018590524290820152606001611818565b6001600160a01b0382165f90815260186020526040902054811015612b6f576001600160a01b0382165f9081526018602052604081208054839290612b64908490613780565b90915550612b889050565b6001600160a01b0382165f908152601860205260408120555b5f612b916110e3565b9050612b9d8382613001565b612bb033612baa846138f3565b836131b7565b335f90815260106020526040902054158015612bda5750335f9081526012602052604090205460ff165b156110a657335f908152601260205260409020805460ff19169055601154156110a65760118054905f612c0c8361390d565b9190505550505050565b612c2081336134d3565b50565b5f612c2e8383611a68565b612cab575f838152602081815260408083206001600160a01b03861684529091529020805460ff19166001179055612c633390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610964565b505f610964565b5f612cbd8383611a68565b15612cab575f838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610964565b60015460405163095ea7b360e01b81525f916001600160a01b038086169263095ea7b392612d4f92169086906004016136ff565b6020604051808303815f875af1158015612d6b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d8f9190613899565b506003545f906001600160a01b03858116911614612db8576003546001600160a01b0316612dc5565b6006546001600160a01b03165b6040805160028082526060820183529293505f92909160208301908036833701905050905084815f81518110612dfd57612dfd613793565b60200260200101906001600160a01b031690816001600160a01b0316815250508181600181518110612e3157612e31613793565b6001600160a01b0392831660209182029290920101526001546040516338ed173960e01b81525f9291909116906338ed173990612e7a9088908590879030904290600401613936565b5f604051808303815f875af1158015612e95573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612ebc91908101906139a6565b905080600181518110612ed157612ed1613793565b6020026020010151935050505092915050565b6001600160a01b0382165f9081526018602052604081208054839290612f0b908490613743565b909155505f9050612f1a6110e3565b9050612f268382613001565b612f318383836131b7565b335f9081526012602052604090205460ff16612f7457335f908152601260205260408120805460ff191660011790556011805491612f6e83613a6e565b91905055505b335f908152601b602052604081205490036110a657600e54335f908152601b6020526040902055505050565b5f620f4240835b8315612ff95783600116600103612fd357620f4240612fc682846137a7565b612fd091906137be565b91505b620f4240612fe182806137a7565b612feb91906137be565b9050600184901c9350612fa7565b509392505050565b600754604051634a9fefc760e01b81526001600160a01b0384811660048301525f921690634a9fefc790602401602060405180830381865afa158015613049573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061306d9190613859565b90506001600160a01b03811661308257505050565b6001600160a01b0383165f90815260186020526040812054670de0b6b3a7640000906130af9085906137a7565b6130b991906137be565b6001600160a01b038084165f908152601a602090815260408083209389168352929052205490915060ff1668056bc75e2d6310000082101581151581900361310357505050505050565b6001600160a01b038481165f908152601a60209081526040808320938a16835292905220805460ff19168215801591909117909155613169576001600160a01b0384165f90815260196020526040812080549161315f83613a6e565b91905055506131af565b6001600160a01b0384165f90815260196020526040902054156131af576001600160a01b0384165f9081526019602052604081208054916131a98361390d565b91905055505b505050505050565b600754604051634a9fefc760e01b81526001600160a01b0385811660048301525f921690634a9fefc790602401602060405180830381865afa1580156131ff573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906132239190613859565b90505f5b600f8160ff1610801561324257506001600160a01b03821615155b156134cc575f841315613341576001600160a01b0382165f90815260186020526040812054670de0b6b3a76400009061327c9086906137a7565b61328691906137be565b9050601d8260ff16600f811061329e5761329e613793565b6020808204909201546001600160a01b0386165f908152601990935260409092205460ff601f9092166101000a90920416118015906132f45750601e8260ff16600f81106132ee576132ee613793565b01548110155b1561333b576001600160a01b0383165f908152601760205260409020859060ff8416600f811061332657613326613793565b015f8282546133359190613743565b90915550505b5061344c565b5f841280156133845750613354846138f3565b6001600160a01b0383165f90815260176020526040902060ff8316600f811061337f5761337f613793565b015410155b156133d757613392846138f3565b6001600160a01b0383165f90815260176020526040902060ff8316600f81106133bd576133bd613793565b015f8282546133cc9190613780565b9091555061344c9050565b5f8412801561341957506133ea846138f3565b6001600160a01b0383165f90815260176020526040902060ff8316600f811061341557613415613793565b0154105b1561344c576001600160a01b0382165f90815260176020526040812060ff8316600f811061344957613449613793565b01555b600754604051634a9fefc760e01b81526001600160a01b03848116600483015290911690634a9fefc790602401602060405180830381865afa158015613494573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134b89190613859565b9150806134c481613a86565b915050613227565b5050505050565b6134dd8282611a68565b6134fe57808260405163e2517d3f60e01b81526004016109bd9291906136ff565b5050565b6001600160a01b0381168114612c20575f5ffd5b5f60208284031215613526575f5ffd5b813561353181613502565b9392505050565b5f60208284031215613548575f5ffd5b81356001600160e01b031981168114613531575f5ffd5b5f6020828403121561356f575f5ffd5b5035919050565b5f5f60408385031215613587575f5ffd5b823561359281613502565b946020939093013593505050565b5f5f604083850312156135b1575f5ffd5b8235915060208301356135c381613502565b809150509250929050565b8015158114612c20575f5ffd5b5f5f604083850312156135ec575f5ffd5b8235915060208301356135c3816135ce565b5f5f6040838503121561360f575f5ffd5b823561361a81613502565b915060208301356135c381613502565b5f5f6040838503121561363b575f5ffd5b50508035926020909101359150565b5f5f5f6060848603121561365c575f5ffd5b833561366781613502565b9250602084013561367781613502565b9150604084013561368781613502565b809150509250925092565b5f5f5f5f5f60a086880312156136a6575f5ffd5b85356136b181613502565b945060208601356136c181613502565b935060408601356136d181613502565b925060608601356136e181613502565b915060808601356136f181613502565b809150509295509295909350565b6001600160a01b03929092168252602082015260400190565b5f60208284031215613728575f5ffd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b808201808211156109645761096461372f565b60208082526010908201526f1bdb9b1e481153d048185b1b1bddd95960821b604082015260600190565b818103818111156109645761096461372f565b634e487b7160e01b5f52603260045260245ffd5b80820281158282048414176109645761096461372f565b5f826137d857634e487b7160e01b5f52601260045260245ffd5b500490565b5f602082840312156137ed575f5ffd5b815160ff81168114613531575f5ffd5b80516001600160701b0381168114613813575f5ffd5b919050565b5f5f5f6060848603121561382a575f5ffd5b613833846137fd565b9250613841602085016137fd565b9150604084015163ffffffff81168114613687575f5ffd5b5f60208284031215613869575f5ffd5b815161353181613502565b6020808252600b908201526a16995c9bc8185b5bdd5b9d60aa1b604082015260600190565b5f602082840312156138a9575f5ffd5b8151613531816135ce565b5f5f5f606084860312156138c6575f5ffd5b5050815160208301516040909301519094929350919050565b634e487b7160e01b5f52603160045260245ffd5b5f600160ff1b82016139075761390761372f565b505f0390565b5f8161391b5761391b61372f565b505f190190565b634e487b7160e01b5f52604160045260245ffd5b5f60a0820187835286602084015260a0604084015280865180835260c0850191506020880192505f5b818110156139865783516001600160a01b031683526020938401939092019160010161395f565b50506001600160a01b039590951660608401525050608001529392505050565b5f602082840312156139b6575f5ffd5b815167ffffffffffffffff8111156139cc575f5ffd5b8201601f810184136139dc575f5ffd5b805167ffffffffffffffff8111156139f6576139f6613922565b8060051b604051601f19603f830116810181811067ffffffffffffffff82111715613a2357613a23613922565b604052918252602081840181019290810187841115613a40575f5ffd5b6020850194505b83851015613a6357845180825260209586019590935001613a47565b509695505050505050565b5f60018201613a7f57613a7f61372f565b5060010190565b5f60ff821660ff8103613a9b57613a9b61372f565b6001019291505056fea2646970667358221220d9e6dd2e0ad8929c5d4513a16a8dda5e0131d9373accbaa1cd9b0538ad2c853864736f6c634300081e00330000000000000000000000000de027c2cb491791ec4bfd16190251a14df5fcf8000000000000000000000000a5e0829caced8ffdd4de3c43696c57f7d7a678ff0000000000000000000000008f3cf7ad23cd3cadbd9735aff958023239c6a063000000000000000000000000e7c458d02d21ae71d59ed1d1ba85f3908ac8fab8