0 txs
24.3k calls
constructor
constructor(address registry_, address nonFungiblePositionManager)
functions
ASSET_TYPE
viewfunction ASSET_TYPE() view returns (uint256)
assetToUnderlyingAssets
viewfunction assetToUnderlyingAssets(bytes32 assetKey, uint256) view returns (bytes32 underlyingAssetKeys)
getRiskFactors
viewfunction getRiskFactors(address creditor, address asset, uint256 assetId) view returns (uint16 collateralFactor, uint16 liquidationFactor)
getValue
viewfunction getValue(address creditor, address asset, uint256 assetId, uint256 assetAmount) view returns (uint256 valueInUsd, uint256 collateralFactor, uint256 liquidationFactor)
inAssetModule
viewfunction inAssetModule(address) view returns (bool)
isAllowed
viewfunction isAllowed(address asset, uint256 assetId) view returns (bool)
lastExposureAssetToUnderlyingAsset
viewfunction lastExposureAssetToUnderlyingAsset(address creditor, bytes32 assetKey, bytes32 underlyingAssetKey) view returns (uint256 exposure)
lastExposuresAsset
viewfunction lastExposuresAsset(address creditor, bytes32 assetKey) view returns (uint112 lastExposureAsset, uint112 lastUsdExposureAsset)
owner
viewfunction owner() view returns (address)
REGISTRY
viewfunction REGISTRY() view returns (address)
riskParams
viewfunction riskParams(address creditor) view returns (uint112 lastUsdExposureProtocol, uint112 maxUsdExposureProtocol, uint16 riskFactor)
processDirectDeposit
nonpayablefunction processDirectDeposit(address creditor, address asset, uint256 assetId, uint256 amount) returns (uint256 recursiveCalls)
processDirectWithdrawal
nonpayablefunction processDirectWithdrawal(address creditor, address asset, uint256 assetId, uint256 amount)
processIndirectDeposit
nonpayablefunction processIndirectDeposit(address creditor, address asset, uint256 assetId, uint256 exposureUpperAssetToAsset, int256 deltaExposureUpperAssetToAsset) returns (uint256 recursiveCalls, uint256 usdExposureUpperAssetToAsset)
processIndirectWithdrawal
nonpayablefunction processIndirectWithdrawal(address creditor, address asset, uint256 assetId, uint256 exposureUpperAssetToAsset, int256 deltaExposureUpperAssetToAsset) returns (uint256 usdExposureUpperAssetToAsset)
setProtocol
nonpayablefunction setProtocol()
setRiskParameters
nonpayablefunction setRiskParameters(address creditor, uint112 maxUsdExposureProtocol_, uint16 riskFactor)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
events
OwnershipTransferred
event OwnershipTransferred(address indexed user, address indexed newOwner)
errors
ExposureNotInLimits
error ExposureNotInLimits()
InvalidAmount
error InvalidAmount()
InvalidId
error InvalidId()
OnlyRegistry
error OnlyRegistry()
Overflow
error Overflow()
RiskFactorNotInLimits
error RiskFactorNotInLimits()
ZeroLiquidity
error ZeroLiquidity()
creation bytecode
0x61010060405234801562000011575f80fd5b506040516200379838038062003798833981016040819052620000349162000129565b5f80546001600160a01b03191633908117825560405184926002928492849282917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506001600160a01b0391821660a052608052831660c08190526040805163c45a015560e01b8152905191935063c45a0155925060048082019260209290919082900301815f875af1158015620000d2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620000f891906200015f565b6001600160a01b031660e05250620001829050565b80516001600160a01b038116811462000124575f80fd5b919050565b5f80604083850312156200013b575f80fd5b62000146836200010d565b915062000156602084016200010d565b90509250929050565b5f6020828403121562000170575f80fd5b6200017b826200010d565b9392505050565b60805160a05160c05160e05161354f620002495f395f61267f01525f818161097601528181610ae101528181610b3501528181610ea301528181610ff8015281816110da01528181611fb80152818161205a015261213301525f818161012f0152818161057d01528181610839015281816109f701528181610bd101528181610c6601528181610d0301528181610d860152818161118e0152818161156f015281816117f701528181611a960152611d8201525f818161036901526109c0015261354f5ff3fe608060405234801561000f575f80fd5b5060043610610111575f3560e01c806353b85a501161009e5780638da5cb5b1161006e5780638da5cb5b1461038b578063ba9270ff1461039d578063f0793997146103b0578063f2fde38b146103b8578063f8350ed0146103cb575f80fd5b806353b85a501461028857806373aecb98146102f357806382d6b166146103065780638815eb3914610364575f80fd5b80631ba0408c116100e45780631ba0408c146101c15780632341eb86146101ef5780633a8fe5e7146102175780633c0ac4f61461024757806349bccc5d1461025a575f80fd5b8063024874c71461011557806306433b1b1461012a57806315ed93bc1461016e57806317235093146101a0575b5f80fd5b610128610123366004612cb9565b6103de565b005b6101517f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b61019061017c366004612cfc565b60016020525f908152604090205460ff1681565b6040519015158152602001610165565b6101b36101ae366004612d17565b610407565b604051908152602001610165565b6101d46101cf366004612d64565b610435565b6040805161ffff938416815292909116602083015201610165565b6102026101fd366004612d17565b61074d565b60408051928352602083019190915201610165565b6101b3610225366004612da2565b600460209081525f938452604080852082529284528284209052825290205481565b6101b3610255366004612dd4565b61079f565b61026d610268366004612cb9565b6107ca565b60408051938452602084019290925290820152606001610165565b6102c9610296366004612cfc565b60026020525f90815260409020546001600160701b0380821691600160701b810490911690600160e01b900461ffff1683565b604080516001600160701b03948516815293909216602084015261ffff1690820152606001610165565b610128610301366004612e03565b61082e565b610344610314366004612e56565b600360209081525f92835260408084209091529082529020546001600160701b0380821691600160701b90041682565b604080516001600160701b03938416815292909116602083015201610165565b6101b37f000000000000000000000000000000000000000000000000000000000000000081565b5f54610151906001600160a01b031681565b6101b36103ab366004612cb9565b610901565b61012861091f565b6101286103c6366004612cfc565b610a4c565b6101906103d9366004612e56565b610ade565b6103ea84848484610cf8565b80600103610401575f828152600560205260408120555b50505050565b5f6104158686868686610d7a565b9050811961042c575f848152600560205260408120555b95945050505050565b5f805f61044c610447868660a01b1790565b610e21565b6040805160028082526060820183529293505f92909160208301908036833750506040805160028082526060820183529394505f93909250906020830190803683370190505090506104c5835f815181106104a9576104a9612e94565b60200260200101516001600160a01b0381169160a09190911c90565b835f815181106104d7576104d7612e94565b60200260200101835f815181106104f0576104f0612e94565b6020026020010182815250826001600160a01b03166001600160a01b03168152505050610529836001815181106104a9576104a9612e94565b8360018151811061053c5761053c612e94565b602002602001018360018151811061055657610556612e94565b6020026020010182815250826001600160a01b03166001600160a01b031681525050505f807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630344bc4e8b86866040518463ffffffff1660e01b81526004016105cb93929190612f1a565b5f60405180830381865afa1580156105e5573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261060c919081019061304b565b6001600160a01b038c165f908152600260205260409020548251929450909250600160e01b900461ffff16908390600190811061064b5761064b612e94565b602002602001015161ffff16835f8151811061066957610669612e94565b602002602001015161ffff16106106b4576106af8360018151811061069057610690612e94565b602002602001015161ffff1661271083610fb09092919063ffffffff16565b6106c9565b6106c9835f8151811061069057610690612e94565b9750816001815181106106de576106de612e94565b602002602001015161ffff16825f815181106106fc576106fc612e94565b602002602001015161ffff1610610728576107238260018151811061069057610690612e94565b61073d565b61073d825f8151811061069057610690612e94565b9650505050505050935093915050565b5f80826001036107655761076085610fcb565b610784565b82156107845760405163162908e360e11b815260040160405180910390fd5b6107918787878787611181565b909890975095505050505050565b6006602052815f5260405f2081815481106107b8575f80fd5b905f5260205f20015f91509150505481565b5f805f806107da878760a01b1790565b90505f6107e682610e21565b90505f806107f68b858a86611234565b9150915080515f0361080f5761080c8b846113e5565b90505b61081a8b83836115f6565b919d909c50909a5098505050505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610877576040516310f5403960e31b815260040160405180910390fd5b6127108161ffff16111561089e57604051630b1c8e2560e01b815260040160405180910390fd5b6001600160a01b039092165f908152600260205260409020805461ffff909316600160e01b0261ffff60e01b196001600160701b03909316600160701b02929092166fffffffffffffffffffffffffffffffff60701b1990931692909217179055565b5f816001036109135761091383610fcb565b61042c858585856117eb565b5f546001600160a01b0316331461096c5760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b60448201526064015b60405180910390fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081165f81815260016020819052604091829020805460ff191690911790555163f1751c7b60e01b81527f00000000000000000000000000000000000000000000000000000000000000006001600160601b0316600482015260248101919091527f00000000000000000000000000000000000000000000000000000000000000009091169063f1751c7b906044015f604051808303815f87803b158015610a3a575f80fd5b505af1158015610401573d5f803e3d5ffd5b5f546001600160a01b03163314610a945760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b6044820152606401610963565b5f80546001600160a01b0319166001600160a01b0383169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614610b1f57505f610cf2565b60405163133f757160e31b8152600481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906399fbab889060240161018060405180830381865afa925050508015610ba1575060408051601f3d908101601f19168201909252610b9e918101906130dd565b60015b610bac57505f610cf2565b604051630f8350ed60e41b81526001600160a01b038b811660048301525f60248301527f0000000000000000000000000000000000000000000000000000000000000000169063f8350ed090604401602060405180830381865afa158015610c16573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c3a91906131c0565b8015610ccf5750604051630f8350ed60e41b81526001600160a01b038a811660048301525f60248301527f0000000000000000000000000000000000000000000000000000000000000000169063f8350ed090604401602060405180830381865afa158015610cab573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ccf91906131c0565b8015610ce357505f856001600160801b0316115b9c505050505050505050505050505b92915050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610d41576040516310f5403960e31b815260040160405180910390fd5b5f610d4e848460a01b1790565b90505f610d648683610d5f866131ed565b61186e565b9050610d7186838361195f565b50505050505050565b5f336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610dc4576040516310f5403960e31b815260040160405180910390fd5b5f610dd1868660a01b1790565b90505f610ddf88838661186e565b90505f610ded89848461195f565b9050811580610dfa575080155b15610e07575f9350610e15565b610e12818784610fb0565b93505b50505095945050505050565b5f81815260066020908152604091829020805483518184028101840190945280845260609392830182828015610e7457602002820191905f5260205f20905b815481526020019060010190808311610e60575b5050505050905080515f03610fab5760405163133f757160e31b815260a083901c60048201819052905f9081907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906399fbab889060240161018060405180830381865afa158015610ef1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f1591906130dd565b5050505050505050935093505050600267ffffffffffffffff811115610f3d57610f3d612e80565b604051908082528060200260200182016040528015610f66578160200160208202803683370190505b50935081845f81518110610f7c57610f7c612e94565b60209081029190910101528084600181518110610f9b57610f9b612e94565b6020026020010181815250505050505b919050565b5f825f190484118302158202610fc4575f80fd5b5091020490565b6001600160601b03811115610ff357604051631bf4348160e31b815260040160405180910390fd5b5f805f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166399fbab88856040518263ffffffff1660e01b815260040161104491815260200190565b61018060405180830381865afa158015611060573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061108491906130dd565b505050509750505050945094505050806001600160801b03165f036110bc57604051630200e8a960e31b815260040160405180910390fd5b5f8481526005602052604081206001600160801b03831690556111017f00000000000000000000000000000000000000000000000000000000000000008660a01b1790565b6040805160028082526060820183529293505f92909160208301908036833701905050905084815f8151811061113957611139612e94565b6020908102919091010152838160018151811061115857611158612e94565b6020908102919091018101919091525f83815260068252604090208251610d7192840190612c4e565b5f80336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146111cc576040516310f5403960e31b815260040160405180910390fd5b5f6111d9878760a01b1790565b90505f6111e789838761186e565b90505f806111f6838c86611c47565b91509150825f1480611206575080155b15611213575f9450611221565b61121e818985610fb0565b94505b5060010199929850919650505050505050565b606080835f036112635760408051600280825260608201835290916020830190803683370190505091506113dc565b60a085901c5f8080808061127686611f7f565b604080516002808252606082018352969b5094995092975090955093505f929060208301908036833701905050905085815f815181106112b8576112b8612e94565b602090810291909101015284816001815181106112d7576112d7612e94565b6020026020010181815250506112ed8d826113e5565b97505f806113378686868d5f8151811061130957611309612e94565b60200260200101515f01518e60018151811061132757611327612e94565b60200260200101515f01516120eb565b915091505f806113468b612125565b915091508382116113575781611359565b835b9150828111611368578061136a565b825b6040805160028082526060820183529293509190602083019080368337019050509c508184018d5f815181106113a2576113a2612e94565b6020026020010181815250508083018d6001815181106113c4576113c4612e94565b60200260200101818152505050505050505050505050505b94509492505050565b80516060905f8167ffffffffffffffff81111561140457611404612e80565b60405190808252806020026020018201604052801561142d578160200160208202803683370190505b5090505f8267ffffffffffffffff81111561144a5761144a612e80565b604051908082528060200260200182016040528015611473578160200160208202803683370190505b5090505f8367ffffffffffffffff81111561149057611490612e80565b6040519080825280602002602001820160405280156114b9578160200160208202803683370190505b5090505f5b84811015611557576114db8782815181106104a9576104a9612e94565b8583815181106114ed576114ed612e94565b6020026020010185848151811061150657611506612e94565b6020026020010182815250826001600160a01b03166001600160a01b03168152505050670de0b6b3a764000082828151811061154457611544612e94565b60209081029190910101526001016114be565b5060405163cbdcbc3b60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063cbdcbc3b906115aa908a90879087908790600401613207565b5f60405180830381865afa1580156115c4573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526115eb9190810190613250565b979650505050505050565b5f805f61164d8460018151811061160f5761160f612e94565b60200260200101515f0151670de0b6b3a76400008760018151811061163657611636612e94565b6020026020010151610fb09092919063ffffffff16565b611688855f8151811061166257611662612e94565b60200260200101515f0151670de0b6b3a7640000885f8151811061163657611636612e94565b6116929190613307565b6001600160a01b0387165f908152600260205260409020548551919450600160e01b900461ffff1690859060019081106116ce576116ce612e94565b602002602001015160200151855f815181106116ec576116ec612e94565b60200260200101516020015110611737576117328560018151811061171357611713612e94565b60200260200101516020015161271083610fb09092919063ffffffff16565b61174c565b61174c855f8151811061171357611713612e94565b92508460018151811061176157611761612e94565b602002602001015160400151855f8151811061177f5761177f612e94565b602002602001015160400151106117ca576117c5856001815181106117a6576117a6612e94565b60200260200101516040015161271083610fb09092919063ffffffff16565b6117df565b6117df855f815181106117a6576117a6612e94565b91505093509350939050565b5f336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611835576040516310f5403960e31b815260040160405180910390fd5b5f611842858560a01b1790565b90505f61185087838661186e565b90505f61185e828985611c47565b5060010198975050505050505050565b5f808213156118b5576001600160a01b0384165f9081526003602090815260408083208684529091529020546118ae9083906001600160701b0316613307565b905061190d565b6001600160a01b0384165f9081526003602090815260408083208684529091529020546001600160701b03166118ea836131ed565b81116118f6575f611909565b6118ff836131ed565b611909908261331a565b9150505b6119168161223e565b6001600160a01b03949094165f9081526003602090815260408083209583529490529290922080546001600160701b0319166001600160701b0390941693909317909255919050565b5f8061196a84610e21565b90505f61197986868685611234565b5090505f805f805b8551811015611b78576001600160a01b038a165f9081526004602090815260408083208c8452909152812087519091908890849081106119c3576119c3612e94565b602002602001015181526020019081526020015f20548582815181106119eb576119eb612e94565b60200260200101516119fd919061332d565b9350848181518110611a1157611a11612e94565b602002602001015160045f8c6001600160a01b03166001600160a01b031681526020019081526020015f205f8b81526020019081526020015f205f888481518110611a5e57611a5e612e94565b602002602001015181526020019081526020015f2081905550611a8c8682815181106104a9576104a9612e94565b80935081945050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316631e3b06628b8585898681518110611ad857611ad8612e94565b60209081029190910101516040516001600160e01b031960e087901b1681526001600160a01b039485166004820152939092166024840152604483015260648201526084810187905260a4016020604051808303815f875af1158015611b40573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b649190613353565b611b6e9088613307565b9650600101611981565b506001600160a01b0389165f8181526003602090815260408083208c8452825280832080546001600160701b038c8116600160701b908102600160701b600160e01b031984161790935595855260029093529083205491048316921690828910611be757508188038101611bf8565b888303821115611bf8575087820381035b611c018161223e565b6001600160a01b039c909c165f90815260026020526040902080546001600160701b0319166001600160701b03909d169c909c17909b5550959998505050505050505050565b5f805f80611c5485610e21565b90505f611c6387878a85611234565b5090505f805f805f805b8751811015611e6c576001600160a01b038d165f9081526004602090815260408083208f8452909152812089519091908a9084908110611caf57611caf612e94565b602002602001015181526020019081526020015f2054878281518110611cd757611cd7612e94565b6020026020010151611ce9919061332d565b9550868181518110611cfd57611cfd612e94565b602002602001015160045f8f6001600160a01b03166001600160a01b031681526020019081526020015f205f8e81526020019081526020015f205f8a8481518110611d4a57611d4a612e94565b602002602001015181526020019081526020015f2081905550611d788882815181106104a9576104a9612e94565b80955081965050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636a6674a78e87878b8681518110611dc457611dc4612e94565b60209081029190910101516040516001600160e01b031960e087901b1681526001600160a01b039485166004820152939092166024840152604483015260648201526084810189905260a40160408051808303815f875af1158015611e2b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e4f919061336a565b9093509150611e5e828b613307565b9a83019a9950600101611c6d565b506001600160a01b038c165f8181526003602090815260408083208f8452825280832080546001600160701b038f8116600160701b908102600160701b600160e01b0319841617909355958552600290935292205491900482169116818b10611edb57818b0381019950611eed565b8a8203811115611eed578a8203810399505b6001600160a01b038e165f90815260026020526040902054600160701b90046001600160701b03168a10611f34576040516366b09a5960e01b815260040160405180910390fd5b5050506001600160a01b03909a165f90815260026020526040902080546001600160701b039097166001600160701b0319909716969096179095555094989397509295505050505050565b5f818152600560205260408120548190819081906001600160801b038116156120445760405163133f757160e31b8152600481018790527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906399fbab889060240161018060405180830381865afa158015612006573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061202a91906130dd565b50979e50959c50929a509098506120e29650505050505050565b60405163133f757160e31b8152600481018790527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906399fbab889060240161018060405180830381865afa1580156120a8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120cc91906130dd565b50979e50959c50929a5090985096505050505050505b91939590929450565b5f805f6120f88585612252565b9050612116816121078a6122af565b6121108a6122af565b896125dd565b90999098509650505050505050565b5f805f805f805f805f805f807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166399fbab888e6040518263ffffffff1660e01b815260040161217f91815260200190565b61018060405180830381865afa15801561219b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121bf91906130dd565b6001600160801b03169b506001600160801b03169b509b509b506001600160801b03169b509b509b509b509b509b5050505f806121ff8c8c8c8c8c612677565b915091508361221587840389600160801b612926565b019d508261222a86830389600160801b612926565b019c50505050505050505050505050915091565b5f600160701b821061224e575f80fd5b5090565b5f815f03612275575073fffd8963efd1fc6a506488495d951d5263988d26610cf2565b5f61228d846b204fce5e3e2502611000000085610fb0565b90505f612299826129d2565b905061042c655af3107a4000606083901b6133a0565b5f805f8360020b126122c4578260020b6122cb565b8260020b5f035b9050620d89e88111156123045760405162461bcd60e51b81526020600482015260016024820152601560fa1b6044820152606401610963565b5f816001165f0361231957600160801b61232b565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff169050600282161561235f576ffff97272373d413259a46990580e213a0260801c5b600482161561237e576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b600882161561239d576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b60108216156123bc576fffcb9843d60f6159c9db58835c9266440260801c5b60208216156123db576fff973b41fa98c081472e6896dfb254c00260801c5b60408216156123fa576fff2ea16466c96a3843ec78b326b528610260801c5b6080821615612419576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615612439576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615612459576ff987a7253ac413176f2b074cf7815e540260801c5b610400821615612479576ff3392b0822b70005940c7a398e4b70f30260801c5b610800821615612499576fe7159475a2c29b7443b29c7fa6e889d90260801c5b6110008216156124b9576fd097f3bdfd2022b8845ad8f792aa58250260801c5b6120008216156124d9576fa9f746462d870fdf8a65dc1f90e061e50260801c5b6140008216156124f9576f70d869a156d2a1b890bb3df62baf32f70260801c5b618000821615612519576f31be135f97d08fd981231505542fcfa60260801c5b6201000082161561253a576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b6202000082161561255a576e5d6af8dedb81196699c329225ee6040260801c5b62040000821615612579576d2216e584f5fa1ea926041bedfe980260801c5b62080000821615612596576b048a170391f7dc42444e8fa20260801c5b5f8460020b13156125b557805f19816125b1576125b161338c565b0490505b6401000000008106156125c95760016125cb565b5f5b60ff16602082901c0192505050919050565b5f80836001600160a01b0316856001600160a01b031611156125fd579293925b846001600160a01b0316866001600160a01b03161161262857612621858585612a76565b91506113dc565b836001600160a01b0316866001600160a01b031610156126615761264d868585612a76565b915061265a858785612ae4565b90506113dc565b61266c858585612ae4565b905094509492505050565b5f805f6126a67f0000000000000000000000000000000000000000000000000000000000000000898989612b2e565b90505f816001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160c060405180830381865afa1580156126e5573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061270991906133bf565b505060405163f30dba9360e01b815260028b900b60048201529294505f935083926001600160a01b038716925063f30dba93915060240161014060405180830381865afa15801561275c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612780919061344a565b5050505050945094505050505f80856001600160a01b031663f30dba938a6040518263ffffffff1660e01b81526004016127c3919060029190910b815260200190565b61014060405180830381865afa1580156127df573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612803919061344a565b5050505050945094505050508960020b8560020b121561282c5781840397508083039650612916565b8860020b8560020b121561290b578184876001600160a01b031663f30583996040518163ffffffff1660e01b8152600401602060405180830381865afa158015612878573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061289c9190613353565b030397508083876001600160a01b031663461413196040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128de573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129029190613353565b03039650612916565b838203975082810396505b5050505050509550959350505050565b5f80805f19858709858702925082811083820303915050805f0361295a575f841161294f575f80fd5b5082900490506129cb565b808411612965575f80fd5b5f848688098519600190810187169687900496828603819004959092119093035f82900391909104909201919091029190911760038402600290811880860282030280860282030280860282030280860282030280860282030280860290910302029150505b9392505050565b60b581600160881b81106129eb5760409190911b9060801c5b69010000000000000000008110612a075760209190911b9060401c5b650100000000008110612a1f5760109190911b9060201c5b63010000008110612a355760089190911b9060101c5b62010000010260121c80820401600190811c80830401811c80830401811c80830401811c80830401811c80830401811c80830401901c908190048111900390565b5f826001600160a01b0316846001600160a01b03161115612a95579192915b836001600160a01b0316612ace606060ff16846001600160801b0316901b8686036001600160a01b0316866001600160a01b0316612926565b81612adb57612adb61338c565b04949350505050565b5f826001600160a01b0316846001600160a01b03161115612b03579192915b612b26826001600160801b03168585036001600160a01b0316600160601b612926565b949350505050565b5f826001600160a01b0316846001600160a01b031610612b4c575f80fd5b61042c856001600160a01b031663cefa77996040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b8b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612baf91906134fe565b604080516001600160a01b038089166020830152871691810191909152600285900b60608201526080016040516020818303038152906040528051906020012087604051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b8152606093841b60148201526f5af43d82803e903d91602b57fd5bf3ff60801b6028820152921b6038830152604c8201526037808220606c830152605591012090565b828054828255905f5260205f20908101928215612c87579160200282015b82811115612c87578251825591602001919060010190612c6c565b5061224e9291505b8082111561224e575f8155600101612c8f565b6001600160a01b0381168114612cb6575f80fd5b50565b5f805f8060808587031215612ccc575f80fd5b8435612cd781612ca2565b93506020850135612ce781612ca2565b93969395505050506040820135916060013590565b5f60208284031215612d0c575f80fd5b81356129cb81612ca2565b5f805f805f60a08688031215612d2b575f80fd5b8535612d3681612ca2565b94506020860135612d4681612ca2565b94979496505050506040830135926060810135926080909101359150565b5f805f60608486031215612d76575f80fd5b8335612d8181612ca2565b92506020840135612d9181612ca2565b929592945050506040919091013590565b5f805f60608486031215612db4575f80fd5b8335612dbf81612ca2565b95602085013595506040909401359392505050565b5f8060408385031215612de5575f80fd5b50508035926020909101359150565b61ffff81168114612cb6575f80fd5b5f805f60608486031215612e15575f80fd5b8335612e2081612ca2565b925060208401356001600160701b0381168114612e3b575f80fd5b91506040840135612e4b81612df4565b809150509250925092565b5f8060408385031215612e67575f80fd5b8235612e7281612ca2565b946020939093013593505050565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f815180845260208085019450602084015f5b83811015612ee05781516001600160a01b031687529582019590820190600101612ebb565b509495945050505050565b5f815180845260208085019450602084015f5b83811015612ee057815187529582019590820190600101612efe565b6001600160a01b03841681526060602082018190525f90612f3d90830185612ea8565b8281036040840152612f4f8185612eeb565b9695505050505050565b6040516060810167ffffffffffffffff81118282101715612f7c57612f7c612e80565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715612fab57612fab612e80565b604052919050565b5f67ffffffffffffffff821115612fcc57612fcc612e80565b5060051b60200190565b5f82601f830112612fe5575f80fd5b81516020612ffa612ff583612fb3565b612f82565b8083825260208201915060208460051b87010193508684111561301b575f80fd5b602086015b8481101561304057805161303381612df4565b8352918301918301613020565b509695505050505050565b5f806040838503121561305c575f80fd5b825167ffffffffffffffff80821115613073575f80fd5b61307f86838701612fd6565b93506020850151915080821115613094575f80fd5b506130a185828601612fd6565b9150509250929050565b8051610fab81612ca2565b8051600281900b8114610fab575f80fd5b80516001600160801b0381168114610fab575f80fd5b5f805f805f805f805f805f806101808d8f0312156130f9575f80fd5b8c516001600160601b038116811461310f575f80fd5b9b5061311d60208e016130ab565b9a5061312b60408e016130ab565b995061313960608e016130ab565b985061314760808e016130b6565b975061315560a08e016130b6565b965061316360c08e016130b6565b955061317160e08e016130c7565b94506101008d015193506101208d015192506131906101408e016130c7565b915061319f6101608e016130c7565b90509295989b509295989b509295989b565b80518015158114610fab575f80fd5b5f602082840312156131d0575f80fd5b6129cb826131b1565b634e487b7160e01b5f52601160045260245ffd5b5f600160ff1b8201613201576132016131d9565b505f0390565b6001600160a01b03851681526080602082018190525f9061322a90830186612ea8565b828103604084015261323c8186612eeb565b905082810360608401526115eb8185612eeb565b5f6020808385031215613261575f80fd5b825167ffffffffffffffff811115613277575f80fd5b8301601f81018513613287575f80fd5b8051613295612ff582612fb3565b818152606091820283018401918482019190888411156132b3575f80fd5b938501935b838510156132fb5780858a0312156132ce575f80fd5b6132d6612f59565b85518152868601518782015260408087015190820152835293840193918501916132b8565b50979650505050505050565b80820180821115610cf257610cf26131d9565b81810381811115610cf257610cf26131d9565b8181035f83128015838313168383128216171561334c5761334c6131d9565b5092915050565b5f60208284031215613363575f80fd5b5051919050565b5f806040838503121561337b575f80fd5b505080516020909101519092909150565b634e487b7160e01b5f52601260045260245ffd5b5f826133ba57634e487b7160e01b5f52601260045260245ffd5b500490565b5f805f805f8060c087890312156133d4575f80fd5b86516133df81612ca2565b95506133ed602088016130b6565b945060408701516133fd81612df4565b606088015190945061340e81612df4565b608088015190935061341f81612df4565b915061342d60a088016131b1565b90509295509295509295565b8051600f81900b8114610fab575f80fd5b5f805f805f805f805f806101408b8d031215613464575f80fd5b61346d8b6130c7565b995061347b60208c01613439565b985061348960408c01613439565b975060608b0151965060808b0151955060a08b0151945060c08b01518060060b81146134b3575f80fd5b60e08c01519094506134c481612ca2565b6101008c015190935063ffffffff811681146134de575f80fd5b91506134ed6101208c016131b1565b90509295989b9194979a5092959850565b5f6020828403121561350e575f80fd5b81516129cb81612ca256fea264697066735822122029f4ff7679953588cb562c9e8b03dfc21eccf6962ecdef286611786fc0ea186f64736f6c63430008160033000000000000000000000000d0690557600eb8be8391d1d97346e2aab5300d5f000000000000000000000000827922686190790b37229fd06084350e74485b72