954 txs
16.8k calls
constructor
constructor(address riskManager_, address asset_, address treasury_, address accountFactory, address liquidator)
functions
allowance
viewfunction allowance(address, address) view returns (uint256)
asset
viewfunction asset() view returns (address)
balanceOf
viewfunction balanceOf(address) view returns (uint256)
borrowPaused
viewfunction borrowPaused() view returns (bool)
calcUnrealisedDebt
viewfunction calcUnrealisedDebt() view returns (uint256 unrealisedDebt)
closeMarginAccount
viewfunction closeMarginAccount(address account) view
convertToAssets
viewfunction convertToAssets(uint256 shares) view returns (uint256)
convertToShares
viewfunction convertToShares(uint256 assets) view returns (uint256)
creditAllowance
viewfunction creditAllowance(address, address, address) view returns (uint256)
decimals
viewfunction decimals() view returns (uint8)
deposit
purefunction deposit(uint256, address) pure returns (uint256)
depositPaused
viewfunction depositPaused() view returns (bool)
DOMAIN_SEPARATOR
viewfunction DOMAIN_SEPARATOR() view returns (bytes32)
getInterestRateConfig
viewfunction getInterestRateConfig() view returns (uint72, uint72, uint72, uint16)
getLiquidationParameters
viewfunction getLiquidationParameters() view returns (uint16, uint16, uint16, uint16, uint80)
getOpenPosition
viewfunction getOpenPosition(address account) view returns (uint256 openPosition)
guardian
viewfunction guardian() view returns (address)
interestRate
viewfunction interestRate() view returns (uint80)
isValidVersion
viewfunction isValidVersion(uint256) view returns (bool)
liquidationPaused
viewfunction liquidationPaused() view returns (bool)
liquidityOf
viewfunction liquidityOf(address owner_) view returns (uint256 assets)
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)
mint
purefunction mint(uint256, address) pure returns (uint256)
name
viewfunction name() view returns (string)
nonces
viewfunction nonces(address) view returns (uint256)
openMarginAccount
viewfunction openMarginAccount(uint256 accountVersion) view returns (bool success, address numeraire, address liquidator_, uint256 minimumMargin_)
originationFee
viewfunction originationFee() view returns (uint8)
owner
viewfunction owner() view returns (address)
pauseTimestamp
viewfunction pauseTimestamp() view returns (uint96)
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)
redeem
purefunction redeem(uint256, address, address) pure returns (uint256)
repayPaused
viewfunction repayPaused() view returns (bool)
riskManager
viewfunction riskManager() view returns (address)
symbol
viewfunction symbol() view returns (string)
totalAssets
viewfunction totalAssets() view returns (uint256 totalDebt)
totalLiquidity
viewfunction totalLiquidity() view returns (uint256 totalLiquidity_)
totalSupply
viewfunction totalSupply() view returns (uint256)
transfer
purefunction transfer(address, uint256) pure returns (bool)
transferFrom
purefunction transferFrom(address, address, uint256) pure returns (bool)
withdraw
purefunction withdraw(uint256, address, address) pure returns (uint256)
withdrawPaused
viewfunction withdrawPaused() view returns (bool)
addTranche
nonpayablefunction addTranche(address tranche, uint16 interestWeight_)
approve
nonpayablefunction approve(address spender, uint256 amount) returns (bool)
approveBeneficiary
nonpayablefunction approveBeneficiary(address beneficiary, uint256 amount, address account)
auctionRepay
nonpayablefunction auctionRepay(uint256 startDebt, uint256 minimumMargin_, uint256 amount, address account, address bidder) returns (bool earlyTerminate)
borrow
nonpayablefunction borrow(uint256 amount, address account, address to, bytes3 referrer)
changeGuardian
nonpayablefunction changeGuardian(address guardian_)
depositInLendingPool
nonpayablefunction depositInLendingPool(uint256 assets, address from)
donateToTranche
nonpayablefunction donateToTranche(uint256 trancheIndex, uint256 assets)
flashAction
nonpayablefunction flashAction(uint256 amountBorrowed, address account, address actionTarget, bytes actionData, bytes3 referrer)
flashActionCallback
nonpayablefunction flashActionCallback(bytes callbackData)
liquidityOfAndSync
nonpayablefunction liquidityOfAndSync(address owner_) returns (uint256 assets)
pause
nonpayablefunction pause()
permit
nonpayablefunction permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s)
repay
nonpayablefunction repay(uint256 amount, address account)
setAccountVersion
nonpayablefunction setAccountVersion(uint256 accountVersion, bool valid)
setInterestParameters
nonpayablefunction setInterestParameters(uint72 baseRatePerYear_, uint72 lowSlopePerYear_, uint72 highSlopePerYear_, uint16 utilisationThreshold_)
setInterestWeightTranche
nonpayablefunction setInterestWeightTranche(uint256 index, uint16 interestWeight_)
setLiquidationParameters
nonpayablefunction setLiquidationParameters(uint16 initiationWeight_, uint16 penaltyWeight_, uint16 terminationWeight_, uint16 minRewardWeight_, uint80 maxReward_)
setLiquidationWeightTranche
nonpayablefunction setLiquidationWeightTranche(uint16 liquidationWeight)
setMinimumMargin
nonpayablefunction setMinimumMargin(uint96 minimumMargin_)
setOriginationFee
nonpayablefunction setOriginationFee(uint8 originationFee_)
setRiskManager
nonpayablefunction setRiskManager(address riskManager_)
settleLiquidationHappyFlow
nonpayablefunction settleLiquidationHappyFlow(address account, uint256 startDebt, uint256 minimumMargin_, address terminator)
settleLiquidationUnhappyFlow
nonpayablefunction settleLiquidationUnhappyFlow(address account, uint256 startDebt, uint256 minimumMargin_, address terminator)
setTreasury
nonpayablefunction setTreasury(address treasury_)
setTreasuryWeights
nonpayablefunction setTreasuryWeights(uint16 interestWeight_, uint16 liquidationWeight)
skim
nonpayablefunction skim()
startLiquidation
nonpayablefunction startLiquidation(address initiator, uint256 minimumMargin_) returns (uint256 startDebt)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
unpause
nonpayablefunction unpause()
unpause
nonpayablefunction unpause(bool repayPaused_, bool withdrawPaused_, bool borrowPaused_, bool depositPaused_, bool liquidationPaused_)
updateInterestRate
nonpayablefunction updateInterestRate()
withdrawFromLendingPool
nonpayablefunction withdrawFromLendingPool(uint256 assets, address receiver)
events
Approval
event Approval(address indexed owner, address indexed spender, uint256 amount)
AuctionFinished
event AuctionFinished(address indexed account, address indexed creditor, uint256 startDebt, uint256 initiationReward, uint256 terminationReward, uint256 penalty, uint256 badDebt, uint256 surplus)
AuctionStarted
event AuctionStarted(address indexed account, address indexed creditor, uint128 openDebt)
Borrow
event Borrow(address indexed account, address indexed by, address to, uint256 amount, uint256 fee, bytes3 indexed referrer)
CreditApproval
event CreditApproval(address indexed account, address indexed owner, address indexed beneficiary, uint256 amount)
Deposit
event Deposit(address indexed caller, address indexed owner, uint256 assets, uint256 shares)
GuardianChanged
event GuardianChanged(address indexed user, address indexed newGuardian)
InterestSynced
event InterestSynced(uint256 interest)
InterestWeightTrancheUpdated
event InterestWeightTrancheUpdated(address indexed tranche, uint8 indexed trancheIndex, uint16 interestWeight)
LiquidationWeightTrancheUpdated
event LiquidationWeightTrancheUpdated(uint16 liquidationWeight)
OwnershipTransferred
event OwnershipTransferred(address indexed user, address indexed newOwner)
PauseFlagsUpdated
event PauseFlagsUpdated(bool repayPauseFlagsUpdated, bool withdrawPauseFlagsUpdated, bool borrowPauseFlagsUpdated, bool depositPauseFlagsUpdated, bool liquidationPauseFlagsUpdated)
PoolStateUpdated
event PoolStateUpdated(uint256 totalDebt, uint256 totalLiquidity, uint80 interestRate)
Repay
event Repay(address indexed account, address indexed from, uint256 amount)
RiskManagerUpdated
event RiskManagerUpdated(address riskManager)
TranchePopped
event TranchePopped(address tranche)
Transfer
event Transfer(address indexed from, address indexed to, uint256 amount)
TreasuryWeightsUpdated
event TreasuryWeightsUpdated(uint16 interestWeight, uint16 liquidationWeight)
ValidAccountVersionsUpdated
event ValidAccountVersionsUpdated(uint256 indexed accountVersion, bool valid)
Withdraw
event Withdraw(address indexed caller, address indexed receiver, address indexed owner, uint256 assets, uint256 shares)
errors
AmountExceedsBalance
error AmountExceedsBalance()
AuctionOngoing
error AuctionOngoing()
CoolDownPeriodNotPassed
error CoolDownPeriodNotPassed()
FunctionIsPaused
error FunctionIsPaused()
FunctionNotImplemented
error FunctionNotImplemented()
InvalidVersion
error InvalidVersion()
IsNotAnAccount
error IsNotAnAccount()
IsNotAnAccountWithDebt
error IsNotAnAccountWithDebt()
LiquidationWeightsTooHigh
error LiquidationWeightsTooHigh()
NonExistingTranche
error NonExistingTranche()
OnlyGuardian
error OnlyGuardian()
OpenPositionNonZero
error OpenPositionNonZero()
TrancheAlreadyExists
error TrancheAlreadyExists()
Unauthorized
error Unauthorized()
Unauthorized
error Unauthorized()
ZeroAmount
error ZeroAmount()
ZeroShares
error ZeroShares()
creation bytecode
0x61014060405234801562000011575f80fd5b506040516200646438038062006464833981016040819052620000349162000371565b8380816001600160a01b03166306fdde036040518163ffffffff1660e01b81526004015f60405180830381865afa15801562000072573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526200009b919081019062000425565b604051602001620000ad9190620004d8565b604051602081830303815290604052826001600160a01b03166395d89b416040518163ffffffff1660e01b81526004015f60405180830381865afa158015620000f8573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405262000121919081019062000425565b6040516020016200013391906200051a565b6040516020818303038152906040528181846001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000181573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001a7919062000549565b5f80546001600160a01b0319163390811782556040518e9282917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350620001f2816200026a565b506005620002018482620005fc565b506006620002108382620005fc565b5060ff81166080524660a05262000226620002be565b60c052505050506001600160a01b0391821660e05250600f80546001600160a01b031916958216959095179094555090821661010052166101205250620007429050565b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527f6d9a586ef7be36e9ed3db326a9c62cce6c939c7ddae2c48f8f35562dce4fcd729060200160405180910390a150565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6005604051620002f19190620006c8565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b6001600160a01b03811681146200036e575f80fd5b50565b5f805f805f60a0868803121562000386575f80fd5b8551620003938162000359565b6020870151909550620003a68162000359565b6040870151909450620003b98162000359565b6060870151909350620003cc8162000359565b6080870151909250620003df8162000359565b809150509295509295909350565b634e487b7160e01b5f52604160045260245ffd5b5f5b838110156200041d57818101518382015260200162000403565b50505f910152565b5f6020828403121562000436575f80fd5b81516001600160401b03808211156200044d575f80fd5b818401915084601f83011262000461575f80fd5b815181811115620004765762000476620003ed565b604051601f8201601f19908116603f01168101908382118183101715620004a157620004a1620003ed565b81604052828152876020848701011115620004ba575f80fd5b620004cd83602083016020880162000401565b979650505050505050565b69020b931b0b234b0ab19160b51b81525f8251620004fe81600a85016020870162000401565b64081119589d60da1b600a939091019283015250600f01919050565b653230b931ab1960d11b81525f82516200053c81600685016020870162000401565b9190910160060192915050565b5f602082840312156200055a575f80fd5b815160ff811681146200056b575f80fd5b9392505050565b600181811c908216806200058757607f821691505b602082108103620005a657634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115620005f757805f5260205f20601f840160051c81016020851015620005d35750805b601f840160051c820191505b81811015620005f4575f8155600101620005df565b50505b505050565b81516001600160401b03811115620006185762000618620003ed565b620006308162000629845462000572565b84620005ac565b602080601f83116001811462000666575f84156200064e5750858301515b5f19600386901b1c1916600185901b178555620006c0565b5f85815260208120601f198616915b82811015620006965788860151825594840194600190910190840162000675565b5085821015620006b457878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b5f808354620006d78162000572565b60018281168015620006f25760018114620007085762000736565b60ff198416875282151583028701945062000736565b875f526020805f205f5b858110156200072d5781548a82015290840190820162000712565b50505082870194505b50929695505050505050565b60805160a05160c05160e0516101005161012051615c78620007ec5f395f8181610ff40152818161125501528181611b28015261234c01525f81816118e401528181611ff6015261241e01525f81816105e801528181610dce01528181611578015281816116ae015281816117ad01528181611b830152818161225501528181612329015281816126ae0152613f9501525f6110a101525f61107101525f6105940152615c785ff3fe608060405234801561000f575f80fd5b506004361061046f575f3560e01c8063894bacc91161024d578063bcb4bbea11610140578063d905777e116100bf578063ee02e45411610084578063ee02e45414610b4d578063ef8b30f714610b60578063f0f4426014610b73578063f2fde38b14610b86578063f5f9a4aa14610b99575f80fd5b8063d905777e14610acd578063dd62ed3e14610af5578063e11a0b8314610b1f578063e6b75aa514610b27578063e970a25f14610b3a575f80fd5b8063ce76756f11610105578063ce76756f14610a78578063ce96cb7714610a80578063d215f8a014610a93578063d505accf14610aa6578063d53dc73914610ab9575f80fd5b8063bcb4bbea14610a2b578063c11002df14610a3f578063c63d75b614610650578063c6e6f59214610a52578063ce67805a14610a65575f80fd5b8063acb70815116101cc578063b73c02ff11610191578063b73c02ff14610946578063b8bb5c4214610968578063ba08765214610938578063baf5dc441461097c578063bb278a09146109ac575f80fd5b8063acb70815146108ce578063ad55a588146108e1578063ad84f341146108f4578063b3d7f6b914610925578063b460af9414610938575f80fd5b80639086c3a1116102125780639086c3a11461089257806392d5f9f0146108a557806394bf804d1461072457806395d89b41146108b8578063a9059cbb146108c0575f80fd5b8063894bacc9146108025780638994685f146108155780638c480523146108285780638da5cb5b1461086d5780638dfaafea1461087f575f80fd5b80633f4ba83a116103655780636e553f65116102e45780637ecebe00116102a95780637ecebe00146107a25780637f3357a4146107c157806383cc645e146107d45780638456cb59146107e757806385e5ce4e146107ef575f80fd5b80636e553f651461072457806370a082311461073257806372b5e923146107515780637c3a00fd146107645780637db71c4d1461078f575f80fd5b80634cdad5061161032a5780634cdad5061461068a5780634da1f9a81461069d5780635d6af166146106b057806362c9b0f0146106fe57806362ca846014610711575f80fd5b80633f4ba83a146106355780633fc1e6911461063d578063402d267d14610650578063452a9320146106645780634784266314610677575f80fd5b80631e9dbce6116103f1578063313ce567116103b6578063313ce5671461058f57806332c97c26146105c85780633644e515146105db57806338d52e0f146105e35780633c4750df14610622575f80fd5b80631e9dbce61461052e57806323b872dd146105425780632ce1ed15146105555780632f3ffb9f146105685780632fcb4f041461057c575f80fd5b80630a28a477116104375780630a28a477146104ed57806315770f921461050057806318160ddd146105085780631dd19cb4146105115780631e8658151461051b575f80fd5b806301e1d1141461047357806302befd241461048e57806306fdde03146104b257806307a2d13a146104c7578063095ea7b3146104da575b5f80fd5b61047b610bac565b6040519081526020015b60405180910390f35b6001546104a290600160b81b900460ff1681565b6040519015158152602001610485565b6104ba610be9565b60405161048591906152b1565b61047b6104d53660046152c3565b610c75565b6104a26104e83660046152ee565b610ca1565b61047b6104fb3660046152c3565b610d0d565b61047b610d2c565b61047b60075481565b610519610d72565b005b610519610529366004615328565b610ebd565b6001546104a290600160a01b900460ff1681565b6104a2610550366004615341565b610f0f565b61051961056336600461537f565b610f29565b6001546104a290600160a81b900460ff1681565b61051961058a36600461537f565b610f53565b6105b67f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff9091168152602001610485565b6105196105d636600461539a565b610fc7565b61047b61106e565b61060a7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610485565b61047b61063036600461537f565b6110c3565b61051961115b565b61051961064b36600461539a565b611228565b61047b61065e36600461537f565b505f1990565b60015461060a906001600160a01b031681565b60025461060a906001600160a01b031681565b61047b6106983660046152c3565b611500565b6105196106ab3660046153e1565b61150a565b600c54600d5460408051600160501b840468ffffffffffffffffff9081168252600160981b9094048416602082015292821690830152600160481b900461ffff166060820152608001610485565b61051961070c3660046153e1565b6115fa565b61051961071f36600461537f565b6116f6565b61047b6105503660046153e1565b61047b61074036600461537f565b60086020525f908152604090205481565b61051961075f36600461540f565b611728565b600c54610777906001600160501b031681565b6040516001600160501b039091168152602001610485565b61051961079d36600461542f565b611836565b61047b6107b036600461537f565b600a6020525f908152604090205481565b6105196107cf3660046154b1565b611890565b6104a26107e236600461552e565b611af9565b610519611c71565b61047b6107fd3660046152ee565b611d64565b61047b61081036600461537f565b611f79565b610519610823366004615580565b611f82565b61083b6108363660046152c3565b612302565b604051610485949392919093151584526001600160a01b03928316602085015291166040830152606082015260800190565b5f5461060a906001600160a01b031681565b61051961088d3660046155df565b612384565b6105196108a03660046155f8565b6123fd565b6105196108b3366004615637565b61251b565b6104ba612644565b6104a26105503660046152ee565b6105196108dc3660046153e1565b612651565b6105196108ef366004615677565b61273d565b5f5461090d90600160a01b90046001600160601b031681565b6040516001600160601b039091168152602001610485565b61047b6109333660046152c3565b612770565b61047b610550366004615698565b6104a26109543660046152c3565b60046020525f908152604090205460ff1681565b600d546105b690600160781b900460ff1681565b61047b61098a3660046156cc565b601660209081525f938452604080852082529284528284209052825290205481565b6109ed601054600f5462010000820461ffff908116936401000000008404821693600160301b8104831693921691600160b01b90046001600160501b031690565b6040805161ffff968716815294861660208601529285169284019290925290921660608201526001600160501b03909116608082015260a001610485565b6001546104a290600160b01b900460ff1681565b61047b610a4d36600461537f565b61278e565b61047b610a603660046152c3565b612798565b610519610a733660046156f9565b6127b7565b6105196128fc565b61047b610a8e36600461537f565b61291d565b610519610aa136600461575b565b61293e565b610519610ab436600461577c565b612acb565b6001546104a290600160c01b900460ff1681565b61047b610adb36600461537f565b6001600160a01b03165f9081526008602052604090205490565b61047b610b033660046157e5565b600960209081525f928352604080842090915290825290205481565b61047b612d09565b610519610b35366004615811565b612d7e565b610519610b4836600461582d565b612f4c565b610519610b5b3660046158a6565b6130b4565b61047b610b6e3660046152c3565b613179565b610519610b8136600461537f565b613183565b610519610b9436600461537f565b6131ce565b610519610ba73660046158ec565b613241565b600d545f904263ffffffff908116600160581b9092041614610be257610bd0612d09565b600b54610bdd919061593f565b905090565b50600b5490565b60058054610bf690615952565b80601f0160208091040260200160405190810160405280929190818152602001828054610c2290615952565b8015610c6d5780601f10610c4457610100808354040283529160200191610c6d565b820191905f5260205f20905b815481529060010190602001808311610c5057829003601f168201915b505050505081565b6007545f908015610c9857610c93610c8b610bac565b849083613286565b610c9a565b825b9392505050565b335f8181526009602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610cfb9086815260200190565b60405180910390a35060015b92915050565b6007545f908015610c9857610c9381610d24610bac565b8591906132a9565b600d545f904263ffffffff908116600160581b9092041614610d6257610d50612d09565b600e546001600160801b031601905090565b50600e546001600160801b031690565b610d7a6132c4565b600f54600160a01b900461ffff1615610da657604051639331280d60e01b815260040160405180910390fd5b600e54600b546040516370a0823160e01b81523060048201525f926001600160801b031691907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610e1b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e3f919061598a565b610e49919061593f565b610e5391906159a1565b600e54909150610e6d906001600160801b03168201613348565b600e80546001600160801b0319166001600160801b03928316178155600f546001600160a01b03165f908152601560205260409020805493909301909255600b549154610ebb92911661335c565b565b5f546001600160a01b03163314610eef5760405162461bcd60e51b8152600401610ee6906159b4565b60405180910390fd5b600d805460ff909216600160781b0260ff60781b19909216919091179055565b5f60405163ced4f63360e01b815260040160405180910390fd5b610f328161291d565b15610f5057604051632fd6c94960e21b815260040160405180910390fd5b50565b5f546001600160a01b03163314610f7c5760405162461bcd60e51b8152600401610ee6906159b4565b600180546001600160a01b0319166001600160a01b03831690811790915560405133907fa14fc14d8620a708a896fd11392a235647d99385500a295f0d7da2a258b2e967905f90a350565b600154600160c01b900460ff1615610ff25760405163bbc5234f60e01b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316331461103a576040516282b42960e81b815260040160405180910390fd5b6110426132c4565b61104f848484845f613401565b600b54600e5461106891906001600160801b031661335c565b50505050565b5f7f0000000000000000000000000000000000000000000000000000000000000000461461109e57610bdd61358b565b507f000000000000000000000000000000000000000000000000000000000000000090565b600d545f904263ffffffff908116600160581b909204161461113c576001600160a01b0382165f90815260146020526040812054600d5461111a9190600160801b900462ffffff16611113612d09565b91906132a9565b6001600160a01b0384165f908152601560205260409020540191506111569050565b506001600160a01b0381165f908152601560205260409020545b919050565b5f5462278d009061117d908290600160a01b90046001600160601b031661593f565b421161119c5760405163036a87d960e21b815260040160405180910390fd5b6001805464ff0000ffff60a01b198116909155604080515f8082526020820181905260ff600160b01b61ffff60a01b199095169485048116151593830193909352600160b81b9093049091161515606082015260808101919091527ff2971de95199967f91df0bcc4cfca74d65c7c48e619271f896873fdca0aae4ec9060a0015b60405180910390a150565b600154600160c01b900460ff16156112535760405163bbc5234f60e01b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316331461129b576040516282b42960e81b815260040160405180910390fd5b6112a36132c4565b5f805f6112b08686613624565b6001600160a01b038a165f9081526008602052604081205493965091945092506112d982610c75565b90505f6112e6848661593f565b82111561133a5750600e548482038490039061130c9082906001600160801b03166159a1565b600e80546001600160801b0319166001600160801b039290921691909117905561133581613701565b61140c565b5f82611346878761593f565b61135091906159a1565b905084831061138b576001600160a01b0388165f908152601560205260408120805483929061138090849061593f565b909155506113ca9050565b6001600160a01b0388165f90815260156020526040812080548892906113b290849061593f565b909155506113ca90506113c587836159a1565b613885565b600e546113ea906113e59083906001600160801b031661593f565b613348565b600e80546001600160801b0319166001600160801b0392909216919091179055505b6114168a8461397d565b81600b5f82825461142791906159a1565b909155505060408051838152602081018590526001600160a01b038c1691829133917ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db910160405180910390a461147c6139f7565b604080518a81526020810188905290810186905260608101859052608081018290525f60a082015230906001600160a01b038c16907f212af1f2c2f6bd8194697adfafd5ef352c5fc730c77be9a8d25a2ab21668e6749060c00160405180910390a35050600b54600e5461106895509093506001600160801b0316915061335c9050565b5f610d0782610c75565b600154600160b81b900460ff16156115355760405163bbc5234f60e01b815260040160405180910390fd5b335f9081526013602052604090205460ff16611563576040516282b42960e81b815260040160405180910390fd5b61156b6132c4565b6115a06001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016823085613aaa565b335f908152601560205260409020805483019055600e546115cb906001600160801b03168301613348565b600e80546001600160801b0319166001600160801b03929092169182179055600b546115f69161335c565b5050565b600154600160a81b900460ff16156116255760405163bbc5234f60e01b815260040160405180910390fd5b61162d6132c4565b335f9081526015602052604090205482111561165c576040516312d5633960e31b815260040160405180910390fd5b335f90815260156020526040902080548390039055600e54611689906001600160801b0316839003613348565b600e80546001600160801b0319166001600160801b03929092169190911790556116dd7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168284613b3b565b600b54600e546115f691906001600160801b031661335c565b5f546001600160a01b0316331461171f5760405162461bcd60e51b8152600401610ee6906159b4565b610f5081613bb8565b600154600160b81b900460ff16156117535760405163bbc5234f60e01b815260040160405180910390fd5b61175b6132c4565b805f0361177b57604051631f2a200560e01b815260040160405180910390fd5b5f6012838154811061178f5761178f6159da565b5f918252602090912001546001600160a01b0390811691506117d5907f000000000000000000000000000000000000000000000000000000000000000016333085613aaa565b6001600160a01b0381165f908152601560205260409020805483019055600e54611809906001600160801b03168301613348565b600e80546001600160801b0319166001600160801b03929092169182179055600b546115f692509061335c565b5f546001600160a01b0316331461185f5760405162461bcd60e51b8152600401610ee6906159b4565b600e80546001600160601b03909216600160801b026bffffffffffffffffffffffff60801b19909216919091179055565b600154600160b01b900460ff16156118bb5760405163bbc5234f60e01b815260040160405180910390fd5b6118c36132c4565b604051632f91bba760e21b81526001600160a01b0386811660048301525f917f00000000000000000000000000000000000000000000000000000000000000009091169063be46ee9c90602401602060405180830381865afa15801561192b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061194f91906159ee565b90506001600160a01b0381166119785760405163fba55c4f60e01b815260040160405180910390fd5b6001600160a01b03811633146119d4576001600160a01b038087165f9081526016602090815260408083209385168352928152828220338352905220545f19146119d4576040516282b42960e81b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b038881169190911790915560408051602081018a9052918716908201523360608201526001600160e81b0319831660808201525f9060a00160408051601f1981840301815290829052633d7e00df60e11b825291505f906001600160a01b03891690637afc01be90611a659085908b908b908b90600401615a09565b6020604051808303815f875af1158015611a81573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611aa5919061598a565b5f8181526004602052604090205490915060ff16611ad65760405163a9146eeb60e01b815260040160405180910390fd5b5050600b54600e54611af192506001600160801b031661335c565b505050505050565b6001545f90600160c01b900460ff1615611b265760405163bbc5234f60e01b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163314611b6e576040516282b42960e81b815260040160405180910390fd5b611b766132c4565b611bab6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016833087613aaa565b5f611bb58461291d565b9050805f03611bd757604051638276ded760e01b815260040160405180910390fd5b848111611bf55760019150611bf184888886858a03613401565b8094505b611c00853086613c06565b50826001600160a01b0316846001600160a01b03167f05f2eeda0e08e4b437f487c8d7d29b14537d15e3488170dc3de5dbdf8dac468487604051611c4691815260200190565b60405180910390a350600b54600e54611c6891906001600160801b031661335c565b95945050505050565b6001546001600160a01b03163314611c9c57604051636570ecab60e11b815260040160405180910390fd5b5f54622a300090611cbe908290600160a01b90046001600160601b031661593f565b4211611cdd5760405163036a87d960e21b815260040160405180910390fd5b5f80546001600160a01b0316600160a01b426001600160601b0316021790556001805464ffffffffff60a01b191664010101010160a01b17815560408051828152602081018390529081018290526060810182905260808101919091527ff2971de95199967f91df0bcc4cfca74d65c7c48e619271f896873fdca0aae4ec9060a00161121d565b6001545f90600160c01b900460ff1615611d915760405163bbc5234f60e01b815260040160405180910390fd5b611d996132c4565b611da23361291d565b9050805f03611dc457604051638276ded760e01b815260040160405180910390fd5b5f805f611dd18486613624565b91945092509050611df682611de6838661593f565b611df0919061593f565b33613ca4565b506001600160a01b0386165f9081526015602052604081208054859290611e1e90849061593f565b9091555050600e54611e3e906113e59085906001600160801b031661593f565b600e80546001600160801b0319166001600160801b0392909216919091179055600f54600160a01b900461ffff16158015611e7a575060125415155b15611ef857601280545f198101908110611e9657611e966159da565b5f91825260209091200154604051633dd217f760e21b8152600160048201526001600160a01b039091169063f7485fdc906024015f604051808303815f87803b158015611ee1575f80fd5b505af1158015611ef3573d5f803e3d5ffd5b505050505b600f805461ffff60a01b198116600160a01b9182900461ffff908116600101169091021790556040516001600160801b0385168152309033907f846a4e40815baaa2b21f6db4e117bb994f314fdeb45061f3ae3101e3177693b49060200160405180910390a35050600b54600e54610d0792506001600160801b031661335c565b5f61113c6132c4565b600154600160b01b900460ff1615611fad5760405163bbc5234f60e01b815260040160405180910390fd5b611fb56132c4565b835f03611fd557604051631f2a200560e01b815260040160405180910390fd5b604051632f91bba760e21b81526001600160a01b0384811660048301525f917f00000000000000000000000000000000000000000000000000000000000000009091169063be46ee9c90602401602060405180830381865afa15801561203d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061206191906159ee565b90506001600160a01b03811661208a5760405163fba55c4f60e01b815260040160405180910390fd5b600d545f906120a7908790600160781b900460ff16612710613286565b6120b1908761593f565b90506001600160a01b0382163314612132576001600160a01b038086165f9081526016602090815260408083209386168352928152828220338352905220545f1981146121305761210282826159a1565b6001600160a01b038088165f9081526016602090815260408083209388168352928152828220338352905220555b505b61213c8186613ca4565b508086146121a057600e5461215e906001600160801b03168201879003613348565b600e80546001600160801b0319166001600160801b0392909216919091179055600f546001600160a01b03165f90815260156020526040902080548783030190555b5f856001600160a01b031663055493676121b98861291d565b6040518263ffffffff1660e01b81526004016121d791815260200190565b6020604051808303815f875af11580156121f3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612217919061598a565b5f8181526004602052604090205490915060ff166122485760405163a9146eeb60e01b815260040160405180910390fd5b61227c6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168689613b3b565b6001600160e81b03198416336001600160a01b0388167f921c81c17e72f815c88a3e0fa28e7e709d56f0c5832e17b4bcc606dc9ee1a611888b6122bf81896159a1565b604080516001600160a01b03909416845260208401929092529082015260600160405180910390a45050600b54600e5461106892506001600160801b031661335c565b5f8181526004602052604081205481908190819060ff161561237d575050600e54600192507f000000000000000000000000000000000000000000000000000000000000000091507f000000000000000000000000000000000000000000000000000000000000000090600160801b90046001600160601b03165b9193509193565b5f546001600160a01b031633146123ad5760405162461bcd60e51b8152600401610ee6906159b4565b600d805461ffff60b81b1916600160b81b61ffff8416908102919091179091556040519081527f22e0ae0f91efd4f8765c4f89e4cf3876cf3b8ea47337e1415d393cb9dfb9bd8b9060200161121d565b604051632f91bba760e21b81526001600160a01b03828116600483015233917f00000000000000000000000000000000000000000000000000000000000000009091169063be46ee9c90602401602060405180830381865afa158015612465573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061248991906159ee565b6001600160a01b0316146124af576040516282b42960e81b815260040160405180910390fd5b6001600160a01b038181165f8181526016602090815260408083203380855290835281842095891680855295835292819020879055518681529192917f9c3c3fddd897f6c3dce14f62fcc742f199fb00b47c0664b980cbdea1be127411910160405180910390a4505050565b5f546001600160a01b031633146125445760405162461bcd60e51b8152600401610ee6906159b4565b61254c6132c4565b600d5461ffff8381169161257491600160981b82041690600160801b900462ffffff16615a5c565b61257e9190615a7f565b600d805462ffffff60801b1916600160801b62ffffff9390931692909202919091178155600f546001600160a01b03165f9081526014602090815260409182902061ffff86811691829055845463ffffffff60981b1916600160981b830261ffff60a81b191617600160a81b918716918202179094558251908152908101929092527f6ee1bca4e0a0dbb7e71fc4333f590901e270b3d7fbc79e5e5edf8a5137117ec3910160405180910390a1600b54600e546115f691906001600160801b031661335c565b60068054610bf690615952565b600154600160a01b900460ff161561267c5760405163bbc5234f60e01b815260040160405180910390fd5b6126846132c4565b5f61268e8261291d565b905082811161269d578061269f565b825b92506126d66001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016333086613aaa565b6126e1833084613c06565b5060405183815233906001600160a01b038416907f05f2eeda0e08e4b437f487c8d7d29b14537d15e3488170dc3de5dbdf8dac4684906020015b60405180910390a350600b54600e546115f691906001600160801b031661335c565b5f546001600160a01b031633146127665760405162461bcd60e51b8152600401610ee6906159b4565b6115f68282613d1c565b6007545f908015610c9857610c93612786610bac565b8490836132a9565b5f610d078261291d565b6007545f908015610c9857610c93816127af610bac565b859190613286565b5f546001600160a01b031633146127e05760405162461bcd60e51b8152600401610ee6906159b4565b600f54600160a01b900461ffff161561280c57604051639331280d60e01b815260040160405180910390fd5b61044c8361ffff168561ffff168761ffff16612828919061593f565b612832919061593f565b11156128515760405163f7fda0d360e01b815260040160405180910390fd5b6113888261ffff1611156128785760405163f7fda0d360e01b815260040160405180910390fd5b6010805465ffffffff000019166201000061ffff9788160265ffff00000000191617640100000000958716959095029490941767ffff00000000ffff1916600160301b9386169390930261ffff1916929092179316929092179055600f80546001600160b01b0316600160b01b6001600160501b0390931692909202919091179055565b6129046132c4565b600b54600e54610ebb91906001600160801b031661335c565b6001600160a01b0381165f90815260086020526040812054610d0790610c75565b5f546001600160a01b031633146129675760405162461bcd60e51b8152600401610ee6906159b4565b61296f6132c4565b60125482106129915760405163711e472760e01b815260040160405180910390fd5b8061ffff16601183815481106129a9576129a96159da565b905f5260205f2090601091828204019190066002029054906101000a900461ffff1661ffff16600d60109054906101000a900462ffffff166129eb9190615a5c565b6129f59190615a7f565b600d60106101000a81548162ffffff021916908362ffffff1602179055508060118381548110612a2757612a276159da565b905f5260205f2090601091828204019190066002026101000a81548161ffff021916908361ffff1602179055505f60128381548110612a6857612a686159da565b5f918252602080832091909101546001600160a01b03168083526014825260409283902061ffff8616908190559251928352925060ff85169183917fa161bccb4e1b3f5e1b1f63a7c354eafede3f3c96ad27019e3d71db2660908f69910161271b565b42841015612b1b5760405162461bcd60e51b815260206004820152601760248201527f5045524d49545f444541444c494e455f455850495245440000000000000000006044820152606401610ee6565b5f6001612b2661106e565b6001600160a01b038a81165f818152600a602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98184015280840194909452938d166060840152608083018c905260a083019390935260c08083018b90528151808403909101815260e08301909152805192019190912061190160f01b6101008301526101028201929092526101228101919091526101420160408051601f1981840301815282825280516020918201205f84529083018083525260ff871690820152606081018590526080810184905260a0016020604051602081039080840390855afa158015612c2e573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b03811615801590612c645750876001600160a01b0316816001600160a01b0316145b612ca15760405162461bcd60e51b815260206004820152600e60248201526d24a72b20a624a22fa9a4a3a722a960911b6044820152606401610ee6565b6001600160a01b039081165f9081526009602090815260408083208a8516808552908352928190208990555188815291928a16917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350505050505050565b600c54600d545f916001600160501b03908116670de0b6b3a7640000908101909116916301e13380600160581b90910463ffffffff1642038202049080612d508484613d72565b03600b540281612d6257612d62615a9b565b0492505050612d7081613348565b6001600160801b0316905090565b5f546001600160a01b03163314612da75760405162461bcd60e51b8152600401610ee6906159b4565b612daf6132c4565b600f54600160a01b900461ffff1615612ddb57604051639331280d60e01b815260040160405180910390fd5b6001600160a01b0382165f9081526013602052604090205460ff1615612e145760405163f67d880160e01b815260040160405180910390fd5b8061ffff16600d60108282829054906101000a900462ffffff16612e389190615a7f565b825462ffffff91821661010093840a9081029202191617909155601180546001818101909255601081047f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c6801805461ffff8781166002600f9095169490940290950a83810295021916939093179092556001600160a01b0385165f818152601460209081526040808320869055601280548087019091557fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec3444810180546001600160a01b031916861790556013835292819020805460ff19169095179094559251938452935060ff84169290917fa161bccb4e1b3f5e1b1f63a7c354eafede3f3c96ad27019e3d71db2660908f69910161271b565b5f546001600160a01b03163314612f755760405162461bcd60e51b8152600401610ee6906159b4565b6001547ff2971de95199967f91df0bcc4cfca74d65c7c48e619271f896873fdca0aae4ec90600160a01b900460ff168015612fad5750855b6001805460ff60a01b1916600160a01b83151502179081905560ff600160a81b909104168015612fda5750855b6001805460ff60a81b1916600160a81b83151502179081905560ff600160b01b9091041680156130075750855b6001805460ff60b01b1916600160b01b83151502179081905560ff600160b81b9091041680156130345750855b6001805460ff60b81b1916600160b81b83151502179081905560ff600160c01b9091041680156130615750855b6001805460ff60c01b1916600160c01b9215159283021790556040805195151586529315156020860152911515928401929092529015156060830152608082015260a00160405180910390a15050505050565b6130bc6132c4565b5f546001600160a01b031633146130e55760405162461bcd60e51b8152600401610ee6906159b4565b600c805471ffffffffffffffffffffffffffffffffffff60501b1916600160501b68ffffffffffffffffff8781169190910268ffffffffffffffffff60981b191691909117600160981b8683160217909155600d80549184166affffffffffffffffffffff1990921691909117600160481b61ffff841602179055600b54600e5461106891906001600160801b031661335c565b5f610d0782612798565b5f546001600160a01b031633146131ac5760405162461bcd60e51b8152600401610ee6906159b4565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b5f546001600160a01b031633146131f75760405162461bcd60e51b8152600401610ee6906159b4565b5f80546001600160a01b0319166001600160a01b0383169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6003546001600160a01b0316331461326b576040516282b42960e81b815260040160405180910390fd5b600380546001600160a01b03191690556115f6338383613ee1565b5f825f19048411830215820261329a575f80fd5b50910281810615159190040190565b5f825f1904841183021582026132bd575f80fd5b5091020490565b600d544263ffffffff908116600160581b9092041614610ebb575f6132e7612d09565b600d805463ffffffff60581b1916600160581b4263ffffffff1602179055600b805482019055905061331881614025565b6040518181527f787efdcea8eb1ae89f0bf874e4be63032cc15baecfd23bae4b3f282f7734c8aa9060200161121d565b5f600160801b8210613358575f80fd5b5090565b5f811561337a578161271084028161337657613376615a9b565b0490505b61271081111561338c5761271061338e565b805b90507fcca6689932fb10cfb74d0833ad7a1d37d1c12dd1b6a5765458398371880d66b683836133bc8461417a565b600c805469ffffffffffffffffffff19166001600160501b039290921691821790556040805193845260208401929092529082015260600160405180910390a1505050565b5f805f61340e8787613624565b92509250925061341d81613885565b600e54613450908590839061343c9086906001600160801b031661593f565b613446919061593f565b6113e5919061593f565b600e80546001600160801b0319166001600160801b039290921691909117905583156134fa578360155f8a6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156134b6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134da91906159ee565b6001600160a01b0316815260208101919091526040015f20805490910190555b6001600160a01b0385165f90815260156020526040902080548301905561351f6139f7565b6040805188815260208101859052908101839052606081018290525f608082015260a0810185905230906001600160a01b038a16907f212af1f2c2f6bd8194697adfafd5ef352c5fc730c77be9a8d25a2ab21668e6749060c00160405180910390a35050505050505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60056040516135bc9190615aaf565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b600f546010545f9182918291600160b01b90046001600160501b031690829061365590879061ffff16612710613286565b60105490915061367390889062010000900461ffff166127106132a9565b94508085116136825780613684565b845b94508185116136935784613695565b815b6010549095506136b4908890600160301b900461ffff166127106132a9565b93508084116136c357806136c5565b835b93508184116136d457836136d6565b815b6010549094506136f6908890640100000000900461ffff16612710613286565b925050509250925092565b6012545f908190805b801561387e57806001900390506012818154811061372a5761372a6159da565b5f9182526020808320909101546001600160a01b0316808352601590915260409091205490945092508285101561377e576001600160a01b0384165f9081526015602052604090208054869003905561387e565b6001600160a01b0384165f908152601560205260408120556137a08185614220565b8285039450836001600160a01b031663f83d08ba6040518163ffffffff1660e01b81526004015f604051808303815f87803b1580156137dd575f80fd5b505af11580156137ef573d5f803e3d5ffd5b50505050805f146138795760126138076001836159a1565b81548110613817576138176159da565b5f91825260209091200154604051633dd217f760e21b8152600160048201526001600160a01b039091169063f7485fdc906024015f604051808303815f87803b158015613862575f80fd5b505af1158015613874573d5f803e3d5ffd5b505050505b61370a565b5050505050565b601254600d5461ffff600160b81b8204811691600160a81b900416810180158015906138b057505f83115b15613957575f60158160126138c66001886159a1565b815481106138d6576138d66159da565b5f9182526020808320909101546001600160a01b0316835282019290925260400190205490508015613955575f61390e8685856132a9565b905080820160155f6012600189038154811061392c5761392c6159da565b5f9182526020808320909101546001600160a01b03168352820192909252604001902055909403935b505b5050600f546001600160a01b03165f908152601560205260409020805490920190915550565b6001600160a01b0382165f90815260086020526040812080548392906139a49084906159a1565b90915550506007805482900390556040518181525f906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a35050565b600f805461ffff60a01b198116600160a01b9182900461ffff9081165f1901811683029190911792839055910416158015613a33575060125415155b15610ebb57601280545f198101908110613a4f57613a4f6159da565b5f918252602082200154604051633dd217f760e21b815260048101929092526001600160a01b03169063f7485fdc906024015f604051808303815f87803b158015613a98575f80fd5b505af1158015611068573d5f803e3d5ffd5b5f6040516323b872dd60e01b81526001600160a01b03851660048201526001600160a01b038416602482015282604482015260205f6064835f8a5af13d15601f3d1160015f51141617169150508061387e5760405162461bcd60e51b81526020600482015260146024820152731514905394d1915497d19493d357d1905253115160621b6044820152606401610ee6565b5f60405163a9059cbb60e01b81526001600160a01b038416600482015282602482015260205f6044835f895af13d15601f3d1160015f5114161716915050806110685760405162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b6044820152606401610ee6565b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527f6d9a586ef7be36e9ed3db326a9c62cce6c939c7ddae2c48f8f35562dce4fcd729060200161121d565b5f613c1084610d0d565b9050805f03613c3257604051639811e0c760e01b815260040160405180910390fd5b613c3c828261397d565b83600b5f828254613c4d91906159a1565b909155505060408051858152602081018390526001600160a01b03808516929086169133917ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db910160405180910390a49392505050565b5f613cae83613179565b9050613cba828261435c565b82600b5f828254613ccb919061593f565b909155505060408051848152602081018390526001600160a01b0384169133917fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d7910160405180910390a392915050565b5f82815260046020908152604091829020805460ff1916841515908117909155915191825283917fddda1b7c0627ea48393f748e6a87c0a8d8318fb620e1944bcbb8cdc33ff729a4910160405180910390a25050565b5f815f03613d895750670de0b6b3a7640000610d07565b825f03613d9757505f610d07565b613da8600160ff1b841060066143be565b82613dcc613dc368056bc75e2d63100000600160fe1b615b4d565b841060076143be565b825f82613de967016345785d8a0000670de0b6b3a7640000615b60565b128015613e0e5750613e0b670de0b6b3a764000067016345785d8a0000615b7f565b83125b15613e76575f613e1d846143cc565b9050670de0b6b3a764000083613e338284615ba6565b613e3d9190615bb9565b613e479190615be8565b83613e5a670de0b6b3a764000084615be8565b613e649190615bb9565b613e6e9190615b7f565b915050613e8d565b81613e8084614600565b613e8a9190615bb9565b90505b613e9f670de0b6b3a764000082615be8565b9050613ece81680238fd42c5cf03ffff1913158015613ec7575068070c1cc73b00c800008213155b60086143be565b613ed781614be2565b9695505050505050565b5f808080613ef185870187615580565b600d54939750919550935091505f90613f18908690600160781b900460ff16612710613286565b613f22908661593f565b9050613f2e8189613ca4565b50808514613f8857613f41858203613348565b600e80546001600160801b031981166001600160801b039182169390930116919091179055600f546001600160a01b03165f90815260156020526040902080548683030190555b613fbc6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168587613b3b565b604080516001600160a01b038681168252602082018890528784038284015291516001600160e81b031985169286811692908c16917f921c81c17e72f815c88a3e0fa28e7e709d56f0c5832e17b4bcc606dc9ee1a6119181900360600190a45050505050505050565b600d548190600160801b900462ffffff16801561411e576012545f908190815b818110156141195760155f60128381548110614063576140636159da565b5f9182526020808320909101546001600160a01b0316835282019290925260400190205493508315614111576140cc601182815481106140a5576140a56159da565b5f91825260209091206010820401548991600f166002026101000a900461ffff16876132a9565b925082840160155f601284815481106140e7576140e76159da565b5f9182526020808320909101546001600160a01b0316835282019290925260400190205594829003945b600101614045565b505050505b600e54614135906001600160801b03168401613348565b600e80546001600160801b0319166001600160801b039290921691909117905550600f546001600160a01b03165f908152601560205260409020805491909101905550565b6001545f90600160a01b900460ff161561419557505f919050565b600d54600160481b900461ffff1682106141f257600c54600d54600160981b820468ffffffffffffffffff908116600160481b830461ffff16908102939282169086030291600160501b9004166127108284010401949350505050565b600c5468ffffffffffffffffff600160501b820481169161271091600160981b909104168402040192915050565b60118281548110614233576142336159da565b5f9182526020808320601083040154600d805461ffff6002600f909616959095026101000a9092049390931662ffffff600160801b808404821692909203160262ffffff60801b19909116179091556001600160a01b03831682526013905260409020805460ff1916905560118054806142af576142af615c14565b5f8281526020902060105f1990920191820401805461ffff6002600f8516026101000a0219169055905560128054806142ea576142ea615c14565b5f82815260208082205f19908401810180546001600160a01b03191690559092019092556001600160a01b0383168083526014825260408084209390935591519182527f14254003b9294c30e1b403adc733441503a0aecf4ff410885229833defef329a910160405180910390a15050565b8060075f82825461436d919061593f565b90915550506001600160a01b0382165f818152600860209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016139eb565b816115f6576115f681615216565b5f6143df670de0b6b3a764000083615bb9565b91505f6143fa6a0c097ce7bc90715b34b9f160241b84615b7f565b6a0c097ce7bc90715b34b9f160241b6144138186615b60565b61441d9190615bb9565b6144279190615be8565b90505f6a0c097ce7bc90715b34b9f160241b6144438380615bb9565b61444d9190615be8565b905081806a0c097ce7bc90715b34b9f160241b61446a8483615bb9565b6144749190615be8565b9150614481600383615be8565b61448b9082615b7f565b90506a0c097ce7bc90715b34b9f160241b6144a68484615bb9565b6144b09190615be8565b91506144bd600583615be8565b6144c79082615b7f565b90506a0c097ce7bc90715b34b9f160241b6144e28484615bb9565b6144ec9190615be8565b91506144f9600783615be8565b6145039082615b7f565b90506a0c097ce7bc90715b34b9f160241b61451e8484615bb9565b6145289190615be8565b9150614535600983615be8565b61453f9082615b7f565b90506a0c097ce7bc90715b34b9f160241b61455a8484615bb9565b6145649190615be8565b9150614571600b83615be8565b61457b9082615b7f565b90506a0c097ce7bc90715b34b9f160241b6145968484615bb9565b6145a09190615be8565b91506145ad600d83615be8565b6145b79082615b7f565b90506a0c097ce7bc90715b34b9f160241b6145d28484615bb9565b6145dc9190615be8565b91506145e9600f83615be8565b6145f39082615b7f565b9050613ed7816002615bb9565b5f670de0b6b3a764000082121561463f5761463682614627670de0b6b3a764000080615bb9565b6146319190615be8565b614600565b610d0790615c28565b5f61466a670de0b6b3a7640000770195e54c5dd42177f53a27172fa9ec630262827000000000615bb9565b83126146aa57614692770195e54c5dd42177f53a27172fa9ec63026282700000000084615be8565b92506146a76806f05b59d3b200000082615b7f565b90505b6146c8670de0b6b3a76400006b1425982cf597cd205cef7380615bb9565b83126146fc576146e46b1425982cf597cd205cef738084615be8565b92506146f96803782dace9d900000082615b7f565b90505b614707606482615bb9565b9050614714606484615bb9565b92506e01855144814a7ff805980ff00840008312614771576e01855144814a7ff805980ff008400061474f68056bc75e2d6310000085615bb9565b6147599190615be8565b925061476e68ad78ebc5ac6200000082615b7f565b90505b6b02df0ab5a80a22c61ab5a70083126147c6576b02df0ab5a80a22c61ab5a7006147a468056bc75e2d6310000085615bb9565b6147ae9190615be8565b92506147c36856bc75e2d63100000082615b7f565b90505b693f1fce3da636ea5cf850831261481757693f1fce3da636ea5cf8506147f568056bc75e2d6310000085615bb9565b6147ff9190615be8565b9250614814682b5e3af16b1880000082615b7f565b90505b690127fa27722cc06cc5e2831261486857690127fa27722cc06cc5e261484668056bc75e2d6310000085615bb9565b6148509190615be8565b92506148656815af1d78b58c40000082615b7f565b90505b68280e60114edb805d0383126148b75768280e60114edb805d0361489568056bc75e2d6310000085615bb9565b61489f9190615be8565b92506148b4680ad78ebc5ac620000082615b7f565b90505b680ebc5fb41746121110831261490657680ebc5fb417461211106148e468056bc75e2d6310000085615bb9565b6148ee9190615be8565b925061490368056bc75e2d6310000082615b7f565b90505b6808f00f760a4b2db55d8312614955576808f00f760a4b2db55d61493368056bc75e2d6310000085615bb9565b61493d9190615be8565b92506149526802b5e3af16b188000082615b7f565b90505b6806f5f177578893793783126149a4576806f5f177578893793761498268056bc75e2d6310000085615bb9565b61498c9190615be8565b92506149a168015af1d78b58c4000082615b7f565b90505b6806248f33704b28660383126149f2576806248f33704b2866036149d168056bc75e2d6310000085615bb9565b6149db9190615be8565b92506149ef67ad78ebc5ac62000082615b7f565b90505b6805c548670b9510e7ac8312614a40576805c548670b9510e7ac614a1f68056bc75e2d6310000085615bb9565b614a299190615be8565b9250614a3d6756bc75e2d631000082615b7f565b90505b5f614a5468056bc75e2d6310000085615b7f565b68056bc75e2d63100000614a688187615b60565b614a729190615bb9565b614a7c9190615be8565b90505f68056bc75e2d63100000614a938380615bb9565b614a9d9190615be8565b9050818068056bc75e2d63100000614ab58483615bb9565b614abf9190615be8565b9150614acc600383615be8565b614ad69082615b7f565b905068056bc75e2d63100000614aec8484615bb9565b614af69190615be8565b9150614b03600583615be8565b614b0d9082615b7f565b905068056bc75e2d63100000614b238484615bb9565b614b2d9190615be8565b9150614b3a600783615be8565b614b449082615b7f565b905068056bc75e2d63100000614b5a8484615bb9565b614b649190615be8565b9150614b71600983615be8565b614b7b9082615b7f565b905068056bc75e2d63100000614b918484615bb9565b614b9b9190615be8565b9150614ba8600b83615be8565b614bb29082615b7f565b9050614bbf600282615bb9565b90506064614bcd8287615b7f565b614bd79190615be8565b979650505050505050565b5f614c10680238fd42c5cf03ffff198312158015614c09575068070c1cc73b00c800008313155b60096143be565b5f821215614c4557614c29614c2483615c28565b614be2565b614c3b670de0b6b3a764000080615bb9565b610d079190615be8565b5f6806f05b59d3b20000008312614c8b57614c696806f05b59d3b200000084615b60565b9250770195e54c5dd42177f53a27172fa9ec6302628270000000009050614cc8565b6803782dace9d90000008312614cc457614cae6803782dace9d900000084615b60565b92506b1425982cf597cd205cef73809050614cc8565b5060015b614cd3606484615bb9565b925068056bc75e2d6310000068ad78ebc5ac620000008412614d3457614d0268ad78ebc5ac6200000085615b60565b935068056bc75e2d63100000614d276e01855144814a7ff805980ff008400083615bb9565b614d319190615be8565b90505b6856bc75e2d6310000008412614d8657614d576856bc75e2d63100000085615b60565b935068056bc75e2d63100000614d796b02df0ab5a80a22c61ab5a70083615bb9565b614d839190615be8565b90505b682b5e3af16b188000008412614dd657614da9682b5e3af16b1880000085615b60565b935068056bc75e2d63100000614dc9693f1fce3da636ea5cf85083615bb9565b614dd39190615be8565b90505b6815af1d78b58c4000008412614e2657614df96815af1d78b58c40000085615b60565b935068056bc75e2d63100000614e19690127fa27722cc06cc5e283615bb9565b614e239190615be8565b90505b680ad78ebc5ac62000008412614e7557614e49680ad78ebc5ac620000085615b60565b935068056bc75e2d63100000614e6868280e60114edb805d0383615bb9565b614e729190615be8565b90505b68056bc75e2d631000008412614ec457614e9868056bc75e2d6310000085615b60565b935068056bc75e2d63100000614eb7680ebc5fb4174612111083615bb9565b614ec19190615be8565b90505b6802b5e3af16b18800008412614f1357614ee76802b5e3af16b188000085615b60565b935068056bc75e2d63100000614f066808f00f760a4b2db55d83615bb9565b614f109190615be8565b90505b68015af1d78b58c400008412614f6257614f3668015af1d78b58c4000085615b60565b935068056bc75e2d63100000614f556806f5f177578893793783615bb9565b614f5f9190615be8565b90505b68056bc75e2d6310000084614f778183615b7f565b9150600268056bc75e2d63100000614f8f8884615bb9565b614f999190615be8565b614fa39190615be8565b9050614faf8183615b7f565b9150600368056bc75e2d63100000614fc78884615bb9565b614fd19190615be8565b614fdb9190615be8565b9050614fe78183615b7f565b9150600468056bc75e2d63100000614fff8884615bb9565b6150099190615be8565b6150139190615be8565b905061501f8183615b7f565b9150600568056bc75e2d631000006150378884615bb9565b6150419190615be8565b61504b9190615be8565b90506150578183615b7f565b9150600668056bc75e2d6310000061506f8884615bb9565b6150799190615be8565b6150839190615be8565b905061508f8183615b7f565b9150600768056bc75e2d631000006150a78884615bb9565b6150b19190615be8565b6150bb9190615be8565b90506150c78183615b7f565b9150600868056bc75e2d631000006150df8884615bb9565b6150e99190615be8565b6150f39190615be8565b90506150ff8183615b7f565b9150600968056bc75e2d631000006151178884615bb9565b6151219190615be8565b61512b9190615be8565b90506151378183615b7f565b9150600a68056bc75e2d6310000061514f8884615bb9565b6151599190615be8565b6151639190615be8565b905061516f8183615b7f565b9150600b68056bc75e2d631000006151878884615bb9565b6151919190615be8565b61519b9190615be8565b90506151a78183615b7f565b9150600c68056bc75e2d631000006151bf8884615bb9565b6151c99190615be8565b6151d39190615be8565b90506151df8183615b7f565b915060648468056bc75e2d631000006151f88587615bb9565b6152029190615be8565b61520c9190615bb9565b613ed79190615be8565b6030600a820601600a820491506030600a830601600a830492506030600a8406018060101b8260081b8401016642414c230000000160c81b9250505062461bcd60e51b5f52602060045260076024528060445260645ffd5b5f81518084525f5b8181101561529257602081850181015186830182015201615276565b505f602082860101526020601f19601f83011685010191505092915050565b602081525f610c9a602083018461526e565b5f602082840312156152d3575f80fd5b5035919050565b6001600160a01b0381168114610f50575f80fd5b5f80604083850312156152ff575f80fd5b823561530a816152da565b946020939093013593505050565b803560ff81168114611156575f80fd5b5f60208284031215615338575f80fd5b610c9a82615318565b5f805f60608486031215615353575f80fd5b833561535e816152da565b9250602084013561536e816152da565b929592945050506040919091013590565b5f6020828403121561538f575f80fd5b8135610c9a816152da565b5f805f80608085870312156153ad575f80fd5b84356153b8816152da565b9350602085013592506040850135915060608501356153d6816152da565b939692955090935050565b5f80604083850312156153f2575f80fd5b823591506020830135615404816152da565b809150509250929050565b5f8060408385031215615420575f80fd5b50508035926020909101359150565b5f6020828403121561543f575f80fd5b81356001600160601b0381168114610c9a575f80fd5b5f8083601f840112615465575f80fd5b50813567ffffffffffffffff81111561547c575f80fd5b602083019150836020828501011115615493575f80fd5b9250929050565b80356001600160e81b031981168114611156575f80fd5b5f805f805f8060a087890312156154c6575f80fd5b8635955060208701356154d8816152da565b945060408701356154e8816152da565b9350606087013567ffffffffffffffff811115615503575f80fd5b61550f89828a01615455565b909450925061552290506080880161549a565b90509295509295509295565b5f805f805f60a08688031215615542575f80fd5b8535945060208601359350604086013592506060860135615562816152da565b91506080860135615572816152da565b809150509295509295909350565b5f805f8060808587031215615593575f80fd5b8435935060208501356155a5816152da565b925060408501356155b5816152da565b91506155c36060860161549a565b905092959194509250565b803561ffff81168114611156575f80fd5b5f602082840312156155ef575f80fd5b610c9a826155ce565b5f805f6060848603121561560a575f80fd5b8335615615816152da565b925060208401359150604084013561562c816152da565b809150509250925092565b5f8060408385031215615648575f80fd5b615651836155ce565b915061565f602084016155ce565b90509250929050565b80358015158114611156575f80fd5b5f8060408385031215615688575f80fd5b8235915061565f60208401615668565b5f805f606084860312156156aa575f80fd5b8335925060208401356156bc816152da565b9150604084013561562c816152da565b5f805f606084860312156156de575f80fd5b83356156e9816152da565b925060208401356156bc816152da565b5f805f805f60a0868803121561570d575f80fd5b615716866155ce565b9450615724602087016155ce565b9350615732604087016155ce565b9250615740606087016155ce565b915060808601356001600160501b0381168114615572575f80fd5b5f806040838503121561576c575f80fd5b8235915061565f602084016155ce565b5f805f805f805f60e0888a031215615792575f80fd5b873561579d816152da565b965060208801356157ad816152da565b955060408801359450606088013593506157c960808901615318565b925060a0880135915060c0880135905092959891949750929550565b5f80604083850312156157f6575f80fd5b8235615801816152da565b91506020830135615404816152da565b5f8060408385031215615822575f80fd5b8235615651816152da565b5f805f805f60a08688031215615841575f80fd5b61584a86615668565b945061585860208701615668565b935061586660408701615668565b925061587460608701615668565b915061588260808701615668565b90509295509295909350565b803568ffffffffffffffffff81168114611156575f80fd5b5f805f80608085870312156158b9575f80fd5b6158c28561588e565b93506158d06020860161588e565b92506158de6040860161588e565b91506155c3606086016155ce565b5f80602083850312156158fd575f80fd5b823567ffffffffffffffff811115615913575f80fd5b61591f85828601615455565b90969095509350505050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610d0757610d0761592b565b600181811c9082168061596657607f821691505b60208210810361598457634e487b7160e01b5f52602260045260245ffd5b50919050565b5f6020828403121561599a575f80fd5b5051919050565b81810381811115610d0757610d0761592b565b6020808252600c908201526b15539055551213d49256915160a21b604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b5f602082840312156159fe575f80fd5b8151610c9a816152da565b606081525f615a1b606083018761526e565b60018060a01b03861660208401528281036040840152838152838560208301375f602085830101526020601f19601f86011682010191505095945050505050565b62ffffff828116828216039080821115615a7857615a7861592b565b5092915050565b62ffffff818116838216019080821115615a7857615a7861592b565b634e487b7160e01b5f52601260045260245ffd5b5f8083545f60018260011c91506001831680615acc57607f831692505b60208084108203615aeb57634e487b7160e01b5f52602260045260245ffd5b818015615aff5760018114615b1457615b3f565b60ff1986168952841515850289019650615b3f565b5f8a8152602090205f5b86811015615b375781548b820152908501908301615b1e565b505084890196505b509498975050505050505050565b5f82615b5b57615b5b615a9b565b500490565b8181035f831280158383131683831282161715615a7857615a7861592b565b8082018281125f831280158216821582161715615b9e57615b9e61592b565b505092915050565b5f82615bb457615bb4615a9b565b500790565b8082025f8212600160ff1b84141615615bd457615bd461592b565b8181058314821517610d0757610d0761592b565b5f82615bf657615bf6615a9b565b600160ff1b82145f1984141615615c0f57615c0f61592b565b500590565b634e487b7160e01b5f52603160045260245ffd5b5f600160ff1b8201615c3c57615c3c61592b565b505f039056fea26469706673582212203c7af220115fb3a8f62b27468a9469e87114ae7c435dd839b5aca8f206a0b9a564736f6c634300081600330000000000000000000000000f518becfc14125f23b8422849f6393d59627ddb000000000000000000000000cbb7c0000ab88b473b1f5afd9ef808440eed33bf000000000000000000000000fd6db26edc581d8f381f46ef4a6396a762b66e95000000000000000000000000da14fdd72345c4d2511357214c5b89a919768e59000000000000000000000000a4b0b9fd1d91fa2de44f6abfd59cc14ba1e1a7af