7 txs
7 calls
constructor
constructor(address _collateral, address _feed, address _coin, address _vault, address _interestModel, address _factory, address _operator, uint256 _collateralFactor, uint256 _minDebt, uint256 _timeUntilImmutability)
functions
_cachedCollateralBalances
viewfunction _cachedCollateralBalances(address) view returns (uint256)
accruedGlobalReserves
viewfunction accruedGlobalReserves() view returns (uint120)
accruedLocalReserves
viewfunction accruedLocalReserves() view returns (uint120)
borrowerEpoch
viewfunction borrowerEpoch(address) view returns (uint256)
borrowerLastRedeemedIndex
viewfunction borrowerLastRedeemedIndex(address) view returns (uint256)
cachedGlobalFeeBps
viewfunction cachedGlobalFeeBps() view returns (uint16)
coin
viewfunction coin() view returns (address)
collateral
viewfunction collateral() view returns (address)
collateralFactor
viewfunction collateralFactor() view returns (uint256)
delegations
viewfunction delegations(address, address) view returns (bool)
epoch
viewfunction epoch() view returns (uint256)
epochRedeemedCollateral
viewfunction epochRedeemedCollateral(uint256) view returns (uint256)
expRate
viewfunction expRate() view returns (uint64)
factory
viewfunction factory() view returns (address)
feeBps
viewfunction feeBps() view returns (uint16)
feed
viewfunction feed() view returns (address)
freeDebtShares
viewfunction freeDebtShares(address) view returns (uint256)
getCollateralPrice
viewfunction getCollateralPrice() view returns (uint256 price, bool reduceOnly, bool allowLiquidations)
getDebtOf
viewfunction getDebtOf(address account) view returns (uint256)
getFeedPrice
viewfunction getFeedPrice() view returns (uint256 price, uint256 updatedAt)
getFreeDebtRatio
viewfunction getFreeDebtRatio() view returns (uint256)
getRedeemAmountOut
viewfunction getRedeemAmountOut(uint256 amountIn) view returns (uint256 amountOut)
immutabilityDeadline
viewfunction immutabilityDeadline() view returns (uint256)
interestModel
viewfunction interestModel() view returns (address)
isRedeemable
viewfunction isRedeemable(address) view returns (bool)
lastAccrue
viewfunction lastAccrue() view returns (uint40)
lastBorrowRateMantissa
viewfunction lastBorrowRateMantissa() view returns (uint88)
MIN_LIQUIDATION_DEBT
viewfunction MIN_LIQUIDATION_DEBT() view returns (uint256)
minDebt
viewfunction minDebt() view returns (uint256)
nonRedeemableCollateral
viewfunction nonRedeemableCollateral() view returns (uint256)
operator
viewfunction operator() view returns (address)
paidDebtShares
viewfunction paidDebtShares(address) view returns (uint256)
pendingOperator
viewfunction pendingOperator() view returns (address)
redeemFeeBps
viewfunction redeemFeeBps() view returns (uint16)
STALENESS_THRESHOLD
viewfunction STALENESS_THRESHOLD() view returns (uint256)
STALENESS_UNWIND_DURATION
viewfunction STALENESS_UNWIND_DURATION() view returns (uint256)
targetFreeDebtRatioEndBps
viewfunction targetFreeDebtRatioEndBps() view returns (uint16)
targetFreeDebtRatioStartBps
viewfunction targetFreeDebtRatioStartBps() view returns (uint16)
totalFreeDebt
viewfunction totalFreeDebt() view returns (uint256)
totalFreeDebtShares
viewfunction totalFreeDebtShares() view returns (uint256)
totalPaidDebt
viewfunction totalPaidDebt() view returns (uint256)
totalPaidDebtShares
viewfunction totalPaidDebtShares() view returns (uint256)
vault
viewfunction vault() view returns (address)
acceptOperator
nonpayablefunction acceptOperator()
accrueInterest
nonpayablefunction accrueInterest()
adjust
nonpayablefunction adjust(address account, int256 collateralDelta, int256 debtDelta, bool chooseRedeemable)
adjust
nonpayablefunction adjust(address account, int256 collateralDelta, int256 debtDelta)
delegate
nonpayablefunction delegate(address delegatee, bool isDelegatee)
enableImmutabilityNow
nonpayablefunction enableImmutabilityNow()
liquidate
nonpayablefunction liquidate(address borrower, uint256 repayAmount, uint256 minCollateralOut) returns (uint256)
pullGlobalReserves
nonpayablefunction pullGlobalReserves(address _to)
pullLocalReserves
nonpayablefunction pullLocalReserves()
redeem
nonpayablefunction redeem(uint256 amountIn, uint256 minAmountOut) returns (uint256 amountOut)
setHalfLife
nonpayablefunction setHalfLife(uint64 halfLife)
setLocalReserveFeeBps
nonpayablefunction setLocalReserveFeeBps(uint256 _feeBps)
setPendingOperator
nonpayablefunction setPendingOperator(address _pendingOperator)
setRedeemFeeBps
nonpayablefunction setRedeemFeeBps(uint16 _redeemFeeBps)
setRedemptionStatus
nonpayablefunction setRedemptionStatus(address account, bool chooseRedeemable)
setTargetFreeDebtRatio
nonpayablefunction setTargetFreeDebtRatio(uint16 startBps, uint16 endBps)
writeOff
nonpayablefunction writeOff(address borrower, address to) returns (bool writtenOff)
events
DelegationUpdated
event DelegationUpdated(address indexed delegator, address indexed delegatee, bool isDelegatee)
HalfLifeUpdated
event HalfLifeUpdated(uint64 halfLife)
Liquidated
event Liquidated(address indexed borrower, address indexed liquidator, uint256 repayAmount, uint256 collateralOut)
LocalReserveFeeUpdated
event LocalReserveFeeUpdated(uint256 feeBps)
NewEpoch
event NewEpoch(uint256 epoch)
OperatorAccepted
event OperatorAccepted(address indexed operator)
PendingOperatorUpdated
event PendingOperatorUpdated(address indexed pendingOperator)
PositionAdjusted
event PositionAdjusted(address indexed account, int256 collateralDelta, int256 debtDelta)
Redeemed
event Redeemed(address indexed account, uint256 amountIn, uint256 amountOut)
RedeemFeeBpsUpdated
event RedeemFeeBpsUpdated(uint16 redeemFeeBps)
RedemptionStatusUpdated
event RedemptionStatusUpdated(address indexed account, bool isRedeemable)
TargetFreeDebtRatioUpdated
event TargetFreeDebtRatioUpdated(uint16 startBps, uint16 endBps)
WrittenOff
event WrittenOff(address indexed borrower, address indexed to, uint256 debt, uint256 collateral)
errors
No errors.
creation bytecode
0x6101806040526000805465ffffffffffff1916641e0fa007d017905562093a8062000032671bc16d674ec800006200029f565b6200003e9190620004c8565b600080547fffff0000000000000000000000ffffffffff0000000000000000ffffffffffff1666010000000000006001600160401b039390931692909202600160981b600160f01b03191691909117642386f26fc160a71b179055348015620000a657600080fd5b506040516200464f3803806200464f833981016040819052620000c99162000504565b612710831115620001215760405162461bcd60e51b815260206004820152601960248201527f496e76616c696420636f6c6c61746572616c20666163746f720000000000000060448201526064015b60405180910390fd5b630784ce008110620001865760405162461bcd60e51b815260206004820152602760248201527f4d617820696d6d75746162696c69747920646561646c696e6520697320696e206044820152663420796561727360c81b606482015260840162000118565b6001600160a01b038a811660a05289811660c05288811660805287811660e0528681166101005285811661012052600280546001600160a01b031916918616919091179055610140839052610160829052620001e38142620005ce565b60049081556000805464ffffffffff60701b1916600160701b4264ffffffffff16021790556101205160405163dfd56cff60e01b815230928101929092526001600160a01b03169063dfd56cff90602401602060405180830381865afa15801562000252573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002789190620005f5565b6001805461ffff191661ffff92909216919091179055506200060f98505050505050505050565b6000808213620002de5760405162461bcd60e51b815260206004820152600960248201526815539111519253915160ba1b604482015260640162000118565b5060606001600160801b03821160071b82811c6001600160401b031060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110600190811b90911783811c90911017609f81810383019390931b90921c6c465772b2bbbb5f824b15207a3081018102821d6d0388eaa27412d5aca026815d636e018102821d6d0df99ac502031bf953eff472fdcc018102821d6d13cdffb29d51d99322bdff5f2211018102821d6d0a0f742023def783a307a986912e018102821d6d01920d8043ca89b5239253284e42018102821d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7882018202831d6d0139601a2efabe717e604cbb4894018202831d6d02247f7a7b6594320649aa03aba1018202831d6c8c3f38e95a6b1ff2ab1c3b343619018202831d6d02384773bdf1ac5676facced60901901820290921d6cb9a025d814b29c212b8b1a07cd19010260016c0504a838426634cdd8738f543560611b03190105711340daa0d5f769dba1915cef59f0815a550602605f19919091017d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b302017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d90565b600082620004e657634e487b7160e01b600052601260045260246000fd5b500490565b6001600160a01b03811681146200050157600080fd5b50565b6000806000806000806000806000806101408b8d0312156200052557600080fd5b8a516200053281620004eb565b60208c0151909a506200054581620004eb565b60408c01519099506200055881620004eb565b60608c01519098506200056b81620004eb565b60808c01519097506200057e81620004eb565b60a08c01519096506200059181620004eb565b60c08c0151909550620005a481620004eb565b8094505060e08b015192506101008b015191506101208b015190509295989b9194979a5092959850565b60008219821115620005f057634e487b7160e01b600052601160045260246000fd5b500190565b6000602082840312156200060857600080fd5b5051919050565b60805160a05160c05160e05161010051610120516101405161016051613f016200074e600039600081816109000152611a840152600081816108b901528181611c390152818161313801526133c00152600081816107eb015281816124b10152612bcc01526000818161077601526126f701526000818161095501528181612904015281816129c10152612ac701526000818161059f01528181611cdc0152611d6701526000818161086a01528181610bb901528181610ffb015281816116c30152818161173b0152818161184901528181611ded0152818161219701526123ae01526000818161046a01528181610c5801528181610cdc015281816118a00152818161197401528181611a000152818161226b015281816122f70152818161252e015281816129f301528181612af60152612cfe0152613f016000f3fe608060405234801561001057600080fd5b50600436106103a45760003560e01c806376db6c8d116101e9578063c64814dd1161010f578063df011c41116100ad578063fb529d331161007c578063fb529d3314610947578063fbfa77cf14610950578063fcad444814610977578063fe55da611461097f57600080fd5b8063df011c41146108b4578063df4fe5fa146108db578063f17336d7146108fb578063f7683bbc1461092257600080fd5b8063d854fd26116100e9578063d854fd261461084c578063d8dfeb4514610865578063d989c69c1461088c578063dba6bf1a1461089457600080fd5b8063c64814dd1461080d578063ca36b6961461083b578063cb120c3a1461084357600080fd5b8063a3a0915f11610187578063ac7e534e11610156578063ac7e534e14610798578063b56038dc146107ab578063b5e007a8146107dd578063c45a0155146107e657600080fd5b8063a3a0915f14610736578063a553762014610756578063a6afed9514610769578063ac165d7a1461077157600080fd5b8063900cf0cf116101c3578063900cf0cf146106f6578063905fa73d146106ff578063950c801014610712578063982ef0a71461072357600080fd5b806376db6c8d146106ad5780637cbc2373146106d05780638687803d146106e357600080fd5b80632f0a454e116102ce5780634b233bfa1161026c5780636682acdc1161023b5780636682acdc1461068857806371e35e84146106925780637215b0bf1461069a57806374036385146106a457600080fd5b80634b233bfa1461063957806355ac039514610642578063570ca735146106625780635a99253b1461067557600080fd5b806339cdab5c116102a857806339cdab5c146105c15780633b19f2d2146105de578063415d0f35146105f2578063483389e41461060557600080fd5b80632f0a454e146105675780632fc18d271461057a57806337a7b7d81461059a57600080fd5b8063143d4e4911610346578063220195411161031557806322019541146104fa57806322ff2a8e1461050d57806324a9d853146105205780632a87d11c1461053557600080fd5b8063143d4e49146104a4578063158b1a8b146104b957806315cf8d17146104d9578063179cac9f146104e757600080fd5b806309f6442c1161038257806309f6442c146103eb5780630b1ae707146104145780630c81eb231461044257806311df99951461046557600080fd5b806305c7bfc1146103a95780630710285c146103c5578063077e5fe3146103d8575b600080fd5b6103b260125481565b6040519081526020015b60405180910390f35b6103b26103d3366004613945565b61098d565b6103b26103e6366004613978565b610e16565b60005461040190640100000000900461ffff1681565b60405161ffff90911681526020016103bc565b60005461042c90600160701b900464ffffffffff1681565b60405164ffffffffff90911681526020016103bc565b610455610450366004613991565b610ea4565b60405190151581526020016103bc565b61048c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016103bc565b6104b76104b23660046139c4565b6110c6565b005b6103b26104c73660046139c4565b600a6020526000908152604090205481565b6001546104019061ffff1681565b6104b76104f53660046139ed565b61113a565b6104b7610508366004613a36565b611383565b6104b761051b366004613a60565b6114f1565b60005461040190600160f01b900461ffff1681565b60015461054f90600160881b90046001600160781b031681565b6040516001600160781b0390911681526020016103bc565b6104b7610575366004613945565b611636565b6103b26105883660046139c4565b600f6020526000908152604090205481565b61048c7f000000000000000000000000000000000000000000000000000000000000000081565b6105c9611cd4565b604080519283526020830191909152016103bc565b6000546104019062010000900461ffff1681565b6104b7610600366004613978565b611f16565b60005461062090600160301b900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016103bc565b6103b260045481565b6103b2610650366004613978565b60116020526000908152604090205481565b60025461048c906001600160a01b031681565b6104b7610683366004613a8a565b611fd3565b6103b26201518081565b6104b76120c7565b6103b262015f9081565b6103b260085481565b6104556106bb3660046139c4565b600d6020526000908152604090205460ff1681565b6103b26106de366004613aa5565b612118565b6104b76106f13660046139c4565b6124a6565b6103b260095481565b6104b761070d366004613ac7565b6125a8565b6103b269021e19e0c9bab240000081565b6104b76107313660046139ed565b6125c3565b6103b26107443660046139c4565b60106020526000908152604090205481565b6103b26107643660046139c4565b61262f565b6104b76126c6565b61048c7f000000000000000000000000000000000000000000000000000000000000000081565b60035461048c906001600160a01b031681565b6000546107c590600160981b90046001600160581b031681565b6040516001600160581b0390911681526020016103bc565b6103b260065481565b61048c7f000000000000000000000000000000000000000000000000000000000000000081565b61045561081b366004613991565b600e60209081526000928352604080842090915290825290205460ff1681565b6103b2612c5f565b6103b260055481565b60015461054f906201000090046001600160781b031681565b61048c7f000000000000000000000000000000000000000000000000000000000000000081565b6104b7612c9f565b6103b26108a23660046139c4565b600b6020526000908152604090205481565b6103b27f000000000000000000000000000000000000000000000000000000000000000081565b6103b26108e93660046139c4565b600c6020526000908152604090205481565b6103b27f000000000000000000000000000000000000000000000000000000000000000081565b61092a612d7e565b6040805193845291151560208401521515908201526060016103bc565b6103b260075481565b61048c7f000000000000000000000000000000000000000000000000000000000000000081565b6104b7612e9e565b6000546104019061ffff1681565b60006109976126c6565b6109a084612f14565b60008311610a015760405162461bcd60e51b815260206004820152602360248201527f526570617920616d6f756e74206d75737420626520677265617465722074686160448201526206e20360ec1b60648201526084015b60405180910390fd5b600080610a0c612d7e565b925050915080610a565760405162461bcd60e51b81526020600482015260156024820152741b1a5c5d5a59185d1a5bdb9cc8191a5cd8589b1959605a1b60448201526064016109f8565b6000610a618761262f565b6001600160a01b0388166000908152600a6020526040812054919250610a88828685613127565b905060008111610ada5760405162461bcd60e51b815260206004820152601e60248201527f696e73756666696369656e74206c6971756964617461626c652064656274000060448201526064016109f8565b80881115610ae6578097505b610af089896131e0565b6000610afd83878661336f565b90506000612710610b0e8382613b25565b610b18908c613b3d565b610b229190613b5c565b9050600087610b3983670de0b6b3a7640000613b3d565b610b439190613b5c565b9050848111610b525780610b54565b845b905089811015610ba65760405162461bcd60e51b815260206004820152601b60248201527f696e73756666696369656e7420636f6c6c61746572616c206f7574000000000060448201526064016109f8565b8015610c2e57610be06001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163383613458565b610bea8186613b7e565b6001600160a01b038d166000908152600a6020908152604080832093909355600d9052205460ff16610c2e578060126000828254610c289190613b7e565b90915550505b6040516323b872dd60e01b8152336004820152306024820152604481018c90526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906323b872dd906064016020604051808303816000875af1158015610ca1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cc59190613b95565b50604051630852cd8d60e31b8152600481018c90527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906342966c6890602401600060405180830381600087803b158015610d2857600080fd5b505af1158015610d3c573d6000803e3d6000fd5b50505050336001600160a01b03168c6001600160a01b03167f1f0c6615429d1cdae0dfa233abf91d3b31cdbdd82c8081389832a61e1072f1ea8d84604051610d8e929190918252602082015260400190565b60405180910390a3604051630c81eb2360e01b81526001600160a01b038d1660048201523360248201523090630c81eb23906044016020604051808303816000875af1925050508015610dfe575060408051601f3d908101601f19168201909252610dfb91810190613b95565b60015b15610e0557505b9750505050505050505b9392505050565b6000600554821115610e2a57506000919050565b600080610e35612d7e565b925050915080610e49575060009392505050565b600054612710908390610e6890640100000000900461ffff1683613bb2565b61ffff16610e7e87670de0b6b3a7640000613b3d565b610e889190613b3d565b610e929190613b5c565b610e9c9190613b5c565b949350505050565b6000610eae6126c6565b610eb783612f14565b6000610ec28461262f565b905080156110bf576001600160a01b0384166000908152600a60205260408120549080610eed612d7e565b925050915080610f375760405162461bcd60e51b81526020600482015260156024820152741b1a5c5d5a59185d1a5bdb9cc8191a5cd8589b1959605a1b60448201526064016109f8565b6000670de0b6b3a7640000610f4c8585613b3d565b610f569190613b5c565b9050610f63816064613b3d565b8511156110ba57610f76886000196131e0565b6000600754600554610f889190613b25565b90508015610fee5760008160055488610fa19190613b3d565b610fab9190613b5c565b90506000610fb98289613b7e565b90508160056000828254610fcd9190613b25565b925050819055508060076000828254610fe69190613b25565b909155505050505b6110226001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168987613458565b6001600160a01b0389166000908152600d602052604090205460ff1661105a5784601260008282546110549190613b7e565b90915550505b6001600160a01b038981166000818152600a602090815260408083209290925581518a8152908101899052928b16927f10fd981a899851c05d0ff91c65c8eedbdde2dec8306e05bc4643dcba83fa2e10910160405180910390a360019650505b505050505b5092915050565b6002546001600160a01b031633146110f05760405162461bcd60e51b81526004016109f890613bd5565b600380546001600160a01b0319166001600160a01b0383169081179091556040517fc1888917e06295ab8d09c160eaaf1b4c5c251f3f2a05442fea8ad79cd43d671a90600090a250565b6111426126c6565b61114b82612f14565b336001600160a01b038316148061118557506001600160a01b0382166000908152600e6020908152604080832033845290915290205460ff165b6111a15760405162461bcd60e51b81526004016109f890613bd5565b6001600160a01b0382166000908152600d602052604090205460ff161515811515036111cb575050565b8015611232576009546001600160a01b03831660008181526010602090815260408083208590559382526011815283822054928252600f815283822092909255600a909152908120546012805491929091611227908490613b7e565b909155506112649050565b6001600160a01b0382166000908152600a6020526040812054601280549192909161125e908490613b25565b90915550505b600061126f8361262f565b9050801561131457611283836000196131e0565b6001600160a01b0383166000908152600d60205260409020805460ff19168315151790556112b183826134d9565b60006112bc8461262f565b90508181101561130e5760405162461bcd60e51b815260206004820152601b60248201527f446562742064656372656173656420756e65787065637465646c79000000000060448201526064016109f8565b50611339565b6001600160a01b0383166000908152600d60205260409020805460ff19168315151790555b826001600160a01b03167f79557fc8b078a56ef50a6155bd33758b99bfa61d29f74151f4b8aa575a3ecb1083604051611376911515815260200190565b60405180910390a2505050565b6002546001600160a01b031633146113ad5760405162461bcd60e51b81526004016109f890613bd5565b60045442106113ce5760405162461bcd60e51b81526004016109f890613bfb565b6113d66126c6565b6101f48261ffff16101580156113f457508061ffff168261ffff1611155b6114345760405162461bcd60e51b8152602060048201526011602482015270496e76616c69642073746172742062707360781b60448201526064016109f8565b8161ffff168161ffff1610158015611452575061251c8161ffff1611155b6114905760405162461bcd60e51b815260206004820152600f60248201526e496e76616c696420656e642062707360881b60448201526064016109f8565b6000805461ffff84811663ffffffff19909216821762010000918516918202179092556040805191825260208201929092527fde11d0b14fa526d6653cddfb3426cc250f98f6e72a6a36fdae6c33d85df770d1910160405180910390a15050565b6002546001600160a01b0316331461151b5760405162461bcd60e51b81526004016109f890613bd5565b600454421061153c5760405162461bcd60e51b81526004016109f890613bfb565b6115446126c6565b61a8c08167ffffffffffffffff161015801561156d575062278d008167ffffffffffffffff1611155b6115ad5760405162461bcd60e51b8152602060048201526011602482015270496e76616c69642068616c66206c69666560781b60448201526064016109f8565b8067ffffffffffffffff166115c9671bc16d674ec80000613602565b6115d39190613b5c565b600080546dffffffffffffffff0000000000001916600160301b67ffffffffffffffff9384160217905560405190821681527fcd505beca76120b741b38fe89f62433d1e15c39460e3755a9e5ca3f1f3ce7a29906020015b60405180910390a150565b61163e6126c6565b61164783612f14565b60008213156116f0576001600160a01b0383166000908152600d602052604090205460ff166116885781601260008282546116829190613b25565b90915550505b6001600160a01b0383166000908152600a6020526040812080548492906116b0908490613b25565b909155506116eb90506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016333085613839565b611870565b6000821215611870576001600160a01b0383166000908152600d602052604090205460ff16156117db5760125461172683613c24565b6040516370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa15801561178a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ae9190613c40565b6117b89190613b7e565b10156117d65760405162461bcd60e51b81526004016109f890613c59565b6117fb565b6117e482613c24565b601260008282546117f59190613b7e565b90915550505b61180482613c24565b6001600160a01b0384166000908152600a60205260408120805490919061182c908490613b7e565b9091555061187090503361183f84613c24565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169190613458565b600081131561190a578061188484826134d9565b6040516340c10f1960e01b8152336004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906340c10f1990604401600060405180830381600087803b1580156118ec57600080fd5b505af1158015611900573d6000803e3d6000fd5b5050505050611a67565b6000811215611a6757600061191e82613c24565b9050600061192b8561262f565b905081811161194857809150611943856000196131e0565b611952565b61195285836131e0565b6040516323b872dd60e01b8152336004820152306024820152604481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906323b872dd906064016020604051808303816000875af11580156119c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e99190613b95565b50604051630852cd8d60e31b8152600481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906342966c6890602401600060405180830381600087803b158015611a4c57600080fd5b505af1158015611a60573d6000803e3d6000fd5b5050505050505b6000611a728461262f565b90508115611aff57801580611aa757507f00000000000000000000000000000000000000000000000000000000000000008110155b611aff5760405162461bcd60e51b8152602060048201526024808201527f446562742062656c6f77206d696e696d756d20616e64206c61726765722074686044820152630616e20360e41b60648201526084016109f8565b60408051848152602081018490526001600160a01b038616917f2621f237099759c662179354fad7ce6acb6344513f178385af1c93d9abb81cb1910160405180910390a260008312158015611b55575060008213155b15611b605750505050565b336001600160a01b0385161480611b9a57506001600160a01b0384166000908152600e6020908152604080832033845290915290205460ff165b611bb65760405162461bcd60e51b81526004016109f890613bd5565b80600003611bc45750505050565b600080611bcf612d7e565b50915091508015611c105760405162461bcd60e51b815260206004820152600b60248201526a526564756365206f6e6c7960a81b60448201526064016109f8565b6001600160a01b0386166000908152600a602052604081205461271090670de0b6b3a7640000907f000000000000000000000000000000000000000000000000000000000000000090611c639087613b3d565b611c6d9190613b3d565b611c779190613b5c565b611c819190613b5c565b905080841115611ccb5760405162461bcd60e51b815260206004820152601560248201527414dbdb1d995b98de4818da1958dac819985a5b1959605a1b60448201526064016109f8565b50505050505050565b6000806000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015611d38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d5c9190613cb5565b5093505092505060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611dc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611de79190613d05565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e6d9190613d05565b90506024611e7b8284613d28565b60ff1611611ec957600082611e91836024613d4d565b611e9b9190613d4d565b905060008513611eac576000611ec1565b611eb781600a613e54565b611ec19086613b3d565b965050611f0b565b60006024611ed78385613d28565b611ee19190613d4d565b905060008513611ef2576000611f07565b611efd81600a613e54565b611f079086613b5c565b9650505b829450505050509091565b6002546001600160a01b03163314611f405760405162461bcd60e51b81526004016109f890613bd5565b611f486126c6565b6103e8811115611f885760405162461bcd60e51b815260206004820152600b60248201526a496e76616c69642066656560a81b60448201526064016109f8565b600080546001600160f01b0316600160f01b61ffff8416021790556040518181527f82f90ad483dce76534def3d808c0cb2de1d2d0cf1a52d5421d8347a8e67bd3859060200161162b565b6002546001600160a01b03163314611ffd5760405162461bcd60e51b81526004016109f890613bd5565b600454421061201e5760405162461bcd60e51b81526004016109f890613bfb565b6120266126c6565b61012c8161ffff1611156120755760405162461bcd60e51b8152602060048201526016602482015275496e76616c69642072656465656d206665652062707360501b60448201526064016109f8565b6000805465ffff00000000191664010000000061ffff8416908102919091179091556040519081527f29a575057f3ecc51f2f82c3dd11eabfd86c3a1293ce079baac1ca2cc8a4346f89060200161162b565b6002546001600160a01b031633146120f15760405162461bcd60e51b81526004016109f890613bd5565b60045442106121125760405162461bcd60e51b81526004016109f890613bfb565b42600455565b60006121226126c6565b61212b83610e16565b90508181101561217d5760405162461bcd60e51b815260206004820152601760248201527f696e73756666696369656e7420616d6f756e74206f757400000000000000000060448201526064016109f8565b6012546040516370a0823160e01b815230600482015282907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa1580156121e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061220a9190613c40565b6122149190613b7e565b10156122325760405162461bcd60e51b81526004016109f890613c59565b82600560008282546122449190613b7e565b90915550506040516323b872dd60e01b8152336004820152306024820152604481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906323b872dd906064016020604051808303816000875af11580156122bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122e09190613b95565b50604051630852cd8d60e31b8152600481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906342966c6890602401600060405180830381600087803b15801561234357600080fd5b505af1158015612357573d6000803e3d6000fd5b505060065461237a92508391506ec097ce7bc90715b34b9f1000000000906138d5565b6009546000908152601160205260408120805490919061239b908490613b25565b909155506123d590506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163383613458565b633b9aca006005546006546123ea9190613b5c565b1115612464576009805490600061240083613e63565b909155505060065461242a90670de0b6b3a76400006ec097ce7bc90715b34b9f10000000006138d5565b6006556009546040519081527febad8099c467528a56c98b63c8d476d251cf1ffb4c75db94b4d23fa2b6a1e3359060200160405180910390a15b604080518481526020810183905233917ff3a670cd3af7d64b488926880889d08a8585a138ff455227af6737339a1ec262910160405180910390a25b92915050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146124ee5760405162461bcd60e51b81526004016109f890613bd5565b6124f66126c6565b6001546040516340c10f1960e01b81526001600160a01b038381166004830152600160881b9092046001600160781b031660248201527f0000000000000000000000000000000000000000000000000000000000000000909116906340c10f1990604401600060405180830381600087803b15801561257457600080fd5b505af1158015612588573d6000803e3d6000fd5b50506001805470ffffffffffffffffffffffffffffffffff169055505050565b6125b2848261113a565b6125bd848484611636565b50505050565b336000818152600e602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f5e7ca79ea3ac1b19ddf506e091181a1de49af2216a6e684397d85c0757205336910160405180910390a35050565b6001600160a01b0381166000908152600d602052604081205460ff161561268f5760065415612687576005546006546001600160a01b0384166000908152600b60205260409020546126829290916138d5565b6124a0565b600092915050565b60085415612687576007546008546001600160a01b0384166000908152600c60205260409020546126829290916138d5565b919050565b600080546126e290600160701b900464ffffffffff1642613b7e565b9050806000036126ef5750565b6007546000547f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169163ec95f34591600160981b81046001600160581b0316908590600160301b900467ffffffffffffffff16612752612c5f565b60005460405160e088901b6001600160e01b031916815260048101969096526001600160581b039094166024860152604485019290925267ffffffffffffffff166064840152608483015261ffff80821660a4840152620100009091041660c482015260e4016040805180830381865afa9250505080156127f0575060408051601f3d908101601f191682019092526127ed91810190613e7c565b60015b15612c5c57600080546127109061281290600160f01b900461ffff1684613b3d565b61281c9190613b5c565b600154909150600090612710906128379061ffff1685613b3d565b6128419190613b5c565b905081600160028282829054906101000a90046001600160781b03166128679190613ea0565b92506101000a8154816001600160781b0302191690836001600160781b0316021790555080600160118282829054906101000a90046001600160781b03166128af9190613ea0565b92506101000a8154816001600160781b0302191690836001600160781b031602179055506000816001600160781b0316836001600160781b0316856128f49190613b7e565b6128fe9190613b7e565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166301e1d1146040518163ffffffff1660e01b8152600401602060405180830381865afa158015612960573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129849190613c40565b9050600754811015612ab0576007546000906129a08385613b3d565b6129aa9190613b5c565b6040516340c10f1960e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018390529192507f0000000000000000000000000000000000000000000000000000000000000000909116906340c10f1990604401600060405180830381600087803b158015612a3957600080fd5b505af1158015612a4d573d6000803e3d6000fd5b5050505060008184612a5f9190613b7e565b905080600160028282829054906101000a90046001600160781b0316612a859190613ea0565b92506101000a8154816001600160781b0302191690836001600160781b031602179055505050612b53565b6040516340c10f1960e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018490527f000000000000000000000000000000000000000000000000000000000000000016906340c10f1990604401600060405180830381600087803b158015612b3a57600080fd5b505af1158015612b4e573d6000803e3d6000fd5b505050505b8460076000828254612b659190613b25565b9091555050600080546fffffffffffffffffffffffffffffffff60701b1916600160701b4264ffffffffff16026affffffffffffffffffffff60981b191617600160981b6001600160581b0389160217905560405163dfd56cff60e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063dfd56cff90602401602060405180830381865afa158015612c1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c3f9190613c40565b6001805461ffff191661ffff929092169190911790555050505050505b50565b6000600554600014612c9957600554600754612c7b9190613b25565b600554612c8a90612710613b3d565b612c949190613b5c565b905090565b50600090565b6002546001600160a01b03163314612cc95760405162461bcd60e51b81526004016109f890613bd5565b612cd16126c6565b6001546040516340c10f1960e01b8152336004820152620100009091046001600160781b031660248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906340c10f1990604401600060405180830381600087803b158015612d4a57600080fd5b505af1158015612d5e573d6000803e3d6000fd5b50506001805470ffffffffffffffffffffffffffffff0000191690555050565b60008060008060019150306001600160a01b03166339cdab5c6040518163ffffffff1660e01b81526004016040805180830381865afa925050508015612de1575060408051601f3d908101601f19168201909252612dde91810190613e7c565b60015b612df2576001925060009150612e0c565b81955080925085600003612e095760019450600093505b50505b42600082821015612e1e576000612e28565b612e288383613b7e565b905062015f90811115612e8557600194506000612e4862015f9083613b7e565b905062015180811015612e7e5762015180612e638282613b7e565b612e6d9089613b3d565b612e779190613b5c565b9650612e83565b600096505b505b8515612e915785612e94565b60015b9550505050909192565b6003546001600160a01b03163314612ec85760405162461bcd60e51b81526004016109f890613bd5565b600354600280546001600160a01b0319166001600160a01b0390921691821790556040517f6317889d8001d27c355e09712356a69d4d49909c262df5cdc3d94df3fc6635b390600090a2565b6001600160a01b0381166000908152600b602052604090205480156130c9576001600160a01b038216600090815260106020908152604080832054600a835281842054600f9093529083205490925b600581108015612f74575060095484105b8015612f805750600085115b1561304157600084815260116020526040812054612f9f908490613b7e565b90506000612fbd82886ec097ce7bc90715b34b9f10000000006138d5565b9050808510612fd557612fd08186613b7e565b612fd8565b60005b9450612fe5600187613b25565b9550613000876ec097ce7bc90715b34b9f10000000006138fb565b60011461302557613020876ec097ce7bc90715b34b9f10000000006138fb565b613028565b60005b96506000935050508061303a90613e63565b9050612f63565b5083156130a057600083815260116020526040812054613062908390613b7e565b9050600061308082876ec097ce7bc90715b34b9f10000000006138d5565b9050808410613098576130938185613b7e565b61309b565b60005b935050505b506001600160a01b0384166000908152600b60209081526040808320869055600a909152902055505b6001600160a01b0382166000908152600d602052604090205460ff1615613123576009546001600160a01b03831660008181526010602090815260408083208590559382526011815283822054928252600f905291909120555b5050565b600080612710670de0b6b3a76400007f00000000000000000000000000000000000000000000000000000000000000006131618888613b3d565b61316b9190613b3d565b6131759190613b5c565b61317f9190613b5c565b905082811115613193576000915050610e0f565b61319e600484613b5c565b915069021e19e0c9bab24000008210156131d85769021e19e0c9bab240000083106131d35769021e19e0c9bab24000006131d5565b825b91505b509392505050565b6001600160a01b0382166000908152600d602052604090205460ff16156132c2576000600019820361323657506001600160a01b0382166000908152600b602052604090205461322f8361262f565b915061324a565b600654600554613247918491613910565b90505b6001600160a01b0383166000908152600b602052604081208054839290613272908490613b7e565b9091555050600654811015613294578060065461328f9190613b7e565b613297565b60005b6006556005548210156132b757816005546132b29190613b7e565b6132ba565b60005b600555505050565b600060001982036132f757506001600160a01b0382166000908152600c60205260409020546132f08361262f565b915061330b565b600854600754613308918491613910565b90505b6001600160a01b0383166000908152600c602052604081208054839290613333908490613b7e565b92505081905550806008600082825461334c9190613b7e565b9250508190555081600760008282546133659190613b7e565b9091555050505050565b600080670de0b6b3a76400006133858587613b3d565b61338f9190613b5c565b9050806000036133a3576064915050610e0f565b6000816133b285612710613b3d565b6133bc9190613b5c565b90507f000000000000000000000000000000000000000000000000000000000000000060006133ed826101f4613b25565b9050818311613403576064945050505050610e0f565b808310613418576103e8945050505050610e0f565b6134228282613b7e565b61342c8385613b7e565b61343890610384613b3d565b6134429190613b5c565b61344d906064613b25565b945050505050610e0f565b600060405163a9059cbb60e01b81526001600160a01b0384166004820152826024820152602060006044836000895af13d15601f3d11600160005114161716915050806125bd5760405162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b60448201526064016109f8565b6001600160a01b0382166000908152600d602052604090205460ff161561358457600060065460001461351c576006546005546135179184916138d5565b61351e565b815b905081600560008282546135329190613b25565b92505081905550806006600082825461354b9190613b25565b90915550506001600160a01b0383166000908152600b602052604081208054839290613578908490613b25565b90915550613123915050565b60006008546000146135a6576008546007546135a19184916138d5565b6135a8565b815b905081600760008282546135bc9190613b25565b9250508190555080600860008282546135d59190613b25565b90915550506001600160a01b0383166000908152600c602052604081208054839290613365908490613b25565b600080821361363f5760405162461bcd60e51b815260206004820152600960248201526815539111519253915160ba1b60448201526064016109f8565b5060606fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110600190811b90911783811c90911017609f81810383019390931b90921c6c465772b2bbbb5f824b15207a3081018102821d6d0388eaa27412d5aca026815d636e018102821d6d0df99ac502031bf953eff472fdcc018102821d6d13cdffb29d51d99322bdff5f2211018102821d6d0a0f742023def783a307a986912e018102821d6d01920d8043ca89b5239253284e42018102821d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7882018202831d6d0139601a2efabe717e604cbb4894018202831d6d02247f7a7b6594320649aa03aba1018202831d6c8c3f38e95a6b1ff2ab1c3b343619018202831d6d02384773bdf1ac5676facced60901901820290921d6cb9a025d814b29c212b8b1a07cd190102780a09507084cc699bb0e71ea869ffffffffffffffffffffffff190105711340daa0d5f769dba1915cef59f0815a550602605f19919091017d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b302017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d90565b60006040516323b872dd60e01b81526001600160a01b03851660048201526001600160a01b03841660248201528260448201526020600060648360008a5af13d15601f3d11600160005114161716915050806138ce5760405162461bcd60e51b81526020600482015260146024820152731514905394d1915497d19493d357d1905253115160621b60448201526064016109f8565b5050505050565b60008260001904841183021582026138ec57600080fd5b50910281810615159190040190565b6000610e0f83670de0b6b3a7640000846138d5565b600082600019048411830215820261392757600080fd5b5091020490565b80356001600160a01b03811681146126c157600080fd5b60008060006060848603121561395a57600080fd5b6139638461392e565b95602085013595506040909401359392505050565b60006020828403121561398a57600080fd5b5035919050565b600080604083850312156139a457600080fd5b6139ad8361392e565b91506139bb6020840161392e565b90509250929050565b6000602082840312156139d657600080fd5b610e0f8261392e565b8015158114612c5c57600080fd5b60008060408385031215613a0057600080fd5b613a098361392e565b91506020830135613a19816139df565b809150509250929050565b803561ffff811681146126c157600080fd5b60008060408385031215613a4957600080fd5b613a5283613a24565b91506139bb60208401613a24565b600060208284031215613a7257600080fd5b813567ffffffffffffffff81168114610e0f57600080fd5b600060208284031215613a9c57600080fd5b610e0f82613a24565b60008060408385031215613ab857600080fd5b50508035926020909101359150565b60008060008060808587031215613add57600080fd5b613ae68561392e565b935060208501359250604085013591506060850135613b04816139df565b939692955090935050565b634e487b7160e01b600052601160045260246000fd5b60008219821115613b3857613b38613b0f565b500190565b6000816000190483118215151615613b5757613b57613b0f565b500290565b600082613b7957634e487b7160e01b600052601260045260246000fd5b500490565b600082821015613b9057613b90613b0f565b500390565b600060208284031215613ba757600080fd5b8151610e0f816139df565b600061ffff83811690831681811015613bcd57613bcd613b0f565b039392505050565b6020808252600c908201526b155b985d5d1a1bdc9a5e995960a21b604082015260600190565b6020808252600f908201526e111958591b1a5b99481c185cdcd959608a1b604082015260600190565b6000600160ff1b8201613c3957613c39613b0f565b5060000390565b600060208284031215613c5257600080fd5b5051919050565b60208082526022908201527f496e73756666696369656e742072656465656d61626c6520636f6c6c61746572604082015261185b60f21b606082015260800190565b805169ffffffffffffffffffff811681146126c157600080fd5b600080600080600060a08688031215613ccd57600080fd5b613cd686613c9b565b9450602086015193506040860151925060608601519150613cf960808701613c9b565b90509295509295909350565b600060208284031215613d1757600080fd5b815160ff81168114610e0f57600080fd5b600060ff821660ff84168060ff03821115613d4557613d45613b0f565b019392505050565b600060ff821660ff841680821015613d6757613d67613b0f565b90039392505050565b600181815b80851115613dab578160001904821115613d9157613d91613b0f565b80851615613d9e57918102915b93841c9390800290613d75565b509250929050565b600082613dc2575060016124a0565b81613dcf575060006124a0565b8160018114613de55760028114613def57613e0b565b60019150506124a0565b60ff841115613e0057613e00613b0f565b50506001821b6124a0565b5060208310610133831016604e8410600b8410161715613e2e575081810a6124a0565b613e388383613d70565b8060001904821115613e4c57613e4c613b0f565b029392505050565b6000610e0f60ff841683613db3565b600060018201613e7557613e75613b0f565b5060010190565b60008060408385031215613e8f57600080fd5b505080516020909101519092909150565b60006001600160781b03808316818516808303821115613ec257613ec2613b0f565b0194935050505056fea2646970667358221220c9b20454d68d870aa705badfaee552201154cb405e93e0a8dfd7808e94448f9764736f6c634300080d003300000000000000000000000041d5d79431a913c4ae7d69a668ecdfe5ff9dfb6800000000000000000000000054f1e4eb93c5b5f4c12776c96e08a49a9928fe8400000000000000000000000069cfe57dac431ad2e3662f4d25d1aba2d49e8488000000000000000000000000f02935726e9402481dd16bba270eb0b2a97faf030000000000000000000000006e707f6d3ae5199f142f8e9d0f40adbc7a812d7d0000000000000000000000006832802996e177660ede6095f184ec34d91c39e2000000000000000000000000759a159d78342340ebacffb027c05910c093f4300000000000000000000000000000000000000000000000000000000000000bb80000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000000000000001e13380