0 txs
53.6k calls
constructor
constructor(address ORDER_MANAGER_SINGLETON_)
functions
accretingPrincipal
viewfunction accretingPrincipal() view returns (uint256)
allowance
viewfunction allowance(address owner, address spender) view returns (uint256)
annualizedInterest
viewfunction annualizedInterest() view returns (uint256)
apr
viewfunction apr() view returns (uint256)
apy
viewfunction apy() view returns (uint256)
asset
viewfunction asset() view returns (address)
badDebtMapping
viewfunction badDebtMapping(address collateral) view returns (uint256)
balanceOf
viewfunction balanceOf(address account) view returns (uint256)
convertToAssets
viewfunction convertToAssets(uint256 shares) view returns (uint256)
convertToShares
viewfunction convertToShares(uint256 assets) view returns (uint256)
curator
viewfunction curator() view returns (address)
decimals
viewfunction decimals() view returns (uint8)
getVersion
purefunction getVersion() pure returns (string)
guardian
viewfunction guardian() view returns (address)
marketWhitelist
viewfunction marketWhitelist(address market) view returns (bool)
maxDeposit
viewfunction maxDeposit(address) view returns (uint256)
maxMint
viewfunction maxMint(address) view returns (uint256)
maxRedeem
viewfunction maxRedeem(address owner) view returns (uint256)
maxWithdraw
viewfunction maxWithdraw(address owner) view returns (uint256)
minApy
viewfunction minApy() view returns (uint64)
name
viewfunction name() view returns (string)
ORDER_MANAGER_SINGLETON
viewfunction ORDER_MANAGER_SINGLETON() view returns (address)
orderMaturity
viewfunction orderMaturity(address order) view returns (uint256)
owner
viewfunction owner() view returns (address)
paused
viewfunction paused() view returns (bool)
pendingGuardian
viewfunction pendingGuardian() view returns (tuple)
pendingMarkets
viewfunction pendingMarkets(address market) view returns (tuple)
pendingMinApy
viewfunction pendingMinApy() view returns (tuple)
pendingOwner
viewfunction pendingOwner() view returns (address)
pendingPerformanceFeeRate
viewfunction pendingPerformanceFeeRate() view returns (tuple)
pendingPool
viewfunction pendingPool() view returns (tuple)
pendingPools
viewfunction pendingPools() view returns (tuple)
pendingTimelock
viewfunction pendingTimelock() view returns (tuple)
performanceFee
viewfunction performanceFee() view returns (uint256)
performanceFeeRate
viewfunction performanceFeeRate() view returns (uint64)
pool
viewfunction pool() view returns (address)
previewDeposit
viewfunction previewDeposit(uint256 assets) view returns (uint256)
previewMint
viewfunction previewMint(uint256 shares) view returns (uint256)
previewRedeem
viewfunction previewRedeem(uint256 shares) view returns (uint256)
previewWithdraw
viewfunction previewWithdraw(uint256 assets) view returns (uint256)
supplyQueue
viewfunction supplyQueue(uint256) view returns (address)
supplyQueueLength
viewfunction supplyQueueLength() view returns (uint256)
symbol
viewfunction symbol() view returns (string)
timelock
viewfunction timelock() view returns (uint256)
totalAssets
viewfunction totalAssets() view returns (uint256)
totalFt
viewfunction totalFt() view returns (uint256)
totalSupply
viewfunction totalSupply() view returns (uint256)
withdrawQueue
viewfunction withdrawQueue(uint256) view returns (address)
withdrawQueueLength
viewfunction withdrawQueueLength() view returns (uint256)
acceptGuardian
nonpayablefunction acceptGuardian()
acceptMarket
nonpayablefunction acceptMarket(address market)
acceptOwnership
nonpayablefunction acceptOwnership()
acceptPendingMinApy
nonpayablefunction acceptPendingMinApy()
acceptPerformanceFeeRate
nonpayablefunction acceptPerformanceFeeRate()
acceptPool
nonpayablefunction acceptPool()
acceptTimelock
nonpayablefunction acceptTimelock()
afterSwap
nonpayablefunction afterSwap(uint256 ftReserve, uint256 xtReserve, int256 deltaFt, int256 deltaXt)
approve
nonpayablefunction approve(address spender, uint256 value) returns (bool)
createOrder
nonpayablefunction createOrder(address market, tuple params) returns (address order)
dealBadDebt
nonpayablefunction dealBadDebt(address collateral, uint256 badDebtAmt, address recipient, address owner) returns (uint256 shares, uint256 collateralOut)
deposit
nonpayablefunction deposit(uint256 assets, address receiver) returns (uint256)
initialize
nonpayablefunction initialize(tuple params)
initialize
nonpayablefunction initialize(tuple)
mint
nonpayablefunction mint(uint256 shares, address receiver) returns (uint256)
pause
nonpayablefunction pause()
redeem
nonpayablefunction redeem(uint256 shares, address receiver, address owner) returns (uint256)
redeemOrder
nonpayablefunction redeemOrder(address order) returns (uint256 badDebt, uint256 deliveryCollateral)
removeLiquidityFromOrders
nonpayablefunction removeLiquidityFromOrders(address[] orders, uint256[] removedLiquidities)
renounceOwnership
nonpayablefunction renounceOwnership()
revokePendingGuardian
nonpayablefunction revokePendingGuardian()
revokePendingMarket
nonpayablefunction revokePendingMarket(address market)
revokePendingMinApy
nonpayablefunction revokePendingMinApy()
revokePendingPerformanceFeeRate
nonpayablefunction revokePendingPerformanceFeeRate()
revokePendingPool
nonpayablefunction revokePendingPool()
revokePendingTimelock
nonpayablefunction revokePendingTimelock()
setCapacity
nonpayablefunction setCapacity(uint256 newCapacity)
setCurator
nonpayablefunction setCurator(address newCurator)
submitGuardian
nonpayablefunction submitGuardian(address newGuardian)
submitMarket
nonpayablefunction submitMarket(address market, bool isWhitelisted)
submitPendingMinApy
nonpayablefunction submitPendingMinApy(uint64 newMinApy)
submitPendingPool
nonpayablefunction submitPendingPool(address pool_)
submitPerformanceFeeRate
nonpayablefunction submitPerformanceFeeRate(uint184 newPerformanceFeeRate)
submitTimelock
nonpayablefunction submitTimelock(uint256 newTimelock)
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)
unpause
nonpayablefunction unpause()
updateOrdersConfiguration
nonpayablefunction updateOrdersConfiguration(address[] orders, tuple[] orderConfigs)
withdraw
nonpayablefunction withdraw(uint256 assets, address receiver, address owner) returns (uint256)
withdrawFts
nonpayablefunction withdrawFts(address order, uint256 amount, address recipient, address owner) returns (uint256 shares)
withdrawPerformanceFee
nonpayablefunction withdrawPerformanceFee(address recipient, uint256 amount)
events
Approval
event Approval(address indexed owner, address indexed spender, uint256 value)
DealBadDebt
event DealBadDebt(address indexed caller, address indexed recipient, address indexed collateral, uint256 badDebt, uint256 shares, uint256 collateralOut)
Deposit
event Deposit(address indexed sender, address indexed owner, uint256 assets, uint256 shares)
Initialized
event Initialized(uint64 version)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
OwnershipTransferStarted
event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner)
Paused
event Paused(address account)
RevokePendingGuardian
event RevokePendingGuardian(address indexed caller)
RevokePendingMarket
event RevokePendingMarket(address indexed caller, address indexed market)
RevokePendingMinApy
event RevokePendingMinApy(address indexed caller)
RevokePendingPerformanceFeeRate
event RevokePendingPerformanceFeeRate(address indexed caller)
RevokePendingPool
event RevokePendingPool(address indexed caller)
RevokePendingTimelock
event RevokePendingTimelock(address indexed caller)
SetCapacity
event SetCapacity(address indexed caller, uint256 newCapacity)
SetCurator
event SetCurator(address newCurator)
SetGuardian
event SetGuardian(address indexed caller, address newGuardian)
SetMarketWhitelist
event SetMarketWhitelist(address indexed caller, address indexed market, bool isWhitelisted)
SetMinApy
event SetMinApy(address indexed caller, uint64 newMinApy)
SetPerformanceFeeRate
event SetPerformanceFeeRate(address indexed caller, uint256 newPerformanceFeeRate)
SetPool
event SetPool(address indexed caller, address indexed pool)
SetTimelock
event SetTimelock(address indexed caller, uint256 newTimelock)
SubmitGuardian
event SubmitGuardian(address newGuardian, uint64 validAt)
SubmitMarketToWhitelist
event SubmitMarketToWhitelist(address indexed market, uint64 validAt)
SubmitMinApy
event SubmitMinApy(uint64 newMinApy, uint64 validAt)
SubmitPendingPool
event SubmitPendingPool(address indexed pool, uint64 validAt)
SubmitPerformanceFeeRate
event SubmitPerformanceFeeRate(uint256 newPerformanceFeeRate, uint64 validAt)
SubmitTimelock
event SubmitTimelock(uint256 newTimelock, uint64 validAt)
Transfer
event Transfer(address indexed from, address indexed to, uint256 value)
Unpaused
event Unpaused(address account)
Withdraw
event Withdraw(address indexed sender, address indexed receiver, address indexed owner, uint256 assets, uint256 shares)
WithdrawFts
event WithdrawFts(address indexed caller, address indexed recipient, address indexed order, uint256 amount, uint256 shares)
errors
AboveMaxTimelock
error AboveMaxTimelock()
AlreadyPending
error AlreadyPending()
AlreadySet
error AlreadySet()
BelowMinTimelock
error BelowMinTimelock()
CanNotTransferUintMax
error CanNotTransferUintMax()
CollateralIsAsset
error CollateralIsAsset()
EnforcedPause
error EnforcedPause()
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)
ERC4626ExceededMaxDeposit
error ERC4626ExceededMaxDeposit(address receiver, uint256 assets, uint256 max)
ERC4626ExceededMaxMint
error ERC4626ExceededMaxMint(address receiver, uint256 shares, uint256 max)
ERC4626ExceededMaxRedeem
error ERC4626ExceededMaxRedeem(address owner, uint256 shares, uint256 max)
ERC4626ExceededMaxWithdraw
error ERC4626ExceededMaxWithdraw(address owner, uint256 assets, uint256 max)
ExpectedPause
error ExpectedPause()
InvalidActionId
error InvalidActionId()
InvalidInitialization
error InvalidInitialization()
NoPendingValue
error NoPendingValue()
NotCuratorRole
error NotCuratorRole()
NotGuardianRole
error NotGuardianRole()
NotInitializing
error NotInitializing()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
PerformanceFeeRateExceeded
error PerformanceFeeRateExceeded()
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
ReentrantCall
error ReentrantCall()
ReentrantCallBetweenActions
error ReentrantCallBetweenActions(uint256 actionId, uint256 oldActionId)
SafeCastOverflowedUintDowncast
error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value)
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
SupplyQueueNoLongerSupported
error SupplyQueueNoLongerSupported()
TimelockNotElapsed
error TimelockNotElapsed()
UseApyInsteadOfApr
error UseApyInsteadOfApr()
UseVaultInitialParamsV2
error UseVaultInitialParamsV2()
WithdrawalQueueNoLongerSupported
error WithdrawalQueueNoLongerSupported()
creation bytecode
0x60a03461010957601f6152d938819003918201601f19168301916001600160401b0383118484101761010d5780849260209460405283398101031261010957516001600160a01b0381168103610109576080525f5160206152b95f395f51905f525460ff8160401c166100fa576002600160401b03196001600160401b038216016100a4575b60405161519790816101228239608051818181610b8f0152613e6e0152f35b6001600160401b0319166001600160401b039081175f5160206152b95f395f51905f52556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f610085565b63f92ee8a960e01b5f5260045ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe60806040526004361015610011575f80fd5b5f3560e01c806301e1d114146105b057806306fdde03146105ab57806307a2d13a1461052e578063095ea7b3146105a65780630a28a477146105a15780630d8e6e2c1461059c5780630edc3c64146105975780630f4f0c32146105925780630ffbfda41461058d5780631124f92c14610588578063163c8c771461058357806316f0115b1461057e57806318160ddd146105795780631908a2ee146105745780631ecca77c1461056f57806323b872dd1461056a57806324524a9614610565578063313ce5671461056057806333f91ebb1461055b57806338d52e0f146105565780633bcfc4b8146105515780633f38db411461054c5780633f4ba83a14610547578063402d267d14610542578063451422311461053d578063452a932014610538578063460bf7e1146105335780634cdad5061461052e57806357ded9c914610529578063594d16f7146105245780635c975abb1461051f578063618f96941461051a57806362518ddf1461051557806363f043831461051057806369c421251461050b5780636e553f651461050657806370a0823114610439578063715018a6146105015780637207fbb4146104fc5780637224a512146104f7578063762c31ba146104f257806377e1731b146104ed57806379ba5097146104e85780637cc4d9a1146104e357806380a58a5e146104de5780638456cb59146104d957806386c058ed146104d457806387788782146104cf57806389716a25146104ca5780638a2c7b39146104c55780638da5cb5b146104c057806391915ef8146104bb57806393bd007b146104b657806394bf804d146104b157806394e854f2146104ac57806395d89b41146104a7578063988a64c4146104a25780639a1109731461049d5780639d6b4a45146104985780639d8b21e914610493578063a17b31301461048e578063a5f31d6114610489578063a7ebda9714610484578063a9059cbb1461047f578063a9133f5e1461047a578063ac33207f14610475578063af9840e51461044d578063b0a4709d14610470578063b3d7f6b91461046b578063b460af9414610466578063ba08765214610461578063c63d75b61461045c578063c6e6f59214610411578063c9649aa914610457578063cb3cab6714610452578063cbfd80111461044d578063ce96cb7714610448578063d209643a14610443578063d33219b41461043e578063d905777e14610439578063da3f224a14610434578063dd62ed3e1461042f578063e30c39781461042a578063e34c721b14610425578063e5c6c88d14610420578063e66f53b71461041b578063e90956cf14610416578063ef8b30f714610411578063f2fde38b1461040c578063f6b6a7a4146104075763f7d1852114610402575f80fd5b613252565b6131b1565b613129565b612d5b565b6130e6565b6130be565b613098565b613001565b612fcd565b612f8d565b612f14565b61160d565b612ef7565b612e90565b612e69565b61292a565b612ded565b612d79565b612d35565b612bcb565b612a3e565b6129f7565b612996565b6128ef565b612888565b61285e565b61274c565b61270e565b6126ef565b6125cf565b6124f6565b61244f565b612374565b6122b7565b612191565b61202b565b611f5a565b611efb565b611ec7565b611e92565b611d8b565b611d5e565b611cea565b611c47565b611bd3565b611b6c565b611b20565b611a3c565b611945565b611873565b6116ea565b611634565b611412565b6113ec565b611378565b611358565b61131d565b6112ef565b6105b0565b6112d0565b6106fc565b61124a565b611223565b611142565b61111c565b61106c565b611005565b610feb565b610fb7565b610f98565b610f5b565b610f32565b610ee7565b610e64565b610e24565b610dfb565b610dd3565b610d7a565b610be4565b610bbe565b610b7a565b610ab1565b610816565b6107f8565b610740565b61060a565b346105dc575f3660031901126105dc576020662386f26fc100006105d2613b84565b5004604051908152f35b5f80fd5b602060409281835280519182918282860152018484015e5f828201840152601f01601f1916010190565b346105dc575f3660031901126105dc576040515f5f5160206150025f395f51905f5254610636816132a9565b80845290600181169081156106d8575060011461066e575b61066a8361065e818503826108bf565b604051918291826105e0565b0390f35b5f5160206150025f395f51905f525f9081527f2ae08a8e29253f69ac5d979a101956ab8f8d9d7ded63fa7a83b16fc47648eab0939250905b8082106106be5750909150810160200161065e61064e565b9192600181602092548385880101520191019092916106a6565b60ff191660208086019190915291151560051b8401909101915061065e905061064e565b346105dc5760203660031901126105dc57602061071a600435613cdb565b604051908152f35b6001600160a01b038116036105dc57565b359061073e82610722565b565b346105dc5760403660031901126105dc5760043561075d81610722565b60243533156107e5576001600160a01b0382169182156107d25761079a8291610785336134b3565b9060018060a01b03165f5260205260405f2090565b556040519081527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560203392a3602060405160018152f35b634a1406b160e11b5f525f60045260245ffd5b63e602df0560e01b5f525f60045260245ffd5b346105dc5760203660031901126105dc57602061071a600435613d62565b346105dc575f3660031901126105dc5761066a6040516108376040826108bf565b60058152640322e302e360dc1b6020820152604051918291826105e0565b634e487b7160e01b5f52604160045260245ffd5b606081019081106001600160401b0382111761088457604052565b610855565b608081019081106001600160401b0382111761088457604052565b604081019081106001600160401b0382111761088457604052565b90601f801991011681019081106001600160401b0382111761088457604052565b6040519061073e610100836108bf565b6040519061073e610160836108bf565b6001600160401b0381116108845760051b60200190565b9080601f830112156105dc57813561092e81610900565b9261093c60405194856108bf565b81845260208085019260051b8201019283116105dc57602001905b8282106109645750505090565b60208091833561097381610722565b815201910190610957565b81601f820112156105dc5780359061099582610900565b926109a360405194856108bf565b828452602060608186019402830101918183116105dc57602001925b8284106109cd575050505090565b6060848303126105dc5760206060916040516109e881610869565b863581528287013583820152604087013560408201528152019301926109bf565b91906080838203126105dc5760405190610a2282610889565b81938035835260208101356020840152604081013560408401526060810135906001600160401b0382116105dc5701916040838303126105dc5760405192610a69846108a4565b80356001600160401b0381116105dc5783610a8591830161097e565b84526020810135926001600160401b0384116105dc57606093610aa8920161097e565b60208401520152565b346105dc5760403660031901126105dc576004356001600160401b0381116105dc57610ae1903690600401610917565b6024356001600160401b0381116105dc57366023820112156105dc57806004013591610b0c83610900565b91610b1a60405193846108bf565b8383526024602084019460051b820101903682116105dc5760248101945b828610610b4b57610b4985856132e1565b005b85356001600160401b0381116105dc57602091610b6f839260243691870101610a09565b815201950194610b38565b346105dc575f3660031901126105dc576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b346105dc575f3660031901126105dc5760206001600160401b0360145416604051908152f35b346105dc5760403660031901126105dc57600435610c0181610722565b6024358015801582036105dc576001546001600160a01b031633141580610d59575b610d4a576001600160a01b0383165f9081526002602052604081205490919060ff1680610d43575b610d34576001600160a01b0384165f9081526003602052604090205460c01c610d255715610cf95750610c7e9082614f7f565b5f5b610c8657005b7f24c5ea3dd9a5ba11b8a603674e63d62accaa480c1b05d18de5861f3894868d79610cf4610cce610cc78460018060a01b03165f52600360205260405f2090565b5460c01c90565b6040516001600160401b0390911681526001600160a01b03909316929081906020820190565b0390a2005b6001600160a01b0383165f908152600360205260409020600954610c809350610d2191614245565b1590565b6324d9026760e11b5f5260045ffd5b63a741a04560e01b5f5260045ffd5b5082610c4b565b6332a2673b60e21b5f5260045ffd5b505f5160206150425f395f51905f52546001600160a01b0316331415610c23565b346105dc575f3660031901126105dc576007548060c01c8015610dc4574210610db5576001600160401b03610daf9116613ea8565b5f600755005b63333bd2cb60e11b5f5260045ffd5b63e5f408a560e01b5f5260045ffd5b346105dc575f3660031901126105dc57600f546040516001600160a01b039091168152602090f35b346105dc575f3660031901126105dc5760205f5160206150625f395f51905f5254604051908152f35b346105dc5760203660031901126105dc57600435610e4181610722565b60018060a01b03165f526002602052602060ff60405f2054166040519015158152f35b346105dc575f3660031901126105dc575f546001600160a01b031633141580610ec6575b610eb7575f600655337fc40a085ccfa20f5fd518ade5c3a77a7ecbdfbb4c75efcdca6146a8e3c841d6635f80a2005b637cf97e4d60e11b5f5260045ffd5b505f5160206150425f395f51905f52546001600160a01b0316331415610e88565b346105dc5760603660031901126105dc57610f27600435610f0781610722565b602435610f1381610722565b60443591610f22833383613f04565b613f82565b602060405160018152f35b346105dc575f3660031901126105dc5760206001600160401b0360145460801c16604051908152f35b346105dc575f3660031901126105dc5760ff5f5160206150c25f395f51905f525460a01c1660ff8111610f9357602090604051908152f35b613286565b346105dc575f3660031901126105dc5763207972c960e01b5f5260045ffd5b346105dc575f3660031901126105dc575f5160206150c25f395f51905f52546040516001600160a01b039091168152602090f35b346105dc575f3660031901126105dc57602061071a613543565b346105dc575f3660031901126105dc5761101d61357e565b5061066a60405161102d816108a4565b6005546001600160c01b03811680835260c09190911c60209283019081526040805192835290516001600160401b031692820192909252918291820190565b346105dc575f3660031901126105dc576001546001600160a01b0316331415806110fb575b610d4a575f5160206150e25f395f51905f525460ff8116156110ec5760ff19165f5160206150e25f395f51905f52557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6020604051338152a1005b638dfc202b60e01b5f5260045ffd5b505f5160206150425f395f51905f52546001600160a01b0316331415611091565b346105dc5760203660031901126105dc57611138600435610722565b602061071a613596565b346105dc5760203660031901126105dc5760043561115f81610722565b6001546001600160a01b031633141580611202575b610d4a57600f546001600160a01b038281169291168214610d345760085460a01c6001600160401b0316610d25576009546111ae9161404c565b7f8bdad4b09e0168e2b64d8340297b3f8224ddb6cbdc855e6fff7e7624c6d8339d610cf46111e86008546001600160401b039060a01c1690565b6040516001600160401b0390911681529081906020820190565b505f5160206150425f395f51905f52546001600160a01b0316331415611174565b346105dc575f3660031901126105dc575f546040516001600160a01b039091168152602090f35b346105dc5760203660031901126105dc5760043561126781610722565b61126f61357e565b5060018060a01b03165f52600360205261066a60405f2060405190611293826108a4565b546001600160c01b03811680835260c09190911c60209283019081526040805192835290516001600160401b031692820192909252918291820190565b346105dc575f3660031901126105dc57634e2d04b360e01b5f5260045ffd5b346105dc575f3660031901126105dc57602060ff5f5160206150e25f395f51905f5254166040519015158152f35b346105dc5760203660031901126105dc5760043561133a81610722565b60018060a01b03165f526010602052602060405f2054604051908152f35b346105dc5760203660031901126105dc5763207972c960e01b5f5260045ffd5b346105dc575f3660031901126105dc575f546001600160a01b0316331415806113cb575b610eb7575f600855337fa2364ce3a039aaebd156a368d9ee05971530a28068e2304d9a5c0d0269ef002e5f80a2005b505f5160206150425f395f51905f52546001600160a01b031633141561139c565b346105dc575f3660031901126105dc576020662386f26fc10000600b5404604051908152f35b346105dc5760403660031901126105dc5760043560243561143281610722565b61143a613596565b8083116115eb575061144b82613da6565b90611454613de9565b5f5160206150825f395f51905f525c92831515806115d4575b6115b05761066a93505f5160206150a25f395f51905f525f5160206150825f395f51905f525d61149b614383565b5f5160206150c25f395f51905f52546114c2908290309033906001600160a01b0316614b79565b611539816115346114f86114ec6114ec5f5160206150c25f395f51905f525460018060a01b031690565b6001600160a01b031690565b6040516349cc4ebd60e11b60208201526001600160a01b039091166024820152604481019290925281606481015b03601f1981018352826108bf565b613e63565b506115448383614bfd565b60408051918252602082018490526001600160a01b039092169133917fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d791819081015b0390a36115a060015f5160206151025f395f51905f5255565b6040519081529081906020820190565b8363beb4ce0760e01b5f525f5160206150a25f395f51905f5260045260245260445ffd5b505f5160206150a25f395f51905f5284141561146d565b9190633c8097d960e11b5f5260018060a01b031660045260245260445260645ffd5b346105dc5760203660031901126105dc57602061071a60043561162f81610722565b6135eb565b346105dc575f3660031901126105dc5761164c6140ee565b5f5160206151425f395f51905f5280546001600160a01b03199081169091555f5160206150425f395f51905f52805491821690555f906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b60809060031901126105dc576004356116c981610722565b90602435906044356116da81610722565b906064356116e781610722565b90565b346105dc576116f8366116b1565b919290611703613de9565b5f5160206150c25f395f51905f5254611726906114ec906001600160a01b031681565b6001600160a01b038316929083146118645761174185613d62565b9361174b816135eb565b8086116118405750856115346117c093611777886117b19560018060a01b038116330361183057614179565b604051635394eb4360e11b60208201526001600160a01b038088166024830152909116604482015260648101929092528160848101611526565b60208082518301019101613624565b60408051958652602086018590528501819052936001600160a01b03919091169033907faf2e30fae2dfd1a90059cf53415e90c4ee9d151c1b1861df8f8a5963069c47f490606090a461181f60015f5160206151025f395f51905f5255565b604080519182526020820192909252f35b61183b823383613f04565b614179565b632e52afbb60e21b5f526001600160a01b038416600452602486905260445260645ffd5b634049e74560e11b5f5260045ffd5b346105dc5760203660031901126105dc576004356001546001600160a01b031633141580611924575b610d4a5760095490818114610d345760045460c01c610d25576118be81614212565b818111156118d057610b49915061431b565b7f6ed11f5df0bdefbbb4873e90566a9cfafbb8305c164922c173437f3c45f90a3591611905906001600160b81b038316614270565b6004546040805192835260c09190911c6020830152819081015b0390a1005b505f5160206150425f395f51905f52546001600160a01b031633141561189c565b346105dc575f3660031901126105dc5761195d61357e565b5061066a60405161196d816108a4565b6006546001600160a01b03811680835260a09190911c6001600160401b03908116602093840190815260408051938452905190911692820192909252918291820190565b6001600160401b03811161088457601f01601f191660200190565b81601f820112156105dc578035906119e3826119b1565b926119f160405194856108bf565b828452602083830101116105dc57815f926020809301838601378301015290565b600435906001600160401b03821682036105dc57565b35906001600160401b03821682036105dc57565b346105dc5760203660031901126105dc576004356001600160401b0381116105dc5761010060031982360301126105dc57611a756108e0565b90611a8281600401610733565b8252611a9060248201610733565b602083015260448101356040830152611aab60648201610733565b60608301526084810135608083015260a48101356001600160401b0381116105dc57611add90600436918401016119cc565b60a083015260c48101356001600160401b0381116105dc57611b1691611b0b60e492600436918401016119cc565b60c085015201611a28565b60e0820152613692565b346105dc575f3660031901126105dc575f5160206151425f395f51905f5254336001600160a01b0390911603611b5957610b493361410e565b63118cdaa760e01b5f523360045260245ffd5b346105dc575f3660031901126105dc57611b8461357e565b5061066a604051611b94816108a4565b6004546001600160c01b03811680835260c09190911c60209283019081526040805192835290516001600160401b031692820192909252918291820190565b346105dc575f3660031901126105dc575f546001600160a01b031633141580611c26575b610eb7575f600555337fb7cc052ba5dd4e2c200f771e69c6c4dddd930567bd8bea00e527944967c57db85f80a2005b505f5160206150425f395f51905f52546001600160a01b0316331415611bf7565b346105dc575f3660031901126105dc576001546001600160a01b031633141580611cc9575b610d4a57611c78614383565b600160ff195f5160206150e25f395f51905f525416175f5160206150e25f395f51905f52557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586020604051338152a1005b505f5160206150425f395f51905f52546001600160a01b0316331415611c6c565b346105dc575f3660031901126105dc575f546001600160a01b031633141580611d3d575b610eb7575f600755337f6e2daa1b3bca5239ed02028dbe091b3e5d41ae2702e4394b0a28cee04bd59fb25f80a2005b505f5160206150425f395f51905f52546001600160a01b0316331415611d0e565b346105dc575f3660031901126105dc576020611d78613b84565b9050662386f26fc1000060405191048152f35b346105dc5760203660031901126105dc57611da4611a12565b6001546001600160a01b031633141580611e71575b610d4a57601454611ddd9060801c6001600160401b03165b6001600160401b031690565b906001600160401b03811691808314610d34576001600160401b03611e0460075460c01c90565b16610d2557821115611e1a57610b499150613ea8565b611e487f4cedca5aa9a1cac41bbc05fef13c4ddccee26353a3de3d7615435bdf3f92ad6392600954906142a9565b60075460c01c604080516001600160401b0393841681529290911660208301528190810161191f565b505f5160206150425f395f51905f52546001600160a01b0316331415611db9565b346105dc575f3660031901126105dc576004548060c01c8015610dc4574210610db557610b49906001600160c01b031661431b565b346105dc575f3660031901126105dc575f5160206150425f395f51905f52546040516001600160a01b039091168152602090f35b346105dc5760203660031901126105dc5760043560018060a01b036001541633141580611f39575b610d4a57600a548114610d3457610b4990614351565b505f5160206150425f395f51905f52546001600160a01b0316331415611f23565b346105dc5760403660031901126105dc57600435611f7781610722565b60243590611f83613de9565b611f8b614383565b6001546001600160a01b03163314158061200a575b610d4a575f5160206150c25f395f51905f5254604051632cfc68f160e11b60208201526001600160a01b039182166024820152911660448201526064810191909152611ff3906115348160848101611526565b50610b4960015f5160206151025f395f51905f5255565b505f5160206150425f395f51905f52546001600160a01b0316331415611fa0565b346105dc5760403660031901126105dc5760043560243561204b81610722565b612053613b12565b80831161216f575061206482613d1e565b9061206d613de9565b5f5160206150825f395f51905f525c9283151580612158575b6115b05761066a93505f5160206150a25f395f51905f525f5160206150825f395f51905f525d6120b4614383565b5f5160206150c25f395f51905f52546120db908490309033906001600160a01b0316614b79565b612105836115346114f86114ec6114ec5f5160206150c25f395f51905f525460018060a01b031690565b506121108183614bfd565b6040805184815260208101929092526001600160a01b039092169133917fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d79181908101611587565b505f5160206150a25f395f51905f52841415612086565b919063284ff66760e01b5f5260018060a01b031660045260245260445260645ffd5b346105dc5761219f366116b1565b926121a8613de9565b6121b183613d62565b926121bb856135eb565b808511612293575061066a946122239085906001600160a01b0381163303612283575b60405163371a022d60e21b60208201526001600160a01b038087166024830152604482018690528716606482015261221d906115348160848101611526565b50614179565b60408051918252602082018590526001600160a01b03928316939092169133917f53239297447654f3a1c8342314051bc2fe9134b7bbe4a390eade008bb5eca1f291819081015b0390a46115a060015f5160206151025f395f51905f5255565b61228e823383613f04565b6121de565b632e52afbb60e21b5f526001600160a01b038616600452602485905260445260645ffd5b346105dc575f3660031901126105dc576040515f5f5160206150225f395f51905f52546122e3816132a9565b80845290600181169081156106d8575060011461230a5761066a8361065e818503826108bf565b5f5160206150225f395f51905f525f9081527f46a2803e59a4de4e7a4c574b1243f25977ac4c77d5a1a4a609b5394cebb4a2aa939250905b80821061235a5750909150810160200161065e61064e565b919260018160209254838588010152019101909291612342565b346105dc5760203660031901126105dc5760043561239181610722565b612399613de9565b6001546001600160a01b03163314158061242e575b610d4a57612408612417916123c1614383565b5f5160206150c25f395f51905f5254604051630c91124760e01b60208201526001600160a01b039182166024820152911660448083019190915281526115346064826108bf565b60208082518301019101613727565b9061181f60015f5160206151025f395f51905f5255565b505f5160206150425f395f51905f52546001600160a01b03163314156123ae565b346105dc5760403660031901126105dc576004356001600160401b0381116105dc5761247f903690600401610917565b6024356001600160401b0381116105dc57366023820112156105dc578060040135916124aa83610900565b916124b860405193846108bf565b8383526024602084019460051b820101903682116105dc57602401935b8185106124e657610b49848461373d565b84358152602094850194016124d5565b346105dc5760203660031901126105dc5760043561251381610722565b61251b6140ee565b5f546001600160a01b03166001600160a01b0381166001600160a01b03831614610d345760065460a01c6001600160401b0316610d25576001600160a01b031661256857610b49906143aa565b7f14279aa98f18dee77127cf315bcced708f417d07da24929c2f6460b481d0c13e906125966009548261409d565b60065460a01c6001600160401b0316604080516001600160a01b0390931683526001600160401b0390911660208301528190810161191f565b346105dc5760203660031901126105dc576004356001600160401b0381116105dc5761016060031982360301126105dc576126086108f0565b61261482600401610733565b815261262260248301610733565b602082015261263360448301610733565b60408201526064820135606082015261264e60848301610733565b608082015261265f60a48301610733565b60a082015260c482013560c082015260e48201356001600160401b0381116105dc5761269190600436918501016119cc565b60e0820152610104820135916001600160401b0383116105dc576101446126e4916126c5610b4995600436918401016119cc565b6101008501526126d86101248201611a28565b61012085015201611a28565b610140820152613817565b346105dc575f3660031901126105dc5763580b4feb60e11b5f5260045ffd5b346105dc575f3660031901126105dc576006546001600160401b038160a01c168015610dc4574210610db557610b49906001600160a01b03166143aa565b346105dc5760403660031901126105dc5760043561276981610722565b6024356001600160401b0381116105dc57612788903690600401610a09565b612790613de9565b6001546001600160a01b03163314158061283d575b610d4a576115346127ef926127b8614383565b6040805163a7ebda9760e01b60208201526001600160a01b039092166024830152604482015291829061152690606483019061345d565b6020818051810103126105dc57602061066a91015161280d81610722565b61282360015f5160206151025f395f51905f5255565b6040516001600160a01b0390911681529081906020820190565b505f5160206150425f395f51905f52546001600160a01b03163314156127a5565b346105dc5760403660031901126105dc57610f2760043561287e81610722565b6024359033613f82565b346105dc5760203660031901126105dc576004356001600160b81b03811681036105dc576001546001600160a01b0316331415806128ce575b610d4a57610b4990613a1c565b505f5160206150425f395f51905f52546001600160a01b03163314156128c1565b346105dc5760203660031901126105dc5760043561290c81610722565b60018060a01b03165f526011602052602060405f2054604051908152f35b346105dc575f3660031901126105dc5761294261357e565b5061066a604051612952816108a4565b6008546001600160a01b03811680835260a09190911c6001600160401b03908116602093840190815260408051938452905190911692820192909252918291820190565b346105dc575f3660031901126105dc576129ae613de9565b6008546001600160401b038160a01c168015610dc4574210610db5576129e4906129d6614383565b6001600160a01b0316614881565b60015f5160206151025f395f51905f5255005b346105dc5760203660031901126105dc57602061071a600435613d1e565b60609060031901126105dc5760043590602435612a3181610722565b906044356116e781610722565b346105dc57612a4c36612a15565b612a5581613b38565b808411612ba95750612a6683613d62565b91612a6f613de9565b5f5160206150825f395f51905f525c9384151580612b92575b612b6e5761066a94505f516020614fe25f395f51905f525f5160206150825f395f51905f525d6001600160a01b03831692612b1790859033869003612b5e575b5f5160206150c25f395f51905f5254604051637bd58ea960e01b60208201526001600160a01b03918216602482015290861660448201526064810185905261221d906115348160848101611526565b60408051918252602082018590526001600160a01b039092169133917ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db918190810161226a565b612b69823383613f04565b612ac8565b8463beb4ce0760e01b5f525f516020614fe25f395f51905f5260045260245260445ffd5b505f516020614fe25f395f51905f52851415612a88565b8382633fa733bb60e21b5f5260018060a01b031660045260245260445260645ffd5b346105dc57612bd936612a15565b612be2816135eb565b808411612d135750612bf383613cdb565b91612bfc613de9565b5f5160206150825f395f51905f525c9384151580612cfc575b612b6e5761066a94505f516020614fe25f395f51905f525f5160206150825f395f51905f525d6001600160a01b03831692612ca490829033869003612cec575b5f5160206150c25f395f51905f5254604051637bd58ea960e01b60208201526001600160a01b03918216602482015290861660448201526064810188905261221d906115348160848101611526565b6040805185815260208101929092526001600160a01b039092169133917ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db918190810161226a565b612cf7823383613f04565b612c55565b505f516020614fe25f395f51905f52851415612c15565b8382632e52afbb60e21b5f5260018060a01b031660045260245260445260645ffd5b346105dc5760203660031901126105dc57612d51600435610722565b602061071a613b12565b346105dc5760203660031901126105dc57602061071a600435613da6565b346105dc575f3660031901126105dc575f546001600160a01b031633141580612dcc575b610eb7575f600455337f921828337692c347c634c5d2aacbc7b756014674bd236f3cc2058d8e284a951b5f80a2005b505f5160206150425f395f51905f52546001600160a01b0316331415612d9d565b346105dc575f3660031901126105dc576005548060c01c8015610dc4574210610db557612e2b90612e26906001600160c01b0316614aa5565b6147bd565b5f6005556001600160401b03601454166040519081527f20affe2401825617c69366f8c3a3493d9822d1021d0b3023c4e77ea5b3d0fbc560203392a2005b346105dc5760203660031901126105dc57602061071a600435612e8b81610722565b613b38565b346105dc575f3660031901126105dc57612ea861357e565b5061066a604051612eb8816108a4565b6007546001600160c01b03811680835260c09190911c60209283019081526040805192835290516001600160401b031692820192909252918291820190565b346105dc575f3660031901126105dc576020600954604051908152f35b346105dc5760803660031901126105dc57610b49600435606435604435602435612f3c614383565b60018060a01b035f5160206150c25f395f51905f5254169360405194637f98f3c560e01b6020870152602486015260448501526064840152608483015260a482015260a4815261153460c4826108bf565b346105dc5760403660031901126105dc576020612fc4600435612faf81610722565b61078560243591612fbf83610722565b6134b3565b54604051908152f35b346105dc575f3660031901126105dc575f5160206151425f395f51905f52546040516001600160a01b039091168152602090f35b346105dc5760203660031901126105dc5760043561301e81610722565b5f546001600160a01b031633141580613077575b610eb7576001600160a01b03165f81815260036020526040812081905533907f10d2cd24a2375b12d91635518e47506f9aebfe8af364c6109b93ac41e8b0b86f9080a3005b505f5160206150425f395f51905f52546001600160a01b0316331415613032565b346105dc575f3660031901126105dc576020662386f26fc10000600e5404604051908152f35b346105dc575f3660031901126105dc576001546040516001600160a01b039091168152602090f35b346105dc5760203660031901126105dc5760043561310381610722565b61310b6140ee565b6001546001600160a01b03828116911614610d3457610b499061482a565b346105dc5760203660031901126105dc5760043561314681610722565b61314e6140ee565b5f5160206151425f395f51905f5280546001600160a01b0319166001600160a01b039283169081179091555f5160206150425f395f51905f52549091167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227005f80a3005b346105dc5760203660031901126105dc576004356131ce81610722565b6001600160a01b0381165f9081526003602052604090205460c01c8015610dc4574210610db55760018060a01b0316805f52600260205260405f20600160ff1982541617905580604051600181527f7276f1d77fbb1794919362294fb870305193d894417c47c88716aa858f4272d360203392a35f90815260036020526040812055005b346105dc5760203660031901126105dc5763580b4feb60e11b5f5260045ffd5b634e487b7160e01b5f52601260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b81156132a4570490565b613272565b90600182811c921680156132d7575b60208310146132c357565b634e487b7160e01b5f52602260045260245ffd5b91607f16916132b8565b906132ea613de9565b6001546001600160a01b0316331415806133b5575b610d4a57613328604051926303b70f1960e21b60208501526040602485015260648401906133d6565b602319838203016044840152815180825260208201916020808360051b8301019401925f915b83831061338857505050505090611534816133719303601f1981018352826108bf565b5061073e60015f5160206151025f395f51905f5255565b90919293946020806133a6600193601f19868203018752895161345d565b9701930193019193929061334e565b505f5160206150425f395f51905f52546001600160a01b03163314156132ff565b90602080835192838152019201905f5b8181106133f35750505090565b82516001600160a01b03168452602093840193909201916001016133e6565b90602080835192838152019201905f5b81811061342f5750505090565b9091926020606060019260408751805183528481015185840152015160408201520194019101919091613422565b9060606116e79280518352602081015160208401526040810151604084015201519060806060820152602061349e83516040608085015260c0840190613412565b9201519060a0607f1982850301910152613412565b6001600160a01b03165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020526040902090565b6001600160a01b03165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace006020526040902090565b91908203918211610f9357565b81810292918115918404141715610f9357565b600c54801561357957600e546001600160401b03601454166305f5e100036305f5e1008111610f935761357591613530565b0490565b505f90565b6040519061358b826108a4565b5f6020838281520152565b60ff5f5160206150e25f395f51905f5254166135e757662386f26fc100006135bc613b84565b5004600a548091101561357957662386f26fc100006135d9613b84565b50048103908111610f935790565b5f90565b6001600160a01b03165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00602052604090205490565b908160209103126105dc575190565b60016001600160401b03195f5160206151225f395f51905f525416175f5160206151225f395f51905f5255565b6801000000000000000060ff60401b195f5160206151225f395f51905f525416175f5160206151225f395f51905f5255565b505f5160206151225f395f51905f52546001600160401b0360ff8260401c161591168015908161371f575b6001149081613715575b15908161370c575b506136fd576136dc613633565b6136f0575b63d197f44b60e01b5f5260045ffd5b6136f8613660565b6136e1565b63f92ee8a960e01b5f5260045ffd5b9050155f6136cf565b303b1591506136c7565b8291506136bd565b91908260409103126105dc576020825192015190565b90613746613de9565b6001546001600160a01b0316331415806137f6575b610d4a575f5160206150c25f395f51905f5254604051633ba18ad960e21b60208201526001600160a01b03909116602482015260606044820152916137a49060848401906133d6565b602319838203016064840152602080835192838152019201905f5b8181106137e05750505090611534816133719303601f1981018352826108bf565b82518452602093840193909201916001016137bf565b505f5160206150425f395f51905f52546001600160a01b031633141561375b565b5f5160206151225f395f51905f5254906001600160401b03613848604084901c60ff1615936001600160401b031690565b1680159081613903575b60011490816138f9575b1590816138f0575b506136fd5761387f9082613876613633565b6138e35761390b565b61388557565b6138af60ff60401b195f5160206151225f395f51905f5254165f5160206151225f395f51905f5255565b604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29080602081015b0390a1565b6138eb613660565b61390b565b9050155f613864565b303b15915061385c565b839150613852565b613a176114ec60a061073e9361392b60e0820151610100830151906143f6565b805161393f906001600160a01b03166146df565b6080810151613956906001600160a01b0316614712565b61395e61476e565b613966614776565b61399a612e26610120830161398d613988611dd183516001600160401b031690565b6147a2565b516001600160401b031690565b6139b1606082016139ab8151614212565b5161431b565b6139ce6139c96101408301516001600160401b031690565b613ea8565b60408101516139e5906001600160a01b03166143aa565b6139f260c0820151614351565b6020810151613a09906001600160a01b031661482a565b01516001600160a01b031690565b614881565b613a31611dd16014546001600160401b031690565b6001600160b81b03821690808214610d34576001600160401b03613a5760055460c01c90565b16610d2557613a65826147a2565b811015613ab357612e26613a7891614aa5565b6040516001600160b81b0391909116815233907f20affe2401825617c69366f8c3a3493d9822d1021d0b3023c4e77ea5b3d0fbc590602090a2565b507f7424f23ff556b5fe97d2f5a4b22548445b948e612029151105b441519f1bfb9990613ae2600954826142e2565b60055460c01c604080516001600160b81b0390931683526001600160401b039091166020830152819081016138de565b60ff5f5160206150e25f395f51905f5254166135e7576116e7613b33613596565b613da6565b6001600160a01b03165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0060205260409020546116e790613cdb565b91908201809211610f9357565b613b8d42614aa5565b601454613ba59060401c6001600160401b0316611dd1565b918215613cce575f805260126020529091613be87f7e7fa33969761a458e04f477e039a608702b4f924981d6653935a8319a08ad7b5b546001600160401b031690565b92600e5491600c54906001600160401b03600d549316935b6001600160401b038716918286101580613cc5575b15613c885791613c7b613bdb613c7584613c6e613c56613c3b613c81988f9a8990614ad6565b959097996001600160401b03165f52601260205260405f2090565b9c6001600160401b03165f52601360205260405f2090565b5490613523565b96613b77565b93613b77565b9192613c00565b915092949391956001600160401b0316613ca157505050565b613cc293959492613cbc92613cb592614ad6565b9092613b77565b92613b77565b91565b50821515613c15565b915050600c5490600d5490565b662386f26fc10000613ceb613b84565b50049060018201809211610f93575f5160206150625f395f51905f525460018101809111610f93576116e7925f92614b1b565b662386f26fc10000613d2e613b84565b50049060018201809211610f93575f5160206150625f395f51905f525460018101809111610f93576116e792600192614b1b565b5f5160206150625f395f51905f52549060018201809211610f9357662386f26fc10000613d8d613b84565b500460018101809111610f93576116e792600192614b1b565b5f5160206150625f395f51905f52549060018201809211610f9357662386f26fc10000613dd1613b84565b500460018101809111610f93576116e7925f92614b1b565b60025f5160206151025f395f51905f525414613e125760025f5160206151025f395f51905f5255565b633ee5aeb560e01b5f5260045ffd5b60015f5160206151025f395f51905f5255565b3d15613e5e573d90613e45826119b1565b91613e5360405193846108bf565b82523d5f602084013e565b606090565b5f80916020815191017f00000000000000000000000000000000000000000000000000000000000000005af4613e97613e34565b9015613ea05790565b602081519101fd5b6014546001600160401b0360801b8260801b16906001600160401b0360801b1916176014556001600160401b03604051911681527f0cdc8c1df674ca6c4f86f6d47b02a15083c5d3bf098ea38f02c2762bad0afad260203392a2565b9190613f1381610785856134b3565b545f198110613f23575b50505050565b828110613f61576001600160a01b038416156107e5576001600160a01b038216156107d257613f57926107859103936134b3565b555f808080613f1d565b90637dc7a0d960e11b5f5260018060a01b031660045260245260445260645ffd5b916001600160a01b038316918215614039576001600160a01b03811693841561402657613fae816134eb565b548381106140015791613fef91613fe9857fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef969503916134eb565b556134eb565b805482019055604051908152602090a3565b63391434e360e21b5f526001600160a01b03909116600452602452604482905260645ffd5b63ec442f0560e01b5f525f60045260245ffd5b634b637e8f60e11b5f525f60045260245ffd5b60018060a01b03166001600160601b0360a01b60085416176008554201804211610f93576008805467ffffffffffffffff60a01b191660a09290921b67ffffffffffffffff60a01b16919091179055565b60018060a01b03166001600160601b0360a01b60065416176006554201804211610f93576006805467ffffffffffffffff60a01b191660a09290921b67ffffffffffffffff60a01b16919091179055565b5f5160206150425f395f51905f52546001600160a01b03163303611b5957565b5f5160206151425f395f51905f5280546001600160a01b03199081169091555f5160206150425f395f51905f5280549182166001600160a01b0393841690811790915591167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b6001600160a01b0381169190821561403957614194816134eb565b548281106141ef57917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef916141cd825f969503916134eb565b555f5160206150625f395f51905f5280548290039055604051908152602090a3565b63391434e360e21b5f526001600160a01b0390911660045260245260445260645ffd5b62127500811161423657620151801161422757565b631a1593df60e11b5f5260045ffd5b6346fedb5760e01b5f5260045ffd5b906001600160401b0360c01b82541682554201804211610f935760c01b6001600160c01b0319169055565b60018060b81b031690816001600160401b0360c01b60045416176004554201804211610f935760c01b6001600160c01b03191617600455565b60018060b81b031690816001600160401b0360c01b60075416176007554201804211610f935760c01b6001600160c01b03191617600755565b60018060b81b031690816001600160401b0360c01b60055416176005554201804211610f935760c01b6001600160c01b03191617600555565b806009556040519081527fd28e9b90ee9b37c5936ff84392d71f29ff18117d7e76bcee60615262a90a3f7560203392a25f600455565b80600a556040519081527f51fa58fd85e72d533eb3933ef4dd0bb83a9614f46e076ffa025b0dcbb8dff31560203392a2565b60ff5f5160206150e25f395f51905f52541661439b57565b63d93c066560e01b5f5260045ffd5b60018060a01b0316806001600160601b0360a01b5f5416175f556040519081527fcb11cc8aade2f5a556749d1b2380d108a16fac3431e6a5d5ce12ef9de0bd76e360203392a25f600655565b6143fe614c76565b8051906001600160401b0382116108845761442f8261442a5f5160206150025f395f51905f52546132a9565b614521565b602090601f83116001146144825791806144639261073e95945f92614477575b50508160011b915f199060031b1c19161790565b5f5160206150025f395f51905f52556145cc565b015190505f8061444f565b5f5160206150025f395f51905f525f52601f19831691907f2ae08a8e29253f69ac5d979a101956ab8f8d9d7ded63fa7a83b16fc47648eab0925f5b818110614509575091600193918561073e979694106144f1575b505050811b015f5160206150025f395f51905f52556145cc565b01515f1960f88460031b161c191690555f80806144d7565b929360206001819287860151815501950193016144bd565b601f811161452d575050565b5f5160206150025f395f51905f525f5260205f20906020601f840160051c83019310614573575b601f0160051c01905b818110614568575050565b5f815560010161455d565b9091508190614554565b601f821161458a57505050565b5f5260205f20906020601f840160051c830193106145c2575b601f0160051c01905b8181106145b7575050565b5f81556001016145ac565b90915081906145a3565b9081516001600160401b0381116108845761460b816145f85f5160206150225f395f51905f52546132a9565b5f5160206150225f395f51905f5261457d565b602092601f821160011461464b5761463a929382915f926144775750508160011b915f199060031b1c19161790565b5f5160206150225f395f51905f5255565b5f5160206150225f395f51905f525f52601f198216937f46a2803e59a4de4e7a4c574b1243f25977ac4c77d5a1a4a609b5394cebb4a2aa915f5b8681106146c757508360019596106146af575b505050811b015f5160206150225f395f51905f5255565b01515f1960f88460031b161c191690555f8080614698565b91926020600181928685015181550194019201614685565b6146e7614c76565b6001600160a01b038116156146ff5761073e9061410e565b631e4fbdf760e01b5f525f60045260245ffd5b61471a614c76565b61472381614ca1565b901561476557905b5f5160206150c25f395f51905f5280546001600160a81b03191660a09390931b60ff60a01b16929092176001600160a01b03909116179055565b5060129061472b565b613e21614c76565b61477e614c76565b60ff195f5160206150e25f395f51905f5254165f5160206150e25f395f51905f5255565b6302faf080106147ae57565b63062f00d560e51b5f5260045ffd5b6001600160401b03906147e86040516345fe329f60e01b6020820152600481526115346024826108bf565b5016806001600160401b031960145416176014556040519081527f20affe2401825617c69366f8c3a3493d9822d1021d0b3023c4e77ea5b3d0fbc560203392a2565b600180546001600160a01b0319166001600160a01b0390921691821790556040519081527fbd0a63c12948fbc9194a5839019f99c9d71db924e5c70018265bc778b8f1a50690602090a1565b6040513d5f823e3d90fd5b600f546001600160a01b0316806149f5575b506001600160a01b03811690816148ef575b50600f80546001600160a01b0319166001600160a01b038316179055337f390ace337562623e4cf938891cfa7e80b7b2e6ff395963aba93e537ce67e842c5f80a361073e5f600855565b5f5160206150c25f395f51905f5254614912906114ec906001600160a01b031681565b6040516370a0823160e01b81523060048201526020816024816001600160a01b0386165afa9081156149d1575f916149d6575b5080614953575b50506148a5565b6149638161498a94602094614d1e565b604051636e553f6560e01b8152600481019190915230602482015291829081906044820190565b03815f865af180156149d1576149a2575b808061494c565b6149c39060203d6020116149ca575b6149bb81836108bf565b810190613624565b505f61499b565b503d6149b1565b614876565b6149ef915060203d6020116149ca576149bb81836108bf565b5f614945565b6040516370a0823160e01b8152306004820152602081602481855afa9081156149d1575f92602092614a5a928591614a88575b50604051635d043b2960e11b815260048101919091523060248201819052604482015293849283919082906064820190565b03925af180156149d1571561489357614a819060203d6020116149ca576149bb81836108bf565b505f614893565b614a9f9150843d86116149ca576149bb81836108bf565b5f614a28565b6001600160401b038111614abf576001600160401b031690565b6306dfcc6560e41b5f52604060045260245260445ffd5b810391908211610f93576301e1338091614aef91613530565b04906305f5e100614b0b6001600160401b036014541684613530565b0491828103908111610f93579190565b9190614b28828285614dba565b936004811015614b65576001809116149283614b50575b50505015158101809111610f935790565b9091809350156132a4570915155f8080614b3f565b634e487b7160e01b5f52602160045260245ffd5b90925f198114614bee576001600160a01b03848116908416148015614be6575b613f1d576040516323b872dd60e01b60208201526001600160a01b03948516602482015292909316604483015260648083019390935291815261073e91614be16084836108bf565b614e5c565b508015614b99565b630d550c3b60e11b5f5260045ffd5b6001600160a01b03811691908215614026575f5160206150625f395f51905f525490828201809211610f93575f92614c676020927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef945f5160206150625f395f51905f52556134eb565b818154019055604051908152a3565b60ff5f5160206151225f395f51905f525460401c1615614c9257565b631afcd79f60e31b5f5260045ffd5b5f8091604051602081019063313ce56760e01b825260048152614cc56024826108bf565b51916001600160a01b03165afa614cda613e34565b9080614d12575b614ced575b505f905f90565b80602080614d0093518301019101613624565b60ff8111614ce6579060ff6001921690565b50602081511015614ce1565b919081158015614da8575b614da357604051636eb1769f60e11b81523060048201526001600160a01b0382811660248301529092906020908490604490829088165afa9283156149d1575f93614d82575b508201809211610f935761073e92614eb4565b614d9c91935060203d6020116149ca576149bb81836108bf565b915f614d6f565b505050565b506001600160a01b0381163014614d29565b91818302915f1981850993838086109503948086039514614e3f5784831115614e325790829109815f0382168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b6011600384150218614e4c565b5050906116e7925061329a565b634e487b715f526020526024601cfd5b905f602091828151910182855af115614876575f513d614eab57506001600160a01b0381163b155b614e8b5750565b635274afe760e01b5f9081526001600160a01b0391909116600452602490fd5b60011415614e84565b60405163095ea7b360e01b60208281019182526001600160a01b0385166024840152604480840196909652948252929390925f90614ef36064866108bf565b84519082855af15f51903d81614f53575b501590505b614f1257505050565b60405163095ea7b360e01b60208201526001600160a01b0390931660248401525f604484015261073e92614be190614f4d8160648101611526565b82614e5c565b15159050614f735750614f096001600160a01b0382163b15155b5f614f04565b6001614f099114614f6d565b60018060a01b03168091815f52600260205260405f2060ff1981541660ff8315151617905560405190151581527f7276f1d77fbb1794919362294fb870305193d894417c47c88716aa858f4272d360203392a35f5260036020525f604081205556fefcb0c32c4f653382a412cb0caa6a29f9e46d74bae452ca200c67f1e5e638930052c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0352c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace049016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930052c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0255d65f3b5821c66716708cd5119fc8b654f479bd23b96d0911cee852419047001d9ff85e70b948f53a2cc45fa6f42c020b2a8eec3349351855dea946b06357000773e532dfede91f04b12a73d3d2acd361424f41f76b4fb79f090161e36b4e00cd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c00a264697066735822122084e36f107ab3fdbe85b2efbff575cb6a30d3532fa1f7f679f9b4ec3785455c2164736f6c634300081d0033f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00000000000000000000000000b7d2c5e128614e4507e208d060f29d56fdb9c81e