Contract 0xD299D53Fc3B09038765af2091a0647e2304a7caa 1

Contract Overview

Impermax: Impermax Chef
Balance:
0 MOVR

MOVR Value:
$0.00

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x36be55ae4b9c13e6814a8096643cf55cfffa0d3c25b67156bfcd03f0a7b03016Mass Harvest30516832022-11-23 23:00:362 days 13 hrs ago0x9bdbdb4a8f7f816c87a67f5281484ed902c6b942 IN  Impermax: Impermax Chef0 MOVR0.0003910152
0xe1484f9ae2389630b7cf36b073c4d513f850ad1ead445d24275939d8f90b937aMass Harvest30187072022-11-19 2:56:427 days 9 hrs ago0xf380cb76467a5872fe321554b8671493d57c47d5 IN  Impermax: Impermax Chef0 MOVR0.000306674
0xf9800623a39c7163a35c55bf4090d51dc789e7e1ca085acc28279a6baba348e1Mass Harvest30186942022-11-19 2:53:547 days 9 hrs ago0x9bdbdb4a8f7f816c87a67f5281484ed902c6b942 IN  Impermax: Impermax Chef0 MOVR0.000261526
0xb1f04fc52e7d1d6d543331b986da31df60ca57595f23d1395465bd8ac2b9338fMass Harvest29781912022-11-13 5:16:3013 days 7 hrs ago0x9bdbdb4a8f7f816c87a67f5281484ed902c6b942 IN  Impermax: Impermax Chef0 MOVR0.000261526
0x261ccaff00327659b72a2535f75c2f6edf4c39fcc8965aa087056c23c96bd7d5Mass Harvest29452522022-11-08 10:44:2418 days 1 hr ago0x9bdbdb4a8f7f816c87a67f5281484ed902c6b942 IN  Impermax: Impermax Chef0 MOVR0.000380583
0x92a44bbdb30f79d63e841b7600ecb24c8e8a8957695bb87ed37443ce50b4c6e1Mass Harvest29228532022-11-05 4:50:0621 days 7 hrs ago0x9bdbdb4a8f7f816c87a67f5281484ed902c6b942 IN  Impermax: Impermax Chef0 MOVR0.0003138312
0x57f5205b0bee89e71ee4ddf6a533d56ad5cbefa2ee76d866e7d86f83c5dd7f00Mass Harvest28955622022-11-01 6:04:1825 days 6 hrs ago0x9bdbdb4a8f7f816c87a67f5281484ed902c6b942 IN  Impermax: Impermax Chef0 MOVR0.00025356
0xd6d258d1ab23d6f4702e1372378c3666b3609b62f56d663682889b330593f39fMass Harvest28802002022-10-30 1:04:4227 days 11 hrs ago0x18b2555b76a24ce30fe678d601da01d57c9f1879 IN  Impermax: Impermax Chef0 MOVR0.000152107
0x5aed1999704eb721f5783714c8cdb27bcf8dd1701aaeab96089a13461be58c16Mass Harvest28797242022-10-29 23:24:3027 days 12 hrs ago0x9bdbdb4a8f7f816c87a67f5281484ed902c6b942 IN  Impermax: Impermax Chef0 MOVR0.000384493
0xa185715f3e1fc41715778b64aec1283b08c7144bffe2eed81adc0a6c07edbeb8Mass Harvest28749922022-10-29 7:03:1828 days 5 hrs ago0x9bdbdb4a8f7f816c87a67f5281484ed902c6b942 IN  Impermax: Impermax Chef0 MOVR0.0006058845
0x79dbeeebba71f843ff0094d85adfaa27010d58012ca6cb3c38e4dd0c841bbaa2Mass Harvest28320762022-10-23 2:55:5434 days 9 hrs ago0x18b2555b76a24ce30fe678d601da01d57c9f1879 IN  Impermax: Impermax Chef0 MOVR0.000152134
0x8e556f2eb0eb757c48c4dedbe665f84e156d2c49cf926f671d7b3c4b26d9fa14Mass Harvest28320702022-10-23 2:54:4234 days 9 hrs ago0x18b2555b76a24ce30fe678d601da01d57c9f1879 IN  Impermax: Impermax Chef0 MOVR0.000146453
0xbec0868a419e72b0ab38eb0532bdb2e4964ac12c09f7cc5be075c0ff43d35dc3Mass Harvest28262002022-10-22 6:45:0635 days 5 hrs ago0x9bdbdb4a8f7f816c87a67f5281484ed902c6b942 IN  Impermax: Impermax Chef0 MOVR0.0005889012
0x0d174dcd0e0269ae20092c77222c637b2ed2ffae888e06e55bae6459961fd68fMass Harvest27708662022-10-14 7:43:0043 days 4 hrs ago0x153c554a42b0356913058d933a75f01d9ce0cf46 IN  Impermax: Impermax Chef0 MOVR0.000087705
0x52a1b3ce5b88d88951b26e223c1544bca6bed9ee679aee9f0a5f1975fee01db5Mass Harvest27545622022-10-11 23:38:0645 days 12 hrs ago0x9bdbdb4a8f7f816c87a67f5281484ed902c6b942 IN  Impermax: Impermax Chef0 MOVR0.000490751
0x41f33d0049be181ba43a9a82fa834054fbde72e7960deecbfdbeec43a0a5888fMass Harvest26908962022-10-02 20:02:3654 days 16 hrs ago0x9bdbdb4a8f7f816c87a67f5281484ed902c6b942 IN  Impermax: Impermax Chef0 MOVR0.0005889012
0x84b9711729e7b0c37c75fda1664ea18d0059c1de77f3d1e10a978e124004b591Mass Harvest26805702022-10-01 8:17:1256 days 4 hrs ago0xa7b0678b527c5d9fff97b1f1d5ca910be8f6a7e1 IN  Impermax: Impermax Chef0 MOVR0.00027207
0x8399ff7023bcfd41750274c836b3b02a974ea6a42150d378c3ab20cdd88ad992Mass Harvest26429072022-09-25 22:10:3661 days 14 hrs ago0x9bdbdb4a8f7f816c87a67f5281484ed902c6b942 IN  Impermax: Impermax Chef0 MOVR0.000364593
0x752c47553a9aae9aa6e90fc8e36dbbc00914c2f06b8548d5a1441f4d63204337Mass Harvest26428952022-09-25 22:08:0661 days 14 hrs ago0x9bdbdb4a8f7f816c87a67f5281484ed902c6b942 IN  Impermax: Impermax Chef0 MOVR0.000172007
0x549fa5aa6c013fe3a27911a91e7b36618481fb68669144c420e82a3f7670d58bMass Harvest26151182022-09-21 21:09:4865 days 15 hrs ago0x18b2555b76a24ce30fe678d601da01d57c9f1879 IN  Impermax: Impermax Chef0 MOVR0.000108828
0xb58fab772dd4665bf1183739305e2def59fc0651d2b0aa0afefcf648733ee09fMass Harvest25789282022-09-16 14:50:1270 days 21 hrs ago0x9bdbdb4a8f7f816c87a67f5281484ed902c6b942 IN  Impermax: Impermax Chef0 MOVR0.0007361265
0x74ea2745f22d5ad04435c9b1bfca6ab52d86c8105ad647cb9d97792545332c70Mass Harvest25776622022-09-16 10:16:3671 days 2 hrs ago0x1ad0220dd6db112fbb95d0e49dd8b0e19bdfdcae IN  Impermax: Impermax Chef0 MOVR0.000456402
0x540fb9d8ee97477422e7fc3baefdab118b032f2622695a9922c6d53c06847a04Mass Harvest25103082022-09-05 17:22:5481 days 18 hrs ago0x00432d1ff71472449d7c763417f1ee22248815aa IN  Impermax: Impermax Chef0 MOVR0.000022331
0x87f586fe29daac8a01d9ff441d251a770833f6ea59e0d8f492265daf88d0cb13Mass Harvest25103052022-09-05 17:22:1881 days 18 hrs ago0x00432d1ff71472449d7c763417f1ee22248815aa IN  Impermax: Impermax Chef0 MOVR0.000124739
0x4b5b636154c62bc3d3a36ac99b24d949853f3dd91a5e8973e6a73d40d1dbb759Mass Harvest24873852022-09-02 1:04:3685 days 11 hrs ago0x9bdbdb4a8f7f816c87a67f5281484ed902c6b942 IN  Impermax: Impermax Chef0 MOVR0.0002281605
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ImpermaxChef

Compiler Version
v0.6.6+commit.6c089d02

Optimization Enabled:
Yes with 999999 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at moonriver.moonscan.io on 2021-11-21
*/

// File: contracts\Ownable.sol

// SPDX-License-Identifier: MIT
// Audit on 5-Jan-2021 by Keno and BoringCrypto

// P1 - P3: OK
pragma solidity =0.6.6;

// Source: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/Ownable.sol + Claimable.sol
// Edited by BoringCrypto

// T1 - T4: OK
contract OwnableData {
    // V1 - V5: OK
    address public owner;
    // V1 - V5: OK
    address public pendingOwner;
}

// T1 - T4: OK
contract Ownable is OwnableData {
    // E1: OK
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor () internal {
        owner = msg.sender;
        emit OwnershipTransferred(address(0), msg.sender);
    }

    // F1 - F9: OK
    // C1 - C21: OK
    function transferOwnership(address newOwner, bool direct, bool renounce) public onlyOwner {
        if (direct) {
            // Checks
            require(newOwner != address(0) || renounce, "Ownable: zero address");

            // Effects
            emit OwnershipTransferred(owner, newOwner);
            owner = newOwner;
        } else {
            // Effects
            pendingOwner = newOwner;
        }
    }

    // F1 - F9: OK
    // C1 - C21: OK
    function claimOwnership() public {
        address _pendingOwner = pendingOwner;

        // Checks
        require(msg.sender == _pendingOwner, "Ownable: caller != pending owner");

        // Effects
        emit OwnershipTransferred(owner, _pendingOwner);
        owner = _pendingOwner;
        pendingOwner = address(0);
    }

    // M1 - M5: OK
    // C1 - C21: OK
    modifier onlyOwner() {
        require(msg.sender == owner, "Ownable: caller is not the owner");
        _;
    }
}

// File: contracts\libraries\SafeMath.sol

pragma solidity =0.6.6;

// From https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/math/Math.sol
// Subject to the MIT license.

/**
 * @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 addition of two unsigned integers, reverting with custom message on overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, errorMessage);

        return c;
    }

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

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on underflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     * - Subtraction cannot underflow.
     */
    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 multiplication of two unsigned integers, reverting on overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b, string memory errorMessage) 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, errorMessage);

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

// File: contracts\libraries\SafeToken.sol

pragma solidity =0.6.6;

interface ERC20Interface {
    function balanceOf(address user) external view returns (uint256);
}

library SafeToken {
    function myBalance(address token) internal view returns (uint256) {
        return ERC20Interface(token).balanceOf(address(this));
    }

    function balanceOf(address token, address user) internal view returns (uint256) {
        return ERC20Interface(token).balanceOf(user);
    }

    function safeApprove(address token, address to, uint256 value) internal {
        // bytes4(keccak256(bytes('approve(address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x095ea7b3, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), "!safeApprove");
    }

    function safeTransfer(address token, address to, uint256 value) internal {
        // bytes4(keccak256(bytes('transfer(address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), "!safeTransfer");
    }

    function safeTransferFrom(address token, address from, address to, uint256 value) internal {
        // bytes4(keccak256(bytes('transferFrom(address,address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), "!safeTransferFrom");
    }

    function safeTransferETH(address to, uint256 value) internal {
        (bool success, ) = to.call.value(value)(new bytes(0));
        require(success, "!safeTransferETH");
    }
}

// File: contracts\libraries\SignedSafeMath.sol

// SPDX-License-Identifier: MIT

pragma solidity =0.6.6;

library SignedSafeMath {
    int256 constant private _INT256_MIN = -2**255;

    /**
     * @dev Returns the multiplication of two signed integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(int256 a, int256 b) internal pure returns (int256) {
        // 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;
        }

        require(!(a == -1 && b == _INT256_MIN), "SignedSafeMath: multiplication overflow");

        int256 c = a * b;
        require(c / a == b, "SignedSafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two signed 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(int256 a, int256 b) internal pure returns (int256) {
        require(b != 0, "SignedSafeMath: division by zero");
        require(!(b == -1 && a == _INT256_MIN), "SignedSafeMath: division overflow");

        int256 c = a / b;

        return c;
    }

    /**
     * @dev Returns the subtraction of two signed integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a), "SignedSafeMath: subtraction overflow");

        return c;
    }

    /**
     * @dev Returns the addition of two signed integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a), "SignedSafeMath: addition overflow");

        return c;
    }

    function toUInt256(int256 a) internal pure returns (uint256) {
        require(a >= 0, "Integer < 0");
        return uint256(a);
    }
}

// File: contracts\interfaces\IBorrowTracker.sol

pragma solidity >=0.5.0;

interface IBorrowTracker {
	function trackBorrow(address borrower, uint borrowBalance, uint borrowIndex) external;
}

// File: contracts\interfaces\IERC20.sol

pragma solidity >=0.5.0;

interface IERC20 {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);
}

// File: contracts\interfaces\IBorrowable.sol

pragma solidity >=0.5.0;

interface IBorrowable {

	/*** Impermax ERC20 ***/
	
	event Transfer(address indexed from, address indexed to, uint value);
	event Approval(address indexed owner, address indexed spender, uint value);
	
	function name() external pure returns (string memory);
	function symbol() external pure returns (string memory);
	function decimals() external pure returns (uint8);
	function totalSupply() external view returns (uint);
	function balanceOf(address owner) external view returns (uint);
	function allowance(address owner, address spender) external view returns (uint);
	function approve(address spender, uint value) external returns (bool);
	function transfer(address to, uint value) external returns (bool);
	function transferFrom(address from, address to, uint value) external returns (bool);
	
	function DOMAIN_SEPARATOR() external view returns (bytes32);
	function PERMIT_TYPEHASH() external pure returns (bytes32);
	function nonces(address owner) external view returns (uint);
	function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
	
	/*** Pool Token ***/
	
	event Mint(address indexed sender, address indexed minter, uint mintAmount, uint mintTokens);
	event Redeem(address indexed sender, address indexed redeemer, uint redeemAmount, uint redeemTokens);
	event Sync(uint totalBalance);
	
	function underlying() external view returns (address);
	function factory() external view returns (address);
	function totalBalance() external view returns (uint);
	function MINIMUM_LIQUIDITY() external pure returns (uint);

	function exchangeRate() external returns (uint);
	function mint(address minter) external returns (uint mintTokens);
	function redeem(address redeemer) external returns (uint redeemAmount);
	function skim(address to) external;
	function sync() external;
	
	function _setFactory() external;
	
	/*** Borrowable ***/

	event BorrowApproval(address indexed owner, address indexed spender, uint value);
	event Borrow(address indexed sender, address indexed borrower, address indexed receiver, uint borrowAmount, uint repayAmount, uint accountBorrowsPrior, uint accountBorrows, uint totalBorrows);
	event Liquidate(address indexed sender, address indexed borrower, address indexed liquidator, uint seizeTokens, uint repayAmount, uint accountBorrowsPrior, uint accountBorrows, uint totalBorrows);
	
	function BORROW_FEE() external pure returns (uint);
	function collateral() external view returns (address);
	function reserveFactor() external view returns (uint);
	function exchangeRateLast() external view returns (uint);
	function borrowIndex() external view returns (uint);
	function totalBorrows() external view returns (uint);
	function borrowAllowance(address owner, address spender) external view returns (uint);
	function borrowBalance(address borrower) external view returns (uint);	
	function borrowTracker() external view returns (address);
	
	function BORROW_PERMIT_TYPEHASH() external pure returns (bytes32);
	function borrowApprove(address spender, uint256 value) external returns (bool);
	function borrowPermit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
	function borrow(address borrower, address receiver, uint borrowAmount, bytes calldata data) external;
	function liquidate(address borrower, address liquidator) external returns (uint seizeTokens);
	function trackBorrow(address borrower) external;
	
	/*** Borrowable Interest Rate Model ***/

	event AccrueInterest(uint interestAccumulated, uint borrowIndex, uint totalBorrows);
	event CalculateKink(uint kinkRate);
	event CalculateBorrowRate(uint borrowRate);
	
	function KINK_BORROW_RATE_MAX() external pure returns (uint);
	function KINK_BORROW_RATE_MIN() external pure returns (uint);
	function KINK_MULTIPLIER() external pure returns (uint);
	function borrowRate() external view returns (uint);
	function kinkBorrowRate() external view returns (uint);
	function kinkUtilizationRate() external view returns (uint);
	function adjustSpeed() external view returns (uint);
	function rateUpdateTimestamp() external view returns (uint32);
	function accrualTimestamp() external view returns (uint32);
	
	function accrueInterest() external;
	
	/*** Borrowable Setter ***/

	event NewReserveFactor(uint newReserveFactor);
	event NewKinkUtilizationRate(uint newKinkUtilizationRate);
	event NewAdjustSpeed(uint newAdjustSpeed);
	event NewBorrowTracker(address newBorrowTracker);

	function RESERVE_FACTOR_MAX() external pure returns (uint);
	function KINK_UR_MIN() external pure returns (uint);
	function KINK_UR_MAX() external pure returns (uint);
	function ADJUST_SPEED_MIN() external pure returns (uint);
	function ADJUST_SPEED_MAX() external pure returns (uint);
	
	function _initialize (
		string calldata _name, 
		string calldata _symbol,
		address _underlying, 
		address _collateral
	) external;
	function _setReserveFactor(uint newReserveFactor) external;
	function _setKinkUtilizationRate(uint newKinkUtilizationRate) external;
	function _setAdjustSpeed(uint newAdjustSpeed) external;
	function _setBorrowTracker(address newBorrowTracker) external;
}

