Contract 0xD6e9787430f5F88725B3f55C5954b7c8ec61DaA6

 
Ad
Crypto.com
Txn Hash Method
Block
From
To
Value
0xbd66dabaaf619a18a9dc3914bbdc50434a806847de09fe9008e4893bded93ec3Create Cash Box111869992020-11-03 22:51:32262 days 6 hrs ago0xa5b5ccabcc5173bcffa0612dc5de4466f4ba8f7f IN  0xd6e9787430f5f88725b3f55c5954b7c8ec61daa60 Ether0.03745092320.1
0xf361e0c400efc90a6a4c085d54fc6374583b91bf051367add656493c7db4b380Create Cash Box111868312020-11-03 22:11:55262 days 7 hrs ago0xa5b5ccabcc5173bcffa0612dc5de4466f4ba8f7f IN  0xd6e9787430f5f88725b3f55c5954b7c8ec61daa60 Ether0.0317204717
0x30865f16046668643bfeb94448261ad2a7080340410bcef011a2e85ff0465257Create Cash Box111868192020-11-03 22:09:07262 days 7 hrs ago0xa5b5ccabcc5173bcffa0612dc5de4466f4ba8f7f IN  0xd6e9787430f5f88725b3f55c5954b7c8ec61daa60 Ether0.0316592717
0xc96435d04d6f9a628691fe27f2b7e48055a41f63afe996fbbc0e7f972d89aae9Create Cash Box111867982020-11-03 22:05:03262 days 7 hrs ago0xa5b5ccabcc5173bcffa0612dc5de4466f4ba8f7f IN  0xd6e9787430f5f88725b3f55c5954b7c8ec61daa60 Ether0.0335863818
0xd9f4c65d674f63e485453bd2041290cfff3d75b5b49be6925177ea516ad6f067Create Cash Box111867782020-11-03 22:00:40262 days 7 hrs ago0xa5b5ccabcc5173bcffa0612dc5de4466f4ba8f7f IN  0xd6e9787430f5f88725b3f55c5954b7c8ec61daa60 Ether0.03372446318.1
0x23e88c4fe6b2cd7a7f3cf7cf1e9b3ac6c791cd246cab3b92bab4b7cd46fbca9cCreate Cash Box111839402020-11-03 11:28:05262 days 17 hrs ago0xa5b5ccabcc5173bcffa0612dc5de4466f4ba8f7f IN  0xd6e9787430f5f88725b3f55c5954b7c8ec61daa60 Ether0.044137031423.7
0x241f62ac2a7671e012130b2de8125048f82759fa64c1ed6cf743c9781f7143f8Create Cash Box111839282020-11-03 11:24:57262 days 17 hrs ago0xa5b5ccabcc5173bcffa0612dc5de4466f4ba8f7f IN  0xd6e9787430f5f88725b3f55c5954b7c8ec61daa60 Ether0.0465804525
0x2563da2083753a210e41a03de4fe59362492f9337b0289a22a8842efd06624ccCreate Cash Box111839232020-11-03 11:24:03262 days 18 hrs ago0xa5b5ccabcc5173bcffa0612dc5de4466f4ba8f7f IN  0xd6e9787430f5f88725b3f55c5954b7c8ec61daa60 Ether0.0466474525
0xa0e504ff3ef49ad1da46a749196b7ccb38f7cefe30b9d7191376f4e2d133ef49Create Cash Box111839172020-11-03 11:22:52262 days 18 hrs ago0xa5b5ccabcc5173bcffa0612dc5de4466f4ba8f7f IN  0xd6e9787430f5f88725b3f55c5954b7c8ec61daa60 Ether0.044136462623.7
0x7cbe0c1c90458e4030aed6b568b296a4ffb3f810885735a287d8ca18998d38cbCreate Cash Box111839132020-11-03 11:21:39262 days 18 hrs ago0xa5b5ccabcc5173bcffa0612dc5de4466f4ba8f7f IN  0xd6e9787430f5f88725b3f55c5954b7c8ec61daa60 Ether0.044158266623.7
0xb8bb23d798e03812c08f29e6926c54df25c95ec13b3b696737cfc8a87f5a2a4dCreate Cash Box111839032020-11-03 11:19:49262 days 18 hrs ago0xa5b5ccabcc5173bcffa0612dc5de4466f4ba8f7f IN  0xd6e9787430f5f88725b3f55c5954b7c8ec61daa60 Ether0.05224514428
0x39352b58009d306bb6e380740bdcdfb0b26c2bd361e9fd1f5a8c40b404cde50aCreate Cash Box111838662020-11-03 11:13:10262 days 18 hrs ago0xa5b5ccabcc5173bcffa0612dc5de4466f4ba8f7f IN  0xd6e9787430f5f88725b3f55c5954b7c8ec61daa60 Ether0.0521446828
0x0f4a7de9a37afdeb6fe97880ec683f40c80ff961fd5617b11e0d0840dfe34b89Create Cash Box111832092020-11-03 8:50:24262 days 20 hrs ago0xa5b5ccabcc5173bcffa0612dc5de4466f4ba8f7f IN  0xd6e9787430f5f88725b3f55c5954b7c8ec61daa60 Ether0.0653064335
0x712626bfb2db8cd9fc825c1d1b7c0d93b9c6d3810d04c9aade869a254e8a09c5Create Cash Box111831402020-11-03 8:35:19262 days 20 hrs ago0xa5b5ccabcc5173bcffa0612dc5de4466f4ba8f7f IN  0xd6e9787430f5f88725b3f55c5954b7c8ec61daa60 Ether0.0689054737
0x5e10c9f2b466cbfc4176a77ae61846590d4123762f9cf909ca53d9a8f849d0a4Create Cash Box111830562020-11-03 8:16:15262 days 21 hrs ago0xa5b5ccabcc5173bcffa0612dc5de4466f4ba8f7f IN  0xd6e9787430f5f88725b3f55c5954b7c8ec61daa60 Ether0.078509512441.8
0x76bd54721f7be9794be80d573aa4eef03b49f4290c42e5546c2df366e7d54cbc0x60806040111827102020-11-03 6:57:20262 days 22 hrs agoOpenDAO: Deployer IN  Contract Creation0 Ether0.1181034840
[ Download CSV Export 
Latest 15 internal transactions
Parent Txn Hash Block From To Value
0xbd66dabaaf619a18a9dc3914bbdc50434a806847de09fe9008e4893bded93ec3111869992020-11-03 22:51:32262 days 6 hrs ago 0xd6e9787430f5f88725b3f55c5954b7c8ec61daa6  Contract Creation0 Ether
0xf361e0c400efc90a6a4c085d54fc6374583b91bf051367add656493c7db4b380111868312020-11-03 22:11:55262 days 7 hrs ago 0xd6e9787430f5f88725b3f55c5954b7c8ec61daa6  Contract Creation0 Ether
0x30865f16046668643bfeb94448261ad2a7080340410bcef011a2e85ff0465257111868192020-11-03 22:09:07262 days 7 hrs ago 0xd6e9787430f5f88725b3f55c5954b7c8ec61daa6  Contract Creation0 Ether
0xc96435d04d6f9a628691fe27f2b7e48055a41f63afe996fbbc0e7f972d89aae9111867982020-11-03 22:05:03262 days 7 hrs ago 0xd6e9787430f5f88725b3f55c5954b7c8ec61daa6  Contract Creation0 Ether
0xd9f4c65d674f63e485453bd2041290cfff3d75b5b49be6925177ea516ad6f067111867782020-11-03 22:00:40262 days 7 hrs ago 0xd6e9787430f5f88725b3f55c5954b7c8ec61daa6  Contract Creation0 Ether
0x23e88c4fe6b2cd7a7f3cf7cf1e9b3ac6c791cd246cab3b92bab4b7cd46fbca9c111839402020-11-03 11:28:05262 days 17 hrs ago 0xd6e9787430f5f88725b3f55c5954b7c8ec61daa6  Contract Creation0 Ether
0x241f62ac2a7671e012130b2de8125048f82759fa64c1ed6cf743c9781f7143f8111839282020-11-03 11:24:57262 days 17 hrs ago 0xd6e9787430f5f88725b3f55c5954b7c8ec61daa6  Contract Creation0 Ether
0x2563da2083753a210e41a03de4fe59362492f9337b0289a22a8842efd06624cc111839232020-11-03 11:24:03262 days 18 hrs ago 0xd6e9787430f5f88725b3f55c5954b7c8ec61daa6  Contract Creation0 Ether
0xa0e504ff3ef49ad1da46a749196b7ccb38f7cefe30b9d7191376f4e2d133ef49111839172020-11-03 11:22:52262 days 18 hrs ago 0xd6e9787430f5f88725b3f55c5954b7c8ec61daa6  Contract Creation0 Ether
0x7cbe0c1c90458e4030aed6b568b296a4ffb3f810885735a287d8ca18998d38cb111839132020-11-03 11:21:39262 days 18 hrs ago 0xd6e9787430f5f88725b3f55c5954b7c8ec61daa6  Contract Creation0 Ether
0xb8bb23d798e03812c08f29e6926c54df25c95ec13b3b696737cfc8a87f5a2a4d111839032020-11-03 11:19:49262 days 18 hrs ago 0xd6e9787430f5f88725b3f55c5954b7c8ec61daa6  Contract Creation0 Ether
0x39352b58009d306bb6e380740bdcdfb0b26c2bd361e9fd1f5a8c40b404cde50a111838662020-11-03 11:13:10262 days 18 hrs ago 0xd6e9787430f5f88725b3f55c5954b7c8ec61daa6  Contract Creation0 Ether
0x0f4a7de9a37afdeb6fe97880ec683f40c80ff961fd5617b11e0d0840dfe34b89111832092020-11-03 8:50:24262 days 20 hrs ago 0xd6e9787430f5f88725b3f55c5954b7c8ec61daa6  Contract Creation0 Ether
0x712626bfb2db8cd9fc825c1d1b7c0d93b9c6d3810d04c9aade869a254e8a09c5111831402020-11-03 8:35:19262 days 20 hrs ago 0xd6e9787430f5f88725b3f55c5954b7c8ec61daa6  Contract Creation0 Ether
0x5e10c9f2b466cbfc4176a77ae61846590d4123762f9cf909ca53d9a8f849d0a4111830562020-11-03 8:16:15262 days 21 hrs ago 0xd6e9787430f5f88725b3f55c5954b7c8ec61daa6  Contract Creation0 Ether
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
DeployFactory

Compiler Version
v0.5.12+commit.7709ece9

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-11-03
*/

// https:opendao.io

// File: contracts/StockLiquidator.sol

pragma solidity 0.5.12;

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
    );
}

