Sonic Blaze Testnet
    /

    Contract

    0x190dF96A9dF0e88E1DCEfACf4788c110391eF4C0

    Overview

    S Balance

    Sonic Blaze LogoSonic Blaze LogoSonic Blaze Logo0 S

    Multichain Info

    No addresses found
    Transaction Hash
    Method
    Block
    Age
    From
    To

    There are no matching entries

    > 10 Internal Transactions found.

    Latest 25 internal transactions (View All)

    Parent Transaction Hash Block Age From To Amount
    136258312025-01-18 14:31:4651 days ago1737210706
    0x190dF96A...0391eF4C0
    0 S
    136258312025-01-18 14:31:4651 days ago1737210706
    0x190dF96A...0391eF4C0
    0 S
    136258312025-01-18 14:31:4651 days ago1737210706
    0x190dF96A...0391eF4C0
    0 S
    136258312025-01-18 14:31:4651 days ago1737210706
    0x190dF96A...0391eF4C0
    0 S
    136258312025-01-18 14:31:4651 days ago1737210706
    0x190dF96A...0391eF4C0
    0 S
    136258312025-01-18 14:31:4651 days ago1737210706
    0x190dF96A...0391eF4C0
    0 S
    136258312025-01-18 14:31:4651 days ago1737210706
    0x190dF96A...0391eF4C0
    0 S
    136258312025-01-18 14:31:4651 days ago1737210706
    0x190dF96A...0391eF4C0
    0 S
    136258312025-01-18 14:31:4651 days ago1737210706
    0x190dF96A...0391eF4C0
    0 S
    136258312025-01-18 14:31:4651 days ago1737210706
    0x190dF96A...0391eF4C0
    0 S
    136258312025-01-18 14:31:4651 days ago1737210706
    0x190dF96A...0391eF4C0
    0 S
    136258312025-01-18 14:31:4651 days ago1737210706
    0x190dF96A...0391eF4C0
    0 S
    136257762025-01-18 14:31:2851 days ago1737210688
    0x190dF96A...0391eF4C0
    0 S
    136257762025-01-18 14:31:2851 days ago1737210688
    0x190dF96A...0391eF4C0
    0 S
    136257692025-01-18 14:31:2651 days ago1737210686
    0x190dF96A...0391eF4C0
    0 S
    136257692025-01-18 14:31:2651 days ago1737210686
    0x190dF96A...0391eF4C0
    0 S
    136257622025-01-18 14:31:2451 days ago1737210684
    0x190dF96A...0391eF4C0
    0 S
    136257622025-01-18 14:31:2451 days ago1737210684
    0x190dF96A...0391eF4C0
    0 S
    136257552025-01-18 14:31:2251 days ago1737210682
    0x190dF96A...0391eF4C0
    0 S
    136257472025-01-18 14:31:2051 days ago1737210680
    0x190dF96A...0391eF4C0
    0 S
    136257472025-01-18 14:31:2051 days ago1737210680
    0x190dF96A...0391eF4C0
    0 S
    136257252025-01-18 14:31:1351 days ago1737210673
    0x190dF96A...0391eF4C0
    0 S
    136257252025-01-18 14:31:1351 days ago1737210673
    0x190dF96A...0391eF4C0
    0 S
    136257192025-01-18 14:31:1051 days ago1737210670
    0x190dF96A...0391eF4C0
    0 S
    136257192025-01-18 14:31:1051 days ago1737210670
    0x190dF96A...0391eF4C0
    0 S
    View All Internal Transactions
    Loading...
    Loading

    Contract Source Code Verified (Exact Match)

    Contract Name:
    LendingPool

    Compiler Version
    v0.7.6+commit.7338295f

    Optimization Enabled:
    Yes with 2000 runs

    Other Settings:
    default evmVersion

    Contract Source Code (Solidity Standard Json-Input format)

    File 1 of 30 : LendingPool.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: agpl-3.0
    pragma solidity 0.7.6;
    pragma experimental ABIEncoderV2;
    import {SafeMath} from '../../dependencies/openzeppelin/contracts/SafeMath.sol';
    import {IERC20} from '../../dependencies/openzeppelin/contracts/IERC20.sol';
    import {SafeERC20} from '../../dependencies/openzeppelin/contracts/SafeERC20.sol';
    import {Address} from '../../dependencies/openzeppelin/contracts/Address.sol';
    import {ILendingPoolAddressesProvider} from '../../interfaces/ILendingPoolAddressesProvider.sol';
    import {IAToken} from '../../interfaces/IAToken.sol';
    import {IVariableDebtToken} from '../../interfaces/IVariableDebtToken.sol';
    import {IFlashLoanReceiver} from '../../flashloan/interfaces/IFlashLoanReceiver.sol';
    import {IPriceOracleGetter} from '../../interfaces/IPriceOracleGetter.sol';
    import {IStableDebtToken} from '../../interfaces/IStableDebtToken.sol';
    import {ILendingPool} from '../../interfaces/ILendingPool.sol';
    import {VersionedInitializable} from '../libraries/aave-upgradeability/VersionedInitializable.sol';
    import {Helpers} from '../libraries/helpers/Helpers.sol';
    import {Errors} from '../libraries/helpers/Errors.sol';
    import {WadRayMath} from '../libraries/math/WadRayMath.sol';
    import {PercentageMath} from '../libraries/math/PercentageMath.sol';
    import {ReserveLogic} from '../libraries/logic/ReserveLogic.sol';
    import {GenericLogic} from '../libraries/logic/GenericLogic.sol';
    import {ValidationLogic} from '../libraries/logic/ValidationLogic.sol';
    import {ReserveConfiguration} from '../libraries/configuration/ReserveConfiguration.sol';
    import {UserConfiguration} from '../libraries/configuration/UserConfiguration.sol';
    import {DataTypes} from '../libraries/types/DataTypes.sol';
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 2 of 30 : Address.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: agpl-3.0
    pragma solidity 0.7.6;
    /**
    * @dev Collection of functions related to the address type
    */
    library Address {
    /**
    * @dev Returns true if `account` is a contract.
    *
    * [IMPORTANT]
    * ====
    * It is unsafe to assume that an address for which this function returns
    * false is an externally-owned account (EOA) and not a contract.
    *
    * Among others, `isContract` will return false for the following
    * types of addresses:
    *
    * - an externally-owned account
    * - a contract in construction
    * - an address where a contract will be created
    * - an address where a contract lived, but was destroyed
    * ====
    */
    function isContract(address account) internal view returns (bool) {
    // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 3 of 30 : IERC20.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: agpl-3.0
    pragma solidity 0.7.6;
    /**
    * @dev Interface of the ERC20 standard as defined in the EIP.
    */
    interface IERC20 {
    /**
    * @dev Returns the amount of tokens in existence.
    */
    function totalSupply() external view returns (uint256);
    /**
    * @dev Returns the amount of tokens owned by `account`.
    */
    function balanceOf(address account) external view returns (uint256);
    /**
    * @dev Moves `amount` tokens from the caller's account to `recipient`.
    *
    * Returns a boolean value indicating whether the operation succeeded.
    *
    * Emits a {Transfer} event.
    */
    function transfer(address recipient, uint256 amount) external returns (bool);
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 4 of 30 : SafeERC20.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    pragma solidity 0.7.6;
    import {IERC20} from './IERC20.sol';
    import {SafeMath} from './SafeMath.sol';
    import {Address} from './Address.sol';
    /**
    * @title SafeERC20
    * @dev Wrappers around ERC20 operations that throw on failure (when the token
    * contract returns false). Tokens that return no value (and instead revert or
    * throw on failure) are also supported, non-reverting calls are assumed to be
    * successful.
    * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,
    * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
    */
    library SafeERC20 {
    using SafeMath for uint256;
    using Address for address;
    function safeTransfer(
    IERC20 token,
    address to,
    uint256 value
    ) internal {
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 5 of 30 : SafeMath.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: agpl-3.0
    pragma solidity 0.7.6;
    /**
    * @dev Wrappers over Solidity's arithmetic operations with added overflow
    * checks.
    *
    * Arithmetic operations in Solidity wrap on overflow. This can easily result
    * in bugs, because programmers usually assume that an overflow raises an
    * error, which is the standard behavior in high level programming languages.
    * `SafeMath` restores this intuition by reverting the transaction when an
    * operation overflows.
    *
    * Using this library instead of the unchecked operations eliminates an entire
    * class of bugs, so it's recommended to use it always.
    */
    library SafeMath {
    /**
    * @dev Returns the addition of two unsigned integers, reverting on
    * overflow.
    *
    * Counterpart to Solidity's `+` operator.
    *
    * Requirements:
    * - Addition cannot overflow.
    */
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 6 of 30 : IFlashLoanReceiver.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    // SPDX-License-Identifier: agpl-3.0
    pragma solidity 0.7.6;
    import {ILendingPoolAddressesProvider} from '../../interfaces/ILendingPoolAddressesProvider.sol';
    import {ILendingPool} from '../../interfaces/ILendingPool.sol';
    /**
    * @title IFlashLoanReceiver interface
    * @notice Interface for the Aave fee IFlashLoanReceiver.
    * @author Aave
    * @dev implement this interface to develop a flashloan-compatible flashLoanReceiver contract
    **/
    interface IFlashLoanReceiver {
    function executeOperation(
    address[] calldata assets,
    uint256[] calldata amounts,
    uint256[] calldata premiums,
    address initiator,
    bytes calldata params
    ) external returns (bool);
    function ADDRESSES_PROVIDER() external view returns (ILendingPoolAddressesProvider);
    function LENDING_POOL() external view returns (ILendingPool);
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 7 of 30 : IAaveIncentivesController.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: agpl-3.0
    pragma solidity 0.7.6;
    pragma experimental ABIEncoderV2;
    interface IAaveIncentivesController {
    event RewardsAccrued(address indexed user, uint256 amount);
    event RewardsClaimed(address indexed user, address indexed to, uint256 amount);
    event RewardsClaimed(
    address indexed user,
    address indexed to,
    address indexed claimer,
    uint256 amount
    );
    event ClaimerSet(address indexed user, address indexed claimer);
    /*
    * @dev Returns the configuration of the distribution for a certain asset
    * @param asset The address of the reference asset of the distribution
    * @return The asset index, the emission per second and the last updated timestamp
    **/
    function getAssetData(address asset)
    external
    view
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 8 of 30 : IAToken.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: agpl-3.0
    pragma solidity 0.7.6;
    import {IERC20} from '../dependencies/openzeppelin/contracts/IERC20.sol';
    import {IScaledBalanceToken} from './IScaledBalanceToken.sol';
    import {IInitializableAToken} from './IInitializableAToken.sol';
    import {IAaveIncentivesController} from './IAaveIncentivesController.sol';
    interface IAToken is IERC20, IScaledBalanceToken, IInitializableAToken {
    /**
    * @dev Emitted after the mint action
    * @param from The address performing the mint
    * @param value The amount being
    * @param index The new liquidity index of the reserve
    **/
    event Mint(address indexed from, uint256 value, uint256 index);
    /**
    * @dev Mints `amount` aTokens to `user`
    * @param user The address receiving the minted tokens
    * @param amount The amount of tokens getting minted
    * @param index The new liquidity index of the reserve
    * @return `true` if the the previous balance of the user was 0
    */
    function mint(
    address user,
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 9 of 30 : IInitializableAToken.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: agpl-3.0
    pragma solidity 0.7.6;
    import {ILendingPool} from './ILendingPool.sol';
    import {IAaveIncentivesController} from './IAaveIncentivesController.sol';
    /**
    * @title IInitializableAToken
    * @notice Interface for the initialize function on AToken
    * @author Aave
    **/
    interface IInitializableAToken {
    /**
    * @dev Emitted when an aToken is initialized
    * @param underlyingAsset The address of the underlying asset
    * @param pool The address of the associated lending pool
    * @param treasury The address of the treasury
    * @param incentivesController The address of the incentives controller for this aToken
    * @param aTokenDecimals the decimals of the underlying
    * @param aTokenName the name of the aToken
    * @param aTokenSymbol the symbol of the aToken
    * @param params A set of encoded parameters for additional initialization
    **/
    event Initialized(
    address indexed underlyingAsset,
    address indexed pool,
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 10 of 30 : IInitializableDebtToken.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: agpl-3.0
    pragma solidity 0.7.6;
    import {ILendingPool} from './ILendingPool.sol';
    import {IAaveIncentivesController} from './IAaveIncentivesController.sol';
    /**
    * @title IInitializableDebtToken
    * @notice Interface for the initialize function common between debt tokens
    * @author Aave
    **/
    interface IInitializableDebtToken {
    /**
    * @dev Emitted when a debt token is initialized
    * @param underlyingAsset The address of the underlying asset
    * @param pool The address of the associated lending pool
    * @param incentivesController The address of the incentives controller for this aToken
    * @param debtTokenDecimals the decimals of the debt token
    * @param debtTokenName the name of the debt token
    * @param debtTokenSymbol the symbol of the debt token
    * @param params A set of encoded parameters for additional initialization
    **/
    event Initialized(
    address indexed underlyingAsset,
    address indexed pool,
    address incentivesController,
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 11 of 30 : ILendingPool.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: agpl-3.0
    pragma solidity 0.7.6;
    pragma experimental ABIEncoderV2;
    import {ILendingPoolAddressesProvider} from './ILendingPoolAddressesProvider.sol';
    import {DataTypes} from '../protocol/libraries/types/DataTypes.sol';
    interface ILendingPool {
    /**
    * @dev Emitted on deposit()
    * @param reserve The address of the underlying asset of the reserve
    * @param user The address initiating the deposit
    * @param onBehalfOf The beneficiary of the deposit, receiving the aTokens
    * @param amount The amount deposited
    * @param referral The referral code used
    **/
    event Deposit(
    address indexed reserve,
    address user,
    address indexed onBehalfOf,
    uint256 amount,
    uint16 indexed referral
    );
    /**
    * @dev Emitted on withdraw()
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 12 of 30 : ILendingPoolAddressesProvider.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: agpl-3.0
    pragma solidity 0.7.6;
    /**
    * @title LendingPoolAddressesProvider contract
    * @dev Main registry of addresses part of or connected to the protocol, including permissioned roles
    * - Acting also as factory of proxies and admin of those, so with right to change its implementations
    * - Owned by the Aave Governance
    * @author Aave
    **/
    interface ILendingPoolAddressesProvider {
    event MarketIdSet(string newMarketId);
    event LendingPoolUpdated(address indexed newAddress);
    event ConfigurationAdminUpdated(address indexed newAddress);
    event EmergencyAdminUpdated(address indexed newAddress);
    event LendingPoolConfiguratorUpdated(address indexed newAddress);
    event LendingPoolCollateralManagerUpdated(address indexed newAddress);
    event PriceOracleUpdated(address indexed newAddress);
    event LendingRateOracleUpdated(address indexed newAddress);
    event ProxyCreated(bytes32 id, address indexed newAddress);
    event AddressSet(bytes32 id, address indexed newAddress, bool hasProxy);
    function getMarketId() external view returns (string memory);
    function setMarketId(string calldata marketId) external;
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 13 of 30 : IPriceOracleGetter.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    // SPDX-License-Identifier: agpl-3.0
    pragma solidity 0.7.6;
    /**
    * @title IPriceOracleGetter interface
    * @notice Interface for the Aave price oracle.
    **/
    interface IPriceOracleGetter {
    /**
    * @dev returns the asset price in ETH
    * @param asset the address of the asset
    * @return the ETH price of the asset
    **/
    function getAssetPrice(address asset) external view returns (uint256);
    function updateAssetPrice(address asset) external returns (uint256);
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 14 of 30 : IReserveInterestRateStrategy.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: agpl-3.0
    pragma solidity 0.7.6;
    /**
    * @title IReserveInterestRateStrategyInterface interface
    * @dev Interface for the calculation of the interest rates
    * @author Aave
    */
    interface IReserveInterestRateStrategy {
    function baseVariableBorrowRate() external view returns (uint256);
    function getMaxVariableBorrowRate() external view returns (uint256);
    function calculateInterestRates(
    address reserve,
    uint256 availableLiquidity,
    uint256 totalStableDebt,
    uint256 totalVariableDebt,
    uint256 averageStableBorrowRate,
    uint256 reserveFactor
    )
    external
    view
    returns (
    uint256,
    uint256,
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 15 of 30 : IScaledBalanceToken.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: agpl-3.0
    pragma solidity 0.7.6;
    interface IScaledBalanceToken {
    /**
    * @dev Returns the scaled balance of the user. The scaled balance is the sum of all the
    * updated stored balance divided by the reserve's liquidity index at the moment of the update
    * @param user The user whose balance is calculated
    * @return The scaled balance of the user
    **/
    function scaledBalanceOf(address user) external view returns (uint256);
    /**
    * @dev Returns the scaled balance of the user and the scaled total supply.
    * @param user The address of the user
    * @return The scaled balance of the user
    * @return The scaled balance and the scaled total supply
    **/
    function getScaledUserBalanceAndSupply(address user) external view returns (uint256, uint256);
    /**
    * @dev Returns the scaled total supply of the variable debt token. Represents sum(debt/index)
    * @return The scaled total supply
    **/
    function scaledTotalSupply() external view returns (uint256);
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 16 of 30 : IStableDebtToken.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: agpl-3.0
    pragma solidity 0.7.6;
    import {IInitializableDebtToken} from './IInitializableDebtToken.sol';
    import {IAaveIncentivesController} from './IAaveIncentivesController.sol';
    /**
    * @title IStableDebtToken
    * @notice Defines the interface for the stable debt token
    * @dev It does not inherit from IERC20 to save in code size
    * @author Aave
    **/
    interface IStableDebtToken is IInitializableDebtToken {
    /**
    * @dev Emitted when new stable debt is minted
    * @param user The address of the user who triggered the minting
    * @param onBehalfOf The recipient of stable debt tokens
    * @param amount The amount minted
    * @param currentBalance The current balance of the user
    * @param balanceIncrease The increase in balance since the last action of the user
    * @param newRate The rate of the debt after the minting
    * @param avgStableRate The new average stable rate after the minting
    * @param newTotalSupply The new total supply of the stable debt token after the action
    **/
    event Mint(
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 17 of 30 : IVariableDebtToken.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: agpl-3.0
    pragma solidity 0.7.6;
    import {IScaledBalanceToken} from './IScaledBalanceToken.sol';
    import {IInitializableDebtToken} from './IInitializableDebtToken.sol';
    import {IAaveIncentivesController} from './IAaveIncentivesController.sol';
    /**
    * @title IVariableDebtToken
    * @author Aave
    * @notice Defines the basic interface for a variable debt token.
    **/
    interface IVariableDebtToken is IScaledBalanceToken, IInitializableDebtToken {
    /**
    * @dev Emitted after the mint action
    * @param from The address performing the mint
    * @param onBehalfOf The address of the user on which behalf minting has been performed
    * @param value The amount to be minted
    * @param index The last index of the reserve
    **/
    event Mint(address indexed from, address indexed onBehalfOf, uint256 value, uint256 index);
    /**
    * @dev Mints debt token to the `onBehalfOf` address
    * @param user The address receiving the borrowed underlying, being the delegatee in case
    * of credit delegate, or same as `onBehalfOf` otherwise
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 18 of 30 : LendingPoolStorage.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: agpl-3.0
    pragma solidity 0.7.6;
    import {UserConfiguration} from '../libraries/configuration/UserConfiguration.sol';
    import {ReserveConfiguration} from '../libraries/configuration/ReserveConfiguration.sol';
    import {ReserveLogic} from '../libraries/logic/ReserveLogic.sol';
    import {ILendingPoolAddressesProvider} from '../../interfaces/ILendingPoolAddressesProvider.sol';
    import {DataTypes} from '../libraries/types/DataTypes.sol';
    contract LendingPoolStorage {
    using ReserveLogic for DataTypes.ReserveData;
    using ReserveConfiguration for DataTypes.ReserveConfigurationMap;
    using UserConfiguration for DataTypes.UserConfigurationMap;
    ILendingPoolAddressesProvider internal _addressesProvider;
    mapping(address => DataTypes.ReserveData) internal _reserves;
    mapping(address => DataTypes.UserConfigurationMap) internal _usersConfig;
    // the list of the available reserves, structured as a mapping for gas savings reasons
    mapping(uint256 => address) internal _reservesList;
    uint256 internal _reservesCount;
    bool internal _paused;
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 19 of 30 : VersionedInitializable.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: agpl-3.0
    pragma solidity 0.7.6;
    /**
    * @title VersionedInitializable
    *
    * @dev Helper contract to implement initializer functions. To use it, replace
    * the constructor with a function that has the `initializer` modifier.
    * WARNING: Unlike constructors, initializer functions must be manually
    * invoked. This applies both to deploying an Initializable contract, as well
    * as extending an Initializable contract via inheritance.
    * WARNING: When used with inheritance, manual care must be taken to not invoke
    * a parent initializer twice, or ensure that all initializers are idempotent,
    * because this is not dealt with automatically as with constructors.
    *
    * @author Aave, inspired by the OpenZeppelin Initializable contract
    */
    abstract contract VersionedInitializable {
    /**
    * @dev Indicates that the contract has been initialized.
    */
    uint256 private lastInitializedRevision = 0;
    /**
    * @dev Indicates that the contract is in the process of being initialized.
    */
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 20 of 30 : ReserveConfiguration.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: agpl-3.0
    pragma solidity 0.7.6;
    import {Errors} from '../helpers/Errors.sol';
    import {DataTypes} from '../types/DataTypes.sol';
    /**
    * @title ReserveConfiguration library
    * @author Aave
    * @notice Implements the bitmap logic to handle the reserve configuration
    */
    library ReserveConfiguration {
    uint256 constant LTV_MASK = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000; // prettier-ignore
    uint256 constant LIQUIDATION_THRESHOLD_MASK = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF; // prettier-ignore
    uint256 constant LIQUIDATION_BONUS_MASK = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF; // prettier-ignore
    uint256 constant DECIMALS_MASK = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF; // prettier-ignore
    uint256 constant ACTIVE_MASK = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFF; // prettier-ignore
    uint256 constant FROZEN_MASK = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFF; // prettier-ignore
    uint256 constant BORROWING_MASK = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFF; // prettier-ignore
    uint256 constant STABLE_BORROWING_MASK = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFF; // prettier-ignore
    uint256 constant RESERVE_FACTOR_MASK = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF; // prettier-ignore
    /// @dev For the LTV, the start bit is 0 (up to 15), hence no bitshifting is needed
    uint256 constant LIQUIDATION_THRESHOLD_START_BIT_POSITION = 16;
    uint256 constant LIQUIDATION_BONUS_START_BIT_POSITION = 32;
    uint256 constant RESERVE_DECIMALS_START_BIT_POSITION = 48;
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 21 of 30 : UserConfiguration.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: agpl-3.0
    pragma solidity 0.7.6;
    import {Errors} from '../helpers/Errors.sol';
    import {DataTypes} from '../types/DataTypes.sol';
    /**
    * @title UserConfiguration library
    * @author Aave
    * @notice Implements the bitmap logic to handle the user configuration
    */
    library UserConfiguration {
    uint256 internal constant BORROWING_MASK =
    0x5555555555555555555555555555555555555555555555555555555555555555;
    /**
    * @dev Sets if the user is borrowing the reserve identified by reserveIndex
    * @param self The configuration object
    * @param reserveIndex The index of the reserve in the bitmap
    * @param borrowing True if the user is borrowing the reserve, false otherwise
    **/
    function setBorrowing(
    DataTypes.UserConfigurationMap storage self,
    uint256 reserveIndex,
    bool borrowing
    ) internal {
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 22 of 30 : Errors.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: agpl-3.0
    pragma solidity 0.7.6;
    /**
    * @title Errors library
    * @author Aave
    * @notice Defines the error messages emitted by the different contracts of the Aave protocol
    * @dev Error messages prefix glossary:
    * - VL = ValidationLogic
    * - MATH = Math libraries
    * - CT = Common errors between tokens (AToken, VariableDebtToken and StableDebtToken)
    * - AT = AToken
    * - SDT = StableDebtToken
    * - VDT = VariableDebtToken
    * - LP = LendingPool
    * - LPAPR = LendingPoolAddressesProviderRegistry
    * - LPC = LendingPoolConfiguration
    * - RL = ReserveLogic
    * - LPCM = LendingPoolCollateralManager
    * - P = Pausable
    */
    library Errors {
    //common errors
    string public constant CALLER_NOT_POOL_ADMIN = '33'; // 'The caller must be the pool admin'
    string public constant BORROW_ALLOWANCE_NOT_ENOUGH = '59'; // User borrows on behalf, but allowance are too small
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 23 of 30 : Helpers.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: agpl-3.0
    pragma solidity 0.7.6;
    import {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';
    import {DataTypes} from '../types/DataTypes.sol';
    /**
    * @title Helpers library
    * @author Aave
    */
    library Helpers {
    /**
    * @dev Fetches the user current stable and variable debt balances
    * @param user The user address
    * @param reserve The reserve data object
    * @return The stable and variable debt balance
    **/
    function getUserCurrentDebt(address user, DataTypes.ReserveData storage reserve)
    internal
    view
    returns (uint256, uint256)
    {
    return (
    IERC20(reserve.stableDebtTokenAddress).balanceOf(user),
    IERC20(reserve.variableDebtTokenAddress).balanceOf(user)
    );
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 24 of 30 : GenericLogic.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: agpl-3.0
    pragma solidity 0.7.6;
    pragma experimental ABIEncoderV2;
    import {SafeMath} from '../../../dependencies/openzeppelin/contracts/SafeMath.sol';
    import {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';
    import {ReserveLogic} from './ReserveLogic.sol';
    import {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';
    import {UserConfiguration} from '../configuration/UserConfiguration.sol';
    import {WadRayMath} from '../math/WadRayMath.sol';
    import {PercentageMath} from '../math/PercentageMath.sol';
    import {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';
    import {DataTypes} from '../types/DataTypes.sol';
    /**
    * @title GenericLogic library
    * @author Aave
    * @title Implements protocol-level logic to calculate and validate the state of a user
    */
    library GenericLogic {
    using ReserveLogic for DataTypes.ReserveData;
    using SafeMath for uint256;
    using WadRayMath for uint256;
    using PercentageMath for uint256;
    using ReserveConfiguration for DataTypes.ReserveConfigurationMap;
    using UserConfiguration for DataTypes.UserConfigurationMap;
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 25 of 30 : ReserveLogic.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: agpl-3.0
    pragma solidity 0.7.6;
    import {SafeMath} from '../../../dependencies/openzeppelin/contracts/SafeMath.sol';
    import {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';
    import {SafeERC20} from '../../../dependencies/openzeppelin/contracts/SafeERC20.sol';
    import {IAToken} from '../../../interfaces/IAToken.sol';
    import {IStableDebtToken} from '../../../interfaces/IStableDebtToken.sol';
    import {IVariableDebtToken} from '../../../interfaces/IVariableDebtToken.sol';
    import {IReserveInterestRateStrategy} from '../../../interfaces/IReserveInterestRateStrategy.sol';
    import {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';
    import {MathUtils} from '../math/MathUtils.sol';
    import {WadRayMath} from '../math/WadRayMath.sol';
    import {PercentageMath} from '../math/PercentageMath.sol';
    import {Errors} from '../helpers/Errors.sol';
    import {DataTypes} from '../types/DataTypes.sol';
    /**
    * @title ReserveLogic library
    * @author Aave
    * @notice Implements the logic to update the reserves state
    */
    library ReserveLogic {
    using SafeMath for uint256;
    using WadRayMath for uint256;
    using PercentageMath for uint256;
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 26 of 30 : ValidationLogic.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: agpl-3.0
    pragma solidity 0.7.6;
    pragma experimental ABIEncoderV2;
    import {SafeMath} from '../../../dependencies/openzeppelin/contracts/SafeMath.sol';
    import {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';
    import {ReserveLogic} from './ReserveLogic.sol';
    import {GenericLogic} from './GenericLogic.sol';
    import {WadRayMath} from '../math/WadRayMath.sol';
    import {PercentageMath} from '../math/PercentageMath.sol';
    import {SafeERC20} from '../../../dependencies/openzeppelin/contracts/SafeERC20.sol';
    import {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';
    import {UserConfiguration} from '../configuration/UserConfiguration.sol';
    import {Errors} from '../helpers/Errors.sol';
    import {Helpers} from '../helpers/Helpers.sol';
    import {IReserveInterestRateStrategy} from '../../../interfaces/IReserveInterestRateStrategy.sol';
    import {DataTypes} from '../types/DataTypes.sol';
    /**
    * @title ReserveLogic library
    * @author Aave
    * @notice Implements functions to validate the different actions of the protocol
    */
    library ValidationLogic {
    using ReserveLogic for DataTypes.ReserveData;
    using SafeMath for uint256;
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 27 of 30 : MathUtils.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: agpl-3.0
    pragma solidity 0.7.6;
    import {SafeMath} from '../../../dependencies/openzeppelin/contracts/SafeMath.sol';
    import {WadRayMath} from './WadRayMath.sol';
    library MathUtils {
    using SafeMath for uint256;
    using WadRayMath for uint256;
    /// @dev Ignoring leap years
    uint256 internal constant SECONDS_PER_YEAR = 365 days;
    /**
    * @dev Function to calculate the interest accumulated using a linear interest rate formula
    * @param rate The interest rate, in ray
    * @param lastUpdateTimestamp The timestamp of the last update of the interest
    * @return The interest rate linearly accumulated during the timeDelta, in ray
    **/
    function calculateLinearInterest(uint256 rate, uint40 lastUpdateTimestamp)
    internal
    view
    returns (uint256)
    {
    //solium-disable-next-line
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 28 of 30 : PercentageMath.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: agpl-3.0
    pragma solidity 0.7.6;
    import {Errors} from '../helpers/Errors.sol';
    /**
    * @title PercentageMath library
    * @author Aave
    * @notice Provides functions to perform percentage calculations
    * @dev Percentages are defined by default with 2 decimals of precision (100.00). The precision is indicated by PERCENTAGE_FACTOR
    * @dev Operations are rounded half up
    **/
    library PercentageMath {
    uint256 constant PERCENTAGE_FACTOR = 1e4; //percentage plus two decimals
    uint256 constant HALF_PERCENT = PERCENTAGE_FACTOR / 2;
    /**
    * @dev Executes a percentage multiplication
    * @param value The value of which the percentage needs to be calculated
    * @param percentage The percentage of the value to be calculated
    * @return The percentage of value
    **/
    function percentMul(uint256 value, uint256 percentage) internal pure returns (uint256) {
    if (value == 0 || percentage == 0) {
    return 0;
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 29 of 30 : WadRayMath.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: agpl-3.0
    pragma solidity 0.7.6;
    import {Errors} from '../helpers/Errors.sol';
    /**
    * @title WadRayMath library
    * @author Aave
    * @dev Provides mul and div function for wads (decimal numbers with 18 digits precision) and rays (decimals with 27 digits)
    **/
    library WadRayMath {
    uint256 internal constant WAD = 1e18;
    uint256 internal constant halfWAD = WAD / 2;
    uint256 internal constant RAY = 1e27;
    uint256 internal constant halfRAY = RAY / 2;
    uint256 internal constant WAD_RAY_RATIO = 1e9;
    /**
    * @return One ray, 1e27
    **/
    function ray() internal pure returns (uint256) {
    return RAY;
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 30 of 30 : DataTypes.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: agpl-3.0
    pragma solidity 0.7.6;
    library DataTypes {
    // refer to the whitepaper, section 1.1 basic concepts for a formal description of these properties.
    struct ReserveData {
    //stores the reserve configuration
    ReserveConfigurationMap configuration;
    //the liquidity index. Expressed in ray
    uint128 liquidityIndex;
    //variable borrow index. Expressed in ray
    uint128 variableBorrowIndex;
    //the current supply rate. Expressed in ray
    uint128 currentLiquidityRate;
    //the current variable borrow rate. Expressed in ray
    uint128 currentVariableBorrowRate;
    //the current stable borrow rate. Expressed in ray
    uint128 currentStableBorrowRate;
    uint40 lastUpdateTimestamp;
    //tokens addresses
    address aTokenAddress;
    address stableDebtTokenAddress;
    address variableDebtTokenAddress;
    //address of the interest rate strategy
    address interestRateStrategyAddress;
    //the id of the reserve. Represents the position in the list of the active reserves
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    Settings
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    {
    "optimizer": {
    "enabled": true,
    "runs": 2000
    },
    "outputSelection": {
    "*": {
    "*": [
    "evm.bytecode",
    "evm.deployedBytecode",
    "devdoc",
    "userdoc",
    "metadata",
    "abi"
    ]
    }
    },
    "metadata": {
    "useLiteralContent": true
    },
    "libraries": {
    "contracts/protocol/libraries/logic/ReserveLogic.sol": {
    "ReserveLogic": "0x6bcf608939dfe961fc46275db9deb09bafee9736"
    },
    "contracts/protocol/libraries/logic/ValidationLogic.sol": {
    "ValidationLogic": "0x390df1e055a6c05f16d030d1ca2d9cedf21fd0f0"
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    Contract ABI

    API
    [{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"onBehalfOf","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"borrowRateMode","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"borrowRate","type":"uint256"},{"indexed":true,"internalType":"uint16","name":"referral","type":"uint16"}],"name":"Borrow","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"onBehalfOf","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"uint16","name":"referral","type":"uint16"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"target","type":"address"},{"indexed":true,"internalType":"address","name":"initiator","type":"address"},{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"premium","type":"uint256"},{"indexed":false,"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"FlashLoan","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"collateralAsset","type":"address"},{"indexed":true,"internalType":"address","name":"debtAsset","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"debtToCover","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidatedCollateralAmount","type":"uint256"},{"indexed":false,"internalType":"address","name":"liquidator","type":"address"},{"indexed":false,"internalType":"bool","name":"receiveAToken","type":"bool"}],"name":"LiquidationCall","type":"event"},{"anonymous":false,"inputs":[],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"}],"name":"RebalanceStableBorrowRate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"repayer","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Repay","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":false,"internalType":"uint256","name":"liquidityRate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"stableBorrowRate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"variableBorrowRate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidityIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"variableBorrowIndex","type":"uint256"}],"name":"ReserveDataUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"}],"name":"ReserveUsedAsCollateralDisabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"}],"name":"ReserveUsedAsCollateralEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"rateMode","type":"uint256"}],"name":"Swap","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"FLASHLOAN_PREMIUM_TOTAL","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LENDINGPOOL_REVISION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_NUMBER_RESERVES","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_STABLE_RATE_BORROW_SIZE_PERCENT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"interestRateMode","type":"uint256"},{"internalType":"uint16","name":"referralCode","type":"uint16"},{"internalType":"address","name":"onBehalfOf","type":"address"}],"name":"borrow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"onBehalfOf","type":"address"},{"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"balanceFromBefore","type":"uint256"},{"internalType":"uint256","name":"balanceToBefore","type":"uint256"}],"name":"finalizeTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"receiverAddress","type":"address"},{"internalType":"address[]","name":"assets","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"uint256[]","name":"modes","type":"uint256[]"},{"internalType":"address","name":"onBehalfOf","type":"address"},{"internalType":"bytes","name":"params","type":"bytes"},{"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"flashLoan","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAddressesProvider","outputs":[{"internalType":"contract ILendingPoolAddressesProvider","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getConfiguration","outputs":[{"components":[{"internalType":"uint256","name":"data","type":"uint256"}],"internalType":"struct DataTypes.ReserveConfigurationMap","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getReserveData","outputs":[{"components":[{"components":[{"internalType":"uint256","name":"data","type":"uint256"}],"internalType":"struct DataTypes.ReserveConfigurationMap","name":"configuration","type":"tuple"},{"internalType":"uint128","name":"liquidityIndex","type":"uint128"},{"internalType":"uint128","name":"variableBorrowIndex","type":"uint128"},{"internalType":"uint128","name":"currentLiquidityRate","type":"uint128"},{"internalType":"uint128","name":"currentVariableBorrowRate","type":"uint128"},{"internalType":"uint128","name":"currentStableBorrowRate","type":"uint128"},{"internalType":"uint40","name":"lastUpdateTimestamp","type":"uint40"},{"internalType":"address","name":"aTokenAddress","type":"address"},{"internalType":"address","name":"stableDebtTokenAddress","type":"address"},{"internalType":"address","name":"variableDebtTokenAddress","type":"address"},{"internalType":"address","name":"interestRateStrategyAddress","type":"address"},{"internalType":"uint8","name":"id","type":"uint8"}],"internalType":"struct DataTypes.ReserveData","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getReserveNormalizedIncome","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getReserveNormalizedVariableDebt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getReservesList","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getUserAccountData","outputs":[{"internalType":"uint256","name":"totalCollateralETH","type":"uint256"},{"internalType":"uint256","name":"totalDebtETH","type":"uint256"},{"internalType":"uint256","name":"availableBorrowsETH","type":"uint256"},{"internalType":"uint256","name":"currentLiquidationThreshold","type":"uint256"},{"internalType":"uint256","name":"ltv","type":"uint256"},{"internalType":"uint256","name":"healthFactor","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getUserConfiguration","outputs":[{"components":[{"internalType":"uint256","name":"data","type":"uint256"}],"internalType":"struct DataTypes.UserConfigurationMap","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"aTokenAddress","type":"address"},{"internalType":"address","name":"stableDebtAddress","type":"address"},{"internalType":"address","name":"variableDebtAddress","type":"address"},{"internalType":"address","name":"interestRateStrategyAddress","type":"address"}],"name":"initReserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract ILendingPoolAddressesProvider","name":"provider","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"collateralAsset","type":"address"},{"internalType":"address","name":"debtAsset","type":"address"},{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"debtToCover","type":"uint256"},{"internalType":"bool","name":"receiveAToken","type":"bool"}],"name":"liquidationCall","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"user","type":"address"}],"name":"rebalanceStableBorrowRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"rateMode","type":"uint256"},{"internalType":"address","name":"onBehalfOf","type":"address"}],"name":"repay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"configuration","type":"uint256"}],"name":"setConfiguration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"val","type":"bool"}],"name":"setPause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"rateStrategyAddress","type":"address"}],"name":"setReserveInterestRateStrategyAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"bool","name":"useAsCollateral","type":"bool"}],"name":"setUserUseReserveAsCollateral","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"rateMode","type":"uint256"}],"name":"swapBorrowRateMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}]

    60806040526000805534801561001457600080fd5b50615231806100246000396000f3fe608060405234801561001057600080fd5b50600436106101c35760003560e01c8063ab9c4b5d116100f9578063d15e005311610097578063e82fec2f11610071578063e82fec2f146103c2578063e8eda9df146103ca578063f8119d51146103dd578063fe65acfe146103e5576101c3565b8063d15e005314610387578063d1946dbc1461039a578063d5ed3933146103af576101c3565b8063bf92857c116100d3578063bf92857c14610329578063c44b11f71461034e578063c4d66de814610361578063cd11238214610374576101c3565b8063ab9c4b5d146102f0578063b8d2927614610303578063bedb86fb14610316576101c3565b80635a3b74b9116101665780637a708e92116101405780637a708e92146102af5780638afaff02146102c257806394ba89a2146102ca578063a415bcad146102dd576101c3565b80635a3b74b9146102745780635c975abb1461028757806369328dec1461029c576101c3565b806335ea6a75116101a257806335ea6a751461020e578063386497fd1461022e5780634417a58314610241578063573ade8114610261576101c3565b8062a718a9146101c8578063074b2e43146101dd5780631d2118f9146101fb575b600080fd5b6101db6101d6366004614862565b6103fa565b005b6101e5610630565b6040516101f29190615102565b60405180910390f35b6101db6102093660046147ba565b610636565b61022161021c366004614782565b61067c565b6040516101f29190614f1c565b6101e561023c366004614782565b61075e565b61025461024f366004614782565b610785565b6040516101f29190614f12565b6101e561026f366004614afd565b6107b8565b6101db610282366004614a14565b610b2f565b61028f610d0d565b6040516101f29190614ed4565b6101e56102aa366004614a6c565b610d16565b6101db6102bd3660046147f2565b611059565b6101e561116f565b6101db6102d8366004614a41565b611174565b6101db6102eb366004614b46565b611513565b6101db6102fe36600461491f565b611593565b6101db610311366004614a41565b61159b565b6101db610324366004614b84565b6115bf565b61033c610337366004614782565b61163a565b6040516101f29695949392919061510b565b61025461035c366004614782565b611736565b6101db61036f366004614782565b611769565b6101db6103823660046147ba565b61183d565b6101e5610395366004614782565b611acc565b6103a2611aed565b6040516101f29190614e87565b6101db6103bd3660046148bb565b611b93565b6101e5611df7565b6101db6103d8366004614aad565b611dfd565b6101e561205c565b6103ed612062565b6040516101f29190614cd2565b610402612071565b603454604080517f712d917100000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163712d9171916004808301926020929190829003018186803b15801561046057600080fd5b505afa158015610474573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610498919061479e565b9050600080826001600160a01b031688888888886040516024016104c0959493929190614d5a565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ea718a900000000000000000000000000000000000000000000000000000000179052516105229190614cb6565b600060405180830381855af49150503d806000811461055d576040519150601f19603f3d011682016040523d82523d6000602084013e610562565b606091505b5091509150816040518060400160405280600281526020017f3233000000000000000000000000000000000000000000000000000000000000815250906105c55760405162461bcd60e51b81526004016105bc9190614edf565b60405180910390fd5b50600080828060200190518101906105dd9190614bd4565b9150915081600014816040516020016105f69190614cb6565b604051602081830303815290604052906106235760405162461bcd60e51b81526004016105bc9190614edf565b5050505050505050505050565b603b5490565b61063e6120ca565b6001600160a01b039182166000908152603560205260409020600701805473ffffffffffffffffffffffffffffffffffffffff191691909216179055565b61068461451c565b506001600160a01b0381811660009081526035602090815260409182902082516101a08101845281546101808201908152815260018201546001600160801b0380821694830194909452600160801b908190048416948201949094526002820154808416606083015284900483166080820152600382015492831660a08201529290910464ffffffffff1660c08301526004810154831660e0830152600581015483166101008301526006810154831661012083015260070154918216610140820152600160a01b90910460ff166101608201525b919050565b6001600160a01b038116600090815260356020526040812061077f906121bd565b92915050565b61078d614587565b506001600160a01b031660009081526036602090815260409182902082519182019092529054815290565b60006107c2612071565b6001600160a01b038516600090815260356020526040812090806107e6858461223a565b9150915060008660028111156107f857fe5b6040517ffa0c214900000000000000000000000000000000000000000000000000000000815290915073390df1e055a6c05f16d030d1ca2d9cedf21fd0f09063fa0c2149906108559087908c9086908c908a908a906004016150c1565b60006040518083038186803b15801561086d57600080fd5b505af4158015610881573d6000803e3d6000fd5b5060009250600191506108919050565b82600281111561089d57fe5b146108a857826108aa565b835b9050808910156108b75750875b6108c08561233f565b60018260028111156108ce57fe5b141561093f576005850154604051632770a7eb60e21b81526001600160a01b0390911690639dc29fac90610908908a908590600401614d17565b600060405180830381600087803b15801561092257600080fd5b505af1158015610936573d6000803e3d6000fd5b505050506109d6565b600685015460018601546040517ff5298aca0000000000000000000000000000000000000000000000000000000081526001600160a01b039092169163f5298aca916109a3918b918691600160801b9091046001600160801b031690600401614d30565b600060405180830381600087803b1580156109bd57600080fd5b505af11580156109d1573d6000803e3d6000fd5b505050505b60048501546001600160a01b03166109f2868c83856000612419565b610a0682610a008787612924565b9061297e565b610a3e5760078601546001600160a01b0389166000908152603660205260408120610a3e929091600160a01b90910460ff16906129c0565b610a536001600160a01b038c16338385612a5e565b6040517f88dd91a10000000000000000000000000000000000000000000000000000000081526001600160a01b038216906388dd91a190610a9a9033908690600401614d17565b600060405180830381600087803b158015610ab457600080fd5b505af1158015610ac8573d6000803e3d6000fd5b50505050336001600160a01b0316886001600160a01b03168c6001600160a01b03167f4cdde6e09bb755c9a5589ebaec640bbfedff1362d4b255ebf8339782b9942faa85604051610b199190615102565b60405180910390a4509998505050505050505050565b610b37612071565b6001600160a01b038083166000908152603560208181526040808420338552603683529381902060385460345483517ffca513a80000000000000000000000000000000000000000000000000000000081529351969773390df1e055a6c05f16d030d1ca2d9cedf21fd0f097635fa297e5978a978d978d9792969295603795939493169263fca513a892600480840193919291829003018186803b158015610bde57600080fd5b505afa158015610bf2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c16919061479e565b6040518963ffffffff1660e01b8152600401610c3998979695949392919061503d565b60006040518083038186803b158015610c5157600080fd5b505af4158015610c65573d6000803e3d6000fd5b505050506007810154336000908152603660205260409020610c9191600160a01b900460ff1684612aec565b8115610cd15760405133906001600160a01b038516907e058a56ea94653cdf4f152d227ace22d4c00ad99e2a43f58cb7d9e3feb295f290600090a3610d08565b60405133906001600160a01b038516907f44c58d81365b66dd4b1a7f36c25aa97b8c71c361ee4937adc1a00000227db5dd90600090a35b505050565b60395460ff1690565b6000610d20612071565b6001600160a01b0380851660009081526035602052604080822060048082015492516370a0823160e01b8152919492909216929183916370a0823191610d6891339101614cd2565b60206040518083038186803b158015610d8057600080fd5b505afa158015610d94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610db89190614bbc565b905085600019811415610dc85750805b73390df1e055a6c05f16d030d1ca2d9cedf21fd0f063d09db04a898385603560366000336001600160a01b03166001600160a01b031681526020019081526020016000206037603854603460009054906101000a90046001600160a01b03166001600160a01b031663fca513a86040518163ffffffff1660e01b815260040160206040518083038186803b158015610e5f57600080fd5b505afa158015610e73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e97919061479e565b6040518963ffffffff1660e01b8152600401610eba989796959493929190614e1b565b60006040518083038186803b158015610ed257600080fd5b505af4158015610ee6573d6000803e3d6000fd5b50505050610ef38461233f565b610f01848985600085612419565b81811415610f6b576007840154336000908152603660205260408120610f34929091600160a01b90910460ff1690612aec565b60405133906001600160a01b038a16907f44c58d81365b66dd4b1a7f36c25aa97b8c71c361ee4937adc1a00000227db5dd90600090a35b60018401546040517fd7020d0a0000000000000000000000000000000000000000000000000000000081526001600160a01b0385169163d7020d0a91610fc59133918b9187916001600160801b0390911690600401614ce6565b600060405180830381600087803b158015610fdf57600080fd5b505af1158015610ff3573d6000803e3d6000fd5b50505050856001600160a01b0316336001600160a01b0316896001600160a01b03167f3115d1449a7b732c986cba18244e897a450f61e1bb8d589cd2e69e6c8924f9f7846040516110449190615102565b60405180910390a493505050505b9392505050565b6110616120ca565b61106a85612b90565b6040518060400160405280600281526020017f3738000000000000000000000000000000000000000000000000000000000000815250906110be5760405162461bcd60e51b81526004016105bc9190614edf565b506001600160a01b0385166000908152603560205260409081902090517f2b33897c000000000000000000000000000000000000000000000000000000008152736bcf608939dfe961fc46275db9deb09bafee973691632b33897c9161112f9190889088908890889060040161500f565b60006040518083038186803b15801561114757600080fd5b505af415801561115b573d6000803e3d6000fd5b5050505061116885612bc9565b5050505050565b600281565b61117c612071565b6001600160a01b038216600090815260356020526040812090806111a0338461223a565b9150915060008460028111156111b257fe5b336000908152603660205260409081902090517fa8695b1d00000000000000000000000000000000000000000000000000000000815291925073390df1e055a6c05f16d030d1ca2d9cedf21fd0f09163a8695b1d9161121c9188919088908890889060040161507f565b60006040518083038186803b15801561123457600080fd5b505af4158015611248573d6000803e3d6000fd5b505050506112558461233f565b600181600281111561126357fe5b1415611373576005840154604051632770a7eb60e21b81526001600160a01b0390911690639dc29fac9061129d9033908790600401614d17565b600060405180830381600087803b1580156112b757600080fd5b505af11580156112cb573d6000803e3d6000fd5b505050506006840154600185015460405163b3f1c93d60e01b81526001600160a01b039092169163b3f1c93d9161131b91339182918991600160801b90046001600160801b031690600401614ce6565b602060405180830381600087803b15801561133557600080fd5b505af1158015611349573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061136d9190614ba0565b506114a2565b600684015460018501546040517ff5298aca0000000000000000000000000000000000000000000000000000000081526001600160a01b039092169163f5298aca916113d79133918791600160801b9091046001600160801b031690600401614d30565b600060405180830381600087803b1580156113f157600080fd5b505af1158015611405573d6000803e3d6000fd5b505050506005840154600385015460405163b3f1c93d60e01b81526001600160a01b039092169163b3f1c93d9161144e913391829188916001600160801b031690600401614ce6565b602060405180830381600087803b15801561146857600080fd5b505af115801561147c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114a09190614ba0565b505b60048401546114c090859088906001600160a01b0316600080612419565b336001600160a01b0316866001600160a01b03167fea368a40e9570069bb8e6511d668293ad2e1f03b0d982431fd223de9f3b70ca6876040516115039190615102565b60405180910390a3505050505050565b61151b612071565b6001600160a01b038086166000818152603560209081526040918290208251610100810184529384523391840191909152848416918301919091526060820187905260808201869052600481015490921660a082015261ffff841660c0820152600160e082015261158b90612d15565b505050505050565b610623612071565b6115a36120ca565b6001600160a01b03909116600090815260356020526040902055565b6115c76120ca565b6039805460ff1916821515179081905560ff161561160d576040517f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e75290600090a1611637565b6040517fa45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d1693390600090a15b50565b600080600080600080611713876035603660008b6001600160a01b03166001600160a01b031681526020019081526020016000206040518060200160405290816000820154815250506037603854603460009054906101000a90046001600160a01b03166001600160a01b031663fca513a86040518163ffffffff1660e01b815260040160206040518083038186803b1580156116d657600080fd5b505afa1580156116ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061170e919061479e565b61322f565b9399509197509094509250905061172b868684613709565b935091939550919395565b61173e614587565b506001600160a01b031660009081526035602090815260409182902082519182019092529054815290565b600061177361373d565b60015490915060ff168061178a575061178a613742565b80611796575060005481115b6117d15760405162461bcd60e51b815260040180806020018281038252602e8152602001806151a4602e913960400191505060405180910390fd5b60015460ff161580156117f0576001805460ff19168117905560008290555b6034805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0385161790556109c4603a556009603b556080603c558015610d08576001805460ff19169055505050565b611845612071565b6001600160a01b038083166000908152603560205260408082206005810154600682015460048084015494516370a0823160e01b81529396928316959183169490921692909185916370a082319161189f918a9101614cd2565b60206040518083038186803b1580156118b757600080fd5b505afa1580156118cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ef9190614bbc565b6040517f548cad0900000000000000000000000000000000000000000000000000000000815290915073390df1e055a6c05f16d030d1ca2d9cedf21fd0f09063548cad099061194a9088908b9089908990899060040161500f565b60006040518083038186803b15801561196257600080fd5b505af4158015611976573d6000803e3d6000fd5b505050506119838561233f565b604051632770a7eb60e21b81526001600160a01b03851690639dc29fac906119b19089908590600401614d17565b600060405180830381600087803b1580156119cb57600080fd5b505af11580156119df573d6000803e3d6000fd5b505050600386015460405163b3f1c93d60e01b81526001600160a01b038716925063b3f1c93d91611a22918a91829187916001600160801b031690600401614ce6565b602060405180830381600087803b158015611a3c57600080fd5b505af1158015611a50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a749190614ba0565b50611a83858884600080612419565b856001600160a01b0316876001600160a01b03167f9f439ae0c81e41a04d3fdfe07aed54e6a179fb0db15be7702eb66fa8ef6f530060405160405180910390a350505050505050565b6001600160a01b038116600090815260356020526040812061077f90613748565b6060600060385467ffffffffffffffff81118015611b0a57600080fd5b50604051908082528060200260200182016040528015611b34578160200160208202803683370190505b50905060005b603854811015611b8d5760008181526037602052604090205482516001600160a01b0390911690839083908110611b6d57fe5b6001600160a01b0390921660209283029190910190910152600101611b3a565b50905090565b611b9b612071565b6001600160a01b03868116600090815260356020908152604091829020600401548251808401909352600283527f3633000000000000000000000000000000000000000000000000000000000000918301919091529091163314611c125760405162461bcd60e51b81526004016105bc9190614edf565b50611cce85603560366000896001600160a01b03166001600160a01b031681526020019081526020016000206037603854603460009054906101000a90046001600160a01b03166001600160a01b031663fca513a86040518163ffffffff1660e01b815260040160206040518083038186803b158015611c9157600080fd5b505afa158015611ca5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cc9919061479e565b6137a7565b6001600160a01b03868116600090815260356020526040902060070154600160a01b900460ff169085811690871614611dee57611d0b838561297e565b611d77576001600160a01b038616600090815260366020526040812090611d359082908490612aec565b866001600160a01b0316886001600160a01b03167f44c58d81365b66dd4b1a7f36c25aa97b8c71c361ee4937adc1a00000227db5dd60405160405180910390a3505b81158015611d8457508315155b15611dee576001600160a01b0385166000908152603660205260409020611dad81836001612aec565b856001600160a01b0316886001600160a01b03167e058a56ea94653cdf4f152d227ace22d4c00ad99e2a43f58cb7d9e3feb295f260405160405180910390a3505b50505050505050565b603a5490565b611e05612071565b6001600160a01b0384166000908152603560205260409081902090517f0eca322b00000000000000000000000000000000000000000000000000000000815273390df1e055a6c05f16d030d1ca2d9cedf21fd0f090630eca322b90611e7090849088906004016150b3565b60006040518083038186803b158015611e8857600080fd5b505af4158015611e9c573d6000803e3d6000fd5b5050505060048101546001600160a01b0316611eb78261233f565b611ec5828783886000612419565b611eda6001600160a01b038716338388612a5e565b60018201546040517f156e29f60000000000000000000000000000000000000000000000000000000081526000916001600160a01b0384169163156e29f691611f359189918b916001600160801b0390911690600401614d30565b602060405180830381600087803b158015611f4f57600080fd5b505af1158015611f63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f879190614ba0565b905080156120015760078301546001600160a01b0386166000908152603660205260409020611fc191600160a01b900460ff166001612aec565b846001600160a01b0316876001600160a01b03167e058a56ea94653cdf4f152d227ace22d4c00ad99e2a43f58cb7d9e3feb295f260405160405180910390a35b8361ffff16856001600160a01b0316886001600160a01b03167fde6857219544bb5b7746f48ed30be6386fefc61b2f864cacf559893bf50fd951338a60405161204b929190614d17565b60405180910390a450505050505050565b603c5490565b6034546001600160a01b031690565b60395460408051808201909152600281527f363400000000000000000000000000000000000000000000000000000000000060208201529060ff16156116375760405162461bcd60e51b81526004016105bc9190614edf565b603454604080517f85c858b1000000000000000000000000000000000000000000000000000000008152905133926001600160a01b0316916385c858b1916004808301926020929190829003018186803b15801561212757600080fd5b505afa15801561213b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061215f919061479e565b6001600160a01b0316146040518060400160405280600281526020017f3237000000000000000000000000000000000000000000000000000000000000815250906116375760405162461bcd60e51b81526004016105bc9190614edf565b600381015460009064ffffffffff600160801b90910481169042168114156121fb5750506001810154600160801b90046001600160801b0316610759565b60018301546002840154600091612232916001600160801b03600160801b9283900481169261222c92041685613839565b90613846565b949350505050565b6005810154604080516370a0823160e01b81526001600160a01b0385811660048301529151600093849316916370a08231916024808301926020929190829003018186803b15801561228b57600080fd5b505afa15801561229f573d6000803e3d6000fd5b505050506040513d60208110156122b557600080fd5b50516006840154604080516370a0823160e01b81526001600160a01b038881166004830152915191909216916370a08231916024808301926020929190829003018186803b15801561230657600080fd5b505afa15801561231a573d6000803e3d6000fd5b505050506040513d602081101561233057600080fd5b505190925090505b9250929050565b6006810154604080517fb1bf962d00000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163b1bf962d916004808301926020929190829003018186803b15801561239f57600080fd5b505afa1580156123b3573d6000803e3d6000fd5b505050506040513d60208110156123c957600080fd5b505160018301546003840154919250600160801b8082046001600160801b03908116939216910464ffffffffff16600080612407878786888761391a565b91509150611dee878787858588613b38565b61242161459a565b60058601546001600160a01b0316808252604080517ff731e9be000000000000000000000000000000000000000000000000000000008152815163f731e9be92600480840193919291829003018186803b15801561247e57600080fd5b505afa158015612492573d6000803e3d6000fd5b505050506040513d60408110156124a857600080fd5b50805160209182015160c08401526040808401919091526001880154600689015482517fb1bf962d000000000000000000000000000000000000000000000000000000008152925161256594600160801b9093046001600160801b0316936001600160a01b039092169263b1bf962d9260048082019391829003018186803b15801561253357600080fd5b505afa158015612547573d6000803e3d6000fd5b505050506040513d602081101561255d57600080fd5b505190613846565b60e082018190526007870154604083015160c08401516001600160a01b03909216926329db497d92899289928992899291906125a08f613d26565b6040518963ffffffff1660e01b815260040180896001600160a01b03168152602001886001600160a01b031681526020018781526020018681526020018581526020018481526020018381526020018281526020019850505050505050505060606040518083038186803b15801561261757600080fd5b505afa15801561262b573d6000803e3d6000fd5b505050506040513d606081101561264157600080fd5b50805160208083015160409384015160a08601526080850152606084018290528251808401909352600283527f3533000000000000000000000000000000000000000000000000000000000000908301526001600160801b0310156127245760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156126e95781810151838201526020016126d1565b50505050905090810190601f1680156127165780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50608081015160408051808201909152600281527f35350000000000000000000000000000000000000000000000000000000000006020820152906001600160801b0310156127b45760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156126e95781810151838201526020016126d1565b5060a081015160408051808201909152600281527f35340000000000000000000000000000000000000000000000000000000000006020820152906001600160801b0310156128445760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156126e95781810151838201526020016126d1565b5060608181015160028801805460808086015160038c0180547fffffffffffffffffffffffffffffffff000000000000000000000000000000009081166001600160801b038085169190911790925560a0808a015191909516828816178216600160801b82841681029190911790965560018e01546040805198895260208901949094528784019190915280821697870197909752939095049092169183019190915291516001600160a01b038816927f804c9b842b2748a22bb64b345453a3de7ca54a6ca45ce00d415894979e22897a928290030190a2505050505050565b600082820183811015611052576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600061105283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613d31565b604080518082019091526002815261373760f01b602082015260808310612a285760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156126e95781810151838201526020016126d1565b508160020281612a39576000612a3c565b60015b60ff16901b826002026001901b19846000015416178360000181905550505050565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052612ae6908590613d8b565b50505050565b604080518082019091526002815261373760f01b602082015260808310612b545760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156126e95781810151838201526020016126d1565b508160020260010181612b68576000612b6b565b60015b60ff16901b826002026001016001901b19846000015416178360000181905550505050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590612232575050151592915050565b603854603c5460408051808201909152600281527f36350000000000000000000000000000000000000000000000000000000000006020820152908210612c235760405162461bcd60e51b81526004016105bc9190614edf565b506001600160a01b038216600090815260356020526040812060070154600160a01b900460ff16151580612c8c57506000805260376020527fa0a618d80eda9243166be83cb7421d97e9dab6ddddd3c70ac7a6b4440256e8e7546001600160a01b038481169116145b905080610d0857506001600160a01b0391909116600081815260356020908152604080832060070180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16600160a01b60ff88160217905584835260379091529020805473ffffffffffffffffffffffffffffffffffffffff19169091179055600101603855565b80516001600160a01b03908116600090815260356020908152604080832081860151851684526036835281842060345483517ffca513a80000000000000000000000000000000000000000000000000000000081529351929691959491169263fca513a89260048083019392829003018186803b158015612d9557600080fd5b505afa158015612da9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dcd919061479e565b90506000612e76612ddd85613f42565b600a0a612e708760600151856001600160a01b031663b62cad698a600001516040518263ffffffff1660e01b8152600401612e189190614cd2565b602060405180830381600087803b158015612e3257600080fd5b505af1158015612e46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e6a9190614bbc565b90613f4c565b90613fa5565b905073390df1e055a6c05f16d030d1ca2d9cedf21fd0f063721a92f986600001518688604001518960600151868b60800151603a5460358c60376038548e6040518d63ffffffff1660e01b8152600401612edb9c9b9a99989796959493929190614db7565b60006040518083038186803b158015612ef357600080fd5b505af4158015612f07573d6000803e3d6000fd5b50505050612f148461233f565b600080600187608001516002811115612f2957fe5b6002811115612f3457fe5b1415612fe9576003860154600587015460208901516040808b015160608c0151915163b3f1c93d60e01b81526001600160801b0390951696506001600160a01b039093169363b3f1c93d93612f90939290918890600401614d8e565b602060405180830381600087803b158015612faa57600080fd5b505af1158015612fbe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fe29190614ba0565b9050613098565b600686015460208801516040808a015160608b015160018b0154925163b3f1c93d60e01b81526001600160a01b039095169463b3f1c93d946130439490939291600160801b9091046001600160801b031690600401614ce6565b602060405180830381600087803b15801561305d57600080fd5b505af1158015613071573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130959190614ba0565b90505b80156130ba5760078601546130ba908690600160a01b900460ff1660016129c0565b6130e987600001518860a0015160008a60e001516130d95760006130df565b8a606001515b8a93929190612419565b8660e0015115613181578660a001516001600160a01b0316634efecaa5886020015189606001516040518363ffffffff1660e01b815260040161312d929190614d17565b602060405180830381600087803b15801561314757600080fd5b505af115801561315b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061317f9190614bbc565b505b8660c0015161ffff1687604001516001600160a01b031688600001516001600160a01b03167fc6a898309e823ee50bac64e45ca8adba6690e99e7841c45d754e2a38e9019d9b8a602001518b606001518c60800151600160028111156131e357fe5b8e6080015160028111156131f357fe5b60028111156131fe57fe5b1461321d5760028d0154600160801b90046001600160801b031661321f565b885b60405161204b9493929190614e61565b600080600080600061323f6145e8565b6132488a613fe7565b156132665760008060008060001995509550955095509550506136fb565b600060e08201525b878160e00151101561365a5760e081015161328a908b90613fec565b6132935761364a565b60e0810151600090815260208a81526040808320546001600160a01b03166101e085018190528352908d905290206132ca8161406b565b506080860181905260c08601929092525060a0840191909152600a0a60208301526101e08201516040517fb3596f070000000000000000000000000000000000000000000000000000000081526001600160a01b038a169163b3596f07916133359190600401614cd2565b60206040518083038186803b15801561334d57600080fd5b505afa158015613361573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133859190614bbc565b825260c0820151158015906133a5575060e08201516133a5908c90614096565b156134c3578060040160009054906101000a90046001600160a01b03166001600160a01b03166370a082318e6040518263ffffffff1660e01b81526004016133ed9190614cd2565b60206040518083038186803b15801561340557600080fd5b505afa158015613419573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061343d9190614bbc565b604083018190526020830151835160009261345c9291612e7091613f4c565b61012084015190915061346f9082612924565b61012084015260a083015161349590613489908390613f4c565b61016085015190612924565b61016084015260c08301516134bb906134af908390613f4c565b61018085015190612924565b610180840152505b60e08201516134d3908c9061411c565b15613648578060050160009054906101000a90046001600160a01b03166001600160a01b03166370a082318e6040518263ffffffff1660e01b815260040161351b9190614cd2565b60206040518083038186803b15801561353357600080fd5b505afa158015613547573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061356b9190614bbc565b8260600181815250506136158160060160009054906101000a90046001600160a01b03166001600160a01b03166370a082318f6040518263ffffffff1660e01b81526004016135ba9190614cd2565b60206040518083038186803b1580156135d257600080fd5b505afa1580156135e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061360a9190614bbc565b606084015190612924565b6060830181905260208301518351613641926136359291612e7091613f4c565b61014084015190612924565b6101408301525b505b60e081018051600101905261326e565b60008161012001511161366e576000613683565b61012081015161016082015161368391613fa5565b61016082015261012081015161369a5760006136af565b6101208101516101808201516136af91613fa5565b61018082018190526101208201516101408301516136cc9261419b565b610100820181905261012082015161014083015161016084015161018090940151919850965091945090925090505b965096509650965096915050565b60008061371685846141bf565b90508381101561372a576000915050611052565b613734818561297e565b95945050505050565b600290565b303b1590565b600381015460009064ffffffffff600160801b909104811690421681141561377f57505060018101546001600160801b0316610759565b60018301546002840154600091612232916001600160801b039182169161222c911685614279565b6040805160208101909152845481526000906137c9908890889087878761322f565b945050505050670de0b6b3a76400008110156040518060400160405280600181526020017f36000000000000000000000000000000000000000000000000000000000000008152509061382f5760405162461bcd60e51b81526004016105bc9190614edf565b5050505050505050565b60006110528383426142b7565b6000821580613853575081155b156138605750600061077f565b817ffffffffffffffffffffffffffffffffffffffffffe6268e1b017bfe18bffffff8161388957fe5b0483111560405180604001604052806002815260200161068760f31b815250906138f45760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156126e95781810151838201526020016126d1565b506b033b2e3c9fd0803ce80000006002815b04838502018161391257fe5b049392505050565b600285015460009081906001600160801b031685858215613af25760006139418488614279565b905061394d818a613846565b60408051808201909152600281527f353100000000000000000000000000000000000000000000000000000000000060208201529093506001600160801b038411156139da5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156126e95781810151838201526020016126d1565b5060018b0180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166001600160801b0385161790558915613af05760028b0154600090613a3890600160801b90046001600160801b031689613839565b9050613a44818a613846565b60408051808201909152600281527f353200000000000000000000000000000000000000000000000000000000000060208201529093506001600160801b03841115613ad15760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156126e95781810151838201526020016126d1565b505060018b0180546001600160801b03808516600160801b0291161790555b505b60039990990180547fffffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffff16600160801b4264ffffffffff1602179055989650505050505050565b613b40614682565b613b4987613d26565b6101208201819052613b5b575061158b565b8660050160009054906101000a90046001600160a01b03166001600160a01b031663797743386040518163ffffffff1660e01b815260040160806040518083038186803b158015613bab57600080fd5b505afa158015613bbf573d6000803e3d6000fd5b505050506040513d6080811015613bd557600080fd5b508051602080830151604084015160609094015164ffffffffff1661014086015260a085019390935291835290820152613c0f8686613846565b6080820152613c1e8684613846565b606082015260a0810151610140820151613c40919064ffffffffff85166142b7565b60c082018190526020820151613c5591613846565b60408201819052608082015182516060840151613c7a9392610a009290918391612924565b60e08201819052610120820151613c9191906141bf565b610100820181905215611dee57600480880154610100830151604080517f7df5bd3b0000000000000000000000000000000000000000000000000000000081529384019190915260248301879052516001600160a01b0390911691637df5bd3b91604480830192600092919082900301818387803b158015613d1257600080fd5b505af1158015610623573d6000803e3d6000fd5b5460401c61ffff1690565b60008184841115613d835760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156126e95781810151838201526020016126d1565b505050900390565b613d9d826001600160a01b0316612b90565b613dee576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b600080836001600160a01b0316836040518082805190602001908083835b60208310613e2b5780518252601f199092019160209182019101613e0c565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613e8d576040519150601f19603f3d011682016040523d82523d6000602084013e613e92565b606091505b509150915081613ee9576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b805115612ae657808060200190516020811015613f0557600080fd5b5051612ae65760405162461bcd60e51b815260040180806020018281038252602a8152602001806151d2602a913960400191505060405180910390fd5b5460301c60ff1690565b600082613f5b5750600061077f565b82820282848281613f6857fe5b04146110525760405162461bcd60e51b81526004018080602001828103825260218152602001806151836021913960400191505060405180910390fd5b600061105283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061438d565b511590565b60006080821060405180604001604052806002815260200161373760f01b815250906140595760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156126e95781810151838201526020016126d1565b50509051600360029092021c16151590565b5461ffff80821692601083901c821692602081901c831692603082901c60ff169260409290921c1690565b60006080821060405180604001604052806002815260200161373760f01b815250906141035760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156126e95781810151838201526020016126d1565b5050815160016002830281019190911c16151592915050565b60006080821060405180604001604052806002815260200161373760f01b815250906141895760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156126e95781810151838201526020016126d1565b50509051600160029092021c16151590565b6000826141ab5750600019611052565b612232836141b986856141bf565b906143f2565b60008215806141cc575081155b156141d95750600061077f565b817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec778161420257fe5b0483111560405180604001604052806002815260200161068760f31b8152509061426d5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156126e95781810151838201526020016126d1565b50612710600281613906565b60008061428d4264ffffffffff851661297e565b905061223261429a61450c565b6301e133806142a98785613f4c565b816142b057fe5b0490612924565b6000806142cb8364ffffffffff861661297e565b9050806142e2576142da61450c565b915050611052565b60001981016000600283116142f85760006142fd565b600283035b90506301e13380870460006143128280613846565b905060006143208284613846565b90506000600261433484612e6a8a8a613f4c565b8161433b57fe5b0490506000600661435284612e6a89818d8d613f4c565b8161435957fe5b04905061437d81614377848161436f8a8e613f4c565b61437761450c565b90612924565b9c9b505050505050505050505050565b600081836143dc5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156126e95781810151838201526020016126d1565b5060008385816143e857fe5b0495945050505050565b60408051808201909152600281527f35300000000000000000000000000000000000000000000000000000000000006020820152600090826144755760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156126e95781810151838201526020016126d1565b5060408051808201909152600280825261068760f31b6020830152830490670de0b6b3a76400008219048511156144ed5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156126e95781810151838201526020016126d1565b508281670de0b6b3a76400008602018161450357fe5b04949350505050565b6b033b2e3c9fd0803ce800000090565b604051806101800160405280614530614587565b815260006020820181905260408201819052606082018190526080820181905260a0820181905260c0820181905260e082018190526101008201819052610120820181905261014082018190526101609091015290565b6040518060200160405280600081525090565b60405180610100016040528060006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b604051806102400160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160001515815260200160006001600160a01b031681526020016000151581526020016000151581525090565b60405180610160016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600064ffffffffff1681525090565b80356107598161515f565b60008083601f8401126146ff578081fd5b50813567ffffffffffffffff811115614716578182fd5b602083019150836020808302850101111561233857600080fd5b60008083601f840112614741578182fd5b50813567ffffffffffffffff811115614758578182fd5b60208301915083602082850101111561233857600080fd5b803561ffff8116811461075957600080fd5b600060208284031215614793578081fd5b81356110528161515f565b6000602082840312156147af578081fd5b81516110528161515f565b600080604083850312156147cc578081fd5b82356147d78161515f565b915060208301356147e78161515f565b809150509250929050565b600080600080600060a08688031215614809578081fd5b85356148148161515f565b945060208601356148248161515f565b935060408601356148348161515f565b925060608601356148448161515f565b915060808601356148548161515f565b809150509295509295909350565b600080600080600060a08688031215614879578081fd5b85356148848161515f565b945060208601356148948161515f565b935060408601356148a48161515f565b925060608601359150608086013561485481615174565b60008060008060008060c087890312156148d3578081fd5b86356148de8161515f565b955060208701356148ee8161515f565b945060408701356148fe8161515f565b959894975094956060810135955060808101359460a0909101359350915050565b600080600080600080600080600080600060e08c8e03121561493f578485fd5b6149488c6146e3565b9a5067ffffffffffffffff8060208e01351115614963578586fd5b6149738e60208f01358f016146ee565b909b50995060408d0135811015614988578586fd5b6149988e60408f01358f016146ee565b909950975060608d01358110156149ad578586fd5b6149bd8e60608f01358f016146ee565b90975095506149ce60808e016146e3565b94508060a08e013511156149e0578384fd5b506149f18d60a08e01358e01614730565b9093509150614a0260c08d01614770565b90509295989b509295989b9093969950565b60008060408385031215614a26578081fd5b8235614a318161515f565b915060208301356147e781615174565b60008060408385031215614a53578182fd5b8235614a5e8161515f565b946020939093013593505050565b600080600060608486031215614a80578081fd5b8335614a8b8161515f565b9250602084013591506040840135614aa28161515f565b809150509250925092565b60008060008060808587031215614ac2578182fd5b8435614acd8161515f565b9350602085013592506040850135614ae48161515f565b9150614af260608601614770565b905092959194509250565b60008060008060808587031215614b12578182fd5b8435614b1d8161515f565b935060208501359250604085013591506060850135614b3b8161515f565b939692955090935050565b600080600080600060a08688031215614b5d578283fd5b8535614b688161515f565b9450602086013593506040860135925061484460608701614770565b600060208284031215614b95578081fd5b813561105281615174565b600060208284031215614bb1578081fd5b815161105281615174565b600060208284031215614bcd578081fd5b5051919050565b60008060408385031215614be6578182fd5b82519150602083015167ffffffffffffffff80821115614c04578283fd5b818501915085601f830112614c17578283fd5b815181811115614c2357fe5b6040516020601f19601f8401168201018181108482111715614c4157fe5b604052818152838201602001881015614c58578485fd5b614c69826020830160208701615133565b809450505050509250929050565b6001600160a01b03169052565b60038110614c8e57fe5b9052565b519052565b6001600160801b03169052565b64ffffffffff169052565b60ff169052565b60008251614cc8818460208701615133565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03948516815292909316602083015260408201526001600160801b03909116606082015260800190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0393909316835260208301919091526001600160801b0316604082015260600190565b6001600160a01b03958616815293851660208501529190931660408301526060820192909252901515608082015260a00190565b6001600160a01b0394851681529290931660208301526040820152606081019190915260800190565b6001600160a01b039c8d168152602081019b909b52988b1660408b015260608a0197909752608089019590955260a088019390935260c087019190915260e08601526101008501526101208401526101408301529091166101608201526101800190565b6001600160a01b039889168152602081019790975260408701959095526060860193909352608085019190915260a084015260c083015290911660e08201526101000190565b6001600160a01b0394909416845260208401929092526040830152606082015260800190565b6020808252825182820181905260009190848201906040850190845b81811015614ec85783516001600160a01b031683529284019291840191600101614ea3565b50909695505050505050565b901515815260200190565b6000602082528251806020840152614efe816040850160208701615133565b601f01601f19169190910160400192915050565b9051815260200190565b600061018082019050614f30828451614c92565b6020830151614f426020840182614c97565b506040830151614f556040840182614c97565b506060830151614f686060840182614c97565b506080830151614f7b6080840182614c97565b5060a0830151614f8e60a0840182614c97565b5060c0830151614fa160c0840182614ca4565b5060e0830151614fb460e0840182614c77565b5061010080840151614fc882850182614c77565b505061012080840151614fdd82850182614c77565b505061014080840151614ff282850182614c77565b50506101608084015161500782850182614caf565b505092915050565b9485526001600160a01b03938416602086015291831660408501528216606084015216608082015260a00190565b9788526001600160a01b03968716602089015294151560408801526060870193909352608086019190915260a085015260c08401521660e08201526101000190565b600060a0820190508682528560208301528460408301528360608301526150a96080830184614c84565b9695505050505050565b918252602082015260400190565b8681526020810186905260c081016150dc6040830187614c84565b6001600160a01b03851660608301528360808301528260a0830152979650505050505050565b90815260200190565b958652602086019490945260408501929092526060840152608083015260a082015260c00190565b60005b8381101561514e578181015183820152602001615136565b83811115612ae65750506000910152565b6001600160a01b038116811461163757600080fd5b801515811461163757600080fdfe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a65645361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a264697066735822122051027b646bf91a184820b48f34e313060f29903f8d03bde9f23aa36a85a6c9ae64736f6c63430007060033

    Deployed Bytecode

    0x608060405234801561001057600080fd5b50600436106101c35760003560e01c8063ab9c4b5d116100f9578063d15e005311610097578063e82fec2f11610071578063e82fec2f146103c2578063e8eda9df146103ca578063f8119d51146103dd578063fe65acfe146103e5576101c3565b8063d15e005314610387578063d1946dbc1461039a578063d5ed3933146103af576101c3565b8063bf92857c116100d3578063bf92857c14610329578063c44b11f71461034e578063c4d66de814610361578063cd11238214610374576101c3565b8063ab9c4b5d146102f0578063b8d2927614610303578063bedb86fb14610316576101c3565b80635a3b74b9116101665780637a708e92116101405780637a708e92146102af5780638afaff02146102c257806394ba89a2146102ca578063a415bcad146102dd576101c3565b80635a3b74b9146102745780635c975abb1461028757806369328dec1461029c576101c3565b806335ea6a75116101a257806335ea6a751461020e578063386497fd1461022e5780634417a58314610241578063573ade8114610261576101c3565b8062a718a9146101c8578063074b2e43146101dd5780631d2118f9146101fb575b600080fd5b6101db6101d6366004614862565b6103fa565b005b6101e5610630565b6040516101f29190615102565b60405180910390f35b6101db6102093660046147ba565b610636565b61022161021c366004614782565b61067c565b6040516101f29190614f1c565b6101e561023c366004614782565b61075e565b61025461024f366004614782565b610785565b6040516101f29190614f12565b6101e561026f366004614afd565b6107b8565b6101db610282366004614a14565b610b2f565b61028f610d0d565b6040516101f29190614ed4565b6101e56102aa366004614a6c565b610d16565b6101db6102bd3660046147f2565b611059565b6101e561116f565b6101db6102d8366004614a41565b611174565b6101db6102eb366004614b46565b611513565b6101db6102fe36600461491f565b611593565b6101db610311366004614a41565b61159b565b6101db610324366004614b84565b6115bf565b61033c610337366004614782565b61163a565b6040516101f29695949392919061510b565b61025461035c366004614782565b611736565b6101db61036f366004614782565b611769565b6101db6103823660046147ba565b61183d565b6101e5610395366004614782565b611acc565b6103a2611aed565b6040516101f29190614e87565b6101db6103bd3660046148bb565b611b93565b6101e5611df7565b6101db6103d8366004614aad565b611dfd565b6101e561205c565b6103ed612062565b6040516101f29190614cd2565b610402612071565b603454604080517f712d917100000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163712d9171916004808301926020929190829003018186803b15801561046057600080fd5b505afa158015610474573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610498919061479e565b9050600080826001600160a01b031688888888886040516024016104c0959493929190614d5a565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ea718a900000000000000000000000000000000000000000000000000000000179052516105229190614cb6565b600060405180830381855af49150503d806000811461055d576040519150601f19603f3d011682016040523d82523d6000602084013e610562565b606091505b5091509150816040518060400160405280600281526020017f3233000000000000000000000000000000000000000000000000000000000000815250906105c55760405162461bcd60e51b81526004016105bc9190614edf565b60405180910390fd5b50600080828060200190518101906105dd9190614bd4565b9150915081600014816040516020016105f69190614cb6565b604051602081830303815290604052906106235760405162461bcd60e51b81526004016105bc9190614edf565b5050505050505050505050565b603b5490565b61063e6120ca565b6001600160a01b039182166000908152603560205260409020600701805473ffffffffffffffffffffffffffffffffffffffff191691909216179055565b61068461451c565b506001600160a01b0381811660009081526035602090815260409182902082516101a08101845281546101808201908152815260018201546001600160801b0380821694830194909452600160801b908190048416948201949094526002820154808416606083015284900483166080820152600382015492831660a08201529290910464ffffffffff1660c08301526004810154831660e0830152600581015483166101008301526006810154831661012083015260070154918216610140820152600160a01b90910460ff166101608201525b919050565b6001600160a01b038116600090815260356020526040812061077f906121bd565b92915050565b61078d614587565b506001600160a01b031660009081526036602090815260409182902082519182019092529054815290565b60006107c2612071565b6001600160a01b038516600090815260356020526040812090806107e6858461223a565b9150915060008660028111156107f857fe5b6040517ffa0c214900000000000000000000000000000000000000000000000000000000815290915073390df1e055a6c05f16d030d1ca2d9cedf21fd0f09063fa0c2149906108559087908c9086908c908a908a906004016150c1565b60006040518083038186803b15801561086d57600080fd5b505af4158015610881573d6000803e3d6000fd5b5060009250600191506108919050565b82600281111561089d57fe5b146108a857826108aa565b835b9050808910156108b75750875b6108c08561233f565b60018260028111156108ce57fe5b141561093f576005850154604051632770a7eb60e21b81526001600160a01b0390911690639dc29fac90610908908a908590600401614d17565b600060405180830381600087803b15801561092257600080fd5b505af1158015610936573d6000803e3d6000fd5b505050506109d6565b600685015460018601546040517ff5298aca0000000000000000000000000000000000000000000000000000000081526001600160a01b039092169163f5298aca916109a3918b918691600160801b9091046001600160801b031690600401614d30565b600060405180830381600087803b1580156109bd57600080fd5b505af11580156109d1573d6000803e3d6000fd5b505050505b60048501546001600160a01b03166109f2868c83856000612419565b610a0682610a008787612924565b9061297e565b610a3e5760078601546001600160a01b0389166000908152603660205260408120610a3e929091600160a01b90910460ff16906129c0565b610a536001600160a01b038c16338385612a5e565b6040517f88dd91a10000000000000000000000000000000000000000000000000000000081526001600160a01b038216906388dd91a190610a9a9033908690600401614d17565b600060405180830381600087803b158015610ab457600080fd5b505af1158015610ac8573d6000803e3d6000fd5b50505050336001600160a01b0316886001600160a01b03168c6001600160a01b03167f4cdde6e09bb755c9a5589ebaec640bbfedff1362d4b255ebf8339782b9942faa85604051610b199190615102565b60405180910390a4509998505050505050505050565b610b37612071565b6001600160a01b038083166000908152603560208181526040808420338552603683529381902060385460345483517ffca513a80000000000000000000000000000000000000000000000000000000081529351969773390df1e055a6c05f16d030d1ca2d9cedf21fd0f097635fa297e5978a978d978d9792969295603795939493169263fca513a892600480840193919291829003018186803b158015610bde57600080fd5b505afa158015610bf2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c16919061479e565b6040518963ffffffff1660e01b8152600401610c3998979695949392919061503d565b60006040518083038186803b158015610c5157600080fd5b505af4158015610c65573d6000803e3d6000fd5b505050506007810154336000908152603660205260409020610c9191600160a01b900460ff1684612aec565b8115610cd15760405133906001600160a01b038516907e058a56ea94653cdf4f152d227ace22d4c00ad99e2a43f58cb7d9e3feb295f290600090a3610d08565b60405133906001600160a01b038516907f44c58d81365b66dd4b1a7f36c25aa97b8c71c361ee4937adc1a00000227db5dd90600090a35b505050565b60395460ff1690565b6000610d20612071565b6001600160a01b0380851660009081526035602052604080822060048082015492516370a0823160e01b8152919492909216929183916370a0823191610d6891339101614cd2565b60206040518083038186803b158015610d8057600080fd5b505afa158015610d94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610db89190614bbc565b905085600019811415610dc85750805b73390df1e055a6c05f16d030d1ca2d9cedf21fd0f063d09db04a898385603560366000336001600160a01b03166001600160a01b031681526020019081526020016000206037603854603460009054906101000a90046001600160a01b03166001600160a01b031663fca513a86040518163ffffffff1660e01b815260040160206040518083038186803b158015610e5f57600080fd5b505afa158015610e73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e97919061479e565b6040518963ffffffff1660e01b8152600401610eba989796959493929190614e1b565b60006040518083038186803b158015610ed257600080fd5b505af4158015610ee6573d6000803e3d6000fd5b50505050610ef38461233f565b610f01848985600085612419565b81811415610f6b576007840154336000908152603660205260408120610f34929091600160a01b90910460ff1690612aec565b60405133906001600160a01b038a16907f44c58d81365b66dd4b1a7f36c25aa97b8c71c361ee4937adc1a00000227db5dd90600090a35b60018401546040517fd7020d0a0000000000000000000000000000000000000000000000000000000081526001600160a01b0385169163d7020d0a91610fc59133918b9187916001600160801b0390911690600401614ce6565b600060405180830381600087803b158015610fdf57600080fd5b505af1158015610ff3573d6000803e3d6000fd5b50505050856001600160a01b0316336001600160a01b0316896001600160a01b03167f3115d1449a7b732c986cba18244e897a450f61e1bb8d589cd2e69e6c8924f9f7846040516110449190615102565b60405180910390a493505050505b9392505050565b6110616120ca565b61106a85612b90565b6040518060400160405280600281526020017f3738000000000000000000000000000000000000000000000000000000000000815250906110be5760405162461bcd60e51b81526004016105bc9190614edf565b506001600160a01b0385166000908152603560205260409081902090517f2b33897c000000000000000000000000000000000000000000000000000000008152736bcf608939dfe961fc46275db9deb09bafee973691632b33897c9161112f9190889088908890889060040161500f565b60006040518083038186803b15801561114757600080fd5b505af415801561115b573d6000803e3d6000fd5b5050505061116885612bc9565b5050505050565b600281565b61117c612071565b6001600160a01b038216600090815260356020526040812090806111a0338461223a565b9150915060008460028111156111b257fe5b336000908152603660205260409081902090517fa8695b1d00000000000000000000000000000000000000000000000000000000815291925073390df1e055a6c05f16d030d1ca2d9cedf21fd0f09163a8695b1d9161121c9188919088908890889060040161507f565b60006040518083038186803b15801561123457600080fd5b505af4158015611248573d6000803e3d6000fd5b505050506112558461233f565b600181600281111561126357fe5b1415611373576005840154604051632770a7eb60e21b81526001600160a01b0390911690639dc29fac9061129d9033908790600401614d17565b600060405180830381600087803b1580156112b757600080fd5b505af11580156112cb573d6000803e3d6000fd5b505050506006840154600185015460405163b3f1c93d60e01b81526001600160a01b039092169163b3f1c93d9161131b91339182918991600160801b90046001600160801b031690600401614ce6565b602060405180830381600087803b15801561133557600080fd5b505af1158015611349573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061136d9190614ba0565b506114a2565b600684015460018501546040517ff5298aca0000000000000000000000000000000000000000000000000000000081526001600160a01b039092169163f5298aca916113d79133918791600160801b9091046001600160801b031690600401614d30565b600060405180830381600087803b1580156113f157600080fd5b505af1158015611405573d6000803e3d6000fd5b505050506005840154600385015460405163b3f1c93d60e01b81526001600160a01b039092169163b3f1c93d9161144e913391829188916001600160801b031690600401614ce6565b602060405180830381600087803b15801561146857600080fd5b505af115801561147c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114a09190614ba0565b505b60048401546114c090859088906001600160a01b0316600080612419565b336001600160a01b0316866001600160a01b03167fea368a40e9570069bb8e6511d668293ad2e1f03b0d982431fd223de9f3b70ca6876040516115039190615102565b60405180910390a3505050505050565b61151b612071565b6001600160a01b038086166000818152603560209081526040918290208251610100810184529384523391840191909152848416918301919091526060820187905260808201869052600481015490921660a082015261ffff841660c0820152600160e082015261158b90612d15565b505050505050565b610623612071565b6115a36120ca565b6001600160a01b03909116600090815260356020526040902055565b6115c76120ca565b6039805460ff1916821515179081905560ff161561160d576040517f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e75290600090a1611637565b6040517fa45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d1693390600090a15b50565b600080600080600080611713876035603660008b6001600160a01b03166001600160a01b031681526020019081526020016000206040518060200160405290816000820154815250506037603854603460009054906101000a90046001600160a01b03166001600160a01b031663fca513a86040518163ffffffff1660e01b815260040160206040518083038186803b1580156116d657600080fd5b505afa1580156116ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061170e919061479e565b61322f565b9399509197509094509250905061172b868684613709565b935091939550919395565b61173e614587565b506001600160a01b031660009081526035602090815260409182902082519182019092529054815290565b600061177361373d565b60015490915060ff168061178a575061178a613742565b80611796575060005481115b6117d15760405162461bcd60e51b815260040180806020018281038252602e8152602001806151a4602e913960400191505060405180910390fd5b60015460ff161580156117f0576001805460ff19168117905560008290555b6034805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0385161790556109c4603a556009603b556080603c558015610d08576001805460ff19169055505050565b611845612071565b6001600160a01b038083166000908152603560205260408082206005810154600682015460048084015494516370a0823160e01b81529396928316959183169490921692909185916370a082319161189f918a9101614cd2565b60206040518083038186803b1580156118b757600080fd5b505afa1580156118cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ef9190614bbc565b6040517f548cad0900000000000000000000000000000000000000000000000000000000815290915073390df1e055a6c05f16d030d1ca2d9cedf21fd0f09063548cad099061194a9088908b9089908990899060040161500f565b60006040518083038186803b15801561196257600080fd5b505af4158015611976573d6000803e3d6000fd5b505050506119838561233f565b604051632770a7eb60e21b81526001600160a01b03851690639dc29fac906119b19089908590600401614d17565b600060405180830381600087803b1580156119cb57600080fd5b505af11580156119df573d6000803e3d6000fd5b505050600386015460405163b3f1c93d60e01b81526001600160a01b038716925063b3f1c93d91611a22918a91829187916001600160801b031690600401614ce6565b602060405180830381600087803b158015611a3c57600080fd5b505af1158015611a50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a749190614ba0565b50611a83858884600080612419565b856001600160a01b0316876001600160a01b03167f9f439ae0c81e41a04d3fdfe07aed54e6a179fb0db15be7702eb66fa8ef6f530060405160405180910390a350505050505050565b6001600160a01b038116600090815260356020526040812061077f90613748565b6060600060385467ffffffffffffffff81118015611b0a57600080fd5b50604051908082528060200260200182016040528015611b34578160200160208202803683370190505b50905060005b603854811015611b8d5760008181526037602052604090205482516001600160a01b0390911690839083908110611b6d57fe5b6001600160a01b0390921660209283029190910190910152600101611b3a565b50905090565b611b9b612071565b6001600160a01b03868116600090815260356020908152604091829020600401548251808401909352600283527f3633000000000000000000000000000000000000000000000000000000000000918301919091529091163314611c125760405162461bcd60e51b81526004016105bc9190614edf565b50611cce85603560366000896001600160a01b03166001600160a01b031681526020019081526020016000206037603854603460009054906101000a90046001600160a01b03166001600160a01b031663fca513a86040518163ffffffff1660e01b815260040160206040518083038186803b158015611c9157600080fd5b505afa158015611ca5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cc9919061479e565b6137a7565b6001600160a01b03868116600090815260356020526040902060070154600160a01b900460ff169085811690871614611dee57611d0b838561297e565b611d77576001600160a01b038616600090815260366020526040812090611d359082908490612aec565b866001600160a01b0316886001600160a01b03167f44c58d81365b66dd4b1a7f36c25aa97b8c71c361ee4937adc1a00000227db5dd60405160405180910390a3505b81158015611d8457508315155b15611dee576001600160a01b0385166000908152603660205260409020611dad81836001612aec565b856001600160a01b0316886001600160a01b03167e058a56ea94653cdf4f152d227ace22d4c00ad99e2a43f58cb7d9e3feb295f260405160405180910390a3505b50505050505050565b603a5490565b611e05612071565b6001600160a01b0384166000908152603560205260409081902090517f0eca322b00000000000000000000000000000000000000000000000000000000815273390df1e055a6c05f16d030d1ca2d9cedf21fd0f090630eca322b90611e7090849088906004016150b3565b60006040518083038186803b158015611e8857600080fd5b505af4158015611e9c573d6000803e3d6000fd5b5050505060048101546001600160a01b0316611eb78261233f565b611ec5828783886000612419565b611eda6001600160a01b038716338388612a5e565b60018201546040517f156e29f60000000000000000000000000000000000000000000000000000000081526000916001600160a01b0384169163156e29f691611f359189918b916001600160801b0390911690600401614d30565b602060405180830381600087803b158015611f4f57600080fd5b505af1158015611f63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f879190614ba0565b905080156120015760078301546001600160a01b0386166000908152603660205260409020611fc191600160a01b900460ff166001612aec565b846001600160a01b0316876001600160a01b03167e058a56ea94653cdf4f152d227ace22d4c00ad99e2a43f58cb7d9e3feb295f260405160405180910390a35b8361ffff16856001600160a01b0316886001600160a01b03167fde6857219544bb5b7746f48ed30be6386fefc61b2f864cacf559893bf50fd951338a60405161204b929190614d17565b60405180910390a450505050505050565b603c5490565b6034546001600160a01b031690565b60395460408051808201909152600281527f363400000000000000000000000000000000000000000000000000000000000060208201529060ff16156116375760405162461bcd60e51b81526004016105bc9190614edf565b603454604080517f85c858b1000000000000000000000000000000000000000000000000000000008152905133926001600160a01b0316916385c858b1916004808301926020929190829003018186803b15801561212757600080fd5b505afa15801561213b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061215f919061479e565b6001600160a01b0316146040518060400160405280600281526020017f3237000000000000000000000000000000000000000000000000000000000000815250906116375760405162461bcd60e51b81526004016105bc9190614edf565b600381015460009064ffffffffff600160801b90910481169042168114156121fb5750506001810154600160801b90046001600160801b0316610759565b60018301546002840154600091612232916001600160801b03600160801b9283900481169261222c92041685613839565b90613846565b949350505050565b6005810154604080516370a0823160e01b81526001600160a01b0385811660048301529151600093849316916370a08231916024808301926020929190829003018186803b15801561228b57600080fd5b505afa15801561229f573d6000803e3d6000fd5b505050506040513d60208110156122b557600080fd5b50516006840154604080516370a0823160e01b81526001600160a01b038881166004830152915191909216916370a08231916024808301926020929190829003018186803b15801561230657600080fd5b505afa15801561231a573d6000803e3d6000fd5b505050506040513d602081101561233057600080fd5b505190925090505b9250929050565b6006810154604080517fb1bf962d00000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163b1bf962d916004808301926020929190829003018186803b15801561239f57600080fd5b505afa1580156123b3573d6000803e3d6000fd5b505050506040513d60208110156123c957600080fd5b505160018301546003840154919250600160801b8082046001600160801b03908116939216910464ffffffffff16600080612407878786888761391a565b91509150611dee878787858588613b38565b61242161459a565b60058601546001600160a01b0316808252604080517ff731e9be000000000000000000000000000000000000000000000000000000008152815163f731e9be92600480840193919291829003018186803b15801561247e57600080fd5b505afa158015612492573d6000803e3d6000fd5b505050506040513d60408110156124a857600080fd5b50805160209182015160c08401526040808401919091526001880154600689015482517fb1bf962d000000000000000000000000000000000000000000000000000000008152925161256594600160801b9093046001600160801b0316936001600160a01b039092169263b1bf962d9260048082019391829003018186803b15801561253357600080fd5b505afa158015612547573d6000803e3d6000fd5b505050506040513d602081101561255d57600080fd5b505190613846565b60e082018190526007870154604083015160c08401516001600160a01b03909216926329db497d92899289928992899291906125a08f613d26565b6040518963ffffffff1660e01b815260040180896001600160a01b03168152602001886001600160a01b031681526020018781526020018681526020018581526020018481526020018381526020018281526020019850505050505050505060606040518083038186803b15801561261757600080fd5b505afa15801561262b573d6000803e3d6000fd5b505050506040513d606081101561264157600080fd5b50805160208083015160409384015160a08601526080850152606084018290528251808401909352600283527f3533000000000000000000000000000000000000000000000000000000000000908301526001600160801b0310156127245760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156126e95781810151838201526020016126d1565b50505050905090810190601f1680156127165780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50608081015160408051808201909152600281527f35350000000000000000000000000000000000000000000000000000000000006020820152906001600160801b0310156127b45760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156126e95781810151838201526020016126d1565b5060a081015160408051808201909152600281527f35340000000000000000000000000000000000000000000000000000000000006020820152906001600160801b0310156128445760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156126e95781810151838201526020016126d1565b5060608181015160028801805460808086015160038c0180547fffffffffffffffffffffffffffffffff000000000000000000000000000000009081166001600160801b038085169190911790925560a0808a015191909516828816178216600160801b82841681029190911790965560018e01546040805198895260208901949094528784019190915280821697870197909752939095049092169183019190915291516001600160a01b038816927f804c9b842b2748a22bb64b345453a3de7ca54a6ca45ce00d415894979e22897a928290030190a2505050505050565b600082820183811015611052576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600061105283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613d31565b604080518082019091526002815261373760f01b602082015260808310612a285760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156126e95781810151838201526020016126d1565b508160020281612a39576000612a3c565b60015b60ff16901b826002026001901b19846000015416178360000181905550505050565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052612ae6908590613d8b565b50505050565b604080518082019091526002815261373760f01b602082015260808310612b545760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156126e95781810151838201526020016126d1565b508160020260010181612b68576000612b6b565b60015b60ff16901b826002026001016001901b19846000015416178360000181905550505050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590612232575050151592915050565b603854603c5460408051808201909152600281527f36350000000000000000000000000000000000000000000000000000000000006020820152908210612c235760405162461bcd60e51b81526004016105bc9190614edf565b506001600160a01b038216600090815260356020526040812060070154600160a01b900460ff16151580612c8c57506000805260376020527fa0a618d80eda9243166be83cb7421d97e9dab6ddddd3c70ac7a6b4440256e8e7546001600160a01b038481169116145b905080610d0857506001600160a01b0391909116600081815260356020908152604080832060070180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16600160a01b60ff88160217905584835260379091529020805473ffffffffffffffffffffffffffffffffffffffff19169091179055600101603855565b80516001600160a01b03908116600090815260356020908152604080832081860151851684526036835281842060345483517ffca513a80000000000000000000000000000000000000000000000000000000081529351929691959491169263fca513a89260048083019392829003018186803b158015612d9557600080fd5b505afa158015612da9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dcd919061479e565b90506000612e76612ddd85613f42565b600a0a612e708760600151856001600160a01b031663b62cad698a600001516040518263ffffffff1660e01b8152600401612e189190614cd2565b602060405180830381600087803b158015612e3257600080fd5b505af1158015612e46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e6a9190614bbc565b90613f4c565b90613fa5565b905073390df1e055a6c05f16d030d1ca2d9cedf21fd0f063721a92f986600001518688604001518960600151868b60800151603a5460358c60376038548e6040518d63ffffffff1660e01b8152600401612edb9c9b9a99989796959493929190614db7565b60006040518083038186803b158015612ef357600080fd5b505af4158015612f07573d6000803e3d6000fd5b50505050612f148461233f565b600080600187608001516002811115612f2957fe5b6002811115612f3457fe5b1415612fe9576003860154600587015460208901516040808b015160608c0151915163b3f1c93d60e01b81526001600160801b0390951696506001600160a01b039093169363b3f1c93d93612f90939290918890600401614d8e565b602060405180830381600087803b158015612faa57600080fd5b505af1158015612fbe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fe29190614ba0565b9050613098565b600686015460208801516040808a015160608b015160018b0154925163b3f1c93d60e01b81526001600160a01b039095169463b3f1c93d946130439490939291600160801b9091046001600160801b031690600401614ce6565b602060405180830381600087803b15801561305d57600080fd5b505af1158015613071573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130959190614ba0565b90505b80156130ba5760078601546130ba908690600160a01b900460ff1660016129c0565b6130e987600001518860a0015160008a60e001516130d95760006130df565b8a606001515b8a93929190612419565b8660e0015115613181578660a001516001600160a01b0316634efecaa5886020015189606001516040518363ffffffff1660e01b815260040161312d929190614d17565b602060405180830381600087803b15801561314757600080fd5b505af115801561315b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061317f9190614bbc565b505b8660c0015161ffff1687604001516001600160a01b031688600001516001600160a01b03167fc6a898309e823ee50bac64e45ca8adba6690e99e7841c45d754e2a38e9019d9b8a602001518b606001518c60800151600160028111156131e357fe5b8e6080015160028111156131f357fe5b60028111156131fe57fe5b1461321d5760028d0154600160801b90046001600160801b031661321f565b885b60405161204b9493929190614e61565b600080600080600061323f6145e8565b6132488a613fe7565b156132665760008060008060001995509550955095509550506136fb565b600060e08201525b878160e00151101561365a5760e081015161328a908b90613fec565b6132935761364a565b60e0810151600090815260208a81526040808320546001600160a01b03166101e085018190528352908d905290206132ca8161406b565b506080860181905260c08601929092525060a0840191909152600a0a60208301526101e08201516040517fb3596f070000000000000000000000000000000000000000000000000000000081526001600160a01b038a169163b3596f07916133359190600401614cd2565b60206040518083038186803b15801561334d57600080fd5b505afa158015613361573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133859190614bbc565b825260c0820151158015906133a5575060e08201516133a5908c90614096565b156134c3578060040160009054906101000a90046001600160a01b03166001600160a01b03166370a082318e6040518263ffffffff1660e01b81526004016133ed9190614cd2565b60206040518083038186803b15801561340557600080fd5b505afa158015613419573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061343d9190614bbc565b604083018190526020830151835160009261345c9291612e7091613f4c565b61012084015190915061346f9082612924565b61012084015260a083015161349590613489908390613f4c565b61016085015190612924565b61016084015260c08301516134bb906134af908390613f4c565b61018085015190612924565b610180840152505b60e08201516134d3908c9061411c565b15613648578060050160009054906101000a90046001600160a01b03166001600160a01b03166370a082318e6040518263ffffffff1660e01b815260040161351b9190614cd2565b60206040518083038186803b15801561353357600080fd5b505afa158015613547573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061356b9190614bbc565b8260600181815250506136158160060160009054906101000a90046001600160a01b03166001600160a01b03166370a082318f6040518263ffffffff1660e01b81526004016135ba9190614cd2565b60206040518083038186803b1580156135d257600080fd5b505afa1580156135e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061360a9190614bbc565b606084015190612924565b6060830181905260208301518351613641926136359291612e7091613f4c565b61014084015190612924565b6101408301525b505b60e081018051600101905261326e565b60008161012001511161366e576000613683565b61012081015161016082015161368391613fa5565b61016082015261012081015161369a5760006136af565b6101208101516101808201516136af91613fa5565b61018082018190526101208201516101408301516136cc9261419b565b610100820181905261012082015161014083015161016084015161018090940151919850965091945090925090505b965096509650965096915050565b60008061371685846141bf565b90508381101561372a576000915050611052565b613734818561297e565b95945050505050565b600290565b303b1590565b600381015460009064ffffffffff600160801b909104811690421681141561377f57505060018101546001600160801b0316610759565b60018301546002840154600091612232916001600160801b039182169161222c911685614279565b6040805160208101909152845481526000906137c9908890889087878761322f565b945050505050670de0b6b3a76400008110156040518060400160405280600181526020017f36000000000000000000000000000000000000000000000000000000000000008152509061382f5760405162461bcd60e51b81526004016105bc9190614edf565b5050505050505050565b60006110528383426142b7565b6000821580613853575081155b156138605750600061077f565b817ffffffffffffffffffffffffffffffffffffffffffe6268e1b017bfe18bffffff8161388957fe5b0483111560405180604001604052806002815260200161068760f31b815250906138f45760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156126e95781810151838201526020016126d1565b506b033b2e3c9fd0803ce80000006002815b04838502018161391257fe5b049392505050565b600285015460009081906001600160801b031685858215613af25760006139418488614279565b905061394d818a613846565b60408051808201909152600281527f353100000000000000000000000000000000000000000000000000000000000060208201529093506001600160801b038411156139da5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156126e95781810151838201526020016126d1565b5060018b0180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166001600160801b0385161790558915613af05760028b0154600090613a3890600160801b90046001600160801b031689613839565b9050613a44818a613846565b60408051808201909152600281527f353200000000000000000000000000000000000000000000000000000000000060208201529093506001600160801b03841115613ad15760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156126e95781810151838201526020016126d1565b505060018b0180546001600160801b03808516600160801b0291161790555b505b60039990990180547fffffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffff16600160801b4264ffffffffff1602179055989650505050505050565b613b40614682565b613b4987613d26565b6101208201819052613b5b575061158b565b8660050160009054906101000a90046001600160a01b03166001600160a01b031663797743386040518163ffffffff1660e01b815260040160806040518083038186803b158015613bab57600080fd5b505afa158015613bbf573d6000803e3d6000fd5b505050506040513d6080811015613bd557600080fd5b508051602080830151604084015160609094015164ffffffffff1661014086015260a085019390935291835290820152613c0f8686613846565b6080820152613c1e8684613846565b606082015260a0810151610140820151613c40919064ffffffffff85166142b7565b60c082018190526020820151613c5591613846565b60408201819052608082015182516060840151613c7a9392610a009290918391612924565b60e08201819052610120820151613c9191906141bf565b610100820181905215611dee57600480880154610100830151604080517f7df5bd3b0000000000000000000000000000000000000000000000000000000081529384019190915260248301879052516001600160a01b0390911691637df5bd3b91604480830192600092919082900301818387803b158015613d1257600080fd5b505af1158015610623573d6000803e3d6000fd5b5460401c61ffff1690565b60008184841115613d835760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156126e95781810151838201526020016126d1565b505050900390565b613d9d826001600160a01b0316612b90565b613dee576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b600080836001600160a01b0316836040518082805190602001908083835b60208310613e2b5780518252601f199092019160209182019101613e0c565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613e8d576040519150601f19603f3d011682016040523d82523d6000602084013e613e92565b606091505b509150915081613ee9576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b805115612ae657808060200190516020811015613f0557600080fd5b5051612ae65760405162461bcd60e51b815260040180806020018281038252602a8152602001806151d2602a913960400191505060405180910390fd5b5460301c60ff1690565b600082613f5b5750600061077f565b82820282848281613f6857fe5b04146110525760405162461bcd60e51b81526004018080602001828103825260218152602001806151836021913960400191505060405180910390fd5b600061105283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061438d565b511590565b60006080821060405180604001604052806002815260200161373760f01b815250906140595760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156126e95781810151838201526020016126d1565b50509051600360029092021c16151590565b5461ffff80821692601083901c821692602081901c831692603082901c60ff169260409290921c1690565b60006080821060405180604001604052806002815260200161373760f01b815250906141035760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156126e95781810151838201526020016126d1565b5050815160016002830281019190911c16151592915050565b60006080821060405180604001604052806002815260200161373760f01b815250906141895760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156126e95781810151838201526020016126d1565b50509051600160029092021c16151590565b6000826141ab5750600019611052565b612232836141b986856141bf565b906143f2565b60008215806141cc575081155b156141d95750600061077f565b817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec778161420257fe5b0483111560405180604001604052806002815260200161068760f31b8152509061426d5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156126e95781810151838201526020016126d1565b50612710600281613906565b60008061428d4264ffffffffff851661297e565b905061223261429a61450c565b6301e133806142a98785613f4c565b816142b057fe5b0490612924565b6000806142cb8364ffffffffff861661297e565b9050806142e2576142da61450c565b915050611052565b60001981016000600283116142f85760006142fd565b600283035b90506301e13380870460006143128280613846565b905060006143208284613846565b90506000600261433484612e6a8a8a613f4c565b8161433b57fe5b0490506000600661435284612e6a89818d8d613f4c565b8161435957fe5b04905061437d81614377848161436f8a8e613f4c565b61437761450c565b90612924565b9c9b505050505050505050505050565b600081836143dc5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156126e95781810151838201526020016126d1565b5060008385816143e857fe5b0495945050505050565b60408051808201909152600281527f35300000000000000000000000000000000000000000000000000000000000006020820152600090826144755760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156126e95781810151838201526020016126d1565b5060408051808201909152600280825261068760f31b6020830152830490670de0b6b3a76400008219048511156144ed5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156126e95781810151838201526020016126d1565b508281670de0b6b3a76400008602018161450357fe5b04949350505050565b6b033b2e3c9fd0803ce800000090565b604051806101800160405280614530614587565b815260006020820181905260408201819052606082018190526080820181905260a0820181905260c0820181905260e082018190526101008201819052610120820181905261014082018190526101609091015290565b6040518060200160405280600081525090565b60405180610100016040528060006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b604051806102400160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160001515815260200160006001600160a01b031681526020016000151581526020016000151581525090565b60405180610160016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600064ffffffffff1681525090565b80356107598161515f565b60008083601f8401126146ff578081fd5b50813567ffffffffffffffff811115614716578182fd5b602083019150836020808302850101111561233857600080fd5b60008083601f840112614741578182fd5b50813567ffffffffffffffff811115614758578182fd5b60208301915083602082850101111561233857600080fd5b803561ffff8116811461075957600080fd5b600060208284031215614793578081fd5b81356110528161515f565b6000602082840312156147af578081fd5b81516110528161515f565b600080604083850312156147cc578081fd5b82356147d78161515f565b915060208301356147e78161515f565b809150509250929050565b600080600080600060a08688031215614809578081fd5b85356148148161515f565b945060208601356148248161515f565b935060408601356148348161515f565b925060608601356148448161515f565b915060808601356148548161515f565b809150509295509295909350565b600080600080600060a08688031215614879578081fd5b85356148848161515f565b945060208601356148948161515f565b935060408601356148a48161515f565b925060608601359150608086013561485481615174565b60008060008060008060c087890312156148d3578081fd5b86356148de8161515f565b955060208701356148ee8161515f565b945060408701356148fe8161515f565b959894975094956060810135955060808101359460a0909101359350915050565b600080600080600080600080600080600060e08c8e03121561493f578485fd5b6149488c6146e3565b9a5067ffffffffffffffff8060208e01351115614963578586fd5b6149738e60208f01358f016146ee565b909b50995060408d0135811015614988578586fd5b6149988e60408f01358f016146ee565b909950975060608d01358110156149ad578586fd5b6149bd8e60608f01358f016146ee565b90975095506149ce60808e016146e3565b94508060a08e013511156149e0578384fd5b506149f18d60a08e01358e01614730565b9093509150614a0260c08d01614770565b90509295989b509295989b9093969950565b60008060408385031215614a26578081fd5b8235614a318161515f565b915060208301356147e781615174565b60008060408385031215614a53578182fd5b8235614a5e8161515f565b946020939093013593505050565b600080600060608486031215614a80578081fd5b8335614a8b8161515f565b9250602084013591506040840135614aa28161515f565b809150509250925092565b60008060008060808587031215614ac2578182fd5b8435614acd8161515f565b9350602085013592506040850135614ae48161515f565b9150614af260608601614770565b905092959194509250565b60008060008060808587031215614b12578182fd5b8435614b1d8161515f565b935060208501359250604085013591506060850135614b3b8161515f565b939692955090935050565b600080600080600060a08688031215614b5d578283fd5b8535614b688161515f565b9450602086013593506040860135925061484460608701614770565b600060208284031215614b95578081fd5b813561105281615174565b600060208284031215614bb1578081fd5b815161105281615174565b600060208284031215614bcd578081fd5b5051919050565b60008060408385031215614be6578182fd5b82519150602083015167ffffffffffffffff80821115614c04578283fd5b818501915085601f830112614c17578283fd5b815181811115614c2357fe5b6040516020601f19601f8401168201018181108482111715614c4157fe5b604052818152838201602001881015614c58578485fd5b614c69826020830160208701615133565b809450505050509250929050565b6001600160a01b03169052565b60038110614c8e57fe5b9052565b519052565b6001600160801b03169052565b64ffffffffff169052565b60ff169052565b60008251614cc8818460208701615133565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03948516815292909316602083015260408201526001600160801b03909116606082015260800190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0393909316835260208301919091526001600160801b0316604082015260600190565b6001600160a01b03958616815293851660208501529190931660408301526060820192909252901515608082015260a00190565b6001600160a01b0394851681529290931660208301526040820152606081019190915260800190565b6001600160a01b039c8d168152602081019b909b52988b1660408b015260608a0197909752608089019590955260a088019390935260c087019190915260e08601526101008501526101208401526101408301529091166101608201526101800190565b6001600160a01b039889168152602081019790975260408701959095526060860193909352608085019190915260a084015260c083015290911660e08201526101000190565b6001600160a01b0394909416845260208401929092526040830152606082015260800190565b6020808252825182820181905260009190848201906040850190845b81811015614ec85783516001600160a01b031683529284019291840191600101614ea3565b50909695505050505050565b901515815260200190565b6000602082528251806020840152614efe816040850160208701615133565b601f01601f19169190910160400192915050565b9051815260200190565b600061018082019050614f30828451614c92565b6020830151614f426020840182614c97565b506040830151614f556040840182614c97565b506060830151614f686060840182614c97565b506080830151614f7b6080840182614c97565b5060a0830151614f8e60a0840182614c97565b5060c0830151614fa160c0840182614ca4565b5060e0830151614fb460e0840182614c77565b5061010080840151614fc882850182614c77565b505061012080840151614fdd82850182614c77565b505061014080840151614ff282850182614c77565b50506101608084015161500782850182614caf565b505092915050565b9485526001600160a01b03938416602086015291831660408501528216606084015216608082015260a00190565b9788526001600160a01b03968716602089015294151560408801526060870193909352608086019190915260a085015260c08401521660e08201526101000190565b600060a0820190508682528560208301528460408301528360608301526150a96080830184614c84565b9695505050505050565b918252602082015260400190565b8681526020810186905260c081016150dc6040830187614c84565b6001600160a01b03851660608301528360808301528260a0830152979650505050505050565b90815260200190565b958652602086019490945260408501929092526060840152608083015260a082015260c00190565b60005b8381101561514e578181015183820152602001615136565b83811115612ae65750506000910152565b6001600160a01b038116811461163757600080fd5b801515811461163757600080fdfe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a65645361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a264697066735822122051027b646bf91a184820b48f34e313060f29903f8d03bde9f23aa36a85a6c9ae64736f6c63430007060033

    Block Age Transaction Gas Used Reward
    view all blocks ##produced##

    Block Age Uncle Number Difficulty Gas Used Reward
    View All Uncles
    Loading...
    Loading
    Loading...
    Loading

    Validator Index Block Age Amount
    View All Withdrawals

    Transaction Hash Block Age Value Eth2 PubKey Valid
    View All Deposits
    [ Download: CSV Export  ]

    A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.