// File: contracts\interfaces\IRewarder.sol

pragma solidity =0.6.6;



interface IRewarder {
    function onReward(address _borrowable, address user, address recipient, uint256 rewardAmount, uint256 newShares) external;
    function pendingTokens(address _borrowable, address user, uint256 rewardAmount) external view returns (IERC20[] memory, uint256[] memory);
}

// File: contracts\interfaces\IFactory.sol

pragma solidity >=0.5.0;

interface IFactory {
	event LendingPoolInitialized(address indexed uniswapV2Pair, address indexed token0, address indexed token1,
		address collateral, address borrowable0, address borrowable1, uint lendingPoolId);
	event NewPendingAdmin(address oldPendingAdmin, address newPendingAdmin);
	event NewAdmin(address oldAdmin, address newAdmin);
	event NewReservesPendingAdmin(address oldReservesPendingAdmin, address newReservesPendingAdmin);
	event NewReservesAdmin(address oldReservesAdmin, address newReservesAdmin);
	event NewReservesManager(address oldReservesManager, address newReservesManager);
	
	function admin() external view returns (address);
	function pendingAdmin() external view returns (address);
	function reservesAdmin() external view returns (address);
	function reservesPendingAdmin() external view returns (address);
	function reservesManager() external view returns (address);

	function getLendingPool(address uniswapV2Pair) external view returns (
		bool initialized, 
		uint24 lendingPoolId, 
		address collateral, 
		address borrowable0, 
		address borrowable1
	);
	function allLendingPools(uint) external view returns (address uniswapV2Pair);
	function allLendingPoolsLength() external view returns (uint);
	
	function bDeployer() external view returns (address);
	function cDeployer() external view returns (address);
	function simpleUniswapOracle() external view returns (address);

	function createCollateral(address uniswapV2Pair) external returns (address collateral);
	function createBorrowable0(address uniswapV2Pair) external returns (address borrowable0);
	function createBorrowable1(address uniswapV2Pair) external returns (address borrowable1);
	function initializeLendingPool(address uniswapV2Pair) external;

	function _setPendingAdmin(address newPendingAdmin) external;
	function _acceptAdmin() external;
	function _setReservesPendingAdmin(address newPendingAdmin) external;
	function _acceptReservesAdmin() external;
	function _setReservesManager(address newReservesManager) external;
}

// File: contracts\ImpermaxChef.sol

pragma solidity =0.6.6;
pragma experimental ABIEncoderV2;









contract ImpermaxChef is IBorrowTracker, Ownable {
	using SafeMath for uint256;
	using SignedSafeMath for int256;
	using SafeToken for address;

	struct UserInfo {
		uint256 shares;
		int256 rewardDebt;
	}

	struct PoolInfo {
		uint256 totalShares;
		uint256 accRewardPerShare;
		uint256 lastRewardTime;
		uint256 allocPoint;
		IRewarder rewarder;
	}

	address public immutable rewardToken;
	uint256 public rewardPerSec;
	
	mapping(address => PoolInfo) public poolInfo;
	mapping(address => mapping(address => UserInfo)) public userInfo; // [borrowable][user]
	
	uint256 public totalAllocPoint;

	uint256 private constant ACC_PRECISION = 2**160;
	uint256 private constant SHARES_PRECISION = 2**96;
	uint256 private constant MAX_REWARD_PER_SEC = 1.58e18; // limit reward to 50M IMX per year

	event TrackBorrow(address indexed borrowable, address indexed borrower, uint256 borrowBalance, uint256 borrowIndex);
	event Harvest(address indexed borrowable, address indexed user, uint256 amount);
	event LogSetReward(uint256 rewardPerSec);
	event LogSetPool(address indexed borrowable, uint256 allocPoint, IRewarder indexed rewarder, bool overwrite);
	event LogUpdatePool(address indexed borrowable, uint256 lastRewardTime, uint256 totalShares, uint256 accRewardPerShare);
	
	constructor(address _rewardToken, uint256 _rewardPerSec) public {
		require(_rewardPerSec < MAX_REWARD_PER_SEC, "ImperaxChef: MAX_REWARD_PER_SEC");
		rewardToken = _rewardToken;
		rewardPerSec = _rewardPerSec;
		emit LogSetReward(_rewardPerSec);
	}
		
	/* 
	 * Owner
	 */
	 
	function setReward(uint256 _rewardPerSec) public onlyOwner {
		require(_rewardPerSec < MAX_REWARD_PER_SEC, "ImperaxChef: MAX_REWARD_PER_SEC");
		rewardPerSec = _rewardPerSec;
		emit LogSetReward(_rewardPerSec);
	}
	
	function set(address borrowable, uint256 allocPoint, IRewarder rewarder, bool overwrite) public onlyOwner {
		PoolInfo storage pool = poolInfo[borrowable];
		totalAllocPoint = totalAllocPoint.sub(pool.allocPoint).add(allocPoint);
		pool.allocPoint = allocPoint;
		if (overwrite) pool.rewarder = rewarder;
		emit LogSetPool(borrowable, allocPoint, overwrite ? rewarder : pool.rewarder, overwrite);
	}
	
	function setUniswapV2Pair(IFactory factory, address uniswapV2Pair, uint256 allocPoint, IRewarder rewarder, bool overwrite) external {
		(,,, address borrowable0, address borrowable1) = factory.getLendingPool(uniswapV2Pair);
		set(borrowable0, allocPoint, rewarder, overwrite);
		set(borrowable1, allocPoint, rewarder, overwrite);
	}
		
	/* 
	 * Interactions
	 */
	
	function pendingReward(address borrowable, address _user) external view returns (uint256 pending) {
		PoolInfo memory pool = poolInfo[borrowable];
		UserInfo memory user = userInfo[borrowable][_user];
		uint256 accRewardPerShare = pool.accRewardPerShare;
		uint256 totalShares = pool.totalShares;
		if (getBlockTimestamp() > pool.lastRewardTime && totalShares != 0) {
			uint256 timeElapsed = getBlockTimestamp().sub(pool.lastRewardTime);
			uint256 reward = timeElapsed.mul(rewardPerSec).mul(pool.allocPoint) / totalAllocPoint;
			accRewardPerShare = accRewardPerShare.add(reward.mul(ACC_PRECISION) / totalShares);
		}
		pending = int256(user.shares.mul(accRewardPerShare) / ACC_PRECISION).sub(user.rewardDebt).toUInt256();
	}

	function updatePool(address borrowable) public returns (PoolInfo memory pool) {
		pool = poolInfo[borrowable];
		if (getBlockTimestamp() > pool.lastRewardTime) {
			uint256 totalShares = pool.totalShares;
			if (totalShares > 0) {
				uint256 timeElapsed = getBlockTimestamp().sub(pool.lastRewardTime);
				uint256 reward = timeElapsed.mul(rewardPerSec).mul(pool.allocPoint) / totalAllocPoint;
				pool.accRewardPerShare = pool.accRewardPerShare.add((reward.mul(ACC_PRECISION) / totalShares));
			}
			pool.lastRewardTime = getBlockTimestamp();
			poolInfo[borrowable] = pool;
			emit LogUpdatePool(borrowable, pool.lastRewardTime, totalShares, pool.accRewardPerShare);
		}
	}

	function harvest(address borrowable, address to) public {
		PoolInfo memory pool = updatePool(borrowable);
		UserInfo storage user = userInfo[borrowable][msg.sender];
		int256 accumulatedReward = int256(user.shares.mul(pool.accRewardPerShare) / ACC_PRECISION);
		uint256 _pendingReward = accumulatedReward.sub(user.rewardDebt).toUInt256();

		// Effects
		user.rewardDebt = accumulatedReward;

		// Interactions
		if (_pendingReward != 0) {
			rewardToken.safeTransfer(to, _pendingReward);
		}
		if (address(pool.rewarder) != address(0)) {
			pool.rewarder.onReward(borrowable, msg.sender, to, _pendingReward, user.shares);
		}

		emit Harvest(borrowable, msg.sender, _pendingReward);
	}
	
	function trackBorrow(address borrower, uint borrowBalance, uint borrowIndex) external override {
		address borrowable = msg.sender;
		PoolInfo memory pool = updatePool(borrowable);
		
		// Effects
		UserInfo storage user = userInfo[borrowable][borrower];
		uint newShares = borrowBalance.mul(SHARES_PRECISION).div(borrowIndex);
		int256 diffShares = int256(newShares).sub(int256(user.shares));
		int256 diffRewardDebt = diffShares.mul(int256(pool.accRewardPerShare)) / int256(ACC_PRECISION);
		user.shares = newShares;
		user.rewardDebt = user.rewardDebt.add(diffRewardDebt);
		poolInfo[borrowable].totalShares = int256(pool.totalShares).add(diffShares).toUInt256();

        // Interactions
		if (address(pool.rewarder) != address(0)) {
			pool.rewarder.onReward(borrowable, borrower, borrower, 0, newShares);
		}
		
		emit TrackBorrow(borrowable, borrower, borrowBalance, borrowIndex);
	}
	
	/*
	 * Aggregators
	 */
	 
	function massUpdatePools(address[] calldata borrowables) external {
		uint256 len = borrowables.length;
		for (uint256 i = 0; i < len; ++i) {
			updatePool(borrowables[i]);
		}
	}
	 
	function massHarvest(address[] calldata borrowables, address to) external {
		uint256 len = borrowables.length;
		for (uint256 i = 0; i < len; ++i) {
			harvest(borrowables[i], to);
		}
	}
	
	function getBlockTimestamp() public virtual view returns (uint256) {
		return block.timestamp;
	}
}

