0 txs
16 calls
constructor
No constructor.
functions
addCollateral
nonpayablefunction addCollateral(address collateral)
adjustStablecoins
nonpayablefunction adjustStablecoins(address collateral, uint128 amount, bool increase)
changeAllowance
nonpayablefunction changeAllowance(address token, address spender, uint256 amount)
recoverERC20
nonpayablefunction recoverERC20(address collateral, address token, address to, uint256 amount)
revokeCollateral
nonpayablefunction revokeCollateral(address collateral, bool checkExternalManagerBalance)
setAccessManager
nonpayablefunction setAccessManager(address _newAccessManager)
setCollateralManager
nonpayablefunction setCollateralManager(address collateral, bool checkExternalManagerBalance, tuple managerData)
setOracle
nonpayablefunction setOracle(address collateral, bytes oracleConfig)
setWhitelistStatus
nonpayablefunction setWhitelistStatus(address collateral, uint8 whitelistStatus, bytes whitelistData)
toggleTrusted
nonpayablefunction toggleTrusted(address sender, uint8 t)
updateOracle
nonpayablefunction updateOracle(address collateral)
events
CollateralAdded
event CollateralAdded(address indexed collateral)
CollateralManagerSet
event CollateralManagerSet(address indexed collateral, (address[] subCollaterals, bytes config) managerData)
CollateralRevoked
event CollateralRevoked(address indexed collateral)
CollateralWhitelistStatusUpdated
event CollateralWhitelistStatusUpdated(address indexed collateral, bytes whitelistData, uint8 whitelistStatus)
OracleSet
event OracleSet(address indexed collateral, bytes oracleConfig)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
Recovered
event Recovered(address indexed token, address indexed to, uint256 amount)
ReservesAdjusted
event ReservesAdjusted(address indexed collateral, uint256 amount, bool increase)
TrustedToggled
event TrustedToggled(address indexed sender, bool isTrusted, uint8 trustedType)
errors
AccessManagedUnauthorized
error AccessManagedUnauthorized(address caller)
AlreadyAdded
error AlreadyAdded()
CollateralBacked
error CollateralBacked()
InvalidAccessManager
error InvalidAccessManager()
InvalidChainlinkRate
error InvalidChainlinkRate()
InvalidParams
error InvalidParams()
ManagerHasAssets
error ManagerHasAssets()
NotCollateral
error NotCollateral()
NotTrusted
error NotTrusted()
OracleUpdateFailed
error OracleUpdateFailed()
SafeCastOverflowedUintDowncast
error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value)
SafeERC20FailedDecreaseAllowance
error SafeERC20FailedDecreaseAllowance(address spender, uint256 currentAllowance, uint256 requestedDecrease)
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
creation bytecode
0x608080604052346015576133de908161001a8239f35b5f80fdfe60806040526004361015610011575f80fd5b5f5f3560e01c80631b0c718214611a0c5780631cb44dfc146117465780634591f148146113ff5780634d2b3e1414610fae5780635c3eebda14610d845780637c0343a114610baa57806387c8ab7a1461094f578063b13b08471461075a578063c1cdee7e14610391578063c9580804146102975763f0d2d5a814610093575f80fd5b34610294576020366003190112610294576100ac611ceb565b6100b63633611ea7565b15610282576100e2816001600160a01b03165f525f5160206133895f395f51905f5260205260405f2090565b9081549160ff8360181c1661025a576001600160a01b038216926040517f313ce567000000000000000000000000000000000000000000000000000000008152602081600481885afa801561024f57869061020e575b63ff000000915060181b169063ff00000019161790557f4b2dd303f68b99d244b702089c802b6e9ea1b5d4ef61fd436d6c41abb1178c7754680100000000000000008110156101fa57906101b48260016101d394017f4b2dd303f68b99d244b702089c802b6e9ea1b5d4ef61fd436d6c41abb1178c7755612287565b9091906001600160a01b038084549260031b9316831b921b1916179055565b7f7db05e63d635a68c62fd7fd8f3107ae8ab584a383e102d1bd8a40f4c977e465f8280a280f35b602484634e487b7160e01b81526041600452fd5b506020813d602011610247575b8161022860209383611d17565b810103126102435761023e63ff0000009161232e565b610138565b8580fd5b3d915061021b565b6040513d88823e3d90fd5b6004847ff411c327000000000000000000000000000000000000000000000000000000008152fd5b60248262d1953b60e31b815233600452fd5b80fd5b5034610294576020366003190112610294576102b1611ceb565b6102bb3633611ea7565b15610282576001600160a01b0316803b15610369576001600160a01b037fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131d54827fffffffffffffffffffffffff00000000000000000000000000000000000000008216177fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131d55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b6004827fa98154e2000000000000000000000000000000000000000000000000000000008152fd5b5034610294576060366003190112610294576103ab611ceb565b602435906001600160801b0382168092036107565760443580151590818103610752576103d83633611ea7565b1561074057610404836001600160a01b03165f525f5160206133895f395f51905f5260205260405f2090565b80549160ff8360181c1615610731576b033b2e3c9fd0803ce800000086028681046b033b2e3c9fd0803ce8000000148715171561071d5761046a907f4b2dd303f68b99d244b702089c802b6e9ea1b5d4ef61fd436d6c41abb1178c765460801c90612310565b6001600160801b0381116106ed576001600160801b0316928391156105d65750815460281c01907affffffffffffffffffffffffffffffffffffffffffffffffffffff82116105c257805464ffffffffff1660289290921b64ffffffffff19169190911790556001600160801b037f4b2dd303f68b99d244b702089c802b6e9ea1b5d4ef61fd436d6c41abb1178c765416016001600160801b0381116105ae577f2347e219eb6e83e63152eb917ddb1df919c0f9208fa91dda0bd14822c6be1d079260409261059e6001600160a01b03936001600160801b03166fffffffffffffffffffffffffffffffff197f4b2dd303f68b99d244b702089c802b6e9ea1b5d4ef61fd436d6c41abb1178c765416177f4b2dd303f68b99d244b702089c802b6e9ea1b5d4ef61fd436d6c41abb1178c7655565b835195865260208601521692a280f35b602485634e487b7160e01b81526011600452fd5b602487634e487b7160e01b81526011600452fd5b60281c03907affffffffffffffffffffffffffffffffffffffffffffffffffffff82116105c257805464ffffffffff1660289290921b64ffffffffff19169190911790556001600160801b037f4b2dd303f68b99d244b702089c802b6e9ea1b5d4ef61fd436d6c41abb1178c765416036001600160801b0381116105ae577f2347e219eb6e83e63152eb917ddb1df919c0f9208fa91dda0bd14822c6be1d07926040926106e86001600160a01b03936001600160801b03166fffffffffffffffffffffffffffffffff197f4b2dd303f68b99d244b702089c802b6e9ea1b5d4ef61fd436d6c41abb1178c765416177f4b2dd303f68b99d244b702089c802b6e9ea1b5d4ef61fd436d6c41abb1178c7655565b61059e565b7f6dfcc6500000000000000000000000000000000000000000000000000000000088526080600452602452604487fd5b602488634e487b7160e01b81526011600452fd5b600487630dcfc57f60e21b8152fd5b60248562d1953b60e31b815233600452fd5b8480fd5b8280fd5b503461029457604036600319011261029457610774611ceb565b60243567ffffffffffffffff811161075657610794903690600401611d55565b9061079f3633611ea7565b1561093d576107cb816001600160a01b03165f525f5160206133895f395f51905f5260205260405f2090565b60ff815460181c161561092e576005906107e4846130a2565b5001825167ffffffffffffffff811161091a5761080b816108058454611dc2565b8461217b565b6020601f82116001146108905791610863827fba11329c0b0f98b91c254755aa8d698feac3b46fab65b65fe5ab7570de2ff92895936001600160a01b03958991610885575b508160011b915f199060031b1c19161790565b90555b61087f60405192839260208452169460208301906121cb565b0390a280f35b90508701515f610850565b82865280862090601f198316875b8181106109025750926001600160a01b039492600192827fba11329c0b0f98b91c254755aa8d698feac3b46fab65b65fe5ab7570de2ff9289896106108ea575b5050811b019055610866565b8801515f1960f88460031b161c191690555f806108de565b9192602060018192868b01518155019401920161089e565b602485634e487b7160e01b81526041600452fd5b600484630dcfc57f60e21b8152fd5b60248362d1953b60e31b815233600452fd5b503461029457606036600319011261029457610969611ceb565b90610972611d01565b604435906109803633611ea7565b1561093d57604051636eb1769f60e11b81523060048201526001600160a01b038281166024830152851692602082604481875afa918215610b9f578592610b6b575b5080821015610a8057906109d591611e9a565b604051636eb1769f60e11b81523060048201526001600160a01b038316602482015292602090849060449082905afa928315610a75578493610a3d575b508201809211610a2957610a269293612fce565b80f35b602483634e487b7160e01b81526011600452fd5b9092506020813d602011610a6d575b81610a5960209383611d17565b81010312610a695751915f610a12565b5f80fd5b3d9150610a4c565b6040513d86823e3d90fd5b90818196949611610a95575b50505050905080f35b90610a9f91611e9a565b604051636eb1769f60e11b81523060048201526001600160a01b038316602482015294602090869060449082905afa948515610a75578495610b37575b50808510610afa57610af093940391612fce565b805f808080610a8c565b9150926001600160a01b036064947fe570110f00000000000000000000000000000000000000000000000000000000855216600452602452604452fd5b9094506020813d602011610b63575b81610b5360209383611d17565b81010312610a695751935f610adc565b3d9150610b46565b9091506020813d602011610b97575b81610b8760209383611d17565b81010312610a695751905f6109c2565b3d9150610b7a565b6040513d87823e3d90fd5b503461029457604036600319011261029457610bc4611ceb565b60243590600282101561075657610bdb3633611ea7565b1561093d57610be982612306565b81610ccf57610c28816001600160a01b03165f527f4b2dd303f68b99d244b702089c802b6e9ea1b5d4ef61fd436d6c41abb1178c7b60205260405f2090565b546001039160018311610cbb576001600160a01b037ff659c9a30c41638c696d64b6e8cc1ee8fff543e973ffc1e9e2d794225ae0178a9260409285610c9d836001600160a01b03165f527f4b2dd303f68b99d244b702089c802b6e9ea1b5d4ef61fd436d6c41abb1178c7b60205260405f2090565b555b6001845196148652610cb081612306565b60208601521692a280f35b602484634e487b7160e01b81526011600452fd5b610d09816001600160a01b03165f527f4b2dd303f68b99d244b702089c802b6e9ea1b5d4ef61fd436d6c41abb1178c7c60205260405f2090565b546001039160018311610cbb576001600160a01b037ff659c9a30c41638c696d64b6e8cc1ee8fff543e973ffc1e9e2d794225ae0178a9260409285610d7e836001600160a01b03165f527f4b2dd303f68b99d244b702089c802b6e9ea1b5d4ef61fd436d6c41abb1178c7c60205260405f2090565b55610c9f565b5034610a69576080366003190112610a6957610d9e611ceb565b610da6611d01565b90604435916001600160a01b03831692838103610a695760643592610dcb3633611ea7565b15610f9c57610df884916001600160a01b03165f525f5160206133895f395f51905f5260205260405f2090565b805490929060ff1615610f00575050610e166008610e1b9201611dfa565b612f1a565b90610e25816122dd565b15610e65575b5060206001600160a01b037ffff3b3844276f57024e0b42afec1a37f75db36511e43819a4f2a63ab7862b648925b6040519485521692a380f35b610e80816020806001600160a01b03945183010191016122e7565b16803b15610a69575f80916064604051809481937f8bfb07c90000000000000000000000000000000000000000000000000000000083526001600160a01b03881660048401528960248401528860448401525af18015610ef55715610e2b57610eec9194505f90611d17565b5f926020610e2b565b6040513d5f823e3d90fd5b6020925092610f976001600160a01b0392610f917ffff3b3844276f57024e0b42afec1a37f75db36511e43819a4f2a63ab7862b64896610f836040519384927fa9059cbb000000000000000000000000000000000000000000000000000000008a85015260248401602090939291936001600160a01b0360408201951681520152565b03601f198101835282611d17565b82612f61565b610e59565b62d1953b60e31b5f523360045260245ffd5b34610a69576060366003190112610a6957610fc7611ceb565b610fcf611d9b565b60443567ffffffffffffffff8111610a695760406003198236030112610a6957604051906040820182811067ffffffffffffffff8211176112ef57604052806004013567ffffffffffffffff8111610a6957810136602382011215610a6957600481013561103c81611daa565b9161104a6040519384611d17565b818352602060048185019360051b8301010190368211610a6957602401915b8183106113df57505050825260248101359067ffffffffffffffff8211610a695760046110999236920101611d55565b91602082019283526110ab3633611ea7565b15610f9c576110d7846001600160a01b03165f525f5160206133895f395f51905f5260205260405f2090565b90815460ff8160181c16156113d05760ff16151590816113c8575b50611384575b825151156113775781518051156113635760206001600160a01b03910151166001600160a01b0385160361133b576111308351612f1a565b5050805460ff191660011781555b6007810182519081519167ffffffffffffffff83116112ef576801000000000000000083116112ef576020908254848455808510611320575b5001905f5260205f205f5b8381106113035750505050600801825180519067ffffffffffffffff82116112ef576111b8826111b28554611dc2565b8561217b565b602090601f831160011461128c576111e792915f9183611281575b50508160011b915f199060031b1c19161790565b90555b6040519160208352606083019151916040602085015282518091526020608085019301905f5b81811061126257867f174af9868421277c39ff3056a92d06c83d74df4c7f64258add97ea2bdc022d81878061125d896001600160a01b038a5196601f1985840301604086015216956121cb565b0390a2005b82516001600160a01b0316855260209485019490920191600101611210565b0151905087806111d3565b90601f19831691845f52815f20925f5b8181106112d757509084600195949392106112bf575b505050811b0190556111ea565b01515f1960f88460031b161c191690558680806112b2565b9293602060018192878601518155019501930161129c565b634e487b7160e01b5f52604160045260245ffd5b60019060206001600160a01b038551169401938184015501611182565b61133590845f5285845f209182019101612165565b88611177565b7fa86b6512000000000000000000000000000000000000000000000000000000005f5260045ffd5b634e487b7160e01b5f52603260045260245ffd5b805460ff1916815561113e565b61139861139360088301611dfa565b612e04565b9050156110f8575b7f9e7761b0000000000000000000000000000000000000000000000000000000005f5260045ffd5b9050856110f2565b630dcfc57f60e21b5f5260045ffd5b82356001600160a01b0381168103610a6957815260209283019201611069565b34610a69576040366003190112610a6957611418611ceb565b611420611d9b565b61142a3633611ea7565b15610f9c57611456826001600160a01b03165f525f5160206133895f395f51905f5260205260405f2090565b90815460ff8160181c16156113d0578060281c61171e5760ff1615159081611716575b506116fb575b505f60096114aa836001600160a01b03165f525f5160206133895f395f51905f5260205260405f2090565b8281556114bf60018201805490858155612202565b6114d160028201805490858155612202565b6114e360038201805490858155612202565b6114f560048201805490858155612202565b61150160058201612225565b61150d60068201612225565b600781018054848255806116e1575b505061152a60088201612225565b01556040517f4b2dd303f68b99d244b702089c802b6e9ea1b5d4ef61fd436d6c41abb1178c7780548083525f91825260208301917f83745245930c5ea665f7d67c93434aa3e54c73e6ed3f6f245cc3d5c311286bfa91905b8181106116c2576001600160a01b03868661159f81880382611d17565b8051905f5f19830192831194859416945b6116ae57828110156116a557846001600160a01b036115cf8385612273565b5116146115df57600101836115b0565b9161160293506115fa6001600160a01b03916101b493612273565b511691612287565b7f4b2dd303f68b99d244b702089c802b6e9ea1b5d4ef61fd436d6c41abb1178c77548015611691575f190161163681612287565b6001600160a01b0382549160031b1b191690557f4b2dd303f68b99d244b702089c802b6e9ea1b5d4ef61fd436d6c41abb1178c77557f10d8ed8cba916885e339cb21deefb3842b3f417eac81a7f34b2978b4ecc2040f5f80a2005b634e487b7160e01b5f52603160045260245ffd5b50505050611602565b634e487b7160e01b5f52601160045260245ffd5b82546001600160a01b0316845260209093019260019283019201611582565b6116f49185526020852090810190612165565b848061151c565b611393600861170a9201611dfa565b90506113a0578161147f565b905083611479565b7fba80a364000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610a69576020366003190112610a695761175f611ceb565b335f9081527f4b2dd303f68b99d244b702089c802b6e9ea1b5d4ef61fd436d6c41abb1178c7c6020526040902054156119e45760ff6117bb826001600160a01b03165f525f5160206133895f395f51905f5260205260405f2090565b5460181c16156113d0576117ff6117fa60056117f4846001600160a01b03165f525f5160206133895f395f51905f5260205260405f2090565b01611dfa565b612529565b93600a8496939410156119d057600886036119a85761181e848261262f565b9160208151918180820193849201010312610a6957518211156119a8576118bd6005956118ab6118cb946118996118ee9861188861187e9c6040519460208601526020855261186e604086611d17565b6040519d8e9960208b01906121be565b60408901906121be565b60a0606088015260c08701906121cb565b858103601f19016080870152906121cb565b838103601f190160a0850152906121cb565b03601f198101865285611d17565b6001600160a01b03165f525f5160206133895f395f51905f5260205260405f2090565b01815167ffffffffffffffff81116112ef5761190e816108058454611dc2565b602092601f821160011461194c5761193d929382915f926119415750508160011b915f199060031b1c19161790565b9055005b0151905084806111d3565b601f19821693835f52805f20915f5b8681106119905750836001959610611978575b505050811b019055005b01515f1960f88460031b161c1916905583808061196e565b9192602060018192868501518155019401920161195b565b7faa2d4fb6000000000000000000000000000000000000000000000000000000005f5260045ffd5b634e487b7160e01b5f52602160045260245ffd5b7fc22a648e000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610a69576060366003190112610a6957611a25611ceb565b6024359060ff8216808303610a695760443567ffffffffffffffff8111610a6957611a54903690600401611d55565b92611a5f3633611ea7565b15610f9c57611a8b836001600160a01b03165f525f5160206133895f395f51905f5260205260405f2090565b9060ff825460181c16156113d05760018303611ca857611aab30866123b4565b5060068201855167ffffffffffffffff81116112ef57611acf816108058454611dc2565b6020601f8211600114611c42579080611b019260069798995f92611c375750508160011b915f199060031b1c19161790565b90555b64ff0000000082549160201b169064ff000000001916178155019160405191604083525f93805490611b3582611dc2565b918260408701526001811690815f14611beb5750600114611b8a575b602085018390526001600160a01b0384167f191460c727cbee9e6c46ead7c01c84a1fe8f0b99186af38917ac57de17e6ba9986880387a2005b5f90815260208120929550915b818310611bd45750508201606001926001600160a01b037f191460c727cbee9e6c46ead7c01c84a1fe8f0b99186af38917ac57de17e6ba99611b51565b805460608487010152602090920191600101611b97565b60ff191660608088019190915292151560051b860190920195506001600160a01b0391507f191460c727cbee9e6c46ead7c01c84a1fe8f0b99186af38917ac57de17e6ba999050611b51565b0151905089806111d3565b601f19821697835f52815f20985f5b818110611c90575091600697989991846001959410611c78575b505050811b019055611b04565b01515f1960f88460031b161c19169055888080611c6b565b838301518b556001909a019960209384019301611c51565b6006929394505f838301611cbc8154611dc2565b601f8111611ccc575b5055611b04565b81835260208320611ce591601f0160051c810190612165565b87611cc5565b600435906001600160a01b0382168203610a6957565b602435906001600160a01b0382168203610a6957565b90601f8019910116810190811067ffffffffffffffff8211176112ef57604052565b67ffffffffffffffff81116112ef57601f01601f191660200190565b81601f82011215610a6957803590611d6c82611d39565b92611d7a6040519485611d17565b82845260208383010111610a6957815f926020809301838601378301015290565b602435908115158203610a6957565b67ffffffffffffffff81116112ef5760051b60200190565b90600182811c92168015611df0575b6020831014611ddc57565b634e487b7160e01b5f52602260045260245ffd5b91607f1691611dd1565b9060405191825f825492611e0d84611dc2565b8084529360018116908115611e785750600114611e34575b50611e3292500383611d17565b565b90505f9291925260205f20905f915b818310611e5c575050906020611e32928201015f611e25565b6020919350806001915483858901015201910190918492611e43565b905060209250611e3294915060ff191682840152151560051b8201015f611e25565b919082039182116116ae57565b6001600160a01b037fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131d54169180600411610a69575f5f905f80604051956001600160a01b0360208801917fb700961300000000000000000000000000000000000000000000000000000000835216968760248201523060448201527fffffffff00000000000000000000000000000000000000000000000000000000833516606482015260648152611f5a608482611d17565b5190885afa3d1561215d573d90611f7082611d39565b91611f7e6040519384611d17565b82523d5f602084013e5b6120ea575b5015611f9d575b50505050600190565b63ffffffff16156120e35776010000000000000000000000000000000000000000000060ff60b01b197f4b2dd303f68b99d244b702089c802b6e9ea1b5d4ef61fd436d6c41abb1178c755416177f4b2dd303f68b99d244b702089c802b6e9ea1b5d4ef61fd436d6c41abb1178c7555823b15610a69576064925f92836040519586809581947f94c7d7ee0000000000000000000000000000000000000000000000000000000083526004830152604060248301528060448301528084848401378181018301849052601f01601f191681010301925af18015610ef5576120d3575b5060ff60b01b197f4b2dd303f68b99d244b702089c802b6e9ea1b5d4ef61fd436d6c41abb1178c7554167f4b2dd303f68b99d244b702089c802b6e9ea1b5d4ef61fd436d6c41abb1178c75555f808080611f94565b5f6120dd91611d17565b5f61207e565b5050505f90565b805190929091604083106121265750508160409181010312610a695761211e60406121176020840161233c565b9201612349565b905b5f611f8d565b91602081949294101561213b575b5050612120565b8192509060209181010312610a69576020612156910161233c565b5f80612134565b606090611f88565b818110612170575050565b5f8155600101612165565b9190601f811161218a57505050565b611e32925f5260205f20906020601f840160051c830193106121b4575b601f0160051c0190612165565b90915081906121a7565b90600a8210156119d05752565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b818102929181159184041417156116ae57565b908061220c575050565b611e32915f52600360205f20910160021c810190612165565b61222f8154611dc2565b9081612239575050565b81601f5f931160011461224a575055565b8183526020832061226691601f0160051c810190600101612165565b8082528160208120915555565b80518210156113635760209160051b010190565b7f4b2dd303f68b99d244b702089c802b6e9ea1b5d4ef61fd436d6c41abb1178c7754811015611363577f4b2dd303f68b99d244b702089c802b6e9ea1b5d4ef61fd436d6c41abb1178c775f5260205f2001905f90565b600111156119d057565b90816020910312610a6957516001600160a01b0381168103610a695790565b600211156119d057565b811561231a570490565b634e487b7160e01b5f52601260045260245ffd5b519060ff82168203610a6957565b51908115158203610a6957565b519063ffffffff82168203610a6957565b81601f82011215610a695780519061237182611d39565b9261237f6040519485611d17565b82845260208383010111610a6957815f9260208093018386015e8301015290565b51906001600160a01b0382168203610a6957565b80518101604082820312610a69576020820151916001831015610a695760408101519167ffffffffffffffff8311610a69576123f792602080920192010161235a565b90612401816122dd565b805f527f4b2dd303f68b99d244b702089c802b6e9ea1b5d4ef61fd436d6c41abb1178c7d60205260405f206001600160a01b0384165f5260205260405f2054612521578151612451575050505f90565b61245a816122dd565b15612466575b806120e3565b602081805181010312610a695761248760206001600160a01b0392016123a0565b168015612460576040517f65e4ad9e0000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b03929092166024830152602090829060449082905f905af1908115610ef5575f916124ea575090565b90506020813d602011612519575b8161250560209383611d17565b81010312610a69576125169061233c565b90565b3d91506124f8565b505050600190565b8051810160a08260208301920312610a69576020820151600a811015610a6957604083015193600a851015610a6957606084015167ffffffffffffffff8111610a695783602061257b9287010161235a565b93608081015167ffffffffffffffff8111610a695784602061259f9284010161235a565b9360a08201519167ffffffffffffffff8311610a69576125c2920160200161235a565b919493929190565b9080601f83011215610a695781516125e181611daa565b926125ef6040519485611d17565b81845260208085019260051b820101928311610a6957602001905b8282106126175750505090565b602080916126248461232e565b81520191019061260a565b600a8110156119d0578061283b575090815182019160a08160208501940312610a6957602081015167ffffffffffffffff8111610a695781019280603f85011215610a6957602084015161268281611daa565b946126906040519687611d17565b8186526020808088019360051b8301010190838211610a6957604001915b81831061281b57505050604082015167ffffffffffffffff8111610a6957820181603f82011215610a69576020810151906126e882611daa565b916126f66040519384611d17565b8083526020808085019260051b8401010191848311610a6957604001905b82821061280357505050606083015167ffffffffffffffff8111610a6957826020612741928601016125ca565b91608084015167ffffffffffffffff8111610a695760a0916020612767928701016125ca565b9301516002811015610a6957670de0b6b3a764000061278a91969492959661320c565b938351915f935b8385106127a15750505050505090565b909192939496956127f66001916001600160a01b036127c0898c612273565b511660ff6127ce8a87612273565b511660ff6127dc8b89612273565b51169163ffffffff6127ee8c8b612273565b51169361324b565b9697950193929190612791565b6020809161281084612349565b815201910190612714565b82516001600160a01b0381168103610a69578152602092830192016126ae565b60038103612851575050670de0b6b3a764000090565b60028103612867575050670de0b6b3a764000090565b600481036128e9575050604051630f451f7160e31b8152670de0b6b3a7640000600482015260208160248173ae7ab96520de3a18e5e111b5eaab095312d7fe845afa908115610ef5575f916128ba575090565b90506020813d6020116128e1575b816128d560209383611d17565b81010312610a69575190565b3d91506128c8565b6005810361292e575050604051633ba0b9a960e01b815260208160048173be9895146f7af43049ca1c1ae358b0541ea497045afa908115610ef5575f916128ba575090565b600681036129735750506040516339aa885b60e21b815260208160048173ae78736cd615f374d3085123a210448e74fc63935afa908115610ef5575f916128ba575090565b600781036129b8575050604051634ca9858360e11b815260208160048173ac3e018457b222d93114458476f3e3416abbe38f5afa908115610ef5575f916128ba575090565b600881036129d9575060208151918180820193849201010312610a69575190565b600903612a8357604081805181010312610a69578060206040612a05826001600160a01b0395016123a0565b920151916004604051809581937fa035b1fe000000000000000000000000000000000000000000000000000000008352165afa8015610ef5575f90612a4f575b6125169250612310565b506020823d602011612a7b575b81612a6960209383611d17565b81010312610a69576125169151612a45565b3d9150612a5c565b50670de0b6b3a764000090565b92919092600a8110156119d05780612c6157508051810160a08260208301920312610a6957602082015167ffffffffffffffff8111610a695782019381603f86011215610a69576020850151612ae581611daa565b95612af36040519788611d17565b8187526020808089019360051b8301010190848211610a6957604001915b818310612c4157505050604083015167ffffffffffffffff8111610a695783019082603f83011215610a6957602082015191612b4c83611daa565b92612b5a6040519485611d17565b8084526020808086019260051b8401010191858311610a6957604001905b828210612c2957505050606084015167ffffffffffffffff8111610a6957836020612ba5928701016125ca565b92608085015167ffffffffffffffff8111610a695760a0916020612bcb928801016125ca565b940151906002821015610a6957612be691969492959661320c565b938351915f935b838510612bfd5750505050505090565b90919293949695612c1c6001916001600160a01b036127c0898c612273565b9697950193929190612bed565b60208091612c3684612349565b815201910190612b78565b82516001600160a01b0381168103610a6957815260209283019201612b11565b9192909160038103612c7c57505050670de0b6b3a764000090565b60028103612c8a5750905090565b60048103612cde57505050604051630f451f7160e31b8152670de0b6b3a7640000600482015260208160248173ae7ab96520de3a18e5e111b5eaab095312d7fe845afa908115610ef5575f916128ba575090565b60058103612d2457505050604051633ba0b9a960e01b815260208160048173be9895146f7af43049ca1c1ae358b0541ea497045afa908115610ef5575f916128ba575090565b60068103612d6a575050506040516339aa885b60e21b815260208160048173ae78736cd615f374d3085123a210448e74fc63935afa908115610ef5575f916128ba575090565b60078103612db057505050604051634ca9858360e11b815260208160048173ac3e018457b222d93114458476f3e3416abbe38f5afa908115610ef5575f916128ba575090565b60088103612dd257505060208151918180820193849201010312610a69575190565b600903612dff5750604081805181010312610a69578060206040612a05826001600160a01b0395016123a0565b905090565b606091612e115f92612f1a565b90612e1b816122dd565b15612e235750565b600493505f919250612e46816020806001600160a01b03945183010191016122e7565b16604051938480927f01e1d1140000000000000000000000000000000000000000000000000000000082525afa918215610ef5575f905f93612e8757509190565b9250503d805f843e612e998184611d17565b820191604081840312610a6957805167ffffffffffffffff8111610a695781019280601f85011215610a69578351612ed081611daa565b94612ede6040519687611d17565b81865260208087019260051b820101928311610a6957602001905b828210612f0a575050506020015190565b8151815260209182019101612ef9565b80518101604082820312610a69576020820151916001831015610a695760408101519167ffffffffffffffff8311610a6957612f5d92602080920192010161235a565b9091565b905f602091828151910182855af115610ef5575f513d612fc557506001600160a01b0381163b155b612f905750565b6001600160a01b03907f5274afe7000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b60011415612f89565b60405163095ea7b360e01b60208083019182526001600160a01b0385166024840152604480840196909652948252929390925f9061300d606486611d17565b84519082855af15f513d82613069575b50501561302957505050565b613064611e32936001600160a01b036040519163095ea7b360e01b60208401521660248201525f604482015260448152610f91606482611d17565b612f61565b90915061308657506001600160a01b0381163b15155b5f8061301d565b60011461307f565b51906001600160801b0382168203610a6957565b6130ab90612529565b600a8594969593929310156119d057600184146131a057604081805181010312610a6957613106926001600160801b03826130f760406130f060206130ff970161308e565b920161308e565b50169661262f565b8093612a90565b9280670de0b6b3a764000003670de0b6b3a764000081116116ae5761312b90836121ef565b670de0b6b3a7640000850290858204670de0b6b3a764000014861517156116ae5781119182613172575b505061316a575b8281106131665750565b9150565b91508161315c565b909150670de0b6b3a76400000180670de0b6b3a7640000116116ae5761319890836121ef565b115f80613155565b5080939450602092508091505181010312610a6957602001516001600160a01b038116809103610a69576020600491604051928380927f5ade93550000000000000000000000000000000000000000000000000000000082525afa908115610ef5575f916128ba575090565b61321581612306565b6125165750670de0b6b3a764000090565b519069ffffffffffffffffffff82168203610a6957565b604d81116116ae57600a0a90565b91909360a06001600160a01b0394956004604051809781937ffeaf968c000000000000000000000000000000000000000000000000000000008352165afa908115610ef5575f945f92613332575b505f851391821592613316575b50506132ee5760ff166001036132d3576132c761251693926132cd926121ef565b9161323d565b90612310565b6132e9906132e36125169461323d565b906121ef565b612310565b7fae193563000000000000000000000000000000000000000000000000000000005f5260045ffd5b63ffffffff9192506133289042611e9a565b9116105f806132a6565b9450905060a0843d60a011613380575b8161334f60a09383611d17565b81010312610a695761336084613226565b506020840151613377608060608701519601613226565b5093905f613299565b3d915061334256fe4b2dd303f68b99d244b702089c802b6e9ea1b5d4ef61fd436d6c41abb1178c7aa2646970667358221220cc1a44bae2c3345329015fed5da262b5218bf7b8517b902a1f27978118c30cc464736f6c634300081c0033