Contract 0x0Fa9407b3D0bA59395bB7Fc2442BaabcD20AE253

Contract Overview

Balance:
0.1 BNB
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x09ea1d7aa0a3cf30aa6980448e97cbba5a829e23be52d6d2ce3ac0180cfa6fa6Get Paid158856792022-01-15 13:00:082 days 12 hrs ago0x9b6a04053f7374a18ed4ae6c2eeaf60666ee7e8b IN  0x0fa9407b3d0ba59395bb7fc2442baabcd20ae2530 BNB0.00024566
0x381004d23db0347443b92c7ed72d2891e0b4b7a7d521606fc8e8b3a87dc39fc8Liquidate Vault158821542022-01-15 10:03:532 days 15 hrs ago0x9b6a04053f7374a18ed4ae6c2eeaf60666ee7e8b IN  0x0fa9407b3d0ba59395bb7fc2442baabcd20ae2530 BNB0.00571181
0xc2499ce9e795a14fbae5a9f96d911d54c70a5945695b66963fbdd0c60d4c996fGet Paid158598312022-01-14 15:27:443 days 10 hrs ago0x9b6a04053f7374a18ed4ae6c2eeaf60666ee7e8b IN  0x0fa9407b3d0ba59395bb7fc2442baabcd20ae2530 BNB0.00024566
0xd4eefbafd3caca5be0933d0f5bd7cc0aaaed572f950d650f05b139af1cdaf494Liquidate Vault158585912022-01-14 14:25:193 days 11 hrs ago0x9b6a04053f7374a18ed4ae6c2eeaf60666ee7e8b IN  0x0fa9407b3d0ba59395bb7fc2442baabcd20ae2530 BNB0.0054991
0x0506cd5bb30a51d04332635e96f3d7bc5039d79425bbf19dfe95286ca470504aLiquidate Vault158582692022-01-14 14:09:133 days 11 hrs ago0x5022e72ea36eee47f909bad30bb8133a7f5503d1 IN  0x0fa9407b3d0ba59395bb7fc2442baabcd20ae2530 BNB0.00246264
0x3d6b14db876f50f5d325908b5fe58b0ed4446190d66e0bdc6aee80751bbbc0b0Liquidate Vault157664822022-01-11 9:29:486 days 16 hrs ago0x9b6a04053f7374a18ed4ae6c2eeaf60666ee7e8b IN  0x0fa9407b3d0ba59395bb7fc2442baabcd20ae2530 BNB0.00246264
0x8aea232eebb6a01f5e57815ab2457757b75284009218c2bbaab11617b8ab6559Liquidate Vault157664092022-01-11 9:26:096 days 16 hrs ago0x9b6a04053f7374a18ed4ae6c2eeaf60666ee7e8b IN  0x0fa9407b3d0ba59395bb7fc2442baabcd20ae2530 BNB0.00246264
0xe6c65ab38c9ea89013f65901c29b6ac2457846ae1d9bf2e46c1d3554f00b4746Liquidate Vault157659462022-01-11 9:03:006 days 16 hrs ago0x9b6a04053f7374a18ed4ae6c2eeaf60666ee7e8b IN  0x0fa9407b3d0ba59395bb7fc2442baabcd20ae2530 BNB0.00246264
0x5e211f4e08a46b9a19c7d701146e05d7228085738be35ae5636752e2d5ea3c1bLiquidate Vault157658262022-01-11 8:57:006 days 16 hrs ago0x9b6a04053f7374a18ed4ae6c2eeaf60666ee7e8b IN  0x0fa9407b3d0ba59395bb7fc2442baabcd20ae2530 BNB0.00217063
0x3deee8f0629b351e01a20720983972619882300d3446419df56dee0e72d371f9Transfer157658052022-01-11 8:55:576 days 16 hrs ago0x9b6a04053f7374a18ed4ae6c2eeaf60666ee7e8b IN  0x0fa9407b3d0ba59395bb7fc2442baabcd20ae2530.1 BNB0.0002104
0xbbb475da7d74003431182255cc44d2900ca46ea4e6a60c3de9963e674e3b2683Liquidate Vault157656702022-01-11 8:49:126 days 16 hrs ago0x9b6a04053f7374a18ed4ae6c2eeaf60666ee7e8b IN  0x0fa9407b3d0ba59395bb7fc2442baabcd20ae2530 BNB0.00217063
0x9b42cfb6a1634a6d255700dca2c4cdf0af9a28c7a362ab010eb57aa771fb52cfLiquidate Vault157656052022-01-11 8:45:576 days 16 hrs ago0x9b6a04053f7374a18ed4ae6c2eeaf60666ee7e8b IN  0x0fa9407b3d0ba59395bb7fc2442baabcd20ae2530 BNB0.00217063
0x8b4421ae1376a9cc4cec6f362c5f02adcf45ba8691f6abe7b5acd5a982965f06Liquidate Vault157654662022-01-11 8:39:006 days 17 hrs ago0xa5ecafbb7ad2aeea9a9439cbbf537215f52594df IN  0x0fa9407b3d0ba59395bb7fc2442baabcd20ae2530 BNB0.00246264
0xdf7b5ca30b584568b5af5de8b2bd44bb7bc91b89b4e7c627d4ef1bd421a3fc9dLiquidate Vault157653112022-01-11 8:31:156 days 17 hrs ago0xa5ecafbb7ad2aeea9a9439cbbf537215f52594df IN  0x0fa9407b3d0ba59395bb7fc2442baabcd20ae2530 BNB0.00246264
0x1b907679a3ce2c54a82f30e6f4da3a1c61fe3c07ad619a2fdb9577682e46d09bLiquidate Vault157566482022-01-11 1:18:067 days 25 mins ago0xa5ecafbb7ad2aeea9a9439cbbf537215f52594df IN  0x0fa9407b3d0ba59395bb7fc2442baabcd20ae2530 BNB0.00246264
0x58ed5d3f06c99f287b70ea8ceb8383992b0cd2404245fd785ffc328907d6b97dLiquidate Vault157563542022-01-11 1:03:247 days 40 mins ago0x9b6a04053f7374a18ed4ae6c2eeaf60666ee7e8b IN  0x0fa9407b3d0ba59395bb7fc2442baabcd20ae2530 BNB0.00246264
0x7e6a73e7bc215f49688fedda32a205b4ad588950f33df11d735ab2c8c6749f7aLiquidate Vault157560602022-01-11 0:48:427 days 54 mins ago0xa5ecafbb7ad2aeea9a9439cbbf537215f52594df IN  0x0fa9407b3d0ba59395bb7fc2442baabcd20ae2530 BNB0.00246264
0xa1752ea7d81735e58e71775d8e8f559dd21d4e8ad7d1af42f3b5d7b7453e934dLiquidate Vault157559982022-01-11 0:45:367 days 58 mins ago0xa5ecafbb7ad2aeea9a9439cbbf537215f52594df IN  0x0fa9407b3d0ba59395bb7fc2442baabcd20ae2530 BNB0.00246264
0x40a0120231f645440ca2f6e284b1cfca169f7fcd0d64eb45774a4f17c831aae6Liquidate Vault157557502022-01-11 0:33:127 days 1 hr ago0x9b6a04053f7374a18ed4ae6c2eeaf60666ee7e8b IN  0x0fa9407b3d0ba59395bb7fc2442baabcd20ae2530 BNB0.00246264
0x66998c5ea85a58e8b2a7d02361797b58dd5ab7811f09d0ecc91ff5d770b0cb4fLiquidate Vault157556452022-01-11 0:27:577 days 1 hr ago0xa5ecafbb7ad2aeea9a9439cbbf537215f52594df IN  0x0fa9407b3d0ba59395bb7fc2442baabcd20ae2530 BNB0.00246264
0x546d7d9d23e42fcc538b0a4c1b2ad7c9235f21d836eb3a31f35320382ae09c4eLiquidate Vault157555962022-01-11 0:25:307 days 1 hr ago0xa5ecafbb7ad2aeea9a9439cbbf537215f52594df IN  0x0fa9407b3d0ba59395bb7fc2442baabcd20ae2530 BNB0.00246264
0x90dbfa0f7a91cec7da5d8481294ef1d00c556e4d2dcc07164096b4612f22b3d5Liquidate Vault157553312022-01-11 0:12:157 days 1 hr ago0xa5ecafbb7ad2aeea9a9439cbbf537215f52594df IN  0x0fa9407b3d0ba59395bb7fc2442baabcd20ae2530 BNB0.00246264
0x6f2376e0b3b34a32071c16530e8160db6732654adf685e37667f4a8646339b21Liquidate Vault157551372022-01-11 0:02:337 days 1 hr ago0x9b6a04053f7374a18ed4ae6c2eeaf60666ee7e8b IN  0x0fa9407b3d0ba59395bb7fc2442baabcd20ae2530 BNB0.00160822
0x6a7e6e0ee5776823580f51c87fbaa325e95e01199807c5bbde6b8e4232345d16Liquidate Vault157549062022-01-10 23:51:007 days 1 hr ago0x9b6a04053f7374a18ed4ae6c2eeaf60666ee7e8b IN  0x0fa9407b3d0ba59395bb7fc2442baabcd20ae2530 BNB0.00160822
0xf3567664f47266aa775a8d93e92cafadd1886207a4b2b0568ecef4b9ecfd8740Liquidate Vault157402172022-01-10 11:35:577 days 14 hrs ago0x7805fa0360110ea6deb508b00e3d19290c9fd0e5 IN  0x0fa9407b3d0ba59395bb7fc2442baabcd20ae2530 BNB0.00571772
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x09ea1d7aa0a3cf30aa6980448e97cbba5a829e23be52d6d2ce3ac0180cfa6fa6158856792022-01-15 13:00:082 days 12 hrs ago 0x0fa9407b3d0ba59395bb7fc2442baabcd20ae2530x9b6a04053f7374a18ed4ae6c2eeaf60666ee7e8b0.124327735787719939 BNB
0x381004d23db0347443b92c7ed72d2891e0b4b7a7d521606fc8e8b3a87dc39fc8158821542022-01-15 10:03:532 days 15 hrs ago 0x0fa9407b3d0ba59395bb7fc2442baabcd20ae253 0xc9f654d481e79d01448030b08516b7f9fcf71e130 BNB
0x381004d23db0347443b92c7ed72d2891e0b4b7a7d521606fc8e8b3a87dc39fc8158821542022-01-15 10:03:532 days 15 hrs ago 0xc9f654d481e79d01448030b08516b7f9fcf71e13 0x0fa9407b3d0ba59395bb7fc2442baabcd20ae2530.124327735787719939 BNB
0x381004d23db0347443b92c7ed72d2891e0b4b7a7d521606fc8e8b3a87dc39fc8158821542022-01-15 10:03:532 days 15 hrs ago 0x0fa9407b3d0ba59395bb7fc2442baabcd20ae253 0xc9f654d481e79d01448030b08516b7f9fcf71e130 BNB
0x381004d23db0347443b92c7ed72d2891e0b4b7a7d521606fc8e8b3a87dc39fc8158821542022-01-15 10:03:532 days 15 hrs ago 0x0fa9407b3d0ba59395bb7fc2442baabcd20ae253 0xc9f654d481e79d01448030b08516b7f9fcf71e130 BNB
0x381004d23db0347443b92c7ed72d2891e0b4b7a7d521606fc8e8b3a87dc39fc8158821542022-01-15 10:03:532 days 15 hrs ago 0x0fa9407b3d0ba59395bb7fc2442baabcd20ae253 0xc9f654d481e79d01448030b08516b7f9fcf71e130 BNB
0x381004d23db0347443b92c7ed72d2891e0b4b7a7d521606fc8e8b3a87dc39fc8158821542022-01-15 10:03:532 days 15 hrs ago 0x0fa9407b3d0ba59395bb7fc2442baabcd20ae253 0xc9f654d481e79d01448030b08516b7f9fcf71e130 BNB
0x381004d23db0347443b92c7ed72d2891e0b4b7a7d521606fc8e8b3a87dc39fc8158821542022-01-15 10:03:532 days 15 hrs ago 0x0fa9407b3d0ba59395bb7fc2442baabcd20ae253 0xc9f654d481e79d01448030b08516b7f9fcf71e130 BNB
0x381004d23db0347443b92c7ed72d2891e0b4b7a7d521606fc8e8b3a87dc39fc8158821542022-01-15 10:03:532 days 15 hrs ago 0x0fa9407b3d0ba59395bb7fc2442baabcd20ae253 0xc9f654d481e79d01448030b08516b7f9fcf71e130 BNB
0x381004d23db0347443b92c7ed72d2891e0b4b7a7d521606fc8e8b3a87dc39fc8158821542022-01-15 10:03:532 days 15 hrs ago 0x0fa9407b3d0ba59395bb7fc2442baabcd20ae253 0xc9f654d481e79d01448030b08516b7f9fcf71e130 BNB
0x381004d23db0347443b92c7ed72d2891e0b4b7a7d521606fc8e8b3a87dc39fc8158821542022-01-15 10:03:532 days 15 hrs ago 0x0fa9407b3d0ba59395bb7fc2442baabcd20ae253 0xc9f654d481e79d01448030b08516b7f9fcf71e130 BNB
0x381004d23db0347443b92c7ed72d2891e0b4b7a7d521606fc8e8b3a87dc39fc8158821542022-01-15 10:03:532 days 15 hrs ago 0x0fa9407b3d0ba59395bb7fc2442baabcd20ae253 0xc9f654d481e79d01448030b08516b7f9fcf71e130 BNB
0x381004d23db0347443b92c7ed72d2891e0b4b7a7d521606fc8e8b3a87dc39fc8158821542022-01-15 10:03:532 days 15 hrs ago 0x0fa9407b3d0ba59395bb7fc2442baabcd20ae253 0xc9f654d481e79d01448030b08516b7f9fcf71e130 BNB
0x381004d23db0347443b92c7ed72d2891e0b4b7a7d521606fc8e8b3a87dc39fc8158821542022-01-15 10:03:532 days 15 hrs ago 0x0fa9407b3d0ba59395bb7fc2442baabcd20ae253 0xc9f654d481e79d01448030b08516b7f9fcf71e130 BNB
0x381004d23db0347443b92c7ed72d2891e0b4b7a7d521606fc8e8b3a87dc39fc8158821542022-01-15 10:03:532 days 15 hrs ago 0x0fa9407b3d0ba59395bb7fc2442baabcd20ae253 0xc9f654d481e79d01448030b08516b7f9fcf71e130 BNB
0x381004d23db0347443b92c7ed72d2891e0b4b7a7d521606fc8e8b3a87dc39fc8158821542022-01-15 10:03:532 days 15 hrs ago 0x0fa9407b3d0ba59395bb7fc2442baabcd20ae253 0xc9f654d481e79d01448030b08516b7f9fcf71e130 BNB
0x381004d23db0347443b92c7ed72d2891e0b4b7a7d521606fc8e8b3a87dc39fc8158821542022-01-15 10:03:532 days 15 hrs ago 0x0fa9407b3d0ba59395bb7fc2442baabcd20ae253 0xc9f654d481e79d01448030b08516b7f9fcf71e130 BNB
0x381004d23db0347443b92c7ed72d2891e0b4b7a7d521606fc8e8b3a87dc39fc8158821542022-01-15 10:03:532 days 15 hrs ago 0x0fa9407b3d0ba59395bb7fc2442baabcd20ae253 0xc9f654d481e79d01448030b08516b7f9fcf71e130 BNB
0x381004d23db0347443b92c7ed72d2891e0b4b7a7d521606fc8e8b3a87dc39fc8158821542022-01-15 10:03:532 days 15 hrs ago 0x0fa9407b3d0ba59395bb7fc2442baabcd20ae253 0xc9f654d481e79d01448030b08516b7f9fcf71e130 BNB
0x381004d23db0347443b92c7ed72d2891e0b4b7a7d521606fc8e8b3a87dc39fc8158821542022-01-15 10:03:532 days 15 hrs ago 0x0fa9407b3d0ba59395bb7fc2442baabcd20ae253 0xc9f654d481e79d01448030b08516b7f9fcf71e130 BNB
0x381004d23db0347443b92c7ed72d2891e0b4b7a7d521606fc8e8b3a87dc39fc8158821542022-01-15 10:03:532 days 15 hrs ago 0x0fa9407b3d0ba59395bb7fc2442baabcd20ae253 0xc9f654d481e79d01448030b08516b7f9fcf71e130 BNB
0x381004d23db0347443b92c7ed72d2891e0b4b7a7d521606fc8e8b3a87dc39fc8158821542022-01-15 10:03:532 days 15 hrs ago 0x0fa9407b3d0ba59395bb7fc2442baabcd20ae253 0xc9f654d481e79d01448030b08516b7f9fcf71e130 BNB
0x381004d23db0347443b92c7ed72d2891e0b4b7a7d521606fc8e8b3a87dc39fc8158821542022-01-15 10:03:532 days 15 hrs ago 0x0fa9407b3d0ba59395bb7fc2442baabcd20ae253 0xc9f654d481e79d01448030b08516b7f9fcf71e130 BNB
0x381004d23db0347443b92c7ed72d2891e0b4b7a7d521606fc8e8b3a87dc39fc8158821542022-01-15 10:03:532 days 15 hrs ago 0x0fa9407b3d0ba59395bb7fc2442baabcd20ae253 0xc9f654d481e79d01448030b08516b7f9fcf71e130 BNB
0x381004d23db0347443b92c7ed72d2891e0b4b7a7d521606fc8e8b3a87dc39fc8158821542022-01-15 10:03:532 days 15 hrs ago 0x0fa9407b3d0ba59395bb7fc2442baabcd20ae253 0xc9f654d481e79d01448030b08516b7f9fcf71e130 BNB
[ Download CSV Export 
Loading

Similar Match Source Code
Note: This contract matches the deployed ByteCode of the Source Code for Contract 0xC68B47B454b496BA51869D923Caf7404ED987De2

Contract Name:
liquidator

Compiler Version
v0.5.5+commit.47a71e8f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at BscScan.com on 2021-09-28
*/

// File: @openzeppelin/contracts/GSN/Context.sol

pragma solidity ^0.5.0;

/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with GSN meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
contract Context {
    // Empty internal constructor, to prevent people from mistakenly deploying
    // an instance of this contract, which should be used via inheritance.
    constructor () internal { }
    // solhint-disable-previous-line no-empty-blocks

    function _msgSender() internal view returns (address payable) {
        return msg.sender;
    }

    function _msgData() internal view returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol

pragma solidity ^0.5.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP. Does not include
 * the optional functions; to access them see {ERC20Detailed}.
 */
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);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

// File: @openzeppelin/contracts/math/SafeMath.sol

pragma solidity ^0.5.0;

/**
 * @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.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     * - Subtraction cannot overflow.
     *
     * _Available since v2.4.0._
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     *
     * _Available since v2.4.0._
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     *
     * _Available since v2.4.0._
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

// File: @openzeppelin/contracts/token/ERC20/ERC20.sol

pragma solidity ^0.5.0;




/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20Mintable}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin guidelines: functions revert instead
 * of returning `false` on failure. This behavior is nonetheless conventional
 * and does not conflict with the expectations of ERC20 applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20 {
    using SafeMath for uint256;

    mapping (address => uint256) private _balances;

    mapping (address => mapping (address => uint256)) private _allowances;

    uint256 private _totalSupply;

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20};
     *
     * Requirements:
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for `sender`'s tokens of at least
     * `amount`.
     */
    function transferFrom(address sender, address recipient, uint256 amount) public returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(address sender, address recipient, uint256 amount) internal {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements
     *
     * - `to` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal {
        require(account != address(0), "ERC20: mint to the zero address");

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal {
        require(account != address(0), "ERC20: burn from the zero address");

        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner`s tokens.
     *
     * This is internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(address owner, address spender, uint256 amount) internal {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`.`amount` is then deducted
     * from the caller's allowance.
     *
     * See {_burn} and {_approve}.
     */
    function _burnFrom(address account, uint256 amount) internal {
        _burn(account, amount);
        _approve(account, _msgSender(), _allowances[account][_msgSender()].sub(amount, "ERC20: burn amount exceeds allowance"));
    }
}

// File: @openzeppelin/contracts/utils/ReentrancyGuard.sol

pragma solidity ^0.5.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 *
 * _Since v2.5.0:_ this module is now much more gas efficient, given net gas
 * metering changes introduced in the Istanbul hardfork.
 */
contract ReentrancyGuard {
    bool private _notEntered;

    constructor () internal {
        // Storing an initial non-zero value makes deployment a bit more
        // expensive, but in exchange the refund on every call to nonReentrant
        // will be lower in amount. Since refunds are capped to a percetange of
        // the total transaction's gas, it is best to keep them low in cases
        // like this one, to increase the likelihood of the full refund coming
        // into effect.
        _notEntered = true;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and make it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_notEntered, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _notEntered = false;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _notEntered = true;
    }
}

// File: @openzeppelin/contracts/token/ERC20/ERC20Detailed.sol

pragma solidity ^0.5.0;


/**
 * @dev Optional functions from the ERC20 standard.
 */
contract ERC20Detailed is IERC20 {
    string private _name;
    string private _symbol;
    uint8 private _decimals;

    /**
     * @dev Sets the values for `name`, `symbol`, and `decimals`. All three of
     * these values are immutable: they can only be set once during
     * construction.
     */
    constructor (string memory name, string memory symbol, uint8 decimals) public {
        _name = name;
        _symbol = symbol;
        _decimals = decimals;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5,05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei.
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view returns (uint8) {
        return _decimals;
    }
}

// File: contracts/PriceSource.sol

pragma solidity ^0.5.0;

interface PriceSource {
	function latestRoundData() external view returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound);
}

// File: contracts/IMyVault.sol

// contracts/IMyVaultNFT.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.5.5;

interface IMyVault {
    function burn(uint256 tokenId) external;

    function mint(address to, uint256 tokenId) external;
}

// File: contracts/Stablecoin.sol

pragma solidity 0.5.5;







contract Stablecoin is ERC20, ERC20Detailed, ReentrancyGuard {
    PriceSource public ethPriceSource;
    
    using SafeMath for uint256;

    uint256 private _minimumCollateralPercentage;

    IMyVault public erc721;

    uint256 public vaultCount;
    uint256 public debtCeiling;
    uint256 public closingFee;
    uint256 public openingFee;

    uint256 public treasury;
    uint256 public tokenPeg;

    mapping(uint256 => bool) public vaultExistence;
    mapping(uint256 => address) public vaultOwner;
    mapping(uint256 => uint256) public vaultCollateral;
    mapping(uint256 => uint256) public vaultDebt;

    address public stabilityPool;

    event CreateVault(uint256 vaultID, address creator);
    event DestroyVault(uint256 vaultID);
    event TransferVault(uint256 vaultID, address from, address to);
    event DepositCollateral(uint256 vaultID, uint256 amount);
    event WithdrawCollateral(uint256 vaultID, uint256 amount);
    event BorrowToken(uint256 vaultID, uint256 amount);
    event PayBackToken(uint256 vaultID, uint256 amount, uint256 closingFee);
    event BuyRiskyVault(uint256 vaultID, address owner, address buyer, uint256 amountPaid);

    constructor(
        address ethPriceSourceAddress,
        uint256 minimumCollateralPercentage,
        string memory name,
        string memory symbol,
        address vaultAddress
    ) ERC20Detailed(name, symbol, 18) public {
        assert(ethPriceSourceAddress != address(0));
        assert(minimumCollateralPercentage != 0);
                        //  | decimals start here
        debtCeiling=10000000000000000000;// 10 dollas
        closingFee=50; // 0.5%
        openingFee=0; // 0.0%
        ethPriceSource = PriceSource(ethPriceSourceAddress);
        stabilityPool=address(0);
        tokenPeg = 100000000; // $1

        erc721 = IMyVault(vaultAddress);
        _minimumCollateralPercentage = minimumCollateralPercentage;
    }

    modifier onlyVaultOwner(uint256 vaultID) {
        require(vaultExistence[vaultID], "Vault does not exist");
        require(vaultOwner[vaultID] == msg.sender, "Vault is not owned by you");
        _;
    }

    function getDebtCeiling() external view returns (uint256){
        return debtCeiling;
    }

    function getClosingFee() external view returns (uint256){
        return closingFee;
    }
    function getOpeningFee() external view returns (uint256){
        return openingFee;
    }

    function getTokenPriceSource() public view returns (uint256){
        return tokenPeg;
    }


    function getEthPriceSource() public view returns (uint256){
        (,int price,,,) = ethPriceSource.latestRoundData();
        return uint256(price);
    }

    function calculateCollateralProperties(uint256 collateral, uint256 debt) private view returns (uint256, uint256) {
        assert(getEthPriceSource() != 0);
        assert(getTokenPriceSource() != 0);

        uint256 collateralValue = collateral.mul(getEthPriceSource() );

        assert(collateralValue >= collateral);

        uint256 debtValue = debt.mul(getTokenPriceSource());

        assert(debtValue >= debt);

        uint256 collateralValueTimes100 = collateralValue.mul(100);

        assert(collateralValueTimes100 > collateralValue);

        return (collateralValueTimes100, debtValue);
    }

    function isValidCollateral(uint256 collateral, uint256 debt) private view returns (bool) {
        (uint256 collateralValueTimes100, uint256 debtValue) = calculateCollateralProperties(collateral, debt);

        uint256 collateralPercentage = collateralValueTimes100.div(debtValue);

        return collateralPercentage >= _minimumCollateralPercentage;
    }

    function createVault() external returns (uint256) {
        uint256 id = vaultCount;
        vaultCount = vaultCount.add(1);

        assert(vaultCount >= id);

        vaultExistence[id] = true;
        vaultOwner[id] = msg.sender;

        emit CreateVault(id, msg.sender);

        // mint erc721 (vaultId)

        erc721.mint(msg.sender,id);

        return id;
    }

    function destroyVault(uint256 vaultID) external onlyVaultOwner(vaultID) nonReentrant {
        require(vaultDebt[vaultID] == 0, "Vault has outstanding debt");

        if(vaultCollateral[vaultID]!=0) {
            msg.sender.transfer(vaultCollateral[vaultID]);
        }

        // burn erc721 (vaultId)

        erc721.burn(vaultID);

        delete vaultExistence[vaultID];
        delete vaultOwner[vaultID];
        delete vaultCollateral[vaultID];
        delete vaultDebt[vaultID];

        emit DestroyVault(vaultID);
    }

    function transferVault(uint256 vaultID, address to) external onlyVaultOwner(vaultID) {
        vaultOwner[vaultID] = to;

        // burn erc721 (vaultId)
        erc721.burn(vaultID);
        // mint erc721 (vaultId)
        erc721.mint(to,vaultID);

        emit TransferVault(vaultID, msg.sender, to);
    }

    function depositCollateral(uint256 vaultID) external payable onlyVaultOwner(vaultID) {
        uint256 newCollateral = vaultCollateral[vaultID].add(msg.value);

        assert(newCollateral >= vaultCollateral[vaultID]);

        vaultCollateral[vaultID] = newCollateral;

        emit DepositCollateral(vaultID, msg.value);
    }

    function withdrawCollateral(uint256 vaultID, uint256 amount) external onlyVaultOwner(vaultID) nonReentrant {
        require(vaultCollateral[vaultID] >= amount, "Vault does not have enough collateral");

        uint256 newCollateral = vaultCollateral[vaultID].sub(amount);

        if(vaultDebt[vaultID] != 0) {
            require(isValidCollateral(newCollateral, vaultDebt[vaultID]), "Withdrawal would put vault below minimum collateral percentage");
        }

        vaultCollateral[vaultID] = newCollateral;
        msg.sender.transfer(amount);

        emit WithdrawCollateral(vaultID, amount);
    }

    function borrowToken(uint256 vaultID, uint256 amount) external onlyVaultOwner(vaultID) {
        require(amount > 0, "Must borrow non-zero amount");
        require(totalSupply().add(amount) <= debtCeiling, "borrowToken: Cannot mint over totalSupply.");

        uint256 newDebt = vaultDebt[vaultID].add(amount);

        assert(newDebt > vaultDebt[vaultID]);

        require(isValidCollateral(vaultCollateral[vaultID], newDebt), "Borrow would put vault below minimum collateral percentage");

        vaultDebt[vaultID] = newDebt;
        _mint(msg.sender, amount);
        emit BorrowToken(vaultID, amount);
    }

    function payBackToken(uint256 vaultID, uint256 amount) external onlyVaultOwner(vaultID) {
        require(balanceOf(msg.sender) >= amount, "Token balance too low");
        require(vaultDebt[vaultID] >= amount, "Vault debt less than amount to pay back");

        uint256 _closingFee = (amount.mul(closingFee).mul(getTokenPriceSource())).div(getEthPriceSource().mul(10000));

        vaultDebt[vaultID] = vaultDebt[vaultID].sub(amount);
        vaultCollateral[vaultID]=vaultCollateral[vaultID].sub(_closingFee);
        vaultCollateral[treasury]=vaultCollateral[treasury].add(_closingFee);

        _burn(msg.sender, amount);

        emit PayBackToken(vaultID, amount, _closingFee);
    }

    function buyRiskyVault(uint256 vaultID) external {
        require(vaultExistence[vaultID], "Vault does not exist");
        require(stabilityPool==address(0) || msg.sender ==  stabilityPool, "buyRiskyVault disabled for public");

        (uint256 collateralValueTimes100, uint256 debtValue) = calculateCollateralProperties(vaultCollateral[vaultID], vaultDebt[vaultID]);

        uint256 collateralPercentage = collateralValueTimes100.div(debtValue);

        require(collateralPercentage < _minimumCollateralPercentage, "Vault is not below minimum collateral percentage");

        uint256 maximumDebtValue = collateralValueTimes100.div(_minimumCollateralPercentage);

        uint256 maximumDebt = maximumDebtValue.div(getTokenPriceSource() );

        uint256 debtDifference = vaultDebt[vaultID].sub(maximumDebt);

        require(balanceOf(msg.sender) >= debtDifference, "Token balance too low to pay off outstanding debt");

        address previousOwner = vaultOwner[vaultID];

        vaultOwner[vaultID] = msg.sender;
        vaultDebt[vaultID] = maximumDebt;

        uint256 _closingFee = (debtDifference.mul(closingFee).mul(getTokenPriceSource()) ).div(getEthPriceSource().mul(10000));
        vaultCollateral[vaultID]=vaultCollateral[vaultID].sub(_closingFee);
        vaultCollateral[treasury]=vaultCollateral[treasury].add(_closingFee);
        
        _burn(msg.sender, debtDifference);

        // burn erc721 (vaultId)
        erc721.burn(vaultID);
        // mint erc721 (vaultId)
        erc721.mint(msg.sender,vaultID);

        emit BuyRiskyVault(vaultID, previousOwner, msg.sender, debtDifference);
    }
}

// File: contracts/liquidator.sol

// contracts/liquidator.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.5.5;





contract liquidator is ReentrancyGuard {
    using SafeMath for uint256;

    address public admin;

    ERC20 ghostdai;

    Stablecoin vaultContract;

    uint256 public debtRatio;
    uint256 public gainRatio;

    uint256 private _minimumCollateralPercentage;

    mapping(address => uint256) public ethDebt;

    constructor(address _vaultContract, address _ghostdai) public {
        admin = msg.sender;

        vaultContract = Stablecoin(_vaultContract);
        ghostdai = ERC20(_ghostdai);

        debtRatio = 2;
        gainRatio = 11;// /10 so 1.1

        _minimumCollateralPercentage = 150;
    }
    
    function setAdmin(address _admin) public {
        require(admin==msg.sender, "ser pls no hack");
        admin=_admin;
    }

    function setGainRatio(uint256 _gainRatio) public {
        require(admin==msg.sender, "ser pls no hack");
        gainRatio=_gainRatio;
    }

    function setDebtRatio(uint256 _debtRatio) public {
        require(admin==msg.sender, "ser pls no hack");
        debtRatio=_debtRatio;
    }

    function calculateCollateralProperties(uint256 collateral, uint256 debt) private view returns (uint256, uint256) {
        assert(vaultContract.getEthPriceSource() != 0);
        assert(vaultContract.getTokenPriceSource() != 0);

        uint256 collateralValue = collateral.mul(vaultContract.getEthPriceSource() );

        assert(collateralValue >= collateral);

        uint256 debtValue = debt.mul(vaultContract.getTokenPriceSource());

        assert(debtValue >= debt);

        uint256 collateralValueTimes100 = collateralValue.mul(100);

        assert(collateralValueTimes100 > collateralValue);

        return (collateralValueTimes100, debtValue);
    }

    function isValidCollateral(uint256 collateral, uint256 debt) private view returns (bool) {
        (uint256 collateralValueTimes100, uint256 debtValue) = calculateCollateralProperties(collateral, debt);

        uint256 collateralPercentage = collateralValueTimes100.div(debtValue);

        return collateralPercentage >= _minimumCollateralPercentage;
    }

    function getPaid() public nonReentrant {
        require(ethDebt[msg.sender]!=0, "Don't have anything for you.");
        uint256 amount = ethDebt[msg.sender];
        ethDebt[msg.sender]=0;
        msg.sender.transfer(amount);
    }

    function checkLiquidation (uint256 _vaultId) public view {
        address ogOwner = vaultContract.vaultOwner(_vaultId);

        (uint256 collateralValueTimes100, uint256 debtValue) = calculateCollateralProperties(vaultContract.vaultCollateral(_vaultId), vaultContract.vaultDebt(_vaultId) );

        uint256 collateralPercentage = collateralValueTimes100.div(debtValue);

        require(collateralPercentage < _minimumCollateralPercentage, "Vault is not below minimum collateral percentage");
    }

    function checkCost (uint256 _vaultId) public view returns(uint256){
        address ogOwner = vaultContract.vaultOwner(_vaultId);

        (uint256 collateralValueTimes100, uint256 debtValue) = calculateCollateralProperties(vaultContract.vaultCollateral(_vaultId), vaultContract.vaultDebt(_vaultId) );

        uint256 collateralPercentage = collateralValueTimes100.div(debtValue);

        debtValue = debtValue.div(100000000);

        return debtValue.div(debtRatio);
    }


    function checkExtract (uint256 _vaultId) public view returns(uint256){
        address ogOwner = vaultContract.vaultOwner(_vaultId);

        (uint256 collateralValueTimes100, uint256 debtValue) = calculateCollateralProperties(vaultContract.vaultCollateral(_vaultId), vaultContract.vaultDebt(_vaultId) );

        uint256 collateralPercentage = collateralValueTimes100.div(debtValue);

        uint256 halfDebt = debtValue.div(debtRatio);

        uint256 ethExtract = halfDebt.mul(11).div(10).div(vaultContract.getEthPriceSource());

        return ethExtract;
    }

    function checkValid( uint256 _vaultId ) public view returns(bool, uint256, uint256, uint256) {

        (uint256 collateralValueTimes100, uint256 ogDebtValue) = calculateCollateralProperties(vaultContract.vaultCollateral(_vaultId), vaultContract.vaultDebt(_vaultId) );

        uint256 collateralPercentage = collateralValueTimes100.div(ogDebtValue);

        uint256 halfDebt = ogDebtValue.div(debtRatio);

        uint256 ethExtract = halfDebt.mul(11).div(10).div(vaultContract.getEthPriceSource());

        uint256 newCollateral = vaultContract.vaultCollateral(_vaultId).sub(ethExtract);

        halfDebt = halfDebt.div(100000000);

        return (isValidCollateral(newCollateral, halfDebt), newCollateral, halfDebt, ethExtract);
    }

    function checkCollat(uint256 _vaultId) public view returns(uint256, uint256) {
        return calculateCollateralProperties(vaultContract.vaultCollateral(_vaultId), vaultContract.vaultDebt(_vaultId) );
    }

    function checkGhostdaiBalance(address _address) public view returns (uint256){
        return vaultContract.balanceOf(_address);
    }

    function liquidateVault(uint256 _vaultId) public nonReentrant {

        uint256 ogBalance = vaultContract.balanceOf(address(this));

        vaultContract.transfer(admin, ogBalance);

        address ogOwner = vaultContract.vaultOwner(_vaultId);

        (uint256 collateralValueTimes100, uint256 ogDebtValue) = calculateCollateralProperties(vaultContract.vaultCollateral(_vaultId), vaultContract.vaultDebt(_vaultId) );

        uint256 collateralPercentage = collateralValueTimes100.div(ogDebtValue);

        uint256 ethExtract = checkExtract ( _vaultId);

        require(collateralPercentage < _minimumCollateralPercentage, "Vault is not below minimum collateral percentage");

        uint256 halfDebt = checkCost(_vaultId);


        vaultContract.transferFrom(msg.sender, address(this), halfDebt);
        vaultContract.buyRiskyVault(_vaultId);

        uint256 newBalance = vaultContract.balanceOf(address(this));

        vaultContract.payBackToken(_vaultId, newBalance);

        vaultContract.withdrawCollateral(_vaultId, ethExtract );

        vaultContract.transferVault(_vaultId, ogOwner);

        ethDebt[msg.sender] = ethDebt[msg.sender].add(ethExtract);
    }

    function() external payable { }
}

Contract ABI

[{"constant":true,"inputs":[{"name":"_vaultId","type":"uint256"}],"name":"checkCost","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"gainRatio","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"ethDebt","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_vaultId","type":"uint256"}],"name":"checkExtract","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_admin","type":"address"}],"name":"setAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_vaultId","type":"uint256"}],"name":"checkCollat","outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_vaultId","type":"uint256"}],"name":"checkValid","outputs":[{"name":"","type":"bool"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_vaultId","type":"uint256"}],"name":"liquidateVault","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_address","type":"address"}],"name":"checkGhostdaiBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_vaultId","type":"uint256"}],"name":"checkLiquidation","outputs":[],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"debtRatio","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"getPaid","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_debtRatio","type":"uint256"}],"name":"setDebtRatio","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"admin","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_gainRatio","type":"uint256"}],"name":"setGainRatio","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_vaultContract","type":"address"},{"name":"_ghostdai","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"}]