Contract ABI

[{"inputs":[{"internalType":"address","name":"_rewardToken","type":"address"},{"internalType":"uint256","name":"_rewardPerSec","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"borrowable","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Harvest","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"borrowable","type":"address"},{"indexed":false,"internalType":"uint256","name":"allocPoint","type":"uint256"},{"indexed":true,"internalType":"contract IRewarder","name":"rewarder","type":"address"},{"indexed":false,"internalType":"bool","name":"overwrite","type":"bool"}],"name":"LogSetPool","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"rewardPerSec","type":"uint256"}],"name":"LogSetReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"borrowable","type":"address"},{"indexed":false,"internalType":"uint256","name":"lastRewardTime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalShares","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"accRewardPerShare","type":"uint256"}],"name":"LogUpdatePool","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"borrowable","type":"address"},{"indexed":true,"internalType":"address","name":"borrower","type":"address"},{"indexed":false,"internalType":"uint256","name":"borrowBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"borrowIndex","type":"uint256"}],"name":"TrackBorrow","type":"event"},{"inputs":[],"name":"claimOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBlockTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"borrowable","type":"address"},{"internalType":"address","name":"to","type":"address"}],"name":"harvest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"borrowables","type":"address[]"},{"internalType":"address","name":"to","type":"address"}],"name":"massHarvest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"borrowables","type":"address[]"}],"name":"massUpdatePools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"borrowable","type":"address"},{"internalType":"address","name":"_user","type":"address"}],"name":"pendingReward","outputs":[{"internalType":"uint256","name":"pending","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"poolInfo","outputs":[{"internalType":"uint256","name":"totalShares","type":"uint256"},{"internalType":"uint256","name":"accRewardPerShare","type":"uint256"},{"internalType":"uint256","name":"lastRewardTime","type":"uint256"},{"internalType":"uint256","name":"allocPoint","type":"uint256"},{"internalType":"contract IRewarder","name":"rewarder","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardPerSec","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"borrowable","type":"address"},{"internalType":"uint256","name":"allocPoint","type":"uint256"},{"internalType":"contract IRewarder","name":"rewarder","type":"address"},{"internalType":"bool","name":"overwrite","type":"bool"}],"name":"set","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rewardPerSec","type":"uint256"}],"name":"setReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IFactory","name":"factory","type":"address"},{"internalType":"address","name":"uniswapV2Pair","type":"address"},{"internalType":"uint256","name":"allocPoint","type":"uint256"},{"internalType":"contract IRewarder","name":"rewarder","type":"address"},{"internalType":"bool","name":"overwrite","type":"bool"}],"name":"setUniswapV2Pair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalAllocPoint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"borrower","type":"address"},{"internalType":"uint256","name":"borrowBalance","type":"uint256"},{"internalType":"uint256","name":"borrowIndex","type":"uint256"}],"name":"trackBorrow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"},{"internalType":"bool","name":"direct","type":"bool"},{"internalType":"bool","name":"renounce","type":"bool"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"borrowable","type":"address"}],"name":"updatePool","outputs":[{"components":[{"internalType":"uint256","name":"totalShares","type":"uint256"},{"internalType":"uint256","name":"accRewardPerShare","type":"uint256"},{"internalType":"uint256","name":"lastRewardTime","type":"uint256"},{"internalType":"uint256","name":"allocPoint","type":"uint256"},{"internalType":"contract IRewarder","name":"rewarder","type":"address"}],"internalType":"struct ImpermaxChef.PoolInfo","name":"pool","type":"tuple"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"userInfo","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"int256","name":"rewardDebt","type":"int256"}],"stateMutability":"view","type":"function"}]

60a06040523480156200001157600080fd5b5060405162002078380380620020788339810160408190526200003491620000ff565b600080546001600160a01b0319163390811782556040519091907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a36715ed49a0f91e00008110620000a65760405162461bcd60e51b81526004016200009d9062000139565b60405180910390fd5b6001600160601b0319606083901b1660805260028190556040517f95689dd8916ac2af3670f360c0db71ab5304c307b1b42def2b02b8cca620d0ee90620000ef90839062000170565b60405180910390a1505062000179565b6000806040838503121562000112578182fd5b82516001600160a01b038116811462000129578283fd5b6020939093015192949293505050565b6020808252601f908201527f496d7065726178436865663a204d41585f5245574152445f5045525f53454300604082015260600190565b90815260200190565b60805160601c611edc6200019c60003980610bd852806111685250611edc6000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c8063578461aa116100cd5780638da5cb5b116100815780639ced7e76116100665780639ced7e76146102a0578063e30c3978146102b3578063f7c618c1146102bb57610151565b80638da5cb5b146102675780639a7b5f111461027c57610151565b806366cc1857116100b257806366cc18571461022c578063796b89b91461023f5780637b46c54f1461024757610151565b8063578461aa14610206578063629f89891461021957610151565b8063293be4561161012457806339eaed291161010957806339eaed29146101e35780634e71e0c8146101f65780634f41e95d146101fe57610151565b8063293be456146101bd57806331c1abdc146101d057610151565b806305285d7f14610156578063078dfbe71461016b5780630f208beb1461017e57806317caf6f1146101a8575b600080fd5b6101696101643660046117d5565b6102c3565b005b610169610179366004611739565b6104e7565b61019161018c366004611701565b61066f565b60405161019f929190611dea565b60405180910390f35b6101b0610693565b60405161019f9190611dd1565b6101696101cb366004611983565b610699565b6101696101de366004611849565b61076b565b6101696101f1366004611809565b6107b0565b6101696107ef565b6101b06108d5565b610169610214366004611783565b6108db565b61016961022736600461192a565b610a63565b61016961023a366004611701565b610b17565b6101b0610d25565b61025a6102553660046116e5565b610d29565b60405161019f9190611d81565b61026f610f25565b60405161019f91906119b7565b61028f61028a3660046116e5565b610f41565b60405161019f959493929190611e0e565b6101b06102ae366004611701565b610f87565b61026f61114a565b61026f611166565b336102cc61163d565b6102d582610d29565b73ffffffffffffffffffffffffffffffffffffffff8084166000908152600460209081526040808320938a1683529290529081209192506103398561032d886c0100000000000000000000000063ffffffff61118a16565b9063ffffffff6111e716565b825490915060009061035290839063ffffffff61122916565b905060007401000000000000000000000000000000000000000061038386602001518461128990919063ffffffff16565b8161038a57fe5b848655600186015491900591506103a7908263ffffffff61136216565b600185015584516103c7906103c2908463ffffffff61136216565b6113c2565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600360205260409020919091556080860151161561047557846080015173ffffffffffffffffffffffffffffffffffffffff1663c35f5822878b8c6000886040518663ffffffff1660e01b81526004016104429594939291906119d8565b600060405180830381600087803b15801561045c57600080fd5b505af1158015610470573d6000803e3d6000fd5b505050505b8873ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f0b3b05c4c219d1c1afdced4fa5f0fb112c1a5541a3988b66e483a3af9629b2388a8a6040516104d4929190611dea565b60405180910390a3505050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610541576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053890611c5d565b60405180910390fd5b81156106295773ffffffffffffffffffffffffffffffffffffffff83161515806105685750805b61059e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053890611b92565b6000805460405173ffffffffffffffffffffffffffffffffffffffff808716939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff851617905561066a565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85161790555b505050565b60046020908152600092835260408084209091529082529020805460019091015482565b60055481565b60005473ffffffffffffffffffffffffffffffffffffffff1633146106ea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053890611c5d565b6715ed49a0f91e0000811061072b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053890611a90565b60028190556040517f95689dd8916ac2af3670f360c0db71ab5304c307b1b42def2b02b8cca620d0ee90610760908390611dd1565b60405180910390a150565b8160005b818110156107a9576107a185858381811061078657fe5b905060200201602081019061079b91906116e5565b84610b17565b60010161076f565b5050505050565b8060005b818110156107e9576107e08484838181106107cb57fe5b905060200201602081019061025591906116e5565b506001016107b4565b50505050565b60015473ffffffffffffffffffffffffffffffffffffffff16338114610841576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053890611cef565b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179055600180549091169055565b60025481565b60005473ffffffffffffffffffffffffffffffffffffffff16331461092c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053890611c5d565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602081905260409091209081015460055461097c9186916109709163ffffffff61140216565b9063ffffffff61144416565b6005556003810184905581156109cf576004810180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85161790555b816109f457600481015473ffffffffffffffffffffffffffffffffffffffff166109f6565b825b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f1d3f76656cef3ed455ab0a402cd130d5fd534f3c0a09d0ef79d1f8d5f19d12b28685604051610a54929190611dda565b60405180910390a35050505050565b6000808673ffffffffffffffffffffffffffffffffffffffff16630572bf5f876040518263ffffffff1660e01b8152600401610a9f91906119b7565b60a06040518083038186803b158015610ab757600080fd5b505afa158015610acb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aef91906118af565b94509450505050610b02828686866108db565b610b0e818686866108db565b50505050505050565b610b1f61163d565b610b2883610d29565b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384528252822090830151815493945090927401000000000000000000000000000000000000000091610b89919063ffffffff61118a16565b81610b9057fe5b0490506000610baf6103c284600101548461122990919063ffffffff16565b6001840183905590508015610c0557610c0573ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016868363ffffffff61148316565b608084015173ffffffffffffffffffffffffffffffffffffffff1615610cb857608084015183546040517fc35f582200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163c35f582291610c85918a9133918b9188916004016119d8565b600060405180830381600087803b158015610c9f57600080fd5b505af1158015610cb3573d6000803e3d6000fd5b505050505b3373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fa0306f61d3fafe13787b78e276cb6b644382854a66cb46daae14227d3ec2679783604051610d159190611dd1565b60405180910390a3505050505050565b4290565b610d3161163d565b5073ffffffffffffffffffffffffffffffffffffffff808216600090815260036020818152604092839020835160a0810185528154815260018201549281019290925260028101549382018490529182015460608201526004909101549092166080830152610d9e610d25565b1115610f205780518015610e4f576000610dca8360400151610dbe610d25565b9063ffffffff61140216565b90506000600554610dfa8560600151610dee6002548661118a90919063ffffffff16565b9063ffffffff61118a16565b81610e0157fe5b049050610e4783610e2d837401000000000000000000000000000000000000000063ffffffff61118a16565b81610e3457fe5b602087015191900463ffffffff61144416565b602085015250505b610e57610d25565b604083810191825273ffffffffffffffffffffffffffffffffffffffff858116600081815260036020818152918590208851815591880151600183018190559551600283018190556060890151918301919091556080880151600490920180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169290941691909117909255915191927ffa4534c55db3b65cd96eafe03e5ce9fd87638590f49d5907978ff8489ea66ecb92610f1692918691611df8565b60405180910390a2505b919050565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60036020819052600091825260409091208054600182015460028301549383015460049093015491939092909173ffffffffffffffffffffffffffffffffffffffff1685565b6000610f9161163d565b5073ffffffffffffffffffffffffffffffffffffffff808416600090815260036020818152604092839020835160a081018552815481526001820154928101929092526002810154938201939093529082015460608201526004909101549091166080820152610fff611682565b5073ffffffffffffffffffffffffffffffffffffffff80851660009081526004602090815260408083209387168352928152908290208251808401845281548152600190910154818301529083015183519284015191929091611060610d25565b11801561106c57508015155b156110f55760006110838560400151610dbe610d25565b905060006005546110a78760600151610dee6002548661118a90919063ffffffff16565b816110ae57fe5b0490506110f0836110da837401000000000000000000000000000000000000000063ffffffff61118a16565b816110e157fe5b8691900463ffffffff61144416565b935050505b6020830151835161113f916103c291740100000000000000000000000000000000000000009061112b908763ffffffff61118a16565b8161113257fe5b049063ffffffff61122916565b979650505050505050565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b600082611199575060006111e1565b828202828482816111a657fe5b04146111de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053890611bc9565b90505b92915050565b60006111de83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506115a6565b600081830381831280159061123e5750838113155b80611253575060008312801561125357508381135b6111de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053890611d24565b600082611298575060006111e1565b827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1480156112e657507f800000000000000000000000000000000000000000000000000000000000000082145b1561131d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053890611c92565b8282028284828161132a57fe5b05146111de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053890611c92565b60008282018183128015906113775750838112155b8061138c575060008312801561138c57508381125b6111de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053890611b35565b6000808212156113fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053890611ac7565b5090565b60006111de83836040518060400160405280601f81526020017f536166654d6174683a207375627472616374696f6e20756e646572666c6f77008152506115f7565b6000828201838110156111de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053890611afe565b600060608473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85856040516024016114b6929190611a19565b6040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051611504919061199b565b6000604051808303816000865af19150503d8060008114611541576040519150601f19603f3d011682016040523d82523d6000602084013e611546565b606091505b50915091508180156115705750805115806115705750808060200190518101906115709190611893565b6107a9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053890611c26565b600081836115e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105389190611a3f565b5060008385816115ed57fe5b0495945050505050565b60008184841115611635576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105389190611a3f565b505050900390565b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090565b604051806040016040528060008152602001600081525090565b60008083601f8401126116ad578182fd5b50813567ffffffffffffffff8111156116c4578182fd5b60208301915083602080830285010111156116de57600080fd5b9250929050565b6000602082840312156116f6578081fd5b81356111de81611e73565b60008060408385031215611713578081fd5b823561171e81611e73565b9150602083013561172e81611e73565b809150509250929050565b60008060006060848603121561174d578081fd5b833561175881611e73565b9250602084013561176881611e98565b9150604084013561177881611e98565b809150509250925092565b60008060008060808587031215611798578081fd5b84356117a381611e73565b93506020850135925060408501356117ba81611e73565b915060608501356117ca81611e98565b939692955090935050565b6000806000606084860312156117e9578283fd5b83356117f481611e73565b95602085013595506040909401359392505050565b6000806020838503121561181b578182fd5b823567ffffffffffffffff811115611831578283fd5b61183d8582860161169c565b90969095509350505050565b60008060006040848603121561185d578283fd5b833567ffffffffffffffff811115611873578384fd5b61187f8682870161169c565b909450925050602084013561177881611e73565b6000602082840312156118a4578081fd5b81516111de81611e98565b600080600080600060a086880312156118c6578081fd5b85516118d181611e98565b602087015190955062ffffff811681146118e9578182fd5b60408701519094506118fa81611e73565b606087015190935061190b81611e73565b608087015190925061191c81611e73565b809150509295509295909350565b600080600080600060a08688031215611941578081fd5b853561194c81611e73565b9450602086013561195c81611e73565b935060408601359250606086013561197381611e73565b9150608086013561191c81611e98565b600060208284031215611994578081fd5b5035919050565b600082516119ad818460208701611e47565b9190910192915050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff958616815293851660208501529190931660408301526060820192909252608081019190915260a00190565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b6000602082528251806020840152611a5e816040850160208701611e47565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6020808252601f908201527f496d7065726178436865663a204d41585f5245574152445f5045525f53454300604082015260600190565b6020808252600b908201527f496e7465676572203c2030000000000000000000000000000000000000000000604082015260600190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526021908201527f5369676e6564536166654d6174683a206164646974696f6e206f766572666c6f60408201527f7700000000000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526015908201527f4f776e61626c653a207a65726f20616464726573730000000000000000000000604082015260600190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60408201527f7700000000000000000000000000000000000000000000000000000000000000606082015260800190565b6020808252600d908201527f21736166655472616e7366657200000000000000000000000000000000000000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526027908201527f5369676e6564536166654d6174683a206d756c7469706c69636174696f6e206f60408201527f766572666c6f7700000000000000000000000000000000000000000000000000606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c657220213d2070656e64696e67206f776e6572604082015260600190565b60208082526024908201527f5369676e6564536166654d6174683a207375627472616374696f6e206f76657260408201527f666c6f7700000000000000000000000000000000000000000000000000000000606082015260800190565b600060a0820190508251825260208301516020830152604083015160408301526060830151606083015273ffffffffffffffffffffffffffffffffffffffff608084015116608083015292915050565b90815260200190565b9182521515602082015260400190565b918252602082015260400190565b9283526020830191909152604082015260600190565b94855260208501939093526040840191909152606083015273ffffffffffffffffffffffffffffffffffffffff16608082015260a00190565b60005b83811015611e62578181015183820152602001611e4a565b838111156107e95750506000910152565b73ffffffffffffffffffffffffffffffffffffffff81168114611e9557600080fd5b50565b8015158114611e9557600080fdfea2646970667358221220db502ac0971496f1be9a40de0440b513757eb4ac8476805fba95d818b5d2a5a664736f6c63430006060033000000000000000000000000900f1ec5819fa087d368877cd03b265bf1802667000000000000000000000000000000000000000000000000000000425b52e200

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000900f1ec5819fa087d368877cd03b265bf1802667000000000000000000000000000000000000000000000000000000425b52e200

-----Decoded View---------------
Arg [0] : _rewardToken (address): 0x900f1ec5819fa087d368877cd03b265bf1802667
Arg [1] : _rewardPerSec (uint256): 285000000000

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000900f1ec5819fa087d368877cd03b265bf1802667
Arg [1] : 000000000000000000000000000000000000000000000000000000425b52e200


Deployed ByteCode Sourcemap

22123:6189:0:-:0;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22123:6189:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;9;2:12;26873:909:0;;;;;;;;;:::i;:::-;;792:432;;;;;;;;;:::i;22616:64::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;22709:30;;;:::i;:::-;;;;;;;;23715:217;;;;;;;;;:::i;28011:193::-;;;;;;;;;:::i;27820:184::-;;;;;;;;;:::i;1273:340::-;;;:::i;22534:27::-;;;:::i;23938:405::-;;;;;;;;;:::i;24349:336::-;;;;;;;;;:::i;26162:705::-;;;;;;;;;:::i;28210:99::-;;;:::i;25468:689::-;;;;;;;;;:::i;:::-;;;;;;;;378:20;;;:::i;:::-;;;;;;;;22568:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;24725:738;;;;;;;;;:::i;425:27::-;;;:::i;22494:36::-;;;:::i;26873:909::-;26994:10;27009:20;;:::i;:::-;27032:22;27043:10;27032;:22::i;:::-;27101:20;;;;27077:21;27101:20;;;:8;:20;;;;;;;;:30;;;;;;;;;;;27009:45;;-1:-1:-1;27153:52:0;27193:11;27153:35;:13;22840:5;27153:35;:17;:35;:::i;:::-;:39;:52;:39;:52;:::i;:::-;27259:11;;27136:69;;-1:-1:-1;27210:17:0;;27230:42;;27136:69;;27230:42;:21;:42;:::i;:::-;27210:62;;27277:21;22786:6;27301:46;27323:4;:22;;;27301:10;:14;;:46;;;;:::i;:::-;:70;;;;;27376:23;;;27422:15;;;;27301:70;;;;-1:-1:-1;27422:35:0;;27301:70;27422:35;:19;:35;:::i;:::-;27404:15;;;:53;27504:16;;27497:52;;:40;;27526:10;27497:40;:28;:40;:::i;:::-;:50;:52::i;:::-;27462:20;;;;;;;;:8;:20;;;;;:87;;;;27593:13;;;;27585:36;;27581:122;;27629:4;:13;;;:22;;;27652:10;27664:8;27674;27684:1;27687:9;27629:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27629:68:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27629:68:0;;;;27581:122;27740:8;27716:61;;27728:10;27716:61;;;27750:13;27765:11;27716:61;;;;;;;;;;;;;;;;26873:909;;;;;;;;;:::o;792:432::-;1716:5;;;;1702:10;:19;1694:64;;;;;;;;;;;;;;;;;;;;;;897:6:::1;893:324;;;951:22;::::0;::::1;::::0;::::1;::::0;:34:::1;;;977:8;951:34;943:68;;;;;;;;;;;;;;1078:5;::::0;;1057:37:::1;::::0;::::1;::::0;;::::1;::::0;1078:5;::::1;::::0;1057:37:::1;::::0;::::1;1109:5;:16:::0;;;::::1;;::::0;::::1;;::::0;;893:324:::1;;;1182:12;:23:::0;;;::::1;;::::0;::::1;;::::0;;893:324:::1;792:432:::0;;;:::o;22616:64::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;22709:30::-;;;;:::o;23715:217::-;1716:5;;;;1702:10;:19;1694:64;;;;;;;;;;;;;;22895:7:::1;23787:13;:34;23779:78;;;;;;;;;;;;;;23862:12;:28:::0;;;23900:27:::1;::::0;::::1;::::0;::::1;::::0;23877:13;;23900:27:::1;;;;;;;;;;23715:217:::0;:::o;28011:193::-;28104:11;28090;28127:73;28151:3;28147:1;:7;28127:73;;;28167:27;28175:11;;28187:1;28175:14;;;;;;;;;;;;;;;;;;;;;;28191:2;28167:7;:27::i;:::-;28156:3;;28127:73;;;;28011:193;;;;:::o;27820:184::-;27905:11;27891;27928:72;27952:3;27948:1;:7;27928:72;;;27968:26;27979:11;;27991:1;27979:14;;;;;;;;;;;;;;;;;;;;;27968:26;-1:-1:-1;27957:3:0;;27928:72;;;;27820:184;;;:::o;1273:340::-;1341:12;;;;1393:10;:27;;1385:72;;;;;;;;;;;;;;1516:5;;;1495:42;;;;;;;1516:5;;;1495:42;;;1548:5;:21;;;;;;;;;;;;;;1580:25;;;;;;;1273:340::o;22534:27::-;;;;:::o;23938:405::-;1716:5;;;;1702:10;:19;1694:64;;;;;;;;;;;;;;24073:20:::1;::::0;::::1;24049:21;24073:20:::0;;;:8:::1;:20;::::0;;;;;;;24136:15;;::::1;::::0;24116::::1;::::0;:52:::1;::::0;24157:10;;24116:36:::1;::::0;::::1;:19;:36;:::i;:::-;:40:::0;:52:::1;:40;:52;:::i;:::-;24098:15;:70:::0;24173:15:::1;::::0;::::1;:28:::0;;;24206:39;::::1;;;24221:13;::::0;::::1;:24:::0;;;::::1;;::::0;::::1;;::::0;;24206:39:::1;24290:9;:36;;24313:13;::::0;::::1;::::0;::::1;;24290:36;;;24302:8;24290:36;24255:83;;24266:10;24255:83;;;24278:10;24328:9;24255:83;;;;;;;;;;;;;;;;1769:1;23938:405:::0;;;;:::o;24349:336::-;24491:19;24512;24535:7;:22;;;24558:13;24535:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24535:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24535:37:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;24535:37:0;;;;;;;;;24486:86;;;;;;;24577:49;24581:11;24594:10;24606:8;24616:9;24577:3;:49::i;:::-;24631;24635:11;24648:10;24660:8;24670:9;24631:3;:49::i;:::-;24349:336;;;;;;;:::o;26162:705::-;26223:20;;:::i;:::-;26246:22;26257:10;26246;:22::i;:::-;26297:20;;;26273:21;26297:20;;;:8;:20;;;;;;;;26318:10;26297:32;;;;;;26384:22;;;;26368:11;;26223:45;;-1:-1:-1;26297:32:0;;22786:6;;26368:39;;:11;:39;:15;:39;:::i;:::-;:55;;;;;;26334:90;;26429:22;26454:50;:38;26476:4;:15;;;26454:17;:21;;:38;;;;:::i;:50::-;26525:15;;;:35;;;26429:75;-1:-1:-1;26590:19:0;;26586:81;;26617:44;:24;:11;:24;26642:2;26646:14;26617:44;:24;:44;:::i;:::-;26683:13;;;;26675:36;;;26671:133;;26719:13;;;;26786:11;;26719:79;;;;;:22;;;;;;;:79;;26742:10;;26754;;26766:2;;26770:14;;26719:79;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26719:79:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26719:79:0;;;;26671:133;26835:10;26815:47;;26823:10;26815:47;;;26847:14;26815:47;;;;;;;;;;;;;;;26162:705;;;;;;:::o;28210:99::-;28289:15;28210:99;:::o;25468:689::-;25524:20;;:::i;:::-;-1:-1:-1;25558:20:0;;;;;;;;:8;:20;;;;;;;;;25551:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25587:19;:17;:19::i;:::-;:41;25583:570;;;25658:16;;25684:15;;25680:294;;25708:19;25730:44;25754:4;:19;;;25730;:17;:19::i;:::-;:23;:44;:23;:44;:::i;:::-;25708:66;;25781:14;25851:15;;25798:50;25832:4;:15;;;25798:29;25814:12;;25798:11;:15;;:29;;;;:::i;:::-;:33;:50;:33;:50;:::i;:::-;:68;;;;;;;-1:-1:-1;25898:69:0;25954:11;25926:25;25798:68;22786:6;25926:25;:10;:25;:::i;:::-;:39;;;;;25898:22;;;;;25926:39;;25898:69;:26;:69;:::i;:::-;25873:22;;;:94;-1:-1:-1;;25680:294:0;26001:19;:17;:19::i;:::-;25979;;;;:41;;;26026:20;;;;;;;;:8;:20;;;;;;;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26064:83;;26026:20;;26064:83;;;;26026:27;26111:11;;26064:83;;;;;;;;;;25583:570;;25468:689;;;:::o;378:20::-;;;;;;:::o;22568:44::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24725:738::-;24806:15;24828:20;;:::i;:::-;-1:-1:-1;24851:20:0;;;;;;;;:8;:20;;;;;;;;;24828:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24876:20;;:::i;:::-;-1:-1:-1;24899:20:0;;;;;;;;:8;:20;;;;;;;;:27;;;;;;;;;;;;24876:50;;;;;;;;;;;;;;;;;;;;24959:22;;;;25008:16;;25055:19;;;;24876:50;;24959:22;;25033:19;:17;:19::i;:::-;:41;:61;;;;-1:-1:-1;25078:16:0;;;25033:61;25029:324;;;25102:19;25124:44;25148:4;:19;;;25124;:17;:19::i;:44::-;25102:66;;25174:14;25244:15;;25191:50;25225:4;:15;;;25191:29;25207:12;;25191:11;:15;;:29;;;;:::i;:50::-;:68;;;;;;;-1:-1:-1;25285:62:0;25335:11;25307:25;25191:68;22786:6;25307:25;:10;:25;:::i;:::-;:39;;;;;25285:17;;25307:39;;25285:62;:21;:62;:::i;:::-;25265:82;;25029:324;;;25430:15;;;;25374:11;;25367:91;;:79;;22786:6;;25374:34;;25390:17;25374:34;:15;:34;:::i;:::-;:50;;;;;;;25367:79;:62;:79;:::i;:91::-;25357:101;24725:738;-1:-1:-1;;;;;;;24725:738:0:o;425:27::-;;;;;;:::o;22494:36::-;;;:::o;4569:471::-;4627:7;4872:6;4868:47;;-1:-1:-1;4902:1:0;4895:8;;4868:47;4939:5;;;4943:1;4939;:5;:1;4963:5;;;;;:10;4955:56;;;;;;;;;;;;;;5031:1;-1:-1:-1;4569:471:0;;;;;:::o;6227:132::-;6285:7;6312:39;6316:1;6319;6312:39;;;;;;;;;;;;;;;;;:3;:39::i;12224:218::-;12280:6;12310:5;;;12335:6;;;;;;:16;;;12350:1;12345;:6;;12335:16;12334:38;;;;12361:1;12357;:5;:14;;;;;12370:1;12366;:5;12357:14;12326:87;;;;;;;;;;;;;10660:568;10716:6;10960;10956:47;;-1:-1:-1;10990:1:0;10983:8;;10956:47;11025:1;11030:2;11025:7;:27;;;;;10395:7;11036:1;:16;11025:27;11023:30;11015:82;;;;;;;;;;;;;;11121:5;;;11125:1;11121;:5;:1;11145:5;;;;;:10;11137:62;;;;;;;;;;;;;12687:215;12743:6;12773:5;;;12798:6;;;;;;:16;;;12813:1;12808;:6;;12798:16;12797:38;;;;12824:1;12820;:5;:14;;;;;12833:1;12829;:5;12820:14;12789:84;;;;;;;;;;;;;12910:138;12962:7;12995:1;12990;:6;;12982:30;;;;;;;;;;;;;;-1:-1:-1;13038:1:0;12910:138::o;3708:137::-;3766:7;3793:44;3797:1;3800;3793:44;;;;;;;;;;;;;;;;;:3;:44::i;2815:181::-;2873:7;2905:5;;;2929:6;;;;2921:46;;;;;;;;;;;;;9279:346;9431:12;9445:17;9466:5;:10;;9500;9512:2;9516:5;9477:45;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;9477:45:0;;;;;;38:4:-1;29:7;25:18;67:10;61:17;96:58;199:8;192:4;186;182:15;179:29;167:10;160:49;0:215;;;9477:45:0;9466:57;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;9430:93:0;;;;9542:7;:57;;;;-1:-1:-1;9554:11:0;;:16;;:44;;;9585:4;9574:24;;;;;;;;;;;;;;9534:83;;;;;;;;;;;;;6847:345;6933:7;7035:12;7028:5;7020:28;;;;;;;;;;;;;;;;7059:9;7075:1;7071;:5;;;;;;;6847:345;-1:-1:-1;;;;;6847:345:0:o;4134:192::-;4220:7;4256:12;4248:6;;;;4240:29;;;;;;;;;;;;;;;-1:-1:-1;;;4292:5:0;;;4134:192::o;22123:6189::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o;301:352:-1:-;;;431:3;424:4;416:6;412:17;408:27;398:2;;-1:-1;;439:12;398:2;-1:-1;469:20;;509:18;498:30;;495:2;;;-1:-1;;531:12;495:2;575:4;567:6;563:17;551:29;;626:3;575:4;;610:6;606:17;567:6;592:32;;589:41;586:2;;;643:1;;633:12;586:2;391:262;;;;;;1547:241;;1651:2;1639:9;1630:7;1626:23;1622:32;1619:2;;;-1:-1;;1657:12;1619:2;85:6;72:20;97:33;124:5;97:33;;1795:366;;;1916:2;1904:9;1895:7;1891:23;1887:32;1884:2;;;-1:-1;;1922:12;1884:2;85:6;72:20;97:33;124:5;97:33;;;1974:63;-1:-1;2074:2;2113:22;;72:20;97:33;72:20;97:33;;;2082:63;;;;1878:283;;;;;;2168:479;;;;2300:2;2288:9;2279:7;2275:23;2271:32;2268:2;;;-1:-1;;2306:12;2268:2;85:6;72:20;97:33;124:5;97:33;;;2358:63;-1:-1;2458:2;2494:22;;725:20;750:30;725:20;750:30;;;2466:60;-1:-1;2563:2;2599:22;;725:20;750:30;725:20;750:30;;;2571:60;;;;2262:385;;;;;;2654:647;;;;;2824:3;2812:9;2803:7;2799:23;2795:33;2792:2;;;-1:-1;;2831:12;2792:2;85:6;72:20;97:33;124:5;97:33;;;2883:63;-1:-1;2983:2;3022:22;;1477:20;;-1:-1;3091:2;3148:22;;1183:20;1208:51;1183:20;1208:51;;;3099:81;-1:-1;3217:2;3253:22;;725:20;750:30;725:20;750:30;;;2786:515;;;;-1:-1;2786:515;;-1:-1;;2786:515;3308:491;;;;3446:2;3434:9;3425:7;3421:23;3417:32;3414:2;;;-1:-1;;3452:12;3414:2;85:6;72:20;97:33;124:5;97:33;;;3504:63;3604:2;3643:22;;1477:20;;-1:-1;3712:2;3751:22;;;1477:20;;3408:391;-1:-1;;;3408:391;3806:397;;;3945:2;3933:9;3924:7;3920:23;3916:32;3913:2;;;-1:-1;;3951:12;3913:2;4009:17;3996:31;4047:18;4039:6;4036:30;4033:2;;;-1:-1;;4069:12;4033:2;4107:80;4179:7;4170:6;4159:9;4155:22;4107:80;;;4097:90;;;;-1:-1;3907:296;-1:-1;;;;3907:296;4210:522;;;;4366:2;4354:9;4345:7;4341:23;4337:32;4334:2;;;-1:-1;;4372:12;4334:2;4430:17;4417:31;4468:18;4460:6;4457:30;4454:2;;;-1:-1;;4490:12;4454:2;4528:80;4600:7;4591:6;4580:9;4576:22;4528:80;;;4518:90;;-1:-1;4518:90;-1:-1;;4645:2;4684:22;;72:20;97:33;72:20;97:33;;4739:257;;4851:2;4839:9;4830:7;4826:23;4822:32;4819:2;;;-1:-1;;4857:12;4819:2;873:6;867:13;885:30;909:5;885:30;;5003:801;;;;;;5182:3;5170:9;5161:7;5157:23;5153:33;5150:2;;;-1:-1;;5189:12;5150:2;873:6;867:13;885:30;909:5;885:30;;;5349:2;5398:22;;1348:13;5241:71;;-1:-1;24714:8;24703:20;;26613:34;;26603:2;;-1:-1;;26651:12;26603:2;5467;5517:22;;220:13;5357:73;;-1:-1;238:33;220:13;238:33;;;5586:2;5636:22;;220:13;5475:74;;-1:-1;238:33;220:13;238:33;;;5705:3;5756:22;;220:13;5594:74;;-1:-1;238:33;220:13;238:33;;;5714:74;;;;5144:660;;;;;;;;;5811:807;;;;;;6015:3;6003:9;5994:7;5990:23;5986:33;5983:2;;;-1:-1;;6022:12;5983:2;1024:6;1011:20;1036:50;1080:5;1036:50;;;6074:80;-1:-1;6191:2;6230:22;;72:20;97:33;72:20;97:33;;;6199:63;-1:-1;6299:2;6338:22;;1477:20;;-1:-1;6407:2;6464:22;;1183:20;1208:51;1183:20;1208:51;;;6415:81;-1:-1;6533:3;6570:22;;725:20;750:30;725:20;750:30;;6625:241;;6729:2;6717:9;6708:7;6704:23;6700:32;6697:2;;;-1:-1;;6735:12;6697:2;-1:-1;1477:20;;6691:175;-1:-1;6691:175;13721:262;;7413:5;23520:12;7524:52;7569:6;7564:3;7557:4;7550:5;7546:16;7524:52;;;7588:16;;;;;13846:137;-1:-1;;13846:137;13990:213;24587:42;24576:54;;;;7093:37;;14108:2;14093:18;;14079:124;14210:675;24587:42;24576:54;;;7093:37;;24576:54;;;14621:2;14606:18;;6952:58;24576:54;;;;14704:2;14689:18;;7093:37;14787:2;14772:18;;8013:36;;;;14870:3;14855:19;;8013:36;;;;14448:3;14433:19;;14419:466;15574:324;24587:42;24576:54;;;;7093:37;;15884:2;15869:18;;8013:36;15720:2;15705:18;;15691:207;15905:301;;16043:2;16064:17;16057:47;8355:5;23520:12;23959:6;16043:2;16032:9;16028:18;23947:19;8449:52;8494:6;23987:14;16032:9;23987:14;16043:2;8475:5;8471:16;8449:52;;;25978:2;25958:14;25974:7;25954:28;8513:39;;;;23987:14;8513:39;;16014:192;-1:-1;;16014:192;16213:407;16404:2;16418:47;;;8789:2;16389:18;;;23947:19;8825:33;23987:14;;;8805:54;8878:12;;;16375:245;16627:407;16818:2;16832:47;;;9129:2;16803:18;;;23947:19;9165:13;23987:14;;;9145:34;9198:12;;;16789:245;17041:407;17232:2;17246:47;;;9449:2;17217:18;;;23947:19;9485:29;23987:14;;;9465:50;9534:12;;;17203:245;17455:407;17646:2;17660:47;;;9785:2;17631:18;;;23947:19;9821:34;23987:14;;;9801:55;9890:3;9876:12;;;9869:25;9913:12;;;17617:245;17869:407;18060:2;18074:47;;;10164:2;18045:18;;;23947:19;10200:23;23987:14;;;10180:44;10243:12;;;18031:245;18283:407;18474:2;18488:47;;;10494:2;18459:18;;;23947:19;10530:34;23987:14;;;10510:55;10599:3;10585:12;;;10578:25;10622:12;;;18445:245;18697:407;18888:2;18902:47;;;10873:2;18873:18;;;23947:19;10909:15;23987:14;;;10889:36;10944:12;;;18859:245;19111:407;19302:2;19316:47;;;19287:18;;;23947:19;11231:34;23987:14;;;11211:55;11285:12;;;19273:245;19525:407;19716:2;19730:47;;;11536:2;19701:18;;;23947:19;11572:34;23987:14;;;11552:55;11641:9;11627:12;;;11620:31;11670:12;;;19687:245;19939:407;20130:2;20144:47;;;20115:18;;;23947:19;11957:34;23987:14;;;11937:55;12011:12;;;20101:245;20353:407;20544:2;20558:47;;;12262:2;20529:18;;;23947:19;12298:34;23987:14;;;12278:55;12367:6;12353:12;;;12346:28;12393:12;;;20515:245;20767:318;;20937:3;20926:9;20922:19;20914:27;;12710:16;12704:23;8020:3;8013:36;12888:4;12881:5;12877:16;12871:23;12888:4;12952:3;12948:14;8013:36;13052:4;13045:5;13041:16;13035:23;13052:4;13116:3;13112:14;8013:36;13212:4;13205:5;13201:16;13195:23;13212:4;13276:3;13272:14;8013:36;24587:42;13370:4;13363:5;13359:16;13353:23;24576:54;13370:4;13452:3;13448:14;7695:68;20908:177;;;;;21092:213;8013:36;;;21210:2;21195:18;;21181:124;21312:312;8013:36;;;24179:13;24172:21;21610:2;21595:18;;7207:34;21452:2;21437:18;;21423:201;21631:320;8013:36;;;21937:2;21922:18;;8013:36;21775:2;21760:18;;21746:205;22289:435;8013:36;;;22627:2;22612:18;;8013:36;;;;22710:2;22695:18;;8013:36;22463:2;22448:18;;22434:290;22731:695;8013:36;;;23144:2;23129:18;;8013:36;;;;23227:2;23212:18;;8013:36;;;;23310:2;23295:18;;8013:36;24587:42;24576:54;23411:3;23396:19;;7695:68;22979:3;22964:19;;22950:476;25614:268;25679:1;25686:101;25700:6;25697:1;25694:13;25686:101;;;25767:11;;;25761:18;25748:11;;;25741:39;25722:2;25715:10;25686:101;;;25802:6;25799:1;25796:13;25793:2;;;-1:-1;;25679:1;25849:16;;25842:27;25663:219;25995:117;24587:42;26082:5;24576:54;26057:5;26054:35;26044:2;;26103:1;;26093:12;26044:2;26038:74;;26119:111;26200:5;24179:13;24172:21;26178:5;26175:32;26165:2;;26221:1;;26211:12

Swarm Source

ipfs://db502ac0971496f1be9a40de0440b513757eb4ac8476805fba95d818b5d2a5a6
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
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.