/**
 * @title INonStandardERC20
 * @dev Version of ERC20 with no return values for `transfer` and `transferFrom`
 *  See https://medium.com/coinmonks/missing-return-value-bug-at-least-130-tokens-affected-d67bf08521ca
 */
interface INonStandardERC20 {
    /**
     * @notice Get the total number of tokens in circulation
     * @return The supply of tokens
     */
    function totalSupply() external view returns (uint256);

    /**
     * @notice Gets the balance of the specified address
     * @param owner The address from which the balance will be retrieved
     * @return The balance
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    ///
    /// !!!!!!!!!!!!!!
    /// !!! NOTICE !!! `transfer` does not return a value, in violation of the ERC-20 specification
    /// !!!!!!!!!!!!!!
    ///

    /**
     * @notice Transfer `amount` tokens from `msg.sender` to `dst`
     * @param dst The address of the destination account
     * @param amount The number of tokens to transfer
     */
    function transfer(address dst, uint256 amount) external;

    ///
    /// !!!!!!!!!!!!!!
    /// !!! NOTICE !!! `transferFrom` does not return a value, in violation of the ERC-20 specification
    /// !!!!!!!!!!!!!!
    ///

    /**
     * @notice Transfer `amount` tokens from `src` to `dst`
     * @param src The address of the source account
     * @param dst The address of the destination account
     * @param amount The number of tokens to transfer
     */
    function transferFrom(
        address src,
        address dst,
        uint256 amount
    ) external;

    /**
     * @notice Approve `spender` to transfer up to `amount` from `src`
     * @dev This will overwrite the approval amount for `spender`
     *  and is subject to issues noted [here](https://eips.ethereum.org/EIPS/eip-20#approve)
     * @param spender The address of the account which may transfer tokens
     * @param amount The number of tokens that are approved
     * @return Whether or not the approval succeeded
     */
    function approve(address spender, uint256 amount)
        external
        returns (bool success);

    /**
     * @notice Get the current allowance from `owner` for `spender`
     * @param owner The address of the account which owns the tokens to be spent
     * @param spender The address of the account which may transfer tokens
     * @return The number of tokens allowed to be spent
     */
    function allowance(address owner, address spender)
        external
        view
        returns (uint256 remaining);

    event Transfer(address indexed from, address indexed to, uint256 amount);
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 amount
    );
}

contract Context {
    // Empty internal constructor, to prevent people from mistakenly deploying
    // an instance of this contract, which should be used via inheritance.
    constructor() internal {}

    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;
    }
}

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.
     */
    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.
     */
    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.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

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);
    }
}