608060405234801561001057600080fd5b50604051604080611a918339810180604052604081101561003057600080fd5b50805160209091015160008054600160ff199091168117610100600160a81b0319166101003302178255600280546001600160a01b03199081166001600160a01b039687161782558254169490931693909317909255600355600b60045560966005556119ee9081906100a390396000f3fe6080604052600436106100e85760003560e01c806390cf0bba1161008a578063cf41d6f811610059578063cf41d6f8146102fc578063eb6a887d14610311578063f851a4401461033b578063ffc73da71461036c576100e8565b806390cf0bba14610260578063a4e9e2f91461028a578063b86f6aef146102bd578063cea55f57146102e7576100e8565b806356572ac0116100c657806356572ac01461016e578063704b6c02146101985780637b53f790146101cb5780638f11039d1461020e576100e8565b806311b4a832146100ea578063311f392a1461012657806348e6e3921461013b575b005b3480156100f657600080fd5b506101146004803603602081101561010d57600080fd5b5035610396565b60408051918252519081900360200190f35b34801561013257600080fd5b5061011461056b565b34801561014757600080fd5b506101146004803603602081101561015e57600080fd5b50356001600160a01b0316610571565b34801561017a57600080fd5b506101146004803603602081101561019157600080fd5b5035610583565b3480156101a457600080fd5b506100e8600480360360208110156101bb57600080fd5b50356001600160a01b031661073b565b3480156101d757600080fd5b506101f5600480360360208110156101ee57600080fd5b50356107bf565b6040805192835260208301919091528051918290030190f35b34801561021a57600080fd5b506102386004803603602081101561023157600080fd5b503561089b565b6040805194151585526020850193909352838301919091526060830152519081900360800190f35b34801561026c57600080fd5b506100e86004803603602081101561028357600080fd5b5035610acc565b34801561029657600080fd5b50610114600480360360208110156102ad57600080fd5b50356001600160a01b0316611092565b3480156102c957600080fd5b506100e8600480360360208110156102e057600080fd5b5035611118565b3480156102f357600080fd5b506101146112cd565b34801561030857600080fd5b506100e86112d3565b34801561031d57600080fd5b506100e86004803603602081101561033457600080fd5b50356113ee565b34801561034757600080fd5b5061035061144f565b604080516001600160a01b039092168252519081900360200190f35b34801561037857600080fd5b506100e86004803603602081101561038f57600080fd5b5035611463565b60025460408051600160e01b633c2ecfe502815260048101849052905160009283926001600160a01b0390911691633c2ecfe591602480820192602092909190829003018186803b1580156103ea57600080fd5b505afa1580156103fe573d6000803e3d6000fd5b505050506040513d602081101561041457600080fd5b505160025460408051600160e01b63d4a9b2c5028152600481018790529051929350600092839261051d926001600160a01b039091169163d4a9b2c591602480820192602092909190829003018186803b15801561047157600080fd5b505afa158015610485573d6000803e3d6000fd5b505050506040513d602081101561049b57600080fd5b505160025460408051600160e01b63d310f49b028152600481018a905290516001600160a01b039092169163d310f49b91602480820192602092909190829003018186803b1580156104ec57600080fd5b505afa158015610500573d6000803e3d6000fd5b505050506040513d602081101561051657600080fd5b50516114c4565b90925090506000610534838363ffffffff6116eb16565b905061054a826305f5e10063ffffffff6116eb16565b9150610561600354836116eb90919063ffffffff16565b9695505050505050565b60045481565b60066020526000908152604090205481565b60025460408051600160e01b633c2ecfe502815260048101849052905160009283926001600160a01b0390911691633c2ecfe591602480820192602092909190829003018186803b1580156105d757600080fd5b505afa1580156105eb573d6000803e3d6000fd5b505050506040513d602081101561060157600080fd5b505160025460408051600160e01b63d4a9b2c5028152600481018790529051929350600092839261065e926001600160a01b039091169163d4a9b2c591602480820192602092909190829003018186803b15801561047157600080fd5b90925090506000610675838363ffffffff6116eb16565b9050600061068e600354846116eb90919063ffffffff16565b9050600061072f600260009054906101000a90046001600160a01b03166001600160a01b03166398c3f2db6040518163ffffffff1660e01b815260040160206040518083038186803b1580156106e357600080fd5b505afa1580156106f7573d6000803e3d6000fd5b505050506040513d602081101561070d57600080fd5b5051610723600a8186600b63ffffffff61173616565b9063ffffffff6116eb16565b98975050505050505050565b60005461010090046001600160a01b031633146107975760408051600160e51b62461bcd02815260206004820152600f6024820152600160881b6e73657220706c73206e6f206861636b02604482015290519081900360640190fd5b600080546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b60025460408051600160e01b63d4a9b2c50281526004810184905290516000928392610892926001600160a01b039092169163d4a9b2c591602480820192602092909190829003018186803b15801561081757600080fd5b505afa15801561082b573d6000803e3d6000fd5b505050506040513d602081101561084157600080fd5b505160025460408051600160e01b63d310f49b0281526004810188905290516001600160a01b039092169163d310f49b91602480820192602092909190829003018186803b1580156104ec57600080fd5b91509150915091565b60008060008060008061097b600260009054906101000a90046001600160a01b03166001600160a01b031663d4a9b2c5896040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561090057600080fd5b505afa158015610914573d6000803e3d6000fd5b505050506040513d602081101561092a57600080fd5b505160025460408051600160e01b63d310f49b028152600481018c905290516001600160a01b039092169163d310f49b91602480820192602092909190829003018186803b1580156104ec57600080fd5b90925090506000610992838363ffffffff6116eb16565b905060006109ab600354846116eb90919063ffffffff16565b90506000610a00600260009054906101000a90046001600160a01b03166001600160a01b03166398c3f2db6040518163ffffffff1660e01b815260040160206040518083038186803b1580156106e357600080fd5b90506000610a9982600260009054906101000a90046001600160a01b03166001600160a01b031663d4a9b2c58e6040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610a6157600080fd5b505afa158015610a75573d6000803e3d6000fd5b505050506040513d6020811015610a8b57600080fd5b50519063ffffffff61179616565b9050610aaf836305f5e10063ffffffff6116eb16565b9250610abb81846117d8565b9b909a509198509650945050505050565b60005460ff161515610b285760408051600160e51b62461bcd02815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6000805460ff1916815560025460408051600160e01b6370a0823102815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015610b8057600080fd5b505afa158015610b94573d6000803e3d6000fd5b505050506040513d6020811015610baa57600080fd5b50516002546000805460408051600160e01b63a9059cbb0281526001600160a01b036101009093048316600482015260248101869052905194955092169263a9059cbb926044808201936020939283900390910190829087803b158015610c1057600080fd5b505af1158015610c24573d6000803e3d6000fd5b505050506040513d6020811015610c3a57600080fd5b505060025460408051600160e01b633c2ecfe50281526004810185905290516000926001600160a01b031691633c2ecfe5916024808301926020929190829003018186803b158015610c8b57600080fd5b505afa158015610c9f573d6000803e3d6000fd5b505050506040513d6020811015610cb557600080fd5b505160025460408051600160e01b63d4a9b2c50281526004810187905290519293506000928392610d12926001600160a01b039091169163d4a9b2c591602480820192602092909190829003018186803b15801561047157600080fd5b90925090506000610d29838363ffffffff6116eb16565b90506000610d3687610583565b6005549091508210610d7c57604051600160e51b62461bcd0281526004018080602001828103825260308152602001806119936030913960400191505060405180910390fd5b6000610d8788610396565b60025460408051600160e01b6323b872dd0281523360048201523060248201526044810184905290519293506001600160a01b03909116916323b872dd916064808201926020929091908290030181600087803b158015610de757600080fd5b505af1158015610dfb573d6000803e3d6000fd5b505050506040513d6020811015610e1157600080fd5b505060025460408051600160e01b63ce77f243028152600481018b905290516001600160a01b039092169163ce77f2439160248082019260009290919082900301818387803b158015610e6357600080fd5b505af1158015610e77573d6000803e3d6000fd5b505060025460408051600160e01b6370a082310281523060048201529051600094506001600160a01b0390921692506370a08231916024808301926020929190829003018186803b158015610ecb57600080fd5b505afa158015610edf573d6000803e3d6000fd5b505050506040513d6020811015610ef557600080fd5b505160025460408051600160e11b6342d79e0b028152600481018d90526024810184905290519293506001600160a01b03909116916385af3c169160448082019260009290919082900301818387803b158015610f5157600080fd5b505af1158015610f65573d6000803e3d6000fd5b505060025460408051600160e01b63767a7b05028152600481018e90526024810188905290516001600160a01b03909216935063767a7b05925060448082019260009290919082900301818387803b158015610fc057600080fd5b505af1158015610fd4573d6000803e3d6000fd5b505060025460408051600160e01b633e61facd028152600481018e90526001600160a01b038c811660248301529151919092169350633e61facd9250604480830192600092919082900301818387803b15801561103057600080fd5b505af1158015611044573d6000803e3d6000fd5b505033600090815260066020526040902054611069925090508463ffffffff61180d16565b33600090815260066020526040812091909155805460ff19166001179055505050505050505050565b60025460408051600160e01b6370a082310281526001600160a01b038481166004830152915160009392909216916370a0823191602480820192602092909190829003018186803b1580156110e657600080fd5b505afa1580156110fa573d6000803e3d6000fd5b505050506040513d602081101561111057600080fd5b505192915050565b60025460408051600160e01b633c2ecfe50281526004810184905290516000926001600160a01b031691633c2ecfe5916024808301926020929190829003018186803b15801561116757600080fd5b505afa15801561117b573d6000803e3d6000fd5b505050506040513d602081101561119157600080fd5b505160025460408051600160e01b63d4a9b2c50281526004810186905290519293506000928392611269926001600160a01b039091169163d4a9b2c591602480820192602092909190829003018186803b1580156111ee57600080fd5b505afa158015611202573d6000803e3d6000fd5b505050506040513d602081101561121857600080fd5b505160025460408051600160e01b63d310f49b0281526004810189905290516001600160a01b039092169163d310f49b91602480820192602092909190829003018186803b1580156104ec57600080fd5b90925090506000611280838363ffffffff6116eb16565b60055490915081106112c657604051600160e51b62461bcd0281526004018080602001828103825260308152602001806119936030913960400191505060405180910390fd5b5050505050565b60035481565b60005460ff16151561132f5760408051600160e51b62461bcd02815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6000805460ff1916815533815260066020526040902054151561139c5760408051600160e51b62461bcd02815260206004820152601c60248201527f446f6e2774206861766520616e797468696e6720666f7220796f752e00000000604482015290519081900360640190fd5b33600081815260066020526040808220805490839055905190929183156108fc02918491818181858888f193505050501580156113dd573d6000803e3d6000fd5b50506000805460ff19166001179055565b60005461010090046001600160a01b0316331461144a5760408051600160e51b62461bcd02815260206004820152600f6024820152600160881b6e73657220706c73206e6f206861636b02604482015290519081900360640190fd5b600355565b60005461010090046001600160a01b031681565b60005461010090046001600160a01b031633146114bf5760408051600160e51b62461bcd02815260206004820152600f6024820152600160881b6e73657220706c73206e6f206861636b02604482015290519081900360640190fd5b600455565b600080600260009054906101000a90046001600160a01b03166001600160a01b03166398c3f2db6040518163ffffffff1660e01b815260040160206040518083038186803b15801561151557600080fd5b505afa158015611529573d6000803e3d6000fd5b505050506040513d602081101561153f57600080fd5b5051151561154957fe5b600260009054906101000a90046001600160a01b03166001600160a01b031663cd44db1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561159757600080fd5b505afa1580156115ab573d6000803e3d6000fd5b505050506040513d60208110156115c157600080fd5b505115156115cb57fe5b6000611657600260009054906101000a90046001600160a01b03166001600160a01b03166398c3f2db6040518163ffffffff1660e01b815260040160206040518083038186803b15801561161e57600080fd5b505afa158015611632573d6000803e3d6000fd5b505050506040513d602081101561164857600080fd5b5051869063ffffffff61173616565b90508481101561166357fe5b60006116b6600260009054906101000a90046001600160a01b03166001600160a01b031663cd44db1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561161e57600080fd5b9050848110156116c257fe5b60006116d583606463ffffffff61173616565b90508281116116e057fe5b969095509350505050565b600061172d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061186a565b90505b92915050565b600082151561174757506000611730565b82820282848281151561175657fe5b041461172d57604051600160e51b62461bcd0281526004018080602001828103825260218152602001806119726021913960400191505060405180910390fd5b600061172d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611913565b60008060006117e785856114c4565b909250905060006117fe838363ffffffff6116eb16565b60055411159695505050505050565b60008282018381101561172d5760408051600160e51b62461bcd02815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000818315156118fb57604051600160e51b62461bcd0281526004018080602001828103825283818151815260200191508051906020019080838360005b838110156118c05781810151838201526020016118a8565b50505050905090810190601f1680156118ed5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581151561190957fe5b0495945050505050565b6000818484111561196957604051600160e51b62461bcd028152600401808060200182810382528381815181526020019150805190602001908083836000838110156118c05781810151838201526020016118a8565b50505090039056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775661756c74206973206e6f742062656c6f77206d696e696d756d20636f6c6c61746572616c2070657263656e74616765a165627a7a72305820b3cc4d2ba790d23ad06b60c85dab313d4ee16c424c5cba3697cdc68f0880d2ca0029000000000000000000000000c25eb1a9ed37bb1aa5c7156db46507df939116fc000000000000000000000000c9f654d481e79d01448030b08516b7f9fcf71e13

