0 txs
427 calls
constructor
constructor()
functions
ADDRESSES_PROVIDER
viewfunction ADDRESSES_PROVIDER() view returns (address)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
defaultAdmin
viewfunction defaultAdmin() view returns (address)
defaultAdminDelay
viewfunction defaultAdminDelay() view returns (uint48)
defaultAdminDelayIncreaseWait
viewfunction defaultAdminDelayIncreaseWait() view returns (uint48)
getATokenBalance
viewfunction getATokenBalance(address _token) view returns (uint256 aTokenBalance)
getCurrentDebt
viewfunction getCurrentDebt(address _token, uint256 _rateMode) view returns (uint256 debt)
getEModeCategory
viewfunction getEModeCategory() view returns (uint256 eModeCategoryId)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
getWETHAddress
purefunction getWETHAddress() pure returns (address wETHAddress)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
isETH
purefunction isETH(address _token) pure returns (bool isETHAddress)
minimumHealthFactorLiquidationThreshold
viewfunction minimumHealthFactorLiquidationThreshold() view returns (uint256)
owner
viewfunction owner() view returns (address)
pendingDefaultAdmin
viewfunction pendingDefaultAdmin() view returns (address newAdmin, uint48 schedule)
pendingDefaultAdminDelay
viewfunction pendingDefaultAdminDelay() view returns (uint48 newDelay, uint48 schedule)
POOL_DATA_PROVIDER
viewfunction POOL_DATA_PROVIDER() view returns (address)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
TREASURY_ROLE
viewfunction TREASURY_ROLE() view returns (bytes32)
WETH_ADDRESS
viewfunction WETH_ADDRESS() view returns (address)
acceptDefaultAdminTransfer
nonpayablefunction acceptDefaultAdminTransfer()
beginDefaultAdminTransfer
nonpayablefunction beginDefaultAdminTransfer(address newAdmin)
borrow
nonpayablefunction borrow(address _token, uint256 _borrowAmount, uint256 _rateMode, uint16 _referralCode)
cancelDefaultAdminTransfer
nonpayablefunction cancelDefaultAdminTransfer()
changeDefaultAdminDelay
nonpayablefunction changeDefaultAdminDelay(uint48 newDelay)
emergencyWithdrawERC20
nonpayablefunction emergencyWithdrawERC20(address _token, address _to, uint256 _amount)
emergencyWithdrawETH
nonpayablefunction emergencyWithdrawETH(address _to, uint256 _amount)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
initialize
nonpayablefunction initialize(uint256 _minimumHealthFactorLiquidationThreshold)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address account)
repay
payablefunction repay(address _token, uint256 _repayAmount, uint256 _rateMode) payable
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
rollbackDefaultAdminDelay
nonpayablefunction rollbackDefaultAdminDelay()
setEModeCategory
nonpayablefunction setEModeCategory(uint8 _eModeCategoryId)
setMinimumHealthFactorLiquidationThreshold
nonpayablefunction setMinimumHealthFactorLiquidationThreshold(uint256 _minimumHealthFactorLiquidationThreshold)
setUseReserveAsCollateral
nonpayablefunction setUseReserveAsCollateral(address _token, bool _useAsCollateral)
supply
payablefunction supply(address _token, uint256 _supplyAmount, uint16 _referralCode) payable
withdraw
nonpayablefunction withdraw(address _token, uint256 _withdrawAmount)
events
Borrowed
event Borrowed(address _token, uint256 _amount, uint256 _rateMode, uint16 _referralCode)
DefaultAdminDelayChangeCanceled
event DefaultAdminDelayChangeCanceled()
DefaultAdminDelayChangeScheduled
event DefaultAdminDelayChangeScheduled(uint48 newDelay, uint48 effectSchedule)
DefaultAdminTransferCanceled
event DefaultAdminTransferCanceled()
DefaultAdminTransferScheduled
event DefaultAdminTransferScheduled(address indexed newAdmin, uint48 acceptSchedule)
Deposited
event Deposited(address _token, uint256 _amount, uint16 _referralCode)
EmergencyWithdrawnERC20
event EmergencyWithdrawnERC20(address indexed _token, address indexed _to, uint256 _amount)
EmergencyWithdrawnETH
event EmergencyWithdrawnETH(address indexed _to, uint256 _amount)
EModeCategorySet
event EModeCategorySet(uint256 _eModeCategoryId)
Initialized
event Initialized(uint64 version)
MinimalHealthFactorThresholdSet
event MinimalHealthFactorThresholdSet(uint256 _minimalHealthFactorThreshold)
Received
event Received(address indexed _from, uint256 _amount)
Repaid
event Repaid(address _token, uint256 _amount, uint256 _rateMode)
RoleAdminChanged
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole)
RoleGranted
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender)
RoleRevoked
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender)
UseReserveAsCollateralSet
event UseReserveAsCollateralSet(address _token, bool _useAsCollateral)
Withdrawn
event Withdrawn(address _token, uint256 _amount)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlEnforcedDefaultAdminDelay
error AccessControlEnforcedDefaultAdminDelay(uint48 schedule)
AccessControlEnforcedDefaultAdminRules
error AccessControlEnforcedDefaultAdminRules()
AccessControlInvalidDefaultAdmin
error AccessControlInvalidDefaultAdmin(address defaultAdmin)
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
AddressEmptyCode
error AddressEmptyCode(address target)
AddressInsufficientBalance
error AddressInsufficientBalance(address account)
FailedInnerCall
error FailedInnerCall()
HealthFactorBelowMinimumThreshold
error HealthFactorBelowMinimumThreshold(uint256 _healthFactor)
IdempotencyKeyAlreadyExist
error IdempotencyKeyAlreadyExist(bytes32 _idempotencyKey)
InvalidAmount
error InvalidAmount(uint256 _amount)
InvalidInitialization
error InvalidInitialization()
InvalidMinimumHealthFactorLiquidationThreshold
error InvalidMinimumHealthFactorLiquidationThreshold(uint256 _threshold)
InvalidRateMode
error InvalidRateMode(uint256 _rateMode)
NotInitializing
error NotInitializing()
SafeCastOverflowedUintDowncast
error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value)
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
ZeroAddress
error ZeroAddress()
creation bytecode
0x6080604052348015600f57600080fd5b506016601a565b60ca565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560695760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b613da0806100d96000396000f3fe6080604052600436106102895760003560e01c80638da5cb5b11610153578063cefc1429116100cb578063d79e85671161007f578063f3fef3a311610064578063f3fef3a314610822578063f70a250814610842578063fe4b84df1461087f57600080fd5b8063d79e8567146107e2578063e42086ac1461080257600080fd5b8063d11a57ec116100b0578063d11a57ec14610779578063d547741f146107ad578063d602b9fd146107cd57600080fd5b8063cefc1429146106f9578063cf6eefb71461070e57600080fd5b8063ae56764011610122578063c858f5f911610107578063c858f5f9146106a4578063cc8463c8146106c4578063ce584374146106d957600080fd5b8063ae56764014610655578063affa88171461067d57600080fd5b80638da5cb5b1461059257806391d14854146105a7578063a1eda53c1461060c578063a217fddf1461064057600080fd5b8063356f235c11610201578063634e93da116101b557806379ce00291161019a57806379ce00291461052f57806384ef8ffc146105425780638cd2e0c71461057f57600080fd5b8063634e93da146104ef578063649a5ec71461050f57600080fd5b8063437a0961116101e6578063437a09611461048f57806355b8fb81146104af578063633216f1146104cf57600080fd5b8063356f235c1461045a57806336568abe1461046f57600080fd5b80630712f6b311610258578063117efa551161023d578063117efa55146103d5578063248a9ca3146103eb5780632f2ff15d1461043a57600080fd5b80630712f6b3146103905780630aa6220b146103be57600080fd5b806301ffc9a7146102ca578063022d63fb146102ff578063040141e5146103285780630542975c1461036857600080fd5b366102c55760405134815233907f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f885258749060200160405180910390a2005b600080fd5b3480156102d657600080fd5b506102ea6102e53660046136f4565b61089f565b60405190151581526020015b60405180910390f35b34801561030b57600080fd5b50620697805b60405165ffffffffffff90911681526020016102f6565b34801561033457600080fd5b5061035073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b6040516001600160a01b0390911681526020016102f6565b34801561037457600080fd5b50610350732f39d218133afab8f2b819b1066c7e434ad94e9e81565b34801561039c57600080fd5b506103b06103ab36600461374b565b6108fb565b6040519081526020016102f6565b3480156103ca57600080fd5b506103d3610a8f565b005b3480156103e157600080fd5b506103b060005481565b3480156103f757600080fd5b506103b0610406366004613768565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b34801561044657600080fd5b506103d3610455366004613781565b610aa5565b34801561046657600080fd5b506103b0610aea565b34801561047b57600080fd5b506103d361048a366004613781565b610bed565b34801561049b57600080fd5b506103d36104aa366004613768565b610d3f565b3480156104bb57600080fd5b506103d36104ca3660046137b1565b610d98565b3480156104db57600080fd5b506103d36104ea3660046137f2565b610e25565b3480156104fb57600080fd5b506103d361050a36600461374b565b610f64565b34801561051b57600080fd5b506103d361052a366004613815565b610f78565b6103d361053d36600461384d565b610f8c565b34801561054e57600080fd5b507feef3dac4538c82c8ace4063ab0acd2d15cdb5883aa1dff7c2673abb3d8698401546001600160a01b0316610350565b6103d361058d36600461388f565b6112fb565b34801561059e57600080fd5b5061035061164a565b3480156105b357600080fd5b506102ea6105c2366004613781565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561061857600080fd5b50610621611682565b6040805165ffffffffffff9384168152929091166020830152016102f6565b34801561064c57600080fd5b506103b0600081565b34801561066157600080fd5b50610350737b4eb56e7cd4b454ba8ff71e4518426369a138a381565b34801561068957600080fd5b5073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2610350565b3480156106b057600080fd5b506103d36106bf3660046138c4565b611741565b3480156106d057600080fd5b50610311611a5d565b3480156106e557600080fd5b506103b06106f436600461390e565b611b3e565b34801561070557600080fd5b506103d3611c0e565b34801561071a57600080fd5b507feef3dac4538c82c8ace4063ab0acd2d15cdb5883aa1dff7c2673abb3d869840054604080516001600160a01b03831681527401000000000000000000000000000000000000000090920465ffffffffffff166020830152016102f6565b34801561078557600080fd5b506103b07fe1dcbdb91df27212a29bc27177c840cf2f819ecf2187432e1fac86c2dd5dfca981565b3480156107b957600080fd5b506103d36107c8366004613781565b611c7c565b3480156107d957600080fd5b506103d3611cbd565b3480156107ee57600080fd5b506103d36107fd36600461390e565b611cd0565b34801561080e57600080fd5b506103d361081d366004613948565b611d48565b34801561082e57600080fd5b506103d361083d36600461390e565b611d5d565b34801561084e57600080fd5b506102ea61085d36600461374b565b6001600160a01b031673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1490565b34801561088b57600080fd5b506103d361089a366004613768565b612049565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f314987860000000000000000000000000000000000000000000000000000000014806108f557506108f5826121d7565b92915050565b600080732f39d218133afab8f2b819b1066c7e434ad94e9e6001600160a01b031663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610950573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109749190613986565b6040517f35ea6a750000000000000000000000000000000000000000000000000000000081526001600160a01b0385811660048301529192506000918316906335ea6a75906024016101e060405180830381865afa1580156109da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109fe9190613a9d565b61010001516040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529091506001600160a01b038216906370a0823190602401602060405180830381865afa158015610a63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a879190613bc0565b949350505050565b6000610a9a8161226e565b610aa2612278565b50565b81610adc576040517f3fc3c27a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ae68282612285565b5050565b600080732f39d218133afab8f2b819b1066c7e434ad94e9e6001600160a01b031663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b639190613986565b6040517feddf1b790000000000000000000000000000000000000000000000000000000081523060048201529091506001600160a01b0382169063eddf1b7990602401602060405180830381865afa158015610bc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610be79190613bc0565b91505090565b7feef3dac4538c82c8ace4063ab0acd2d15cdb5883aa1dff7c2673abb3d869840082158015610c4857507feef3dac4538c82c8ace4063ab0acd2d15cdb5883aa1dff7c2673abb3d8698401546001600160a01b038381169116145b15610d30577feef3dac4538c82c8ace4063ab0acd2d15cdb5883aa1dff7c2673abb3d8698400546001600160a01b0381169074010000000000000000000000000000000000000000900465ffffffffffff1681151580610cae575065ffffffffffff8116155b80610cc157504265ffffffffffff821610155b15610d07576040517f19ca5ebb00000000000000000000000000000000000000000000000000000000815265ffffffffffff821660048201526024015b60405180910390fd5b505080547fffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffff1681555b610d3a83836122cf565b505050565b6000610d4a8161226e565b610d538261231b565b6000829055610d60612360565b6040518281527f271af84801fc58c41cdb14d89d99184aa47ebf82ab5c7b573ff98ae3a0c9df2d906020015b60405180910390a15050565b6000610da38161226e565b610dac846123ab565b610db5836123ab565b610dbe826123eb565b610dd26001600160a01b0385168484612428565b826001600160a01b0316846001600160a01b03167ff563e0862357d06e5752eb37b7057a0b8b5aca7410305cfd9b45865523e48c6d84604051610e1791815260200190565b60405180910390a350505050565b6000610e308161226e565b6000732f39d218133afab8f2b819b1066c7e434ad94e9e6001600160a01b031663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea89190613986565b6040517f28530a4700000000000000000000000000000000000000000000000000000000815260ff851660048201529091506001600160a01b038216906328530a4790602401600060405180830381600087803b158015610f0857600080fd5b505af1158015610f1c573d6000803e3d6000fd5b50505050610f28612360565b60405160ff841681527f0b92e9547fb3db36679e1e22a74bc3803ec3b8b318b6a50937684de642eb8418906020015b60405180910390a1505050565b6000610f6f8161226e565b610ae68261249c565b6000610f838161226e565b610ae68261250f565b7fe1dcbdb91df27212a29bc27177c840cf2f819ecf2187432e1fac86c2dd5dfca9610fb68161226e565b610fbf846123ab565b610fc8836123eb565b6000732f39d218133afab8f2b819b1066c7e434ad94e9e6001600160a01b031663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561101c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110409190613986565b905073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6001600160a01b038616036111d4578334146110a2576040517f3728b83d00000000000000000000000000000000000000000000000000000000815260048101859052602401610cfe565b600073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc290506000819050806001600160a01b031663d0e30db0876040518263ffffffff1660e01b81526004016000604051808303818588803b1580156110fb57600080fd5b505af115801561110f573d6000803e3d6000fd5b5061112a935050506001600160a01b03841690508488612578565b6040517f617ba0370000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301526024820188905230604483015261ffff8716606483015284169063617ba03790608401600060405180830381600087803b15801561119d57600080fd5b505af11580156111b1573d6000803e3d6000fd5b505050506111be8261261b565b6111cd576111cd8260016126c8565b50506112a3565b846111ea6001600160a01b038216333088612808565b6111fe6001600160a01b0382168387612578565b6040517f617ba0370000000000000000000000000000000000000000000000000000000081526001600160a01b0387811660048301526024820187905230604483015261ffff8616606483015283169063617ba03790608401600060405180830381600087803b15801561127157600080fd5b505af1158015611285573d6000803e3d6000fd5b505050506112928661261b565b6112a1576112a18660016126c8565b505b604080516001600160a01b03871681526020810186905261ffff8516918101919091527feef72c2775e4e59d04b76fe99649c70b0101dbc951ce46a5a6262a6cbc138e90906060015b60405180910390a15050505050565b7fe1dcbdb91df27212a29bc27177c840cf2f819ecf2187432e1fac86c2dd5dfca96113258161226e565b61132e846123ab565b611337836123eb565b61134082612841565b6000732f39d218133afab8f2b819b1066c7e434ad94e9e6001600160a01b031663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611394573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113b89190613986565b905073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6001600160a01b0386160361153d5783341461141a576040517f3728b83d00000000000000000000000000000000000000000000000000000000815260048101859052602401610cfe565b600073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc29050806001600160a01b031663d0e30db0866040518263ffffffff1660e01b81526004016000604051808303818588803b15801561146e57600080fd5b505af1158015611482573d6000803e3d6000fd5b5061149d935050506001600160a01b03831690508387612578565b6040517f573ade810000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152602482018790526044820186905230606483015283169063573ade81906084016020604051808303816000875af1158015611512573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115369190613bc0565b5050611603565b846115536001600160a01b038216333088612808565b6115676001600160a01b0382168387612578565b6040517f573ade810000000000000000000000000000000000000000000000000000000081526001600160a01b038781166004830152602482018790526044820186905230606483015283169063573ade81906084016020604051808303816000875af11580156115dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116009190613bc0565b50505b604080516001600160a01b0387168152602081018690529081018490527f1b8cd61ed43bec7c6bdad3a18ffee613f99c853d16c50678d248d879e1b43438906060016112ec565b600061167d7feef3dac4538c82c8ace4063ab0acd2d15cdb5883aa1dff7c2673abb3d8698401546001600160a01b031690565b905090565b7feef3dac4538c82c8ace4063ab0acd2d15cdb5883aa1dff7c2673abb3d8698401546000907a010000000000000000000000000000000000000000000000000000900465ffffffffffff167feef3dac4538c82c8ace4063ab0acd2d15cdb5883aa1dff7c2673abb3d8698400811580159061170557504265ffffffffffff831610155b61171157600080611738565b600181015474010000000000000000000000000000000000000000900465ffffffffffff16825b92509250509091565b7fe1dcbdb91df27212a29bc27177c840cf2f819ecf2187432e1fac86c2dd5dfca961176b8161226e565b611774856123ab565b61177d846123eb565b61178683612841565b6000732f39d218133afab8f2b819b1066c7e434ad94e9e6001600160a01b031663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117fe9190613986565b905073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6001600160a01b03871603611951576040517fa415bcad00000000000000000000000000000000000000000000000000000000815273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc260048201819052602482018790526044820186905261ffff85166064830152306084830152906001600160a01b0383169063a415bcad9060a401600060405180830381600087803b1580156118b357600080fd5b505af11580156118c7573d6000803e3d6000fd5b50506040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018990526001600160a01b0384169250632e1a7d4d9150602401600060405180830381600087803b15801561192657600080fd5b505af115801561193a573d6000803e3d6000fd5b5061194b925033915088905061288d565b506119f8565b6040517fa415bcad0000000000000000000000000000000000000000000000000000000081526001600160a01b038781166004830152602482018790526044820186905261ffff8516606483015230608483015282169063a415bcad9060a401600060405180830381600087803b1580156119cb57600080fd5b505af11580156119df573d6000803e3d6000fd5b506119f8925050506001600160a01b0387163387612428565b611a00612360565b604080516001600160a01b03881681526020810187905290810185905261ffff841660608201527ffe12b06435b22fae219b3430dc44eaf3129b3fb4a392b58a4491f0711a410304906080015b60405180910390a1505050505050565b7feef3dac4538c82c8ace4063ab0acd2d15cdb5883aa1dff7c2673abb3d8698401546000907feef3dac4538c82c8ace4063ab0acd2d15cdb5883aa1dff7c2673abb3d8698400907a010000000000000000000000000000000000000000000000000000900465ffffffffffff168015801590611ae057504265ffffffffffff8216105b611b115781547a010000000000000000000000000000000000000000000000000000900465ffffffffffff16611b37565b600182015474010000000000000000000000000000000000000000900465ffffffffffff165b9250505090565b6000611b4982612841565b6040517f28dd2d010000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201523060248201526000908190737b4eb56e7cd4b454ba8ff71e4518426369a138a3906328dd2d019060440161012060405180830381865afa158015611bc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bea9190613bd9565b505050505050925092505083600114611c035780611c05565b815b95945050505050565b7feef3dac4538c82c8ace4063ab0acd2d15cdb5883aa1dff7c2673abb3d8698400546001600160a01b0316338114611c74576040517fc22c8022000000000000000000000000000000000000000000000000000000008152336004820152602401610cfe565b610aa2612956565b81611cb3576040517f3fc3c27a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ae68282612a6d565b6000611cc88161226e565b610aa2612ab1565b6000611cdb8161226e565b611ce4836123ab565b611ced826123eb565b611d006001600160a01b0384168361288d565b826001600160a01b03167febc5111f91d59b146eb8fce23a0ee9c73905eef7f2b74ef7e3786b729bb7374683604051611d3b91815260200190565b60405180910390a2505050565b6000611d538161226e565b610d3a83836126c8565b7fe1dcbdb91df27212a29bc27177c840cf2f819ecf2187432e1fac86c2dd5dfca9611d878161226e565b611d90836123ab565b611d99826123eb565b6000732f39d218133afab8f2b819b1066c7e434ad94e9e6001600160a01b031663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ded573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e119190613986565b905073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6001600160a01b03851603611f65576040517f69328dec00000000000000000000000000000000000000000000000000000000815273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26004820181905260248201859052306044830152906001600160a01b038316906369328dec906064016020604051808303816000875af1158015611eba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ede9190613bc0565b506040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018590526001600160a01b03821690632e1a7d4d90602401600060405180830381600087803b158015611f3a57600080fd5b505af1158015611f4e573d6000803e3d6000fd5b50611f5f925033915086905061288d565b50611ff9565b6040517f69328dec0000000000000000000000000000000000000000000000000000000081526001600160a01b038581166004830152602482018590523360448301528216906369328dec906064016020604051808303816000875af1158015611fd3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ff79190613bc0565b505b612001612360565b604080516001600160a01b0386168152602081018590527f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5910160405180910390a150505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156120945750825b905060008267ffffffffffffffff1660011480156120b15750303b155b9050811580156120bf575080155b156120f6576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156121575784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6121646201518033612abc565b61216d8661231b565b600086905583156121cf5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602001611a4d565b505050505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806108f557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316146108f5565b610aa28133612ace565b612283600080612b5b565b565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546122bf8161226e565b6122c98383612ce7565b50505050565b6001600160a01b0381163314612311576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d3a8282612dc2565b670de0b6b3a7640000811015610aa2576040517f9b945bd200000000000000000000000000000000000000000000000000000000815260048101829052602401610cfe565b600061236a612e59565b9050600054811015610aa2576040517fbf53c41c00000000000000000000000000000000000000000000000000000000815260048101829052602401610cfe565b6001600160a01b038116610aa2576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600003610aa2576040517f3728b83d00000000000000000000000000000000000000000000000000000000815260048101829052602401610cfe565b6040516001600160a01b03838116602483015260448201839052610d3a91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612f61565b60006124a6611a5d565b6124af42612fdd565b6124b99190613c83565b90506124c5828261302d565b60405165ffffffffffff821681526001600160a01b038316907f3377dc44241e779dd06afab5b788a35ca5f3b778836e2990bdb26a2a4b2e5ed69060200160405180910390a25050565b600061251a826130db565b61252342612fdd565b61252d9190613c83565b90506125398282612b5b565b6040805165ffffffffffff8085168252831660208201527ff1038c18cf84a56e432fdbfaf746924b7ea511dfe03a6506a0ceba4888788d9b9101610d8c565b6040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b0383811660248301526000919085169063dd62ed3e90604401602060405180830381865afa1580156125e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126059190613bc0565b90506122c984846126168585613ca2565b61312a565b6040517f28dd2d010000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152306024820152600090737b4eb56e7cd4b454ba8ff71e4518426369a138a3906328dd2d019060440161012060405180830381865afa158015612696573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126ba9190613bd9565b9a9950505050505050505050565b6000732f39d218133afab8f2b819b1066c7e434ad94e9e6001600160a01b031663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561271c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127409190613986565b6040517f5a3b74b90000000000000000000000000000000000000000000000000000000081526001600160a01b038581166004830152841515602483015291925090821690635a3b74b990604401600060405180830381600087803b1580156127a857600080fd5b505af11580156127bc573d6000803e3d6000fd5b505050506127c8612360565b604080516001600160a01b038516815283151560208201527fe5a2d153ba97248c440d063272729378003d27af2b73cfe7caab54ceb62f84959101610f57565b6040516001600160a01b0384811660248301528381166044830152606482018390526122c99186918216906323b872dd90608401612455565b60018114158015612853575060028114155b15610aa2576040517fce3f87f000000000000000000000000000000000000000000000000000000000815260048101829052602401610cfe565b804710156128c9576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610cfe565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612916576040519150601f19603f3d011682016040523d82523d6000602084013e61291b565b606091505b5050905080610d3a576040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7feef3dac4538c82c8ace4063ab0acd2d15cdb5883aa1dff7c2673abb3d869840080546001600160a01b0381169074010000000000000000000000000000000000000000900465ffffffffffff168015806129b957504265ffffffffffff821610155b156129fa576040517f19ca5ebb00000000000000000000000000000000000000000000000000000000815265ffffffffffff82166004820152602401610cfe565b612a356000612a307feef3dac4538c82c8ace4063ab0acd2d15cdb5883aa1dff7c2673abb3d8698401546001600160a01b031690565b612dc2565b50612a41600083612ce7565b505081547fffffffffffff00000000000000000000000000000000000000000000000000001690915550565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154612aa78161226e565b6122c98383612dc2565b61228360008061302d565b612ac46131e8565b610ae6828261324f565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610ae6576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401610cfe565b7feef3dac4538c82c8ace4063ab0acd2d15cdb5883aa1dff7c2673abb3d8698401547feef3dac4538c82c8ace4063ab0acd2d15cdb5883aa1dff7c2673abb3d8698400907a010000000000000000000000000000000000000000000000000000900465ffffffffffff168015612c6e574265ffffffffffff82161015612c44576001820154825479ffffffffffffffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000090910465ffffffffffff167a01000000000000000000000000000000000000000000000000000002178255612c6e565b6040517f2b1fa2edafe6f7b9e97c1a9e0c3660e645beb2dcaa2d45bdbf9beaf5472e1ec590600090a15b5060010180546001600160a01b03167401000000000000000000000000000000000000000065ffffffffffff9485160279ffffffffffffffffffffffffffffffffffffffffffffffffffff16177a0100000000000000000000000000000000000000000000000000009290931691909102919091179055565b60007feef3dac4538c82c8ace4063ab0acd2d15cdb5883aa1dff7c2673abb3d869840083612db8576000612d427feef3dac4538c82c8ace4063ab0acd2d15cdb5883aa1dff7c2673abb3d8698401546001600160a01b031690565b6001600160a01b031614612d82576040517f3fc3c27a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001810180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0385161790555b610a87848461330d565b60007feef3dac4538c82c8ace4063ab0acd2d15cdb5883aa1dff7c2673abb3d869840083158015612e1f57507feef3dac4538c82c8ace4063ab0acd2d15cdb5883aa1dff7c2673abb3d8698401546001600160a01b038481169116145b15612e4f576001810180547fffffffffffffffffffffffff00000000000000000000000000000000000000001690555b610a878484613401565b600080732f39d218133afab8f2b819b1066c7e434ad94e9e6001600160a01b031663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612eae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ed29190613986565b6040517fbf92857c0000000000000000000000000000000000000000000000000000000081523060048201529091506001600160a01b0382169063bf92857c9060240160c060405180830381865afa158015612f32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f569190613cb5565b979650505050505050565b6000612f766001600160a01b038416836134c5565b90508051600014158015612f9b575080806020019051810190612f999190613cff565b155b15610d3a576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401610cfe565b600065ffffffffffff821115613029576040517f6dfcc6500000000000000000000000000000000000000000000000000000000081526030600482015260248101839052604401610cfe565b5090565b7feef3dac4538c82c8ace4063ab0acd2d15cdb5883aa1dff7c2673abb3d869840080547401000000000000000000000000000000000000000065ffffffffffff84811682027fffffffffffff000000000000000000000000000000000000000000000000000084166001600160a01b0388161717845591041680156122c9576040517f8886ebfc4259abdbc16601dd8fb5678e54878f47b3c34836cfc51154a960510990600090a150505050565b6000806130e6611a5d565b90508065ffffffffffff168365ffffffffffff161161310e576131098382613d1c565b613123565b61312365ffffffffffff8416620697806134d3565b9392505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b3000000000000000000000000000000000000000000000000000000001790526131a984826134e9565b6122c9576040516001600160a01b038481166024830152600060448301526131de91869182169063095ea7b390606401612455565b6122c98482612f61565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16612283576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6132576131e8565b7feef3dac4538c82c8ace4063ab0acd2d15cdb5883aa1dff7c2673abb3d86984006001600160a01b0382166132bb576040517fc22c802200000000000000000000000000000000000000000000000000000000815260006004820152602401610cfe565b805479ffffffffffffffffffffffffffffffffffffffffffffffffffff167a01000000000000000000000000000000000000000000000000000065ffffffffffff8516021781556122c9600083612ce7565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff166133f0576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556133a63390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506108f5565b60009150506108f5565b5092915050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16156133f0576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506108f5565b60606131238383600061358c565b60008183106134e25781613123565b5090919050565b6000806000846001600160a01b0316846040516135069190613d3b565b6000604051808303816000865af19150503d8060008114613543576040519150601f19603f3d011682016040523d82523d6000602084013e613548565b606091505b50915091508180156135725750805115806135725750808060200190518101906135729190613cff565b8015611c055750505050506001600160a01b03163b151590565b6060814710156135ca576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610cfe565b600080856001600160a01b031684866040516135e69190613d3b565b60006040518083038185875af1925050503d8060008114613623576040519150601f19603f3d011682016040523d82523d6000602084013e613628565b606091505b5091509150613638868383613642565b9695505050505050565b60608261365257613109826136b2565b815115801561366957506001600160a01b0384163b155b156136ab576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401610cfe565b5080613123565b8051156136c25780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561370657600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461312357600080fd5b6001600160a01b0381168114610aa257600080fd5b60006020828403121561375d57600080fd5b813561312381613736565b60006020828403121561377a57600080fd5b5035919050565b6000806040838503121561379457600080fd5b8235915060208301356137a681613736565b809150509250929050565b6000806000606084860312156137c657600080fd5b83356137d181613736565b925060208401356137e181613736565b929592945050506040919091013590565b60006020828403121561380457600080fd5b813560ff8116811461312357600080fd5b60006020828403121561382757600080fd5b813565ffffffffffff8116811461312357600080fd5b61ffff81168114610aa257600080fd5b60008060006060848603121561386257600080fd5b833561386d81613736565b92506020840135915060408401356138848161383d565b809150509250925092565b6000806000606084860312156138a457600080fd5b83356138af81613736565b95602085013595506040909401359392505050565b600080600080608085870312156138da57600080fd5b84356138e581613736565b9350602085013592506040850135915060608501356139038161383d565b939692955090935050565b6000806040838503121561392157600080fd5b823561392c81613736565b946020939093013593505050565b8015158114610aa257600080fd5b6000806040838503121561395b57600080fd5b823561396681613736565b915060208301356137a68161393a565b805161398181613736565b919050565b60006020828403121561399857600080fd5b815161312381613736565b6040516101e0810167ffffffffffffffff811182821017156139ee577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b600060208284031215613a0657600080fd5b6040516020810181811067ffffffffffffffff82111715613a50577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040529151825250919050565b80516fffffffffffffffffffffffffffffffff8116811461398157600080fd5b805164ffffffffff8116811461398157600080fd5b80516139818161383d565b60006101e08284031215613ab057600080fd5b613ab86139a3565b613ac284846139f4565b8152613ad060208401613a5d565b6020820152613ae160408401613a5d565b6040820152613af260608401613a5d565b6060820152613b0360808401613a5d565b6080820152613b1460a08401613a5d565b60a0820152613b2560c08401613a7d565b60c0820152613b3660e08401613a92565b60e0820152610100613b49818501613976565b90820152610120613b5b848201613976565b90820152610140613b6d848201613976565b90820152610160613b7f848201613976565b90820152610180613b91848201613a5d565b908201526101a0613ba3848201613a5d565b908201526101c0613bb5848201613a5d565b908201529392505050565b600060208284031215613bd257600080fd5b5051919050565b60008060008060008060008060006101208a8c031215613bf857600080fd5b8951985060208a0151975060408a0151965060608a0151955060808a0151945060a08a0151935060c08a01519250613c3260e08b01613a7d565b91506101008a0151613c438161393a565b809150509295985092959850929598565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b65ffffffffffff8181168382160190808211156133fa576133fa613c54565b808201808211156108f5576108f5613c54565b60008060008060008060c08789031215613cce57600080fd5b865195506020870151945060408701519350606087015192506080870151915060a087015190509295509295509295565b600060208284031215613d1157600080fd5b81516131238161393a565b65ffffffffffff8281168282160390808211156133fa576133fa613c54565b6000825160005b81811015613d5c5760208186018101518583015201613d42565b50600092019182525091905056fea2646970667358221220529e7901d0cc0333e353c710213ad1607ace75561ebe5e6ae0a08ebbc3b130e764736f6c63430008190033