contract ERC20Detailed is IERC20 {
    string private _name;
    string private _symbol;
    uint8 private _decimals;

    constructor(
        string memory name,
        string memory symbol,
        uint8 decimals
    ) public {
        _name = name;
        _symbol = symbol;
        _decimals = decimals;
    }

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

    /**
     * @return the symbol of the token.
     */
    function symbol() public view returns (string memory) {
        return _symbol;
    }

    /**
     * @return the number of decimals of the token.
     */
    function decimals() public view returns (uint8) {
        return _decimals;
    }
}

contract StockLiquiditator is ERC20, ERC20Detailed {
    using SafeMath for uint256;

    uint256 public cashDecimals;
    uint256 public stockTokenMultiplier;

    ERC20Detailed public cash;
    ERC20Detailed public stockToken;

    uint256 public stockToCashRate;
    uint256 public poolToCashRate;
    uint256 public cashValauationCap;

    string public url;

    event UrlUpdated(string _url);
    event ValuationCapUpdated(uint256 cashCap);
    event OwnerChanged(address indexed newOwner);
    event PoolRateUpdated(uint256 poolrate);
    event PoolTokensMinted(
        address indexed user,
        uint256 inputCashAmount,
        uint256 mintedPoolAmount
    );
    event PoolTokensBurnt(
        address indexed user,
        uint256 burntPoolAmount,
        uint256 outputStockAmount,
        uint256 outputCashAmount
    );
    event StockTokensRedeemed(
        address indexed user,
        uint256 redeemedStockToken,
        uint256 outputCashAmount
    );

    function() external {
        //fallback function
    }

    address payable public owner;

    modifier onlyOwner() {
        require(msg.sender == owner, "Account not Owner");
        _;
    }

    constructor(
        address cashAddress,
        address stockTokenAddress,
        uint256 _stockToCashRate,
        uint256 cashCap,
        string memory name,
        string memory symbol,
        string memory _url
    ) public ERC20Detailed(name, symbol, 18) {
        require(
            msg.sender != address(0),
            "Zero address cannot be owner/contract deployer"
        );
        owner = msg.sender;
        require(
            stockTokenAddress != address(0),
            "stockToken is the zero address"
        );
        require(cashAddress != address(0), "cash is the zero address");
        require(_stockToCashRate != 0, "Stock to cash rate can't be zero");
        cash = ERC20Detailed(cashAddress);
        stockToken = ERC20Detailed(stockTokenAddress);
        cashDecimals = cash.decimals();
        stockTokenMultiplier = (10**uint256(stockToken.decimals()));
        stockToCashRate = ((10**cashDecimals).mul(_stockToCashRate)).div(1e18);
        updatePoolRate();
        updateCashValuationCap(cashCap);
        updateURL(_url);
    }

    function updateURL(string memory _url)
        public
        onlyOwner
        returns (string memory)
    {
        url = _url;
        emit UrlUpdated(_url);
        return url;
    }

    function updateCashValuationCap(uint256 cashCap)
        public
        onlyOwner
        returns (uint256)
    {
        cashValauationCap = cashCap;
        emit ValuationCapUpdated(cashCap);
        return cashValauationCap;
    }

    function changeOwner(address payable newOwner) external onlyOwner {
        owner = newOwner;
        emit OwnerChanged(newOwner);
    }

    function stockTokenAddress() public view returns (address) {
        return address(stockToken);
    }

    function _preValidateData(address beneficiary, uint256 amount)
        internal
        pure
    {
        require(beneficiary != address(0), "Beneficiary can't be zero address");
        require(amount != 0, "amount can't be 0");
    }

    function contractCashBalance() public view returns (uint256 cashBalance) {
        return cash.balanceOf(address(this));
    }

    function contractStockTokenBalance()
        public
        view
        returns (uint256 stockTokenBalance)
    {
        return stockToken.balanceOf(address(this));
    }

    function stockTokenCashValuation() public view returns (uint256) {
        uint256 cashEquivalent = (
            contractStockTokenBalance().mul(stockToCashRate)
        )
            .div(stockTokenMultiplier);
        return cashEquivalent;
    }

    function contractCashValuation()
        public
        view
        returns (uint256 cashValauation)
    {
        uint256 cashEquivalent = (
            contractStockTokenBalance().mul(stockToCashRate)
        )
            .div(stockTokenMultiplier);
        return contractCashBalance().add(cashEquivalent);
    }

    function updatePoolRate() public returns (uint256 poolrate) {
        if (totalSupply() == 0) {
            poolToCashRate = (10**(cashDecimals)).mul(1);
        } else {
            poolToCashRate = (
                (contractCashValuation().mul(1e18)).div(totalSupply())
            );
        }
        emit PoolRateUpdated(poolrate);
        return poolToCashRate;
    }

    function mintPoolToken(uint256 inputCashAmount) external {
        if (cashValauationCap != 0) {
            require(
                inputCashAmount.add(contractCashValuation()) <=
                    cashValauationCap,
                "inputCashAmount exceeds cashValauationCap"
            );
        }
        address sender = msg.sender;
        _preValidateData(sender, inputCashAmount);
        updatePoolRate();
        uint256 actualCashReceived = doTransferIn(
            address(cash),
            sender,
            inputCashAmount
        );

        // calculate pool token amount to be minted
        uint256 poolTokens = (actualCashReceived.mul(1e18)).div(poolToCashRate);
        _mint(sender, poolTokens); //Minting  Pool Token
        emit PoolTokensMinted(sender, actualCashReceived, poolTokens);
    }

    function burnPoolToken(uint256 poolTokenAmount) external {
        address sender = msg.sender;
        _preValidateData(sender, poolTokenAmount);

        updatePoolRate();
        uint256 cashToRedeem = (
            (poolTokenAmount.mul(poolToCashRate)).div(1e18)
        );
        _burn(sender, poolTokenAmount);

        uint256 outputStockToken = 0;
        uint256 outputCashAmount = 0;

        if (stockTokenCashValuation() >= cashToRedeem) {
            outputStockToken = (
                (cashToRedeem.mul(stockTokenMultiplier)).div(stockToCashRate)
            ); //calculate stock token amount to be return
            doTransferOut(address(stockToken), sender, outputStockToken);
        } else if (cashToRedeem > stockTokenCashValuation()) {
            outputStockToken = contractStockTokenBalance();
            outputCashAmount = cashToRedeem.sub(stockTokenCashValuation()); // calculate cash amount to be return
            doTransferOut(address(stockToken), sender, outputStockToken);
            doTransferOut(address(cash), sender, outputCashAmount);
        }
        emit PoolTokensBurnt(
            sender,
            poolTokenAmount,
            outputStockToken,
            outputCashAmount
        );
    }

    function redeemStockToken(uint256 stockTokenAmount) external {
        address sender = msg.sender;
        _preValidateData(sender, stockTokenAmount);
        uint256 actualStockReceived = doTransferIn(
            address(stockToken),
            sender,
            stockTokenAmount
        );

        // calculate Cash amount to be return
        uint256 outputCashAmount = (actualStockReceived.mul(stockToCashRate))
            .div(stockTokenMultiplier);
        doTransferOut(address(cash), sender, outputCashAmount);
        emit StockTokensRedeemed(sender, actualStockReceived, outputCashAmount);
    }

    /**
     * @dev Similar to EIP20 transfer, except it handles a False result from `transferFrom` and reverts in that case.
     *      This will revert due to insufficient balance or insufficient allowance.
     *      This function returns the actual amount received,
     *      which may be less than `amount` if there is a fee attached to the transfer.
     *
     *      Note: This wrapper safely handles non-standard ERC-20 tokens that do not return a value.
     *            See here: https://medium.com/coinmonks/missing-return-value-bug-at-least-130-tokens-affected-d67bf08521ca
     */
    function doTransferIn(
        address tokenAddress,
        address from,
        uint256 amount
    ) internal returns (uint256) {
        INonStandardERC20 token = INonStandardERC20(tokenAddress);
        uint256 balanceBefore = IERC20(tokenAddress).balanceOf(address(this));
        token.transferFrom(from, address(this), amount);

        bool success;
        assembly {
            switch returndatasize()
                case 0 {
                    // This is a non-standard ERC-20
                    success := not(0) // set success to true
                }
                case 32 {
                    // This is a compliant ERC-20
                    returndatacopy(0, 0, 32)
                    success := mload(0) // Set `success = returndata` of external call
                }
                default {
                    // This is an excessively non-compliant ERC-20, revert.
                    revert(0, 0)
                }
        }
        require(success, "TOKEN_TRANSFER_IN_FAILED");

        // Calculate the amount that was *actually* transferred
        uint256 balanceAfter = IERC20(tokenAddress).balanceOf(address(this));
        require(balanceAfter >= balanceBefore, "TOKEN_TRANSFER_IN_OVERFLOW");
        return balanceAfter - balanceBefore; // underflow already checked above, just subtract
    }

    /**
     * @dev Similar to EIP20 transfer, except it handles a False success from `transfer` and returns an explanatory
     *      error code rather than reverting. If caller has not called checked protocol's balance, this may revert due to
     *      insufficient cash held in this contract. If caller has checked protocol's balance prior to this call, and verified
     *      it is >= amount, this should not revert in normal conditions.
     *
     *      Note: This wrapper safely handles non-standard ERC-20 tokens that do not return a value.
     *            See here: https://medium.com/coinmonks/missing-return-value-bug-at-least-130-tokens-affected-d67bf08521ca
     */
    function doTransferOut(
        address tokenAddress,
        address to,
        uint256 amount
    ) internal {
        INonStandardERC20 token = INonStandardERC20(tokenAddress);
        token.transfer(to, amount);

        bool success;
        assembly {
            switch returndatasize()
                case 0 {
                    // This is a non-standard ERC-20
                    success := not(0) // set success to true
                }
                case 32 {
                    // This is a complaint ERC-20
                    returndatacopy(0, 0, 32)
                    success := mload(0) // Set `success = returndata` of external call
                }
                default {
                    // This is an excessively non-compliant ERC-20, revert.
                    revert(0, 0)
                }
        }
        require(success, "TOKEN_TRANSFER_OUT_FAILED");
    }
}

// File: contracts/DeployFactory.sol

pragma solidity 0.5.12;


contract DeployFactory {
    event CashBoxAdded(
        address indexed cashBoxAddress,
        address indexed cashBoxOwner,
        address indexed assetTokenAddress,
        address cashTokenAddress,
        string url
    );

    address[] public cashBoxes;

    function createCashBox(
        address cashTokenAddress,
        address assetTokenAddress,
        uint256 assetToCashRate,
        uint256 cashCap,
        string memory name,
        string memory symbol,
        string memory url
    ) public returns (address newCashBox) {
        StockLiquiditator cashBox = new StockLiquiditator(
            cashTokenAddress,
            assetTokenAddress,
            assetToCashRate,
            cashCap,
            name,
            symbol,
            url
        );
        cashBox.changeOwner(msg.sender);

        cashBoxes.push(address(cashBox));
        emit CashBoxAdded(
            address(cashBox),
            msg.sender,
            assetTokenAddress,
            cashTokenAddress,
            url
        );
        return address(cashBox);
    }

    function getAllCashBoxes() public view returns (address[] memory) {
        return cashBoxes;
    }

    function getCashBoxesByUser(address account)
        external
        view
        returns (address[] memory)
    {
        uint256 len = cashBoxes.length;
        address[] memory cashBoxesByUser = new address[](len);
        uint256 index = 0;

        for (uint256 i = 0; i < len; i++) {
            address payable cashBoxAddress = address(uint160(cashBoxes[i]));
            StockLiquiditator cashbox = StockLiquiditator(cashBoxAddress);

            if (cashbox.owner() == account) {
                cashBoxesByUser[index] = cashBoxes[i];
                index++;
            }
        }

        // to remove zero addresses from the result
        address[] memory result = new address[](index);
        for (uint256 i = 0; i < result.length; i++) {
            result[i] = cashBoxesByUser[i];
        }

        return result;
    }
}

Contract Security Audit

Contract ABI

[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"cashBoxAddress","type":"address"},{"indexed":true,"internalType":"address","name":"cashBoxOwner","type":"address"},{"indexed":true,"internalType":"address","name":"assetTokenAddress","type":"address"},{"indexed":false,"internalType":"address","name":"cashTokenAddress","type":"address"},{"indexed":false,"internalType":"string","name":"url","type":"string"}],"name":"CashBoxAdded","type":"event"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"cashBoxes","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"cashTokenAddress","type":"address"},{"internalType":"address","name":"assetTokenAddress","type":"address"},{"internalType":"uint256","name":"assetToCashRate","type":"uint256"},{"internalType":"uint256","name":"cashCap","type":"uint256"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"string","name":"url","type":"string"}],"name":"createCashBox","outputs":[{"internalType":"address","name":"newCashBox","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getAllCashBoxes","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getCashBoxesByUser","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"}]