Deployed ByteCode Sourcemap

31657:6372:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34570:486;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34570:486:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;34570:486:0;;:::i;:::-;;;;;;;;;;;;;;;;31854:24;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31854:24:0;;;:::i;31940:42::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31940:42:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31940:42:0;-1:-1:-1;;;;;31940:42:0;;:::i;35066:579::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35066:579:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;35066:579:0;;:::i;32306:128::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32306:128:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;32306:128:0;-1:-1:-1;;;;;32306:128:0;;:::i;36417:209::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36417:209:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;36417:209:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;35653:756;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35653:756:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;35653:756:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36778:1209;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36778:1209:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;36778:1209:0;;:::i;36634:136::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36634:136:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;36634:136:0;-1:-1:-1;;;;;36634:136:0;;:::i;34053:509::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34053:509:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;34053:509:0;;:::i;31823:24::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31823:24:0;;;:::i;33807:238::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33807:238:0;;;:::i;32594:144::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32594:144:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;32594:144:0;;:::i;31738:20::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31738:20:0;;;:::i;:::-;;;;-1:-1:-1;;;;;31738:20:0;;;;;;;;;;;;;;32442:144;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32442:144:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;32442:144:0;;:::i;34570:486::-;34665:13;;:34;;;-1:-1:-1;;;;;34665:34:0;;;;;;;;;;34628:7;;;;-1:-1:-1;;;;;34665:13:0;;;;:24;;:34;;;;;;;;;;;;;;;:13;:34;;;5:2:-1;;;;30:1;27;20:12;5:2;34665:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;34665:34:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;34665:34:0;34797:13;;:39;;;-1:-1:-1;;;;;34797:39:0;;;;;;;;;;34665:34;;-1:-1:-1;34713:31:0;;;;34767:106;;-1:-1:-1;;;;;34797:13:0;;;;:29;;:39;;;;;34665:34;;34797:39;;;;;;;;:13;:39;;;5:2:-1;;;;30:1;27;20:12;5:2;34797:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;34797:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;34797:39:0;34838:13;;:33;;;-1:-1:-1;;;;;34838:33:0;;;;;;;;;;-1:-1:-1;;;;;34838:13:0;;;;:23;;:33;;;;;34797:39;;34838:33;;;;;;;;:13;:33;;;5:2:-1;;;;30:1;27;20:12;5:2;34838:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;34838:33:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;34838:33:0;34767:29;:106::i;:::-;34712:161;;-1:-1:-1;34712:161:0;-1:-1:-1;34886:28:0;34917:38;34712:161;;34917:38;:27;:38;:::i;:::-;34886:69;-1:-1:-1;34980:24:0;:9;34994;34980:24;:13;:24;:::i;:::-;34968:36;;35024:24;35038:9;;35024;:13;;:24;;;;:::i;:::-;35017:31;34570:486;-1:-1:-1;;;;;;34570:486:0:o;31854:24::-;;;;:::o;31940:42::-;;;;;;;;;;;;;:::o;35066:579::-;35164:13;;:34;;;-1:-1:-1;;;;;35164:34:0;;;;;;;;;;35127:7;;;;-1:-1:-1;;;;;35164:13:0;;;;:24;;:34;;;;;;;;;;;;;;;:13;:34;;;5:2:-1;;;;30:1;27;20:12;5:2;35164:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;35164:34:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;35164:34:0;35296:13;;:39;;;-1:-1:-1;;;;;35296:39:0;;;;;;;;;;35164:34;;-1:-1:-1;35212:31:0;;;;35266:106;;-1:-1:-1;;;;;35296:13:0;;;;:29;;:39;;;;;35164:34;;35296:39;;;;;;;;:13;:39;;;5:2:-1;;;;30:1;27;20:12;35266:106:0;35211:161;;-1:-1:-1;35211:161:0;-1:-1:-1;35385:28:0;35416:38;35211:161;;35416:38;:27;:38;:::i;:::-;35385:69;;35467:16;35486:24;35500:9;;35486;:13;;:24;;;;:::i;:::-;35467:43;;35523:18;35544:63;35573:13;;;;;;;;;-1:-1:-1;;;;;35573:13:0;-1:-1:-1;;;;;35573:31:0;;:33;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35573:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;35573:33:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;35573:33:0;35544:24;35565:2;35544:24;:8;35557:2;35544:16;:12;:16;:::i;:::-;:20;:24;:20;:24;:::i;:63::-;35523:84;35066:579;-1:-1:-1;;;;;;;;35066:579:0:o;32306:128::-;32366:5;;;;;-1:-1:-1;;;;;32366:5:0;32373:10;32366:17;32358:45;;;;;-1:-1:-1;;;;;32358:45:0;;;;;;;;;;;;-1:-1:-1;;;;;32358:45:0;;;;;;;;;;;;;;;32414:5;:12;;-1:-1:-1;;;;;32414:12:0;;;;;-1:-1:-1;;;;;;32414:12:0;;;;;;;;;32306:128::o;36417:209::-;36542:13;;:39;;;-1:-1:-1;;;;;36542:39:0;;;;;;;;;;36476:7;;;;36512:106;;-1:-1:-1;;;;;36542:13:0;;;;:29;;:39;;;;;;;;;;;;;;;:13;:39;;;5:2:-1;;;;30:1;27;20:12;5:2;36542:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;36542:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;36542:39:0;36583:13;;:33;;;-1:-1:-1;;;;;36583:33:0;;;;;;;;;;-1:-1:-1;;;;;36583:13:0;;;;:23;;:33;;;;;36542:39;;36583:33;;;;;;;;:13;:33;;;5:2:-1;;;;30:1;27;20:12;36512:106:0;36505:113;;;;36417:209;;;:::o;35653:756::-;35713:4;35719:7;35728;35737;35760:31;35793:19;35816:106;35846:13;;;;;;;;;-1:-1:-1;;;;;35846:13:0;-1:-1:-1;;;;;35846:29:0;;35876:8;35846:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35846:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;35846:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;35846:39:0;35887:13;;:33;;;-1:-1:-1;;;;;35887:33:0;;;;;;;;;;-1:-1:-1;;;;;35887:13:0;;;;:23;;:33;;;;;35846:39;;35887:33;;;;;;;;:13;:33;;;5:2:-1;;;;30:1;27;20:12;35816:106:0;35759:163;;-1:-1:-1;35759:163:0;-1:-1:-1;35935:28:0;35966:40;35759:163;;35966:40;:27;:40;:::i;:::-;35935:71;;36019:16;36038:26;36054:9;;36038:11;:15;;:26;;;;:::i;:::-;36019:45;;36077:18;36098:63;36127:13;;;;;;;;;-1:-1:-1;;;;;36127:13:0;-1:-1:-1;;;;;36127:31:0;;:33;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;36098:63:0;36077:84;;36174:21;36198:55;36242:10;36198:13;;;;;;;;;-1:-1:-1;;;;;36198:13:0;-1:-1:-1;;;;;36198:29:0;;36228:8;36198:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36198:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;36198:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;36198:39:0;;:55;:43;:55;:::i;:::-;36174:79;-1:-1:-1;36277:23:0;:8;36290:9;36277:23;:12;:23;:::i;:::-;36266:34;;36321:42;36339:13;36354:8;36321:17;:42::i;:::-;36313:88;36365:13;;-1:-1:-1;36380:8:0;;-1:-1:-1;36380:8:0;-1:-1:-1;35653:756:0;-1:-1:-1;;;;;35653:756:0:o;36778:1209::-;19919:11;;;;19911:55;;;;;;;-1:-1:-1;;;;;19911:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;20058:5;20044:19;;-1:-1:-1;;20044:19:0;;;36873:13;;:38;;;-1:-1:-1;;;;;36873:38:0;;36905:4;36873:38;;;;;;-1:-1:-1;;;;;36873:13:0;;;;:23;;:38;;;;;;;;;;;;;;;:13;:38;;;5:2:-1;;;;30:1;27;20:12;5:2;36873:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;36873:38:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;36873:38:0;36924:13;;;36947:5;;36924:40;;;-1:-1:-1;;;;;36924:40:0;;-1:-1:-1;;;;;36924:13:0;36947:5;;;;;36924:40;;;;;;;;;;;;36873:38;;-1:-1:-1;36924:13:0;;;:22;;:40;;;;;36873:38;;36924:40;;;;;;;;;;:13;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;36924:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;36924:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;36995:13:0;;:34;;;-1:-1:-1;;;;;36995:34:0;;;;;;;;;;36977:15;;-1:-1:-1;;;;;36995:13:0;;:24;;:34;;;;;36924:40;;36995:34;;;;;;;:13;:34;;;5:2:-1;;;;30:1;27;20:12;5:2;36995:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;36995:34:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;36995:34:0;37129:13;;:39;;;-1:-1:-1;;;;;37129:39:0;;;;;;;;;;36995:34;;-1:-1:-1;37043:31:0;;;;37099:106;;-1:-1:-1;;;;;37129:13:0;;;;:29;;:39;;;;;36995:34;;37129:39;;;;;;;;:13;:39;;;5:2:-1;;;;30:1;27;20:12;37099:106:0;37042:163;;-1:-1:-1;37042:163:0;-1:-1:-1;37218:28:0;37249:40;37042:163;;37249:40;:27;:40;:::i;:::-;37218:71;;37302:18;37323:24;37338:8;37323:12;:24::i;:::-;37391:28;;37302:45;;-1:-1:-1;37368:51:0;;37360:112;;;;-1:-1:-1;;;;;37360:112:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37485:16;37504:19;37514:8;37504:9;:19::i;:::-;37538:13;;:63;;;-1:-1:-1;;;;;37538:63:0;;37565:10;37538:63;;;;37585:4;37538:63;;;;;;;;;;;;37485:38;;-1:-1:-1;;;;;;37538:13:0;;;;:26;;:63;;;;;;;;;;;;;;;:13;;:63;;;5:2:-1;;;;30:1;27;20:12;5:2;37538:63:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;37538:63:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;37612:13:0;;:37;;;-1:-1:-1;;;;;37612:37:0;;;;;;;;;;-1:-1:-1;;;;;37612:13:0;;;;:27;;:37;;;;;:13;;:37;;;;;;;;:13;;:37;;;5:2:-1;;;;30:1;27;20:12;5:2;37612:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;37683:13:0;;:38;;;-1:-1:-1;;;;;37683:38:0;;37715:4;37683:38;;;;;;37662:18;;-1:-1:-1;;;;;;37683:13:0;;;;-1:-1:-1;37683:23:0;;:38;;;;;;;;;;;;;;:13;:38;;;5:2:-1;;;;30:1;27;20:12;5:2;37683:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;37683:38:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;37683:38:0;37734:13;;:48;;;-1:-1:-1;;;;;37734:48:0;;;;;;;;;;;;;;;;37683:38;;-1:-1:-1;;;;;;37734:13:0;;;;:26;;:48;;;;;:13;;:48;;;;;;;;:13;;:48;;;5:2:-1;;;;30:1;27;20:12;5:2;37734:48:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;37795:13:0;;:55;;;-1:-1:-1;;;;;37795:55:0;;;;;;;;;;;;;;;;-1:-1:-1;;;;;37795:13:0;;;;-1:-1:-1;37795:32:0;;-1:-1:-1;37795:55:0;;;;;:13;;:55;;;;;;;;:13;;:55;;;5:2:-1;;;;30:1;27;20:12;5:2;37795:55:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;37863:13:0;;:46;;;-1:-1:-1;;;;;37863:46:0;;;;;;;;-1:-1:-1;;;;;37863:46:0;;;;;;;;;:13;;;;;-1:-1:-1;37863:27:0;;-1:-1:-1;37863:46:0;;;;;:13;;:46;;;;;;;:13;;:46;;;5:2:-1;;;;30:1;27;20:12;5:2;37863:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;37952:10:0;37944:19;;;;:7;:19;;;;;;:35;;-1:-1:-1;37944:19:0;-1:-1:-1;37968:10:0;37944:35;:23;:35;:::i;:::-;37930:10;37922:19;;;;:7;:19;;;;;:57;;;;20224:18;;-1:-1:-1;;20224:18:0;20238:4;20224:18;;;-1:-1:-1;;;;;;;;;36778:1209:0:o;36634:136::-;36729:13;;:33;;;-1:-1:-1;;;;;36729:33:0;;-1:-1:-1;;;;;36729:33:0;;;;;;;;;36703:7;;36729:13;;;;;:23;;:33;;;;;;;;;;;;;;;:13;:33;;;5:2:-1;;;;30:1;27;20:12;5:2;36729:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;36729:33:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;36729:33:0;;36634:136;-1:-1:-1;;36634:136:0:o;34053:509::-;34139:13;;:34;;;-1:-1:-1;;;;;34139:34:0;;;;;;;;;;34121:15;;-1:-1:-1;;;;;34139:13:0;;:24;;:34;;;;;;;;;;;;;;:13;:34;;;5:2:-1;;;;30:1;27;20:12;5:2;34139:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;34139:34:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;34139:34:0;34271:13;;:39;;;-1:-1:-1;;;;;34271:39:0;;;;;;;;;;34139:34;;-1:-1:-1;34187:31:0;;;;34241:106;;-1:-1:-1;;;;;34271:13:0;;;;:29;;:39;;;;;34139:34;;34271:39;;;;;;;;:13;:39;;;5:2:-1;;;;30:1;27;20:12;5:2;34271:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;34271:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;34271:39:0;34312:13;;:33;;;-1:-1:-1;;;;;34312:33:0;;;;;;;;;;-1:-1:-1;;;;;34312:13:0;;;;:23;;:33;;;;;34271:39;;34312:33;;;;;;;;:13;:33;;;5:2:-1;;;;30:1;27;20:12;34241:106:0;34186:161;;-1:-1:-1;34186:161:0;-1:-1:-1;34360:28:0;34391:38;34186:161;;34391:38;:27;:38;:::i;:::-;34473:28;;34360:69;;-1:-1:-1;34450:51:0;;34442:112;;;;-1:-1:-1;;;;;34442:112:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34053:509;;;;;:::o;31823:24::-;;;;:::o;33807:238::-;19919:11;;;;19911:55;;;;;;;-1:-1:-1;;;;;19911:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;20058:5;20044:19;;-1:-1:-1;;20044:19:0;;;33873:10;33865:19;;:7;:19;;;;;;:22;;33857:63;;;;;-1:-1:-1;;;;;33857:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;33956:10;33931:14;33948:19;;;:7;:19;;;;;;;;33978:21;;;;34010:27;;33948:19;;33956:10;34010:27;;;;;33948:19;;34010:27;33931:14;34010:27;33948:19;33956:10;34010:27;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;20224:11:0;:18;;-1:-1:-1;;20224:18:0;20238:4;20224:18;;;33807:238::o;32594:144::-;32662:5;;;;;-1:-1:-1;;;;;32662:5:0;32669:10;32662:17;32654:45;;;;;-1:-1:-1;;;;;32654:45:0;;;;;;;;;;;;-1:-1:-1;;;;;32654:45:0;;;;;;;;;;;;;;;32710:9;:20;32594:144::o;31738:20::-;;;;;;-1:-1:-1;;;;;31738:20:0;;:::o;32442:144::-;32510:5;;;;;-1:-1:-1;;;;;32510:5:0;32517:10;32510:17;32502:45;;;;;-1:-1:-1;;;;;32502:45:0;;;;;;;;;;;;-1:-1:-1;;;;;32502:45:0;;;;;;;;;;;;;;;32558:9;:20;32442:144::o;32746:681::-;32841:7;32850;32877:13;;;;;;;;;-1:-1:-1;;;;;32877:13:0;-1:-1:-1;;;;;32877:31:0;;:33;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32877:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32877:33:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;32877:33:0;:38;;32870:46;;;;32934:13;;;;;;;;;-1:-1:-1;;;;;32934:13:0;-1:-1:-1;;;;;32934:33:0;;:35;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32934:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32934:35:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;32934:35:0;:40;;32927:48;;;;32988:23;33014:50;33029:13;;;;;;;;;-1:-1:-1;;;;;33029:13:0;-1:-1:-1;;;;;33029:31:0;;:33;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33029:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;33029:33:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;33029:33:0;33014:10;;:50;:14;:50;:::i;:::-;32988:76;-1:-1:-1;33084:29:0;;;;33077:37;;;;33127:17;33147:45;33156:13;;;;;;;;;-1:-1:-1;;;;;33156:13:0;-1:-1:-1;;;;;33156:33:0;;:35;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;33147:45:0;33127:65;-1:-1:-1;33212:17:0;;;;33205:25;;;;33243:31;33277:24;:15;33297:3;33277:24;:19;:24;:::i;:::-;33243:58;-1:-1:-1;33321:41:0;;;33314:49;;;;33384:23;33409:9;;-1:-1:-1;32746:681:0;-1:-1:-1;;;;32746:681:0:o;7300:132::-;7358:7;7385:39;7389:1;7392;7385:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;7378:46;;7300:132;;;;;:::o;6361:471::-;6419:7;6664:6;;6660:47;;;-1:-1:-1;6694:1:0;6687:8;;6660:47;6731:5;;;6735:1;6731;:5;6755;;;;;;;;:10;6747:56;;;;-1:-1:-1;;;;;6747:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5445:136;5503:7;5530:43;5534:1;5537;5530:43;;;;;;;;;;;;;;;;;:3;:43::i;33435:364::-;33518:4;33536:31;33569:17;33590:47;33620:10;33632:4;33590:29;:47::i;:::-;33535:102;;-1:-1:-1;33535:102:0;-1:-1:-1;33650:28:0;33681:38;33535:102;;33681:38;:27;:38;:::i;:::-;33763:28;;-1:-1:-1;33739:52:0;;33435:364;-1:-1:-1;;;;;;33435:364:0:o;4989:181::-;5047:7;5079:5;;;5103:6;;;;5095:46;;;;;-1:-1:-1;;;;;5095:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;7962:345;8048:7;8150:12;8143:5;;;8135:28;;;;-1:-1:-1;;;;;8135:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;8135:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8174:9;8190:1;8186;:5;;;;;;;;;7962:345;-1:-1:-1;;;;;7962:345:0:o;5918:192::-;6004:7;6040:12;6032:6;;;;6024:29;;;;-1:-1:-1;;;;;6024:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;6024:29:0;-1:-1:-1;;;6076:5:0;;;5918:192::o

Swarm Source

bzzr://b3cc4d2ba790d23ad06b60c85dab313d4ee16c424c5cba3697cdc68f0880d2ca
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading