0 txs
1 call
constructor
constructor(address _uniswapFactory, address _countryList, address _feeAddress, address _voter)
functions
COUNTRY_LIST
viewfunction COUNTRY_LIST() view returns (address)
devaddr
viewfunction devaddr() view returns (address)
gaugeLocks
viewfunction gaugeLocks(address, uint256) view returns (uint256)
getGaugeBalance
viewfunction getGaugeBalance(uint256 _lockID) view returns (uint256)
getLockedTokenAtIndex
viewfunction getLockedTokenAtIndex(uint256 _index) view returns (address)
getNumLockedTokens
viewfunction getNumLockedTokens() view returns (uint256)
getNumLocksForToken
viewfunction getNumLocksForToken(address _lpToken) view returns (uint256)
getUserWhitelistStatus
viewfunction getUserWhitelistStatus(address _user) view returns (bool)
getWhitelistedUserAtIndex
viewfunction getWhitelistedUserAtIndex(uint256 _index) view returns (address)
getWhitelistedUsersLength
viewfunction getWhitelistedUsersLength() view returns (uint256)
gFees
viewfunction gFees() view returns (uint256 ethFee, uint256 liquidityFee, uint256 referralPercent, uint256 referralDiscount, uint256 claimFees)
LOCKS
viewfunction LOCKS(uint256) view returns (address lpToken, uint256 lockDate, uint256 amount, uint256 initialAmount, uint256 unlockDate, uint256 lockID, address owner, uint16 countryCode, address gauge)
lpTokenLocks
viewfunction lpTokenLocks(address, uint256) view returns (uint256)
maxLockPerLP
viewfunction maxLockPerLP() view returns (uint256)
migrator
viewfunction migrator() view returns (address)
NONCE
viewfunction NONCE() view returns (uint256)
owner
viewfunction owner() view returns (address)
pendingOwner
viewfunction pendingOwner() view returns (address)
TOKEN_LOCKS
viewfunction TOKEN_LOCKS(address, uint256) view returns (uint256)
totalGaugeLockedPerToken
viewfunction totalGaugeLockedPerToken(address) view returns (uint256)
totalLockedPerToken
viewfunction totalLockedPerToken(address) view returns (uint256)
uniswapFactory
viewfunction uniswapFactory() view returns (address)
voter
viewfunction voter() view returns (address)
acceptOwnership
nonpayablefunction acceptOwnership()
getReward
nonpayablefunction getReward(uint256 _lockID)
incrementLock
nonpayablefunction incrementLock(uint256 _lockID, uint256 _amount)
lockLPToken
payablefunction lockLPToken(address _lpToken, uint256 _amount, uint256 _unlock_date, address _referral, address _withdrawer, uint16 _countryCode, bool _useGauge) payable
migrate
nonpayablefunction migrate(uint256 _lockID, uint256 _amount, uint256 _migration_option)
relock
nonpayablefunction relock(uint256 _lockID, uint256 _unlock_date)
renounceOwnership
nonpayablefunction renounceOwnership()
setDev
nonpayablefunction setDev(address _devaddr)
setFees
nonpayablefunction setFees(uint256 _referralPercent, uint256 _referralDiscount, uint256 _ethFee, uint256 _liquidityFee, uint256 _claimFees)
setMaxAllowedLocksPerLP
nonpayablefunction setMaxAllowedLocksPerLP(uint256 _maxLocks)
setMigrator
nonpayablefunction setMigrator(address _migrator)
splitLock
payablefunction splitLock(uint256 _lockID, uint256 _amount) payable
toggleGaugeStatus
nonpayablefunction toggleGaugeStatus(uint256 _lockID, bool _useGauge)
transferLockOwnership
nonpayablefunction transferLockOwnership(uint256 _lockID, address _newOwner)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
whitelistFeeAccount
nonpayablefunction whitelistFeeAccount(address _user, bool _add)
withdraw
nonpayablefunction withdraw(uint256 _lockID, uint256 _amount)
events
DevAddressUpdated
event DevAddressUpdated(address indexed oldDev, address indexed newDev)
FeesUpdated
event FeesUpdated(uint256 referralPercent, uint256 referralDiscount, uint256 ethFee, uint256 liquidityFee, uint256 claimFees)
FeeWhitelistUpdated
event FeeWhitelistUpdated(address indexed account, bool added)
MaxAllowedLocksPerLPUpdated
event MaxAllowedLocksPerLPUpdated(uint256 oldMax, uint256 newMax)
MigratorUpdated
event MigratorUpdated(address indexed oldMigrator, address indexed newMigrator)
onCollectFees
event onCollectFees(uint256 lockID, address lpToken, address owner, uint256 fees0, uint256 fees1)
onIncrementLock
event onIncrementLock(uint256 lockID, address lpToken, address owner, address payer, uint256 amountRemainingInLock, uint256 amountAdded, uint256 liquidityFee)
OnMigrate
event OnMigrate(uint256 lockID, address lpToken, address owner, uint256 amountRemainingInLock, uint256 amountMigrated, uint256 migrationOption)
onNewLock
event onNewLock(uint256 lockID, address lpToken, address owner, uint256 amount, uint256 lockDate, uint256 unlockDate, uint16 countryCode)
onRelock
event onRelock(uint256 lockID, address lpToken, address owner, uint256 amountRemainingInLock, uint256 liquidityFee, uint256 unlockDate)
onSplitLock
event onSplitLock(uint256 lockID, address lpToken, address owner, uint256 amountRemainingInLock, uint256 amountRemoved)
onToggleGaugeStatus
event onToggleGaugeStatus(uint256 lockID, address lpToken, address owner, bool useGauge)
onTransferLockOwnership
event onTransferLockOwnership(uint256 lockID, address lpToken, address oldOwner, address newOwner)
onWithdraw
event onWithdraw(uint256 lockID, address lpToken, address owner, uint256 amountRemainingInLock, uint256 amountRemoved)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
OwnershipTransferStarted
event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner)
errors
FeeNotMet
error FeeNotMet()
GaugeStatusAlreadySet
error GaugeStatusAlreadySet()
InsufficientAmount
error InsufficientAmount()
InsufficientBalance
error InsufficientBalance()
InvalidCountryCode
error InvalidCountryCode()
InvalidCountryList
error InvalidCountryList()
InvalidDevAddress
error InvalidDevAddress()
InvalidFeeAddress
error InvalidFeeAddress()
InvalidMaxLocks
error InvalidMaxLocks()
InvalidPercent
error InvalidPercent()
InvalidPool
error InvalidPool()
InvalidTimestamp
error InvalidTimestamp()
InvalidUniswapFactory
error InvalidUniswapFactory()
InvalidUserAddress
error InvalidUserAddress()
InvalidVoter
error InvalidVoter()
LockEmpty
error LockEmpty()
MaxLockReached
error MaxLockReached()
MigratorNotSet
error MigratorNotSet()
NoGaugeAvailable
error NoGaugeAvailable()
NoStateChange
error NoStateChange()
NotOwner
error NotOwner()
NotUsingGauge
error NotUsingGauge()
RemovedLock
error RemovedLock()
SameOwner
error SameOwner()
UnlockDateNotReached
error UnlockDateNotReached()
WhitelistedFeeAccount
error WhitelistedFeeAccount()
ZeroMigration
error ZeroMigration()
ZeroWithdrawal
error ZeroWithdrawal()
creation bytecode
0x60a034620001a557601f620037ee38819003918201601f191683019291906001600160401b03841183851017620001aa578160809284926040968752833981010312620001a55780516001600160a01b0380821691829003620001a557602083015191818316809303620001a5578484015193828516809503620001a5576060015193828516808603620001a55760018060a01b031993846001541660015560005433868216176000558851913391167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a36001600255601e6014558315620001965750841562000185578115620001745715620001635782601554161760155560fa600f55670de0b6b3a7640000600d55600a600e556064601055600a60115581600354161760035560175416176017556080525161362d9081620001c182396080518181816109a8015281816113ac01528181611d670152612ad20152f35b85516311745b2b60e31b8152600490fd5b865163ae33c5cd60e01b8152600490fd5b865163078c17b360e41b8152600490fd5b632122876160e21b8152600490fd5b600080fd5b634e487b7160e01b600052604160045260246000fdfe6080604052600436101561001257600080fd5b6000803560e01c806304a66b48146123aa57806314dd79a31461233a5780631c4b774b146122da5780631f2a1d2f146122a157806323cf3118146122345780633717dee7146120055780633dad611314611fbd578063441a3e7014611d9657806346c96aac14611d515780634bb18e3f14611d3357806351034b1914611cfa5780635a04fb6914611c0d578063623bc5e714611be65780636588fc03146118795780636ad40638146111c0578063715018a61461115a578063783451e81461113c57806379ba5097146110785780637cd07e471461104f57806388c9501814610e0c5780638bdb2afa14610de35780638c301df814610d715780638da5cb5b14610d4a5780638f106c321461090357806390e1a003146108be57806391ff1eb1146107e3578063b2fb30cb1461059b578063b580a7d914610553578063b9863a441461050e578063bfe38ca41461049f578063cf0d5af31461040d578063d477f05f1461038a578063d49e77cd14610361578063dbfcfc0414610328578063dda0edc1146102d2578063e091dd1a146102b4578063e30c39781461028b578063f2fde38b1461021e578063fc5df791146102005763fe0ab561146101d557600080fd5b346101fd57806003193601126101fd576017546040516001600160a01b039091168152602090f35b80fd5b50346101fd57806003193601126101fd576020601454604051908152f35b50346101fd5760203660031901126101fd5761023861248f565b610240612eca565b600180546001600160a01b0319166001600160a01b0392831690811790915582549091167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227008380a380f35b50346101fd57806003193601126101fd576001546040516001600160a01b039091168152602090f35b50346101fd57806003193601126101fd576020600954604051908152f35b50346101fd5760403660031901126101fd576102ec61248f565b6001600160a01b03168152600460205260408120805460243592908310156101fd57602061031a84846124f2565b90546040519160031b1c8152f35b50346101fd5760203660031901126101fd576020906040906001600160a01b0361035061248f565b168152600683522054604051908152f35b50346101fd57806003193601126101fd576015546040516001600160a01b039091168152602090f35b50346101fd5760203660031901126101fd576103a461248f565b6103ac612eca565b6001600160a01b039081169081156103fb57601554826001600160601b0360a01b821617601555167f52882fe9c8937a186eb2653e68b33629cf58f0c3e09b567f0d1db958d3a6c3f08380a380f35b604051636a37fde960e01b8152600490fd5b50346101fd5760203660031901126101fd57604061012091600435815260086020522060018060a01b0361ffff81835416926001810154926002820154600383015460048401549060058501549284600760068801549701541697604051998a5260208a015260408901526060880152608087015260a0860152811660c085015260a01c1660e0830152610100820152f35b50346101fd5760203660031901126101fd576004356104bc612eca565b80156104fc5760407f58cbaf584e7dc4a790bcc97be2ee87283a145d0f33674b17c6644ba2c3fd8e5391601454908060145582519182526020820152a180f35b6040516334d257cd60e01b8152600490fd5b50346101fd5760203660031901126101fd5760206105496001600160a01b0361053561248f565b166000526013602052604060002054151590565b6040519015158152f35b50346101fd5760403660031901126101fd5761056d61248f565b6001600160a01b03168152600c60205260408120805460243592908310156101fd57602061031a84846124f2565b50346101fd576105aa366124a5565b906105b3612f22565b6402540be4008210156107d157428211156107d157825260086020526040822060068101546001600160a01b0390811633036107bf576004820183815410156107ad57600783018054831661079c5761060e838554166126a2565b6002840192835491876106316103e8610629600e54876125a0565b04809561257d565b825490929084161561075057548316803b1561074c57818091602460405180948193632e1a7d4d60e01b83528a60048401525af1801561074157610721575b5050907f139b970a1cf074dc6188d72d876cfd4d4992ae83931cf20dfdd59bb3b3dc0f9196610716949392828854168a52600760205260408a206106b585825461257d565b90555b865583556106cf8282885416836015541690612f76565b600586015495549454925460408051978852919095166001600160a01b0316602087015233908601526060850191909152608084015260a0830191909152819060c0820190565b0390a1600160025580f35b61072f909594939295612519565b61073d579091928738610670565b8780fd5b6040513d84823e3d90fd5b5080fd5b5050907f139b970a1cf074dc6188d72d876cfd4d4992ae83931cf20dfdd59bb3b3dc0f9196610716949392828854168a52600660205260408a2061079585825461257d565b90556106b8565b6107a883855416612a89565b61060e565b60405163a1431f3f60e01b8152600490fd5b6040516330cd747160e01b8152600490fd5b60405163b7d0949760e01b8152600490fd5b50346101fd5760403660031901126101fd576107fd61248f565b61080561250a565b9061080e612eca565b6001600160a01b03169081156108ac5780156108755761082d826134a0565b156108635760207f1edda118cbc893a00b312565b4e15205c24b89f3e2fe94825eeebb435318ed1c915b6040519015158152a280f35b60405163a28a88c160e01b8152600490fd5b61087e826134ed565b156108635760207f1edda118cbc893a00b312565b4e15205c24b89f3e2fe94825eeebb435318ed1c91610857565b604051630702b3d960e41b8152600490fd5b50346101fd57806003193601126101fd57600d54600e54600f54601054601154604080519586526020860194909452928401919091526060830152608082015260a090f35b50346101fd5760403660031901126101fd5760043561092061250a565b90610929612f22565b80835260209160088352604084209260018060a01b038060068601541633036107bf576002850194855415610d38576007810182815416158515159586821514610d265715610be8575082825416968789526005855260408920546014541115610bd65760405163b9a09fd560e01b81526004810189905285816024817f000000000000000000000000000000000000000000000000000000000000000089165afa908115610b8c578a91610ba9575b50848116988915610b9757610a2c916109f288926126a2565b8554845460405163095ea7b360e01b81526001600160a01b03909316600484015260248301529092839188169082908e9082906044820190565b03925af18015610b8c57610b5f575b50888154893b1561074c57604051636e553f6560e01b815260048101919091523060248201528181604481838e5af1801561074157610b39575b5050907f5be6b91118bbcf1d70f34cbd25f99e4e59ea6771bff40bca2b1de95e72fa47389782608098979695949354858554168c5260068752610abd60408d2091825461257d565b905554848454168b5260078652610ad960408c209182546125f2565b9055838354168a5260048552610af28760408c20612d7e565b838354168a5260058552610b098760408c206125ff565b81546001600160a01b0319161790555b5416906040519384528301523360408301526060820152a1600160025580f35b610b4a909897969594939298612519565b610b5b579091929394958838610a75565b8880fd5b610b7e90863d8811610b85575b610b768183612543565b810190612565565b5038610a3b565b503d610b6c565b6040513d8c823e3d90fd5b60405163e991b9d160e01b8152600490fd5b610bc99150863d8811610bcf575b610bc18183612543565b8101906125d3565b386109d9565b503d610bb7565b6040516366a0fc0760e11b8152600490fd5b8383989298541690818a526004865260408a20546014541115610bd657610d1457610c1290612a89565b87838854168254813b15610d10578291602483926040519485938492632e1a7d4d60e01b845260048401525af1801561074157610cf0575b5050907f5be6b91118bbcf1d70f34cbd25f99e4e59ea6771bff40bca2b1de95e72fa473896826080979695949354848454168b5260078652610c9160408c2091825461257d565b905554838354168a5260068552610cad60408b209182546125f2565b905582825416895260058452610cc68660408b20612d7e565b82825416895260048452610cdd8660408b206125ff565b80546001600160a01b0319169055610b19565b610d009097969594939297612519565b61073d5790919293948738610c4a565b8280fd5b604051637214e55760e01b8152600490fd5b6040516301b3420560e11b8152600490fd5b60405163651c21d560e11b8152600490fd5b50346101fd57806003193601126101fd57546040516001600160a01b039091168152602090f35b50346101fd5760203660031901126101fd57600435601254811015610dcd5760126000527fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec344401546040516001600160a01b039091168152602090f35b634e487b7160e01b600052603260045260246000fd5b50346101fd57806003193601126101fd576003546040516001600160a01b039091168152602090f35b50346101fd5760603660031901126101fd57604435600435602435610e2f612f22565b6016546001600160a01b03939084161561103d57811561102b5782855260209060088252604086209260068401958087541633036107bf578781600787018181541615600014610fb75750610e8791508654166126a2565b8085541688526006845260408820610ea083825461257d565b90555b6002850194610eb383875461257d565b8655610ec88383835416846016541690613019565b8482601654169860c4848454168c61ffff6004870154945460a01c169c6040519d8e958694633ab05fad60e21b865260048601528a6024860152604485015233606485015260848401528960a48401525af1948515610fac577fd1c5393354113225db8a862cfa2e892ca5497c135d41d49c0c88222af90fc3a69861071696610f8e575b505054169354604051958695339187929160a094919796959260c08501988552600180871b038092166020860152166040840152606083015260808201520152565b81610fa492903d10610b8557610b768183612543565b503880610f4c565b6040513d8b823e3d90fd5b610fc382895416612a89565b5416803b1561074c57818091602460405180948193632e1a7d4d60e01b83528960048401525af1801561074157611017575b5050808554168852600784526040882061101083825461257d565b9055610ea3565b61102090612519565b61073d578738610ff5565b604051631dc1326f60e21b8152600490fd5b604051632ed9bf5360e21b8152600490fd5b50346101fd57806003193601126101fd576016546040516001600160a01b039091168152602090f35b50346101fd57806003193601126101fd576001546001600160a01b0333818316036110e5576001600160601b0360a01b8092166001556000549133908316176000553391167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a380f35b60405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608490fd5b50346101fd57806003193601126101fd576020600a54604051908152f35b50346101fd57806003193601126101fd57611173612eca565b600180546001600160a01b0319908116909155600080549182168155906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b5060e03660031901126101fd576111d561248f565b6064356001600160a01b0381169003611870576084356001600160a01b03811681036118705760a4359161ffff831683036118755760c435151560c435036118705761121f612f22565b6402540be40060443510156107d1574260443511156107d1576024351561185e57601754604051635cb49b5560e01b815261ffff8516600482015290602090829060249082906001600160a01b03165afa90811561182257859161183f575b501561182d57600354604051635b16ebb760e01b81526001600160a01b038381166004830152909160209183916024918391165afa908115611822578591611803575b50156117f2576112de60243530336001600160a01b038516612fc0565b6112f5336000526013602052604060002054151590565b6117da57600d546064356001600160a01b03161515806117a2575b813403611790578161133f92918115159081611788575b5061175b575b506015546001600160a01b031661326d565b61137b6103e8611353600e546024356125a0565b601554919004906113739082906001600160a01b03908116908616612f76565b60243561257d565b60c435156117545760405163b9a09fd560e01b81526001600160a01b038381166004830152602090829060249082907f0000000000000000000000000000000000000000000000000000000000000000165afa90811561174957869161172a575b50935b60c43580611719575b610b975760c4351561168f576001600160a01b0383168652600560205260408620546014541115610bd65761141c83612a89565b61143082866001600160a01b038616613019565b856001600160a01b038616803b1561074c57604051636e553f6560e01b8152600481018590523060248201529082908290604490829084905af180156107415761166f575b5050906000805160206135d88339815191529460e094939260018060a01b03841688526007602052604088206114ac8482546125f2565b90556001600160a01b03841688526005602052604088206009546114cf916125ff565b6114d761263c565b9260018060a01b03851684524260208501528060408501526060840152604435608084015261ffff600954918260a086015260018060a01b03871660c0860152168684015261010083019160018060a01b031682528752600860205260408720600760018060a01b03845116916001600160601b0360a01b92838254161781556020850151600182015560408501516002820155606085015160038201556080850151600482015560a085015160058201556006810160018060a01b0360c08701511681549061ffff60a01b8b89015160a01b169169ffffffffffffffffffff60b01b1617179055019160018060a01b03905116908254161790556115e360018060a01b03831661341c565b506001600160a01b0382168652600c60205260408620600954611605916125ff565b611610600954612693565b60095560a081015192604082015160208301519161ffff876080860151950151169460405196875260018060a01b0316602087015260018060a01b031660408601526060850152608084015260a083015260c0820152a1600160025580f35b61167d909594939295612519565b61168b579091928538611475565b8580fd5b6001600160a01b03831686526004602052604086205460145491949392911115610bd6576000805160206135d88339815191529460e0946116cf846126a2565b6001600160a01b038416885260066020526040882080546116f19085906125f2565b90556001600160a01b0384168852600460205260408820600954611714916125ff565b6114cf565b506001600160a01b038516156113e8565b611743915060203d602011610bcf57610bc18183612543565b386113dc565b6040513d88823e3d90fd5b84936113df565b61178291506103e861176f600f54836125a0565b049061177d8260643561326d565b61257d565b3861132d565b905038611327565b604051631c13bfd560e01b8152600490fd5b90601054906103e8918203908282116117c657906117bf916125a0565b0490611310565b634e487b7160e01b88526011600452602488fd5b341561133f5760405163f894114360e01b8152600490fd5b60405162820f3560e61b8152600490fd5b61181c915060203d602011610b8557610b768183612543565b386112c1565b6040513d87823e3d90fd5b6040516304e7559960e21b8152600490fd5b611858915060203d602011610b8557610b768183612543565b3861127e565b604051632ca2f52b60e11b8152600490fd5b600080fd5b8380fd5b50611883366124a5565b9061188c612f22565b811561185e57825260086020526040822060068101549091906001600160a01b031633036107bf5780600283015410611bd457600d54803403611790576015546118df91906001600160a01b031661326d565b60078201546001600160a01b0316611b4d5781546001600160a01b0316808452600460205260408420546014549193911115610bd6577f697dcda8f78b880b1cb951baa5cc946598b5d42acd259da9f4c6020d771cf1e860e0926119516000805160206135d8833981519152956126a2565b82546001600160a01b03168652600460205260408620600954611973916125ff565b61198181600285015461257d565b600284015561198e61263c565b92611a0260018060a01b038254168086526001830154602087015283604087015283606087015260048301546080870152600954908160a08801523360c088015261ffff600685015460a01c168888015260018060a01b036007850154166101008801528952600c602052604089206125ff565b600980548852600860209081526040808a20875181546001600160a01b03199081166001600160a01b03928316178355938901516001830155918801516002820155606088015160038201556080880151600482015560a088810151600583015560c08901516006830180548c8c01516001600160b01b0319909116928616929092179190921b61ffff60a01b1617905561010088015160079091018054909316911617905554611ab290612693565b60095560058101548154600290920154604080519283526001600160a01b03909316602083015233928201929092526060810191909152608081019190915260a090a160a08101519060018060a01b0381511690604081015160208201519061ffff866080850151940151169360405195865260208601523360408601526060850152608084015260a083015260c0820152a1600160025580f35b81546001600160a01b0316808452600560205260408420546014549193911115610bd6577f697dcda8f78b880b1cb951baa5cc946598b5d42acd259da9f4c6020d771cf1e860e092611bad6000805160206135d883398151915295612a89565b82546001600160a01b03168652600560205260408620600954611bcf916125ff565b611973565b604051631e9acf1760e31b8152600490fd5b50346101fd5760203660031901126101fd576020611c05600435612e39565b604051908152f35b50346101fd5760403660031901126101fd576024356001600160a01b03818116916004359083900361187057611c41612f22565b823314611ce8578084526008602052604084209260068401923381855416036107bf57846080948260077f4e602365e8ca79d90aa843bdcc20695568e4a35d5ff284b2f9a6e4c1ff9120529801541615600014611cd757611ca4838354166126a2565b836001600160601b0360a01b825416179055541660405192835260208301523360408301526060820152a1600160025580f35b611ce383835416612a89565b611ca4565b604051630a98f1f360e21b8152600490fd5b50346101fd5760203660031901126101fd576020906040906001600160a01b03611d2261248f565b168152600783522054604051908152f35b50346101fd57806003193601126101fd576020601254604051908152f35b50346101fd57806003193601126101fd576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b50346101fd57611da5366124a5565b90611dae612f22565b8115611fab5780835260086020526040832060068101546001600160a01b039391929190841633036107bf57600483015442106107ad57600283019181835410611bd457600784018054879190871615611f22578690611e1082885416612a89565b5416803b1561074c57818091602460405180948193632e1a7d4d60e01b83528960048401525af1801561074157611f0a575b50509084610716927f4ad1282d02c0d7aa981ce2f5b4e42e99e212f6a24d11616393c32a87226e160c968654168852600760205260408820611e8584825461257d565b9055611e9283865461257d565b80865515611eec575b505b611eab823383885416612f76565b6005850154945416925460405194859433918691608093969594919660a0840197845260018060a01b03809216602085015216604083015260608201520152565b611f0490828754168952600560205260408920612d7e565b38611e9b565b611f1690939293612519565b61168b57908538611e42565b5050908461071692611f577f4ad1282d02c0d7aa981ce2f5b4e42e99e212f6a24d11616393c32a87226e160c978754166126a2565b818654168852600660205260408820611f7184825461257d565b9055611f7e83865461257d565b80865515611f8d575b50611e9d565b611fa590828754168952600460205260408920612d7e565b38611f87565b604051630318014360e61b8152600490fd5b50346101fd5760403660031901126101fd57611fd761248f565b6001600160a01b03168152600560205260408120805460243592908310156101fd57602061031a84846124f2565b50346101fd57612014366124a5565b9061201d612f22565b811561185e5782526008602052604082209060028201918254156122225780546001600160a01b039390612058908490309033908816612fc0565b6120806103e861206a600e54866125a0565b04809461177d8288875416896015541690612f76565b6007830180549193918616156121cc57859061209e82845416612a89565b6120b085838554168484541690613019565b5416803b156121c857604051636e553f6560e01b8152600481018590523060248201529087908290604490829084905af180156121bd5761217f575b509160e0939183867f290ddee191319eda9ea34e6de4555381e35469d74d73fe0e80fe7f0836620ea097955416885260076020526040882061212f8482546125f2565b90555b61213d8383546125f2565b809255600581015494600681835416920154169060405195865260208601526040850152336060850152608084015260a083015260c0820152a1600160025580f35b917f290ddee191319eda9ea34e6de4555381e35469d74d73fe0e80fe7f0836620ea0959391966121b160e09694612519565b969193955091936120ec565b6040513d89823e3d90fd5b8680fd5b509160e0939183612201877f290ddee191319eda9ea34e6de4555381e35469d74d73fe0e80fe7f0836620ea0989654166126a2565b84815416885260066020526040882061221b8482546125f2565b9055612132565b60405163c82da02f60e01b8152600490fd5b50346101fd5760203660031901126101fd576004356001600160a01b0381811691829003610d1057612264612eca565b601654826001600160601b0360a01b821617601655167f17356f011fa307735bd27bcbcd4ee385789d5155c6e44c093a1936e387f62ae58380a380f35b50346101fd5760203660031901126101fd576020906040906001600160a01b036122c961248f565b168152600c83522054604051908152f35b50346101fd5760203660031901126101fd576122f4612f22565b600435815260086020526040812080546007909101546001600160a01b03918216911661232c57612324906126a2565b600160025580f35b61233590612a89565b612324565b50346101fd5760203660031901126101fd57600435600a5481101561239657600a9091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a801546040516001600160a01b039091168152602090f35b634e487b7160e01b82526032600452602482fd5b50346101fd5760a03660031901126101fd576064356024356004356044356084356123d3612eca565b6103e8808411908115612485575b811561247b575b8115612471575b5061245f577f96b67df2c4648b38ada47da86f80d0a256df93150752a7b365ca487cab934e64946124599284600f558560105580600d5581600e5582601155604051958695869192608093969594919660a084019784526020840152604083015260608201520152565b0390a180f35b604051635c974e3d60e11b8152600490fd5b90508111386123ef565b80871191506123e8565b80861191506123e1565b600435906001600160a01b038216820361187057565b6040906003190112611870576004359060243590565b601254811015610dcd5760126000527fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec34440190600090565b8054821015610dcd5760005260206000200190600090565b60243590811515820361187057565b67ffffffffffffffff811161252d57604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff82111761252d57604052565b90816020910312611870575180151581036118705790565b9190820391821161258a57565b634e487b7160e01b600052601160045260246000fd5b8181029291811591840414171561258a57565b81156125bd570490565b634e487b7160e01b600052601260045260246000fd5b9081602091031261187057516001600160a01b03811681036118705790565b9190820180921161258a57565b805490600160401b82101561252d5781612621916001612638940181556124f2565b819391549060031b91821b91600019901b19161790565b9055565b60405190610120820182811067ffffffffffffffff82111761252d57604052816101006000918281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e08201520152565b600019811461258a5760010190565b9060018060a01b038216600052600660205260406000205415612a85576040805163d294f09360e01b815292908360048160006001600160a01b0386165af192831561290b57600090600094612a4b575b50801580612a43575b612a3d57601154936103e861271d8161271588866125a0565b0496836125a0565b04856129ef575b80612981575b6001600160a01b0384166000908152600460205260408120905b81548110156129775761275781836124f2565b90549060031b1c908160005260086020526040600020600281015490811561296b5781670de0b6b3a7640000810204670de0b6b3a76400000361258a578a670de0b6b3a76400006127e7816127db8c6127d68f986127ce9060018060a01b038b1660005260066020528560406000205491026125b3565b96879261257d565b6125a0565b04926127d68a8c61257d565b049181612917575b8261285f575b60060154604080519687526001600160a01b0394851660208801529316928501929092526060840191909152608083015261285a917f9e2860805952954b900ef918bf4432157b61059e1a3ee7dc754a373c562903fe908060a081015b0390a1612693565b612744565b60405163d21220a760e01b815291959093909190602090829060049082906001600160a01b03165afa92831561290b5761285a967f9e2860805952954b900ef918bf4432157b61059e1a3ee7dc754a373c562903fe956128df838f97612852966000916128ec575b5060068401546001600160a01b039081169116612f76565b92509296509293506127f5565b612905915060203d602011610bcf57610bc18183612543565b386128c7565b6040513d6000823e3d90fd5b604051630dfe168160e01b815293602090859060049082906001600160a01b03165afa801561290b5782612966918d966000916128ec575060068401546001600160a01b039081169116612f76565b6127ef565b505061285a9150612693565b5050505050509050565b60405163d21220a760e01b81526020816004816001600160a01b0389165afa90811561290b576129cb9183916000916129d0575b506015546001600160a01b039081169116612f76565b61272a565b6129e9915060203d602011610bcf57610bc18183612543565b386129b5565b604051630dfe168160e01b81526020816004816001600160a01b0389165afa90811561290b57612a389188916000916129d057506015546001600160a01b039081169116612f76565b612724565b50509050565b5083156126fc565b9350506040833d604011612a7d575b81612a6760409383612543565b81010312611870576020835193015192386126f3565b3d9150612a5a565b9050565b9060009160018060a01b038116835260079081602052604084205415612a3d5760405163b9a09fd560e01b81526001600160a01b038281166004830152602090829060249082907f0000000000000000000000000000000000000000000000000000000000000000165afa908115611822578591612d5f575b506001600160a01b0316908115612d585760405163f7c618c160e01b815291602083600481845afa928315611749578693612d37575b506001600160a01b03831615612ce8578086913b1561074c578190602460405180948193630c00007b60e41b83523060048401525af1801561174957612d24575b506040516370a0823160e01b8152306004820152906020826024816001600160a01b0387165afa918215611749578692612cf0575b508115612ce857612bcf6103e8612bc7601154856125a0565b04809361257d565b9180612cc7575b506001600160a01b0381168652600560205260408620865b815481101561297757612c0181836124f2565b90549060031b1c885260086020526040882060028101548015612cbc5780670de0b6b3a7640000810204670de0b6b3a764000003612ca85790670de0b6b3a7640000612c70612c6a612c7e95948360408f8e60018060a01b038d168252602052205491026125b3565b886125a0565b0480612c83575b5050612693565b612bee565b600690910154612ca191906001600160a01b03908116908916612f76565b3880612c77565b634e487b7160e01b8a52601160045260248afd5b5050612c7e90612693565b601554612ce291906001600160a01b03908116908616612f76565b38612bd6565b505050509050565b9091506020813d602011612d1c575b81612d0c60209383612543565b8101031261187057519038612bae565b3d9150612cff565b612d3090959195612519565b9338612b79565b612d5191935060203d602011610bcf57610bc18183612543565b9138612b38565b5050509050565b612d78915060203d602011610bcf57610bc18183612543565b38612b02565b60005b81549081811015612e33578391612d9882856124f2565b959054600396871b1c14612dbb5750612db391929350612693565b919091612d81565b600019925082810190811161258a57808203612e0d575b505081548015612df757810192612de984846124f2565b81939154921b1b1916905555565b634e487b7160e01b600052603160045260246000fd5b612621612e1d612e2a92866124f2565b905490871b1c92856124f2565b90553880612dd2565b50505050565b6000908152600860205260408120600701546001600160a01b03168015612ec6576020602491604051928380926370a0823160e01b82523060048301525afa918215612eba578092612e8a57505090565b9091506020823d8211612eb2575b81612ea560209383612543565b810103126101fd57505190565b3d9150612e98565b604051903d90823e3d90fd5b5090565b6000546001600160a01b03163303612ede57565b606460405162461bcd60e51b815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b6002805414612f315760028055565b60405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606490fd5b60405163a9059cbb60e01b60208201526001600160a01b0390921660248301526044820192909252612fbe91612fb982606481015b03601f198101845283612543565b613141565b565b6040516323b872dd60e01b60208201526001600160a01b03928316602482015292909116604483015260648083019390935291815260a081019181831067ffffffffffffffff84111761252d57612fbe92604052613141565b919091811580156130c8575b156130645760405163095ea7b360e01b60208201526001600160a01b0390931660248401526044830191909152612fbe9190612fb98260648101612fab565b60405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b6064820152608490fd5b50604051636eb1769f60e11b81523060048201526001600160a01b0384811660248301526020908290604490829086165afa90811561290b57600091613110575b5015613025565b906020823d8211613139575b8161312960209383612543565b810103126101fd57505138613109565b3d915061311c565b60408051908101916001600160a01b031667ffffffffffffffff83118284101761252d576131b1926040526000806020958685527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656487860152868151910182855af16131ab61322d565b91613348565b805190816131be57505050565b82806131ce938301019101612565565b156131d65750565b6084906040519062461bcd60e51b82526004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152fd5b3d15613268573d9067ffffffffffffffff821161252d576040519161325c601f8201601f191660200184612543565b82523d6000602084013e565b606090565b814710613303576000918291829182916001600160a01b03165af161329061322d565b501561329857565b60405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608490fd5b60405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606490fd5b919290156133aa575081511561335c575090565b3b156133655790565b60405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606490fd5b8251909150156133bd5750805190602001fd5b6040519062461bcd60e51b82528160208060048301528251908160248401526000935b828510613403575050604492506000838284010152601f80199101168101030190fd5b84810182015186860160440152938101938593506133e0565b6000818152600b602052604081205461349b57600a54600160401b811015613487576001810180600a558110156123965790826040927fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80155600a54928152600b6020522055600190565b634e487b7160e01b82526041600452602482fd5b905090565b60008181526013602052604081205461349b57601254600160401b8110156134875790826134d9612621846001604096016012556124bb565b905560125492815260136020522055600190565b60008181526013602052604081205490919080156135d257600019908082018181116135be57601254908382019182116135aa57808203613576575b505050601254801561356257810190613541826124bb565b909182549160031b1b19169055601255815260136020526040812055600190565b634e487b7160e01b84526031600452602484fd5b613594613585612621936124bb565b90549060031b1c9283926124bb565b9055845260136020526040842055388080613529565b634e487b7160e01b86526011600452602486fd5b634e487b7160e01b85526011600452602485fd5b50509056fe3e5a874dd8f086c73bba5a860cb04972e50b6207f84cc020037d576afa6ebc13a2646970667358221220e8727163ec828b5d3f8d404ebca6015421912f4c1f0c60c1af5cee33edbda41164736f6c63430008130033000000000000000000000000420dd381b31aef6683db6b902084cb0ffece40da000000000000000000000000369901c2a354a1b4a3223de81a4ddb365398c011000000000000000000000000e6a41fe61e7a1996b59d508661e3f524d6a3207500000000000000000000000016613524e02ad97edfef371bc883f2f5d6c480a5