608060405234801561001057600080fd5b50613496806100206000396000f3fe60806040523480156200001157600080fd5b5060043610620000525760003560e01c80631fd6f97c14620000575780637f6b05c414620000b3578063baecb41514620002b4578063d77bef2114620002d4575b600080fd5b62000061620002fd565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156200009f57818101518382015260200162000085565b505050509050019250505060405180910390f35b62000298600480360360e0811015620000cb57600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a0810160808201356401000000008111156200010c57600080fd5b8201836020820111156200011f57600080fd5b803590602001918460018302840111640100000000831117156200014257600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092959493602081019350359150506401000000008111156200019657600080fd5b820183602082011115620001a957600080fd5b80359060200191846001830284011164010000000083111715620001cc57600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092959493602081019350359150506401000000008111156200022057600080fd5b8201836020820111156200023357600080fd5b803590602001918460018302840111640100000000831117156200025657600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955062000361945050505050565b604080516001600160a01b039092168252519081900360200190f35b6200029860048036036020811015620002cc57600080fd5b5035620006a9565b6200006160048036036020811015620002ec57600080fd5b50356001600160a01b0316620006d1565b606060008054806020026020016040519081016040528092919081815260200182805480156200035757602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831162000338575b5050505050905090565b600080888888888888886040516200037990620008a3565b80886001600160a01b03166001600160a01b03168152602001876001600160a01b03166001600160a01b03168152602001868152602001858152602001806020018060200180602001848103845287818151815260200191508051906020019080838360005b83811015620003f9578181015183820152602001620003df565b50505050905090810190601f168015620004275780820380516001836020036101000a031916815260200191505b50848103835286518152865160209182019188019080838360005b838110156200045c57818101518382015260200162000442565b50505050905090810190601f1680156200048a5780820380516001836020036101000a031916815260200191505b50848103825285518152855160209182019187019080838360005b83811015620004bf578181015183820152602001620004a5565b50505050905090810190601f168015620004ed5780820380516001836020036101000a031916815260200191505b509a5050505050505050505050604051809103906000f08015801562000517573d6000803e3d6000fd5b506040805163a6f9dae160e01b815233600482015290519192506001600160a01b0383169163a6f9dae19160248082019260009290919082900301818387803b1580156200056457600080fd5b505af115801562000579573d6000803e3d6000fd5b5050505060008190806001815401808255809150509060018203906000526020600020016000909192909190916101000a8154816001600160a01b0302191690836001600160a01b0316021790555050876001600160a01b0316336001600160a01b0316826001600160a01b03167f4f217942c611af6d21af225a6a7382470e2136d58215210a5faa23a5b87c35d08c8760405180836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b838110156200066157818101518382015260200162000647565b50505050905090810190601f1680156200068f5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a498975050505050505050565b60008181548110620006b757fe5b6000918252602090912001546001600160a01b0316905081565b60005460408051828152602080840282010190915260609190829082801562000704578160200160208202803883390190505b5090506000805b83811015620008185760008082815481106200072357fe5b6000918252602091829020015460408051638da5cb5b60e01b815290516001600160a01b0392831694508493928b16928492638da5cb5b9260048083019392829003018186803b1580156200077757600080fd5b505afa1580156200078c573d6000803e3d6000fd5b505050506040513d6020811015620007a357600080fd5b50516001600160a01b031614156200080d5760008381548110620007c357fe5b9060005260206000200160009054906101000a90046001600160a01b0316858581518110620007ee57fe5b6001600160a01b03909216602092830291909101909101526001909301925b50506001016200070b565b5060608160405190808252806020026020018201604052801562000846578160200160208202803883390190505b50905060005b815181101562000899578381815181106200086357fe5b60200260200101518282815181106200087857fe5b6001600160a01b03909216602092830291909101909101526001016200084c565b5095945050505050565b612bb080620008b28339019056fe60806040523480156200001157600080fd5b5060405162002bb038038062002bb0833981810160405260e08110156200003757600080fd5b81516020830151604080850151606086015160808701805193519597949692959194919392820192846401000000008211156200007357600080fd5b9083019060208201858111156200008957600080fd5b8251640100000000811182820188101715620000a457600080fd5b82525081516020918201929091019080838360005b83811015620000d3578181015183820152602001620000b9565b50505050905090810190601f168015620001015780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200012557600080fd5b9083019060208201858111156200013b57600080fd5b82516401000000008111828201881017156200015657600080fd5b82525081516020918201929091019080838360005b83811015620001855781810151838201526020016200016b565b50505050905090810190601f168015620001b35780820380516001836020036101000a031916815260200191505b5060405260200180516040519392919084640100000000821115620001d757600080fd5b908301906020820185811115620001ed57600080fd5b82516401000000008111828201881017156200020857600080fd5b82525081516020918201929091019080838360005b83811015620002375781810151838201526020016200021d565b50505050905090810190601f168015620002655780820380516001836020036101000a031916815260200191505b506040525050508282601282600390805190602001906200028892919062000cff565b5081516200029e90600490602085019062000cff565b506005805460ff90921660ff199092169190911790555050336200030e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018062002b61602e913960400191505060405180910390fd5b600e80546001600160a01b031916331790556001600160a01b0386166200039657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f73746f636b546f6b656e20697320746865207a65726f20616464726573730000604482015290519081900360640190fd5b6001600160a01b0387166200040c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f6361736820697320746865207a65726f20616464726573730000000000000000604482015290519081900360640190fd5b846200047957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f53746f636b20746f206361736820726174652063616e2774206265207a65726f604482015290519081900360640190fd5b600880546001600160a01b03808a166001600160a01b03199283161792839055600980548a8316931692909217909155604080517f313ce5670000000000000000000000000000000000000000000000000000000081529051929091169163313ce56791600480820192602092909190829003018186803b158015620004fe57600080fd5b505afa15801562000513573d6000803e3d6000fd5b505050506040513d60208110156200052a57600080fd5b505160ff16600655600954604080517f313ce56700000000000000000000000000000000000000000000000000000000815290516001600160a01b039092169163313ce56791600480820192602092909190829003018186803b1580156200059157600080fd5b505afa158015620005a6573d6000803e3d6000fd5b505050506040513d6020811015620005bd57600080fd5b505160ff16600a90810a6007556006546200060991670de0b6b3a764000091620005f5910a8862000657602090811b620011e817901c565b620006d860201b620012481790919060201c565b600a556200061f6001600160e01b036200072216565b5062000634846001600160e01b03620007ef16565b5062000649816001600160e01b03620008ac16565b505050505050505062000da1565b6000826200066857506000620006d2565b828202828482816200067657fe5b0414620006cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018062002b8f6021913960400191505060405180910390fd5b90505b92915050565b6000620006cf83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525062000a7160201b60201c565b6000620007376001600160e01b0362000b3216565b62000765576200075c6001600654600a0a6200065760201b620011e81790919060201c565b600b55620007b4565b620007b06200077c6001600160e01b0362000b3216565b620005f5670de0b6b3a76400006200079c6001600160e01b0362000b3816565b6200065760201b620011e81790919060201c565b600b555b6040805182815290517fc68a9a1667c87e211e1fdb8d320762f34843823de13733d23a0519ba5dd21b669181900360200190a150600b545b90565b600e546000906001600160a01b031633146200086c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4163636f756e74206e6f74204f776e6572000000000000000000000000000000604482015290519081900360640190fd5b600c8290556040805183815290517f7b51412dc2b6e5fc32497110f29da4f92c9d3b8924cddd4e6a2884f66a774bdb9181900360200190a15050600c5490565b600e546060906001600160a01b031633146200092957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4163636f756e74206e6f74204f776e6572000000000000000000000000000000604482015290519081900360640190fd5b81516200093e90600d90602085019062000cff565b507fc601e6cbfab914ce20078cb17a4e5b9831b1d612db470153922f08ff15d9075c826040518080602001828103825283818151815260200191508051906020019080838360005b83811015620009a057818101518382015260200162000986565b50505050905090810190601f168015620009ce5780820380516001836020036101000a031916815260200191505b509250505060405180910390a1600d805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801562000a655780601f1062000a395761010080835404028352916020019162000a65565b820191906000526020600020905b81548152906001019060200180831162000a4757829003601f168201915b50505050509050919050565b6000818362000b1b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101562000adf57818101518382015260200162000ac5565b50505050905090810190601f16801562000b0d5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858162000b2857fe5b0495945050505050565b60025490565b60008062000b59600754620005f5600a546200079c62000b8d60201b60201c565b905062000b878162000b736001600160e01b0362000c2516565b62000c8a60201b620018471790919060201c565b91505090565b600954604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801562000bf257600080fd5b505afa15801562000c07573d6000803e3d6000fd5b505050506040513d602081101562000c1e57600080fd5b5051905090565b600854604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801562000bf257600080fd5b600082820183811015620006cf57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1062000d4257805160ff191683800117855562000d72565b8280016001018555821562000d72579182015b8281111562000d7257825182559160200191906001019062000d55565b5062000d8092915062000d84565b5090565b620007ec91905b8082111562000d80576000815560010162000d8b565b611db08062000db16000396000f3fe608060405234801561001057600080fd5b50600436106101f05760003560e01c80636f69f3001161010f578063a457c2d7116100a2578063c256e7af11610071578063c256e7af146104d8578063d3ee6a3a146104e0578063dd62ed3e146104fd578063fbc51e4b1461052b576101f0565b8063a457c2d714610452578063a6f9dae11461047e578063a9059cbb146104a4578063baa8e786146104d0576101f0565b806395d89b41116100de57806395d89b4114610432578063961be3911461043a5780639680b92c146104425780639d7c9d8c1461044a576101f0565b80636f69f300146103df57806370a08231146103fc57806388669451146104225780638da5cb5b1461042a576101f0565b80632a8da7c711610187578063520b98af11610156578063520b98af146103bf5780635600f04f146103c75780636133e001146103cf57806369ba16dd146103d7576101f0565b80632a8da7c714610334578063313ce5671461035857806339509351146103765780634f991f24146103a2576101f0565b806316cc2996116101c357806316cc2996146102d157806318160ddd146102ee57806323b872dd146102f657806325b0d7cc1461032c576101f0565b8063038fa223146101f257806306fdde031461020c578063095ea7b31461028957806310423d22146102c9575b005b6101fa6105d1565b60408051918252519081900360200190f35b61021461064e565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561024e578181015183820152602001610236565b50505050905090810190601f16801561027b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102b56004803603604081101561029f57600080fd5b506001600160a01b0381351690602001356106e4565b604080519115158252519081900360200190f35b6101fa610702565b6101f0600480360360208110156102e757600080fd5b50356107a4565b6101fa61084b565b6102b56004803603606081101561030c57600080fd5b506001600160a01b03813581169160208101359091169060400135610851565b6101fa6108de565b61033c610929565b604080516001600160a01b039092168252519081900360200190f35b610360610938565b6040805160ff9092168252519081900360200190f35b6102b56004803603604081101561038c57600080fd5b506001600160a01b038135169060200135610941565b6101f0600480360360208110156103b857600080fd5b5035610995565b6101fa610a9d565b610214610ad4565b6101fa610b62565b6101fa610b79565b6101f0600480360360208110156103f557600080fd5b5035610b7f565b6101fa6004803603602081101561041257600080fd5b50356001600160a01b0316610cc2565b6101fa610cdd565b61033c610ce3565b610214610cf2565b61033c610d53565b6101fa610d62565b6101fa610d68565b6102b56004803603604081101561046857600080fd5b506001600160a01b038135169060200135610d6e565b6101f06004803603602081101561049457600080fd5b50356001600160a01b0316610ddc565b6102b5600480360360408110156104ba57600080fd5b506001600160a01b038135169060200135610e79565b61033c610e8d565b6101fa610e9c565b6101fa600480360360208110156104f657600080fd5b5035610ea2565b6101fa6004803603604081101561051357600080fd5b506001600160a01b0381358116916020013516610f38565b6102146004803603602081101561054157600080fd5b81019060208101813564010000000081111561055c57600080fd5b82018360208201111561056e57600080fd5b8035906020019184600183028401116401000000008311171561059057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610f63945050505050565b600954604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561061c57600080fd5b505afa158015610630573d6000803e3d6000fd5b505050506040513d602081101561064657600080fd5b505190505b90565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156106da5780601f106106af576101008083540402835291602001916106da565b820191906000526020600020905b8154815290600101906020018083116106bd57829003601f168201915b5050505050905090565b60006106f86106f16110f8565b84846110fc565b5060015b92915050565b600061070c61084b565b61072f5760065461072790600a0a600163ffffffff6111e816565b600b5561076a565b61076661073a61084b565b61075a670de0b6b3a764000061074e610a9d565b9063ffffffff6111e816565b9063ffffffff61124816565b600b555b6040805182815290517fc68a9a1667c87e211e1fdb8d320762f34843823de13733d23a0519ba5dd21b669181900360200190a150600b5490565b336107af818361128a565b6009546000906107c9906001600160a01b03168385611319565b905060006107e860075461075a600a54856111e890919063ffffffff16565b600854909150610802906001600160a01b03168483611562565b604080518381526020810183905281516001600160a01b038616927f55233d8a154170c5f6990012b5ba97f3b042ee915ec1f11c7528c067b3ea5a79928290030190a250505050565b60025490565b600061085e848484611654565b6108d48461086a6110f8565b6108cf85604051806060016040528060288152602001611cc5602891396001600160a01b038a166000908152600160205260408120906108a86110f8565b6001600160a01b03168152602081019190915260400160002054919063ffffffff6117b016565b6110fc565b5060019392505050565b600854604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561061c57600080fd5b6009546001600160a01b031690565b60055460ff1690565b60006106f861094e6110f8565b846108cf856001600061095f6110f8565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff61184716565b600c54156109f557600c546109b86109ab610a9d565b839063ffffffff61184716565b11156109f55760405162461bcd60e51b8152600401808060200182810382526029815260200180611c7b6029913960400191505060405180910390fd5b33610a00818361128a565b610a08610702565b50600854600090610a23906001600160a01b03168385611319565b90506000610a48600b5461075a670de0b6b3a7640000856111e890919063ffffffff16565b9050610a5483826118a1565b604080518381526020810183905281516001600160a01b038616927f6815a1741b4c93c1ee374050672677deb65eacfa89878fa1acdeb0ca323458b8928290030190a250505050565b600080610ab460075461075a600a5461074e6105d1565b9050610ace81610ac26108de565b9063ffffffff61184716565b91505090565b600d805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610b5a5780601f10610b2f57610100808354040283529160200191610b5a565b820191906000526020600020905b815481529060010190602001808311610b3d57829003601f168201915b505050505081565b600080610ace60075461075a600a5461074e6105d1565b600a5481565b33610b8a818361128a565b610b92610702565b506000610bb6670de0b6b3a764000061075a600b54866111e890919063ffffffff16565b9050610bc28284611991565b60008082610bce610b62565b10610c0d57610bee600a5461075a600754866111e890919063ffffffff16565b600954909250610c08906001600160a01b03168584611562565b610c6f565b610c15610b62565b831115610c6f57610c246105d1565b9150610c3e610c31610b62565b849063ffffffff611a8d16565b600954909150610c58906001600160a01b03168584611562565b600854610c6f906001600160a01b03168583611562565b604080518681526020810184905280820183905290516001600160a01b038616917fbed5597a1441723ad2bde2b25295dd90b779504ea866c708d221b4722b50c95c919081900360600190a25050505050565b6001600160a01b031660009081526020819052604090205490565b600c5481565b600e546001600160a01b031681565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156106da5780601f106106af576101008083540402835291602001916106da565b6008546001600160a01b031681565b60075481565b60065481565b60006106f8610d7b6110f8565b846108cf85604051806060016040528060258152602001611d576025913960016000610da56110f8565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff6117b016565b600e546001600160a01b03163314610e2f576040805162461bcd60e51b815260206004820152601160248201527020b1b1b7bab73a103737ba1027bbb732b960791b604482015290519081900360640190fd5b600e80546001600160a01b0319166001600160a01b0383169081179091556040517fa2ea9883a321a3e97b8266c2b078bfeec6d50c711ed71f874a90d500ae2eaf3690600090a250565b60006106f8610e866110f8565b8484611654565b6009546001600160a01b031681565b600b5481565b600e546000906001600160a01b03163314610ef8576040805162461bcd60e51b815260206004820152601160248201527020b1b1b7bab73a103737ba1027bbb732b960791b604482015290519081900360640190fd5b600c8290556040805183815290517f7b51412dc2b6e5fc32497110f29da4f92c9d3b8924cddd4e6a2884f66a774bdb9181900360200190a15050600c5490565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600e546060906001600160a01b03163314610fb9576040805162461bcd60e51b815260206004820152601160248201527020b1b1b7bab73a103737ba1027bbb732b960791b604482015290519081900360640190fd5b8151610fcc90600d906020850190611b34565b507fc601e6cbfab914ce20078cb17a4e5b9831b1d612db470153922f08ff15d9075c826040518080602001828103825283818151815260200191508051906020019080838360005b8381101561102c578181015183820152602001611014565b50505050905090810190601f1680156110595780820380516001836020036101000a031916815260200191505b509250505060405180910390a1600d805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156110ec5780601f106110c1576101008083540402835291602001916110ec565b820191906000526020600020905b8154815290600101906020018083116110cf57829003601f168201915b50505050509050919050565b3390565b6001600160a01b0383166111415760405162461bcd60e51b8152600401808060200182810382526024815260200180611d336024913960400191505060405180910390fd5b6001600160a01b0382166111865760405162461bcd60e51b8152600401808060200182810382526022815260200180611c336022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6000826111f7575060006106fc565b8282028284828161120457fe5b04146112415760405162461bcd60e51b8152600401808060200182810382526021815260200180611ca46021913960400191505060405180910390fd5b9392505050565b600061124183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611acf565b6001600160a01b0382166112cf5760405162461bcd60e51b8152600401808060200182810382526021815260200180611bf06021913960400191505060405180910390fd5b80611315576040805162461bcd60e51b81526020600482015260116024820152700616d6f756e742063616e2774206265203607c1b604482015290519081900360640190fd5b5050565b604080516370a0823160e01b81523060048201529051600091859183916001600160a01b038416916370a0823191602480820192602092909190829003018186803b15801561136757600080fd5b505afa15801561137b573d6000803e3d6000fd5b505050506040513d602081101561139157600080fd5b5051604080516323b872dd60e01b81526001600160a01b038881166004830152306024830152604482018890529151929350908416916323b872dd9160648082019260009290919082900301818387803b1580156113ee57600080fd5b505af1158015611402573d6000803e3d6000fd5b5050505060003d6000811461141e576020811461142857600080fd5b6000199150611434565b60206000803e60005191505b5080611487576040805162461bcd60e51b815260206004820152601860248201527f544f4b454e5f5452414e534645525f494e5f4641494c45440000000000000000604482015290519081900360640190fd5b604080516370a0823160e01b815230600482015290516000916001600160a01b038a16916370a0823191602480820192602092909190829003018186803b1580156114d157600080fd5b505afa1580156114e5573d6000803e3d6000fd5b505050506040513d60208110156114fb57600080fd5b5051905082811015611554576040805162461bcd60e51b815260206004820152601a60248201527f544f4b454e5f5452414e534645525f494e5f4f564552464c4f57000000000000604482015290519081900360640190fd5b919091039695505050505050565b6040805163a9059cbb60e01b81526001600160a01b038481166004830152602482018490529151859283169163a9059cbb91604480830192600092919082900301818387803b1580156115b457600080fd5b505af11580156115c8573d6000803e3d6000fd5b5050505060003d600081146115e457602081146115ee57600080fd5b60001991506115fa565b60206000803e60005191505b508061164d576040805162461bcd60e51b815260206004820152601960248201527f544f4b454e5f5452414e534645525f4f55545f4641494c454400000000000000604482015290519081900360640190fd5b5050505050565b6001600160a01b0383166116995760405162461bcd60e51b8152600401808060200182810382526025815260200180611d0e6025913960400191505060405180910390fd5b6001600160a01b0382166116de5760405162461bcd60e51b8152600401808060200182810382526023815260200180611bcd6023913960400191505060405180910390fd5b61172181604051806060016040528060268152602001611c55602691396001600160a01b038616600090815260208190526040902054919063ffffffff6117b016565b6001600160a01b038085166000908152602081905260408082209390935590841681522054611756908263ffffffff61184716565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b6000818484111561183f5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156118045781810151838201526020016117ec565b50505050905090810190601f1680156118315780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600082820183811015611241576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6001600160a01b0382166118fc576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b60025461190f908263ffffffff61184716565b6002556001600160a01b03821660009081526020819052604090205461193b908263ffffffff61184716565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b0382166119d65760405162461bcd60e51b8152600401808060200182810382526021815260200180611ced6021913960400191505060405180910390fd5b611a1981604051806060016040528060228152602001611c11602291396001600160a01b038516600090815260208190526040902054919063ffffffff6117b016565b6001600160a01b038316600090815260208190526040902055600254611a45908263ffffffff611a8d16565b6002556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b600061124183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506117b0565b60008183611b1e5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156118045781810151838201526020016117ec565b506000838581611b2a57fe5b0495945050505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10611b7557805160ff1916838001178555611ba2565b82800160010185558215611ba2579182015b82811115611ba2578251825591602001919060010190611b87565b50611bae929150611bb2565b5090565b61064b91905b80821115611bae5760008155600101611bb856fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737342656e65666963696172792063616e2774206265207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365696e70757443617368416d6f756e742065786365656473206361736856616c61756174696f6e436170536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa265627a7a72315820f7cdcc2cd9176b1cda2fcb094fad9b42108de36fb861bae6ef92e432b39e108a64736f6c634300050c00325a65726f20616464726573732063616e6e6f74206265206f776e65722f636f6e7472616374206465706c6f796572536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a265627a7a72315820390c0856afbbfbd6752efdf39aef08decf9d3dadd2a2aa3230c74bf3715de75d64736f6c634300050c0032

Deployed ByteCode Sourcemap

30030:2099:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30030:2099:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31151:101;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;31151:101:0;;;;;;;;;;;;;;;;;30309:834;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;30309:834:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;30309:834:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;30309:834:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;30309:834:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;30309:834:0;;;;;;;;-1:-1:-1;30309:834:0;;-1:-1:-1;;21:11;5:28;;2:2;;;46:1;43;36:12;2:2;30309:834:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;30309:834:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;30309:834:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;30309:834:0;;;;;;;;-1:-1:-1;30309:834:0;;-1:-1:-1;;21:11;5:28;;2:2;;;46:1;43;36:12;2:2;30309:834:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;30309:834:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;30309:834:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;30309:834:0;;-1:-1:-1;30309:834:0;;-1:-1:-1;;;;;30309:834:0:i;:::-;;;;-1:-1:-1;;;;;30309:834:0;;;;;;;;;;;;;;30274:26;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30274:26:0;;:::i;31260:866::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31260:866:0;-1:-1:-1;;;;;31260:866:0;;:::i;31151:101::-;31199:16;31235:9;31228:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31228:16:0;;;;;;;;;;;;;;;;;;;;;;;31151:101;:::o;30309:834::-;30574:18;30605:25;30669:16;30700:17;30732:15;30762:7;30784:4;30803:6;30824:3;30633:205;;;;;:::i;:::-;;;-1:-1:-1;;;;;30633:205:0;-1:-1:-1;;;;;30633:205:0;;;;;;-1:-1:-1;;;;;30633:205:0;-1:-1:-1;;;;;30633:205: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;30633:205:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30633:205: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;30633:205:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30633:205: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;30633:205:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;30849:31:0;;;-1:-1:-1;;;30849:31:0;;30869:10;30849:31;;;;;;30605:233;;-1:-1:-1;;;;;;30849:19:0;;;;;:31;;;;;-1:-1:-1;;30849:31:0;;;;;;;;-1:-1:-1;30849:19:0;:31;;;5:2:-1;;;;30:1;27;20:12;5:2;30849:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30849:31:0;;;;30893:9;30916:7;30893:32;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;30893:32:0;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30893:32:0;;;;;-1:-1:-1;;;;;30893:32:0;;;;;;;31024:17;-1:-1:-1;;;;;30941:160:0;30999:10;-1:-1:-1;;;;;30941:160:0;30976:7;-1:-1:-1;;;;;30941:160:0;;31056:16;31087:3;30941:160;;;;-1:-1:-1;;;;;30941:160:0;-1:-1:-1;;;;;30941:160: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;30941:160:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31127:7;30309:834;-1:-1:-1;;;;;;;;30309:834:0:o;30274:26::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30274:26:0;;-1:-1:-1;30274:26:0;:::o;31260:866::-;31389:11;31403:16;31465:18;;;;;;;;;;;;;;;;31355:16;;31403;31355;;31403;31465:18;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;31465:18:0;-1:-1:-1;31430:53:0;-1:-1:-1;31494:13:0;;31524:346;31548:3;31544:1;:7;31524:346;;;31573:30;31622:9;31632:1;31622:12;;;;;;;;;;;;;;;;;;;31733:15;;;-1:-1:-1;;;31733:15:0;;;;-1:-1:-1;;;;;31622:12:0;;;;-1:-1:-1;31622:12:0;;31733:26;;;;31622:12;;31733:13;;:15;;;;;31622:12;31733:15;;;;;31622:12;31733:15;;;5:2:-1;;;;30:1;27;20:12;5:2;31733:15:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31733:15:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31733:15:0;-1:-1:-1;;;;;31733:26:0;;31729:130;;;31805:9;31815:1;31805:12;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31805:12:0;31780:15;31796:5;31780:22;;;;;;;;-1:-1:-1;;;;;31780:37:0;;;:22;;;;;;;;;;;:37;31836:7;;;;;31729:130;-1:-1:-1;;31553:3:0;;31524:346;;;;31935:23;31975:5;31961:20;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;31961:20:0;-1:-1:-1;31935:46:0;-1:-1:-1;31997:9:0;31992:101;32016:6;:13;32012:1;:17;31992:101;;;32063:15;32079:1;32063:18;;;;;;;;;;;;;;32051:6;32058:1;32051:9;;;;;;;;-1:-1:-1;;;;;32051:30:0;;;:9;;;;;;;;;;;:30;32031:3;;31992:101;;;-1:-1:-1;32112:6:0;31260:866;-1:-1:-1;;;;;31260:866:0:o;30030:2099::-;;;;;;;;:::o

Swarm Source

bzzr://390c0856afbbfbd6752efdf39aef08decf9d3dadd2a2aa3230c74bf3715de75d
Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.