0 txs
717 calls
constructor
constructor(address oracle_)
functions
admin
viewfunction admin() view returns (address)
available
viewfunction available(uint256 id) view returns (uint256, uint256)
borrower
viewfunction borrower() view returns (address)
claimableEarlyWithdrawalFees
viewfunction claimableEarlyWithdrawalFees(uint256) view returns (uint256)
counts
viewfunction counts() view returns (uint256, uint256)
escrow
viewfunction escrow() view returns (address)
getCreditPosition
viewfunction getCreditPosition(uint256 tokenId) view returns (tuple)
getFees
viewfunction getFees() view returns (tuple)
getLineFactory
viewfunction getLineFactory() view returns (address)
getRates
viewfunction getRates(uint256 id) view returns (uint128, uint128)
ids
viewfunction ids(uint256) view returns (uint256)
interestAccrued
viewfunction interestAccrued(uint256 id) view returns (uint256)
isServicer
viewfunction isServicer(address) view returns (bool)
mutualConsentProposals
viewfunction mutualConsentProposals(bytes32) view returns (address)
nextInQ
viewfunction nextInQ() view returns (uint256, uint256, address, uint256, uint256, uint256, uint128, uint128)
nonce
viewfunction nonce() view returns (uint256)
otcSwapServicer
viewfunction otcSwapServicer() view returns (address)
proposalCount
viewfunction proposalCount() view returns (uint128)
protocolTreasury
viewfunction protocolTreasury() view returns (address)
rates
viewfunction rates(uint256) view returns (uint128 dRate, uint128 fRate, uint256 lastAccrued)
recoveryEnabled
viewfunction recoveryEnabled() view returns (bool)
spigot
viewfunction spigot() view returns (address)
status
viewfunction status() view returns (uint8)
swapTarget
viewfunction swapTarget() view returns (address)
tokenContract
viewfunction tokenContract() view returns (address)
totalOutstandingDebt
viewfunction totalOutstandingDebt() view returns (uint256 total)
tradeable
viewfunction tradeable(address token) view returns (uint256)
unused
viewfunction unused(address token) view returns (uint256)
abort
nonpayablefunction abort()
accrueInterest
nonpayablefunction accrueInterest()
activateLine
nonpayablefunction activateLine()
addCredit
nonpayablefunction addCredit(uint256 desiredNonce, uint128 drate, uint128 frate, uint256 amount, address token, address lender, bool isRestricted, uint16 earlyWithdrawalFee, uint256 deadline) returns (uint256 tokenId)
borrow
nonpayablefunction borrow(uint256 id, uint256 amount, address to)
claimAndRepay
nonpayablefunction claimAndRepay(address claimToken, bytes zeroExTradeData) returns (uint256)
claimAndTrade
nonpayablefunction claimAndTrade(address claimToken, bytes zeroExTradeData) returns (uint256)
claimEarlyWithdrawalFees
nonpayablefunction claimEarlyWithdrawalFees(uint256 tokenId)
clearProposals
nonpayablefunction clearProposals()
close
nonpayablefunction close(uint256 id)
declareInsolvent
nonpayablefunction declareInsolvent()
depositAndClose
nonpayablefunction depositAndClose()
depositAndRepay
nonpayablefunction depositAndRepay(uint256 amount)
healthcheck
nonpayablefunction healthcheck() returns (uint8)
incrementNonce
nonpayablefunction incrementNonce()
init
nonpayablefunction init()
initializeFromFactory
nonpayablefunction initializeFromFactory(address admin_, address borrower_, bool recoveryEnabled_, address spigot_, address escrow_, address creditPositionToken_, tuple fees_)
recoverTokens
nonpayablefunction recoverTokens(address token, address to)
refinanceCredit
nonpayablefunction refinanceCredit(uint256 desiredNonce, uint256 tokenId, uint256 amount, uint128 dRate, uint128 fRate, uint256 deadline)
revokeConsent
nonpayablefunction revokeConsent(uint256 tokenId, bytes _reconstructedMsgData)
setFees
nonpayablefunction setFees(tuple _fees)
setOtcSwapServicer
nonpayablefunction setOtcSwapServicer(address servicer)
setServicer
nonpayablefunction setServicer(address servicer, bool approved)
stepQ
nonpayablefunction stepQ()
sweep
nonpayablefunction sweep(address to, address token, uint256 amount)
updateAdmin
nonpayablefunction updateAdmin(address newAdmin)
updateAllowedOTCPriceImpact
nonpayablefunction updateAllowedOTCPriceImpact(uint128 allowedPriceImpact)
updateBorrower
nonpayablefunction updateBorrower(address newBorrower)
updateOutstandingDebt
nonpayablefunction updateOutstandingDebt() returns (uint256, uint256)
useAndRepay
nonpayablefunction useAndRepay(uint256 amount)
withdraw
nonpayablefunction withdraw(uint256 tokenId, uint256 amount)
events
AddCredit
event AddCredit(uint256 indexed tokenId, uint256 indexed deposit)
Borrow
event Borrow(uint256 indexed id, uint256 indexed amount, address indexed to)
CloseCreditPosition
event CloseCreditPosition(uint256 indexed id)
Default
event Default(uint256 indexed id)
DeployLine
event DeployLine(address indexed lineFactory, address indexed oracle, address admin, address borrower, bool isRecoverable)
EarlyWithdrawalFee
event EarlyWithdrawalFee(uint256 indexed fee, address indexed lender, address indexed to)
IncreaseCredit
event IncreaseCredit(uint256 indexed id, uint256 indexed deposit)
InterestAccrued
event InterestAccrued(uint256 indexed id, uint256 indexed amount)
InterestAccrued
event InterestAccrued(uint256 indexed id, uint256 indexed amount)
MutualConsentAccepted
event MutualConsentAccepted(bytes32 indexed proposalId)
MutualConsentRegistered
event MutualConsentRegistered(bytes32 indexed proposalId, address indexed taker, uint256 indexed nonce, bytes msgData)
MutualConsentRevoked
event MutualConsentRevoked(bytes32 indexed proposalId)
MutualConsentRevokedAll
event MutualConsentRevokedAll(uint256 indexed newNonce)
OtcSwapServicerUpdated
event OtcSwapServicerUpdated(address indexed servicer)
PayServicingFee
event PayServicingFee(uint256 indexed id, uint256 indexed amount)
RecoveredEscrow
event RecoveredEscrow(address indexed to, uint256 amount, address token)
RefinanceCredit
event RefinanceCredit(uint256 indexed id, uint256 indexed amount, uint128 dRate, uint128 fRate, uint256 deadline)
RepayInterest
event RepayInterest(uint256 indexed id, uint256 indexed amount)
RepayPrincipal
event RepayPrincipal(uint256 indexed id, uint256 indexed amount)
ReservesChanged
event ReservesChanged(address indexed token, int256 indexed diff, uint256 tokenType)
ServicerApproved
event ServicerApproved(address indexed servicer, bool indexed approved)
SetDeadline
event SetDeadline(uint256 indexed id, uint256 indexed deadline)
SetFee
event SetFee(uint16 feeBps, uint8 indexed feeType)
SetRates
event SetRates(uint256 indexed id, uint128 indexed dRate, uint128 indexed fRate)
SortedIntoQ
event SortedIntoQ(uint256 indexed id, uint256 indexed newIdx, uint256 indexed oldIdx, uint256 oldId)
SpigotPayment
event SpigotPayment(address indexed token, uint256 indexed amount)
TradeSpigotTokens
event TradeSpigotTokens(address indexed spigotToken, uint256 spigotTokenAmount, address indexed debtToken, uint256 indexed debtTokensBought)
TransferOriginationFee
event TransferOriginationFee(uint256 indexed fee, address indexed to)
UpdateAdmin
event UpdateAdmin(address indexed oldAdmin, address indexed newAdmin)
UpdateBorrower
event UpdateBorrower(address indexed borrower, address indexed newBorrower)
UpdateServicer
event UpdateServicer(address indexed oldServicer, address indexed newServicer)
UpdateStatus
event UpdateStatus(uint256 indexed status)
WithdrawDeposit
event WithdrawDeposit(uint256 indexed id, uint256 indexed amount)
WithdrawProfit
event WithdrawProfit(uint256 indexed id, uint256 indexed amount)
errors
AlreadyInitialized
error AlreadyInitialized()
BadModule
error BadModule(address module)
BadStatus
error BadStatus()
BorrowFailed
error BorrowFailed()
CallerAccessDenied
error CallerAccessDenied()
CannotAmendLine
error CannotAmendLine()
CantStepQ
error CantStepQ()
CloseFailedWithPrincipal
error CloseFailedWithPrincipal()
DebtOwed
error DebtOwed()
EthNotSupported
error EthNotSupported()
EthSupportDisabled
error EthSupportDisabled()
InvalidAddress
error InvalidAddress()
InvalidConsent
error InvalidConsent()
InvalidDeadline
error InvalidDeadline()
LenderIsNotCreditStrategy
error LenderIsNotCreditStrategy()
LineHasActiveCreditPositions
error LineHasActiveCreditPositions(uint256 numActiveCreditPositions)
MaximumFeeExceeded
error MaximumFeeExceeded()
NoLiquidity
error NoLiquidity()
NonceMismatch
error NonceMismatch()
NoQueue
error NoQueue()
NotActive
error NotActive()
NotBorrowing
error NotBorrowing()
NotInsolvent
error NotInsolvent(address module)
NotLiquidatable
error NotLiquidatable()
NoTokenPrice
error NoTokenPrice()
NotUserConsent
error NotUserConsent()
PositionExists
error PositionExists()
PositionIsClosed
error PositionIsClosed()
RecoveryNotEnabled
error RecoveryNotEnabled()
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
RepayAmountExceedsDebt
error RepayAmountExceedsDebt(uint256 totalAvailable)
ReservesOverdrawn
error ReservesOverdrawn(address token, uint256 amountAvailable)
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
SendingEthFailed
error SendingEthFailed()
Unauthorized
error Unauthorized()
UnsupportedMutualConsentFunction
error UnsupportedMutualConsentFunction()
creation bytecode
0x60c06040525f600f556012805460ff60a01b19169055348015601f575f80fd5b50604051615e3e380380615e3e833981016040819052603c916055565b60016003556001600160a01b031660a052336080526080565b5f602082840312156064575f80fd5b81516001600160a01b03811681146079575f80fd5b9392505050565b60805160a051615d656100d95f395f8181612d9c01528181613e20015261421401525f8181610bcf01528181611db301528181611ef5015281816125d801528181612c3c0152818161381d01526138f40152615d655ff3fe60806040526004361061037f575f3560e01c80637e7f0cde116101d3578063d6bda0c0116100fd578063e2fdcc171161009d578063fac333ac1161006d578063fac333ac14610ba2578063fc74e49214610bc1578063feccf26f14610bf3578063ff798b4714610c07575f80fd5b8063e2fdcc1714610adf578063e701af9914610afe578063efcf823914610b64578063f851a44014610b83575f80fd5b8063dd418ae2116100d8578063dd418ae214610a20578063dfe9608314610a8d578063e1c7392a14610aac578063e2f273bd14610ac0575f80fd5b8063d6bda0c014610935578063da35c66414610954578063db8d55f114610992575f80fd5b8063890d192f11610173578063affed0e011610143578063affed0e0146108c3578063c6116825146108d8578063cb0d5ec5146108f7578063d5603b0a14610916575f80fd5b8063890d192f1461085d5780639637b5d31461087157806396e494e814610890578063a6afed95146108af575f80fd5b806380d80044116101ae57806380d80044146107f4578063817cc1ea14610813578063859203e31461082a578063862bd51f1461083e575f80fd5b80637e7f0cde146107b85780637eef544d146107cc578063803db96d146107e0575f80fd5b80634f42fc02116102b45780635f6187681161025457806367828fbd1161022457806367828fbd1461072e57806376c1b82f1461074d5780637946541e146107795780637df1f1b914610799575f80fd5b80635f618768146106c8578063627cdcb9146106e757806362bfcc68146106fb57806362c067671461070f575f80fd5b806355a373d61161028f57806355a373d614610657578063570a4acf146106765780635d3e9deb146106955780635e235d54146106a9575f80fd5b80634f42fc02146105ef578063501b56d81461060357806353d9c16b1461062c575f80fd5b806335a063b41161031f5780633fd2348a116102fa5780633fd2348a1461053f578063441a3e701461057d578063461035af1461059c57806348095bcd146105d0575f80fd5b806335a063b4146104c057806338deee8f146104d45780633ec621be14610520575f80fd5b8063119e32e51161035a578063119e32e51461042f5780631acb75251461044e578063200d2ed21461047b5780632660a146146104a1575f80fd5b8063056097ac1461038a578063081802b1146103ab5780630aebeb4e14610410575f80fd5b3661038657005b5f80fd5b348015610395575f80fd5b506103a96103a436600461527c565b610c26565b005b3480156103b6575f80fd5b506103eb6103c53660046152b3565b5f908152602081905260409020546001600160801b0380821692600160801b9092041690565b604080516001600160801b039384168152929091166020830152015b60405180910390f35b34801561041b575f80fd5b506103a961042a3660046152b3565b610ce6565b34801561043a575f80fd5b506103a96104493660046152e5565b610ea7565b348015610459575f80fd5b5061046d610468366004615343565b610f92565b604051908152602001610407565b348015610486575f80fd5b50600e546104949060ff1681565b60405161040791906153c8565b3480156104ac575f80fd5b506103a96104bb3660046153e3565b611298565b3480156104cb575f80fd5b506103a9611328565b3480156104df575f80fd5b506105086104ee3660046152b3565b60016020525f90815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610407565b34801561052b575f80fd5b506103a961053a3660046154d4565b61135d565b34801561054a575f80fd5b5061056d6105593660046154ee565b60076020525f908152604090205460ff1681565b6040519015158152602001610407565b348015610588575f80fd5b506103a9610597366004615509565b6113f4565b3480156105a7575f80fd5b5061046d6105b63660046154ee565b6001600160a01b03165f9081526011602052604090205490565b3480156105db575f80fd5b5061046d6105ea3660046152b3565b611573565b3480156105fa575f80fd5b506104946115a8565b34801561060e575f80fd5b506106176115f5565b60408051928352602083019190915201610407565b348015610637575f80fd5b5061046d6106463660046152b3565b600d6020525f908152604090205481565b348015610662575f80fd5b50600554610508906001600160a01b031681565b348015610681575f80fd5b506103a96106903660046152b3565b611607565b3480156106a0575f80fd5b506103a961164a565b3480156106b4575f80fd5b50601054610508906001600160a01b031681565b3480156106d3575f80fd5b5061046d6106e2366004615343565b611698565b3480156106f2575f80fd5b506103a961175c565b348015610706575f80fd5b506103a96117b6565b34801561071a575f80fd5b506103a9610729366004615529565b611833565b348015610739575f80fd5b506103a96107483660046152b3565b61197c565b348015610758575f80fd5b5061076c6107673660046152b3565b611c9e565b6040516104079190615567565b348015610784575f80fd5b5060085461056d90600160a01b900460ff1681565b3480156107a4575f80fd5b50600454610508906001600160a01b031681565b3480156107c3575f80fd5b50610508611db0565b3480156107d7575f80fd5b506103a9611e31565b3480156107eb575f80fd5b50610508611ef2565b3480156107ff575f80fd5b506103a961080e36600461560d565b611f4f565b34801561081e575f80fd5b50600954600a54610617565b348015610835575f80fd5b5061046d612013565b348015610849575f80fd5b50600854610508906001600160a01b031681565b348015610868575f80fd5b506103a9612129565b34801561087c575f80fd5b5061046d61088b3660046154ee565b612177565b34801561089b575f80fd5b506106176108aa3660046152b3565b61220b565b3480156108ba575f80fd5b506103a9612243565b3480156108ce575f80fd5b5061046d600f5481565b3480156108e3575f80fd5b506103a96108f23660046154ee565b612291565b348015610902575f80fd5b506103a96109113660046154ee565b612315565b348015610921575f80fd5b5061046d61093036600461563c565b61248d565b348015610940575f80fd5b506103a961094f3660046156d3565b6127d2565b34801561095f575f80fd5b5060025461097a90600160801b90046001600160801b031681565b6040516001600160801b039091168152602001610407565b34801561099d575f80fd5b506109f3604080516060810182525f80825260208201819052918101919091525060408051606081018252600b5461ffff808216835262010000820481166020840152600160201b909104169181019190915290565b60408051825161ffff90811682526020808501518216908301529282015190921690820152606001610407565b348015610a2b575f80fd5b50610a67610a3a3660046152b3565b5f60208190529081526040902080546001909101546001600160801b0380831692600160801b9004169083565b604080516001600160801b03948516815293909216602084015290820152606001610407565b348015610a98575f80fd5b506103a9610aa73660046152b3565b612924565b348015610ab7575f80fd5b506103a9612a47565b348015610acb575f80fd5b506103a9610ada3660046154ee565b612a84565b348015610aea575f80fd5b50601254610508906001600160a01b031681565b348015610b09575f80fd5b50610b12612b29565b6040805198895260208901979097526001600160a01b03909516958701959095526060860192909252608085015260a08401526001600160801b0391821660c08401521660e082015261010001610407565b348015610b6f575f80fd5b506103a9610b7e366004615709565b612c07565b348015610b8e575f80fd5b50600654610508906001600160a01b031681565b348015610bad575f80fd5b5061046d610bbc3660046152b3565b612df5565b348015610bcc575f80fd5b507f0000000000000000000000000000000000000000000000000000000000000000610508565b348015610bfe575f80fd5b506103a9612e14565b348015610c12575f80fd5b506103a9610c21366004615798565b612e62565b610c2e613152565b6005600e5460ff166005811115610c4757610c47615394565b14610c6557604051632e4baded60e11b815260040160405180910390fd5b6040516370a0823160e01b8152306004820152610ce29082906001600160a01b038516906370a0823190602401602060405180830381865afa158015610cad573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cd191906157ec565b6001600160a01b038516919061316c565b5050565b610cee6131be565b5f818152600c60205260409020610d0581836131f5565b60408051606081018252600b5461ffff808216835262010000820481166020840152600160201b909104169181019190915260028201545f91610d4791613215565b8260020154610d569190615817565b600483015461010090046001600160a01b03165f908152601160205260409020549091508115610e9857818110610e1757600483015461010090046001600160a01b03165f9081526011602052604081208054849290610db790849061582a565b90915550610dc690508161583d565b6004840154604051600181526101009091046001600160a01b0316905f80516020615d108339815191529060200160405180910390a3610e088385845f613237565b610e1283856132ae565b610ea1565b600483015461010090046001600160a01b03165f90815260116020526040812055610e42818361582a565b9150610e4d8161583d565b6004840154604051600181526101009091046001600160a01b0316905f80516020615d108339815191529060200160405180910390a3610e8f8385835f613237565b610e1284613453565b610ea184613453565b50505050565b6006546004546001600160a01b039182169116610ec482826134c3565b15610f8d5760125460405163119e32e560e01b81526001600160801b03851660048201526001600160a01b039091169063119e32e5906024015f604051808303815f87803b158015610f14575f80fd5b505af1158015610f26573d5f803e3d5ffd5b505060105460405163119e32e560e01b81526001600160801b03871660048201526001600160a01b03909116925063119e32e591506024015b5f604051808303815f87803b158015610f76575f80fd5b505af1158015610f88573d5f803e3d5ffd5b505050505b505050565b5f610f9b613707565b5f600a5f81548110610faf57610faf615857565b5f91825260208083209190910154808352600c9091526040909120600654919250906001600160a01b03163314801590610ffe575060048101546001600160a01b038781166101009092041614155b1561101c57604051631172e7cd60e01b815260040160405180910390fd5b335f9081526007602052604090205460ff1615801561104657506006546001600160a01b03163314155b1561106457604051631172e7cd60e01b815260040160405180910390fd5b61106e81836131f5565b5f611092878360040160019054906101000a90046001600160a01b03168888613762565b600483015461010090046001600160a01b03165f90815260116020526040812054919250906110c19083615817565b90505f836001015484600201546110d89190615817565b60408051606081018252600b5461ffff808216835262010000820481166020840152600160201b90910416918101919091529091506111179082613215565b6111219082615817565b90508082111561112f578091505b5f838311156111be57611142848461582a565b905061114d8161583d565b6004860154604051600181526101009091046001600160a01b0316905f80516020615d108339815191529060200160405180910390a3600485015461010090046001600160a01b03165f90815260116020526040812080548392906111b390849061582a565b909155506112499050565b6111c8838561582a565b9050808560040160019054906101000a90046001600160a01b03166001600160a01b03165f80516020615d10833981519152600160405161120b91815260200190565b60405180910390a3600485015461010090046001600160a01b03165f9081526011602052604081208054839290611243908490615817565b90915550505b6112558587855f613237565b60405183906001600160a01b038c16907fd0ebd0e59305b50950c2dd23a57393012c1560208b5cbe40793920dff06ca1f1905f90a3509198975050505050505050565b6112a0613152565b6001600160a01b0382166112c75760405163e6c4247b60e01b815260040160405180910390fd5b604051811515906001600160a01b038416907f1818a038cd254541589622dc64dee42576a85c3bada6c5d4d782fd7d0acd63c8905f90a36001600160a01b03919091165f908152600760205260409020805460ff1916911515919091179055565b6006546001600160a01b031661133c613a4d565b61134682826134c3565b15610ce257611353613b0e565b610f8d6005613b38565b6006546001600160a01b0316611371613a4d565b61137b82826134c3565b15610f8d57825161138c905f613bce565b61139b83602001516001613bce565b6113aa83604001516002613bce565b8251600b80546020860151604087015161ffff908116600160201b0265ffff0000000019928216620100000263ffffffff1990941691909516179190911716919091179055505050565b6113fd82613c42565b5f6001600e5460ff16600581111561141757611417615394565b03611477575f838152600c60205260409020600701544210801561144a57505f838152600c602052604090206003015482115b15611477575f838152600c60205260409020600601546114749062010000900461ffff1683613cd0565b90505b5f838152600c6020526040902061148e81856131f5565b81156114f2575f848152600d6020526040812080548492906114b1908490615817565b90915550506004546040516001600160a01b0390911690339084907f11192f6957b777efdcc0d9d72bdb9e60480f98b91b43f7fde0875e711ac4f511905f90a45b6040516390da8dab60e01b8152600481018290526024810185905233604482015260648101849052608481018390527373340ace314e340ef83a1c8492e1948791e7a395906390da8dab9060a4015b5f6040518083038186803b158015611557575f80fd5b505af4158015611569573d5f803e3d5ffd5b5050505050505050565b5f818152600c6020526040812060018101548154611592918591613ce2565b81600201546115a19190615817565b9392505050565b5f6001600e5460ff1660058111156115c2576115c2615394565b106115dc576115d76115d2613d7c565b613b38565b905090565b604051632e4baded60e11b815260040160405180910390fd5b5f806115ff613db4565b915091509091565b61160f613e81565b5f818152600d60209081526040808320805490849055600c90925290912060040154610ce29061010090046001600160a01b03163383613e9b565b6010546001600160a01b0316331480159061167057506012546001600160a01b03163314155b1561168e57604051631172e7cd60e01b815260040160405180910390fd5b611696613edd565b565b5f6116a1613152565b5f600c5f600a5f815481106116b8576116b8615857565b905f5260205f20015481526020019081526020015f2060040160019054906101000a90046001600160a01b031690505f6116f486838787613762565b6001600160a01b0383165f90815260116020526040812080549293508392909190611720908490615817565b90915550506040516001815281906001600160a01b038416905f80516020615d108339815191529060200160405180910390a395945050505050565b6010546001600160a01b0316331480159061178257506012546001600160a01b03163314155b156117a057604051631172e7cd60e01b815260040160405180910390fd5b600f8054905f6117af8361586b565b9190505550565b6117be613152565b604051630be0124960e31b8152600a6004820152736e222666c4b66bd73eb82dcee706622ddb7f025790635f00924890602401602060405180830381865af415801561180c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611830919061588e565b50565b61183b613f41565b6118436131be565b6001600160a01b0382165f908152601160205260408120547377418dd2729b349b9c910a5d5792b9eb638112e0906385831bc3908690869086906118886115d2613d7c565b6004805460065460405160e08a901b6001600160e01b03191681526118c29897969594936001600160a01b039384169390921691016158a9565b602060405180830381865af41580156118dd573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061190191906157ec565b90508015611971576001600160a01b0383165f908152601160205260408120805483929061193090849061582a565b9091555061193f90508161583d565b836001600160a01b03165f80516020615d10833981519152600160405161196891815260200190565b60405180910390a35b50610f8d6001600355565b611984613707565b5f600a5f8154811061199857611998615857565b5f91825260208083209190910154808352600c9091526040808320600580549082015492516331a9108f60e11b8152600481019390935292945092916001600160a01b031690636352211e90602401602060405180830381865afa158015611a02573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a269190615906565b6004549091506001600160a01b03163314801590611a4d5750336001600160a01b03821614155b8015611a685750335f9081526007602052604090205460ff16155b15611a8657604051631172e7cd60e01b815260040160405180910390fd5b600482015461010090046001600160a01b03165f90815260116020526040902054841115611af65760048281015461010090046001600160a01b03165f8181526011602052604090819020549051625ea67960e21b81529283019190915260248201526044015b60405180910390fd5b611b0082846131f5565b60408051606081018252600b5461ffff808216835262010000820481166020840152600160201b90910416918101919091525f90611b3e9086613f6b565b90508083600201548460010154611b559190615817565b611b5f9190615817565b851115611bd95760408051606081018252600b5461ffff808216835262010000820481166020840152600160201b909104169181019190915260028401546001850154611bb59291611bb091615817565b613215565b90508083600201548460010154611bcc9190615817565b611bd69190615817565b94505b600483015461010090046001600160a01b03165f9081526011602052604081208054879290611c0990849061582a565b90915550611c1890508561583d565b60048401546040515f81526101009091046001600160a01b0316905f80516020615d108339815191529060200160405180910390a3611c598385875f613237565b6004830154604051869161010090046001600160a01b0316907fd0ebd0e59305b50950c2dd23a57393012c1560208b5cbe40793920dff06ca1f1905f90a35050505050565b611d046040518061016001604052805f81526020015f81526020015f81526020015f81526020015f60ff1681526020015f6001600160a01b031681526020015f81526020015f151581526020015f151581526020015f61ffff1681526020015f81525090565b505f908152600c60209081526040918290208251610160810184528154815260018201549281019290925260028101549282019290925260038201546060820152600482015460ff8082166080840152610100918290046001600160a01b031660a0840152600584015460c08401526006840154808216151560e085015282810490911615159183019190915262010000900461ffff1661012082015260079091015461014082015290565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637e7f0cde6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e0d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115d79190615906565b611e39613707565b611e416131be565b5f600a5f81548110611e5557611e55615857565b5f918252602080832090910154808352600c9091526040909120909150611e7c81836131f5565b5f81600201548260010154611e919190615817565b60408051606081018252600b5461ffff808216835262010000820481166020840152600160201b9091041691810191909152909150611ed09082613215565b611eda9082615817565b9050611ee882848333613237565b610f8d82846132ae565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663803db96d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e0d573d5f803e3d5ffd5b611f5883613f95565b611f63838383614037565b8215610f8d576005546040516331a9108f60e11b81526004810185905233916001600160a01b031690636352211e90602401602060405180830381865afa158015611fb0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611fd49190615906565b6001600160a01b031603610f8d576005546040516301c3500b60e11b8152600481018590526001600160a01b0390911690630386a01690602401610f5f565b600a545f90808203612023575090565b5f600c5f600a5f8154811061203a5761203a615857565b905f5260205f20015481526020019081526020015f2060040160019054906101000a90046001600160a01b031690505f5b82811015612123575f600a828154811061208757612087615857565b5f918252602080832090910154808352600c909152604090912090915081158015906120b75750600681015460ff165b80156120d7575060048101546001600160a01b0385811661010090920416145b15612119576120ee828260010154835f0154613ce2565b816002015482600101546121029190615817565b61210c9190615817565b6121169087615817565b95505b505060010161206b565b50505090565b6010546001600160a01b0316331480159061214f57506012546001600160a01b03163314155b1561216d57604051631172e7cd60e01b815260040160405180910390fd5b6118306001613b38565b601054604051630d63d4af60e41b81526001600160a01b0383811660048301525f92169063d63d4af090602401602060405180830381865afa1580156121bf573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121e391906157ec565b6001600160a01b0383165f908152601160205260409020546122059190615817565b92915050565b5f818152600c6020526040812060018101549054829161222a9161582a565b5f938452600c6020526040909320600301549293915050565b600a545f805b82811015610f8d57600a818154811061226457612264615857565b905f5260205f2001549150612289600c5f8481526020019081526020015f20836131f5565b600101612249565b612299613152565b6001600160a01b0381166122c05760405163e6c4247b60e01b815260040160405180910390fd5b6040516001600160a01b038216907f332adaf3a6e946f864f6ebea80cab3d1c9c75665a77fddb3bedec14831902af2905f90a2600880546001600160a01b0319166001600160a01b0392909216919091179055565b61231d613e81565b6001600160a01b0381166123445760405163e6c4247b60e01b815260040160405180910390fd5b61234c613a4d565b6004546001600160a01b039182169116036123b6576004546040516001600160a01b038084169216907f49be0155de0e93ac374d2d6bc67e4d263b8b95d52eaa63f0c2e662503502bb10905f90a3600480546001600160a01b0319166001600160a01b0383161790555b600f8054905f6123c58361586b565b91905055506123d2613edd565b306001600160a01b031663e2fdcc176040518163ffffffff1660e01b8152600401602060405180830381865afa15801561240e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124329190615906565b60405163cb0d5ec560e01b81526001600160a01b038381166004830152919091169063cb0d5ec5906024015f604051808303815f87803b158015612474575f80fd5b505af1158015612486573d5f803e3d5ffd5b5050505050565b6004545f9085906001600160a01b03166124a782826134c3565b156127c3576124b461418b565b600f548c146124d65760405163e112ed9160e01b815260040160405180910390fd5b4284116124f657604051631da7447960e21b815260040160405180910390fd5b6001600160a01b03881673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee03612533576040516338f6e16160e21b815260040160405180910390fd5b6127108561ffff16111561255a57604051633e05588560e21b815260040160405180910390fd5b60405162f6020f60e71b8152737e10e3a201a6b2bfaf39306e92c7f48ca1c6d4e590637b01078090612594908b908b908e90600401615921565b5f6040518083038186803b1580156125aa575f80fd5b505af41580156125bc573d5f803e3d5ffd5b505060055460405163a4316a9760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301528b811660248301523060448301528a15156064830152909116925063a4316a9791506084016020604051808303815f875af115801561263f573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061266391906157ec565b925061267383898b8989896141e7565b600b545f9061ffff16156126c15760408051606081018252600b5461ffff808216835262010000820481166020840152600160201b90910416918101919091526126be908b8761445c565b90505b6126cc848d8d614491565b6003600e5460ff1660058111156126e5576126e5615394565b036126f6576126f46001613b38565b505b80156127b7575f612705611ef2565b9050737e10e3a201a6b2bfaf39306e92c7f48ca1c6d4e5637b0107808b61272a613a4d565b856040518463ffffffff1660e01b815260040161274993929190615921565b5f6040518083038186803b15801561275f575f80fd5b505af4158015612771573d5f803e3d5ffd5b505050506127808a8284613e9b565b6040516001600160a01b0382169083907fca9211125947f81af7269cf0465391c5e3810da3180aec16753095a3ecfcaf9e905f90a3505b6127c1888561453b565b505b50509998505050505050505050565b6127da61463b565b6127e2613e81565b5f838152600c602052604090206127f981856131f5565b600681015460ff1661281e5760405163d320557760e01b815260040160405180910390fd5b6001810154815461282f919061582a565b83111561284f57604051636180f03f60e11b815260040160405180910390fd5b82816001015f8282546128629190615817565b909155505f90506128746115d2613d7c565b9050600181600581111561288a5761288a615394565b146128a857604051636b263a7560e01b815260040160405180910390fd5b6001600160a01b0383166128c5576004546001600160a01b031692505b6128ce85614672565b826001600160a01b031684867fbec1750eb40c00e8dc2e1c84babbddd5779eaa06c951ab2c66416d05910e7a7360405160405180910390a460048201546124869061010090046001600160a01b03168486613e9b565b61292c613707565b5f600a5f8154811061294057612940615857565b5f918252602080832090910154808352600c909152604090912090915061296781836131f5565b60408051606081018252600b5461ffff808216835262010000820481166020840152600160201b90910416918101919091525f906129a59085613f6b565b905080826002015483600101546129bc9190615817565b6129c69190615817565b841115612a3b5760408051606081018252600b5461ffff808216835262010000820481166020840152600160201b909104169181019190915260028301546001840154612a179291611bb091615817565b90508082600201548360010154612a2e9190615817565b612a389190615817565b93505b610ea182848633613237565b5f600e5460ff166005811115612a5f57612a5f615394565b14612a7c5760405162dc149f60e41b815260040160405180910390fd5b61216d6147a3565b612a8c613152565b6001600160a01b038116612ab35760405163e6c4247b60e01b815260040160405180910390fd5b6006546040516001600160a01b038084169216907fcd6ba6b7da89e039d53b5d981527a893755342bb9d8e5c2f61f6638f1fb5192b905f90a3612af7816001611298565b600680546001600160a01b0319166001600160a01b038316179055600f8054905f612b218361586b565b919050555050565b5f805f805f805f805f600a5f81548110612b4557612b45615857565b5f918252602080832090910154808352600c9091526040822060018101549193509103612b855760405163517661c360e01b815260040160405180910390fd5b5f8281526020819052604090205460058201546004830154600184015484546001600160801b0380861695600160801b90041693879390926101009091046001600160a01b031691612bd8858383613ce2565b8860020154612be79190615817565b87879b509b509b509b509b509b509b509b50505050509091929394959697565b601254600160a01b900460ff1615612c315760405162dc149f60e41b815260040160405180910390fd5b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614612c7a57604051631172e7cd60e01b815260040160405180910390fd5b6012805460ff60a01b1916600160a01b179055612d518787878785601080546001600160a01b039384166001600160a01b03199182161790915560068054968416968216871790555f95865260076020908152604096879020805460ff1916600117905560088054951515600160a01b0260ff60a01b1990961695909517909455600480549590931694169390931790558151600b805492840151939094015161ffff908116600160201b0265ffff0000000019948216620100000263ffffffff1990941691909216179190911791909116179055565b601280546001600160a01b03199081166001600160a01b03868116919091179092556005805490911684831617905560408051898316815288831660208201528715158183015290517f00000000000000000000000000000000000000000000000000000000000000009092169133917f60a6a8d0d9d9da1752b88acb6a43a3b1bd49a74e3a2803a2f5cdf771570a9d39919081900360600190a350505050505050565b600a8181548110612e04575f80fd5b5f91825260209091200154905081565b612e1c613152565b612e276115d2613d7c565b6005811115612e3857612e38615394565b600214612e5857604051636ef5bcdd60e11b815260040160405180910390fd5b6118306004613b38565b84612e6c816147b3565b1561307757612e7961463b565b600f548714612e9b5760405163e112ed9160e01b815260040160405180910390fd5b6005546040516331a9108f60e11b8152600481018890526001600160a01b0390911690636352211e90602401602060405180830381865afa158015612ee2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f069190615906565b6001600160a01b0316336001600160a01b031614612f78576005546040516301c3500b60e11b8152600481018890526001600160a01b0390911690630386a016906024015f604051808303815f87803b158015612f61575f80fd5b505af1158015612f73573d5f803e3d5ffd5b505050505b428211612f9857604051631da7447960e21b815260040160405180910390fd5b5f868152600c602052604090206006015460ff16612fc95760405163d320557760e01b815260040160405180910390fd5b612fd4868585614491565b5f868152600c602052604080822060070180549085905590519091849189917f13d4af45b94d2742fb374afd916c2095bf9f35bf4ffaf4f5a59e83a1e734160e91a36130228787838661482e565b604080516001600160801b03808816825286166020820152908101849052869088907fd579197900c5c5a197c0ebb8917e008369a6ab1f438ae255ad400958441727289060600160405180910390a350610f88565b6005546040516331a9108f60e11b8152600481018390526001600160a01b0390911690636352211e90602401602060405180830381865afa1580156130be573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130e29190615906565b6001600160a01b03163303610f885760055460405162c4a23d60e61b8152600481018390526001600160a01b03909116906331288f40906024015f604051808303815f87803b158015613133575f80fd5b505af1158015613145573d5f803e3d5ffd5b5050505050505050505050565b6006546001600160a01b0316331461169657611696614b44565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610f8d908490614b5d565b6004546001600160a01b031633148015906131e85750335f9081526007602052604090205460ff16155b1561169657611696614b44565b5f613208828460010154855f0154614bc9565b9050610f8d838383614bf2565b5f612710836040015161ffff168361322d9190615945565b6115a1919061595c565b7373340ace314e340ef83a1c8492e1948791e7a395633314f41885600b86868661325f611ef2565b6040516001600160e01b031960e089901b16815260048101969096526024860194909452604485019290925260648401526001600160a01b0390811660848401521660a482015260c401611541565b600682015460ff166132d35760405163d320557760e01b815260040160405180910390fd5b6001820154156132f65760405163131689dd60e01b815260040160405180910390fd5b60068201805460ff1916905560405163059012cb60e41b8152600a600482015260248101829052736e222666c4b66bd73eb82dcee706622ddb7f0257906359012cb0906044015f6040518083038186803b158015613352575f80fd5b505af4158015613364573d5f803e3d5ffd5b50505050600a5f8154811061337b5761337b615857565b905f5260205f2001545f036133fe57604051630be0124960e31b8152600a6004820152736e222666c4b66bd73eb82dcee706622ddb7f025790635f00924890602401602060405180830381865af41580156133d8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133fc919061588e565b505b60095f815461340c9061597b565b909155506009545f03613425576134236003613b38565b505b60405181907f181e94957e370e71e9e1304078ded0653365b9eec82dc5841d7b79ea4010906c905f90a25050565b61345b6131be565b5f818152600c6020526040902061347281836131f5565b60408051606081018252600b5461ffff808216835262010000820481166020840152600160201b909104169181019190915260028201545f916134b491613215565b8260020154611eda9190615817565b5f336001600160a01b038416148015906134e65750336001600160a01b03831614155b15613503576040516282b42960e81b815260040160405180910390fd5b5f61350e8484614c4c565b6002546040519192506001600160801b0316905f90613537908290369086908690602001615990565b60408051601f1981840301815291815281516020928301205f81815260019093529120549091506001600160a01b0316613677575f803633856040516020016135839493929190615990565b60408051601f1981840301815291815281516020928301205f81815260019093529120549091506001600160a01b0316156135c4575f945050505050612205565b600280546010906135e490600160801b90046001600160801b03166159d6565b82546101009290920a6001600160801b038181021990931691831602179091555f828152600160205260408082208054336001600160a01b031990911617905551918516916001600160a01b0387169184917f2660d0d3de32c1dd599e48e65d80c5391779b7c865a8c340831442dfd41bf24f916136639136906159fb565b60405180910390a45f945050505050612205565b6002805460109061369790600160801b90046001600160801b0316615a29565b82546001600160801b039182166101009390930a92830291909202199091161790555f8181526001602052604080822080546001600160a01b03191690555182917f590cb0fad602b541ce3d8b8de5ea73f5db52e7bafb4fab2595dca5e904009ff191a250600195945050505050565b60095415806137445750600c5f600a5f8154811061372757613727615857565b905f5260205f20015481526020019081526020015f20600101545f145b156116965760405163e0d00bd360e01b815260040160405180910390fd5b5f836001600160a01b0316856001600160a01b0316036137f05760105460405163f07c570960e01b81526001600160a01b0387811660048301529091169063f07c5709906024016020604051808303815f875af11580156137c5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137e991906157ec565b9050613a45565b5f604051806101000160405280876001600160a01b03168152602001866001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637e7f0cde6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613877573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061389b9190615906565b6001600160a01b03908116825260105481166020808401919091528982165f908152601182526040908190205481850152600b5462010000900461ffff166060850152805163803db96d60e01b815290516080909401937f00000000000000000000000000000000000000000000000000000000000000009093169263803db96d926004808401939192918290030181865afa15801561393d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906139619190615906565b6001600160a01b0316815260200185858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92018290525093909452505060405163097f337760e41b8152929350918291507377418dd2729b349b9c910a5d5792b9eb638112e0906397f33770906139e4908690600401615a78565b6040805180830381865af41580156139fe573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a229190615b1e565b6001600160a01b038a165f908152601160205260409020559350613a4592505050565b949350505050565b5f80306001600160a01b031663e2fdcc176040518163ffffffff1660e01b8152600401602060405180830381865afa158015613a8b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613aaf9190615906565b6001600160a01b0316637df1f1b96040518163ffffffff1660e01b8152600401602060405180830381865afa158015613aea573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122059190615906565b600854600160a01b900460ff16611696576040516323b4ae8d60e11b815260040160405180910390fd5b5f816005811115613b4b57613b4b615394565b600e5460ff166005811115613b6257613b62615394565b03613b6b575090565b816005811115613b7d57613b7d615394565b6040517f2125b4f86fd7a6a349e4e174a768e7c98ec9b7d124822556b128e40a16b642f7905f90a2600e805483919060ff19166001836005811115613bc457613bc4615394565b0217905592915050565b6127108261ffff161115613bf557604051633e05588560e21b815260040160405180910390fd5b806002811115613c0757613c07615394565b60405161ffff841681527f1a99e4956c07ed7d092f4c19d5e3f9645fa5581c864ed136f4aa6b4bc95652e39060200160405180910390a25050565b8015801590613cc357506005546040516331a9108f60e11b81526004810183905233916001600160a01b031690636352211e90602401602060405180830381865afa158015613c93573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613cb79190615906565b6001600160a01b031614155b1561183057611830614b44565b5f61271061322d61ffff851684615945565b5f83815260208181526040808320815160608101835281546001600160801b038082168352600160801b9091041693810193909352600101549082018190528290613d2d904261582a565b9050613d5282602001516001600160801b03168686613d4c919061582a565b83614c69565b8251613d68906001600160801b03168784614c69565b613d729190615817565b9695505050505050565b5f80613d86614c7b565b90506001816005811115613d9c57613d9c615394565b14613da657919050565b613dae614e1d565b91505090565b600a545f908190808203613dcc57505f928392509050565b5f805b82811015613e7a57600a8181548110613dea57613dea615857565b905f5260205f2001549150815f0315613e72575f828152600c60205260408120600181015481549192918291613e5191859188917f000000000000000000000000000000000000000000000000000000000000000091613e4c91849190614bc9565b614e9a565b9092509050613e608289615817565b9750613e6c8188615817565b96505050505b600101613dcf565b5050509091565b6004546001600160a01b0316331461169657611696614b44565b6001600160a01b03831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14613ed357610f8d6001600160a01b038416838361316c565b610ea18282614f63565b600280546001600160801b03168082555f90613ef8906159d6565b82546001600160801b039182166101009390930a83810292021916179091556040517f69c9e9f4eccb7698db7fa39ee810271b5cf594d2d20bc00664bd5c82e6d3cca7905f90a2565b600260035403613f6457604051633ee5aeb560e01b815260040160405180910390fd5b6002600355565b5f826040015161ffff16612710613f829190615817565b604084015161322d9061ffff1684615945565b801580159061401657506005546040516331a9108f60e11b81526004810183905233916001600160a01b031690636352211e90602401602060405180830381865afa158015613fe6573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061400a9190615906565b6001600160a01b031614155b8015613cc357506004546001600160a01b0316331461183057611830614b44565b6101248111806140475750600481105b1561406557604051632c9dd1c960e01b815260040160405180910390fd5b6002546040515f91614089918591859133916001600160801b031690602001615990565b60408051601f1981840301815291815281516020928301205f81815260019093529120549091506001600160a01b0316806140d757604051630df0f4e960e41b815260040160405180910390fd5b6001600160a01b03811633146141005760405163110dc63f60e01b815260040160405180910390fd5b6002805460109061412090600160801b90046001600160801b0316615a29565b82546001600160801b039182166101009390930a92830291909202199091161790555f8281526001602052604080822080546001600160a01b03191690555183917f2d8bff7bc81a295ee86f540e195478665ae7503c42e2fe02600843e860a1d9db91a25050505050565b6001600e5460ff1660058111156141a4576141a4615394565b141580156141c957506003600e5460ff1660058111156141c6576141c6615394565b14155b1561169657604051634065aaf160e11b815260040160405180910390fd5b60405163a828d86760e01b815260048101859052602481018790526001600160a01b0380871660448301527f0000000000000000000000000000000000000000000000000000000000000000166064820152831515608482015261ffff831660a482015260c481018290527373340ace314e340ef83a1c8492e1948791e7a3959063a828d8679060e40161016060405180830381865af415801561428d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906142b19190615b5b565b5f878152600c60209081526040808320845181559184015160018084019190915590840151600283015560608401516003830155608084015160048301805460a087015160ff9093166001600160a81b0319909116176101006001600160a01b03909316830217905560c0850151600584015560e08501516006840180548388015161012089015161ffff1990921693151561ff001916939093179215159093029190911763ffff000019166201000061ffff9093169290920291909117905561014090930151600790910155600a805492830181558082527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a890920188905581546143bf576143bf615857565b905f5260205f2001545f0361444257604051630be0124960e31b8152600a6004820152736e222666c4b66bd73eb82dcee706622ddb7f025790635f00924890602401602060405180830381865af415801561441c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614440919061588e565b505b60095f81546144509061586b565b90915550505050505050565b5f644979cb9e0061446d428461582a565b855161447d9061ffff1686615945565b6144879190615945565b613a45919061595c565b5f838152600c602052604090206144a890846131f5565b604080516060810182526001600160801b0384811682528381166020808401918252428486019081525f89815291829052949020925190518216600160801b0291161781559051600190910155806001600160801b0316826001600160801b0316847f25c1e1d4e7c2d8cf90e129c222140a6e8e19922d0b7804800da69735d2ba42a060405160405180910390a4505050565b614548620249f05f614fd5565b506001600160a01b0382163b158061456e575061456c82633ac2031760e11b614ff2565b155b15614577575050565b5f826001600160a01b0316637584062e60e01b8360405160240161459d91815260200190565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516145db9190615c0b565b5f604051808303815f865af19150503d805f8114614614576040519150601f19603f3d011682016040523d82523d5f602084013e614619565b606091505b5050905080610f8d5760405163218d2a3b60e21b815260040160405180910390fd5b6001600e5460ff16600581111561465457614654615394565b1461169657604051634065aaf160e11b815260040160405180910390fd5b600a545f906146839060019061582a565b9050805f805b83811161248657600a81815481106146a3576146a3615857565b905f5260205f20015491508185146146e8578115806146c25750838314155b806146dc57505f828152600c602052604090206001015415155b61479357809250614793565b8383036146f6575050505050565b5f600a848154811061470a5761470a615857565b905f5260205f200154905080600a838154811061472957614729615857565b905f5260205f20018190555085600a858154811061474957614749615857565b905f5260205f2001819055508184877f7b69cfaa351659d85d9e52d41f55d1fb75626c6898dddfe1826b3fd7bcc4676e8460405161478991815260200190565b60405180910390a4505b61479c8161586b565b9050614689565b6147ab6150e5565b611696615186565b600480546005546040516331a9108f60e11b81529283018490525f92612205926001600160a01b03908116921690636352211e90602401602060405180830381865afa158015614805573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906148299190615906565b6134c3565b6005546040516331a9108f60e11b8152600481018690525f916001600160a01b031690636352211e90602401602060405180830381865afa158015614875573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906148999190615906565b5f868152600c60205260408120919250906148b481886131f5565b600b5461ffff1615614930575f6148cb428761582a565b60408051606081018252600b5461ffff80821683526201000082048116602080850191909152600160201b90920416828401525f8c8152600c90915291909120549192506149229161491d848961582a565b61445c565b61492c9084615817565b9250505b8515614a5157600b5461ffff161561498c5760408051606081018252600b5461ffff808216835262010000820481166020840152600160201b909104169181019190915261497f90878661445c565b6149899083615817565b91505b85815f015f82825461499e9190615817565b909155505060048181015460405162f6020f60e71b8152737e10e3a201a6b2bfaf39306e92c7f48ca1c6d4e592637b010780926149ef926101009091046001600160a01b03169188918c9101615921565b5f6040518083038186803b158015614a05575f80fd5b505af4158015614a17573d5f803e3d5ffd5b50506040518892508991507f61e34136bfe69c88fdd1fe3680d6a945c4315c058dde04552d23beeeae8ff9c0905f90a3614a51838861453b565b8115610f88575f614a60611ef2565b9050737e10e3a201a6b2bfaf39306e92c7f48ca1c6d4e5637b0107808360040160019054906101000a90046001600160a01b0316614a9c613a4d565b866040518463ffffffff1660e01b8152600401614abb93929190615921565b5f6040518083038186803b158015614ad1575f80fd5b505af4158015614ae3573d5f803e3d5ffd5b505050506004820154614b059061010090046001600160a01b03168285613e9b565b6040516001600160a01b0382169084907fca9211125947f81af7269cf0465391c5e3810da3180aec16753095a3ecfcaf9e905f90a35050505050505050565b604051631172e7cd60e01b815260040160405180910390fd5b5f8060205f8451602086015f885af180614b7c576040513d5f823e3d81fd5b50505f513d91508115614b93578060011415614ba0565b6001600160a01b0384163b155b15610ea157604051635274afe760e01b81526001600160a01b0385166004820152602401611aed565b5f614bd5848484613ce2565b5f9485526020859052604090942042600190910155509192915050565b600683015460ff16614c0357505050565b80836002015f828254614c169190615817565b9091555050604051819083907f3d8708181c6452c5711a2b4c6ed3f12149f6ea35f78549aba00a89d041e766ca905f90a3505050565b5f336001600160a01b03841614614c6357826115a1565b50919050565b5f644979cb9e008261447d8587615945565b600e545f9060ff166003816005811115614c9757614c97615394565b1480614cb457506004816005811115614cb257614cb2615394565b145b80614cd057506005816005811115614cce57614cce615394565b145b15614cda57919050565b600a545f5b81811015614e15575f600a8281548110614cfb57614cfb615857565b5f918252602080832090910154808352600c82526040928390208351610160810185528154815260018201549381019390935260028101549383019390935260038301546060830152600483015460ff80821660808501526001600160a01b03610100928390041660a0850152600585015460c0850152600685015480821615801560e0870181905284830490931615159386019390935261ffff6201000090910416610120850152600790940154610140840152909350909190614dbf57505f82115b8015614dd057508061014001514210155b15614e0b5760405182907fb68252a838273b60b79bf25a295eb103ddf70cd0d75c10e89e1c2d2fe8795109905f90a260029550505050505090565b5050600101614cdf565b509092915050565b601254604080516315e3197960e21b815290515f926001600160a01b03169163578c65e4916004808301926020929190829003018187875af1158015614e65573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614e89919061588e565b15614e945750600290565b50600190565b5f80614ea7868685614bf2565b600486810154604051633424d1dd60e11b81526101009091046001600160a01b03908116928201929092525f91861690636849a3ba90602401602060405180830381865afa158015614efb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614f1f91906157ec565b60018801546004890154919250614f3b9183919060ff16615227565b60028801546004890154919450614f579183919060ff16615227565b91505094509492505050565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114614fac576040519150601f19603f3d011682016040523d82523d5f602084013e614fb1565b606091505b50508091505080612205576040516353fa338760e01b815260040160405180910390fd5b5f80603f83619c4001026040850201603f5a021015949350505050565b5f826001600160a01b03163b5f0361500b57505f612205565b604080516001600160e01b0319841660248083019190915282518083039091018152604490910182526020810180516001600160e01b03166301ffc9a760e01b17905290515f9182916001600160a01b0387169161506891615c0b565b5f60405180830381855afa9150503d805f81146150a0576040519150601f19603f3d011682016040523d82523d5f602084013e6150a5565b606091505b50915091508115806150b957508051602014155b156150c8575f92505050612205565b808060200190518101906150dc919061588e565b95945050505050565b60105460408051638da5cb5b60e01b8152905130926001600160a01b031691638da5cb5b9160048083019260209291908290030181865afa15801561512c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906151509190615906565b6001600160a01b0316146116965760105460405163219f710160e11b81526001600160a01b039091166004820152602401611aed565b60125460408051638da5cb5b60e01b8152905130926001600160a01b031691638da5cb5b9160048083019260209291908290030181865afa1580156151cd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906151f19190615906565b6001600160a01b0316146116965760125460405163219f710160e11b81526001600160a01b039091166004820152602401611aed565b5f8084131561525f5761523b82600a615d01565b615246906001615945565b6152508585615945565b61525a919061595c565b613a45565b505f9392505050565b6001600160a01b0381168114611830575f80fd5b5f806040838503121561528d575f80fd5b823561529881615268565b915060208301356152a881615268565b809150509250929050565b5f602082840312156152c3575f80fd5b5035919050565b80356001600160801b03811681146152e0575f80fd5b919050565b5f602082840312156152f5575f80fd5b6115a1826152ca565b5f8083601f84011261530e575f80fd5b50813567ffffffffffffffff811115615325575f80fd5b60208301915083602082850101111561533c575f80fd5b9250929050565b5f805f60408486031215615355575f80fd5b833561536081615268565b9250602084013567ffffffffffffffff81111561537b575f80fd5b615387868287016152fe565b9497909650939450505050565b634e487b7160e01b5f52602160045260245ffd5b600681106153c457634e487b7160e01b5f52602160045260245ffd5b9052565b6020810161220582846153a8565b8015158114611830575f80fd5b5f80604083850312156153f4575f80fd5b82356153ff81615268565b915060208301356152a8816153d6565b604051610160810167ffffffffffffffff8111828210171561543f57634e487b7160e01b5f52604160045260245ffd5b60405290565b61ffff81168114611830575f80fd5b5f60608284031215615464575f80fd5b6040516060810181811067ffffffffffffffff8211171561549357634e487b7160e01b5f52604160045260245ffd5b60405290508082356154a481615445565b815260208301356154b481615445565b602082015260408301356154c781615445565b6040919091015292915050565b5f606082840312156154e4575f80fd5b6115a18383615454565b5f602082840312156154fe575f80fd5b81356115a181615268565b5f806040838503121561551a575f80fd5b50508035926020909101359150565b5f805f6060848603121561553b575f80fd5b833561554681615268565b9250602084013561555681615268565b929592945050506040919091013590565b5f610160820190508251825260208301516020830152604083015160408301526060830151606083015260808301516155a5608084018260ff169052565b5060a08301516155c060a08401826001600160a01b03169052565b5060c083015160c083015260e08301516155de60e084018215159052565b50610100838101511515908301526101208084015161ffff169083015261014092830151929091019190915290565b5f805f6040848603121561561f575f80fd5b83359250602084013567ffffffffffffffff81111561537b575f80fd5b5f805f805f805f805f6101208a8c031215615655575f80fd5b8935985061566560208b016152ca565b975061567360408b016152ca565b965060608a0135955060808a013561568a81615268565b945060a08a013561569a81615268565b935060c08a01356156aa816153d6565b925060e08a01356156ba81615445565b809250506101008a013590509295985092959850929598565b5f805f606084860312156156e5575f80fd5b833592506020840135915060408401356156fe81615268565b809150509250925092565b5f805f805f805f610120888a031215615720575f80fd5b873561572b81615268565b9650602088013561573b81615268565b9550604088013561574b816153d6565b9450606088013561575b81615268565b9350608088013561576b81615268565b925060a088013561577b81615268565b915061578a8960c08a01615454565b905092959891949750929550565b5f805f805f8060c087890312156157ad575f80fd5b8635955060208701359450604087013593506157cb606088016152ca565b92506157d9608088016152ca565b915060a087013590509295509295509295565b5f602082840312156157fc575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561220557612205615803565b8181038181111561220557612205615803565b5f600160ff1b820161585157615851615803565b505f0390565b634e487b7160e01b5f52603260045260245ffd5b5f6001820161587c5761587c615803565b5060010190565b80516152e0816153d6565b5f6020828403121561589e575f80fd5b81516115a1816153d6565b6001600160a01b0388811682528781166020830152604082018790526060820186905260e08201906158de60808401876153a8565b80851660a084015280841660c08401525098975050505050505050565b80516152e081615268565b5f60208284031215615916575f80fd5b81516115a181615268565b6001600160a01b039384168152919092166020820152604081019190915260600190565b808202811582820484141761220557612205615803565b5f8261597657634e487b7160e01b5f52601260045260245ffd5b500490565b5f8161598957615989615803565b505f190190565b8385823760609290921b6bffffffffffffffffffffffff19169190920190815260809190911b6fffffffffffffffffffffffffffffffff19166014820152602401919050565b5f6001600160801b038083168181036159f1576159f1615803565b6001019392505050565b60208152816020820152818360408301375f818301604090810191909152601f909201601f19160101919050565b5f6001600160801b03821680615a4157615a41615803565b5f190192915050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f60018060a01b03808451166020840152806020850151166040840152506040830151615ab460608401826001600160a01b03169052565b5060608301516001600160a01b038116608084015250608083015160a083015260a0830151615aee60c08401826001600160801b03169052565b5060c08301516001600160a01b03811660e08401525060e083015161010083810152613a45610120840182615a4a565b5f8060408385031215615b2f575f80fd5b505080516020909101519092909150565b805160ff811681146152e0575f80fd5b80516152e081615445565b5f6101608284031215615b6c575f80fd5b615b7461540f565b82518152602083015160208201526040830151604082015260608301516060820152615ba260808401615b40565b6080820152615bb360a084016158fb565b60a082015260c083015160c0820152615bce60e08401615883565b60e0820152610100615be1818501615883565b90820152610120615bf3848201615b50565b90820152610140928301519281019290925250919050565b5f82518060208501845e5f920191825250919050565b600181815b80851115615c5b57815f1904821115615c4157615c41615803565b80851615615c4e57918102915b93841c9390800290615c26565b509250929050565b5f82615c7157506001612205565b81615c7d57505f612205565b8160018114615c935760028114615c9d57615cb9565b6001915050612205565b60ff841115615cae57615cae615803565b50506001821b612205565b5060208310610133831016604e8410600b8410161715615cdc575081810a612205565b615ce68383615c21565b805f1904821115615cf957615cf9615803565b029392505050565b5f6115a160ff841683615c6356fe7dcdf49c7e92795e08b749f8dd551c92f7be794148ac2f9db089e2e67cbdd519a2646970667358221220c064787d8d63851835f7379097a4a578185dc9d64cf807d1fdd003945d341eff64736f6c634300081900330000000000000000000000006315b9ab8c81e8d7868a9795ec0e25d4d62e8757