Contract 0x195abe89c04ed1fc065f879ce899d75557142817

Txn Hash Method
Block
From
To
Value [Txn Fee]
0xae18b81e34d19a994bc95a189e59335ebe058d020a1f00332a7494f9974cf7b8Get Reward156019372022-05-28 1:05:3453 secs ago0xbc45cf40332dfbbcfde1de304ff3afb1d2cd2971 IN 0x195abe89c04ed1fc065f879ce899d755571428170 HT0.00017198252.5
0xc435937520d0b4c030799bea249bd5a90d2136b0c5f58ee0bb5ca9a9c815a02fGet Reward156019372022-05-28 1:05:3453 secs ago0x219e89d12a9c10d8a82037afe592467bfc93dbef IN 0x195abe89c04ed1fc065f879ce899d755571428170 HT0.00019276752.5
0xc01cfd8ff96ac3ea49f4291105045fcdc41efd6975a3b90b169f527e5326ca5aGet Reward156018572022-05-28 1:01:344 mins ago0xf6abad6ee9e19f441201c755586f13de786156a6 IN 0x195abe89c04ed1fc065f879ce899d755571428170 HT0.00019276752.5
0x07223a5476c5ba5c633a6a06e15a387aee82b0bcaf8216dd06a6ca6ed2d4bf15Get Reward156018282022-05-28 1:00:076 mins ago0xdf1a80ef8c19309ce06bcbf72b10b3ff69e83f74 IN 0x195abe89c04ed1fc065f879ce899d755571428170 HT0.00018620752.5
0x60abb3410f2abe7e9db26b013d8cfa002d3b5997b84c5ce606b00806f9ed73eeGet Reward156018262022-05-28 1:00:016 mins ago0x145a0f6ba701670d338ca1087e35f1a7e7a61683 IN 0x195abe89c04ed1fc065f879ce899d755571428170 HT0.00023395752.5
0x8ac66e3c26935c538d0a75ee370289ef9e60b7fcdbc1c77a3905fa2a4f288a78Get Reward156018102022-05-28 0:59:137 mins ago0x770f8bdaa9c050093a09fd5d5c262fdde27924fb IN 0x195abe89c04ed1fc065f879ce899d755571428170 HT0.000167586752.25
0x88ad14fd5d7a7e5641e3e211a79f526199ef84f06cd0b1579ab55448381042dcGet Reward156017832022-05-28 0:57:528 mins ago0x854c9903f7ca5c8fdc3fa313e442f34f4ab2b66a IN 0x195abe89c04ed1fc065f879ce899d755571428170 HT0.00019276752.5
0x521d7f96a24836340cf2dc0f8652d279b82457260038cc1073c416e3688ef361Get Reward156017152022-05-28 0:54:2811 mins ago0x481fac725eda94827fe6047212e32935382ba10f IN 0x195abe89c04ed1fc065f879ce899d755571428170 HT0.00023395752.5
0x6f676a65e71249f0e38077b12d651b14daa0ed7b4b55a3d882680c94eb5828f9Get Reward156017122022-05-28 0:54:1912 mins ago0x0d8eefca475390a3c766e5d6ccfb883ac758414a IN 0x195abe89c04ed1fc065f879ce899d755571428170 HT0.00019276752.5
0xee3826f85ceb209f853556240f798847c6c716f6421f849a8fc9a8a02de42ad2Get Reward156016942022-05-28 0:53:2513 mins ago0xc0031ad75fdeb49f639ba86f63350db09e778530 IN 0x195abe89c04ed1fc065f879ce899d755571428170 HT0.00023395752.5
0x70aec53d79e9bf0a9ce0b4768d4ebc9e86f10bea3582afc4f98223f304a35c6aGet Reward156016862022-05-28 0:53:0113 mins ago0xa99bb659751ce78588a8dc2d1f98713e78260fc3 IN 0x195abe89c04ed1fc065f879ce899d755571428170 HT0.00023395752.5
0x1095759fcb18b9a5ad2b3f7eb2f6dd85ed4311baf5547cb1bba6788534945a18Get Reward156016492022-05-28 0:51:1015 mins ago0xa8040cb3f519ba6086feb834a930bf6e0a1d5aa9 IN 0x195abe89c04ed1fc065f879ce899d755571428170 HT0.00023395752.5
0x079b176fb122b63a29a29b7bdeab82add3e3271973249f20db452532d7f89a2eStake156015982022-05-28 0:48:3717 mins ago0xee35bee44b2f011c49535fb6985f5ec984b24219 IN 0x195abe89c04ed1fc065f879ce899d755571428170 HT0.000977312.5
0x14c0abcb97204556a9112812efc2ca70d64e2816a633ec361737eebfd7513fe1Get Reward156015962022-05-28 0:48:3117 mins ago0x002b05c1bfbda15d0f30e851382774e3f16d646f IN 0x195abe89c04ed1fc065f879ce899d755571428170 HT0.00019276752.5
0x8935ff24911ab5caaf7c750c35f40aa847c756755654000c7693c7e9e2817993Get Reward156015532022-05-28 0:46:2220 mins ago0x3c7de19d95e0692614a9b1ee15eb65d0f78a8b10 IN 0x195abe89c04ed1fc065f879ce899d755571428170 HT0.00023395752.5
0xf3013bde675712f361eca85b223638e878aa0ff6848fd5874b98bcdb370d12d7Get Reward156014852022-05-28 0:42:5823 mins ago0x948f0ea4a47070fbdba66c1735b6e3895c47880d IN 0x195abe89c04ed1fc065f879ce899d755571428170 HT0.00019276752.5
0x62a3486dc6d65185a15106e0d681aa63136ac5ac5e95be228b03dd7d81ae6ad2Get Reward156014272022-05-28 0:40:0426 mins ago0x3b8f9e4e33c587e73806aff25d94a4cf8764283a IN 0x195abe89c04ed1fc065f879ce899d755571428170 HT0.00023395752.5
0x37788c0e99600aedccd4fbcd3da36c859d80b4b2f387536a88a02bfd2121b15dStake156014132022-05-28 0:39:2227 mins ago0xae3b0ce38bb5b1b846b00896195248a28627181d IN 0x195abe89c04ed1fc065f879ce899d755571428170 HT0.000842062.5
0xa8bd4f9c60761f714fdcced7cc048120cfcee869e1799f55f917760ec52c6047Get Reward156012962022-05-28 0:33:3132 mins ago0xea3f81f4dfb25fa0d84af6bb51534fc1df7882af IN 0x195abe89c04ed1fc065f879ce899d755571428170 HT0.00019276752.5
0x8ead1039c8246e04b195fbdaf68dc4e01bb5f944dddb314754b297dbc3d315dcGet Reward156011122022-05-28 0:24:1942 mins ago0x6967c872f1f9c533a718568293ac419ed9ed8b3f IN 0x195abe89c04ed1fc065f879ce899d755571428170 HT0.00019276752.5
0x5d5533c75db79efc7d5dfc9bef1d064129b6b02beb6e459738cf5f13a58afee5Get Reward156011062022-05-28 0:24:0142 mins ago0xf85c9deac1776048ad03a6239b30d65c348121e6 IN 0x195abe89c04ed1fc065f879ce899d755571428170 HT0.00023395752.5
0x03ac1b29e5f918fd7f50014582eaca259d3b6698c208c916b6d4c821b02289ddStake156010762022-05-28 0:22:3143 mins ago0xdb627adeaa3a019db8bdfdc9d2628ac8c5e22cdb IN 0x195abe89c04ed1fc065f879ce899d755571428170 HT0.000977372.5
0x7a4e9af792c7afa6d12c36849209a7f73aef54b78e3cc27f9676a61718909112Get Reward156009922022-05-28 0:18:1948 mins ago0x213f35283e433fdb89825ca42db8f4e338fca6ef IN 0x195abe89c04ed1fc065f879ce899d755571428170 HT0.00023395752.5
0x944d398b3434a7a22ea4c8132ad4fd0bd5f1695cb7c9acbdf55f87a764febe50Stake156008772022-05-28 0:12:3453 mins ago0x29eadb1f39c45873238d6f9e6ed6c7f0186b8f9d IN 0x195abe89c04ed1fc065f879ce899d755571428170 HT0.00083175752.5
0xfed57a16c3f2a0db5b3a0d7e4d8670f58be83062bd763663e660cc2fddbfe03dGet Reward156008752022-05-28 0:12:2853 mins ago0xae3b0ce38bb5b1b846b00896195248a28627181d IN 0x195abe89c04ed1fc065f879ce899d755571428170 HT0.00022895752.5
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
CHCUSDTLPTokenSharePool

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at hecoinfo.com on 2022-04-06
*/

// Sources flattened with hardhat v2.0.3 https://hardhat.org

// File @openzeppelin/contracts/math/[email protected]

// 

pragma solidity ^0.6.0;

/**
 * @dev Standard math utilities missing in the Solidity language.
 */
library Math {
    /**
     * @dev Returns the largest of two numbers.
     */
    function max(uint256 a, uint256 b) internal pure returns (uint256) {
        return a >= b ? a : b;
    }

    /**
     * @dev Returns the smallest of two numbers.
     */
    function min(uint256 a, uint256 b) internal pure returns (uint256) {
        return a < b ? a : b;
    }

    /**
     * @dev Returns the average of two numbers. The result is rounded towards
     * zero.
     */
    function average(uint256 a, uint256 b) internal pure returns (uint256) {
        // (a + b) / 2 can overflow, so we distribute
        return (a / 2) + (b / 2) + ((a % 2 + b % 2) / 2);
    }
}


// File @openzeppelin/contracts/math/[email protected]

// 

pragma solidity ^0.6.0;

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

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

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    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) {
        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 @openzeppelin/contracts/token/ERC20/[email protected]

// 

pragma solidity ^0.6.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

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

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

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

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

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


// File @openzeppelin/contracts/utils/[email protected]

// 

pragma solidity ^0.6.2;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies in extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly { size := extcodesize(account) }
        return size > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain`call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}


// File @openzeppelin/contracts/token/ERC20/[email protected]

// 

pragma solidity ^0.6.0;



/**
 * @title SafeERC20
 * @dev Wrappers around ERC20 operations that throw on failure (when the token
 * contract returns false). Tokens that return no value (and instead revert or
 * throw on failure) are also supported, non-reverting calls are assumed to be
 * successful.
 * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,
 * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
 */
library SafeERC20 {
    using SafeMath for uint256;
    using Address for address;

    function safeTransfer(IERC20 token, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    /**
     * @dev Deprecated. This function has issues similar to the ones found in
     * {IERC20-approve}, and its usage is discouraged.
     *
     * Whenever possible, use {safeIncreaseAllowance} and
     * {safeDecreaseAllowance} instead.
     */
    function safeApprove(IERC20 token, address spender, uint256 value) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        // solhint-disable-next-line max-line-length
        require((value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

    function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).add(value);
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero");
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    /**
     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
     * on the return value: the return value is optional (but if data is returned, it must not be false).
     * @param token The token targeted by the call.
     * @param data The call data (encoded using abi.encode or one of its variants).
     */
    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
        // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that
        // the target address contains contract code and also asserts for success in the low-level call.

        bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
        if (returndata.length > 0) { // Return data is optional
            // solhint-disable-next-line max-line-length
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}


// File @openzeppelin/contracts/GSN/[email protected]

// 

pragma solidity ^0.6.0;

/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with GSN meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address payable) {
        return msg.sender;
    }

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


// File @openzeppelin/contracts/access/[email protected]

// 

pragma solidity ^0.6.0;

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () internal {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}


// File contracts/interfaces/IRewardDistributionRecipient.sol

pragma solidity ^0.6.0;

abstract contract IRewardDistributionRecipient is Ownable {
    address public rewardDistribution;

    function notifyRewardAmount(uint256 reward) external virtual;

    modifier onlyRewardDistribution() {
        require(
            _msgSender() == rewardDistribution,
            'Caller is not reward distribution'
        );
        _;
    }

    function setRewardDistribution(address _rewardDistribution)
        external
        virtual
        onlyOwner
    {
        rewardDistribution = _rewardDistribution;
    }
}


// File contracts/Referrer.sol

// 

pragma solidity ^0.6.0;

contract Referrer {
    using SafeMath for uint;

    mapping(address => address) public referrer;
    mapping(address => address[]) public referree;
    mapping(address => uint) public referReward;
    event ReferReward(address indexed referrer, address indexed referree, uint amount);
    event Refered(address indexed referrer, address indexed referree);

    function setReferrer(address _referrer) public {
        require(!hasReferrer(msg.sender), "already has referrer");
        require(_referrer != address(0), "invalid referrer");
        require(_referrer != msg.sender, "invalid referrer");
        require(referreeCount(msg.sender) == 0, "already has referree");
        referrer[msg.sender] = _referrer;
        referree[_referrer].push(msg.sender);
        emit Refered(_referrer, msg.sender);
    }

    function hasReferrer(address self) public view returns (bool){
        return referrer[self] != address(0);
    }


    function referreeCount(address self) public view returns (uint){
        return referree[self].length;
    }

    function notifyReferReward(address _referrer, address _referree, uint amount) internal {
        referReward[_referrer] = referReward[_referrer].add(amount);
        emit ReferReward(_referrer, _referree, amount);
    }
    
}


// File contracts/interfaces/IPool.sol

pragma solidity ^0.6.0;

interface IPool {
    function stake(address account, uint256 amount) external;
    function withdraw(address account, uint256 amount) external;
    function notifyRewardAmount(uint256 reward) external;
}


// File @openzeppelin/contracts/utils/[email protected]

// 

pragma solidity ^0.6.0;

/**
 * @title Counters
 * @author Matt Condon (@shrugs)
 * @dev Provides counters that can only be incremented or decremented by one. This can be used e.g. to track the number
 * of elements in a mapping, issuing ERC721 ids, or counting request ids.
 *
 * Include with `using Counters for Counters.Counter;`
 * Since it is not possible to overflow a 256 bit integer with increments of one, `increment` can skip the {SafeMath}
 * overflow check, thereby saving gas. This does assume however correct usage, in that the underlying `_value` is never
 * directly accessed.
 */
library Counters {
    using SafeMath for uint256;

    struct Counter {
        // This variable should never be directly accessed by users of the library: interactions must be restricted to
        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
        // this feature: see https://github.com/ethereum/solidity/issues/4637
        uint256 _value; // default: 0
    }

    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }

    function increment(Counter storage counter) internal {
        // The {SafeMath} overflow check can be skipped here, see the comment at the top
        counter._value += 1;
    }

    function decrement(Counter storage counter) internal {
        counter._value = counter._value.sub(1);
    }
}


// File @openzeppelin/contracts/utils/[email protected]

// 

pragma solidity ^0.6.0;

/**
 * @dev Library for managing
 * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive
 * types.
 *
 * Sets have the following properties:
 *
 * - Elements are added, removed, and checked for existence in constant time
 * (O(1)).
 * - Elements are enumerated in O(n). No guarantees are made on the ordering.
 *
 * ```
 * contract Example {
 *     // Add the library methods
 *     using EnumerableSet for EnumerableSet.AddressSet;
 *
 *     // Declare a set state variable
 *     EnumerableSet.AddressSet private mySet;
 * }
 * ```
 *
 * As of v3.0.0, only sets of type `address` (`AddressSet`) and `uint256`
 * (`UintSet`) are supported.
 */
library EnumerableSet {
    // To implement this library for multiple types with as little code
    // repetition as possible, we write it in terms of a generic Set type with
    // bytes32 values.
    // The Set implementation uses private functions, and user-facing
    // implementations (such as AddressSet) are just wrappers around the
    // underlying Set.
    // This means that we can only create new EnumerableSets for types that fit
    // in bytes32.

    struct Set {
        // Storage of set values
        bytes32[] _values;

        // Position of the value in the `values` array, plus 1 because index 0
        // means a value is not in the set.
        mapping (bytes32 => uint256) _indexes;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function _add(Set storage set, bytes32 value) private returns (bool) {
        if (!_contains(set, value)) {
            set._values.push(value);
            // The value is stored at length-1, but we add 1 to all indexes
            // and use 0 as a sentinel value
            set._indexes[value] = set._values.length;
            return true;
        } else {
            return false;
        }
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function _remove(Set storage set, bytes32 value) private returns (bool) {
        // We read and store the value's index to prevent multiple reads from the same storage slot
        uint256 valueIndex = set._indexes[value];

        if (valueIndex != 0) { // Equivalent to contains(set, value)
            // To delete an element from the _values array in O(1), we swap the element to delete with the last one in
            // the array, and then remove the last element (sometimes called as 'swap and pop').
            // This modifies the order of the array, as noted in {at}.

            uint256 toDeleteIndex = valueIndex - 1;
            uint256 lastIndex = set._values.length - 1;

            // When the value to delete is the last one, the swap operation is unnecessary. However, since this occurs
            // so rarely, we still do the swap anyway to avoid the gas cost of adding an 'if' statement.

            bytes32 lastvalue = set._values[lastIndex];

            // Move the last value to the index where the value to delete is
            set._values[toDeleteIndex] = lastvalue;
            // Update the index for the moved value
            set._indexes[lastvalue] = toDeleteIndex + 1; // All indexes are 1-based

            // Delete the slot where the moved value was stored
            set._values.pop();

            // Delete the index for the deleted slot
            delete set._indexes[value];

            return true;
        } else {
            return false;
        }
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function _contains(Set storage set, bytes32 value) private view returns (bool) {
        return set._indexes[value] != 0;
    }

    /**
     * @dev Returns the number of values on the set. O(1).
     */
    function _length(Set storage set) private view returns (uint256) {
        return set._values.length;
    }

   /**
    * @dev Returns the value stored at position `index` in the set. O(1).
    *
    * Note that there are no guarantees on the ordering of values inside the
    * array, and it may change when more values are added or removed.
    *
    * Requirements:
    *
    * - `index` must be strictly less than {length}.
    */
    function _at(Set storage set, uint256 index) private view returns (bytes32) {
        require(set._values.length > index, "EnumerableSet: index out of bounds");
        return set._values[index];
    }

    // AddressSet

    struct AddressSet {
        Set _inner;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function add(AddressSet storage set, address value) internal returns (bool) {
        return _add(set._inner, bytes32(uint256(value)));
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function remove(AddressSet storage set, address value) internal returns (bool) {
        return _remove(set._inner, bytes32(uint256(value)));
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function contains(AddressSet storage set, address value) internal view returns (bool) {
        return _contains(set._inner, bytes32(uint256(value)));
    }

    /**
     * @dev Returns the number of values in the set. O(1).
     */
    function length(AddressSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

   /**
    * @dev Returns the value stored at position `index` in the set. O(1).
    *
    * Note that there are no guarantees on the ordering of values inside the
    * array, and it may change when more values are added or removed.
    *
    * Requirements:
    *
    * - `index` must be strictly less than {length}.
    */
    function at(AddressSet storage set, uint256 index) internal view returns (address) {
        return address(uint256(_at(set._inner, index)));
    }


    // UintSet

    struct UintSet {
        Set _inner;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function add(UintSet storage set, uint256 value) internal returns (bool) {
        return _add(set._inner, bytes32(value));
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function remove(UintSet storage set, uint256 value) internal returns (bool) {
        return _remove(set._inner, bytes32(value));
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function contains(UintSet storage set, uint256 value) internal view returns (bool) {
        return _contains(set._inner, bytes32(value));
    }

    /**
     * @dev Returns the number of values on the set. O(1).
     */
    function length(UintSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

   /**
    * @dev Returns the value stored at position `index` in the set. O(1).
    *
    * Note that there are no guarantees on the ordering of values inside the
    * array, and it may change when more values are added or removed.
    *
    * Requirements:
    *
    * - `index` must be strictly less than {length}.
    */
    function at(UintSet storage set, uint256 index) internal view returns (uint256) {
        return uint256(_at(set._inner, index));
    }
}


// File contracts/Staking.sol

pragma solidity ^0.6.0;


enum Kind {
    free,
    season,
    year
}

enum Status {
    staked,
    withdrawn
}

struct Staking {
    uint id;
    Kind kind;
    uint amount;
    uint timestamp;
    address owner;
    Status status;
    bool withdrawable; //view property
}


// File contracts/Consts.sol

pragma solidity ^0.6.12;

library Consts {

    // boardroom
    uint public constant BOARDROOM_DURATION = 7 days;
    uint public constant BOARDROOM_STAKING_TIME = 180 days;
    uint public constant BOARDROOM_WITHDRAWING_TIME = 300 days;
    

    // STCLP
    uint public constant STCLPPOOL_DURATION = 90 days;
    uint public constant STCLPPOOL_WITHDRAWING_TIME = 1 days;
    uint public constant STCLPPOOL_X2_TIME = 90 days;
    uint public constant STCLPPOOL_X3_TIME = 360 days;
    uint public constant STCLPPOOL_HALF_TIMES = 7;


    // oracle
    uint public constant REBASE_PEROID = 1 days;
}


// File contracts/BasePool.sol

pragma solidity ^0.6.0;
pragma experimental ABIEncoderV2;





contract BasePool {

    using SafeMath for uint256;
    using Counters for Counters.Counter;
    using EnumerableSet for EnumerableSet.UintSet;
    

    Counters.Counter private _tokenIdTracker;
    mapping(uint => Staking) private _stakings;
    mapping (address => EnumerableSet.UintSet) private _myStakings;

    uint256 private _totalSupply;
    mapping(address => uint256) private _balances;

    event Staked(Staking s);
    event Withdrawn(Staking s);

    function totalSupply() public view returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address account) public view returns (uint256) {
        return _balances[account];
    }

    function staking(uint id) public view returns (Staking memory){
        Staking memory s = _stakings[id];
        s.withdrawable = withdrawable(id);
        return s;
    }

    function myStaking(address account, uint index) public view returns (Staking memory){
        uint id = _myStakings[account].at(index);
        return staking(id);
    }

    function totalStakingCount() public view returns (uint) {
        return _tokenIdTracker.current();
    }

    function myStakingCount(address account) public view returns (uint) {
        return _myStakings[account].length();
    }

    function _stake(Kind kind, uint amount) internal {
        uint id = _tokenIdTracker.current();
        address owner = msg.sender;

        Staking memory s = Staking({
            id: id,
            kind: kind,
            amount: amount,
            timestamp: block.timestamp,
            owner: owner,
            status: Status.staked,
            withdrawable: false
        });
        _stakings[id] = s;
        _myStakings[owner].add(id);
        amount = stakeAmount(kind, amount);
        _totalSupply = _totalSupply.add(amount);
        _balances[owner] = _balances[owner].add(amount);
        
        _tokenIdTracker.increment();
        emit Staked(s);
    }

    function _withdraw(uint id) internal {
        Staking storage s = _stakings[id];
        address owner = msg.sender;
        require(s.status == Status.staked, "invalid status");
        require(s.owner == owner, "no permission");
        require(withdrawable(id), "not withdrawable");

        s.status = Status.withdrawn;
        _myStakings[owner].remove(id);
        uint amount = stakeAmount(s.kind, s.amount);
        _totalSupply = _totalSupply.sub(amount);
        _balances[owner] = _balances[owner].sub(amount);
        emit Withdrawn(s);
    }

    function stakeAmount(Kind kind, uint amount) public view returns (uint) {
        return amount.mul(uint(kind).add(1));
    }

    function withdrawable(uint id) public view returns(bool) {
        Staking memory s = _stakings[id];
        return s.status == Status.staked && _withdrawable(id);
    }

    function _withdrawable(uint id) private view returns(bool) {
        Staking memory s = _stakings[id];
        if(s.kind == Kind.free){
            return true;
        }
        uint[3] memory ts = [uint(0), Consts.STCLPPOOL_X2_TIME, Consts.STCLPPOOL_X3_TIME];
        uint t = ts[uint(s.kind)];
        uint p = (block.timestamp - s.timestamp ) / t;
        uint r = (block.timestamp - s.timestamp ) % t;
        return p!= 0 && r <= Consts.STCLPPOOL_WITHDRAWING_TIME;
    }
}


// File contracts/distribution/CHCUSDTLPTokenSharePool.sol

pragma solidity ^0.6.0;









contract CHCUSDTLPTokenSharePool is
    IRewardDistributionRecipient,
    BasePool
{
    using SafeERC20 for IERC20;


    IERC20 public share;
    IERC20 public lpt;
    uint256 public DURATION = Consts.STCLPPOOL_DURATION;
    uint256 public HALF_TIMES = Consts.STCLPPOOL_HALF_TIMES;

    uint256 public initreward = 157050e18;
    uint256 public starttime; // starttime TBD
    uint256 public periodFinish = 0;
    uint256 public rewardRate = 0;
    uint256 public lastUpdateTime;
    uint256 public rewardPerTokenStored;
    address public referPool;
    Referrer public refer;

    uint public halfIndex = 0;
    mapping(address => uint256) public userRewardPerTokenPaid;
    mapping(address => uint256) public rewards;

    event RewardAdded(uint256 reward);
    event RewardPaid(address indexed user, uint256 reward);

    constructor(
        address share_,
        address lptoken_,
        uint starttime_,
        address _referPool,
        address _refer
    ) public {
        share = IERC20(share_);
        lpt = IERC20(lptoken_);
        starttime = starttime_;
        referPool = _referPool;
        refer = Referrer(_refer);
    }

    modifier updateReward(address account) {
        rewardPerTokenStored = rewardPerToken();
        lastUpdateTime = lastTimeRewardApplicable();
        if (account != address(0)) {
            rewards[account] = earned(account);
            userRewardPerTokenPaid[account] = rewardPerTokenStored;
        }
        _;
    }

    function lastTimeRewardApplicable() public view returns (uint256) {
        return Math.min(block.timestamp, periodFinish);
    }

    function rewardPerToken() public view returns (uint256) {
        if (totalSupply() == 0) {
            return rewardPerTokenStored;
        }
        return
            rewardPerTokenStored.add(
                lastTimeRewardApplicable()
                    .sub(lastUpdateTime)
                    .mul(rewardRate)
                    .mul(1e18)
                    .div(totalSupply())
            );
    }

    function earned(address account) public view returns (uint256) {
        return
            balanceOf(account)
                .mul(rewardPerToken().sub(userRewardPerTokenPaid[account]))
                .div(1e18)
                .add(rewards[account]);
    }

    // stake visibility is public as overriding LPTokenWrapper's stake() function
    function stake(Kind kind, uint amount)
        public
        updateReward(msg.sender)
        checkhalve
        checkStart
    {
        require(amount > 0, 'Cannot stake 0');
        require(refer.hasReferrer(msg.sender), "can not stake without referer");
        super._stake(kind, amount);
        address _referer;
        if(refer.hasReferrer(msg.sender)){
            _referer = refer.referrer(msg.sender);
            IPool(referPool).stake(_referer, amount);
            if(refer.hasReferrer(_referer)){
                _referer = refer.referrer(_referer);
                IPool(referPool).stake(_referer, amount);
            }
        }

        lpt.safeTransferFrom(msg.sender, address(this), amount);
    }

    function withdraw(uint id)
        public
        updateReward(msg.sender)
        checkhalve
        checkStart
    {
        Staking memory s = staking(id);
        uint amount = s.amount;
        super._withdraw(id);
        address _referer;
        if(refer.hasReferrer(msg.sender)){
            _referer = refer.referrer(msg.sender);
            IPool(referPool).withdraw(_referer, amount);
            if(refer.hasReferrer(_referer)){
                _referer = refer.referrer(_referer);
                IPool(referPool).withdraw(_referer, amount);
            }
        }

        lpt.safeTransfer(msg.sender, amount);
    }


    function getReward() public updateReward(msg.sender) checkhalve checkStart {
        uint256 reward = earned(msg.sender);
        if (reward > 0) {
            rewards[msg.sender] = 0;
            share.safeTransfer(msg.sender, reward);
            emit RewardPaid(msg.sender, reward);
        }
    }

    modifier checkhalve() {
        if (block.timestamp >= periodFinish) {
            if(halfIndex < HALF_TIMES){
                initreward = initreward.mul(70).div(100);
            }
            halfIndex++;

            rewardRate = initreward.div(DURATION);
            periodFinish = block.timestamp.add(DURATION);
            emit RewardAdded(initreward);
        }
        _;
    }

    modifier checkStart() {
        require(block.timestamp >= starttime, 'not start');
        _;
    }

    function notifyRewardAmount(uint256 reward)
        external
        override
        onlyRewardDistribution
        updateReward(address(0))
    {
        if (block.timestamp > starttime) {
            if (block.timestamp >= periodFinish) {
                rewardRate = reward.div(DURATION);
            } else {
                uint256 remaining = periodFinish.sub(block.timestamp);
                uint256 leftover = remaining.mul(rewardRate);
                rewardRate = reward.add(leftover).div(DURATION);
            }
            lastUpdateTime = block.timestamp;
            periodFinish = block.timestamp.add(DURATION);
            emit RewardAdded(reward);
        } else {
            rewardRate = initreward.div(DURATION);
            lastUpdateTime = starttime;
            periodFinish = starttime.add(DURATION);
            emit RewardAdded(reward);
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"share_","type":"address"},{"internalType":"address","name":"lptoken_","type":"address"},{"internalType":"uint256","name":"starttime_","type":"uint256"},{"internalType":"address","name":"_referPool","type":"address"},{"internalType":"address","name":"_refer","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"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":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"RewardAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"RewardPaid","type":"event"},{"anonymous":false,"inputs":[{"components":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"enum Kind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"enum Status","name":"status","type":"uint8"},{"internalType":"bool","name":"withdrawable","type":"bool"}],"indexed":false,"internalType":"struct Staking","name":"s","type":"tuple"}],"name":"Staked","type":"event"},{"anonymous":false,"inputs":[{"components":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"enum Kind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"enum Status","name":"status","type":"uint8"},{"internalType":"bool","name":"withdrawable","type":"bool"}],"indexed":false,"internalType":"struct Staking","name":"s","type":"tuple"}],"name":"Withdrawn","type":"event"},{"inputs":[],"name":"DURATION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"HALF_TIMES","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"earned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"halfIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initreward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastTimeRewardApplicable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastUpdateTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpt","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"myStaking","outputs":[{"components":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"enum Kind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"enum Status","name":"status","type":"uint8"},{"internalType":"bool","name":"withdrawable","type":"bool"}],"internalType":"struct Staking","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"myStakingCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"reward","type":"uint256"}],"name":"notifyRewardAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"periodFinish","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"refer","outputs":[{"internalType":"contract Referrer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"referPool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardDistribution","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardPerToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardPerTokenStored","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_rewardDistribution","type":"address"}],"name":"setRewardDistribution","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"share","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum Kind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum Kind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"stakeAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"staking","outputs":[{"components":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"enum Kind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"enum Status","name":"status","type":"uint8"},{"internalType":"bool","name":"withdrawable","type":"bool"}],"internalType":"struct Staking","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"starttime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalStakingCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userRewardPerTokenPaid","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"withdrawable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]

60806040526276a7006009556007600a55692141b293417039a80000600b556000600d556000600e5560006013553480156200003a57600080fd5b506040516200274c3803806200274c8339810160408190526200005d916200012e565b6000620000696200010c565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600780546001600160a01b039687166001600160a01b0319918216179091556008805495871695821695909517909455600c92909255601180549185169184169190911790556012805491909316911617905562000198565b3390565b80516001600160a01b03811681146200012857600080fd5b92915050565b600080600080600060a0868803121562000146578081fd5b62000152878762000110565b945062000163876020880162000110565b9350604086015192506200017b876060880162000110565b91506200018c876080880162000110565b90509295509295909350565b6125a480620001a86000396000f3fe608060405234801561001057600080fd5b50600436106102105760003560e01c806380faa57d11610125578063c8f33c91116100ad578063df136d651161007c578063df136d65146103bb578063e003d397146103c3578063ebe2b12b146103cb578063f11988e0146103d3578063f2fde38b146103f357610210565b8063c8f33c9114610390578063cd3daf9d14610398578063ce5fc8d0146103a0578063dd752e55146103a857610210565b80638da5cb5b116100f45780638da5cb5b1461035d5780639c907b5814610365578063a8d5fd651461036d578063aacbf88b14610375578063b0db31b41461037d57610210565b806380faa57d146103275780638a7a14761461032f5780638b876347146103425780638da588971461035557610210565b80632bf3dc1f116101a85780633e7d754f116101775780633e7d754f146102f457806370a08231146102fc578063715018a61461030f57806374878784146103175780637b0a47ee1461031f57610210565b80632bf3dc1f146102be5780632e1a7d4d146102c65780633c6b16ab146102d95780633d18b912146102ec57610210565b806318160ddd116101e457806318160ddd1461027b5780631be05289146102835780631dbb2a221461028b57806324e404d4146102ab57610210565b80628cc262146102155780630700037d1461023e5780630d68b76114610251578063101114cf14610266575b600080fd5b610228610223366004611fab565b610406565b6040516102359190612501565b60405180910390f35b61022861024c366004611fab565b610476565b61026461025f366004611fab565b610488565b005b61026e6104e8565b60405161023591906120a3565b6102286104f7565b6102286104fe565b61029e61029936600461204e565b610504565b6040516102359190612424565b61029e6102b9366004611fe3565b6105d9565b610228610618565b6102646102d436600461204e565b610629565b6102646102e736600461204e565b610a44565b610264610bdc565b610228610d62565b61022861030a366004611fab565b610d68565b610264610d83565b61026e610e02565b610228610e11565b610228610e17565b61022861033d366004611fab565b610e25565b610228610350366004611fab565b610e46565b610228610e58565b61026e610e5e565b610228610e6d565b61026e610e73565b61026e610e82565b61022861038b36600461202e565b610e91565b610228610eb5565b610228610ebb565b61026e610f09565b6102646103b636600461202e565b610f18565b6102286113d7565b6102286113dd565b6102286113e3565b6103e66103e136600461204e565b6113e9565b60405161023591906120f4565b610264610401366004611fab565b6114c5565b6001600160a01b038116600090815260156020908152604080832054601490925282205461046e919061046890670de0b6b3a764000090610462906104539061044d610ebb565b9061157b565b61045c88610d68565b906115bd565b906115f7565b90611639565b90505b919050565b60156020526000908152604090205481565b61049061165e565b6000546001600160a01b039081169116146104c65760405162461bcd60e51b81526004016104bd9061232d565b60405180910390fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b031681565b6005545b90565b60095481565b61050c611f50565b610514611f50565b600083815260036020908152604091829020825160e08101909352805483526001810154909183019060ff16600281111561054b57fe5b600281111561055657fe5b8152600282015460208201526003820154604082015260048201546001600160a01b0381166060830152608090910190600160a01b900460ff16600181111561059b57fe5b60018111156105a657fe5b815260049190910154600160a81b900460ff16151560209091015290506105cc836113e9565b151560c082015292915050565b6105e1611f50565b6001600160a01b03831660009081526004602052604081206106039084611662565b905061060e81610504565b9150505b92915050565b6000610624600261166e565b905090565b33610632610ebb565b60105561063d610e17565b600f556001600160a01b038116156106845761065881610406565b6001600160a01b0382166000908152601560209081526040808320939093556010546014909152919020555b600d54421061070c57600a5460135410156106b8576106b460646104626046600b546115bd90919063ffffffff16565b600b555b601380546001019055600954600b546106d0916115f7565b600e556009546106e1904290611639565b600d55600b5460405160008051602061254f8339815191529161070391612501565b60405180910390a15b600c5442101561072e5760405162461bcd60e51b81526004016104bd90612174565b610736611f50565b61073f83610504565b604081015190915061075084611672565b601254604051630308a59b60e31b81526000916001600160a01b0316906318452cd8906107819033906004016120a3565b60206040518083038186803b15801561079957600080fd5b505afa1580156107ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d1919061200e565b15610a265760125460405163167801e160e11b81526001600160a01b0390911690632cf003c2906108069033906004016120a3565b60206040518083038186803b15801561081e57600080fd5b505afa158015610832573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108569190611fc7565b60115460405163f3fef3a360e01b81529192506001600160a01b03169063f3fef3a39061088990849086906004016120db565b600060405180830381600087803b1580156108a357600080fd5b505af11580156108b7573d6000803e3d6000fd5b5050601254604051630308a59b60e31b81526001600160a01b0390911692506318452cd891506108eb9084906004016120a3565b60206040518083038186803b15801561090357600080fd5b505afa158015610917573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061093b919061200e565b15610a265760125460405163167801e160e11b81526001600160a01b0390911690632cf003c2906109709084906004016120a3565b60206040518083038186803b15801561098857600080fd5b505afa15801561099c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c09190611fc7565b60115460405163f3fef3a360e01b81529192506001600160a01b03169063f3fef3a3906109f390849086906004016120db565b600060405180830381600087803b158015610a0d57600080fd5b505af1158015610a21573d6000803e3d6000fd5b505050505b600854610a3d906001600160a01b031633846117f4565b5050505050565b6001546001600160a01b0316610a5861165e565b6001600160a01b031614610a7e5760405162461bcd60e51b81526004016104bd90612362565b6000610a88610ebb565b601055610a93610e17565b600f556001600160a01b03811615610ada57610aae81610406565b6001600160a01b0382166000908152601560209081526040808320939093556010546014909152919020555b600c54421115610b8757600d544210610b0357600954610afb9083906115f7565b600e55610b46565b600d54600090610b13904261157b565b90506000610b2c600e54836115bd90919063ffffffff16565b600954909150610b40906104628684611639565b600e5550505b42600f819055600954610b599190611639565b600d5560405160008051602061254f83398151915290610b7a908490612501565b60405180910390a1610bd8565b600954600b54610b96916115f7565b600e55600c54600f819055600954610bae9190611639565b600d5560405160008051602061254f83398151915290610bcf908490612501565b60405180910390a15b5050565b33610be5610ebb565b601055610bf0610e17565b600f556001600160a01b03811615610c3757610c0b81610406565b6001600160a01b0382166000908152601560209081526040808320939093556010546014909152919020555b600d544210610cbf57600a546013541015610c6b57610c6760646104626046600b546115bd90919063ffffffff16565b600b555b601380546001019055600954600b54610c83916115f7565b600e55600954610c94904290611639565b600d55600b5460405160008051602061254f83398151915291610cb691612501565b60405180910390a15b600c54421015610ce15760405162461bcd60e51b81526004016104bd90612174565b6000610cec33610406565b90508015610bd85733600081815260156020526040812055600754610d1d916001600160a01b0390911690836117f4565b336001600160a01b03167fe2403640ba68fed3a2f88b7557551d1993f84b99bb10ff833f0cf8db0c5e048682604051610d569190612501565b60405180910390a25050565b600a5481565b6001600160a01b031660009081526006602052604090205490565b610d8b61165e565b6000546001600160a01b03908116911614610db85760405162461bcd60e51b81526004016104bd9061232d565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6011546001600160a01b031681565b600e5481565b600061062442600d5461184f565b6001600160a01b038116600090815260046020526040812061046e90611865565b60146020526000908152604090205481565b600c5481565b6000546001600160a01b031690565b600b5481565b6007546001600160a01b031681565b6012546001600160a01b031681565b6000610eae610ea7600185600281111561046857fe5b83906115bd565b9392505050565b600f5481565b6000610ec56104f7565b610ed257506010546104fb565b610624610f00610ee06104f7565b610462670de0b6b3a764000061045c600e5461045c600f5461044d610e17565b60105490611639565b6008546001600160a01b031681565b33610f21610ebb565b601055610f2c610e17565b600f556001600160a01b03811615610f7357610f4781610406565b6001600160a01b0382166000908152601560209081526040808320939093556010546014909152919020555b600d544210610ffb57600a546013541015610fa757610fa360646104626046600b546115bd90919063ffffffff16565b600b555b601380546001019055600954600b54610fbf916115f7565b600e55600954610fd0904290611639565b600d55600b5460405160008051602061254f83398151915291610ff291612501565b60405180910390a15b600c5442101561101d5760405162461bcd60e51b81526004016104bd90612174565b6000821161103d5760405162461bcd60e51b81526004016104bd90612266565b601254604051630308a59b60e31b81526001600160a01b03909116906318452cd89061106d9033906004016120a3565b60206040518083038186803b15801561108557600080fd5b505afa158015611099573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110bd919061200e565b6110d95760405162461bcd60e51b81526004016104bd906121e9565b6110e38383611870565b601254604051630308a59b60e31b81526000916001600160a01b0316906318452cd8906111149033906004016120a3565b60206040518083038186803b15801561112c57600080fd5b505afa158015611140573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611164919061200e565b156113b95760125460405163167801e160e11b81526001600160a01b0390911690632cf003c2906111999033906004016120a3565b60206040518083038186803b1580156111b157600080fd5b505afa1580156111c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111e99190611fc7565b6011546040516356e4bb9760e11b81529192506001600160a01b03169063adc9772e9061121c90849087906004016120db565b600060405180830381600087803b15801561123657600080fd5b505af115801561124a573d6000803e3d6000fd5b5050601254604051630308a59b60e31b81526001600160a01b0390911692506318452cd8915061127e9084906004016120a3565b60206040518083038186803b15801561129657600080fd5b505afa1580156112aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ce919061200e565b156113b95760125460405163167801e160e11b81526001600160a01b0390911690632cf003c2906113039084906004016120a3565b60206040518083038186803b15801561131b57600080fd5b505afa15801561132f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113539190611fc7565b6011546040516356e4bb9760e11b81529192506001600160a01b03169063adc9772e9061138690849087906004016120db565b600060405180830381600087803b1580156113a057600080fd5b505af11580156113b4573d6000803e3d6000fd5b505050505b6008546113d1906001600160a01b0316333086611a56565b50505050565b60105481565b60135481565b600d5481565b60006113f3611f50565b600083815260036020908152604091829020825160e08101909352805483526001810154909183019060ff16600281111561142a57fe5b600281111561143557fe5b8152600282015460208201526003820154604082015260048201546001600160a01b0381166060830152608090910190600160a01b900460ff16600181111561147a57fe5b600181111561148557fe5b815260049190910154600160a81b900460ff161515602090910152905060008160a0015160018111156114b457fe5b148015610eae5750610eae83611a77565b6114cd61165e565b6000546001600160a01b039081169116146114fa5760405162461bcd60e51b81526004016104bd9061232d565b6001600160a01b0381166115205760405162461bcd60e51b81526004016104bd90612220565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000610eae83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611be8565b6000826115cc57506000610612565b828202828482816115d957fe5b0414610eae5760405162461bcd60e51b81526004016104bd906122ec565b6000610eae83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611c14565b600082820183811015610eae5760405162461bcd60e51b81526004016104bd9061228e565b3390565b6000610eae8383611c4b565b5490565b60008181526003602052604081209033906004830154600160a01b900460ff16600181111561169d57fe5b146116ba5760405162461bcd60e51b81526004016104bd90612197565b60048201546001600160a01b038281169116146116e95760405162461bcd60e51b81526004016104bd906122c5565b6116f2836113e9565b61170e5760405162461bcd60e51b81526004016104bd906121bf565b6004828101805460ff60a01b1916600160a01b1790556001600160a01b0382166000908152602091909152604090206117479084611c90565b50600182015460028301546000916117649160ff90911690610e91565b600554909150611774908261157b565b6005556001600160a01b03821660009081526006602052604090205461179a908261157b565b6001600160a01b0383166000908152600660205260409081902091909155517fb10f83ef922bc662e7887f3f374b87e925b4e179825c91b9b5b6205b71956e00906117e690859061248c565b60405180910390a150505050565b61184a8363a9059cbb60e01b84846040516024016118139291906120db565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611c9c565b505050565b600081831061185e5781610eae565b5090919050565b600061046e8261166e565b600061187c600261166e565b905033611887611f50565b6040518060e001604052808481526020018660028111156118a457fe5b8152602081018690524260408201526001600160a01b0384166060820152608001600081526000602091820181905285815260038252604090208251815590820151600182810180549495508594909160ff199091169083600281111561190757fe5b0217905550604082015160028201556060820151600382015560808201516004820180546001600160a01b0319166001600160a01b039092169190911780825560a0840151919060ff60a01b1916600160a01b83600181111561196657fe5b021790555060c0919091015160049182018054911515600160a81b0260ff60a81b199092169190911790556001600160a01b0383166000908152602091909152604090206119b49084611d2b565b506119bf8585610e91565b6005549094506119cf9085611639565b6005556001600160a01b0382166000908152600660205260409020546119f59085611639565b6001600160a01b038316600090815260066020526040902055611a186002611d37565b7f457e85f3aa056fb2513816818c18765f084d8faf8f8a5cc3048041d28239d4fe81604051611a479190612424565b60405180910390a15050505050565b6113d1846323b872dd60e01b858585604051602401611813939291906120b7565b6000611a81611f50565b600083815260036020908152604091829020825160e08101909352805483526001810154909183019060ff166002811115611ab857fe5b6002811115611ac357fe5b8152600282015460208201526003820154604082015260048201546001600160a01b0381166060830152608090910190600160a01b900460ff166001811115611b0857fe5b6001811115611b1357fe5b815260049190910154600160a81b900460ff1615156020909101529050600081602001516002811115611b4257fe5b1415611b52576001915050610471565b611b5a611f8d565b6040518060600160405280600081526020016276a70081526020016301da9c00815250905060008183602001516002811115611b9257fe5b60038110611b9c57fe5b602002015190506000818460600151420381611bb457fe5b0490506000828560600151420381611bc857fe5b0690508115801590611bdd5750620151808111155b979650505050505050565b60008184841115611c0c5760405162461bcd60e51b81526004016104bd91906120ff565b505050900390565b60008183611c355760405162461bcd60e51b81526004016104bd91906120ff565b506000838581611c4157fe5b0495945050505050565b81546000908210611c6e5760405162461bcd60e51b81526004016104bd90612132565b826000018281548110611c7d57fe5b9060005260206000200154905092915050565b6000610eae8383611d40565b6060611cf1826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611e0d9092919063ffffffff16565b80519091501561184a5780806020019051810190611d0f919061200e565b61184a5760405162461bcd60e51b81526004016104bd906123da565b6000610eae8383611e24565b80546001019055565b60008181526001830160205260408120548015611dfc5783546000198083019190810190600090879083908110611d7357fe5b9060005260206000200154905080876000018481548110611d9057fe5b600091825260208083209091019290925582815260018981019092526040902090840190558654879080611dc057fe5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050610612565b6000915050610612565b5092915050565b6060611e1c8484600085611e6e565b949350505050565b6000611e308383611f32565b611e6657508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610612565b506000610612565b6060611e7985611f4a565b611e955760405162461bcd60e51b81526004016104bd906123a3565b60006060866001600160a01b03168587604051611eb29190612087565b60006040518083038185875af1925050503d8060008114611eef576040519150601f19603f3d011682016040523d82523d6000602084013e611ef4565b606091505b50915091508115611f08579150611e1c9050565b805115611f185780518082602001fd5b8360405162461bcd60e51b81526004016104bd91906120ff565b60009081526001919091016020526040902054151590565b3b151590565b6040805160e08101825260008082526020820181905291810182905260608101829052608081018290529060a08201908152600060209091015290565b60405180606001604052806003906020820280368337509192915050565b600060208284031215611fbc578081fd5b8135610eae81612536565b600060208284031215611fd8578081fd5b8151610eae81612536565b60008060408385031215611ff5578081fd5b823561200081612536565b946020939093013593505050565b60006020828403121561201f578081fd5b81518015158114610eae578182fd5b60008060408385031215612040578182fd5b823560038110612000578283fd5b60006020828403121561205f578081fd5b5035919050565b6001600160a01b03169052565b15159052565b6002811061208357fe5b9052565b6000825161209981846020870161250a565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b600060208252825180602084015261211e81604085016020870161250a565b601f01601f19169190910160400192915050565b60208082526022908201527f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e604082015261647360f01b606082015260800190565b6020808252600990820152681b9bdd081cdd185c9d60ba1b604082015260600190565b6020808252600e908201526d696e76616c69642073746174757360901b604082015260600190565b60208082526010908201526f6e6f7420776974686472617761626c6560801b604082015260600190565b6020808252601d908201527f63616e206e6f74207374616b6520776974686f75742072656665726572000000604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252600e908201526d043616e6e6f74207374616b6520360941b604082015260600190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252600d908201526c3737903832b936b4b9b9b4b7b760991b604082015260600190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526021908201527f43616c6c6572206973206e6f742072657761726420646973747269627574696f6040820152603760f91b606082015260800190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b81518152602082015160e08201906003811061243c57fe5b602083015260408381015190830152606080840151908301526080808401516001600160a01b03169083015260a0808401519061247b90840182612079565b5060c0928301511515919092015290565b81548152600182015460e082019060ff16600381106124a757fe5b6020830152600283015460408301526003830154606083015260048301546124db608084016001600160a01b038316612066565b6124ee60a0840160ff8360a01c16612079565b611e0660c0840160ff8360a81c16612073565b90815260200190565b60005b8381101561252557818101518382015260200161250d565b838111156113d15750506000910152565b6001600160a01b038116811461254b57600080fd5b5056fede88a922e0d3b88b24e9623efeb464919c6bf9f66857a65e2bfcf2ce87a9433da26469706673582212208ce621ba9900f63bfc5e568a8e4ac28e16799fc698f940696a15b98ba5e9488864736f6c634300060c00330000000000000000000000007f4d7f2f19e993e713fe85e877f34c949178bf550000000000000000000000004cc6ba9cb67dde3a4c604c8b021818e0e4227704000000000000000000000000000000000000000000000000000000006243f1e0000000000000000000000000115b3a0eff56dc26fea083efa9fba466583e94e4000000000000000000000000b7b512f1dca27b636ffe2837ba7b1d4b7e056b80

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

0000000000000000000000007f4d7f2f19e993e713fe85e877f34c949178bf550000000000000000000000004cc6ba9cb67dde3a4c604c8b021818e0e4227704000000000000000000000000000000000000000000000000000000006243f1e0000000000000000000000000115b3a0eff56dc26fea083efa9fba466583e94e4000000000000000000000000b7b512f1dca27b636ffe2837ba7b1d4b7e056b80

-----Decoded View---------------
Arg [0] : share_ (address): 0x7f4d7f2f19e993e713fe85e877f34c949178bf55
Arg [1] : lptoken_ (address): 0x4cc6ba9cb67dde3a4c604c8b021818e0e4227704
Arg [2] : starttime_ (uint256): 1648620000
Arg [3] : _referPool (address): 0x115b3a0eff56dc26fea083efa9fba466583e94e4
Arg [4] : _refer (address): 0xb7b512f1dca27b636ffe2837ba7b1d4b7e056b80

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000007f4d7f2f19e993e713fe85e877f34c949178bf55
Arg [1] : 0000000000000000000000004cc6ba9cb67dde3a4c604c8b021818e0e4227704
Arg [2] : 000000000000000000000000000000000000000000000000000000006243f1e0
Arg [3] : 000000000000000000000000115b3a0eff56dc26fea083efa9fba466583e94e4
Arg [4] : 000000000000000000000000b7b512f1dca27b636ffe2837ba7b1d4b7e056b80


Deployed ByteCode Sourcemap

38773:5609:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40876:265;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39476:42;;;;;;:::i;:::-;;:::i;22686:178::-;;;;;;:::i;:::-;;:::i;:::-;;22385:33;;;:::i;:::-;;;;;;;:::i;35751:91::-;;;:::i;38953:51::-;;;:::i;35968:176::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;36152:172::-;;;;;;:::i;:::-;;:::i;36332:107::-;;;:::i;41980:652::-;;;;;;:::i;:::-;;:::i;43475:904::-;;;;;;:::i;:::-;;:::i;42642:308::-;;;:::i;39011:55::-;;;:::i;35850:110::-;;;;;;:::i;:::-;;:::i;21672:148::-;;;:::i;39319:24::-;;;:::i;39205:29::-;;;:::i;40309:131::-;;;:::i;36447:123::-;;;;;;:::i;:::-;;:::i;39412:57::-;;;;;;:::i;:::-;;:::i;39119:24::-;;;:::i;21030:79::-;;;:::i;39075:37::-;;;:::i;38903:19::-;;;:::i;39350:21::-;;;:::i;37858:127::-;;;;;;:::i;:::-;;:::i;39241:29::-;;;:::i;40448:420::-;;;:::i;38929:17::-;;;:::i;41232:740::-;;;;;;:::i;:::-;;:::i;39277:35::-;;;:::i;39380:25::-;;;:::i;39167:31::-;;;:::i;37993:172::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;21975:244::-;;;;;;:::i;:::-;;:::i;40876:265::-;-1:-1:-1;;;;;41116:16:0;;40930:7;41116:16;;;:7;:16;;;;;;;;;41032:22;:31;;;;;;40970:163;;41116:16;40970:123;;41088:4;;40970:95;;41011:53;;:16;:14;:16::i;:::-;:20;;:53::i;:::-;40970:18;40980:7;40970:9;:18::i;:::-;:40;;:95::i;:::-;:117;;:123::i;:::-;:145;;:163::i;:::-;40950:183;;40876:265;;;;:::o;39476:42::-;;;;;;;;;;;;;:::o;22686:178::-;21252:12;:10;:12::i;:::-;21242:6;;-1:-1:-1;;;;;21242:6:0;;;:22;;;21234:67;;;;-1:-1:-1;;;21234:67:0;;;;;;;:::i;:::-;;;;;;;;;22816:18:::1;:40:::0;;-1:-1:-1;;;;;;22816:40:0::1;-1:-1:-1::0;;;;;22816:40:0;;;::::1;::::0;;;::::1;::::0;;22686:178::o;22385:33::-;;;-1:-1:-1;;;;;22385:33:0;;:::o;35751:91::-;35822:12;;35751:91;;:::o;38953:51::-;;;;:::o;35968:176::-;36015:14;;:::i;:::-;36041:16;;:::i;:::-;36060:13;;;;:9;:13;;;;;;;;;36041:32;;;;;;;;;;;;;;;;36060:13;;36041:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36041:32:0;;;;;;;;;;;-1:-1:-1;;;36041:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;36041:32:0;;;;;;;;;;;;-1:-1:-1;36101:16:0;36114:2;36101:12;:16::i;:::-;36084:33;;:14;;;:33;:14;35968:176;-1:-1:-1;;35968:176:0:o;36152:172::-;36221:14;;:::i;:::-;-1:-1:-1;;;;;36257:20:0;;36247:7;36257:20;;;:11;:20;;;;;:30;;36281:5;36257:23;:30::i;:::-;36247:40;;36305:11;36313:2;36305:7;:11::i;:::-;36298:18;;;36152:172;;;;;:::o;36332:107::-;36382:4;36406:25;:15;:23;:25::i;:::-;36399:32;;36332:107;:::o;41980:652::-;42045:10;40044:16;:14;:16::i;:::-;40021:20;:39;40088:26;:24;:26::i;:::-;40071:14;:43;-1:-1:-1;;;;;40129:21:0;;;40125:157;;40186:15;40193:7;40186:6;:15::i;:::-;-1:-1:-1;;;;;40167:16:0;;;;;;:7;:16;;;;;;;;:34;;;;40250:20;;40216:22;:31;;;;;;:54;40125:157;43014:12:::1;;42995:15;:31;42991:346;;43058:10;;43046:9;;:22;43043:101;;;43101:27;43124:3;43101:18;43116:2;43101:10;;:14;;:18;;;;:::i;:27::-;43088:10;:40:::0;43043:101:::1;43158:9;:11:::0;;::::1;;::::0;;43214:8:::1;::::0;43199:10:::1;::::0;:24:::1;::::0;:14:::1;:24::i;:::-;43186:10;:37:::0;43273:8:::1;::::0;43253:29:::1;::::0;:15:::1;::::0;:19:::1;:29::i;:::-;43238:12;:44:::0;43314:10:::1;::::0;43302:23:::1;::::0;-1:-1:-1;;;;;;;;;;;43302:23:0;::::1;::::0;::::1;:::i;:::-;;;;;;;;42991:346;43424:9:::2;;43405:15;:28;;43397:50;;;;-1:-1:-1::0;;;43397:50:0::2;;;;;;;:::i;:::-;42113:16:::3;;:::i;:::-;42132:11;42140:2;42132:7;:11::i;:::-;42168:8;::::0;::::3;::::0;42113:30;;-1:-1:-1;42187:19:0::3;42203:2:::0;42187:15:::3;:19::i;:::-;42247:5;::::0;:29:::3;::::0;-1:-1:-1;;;42247:29:0;;42217:16:::3;::::0;-1:-1:-1;;;;;42247:5:0::3;::::0;:17:::3;::::0;:29:::3;::::0;42265:10:::3;::::0;42247:29:::3;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42244:332;;;42303:5;::::0;:26:::3;::::0;-1:-1:-1;;;42303:26:0;;-1:-1:-1;;;;;42303:5:0;;::::3;::::0;:14:::3;::::0;:26:::3;::::0;42318:10:::3;::::0;42303:26:::3;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42350:9;::::0;42344:43:::3;::::0;-1:-1:-1;;;42344:43:0;;42292:37;;-1:-1:-1;;;;;;42350:9:0::3;::::0;42344:25:::3;::::0;:43:::3;::::0;42292:37;;42380:6;;42344:43:::3;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;-1:-1:-1::0;;42405:5:0::3;::::0;:27:::3;::::0;-1:-1:-1;;;42405:27:0;;-1:-1:-1;;;;;42405:5:0;;::::3;::::0;-1:-1:-1;42405:17:0::3;::::0;-1:-1:-1;42405:27:0::3;::::0;42423:8;;42405:27:::3;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42402:163;;;42463:5;::::0;:24:::3;::::0;-1:-1:-1;;;42463:24:0;;-1:-1:-1;;;;;42463:5:0;;::::3;::::0;:14:::3;::::0;:24:::3;::::0;42478:8;;42463:24:::3;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42512:9;::::0;42506:43:::3;::::0;-1:-1:-1;;;42506:43:0;;42452:35;;-1:-1:-1;;;;;;42512:9:0::3;::::0;42506:25:::3;::::0;:43:::3;::::0;42452:35;;42542:6;;42506:43:::3;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;42402:163;42588:3;::::0;:36:::3;::::0;-1:-1:-1;;;;;42588:3:0::3;42605:10;42617:6:::0;42588:16:::3;:36::i;:::-;43458:1;;;41980:652:::0;;:::o;43475:904::-;22579:18;;-1:-1:-1;;;;;22579:18:0;22563:12;:10;:12::i;:::-;-1:-1:-1;;;;;22563:34:0;;22541:117;;;;-1:-1:-1;;;22541:117:0;;;;;;;:::i;:::-;43617:1:::1;40044:16;:14;:16::i;:::-;40021:20;:39:::0;40088:26:::1;:24;:26::i;:::-;40071:14;:43:::0;-1:-1:-1;;;;;40129:21:0;::::1;::::0;40125:157:::1;;40186:15;40193:7;40186:6;:15::i;:::-;-1:-1:-1::0;;;;;40167:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;;;:34;;;;40250:20:::1;::::0;40216:22:::1;:31:::0;;;;;;:54;40125:157:::1;43659:9:::2;;43641:15;:27;43637:735;;;43708:12;;43689:15;:31;43685:328;;43765:8;::::0;43754:20:::2;::::0;:6;;:10:::2;:20::i;:::-;43741:10;:33:::0;43685:328:::2;;;43835:12;::::0;43815:17:::2;::::0;43835:33:::2;::::0;43852:15:::2;43835:16;:33::i;:::-;43815:53;;43887:16;43906:25;43920:10;;43906:9;:13;;:25;;;;:::i;:::-;43988:8;::::0;43887:44;;-1:-1:-1;43963:34:0::2;::::0;:20:::2;:6:::0;43887:44;43963:10:::2;:20::i;:34::-;43950:10;:47:::0;-1:-1:-1;;43685:328:0::2;44044:15;44027:14;:32:::0;;;44109:8:::2;::::0;44089:29:::2;::::0;44044:15;44089:19:::2;:29::i;:::-;44074:12;:44:::0;44138:19:::2;::::0;-1:-1:-1;;;;;;;;;;;44138:19:0;::::2;::::0;44150:6;;44138:19:::2;:::i;:::-;;;;;;;;43637:735;;;44218:8;::::0;44203:10:::2;::::0;:24:::2;::::0;:14:::2;:24::i;:::-;44190:10;:37:::0;44259:9:::2;::::0;44242:14:::2;:26:::0;;;44312:8:::2;::::0;44298:23:::2;::::0;44259:9;44298:13:::2;:23::i;:::-;44283:12;:38:::0;44341:19:::2;::::0;-1:-1:-1;;;;;;;;;;;44341:19:0;::::2;::::0;44353:6;;44341:19:::2;:::i;:::-;;;;;;;;43637:735;22669:1:::1;43475:904:::0;:::o;42642:308::-;42683:10;40044:16;:14;:16::i;:::-;40021:20;:39;40088:26;:24;:26::i;:::-;40071:14;:43;-1:-1:-1;;;;;40129:21:0;;;40125:157;;40186:15;40193:7;40186:6;:15::i;:::-;-1:-1:-1;;;;;40167:16:0;;;;;;:7;:16;;;;;;;;:34;;;;40250:20;;40216:22;:31;;;;;;:54;40125:157;43014:12:::1;;42995:15;:31;42991:346;;43058:10;;43046:9;;:22;43043:101;;;43101:27;43124:3;43101:18;43116:2;43101:10;;:14;;:18;;;;:::i;:27::-;43088:10;:40:::0;43043:101:::1;43158:9;:11:::0;;::::1;;::::0;;43214:8:::1;::::0;43199:10:::1;::::0;:24:::1;::::0;:14:::1;:24::i;:::-;43186:10;:37:::0;43273:8:::1;::::0;43253:29:::1;::::0;:15:::1;::::0;:19:::1;:29::i;:::-;43238:12;:44:::0;43314:10:::1;::::0;43302:23:::1;::::0;-1:-1:-1;;;;;;;;;;;43302:23:0;::::1;::::0;::::1;:::i;:::-;;;;;;;;42991:346;43424:9:::2;;43405:15;:28;;43397:50;;;;-1:-1:-1::0;;;43397:50:0::2;;;;;;;:::i;:::-;42728:14:::3;42745:18;42752:10;42745:6;:18::i;:::-;42728:35:::0;-1:-1:-1;42778:10:0;;42774:169:::3;;42813:10;42827:1;42805:19:::0;;;:7:::3;:19;::::0;;;;:23;42843:5:::3;::::0;:38:::3;::::0;-1:-1:-1;;;;;42843:5:0;;::::3;::::0;42874:6;42843:18:::3;:38::i;:::-;42912:10;-1:-1:-1::0;;;;;42901:30:0::3;;42924:6;42901:30;;;;;;:::i;:::-;;;;;;;;43458:1;42642:308:::0;:::o;39011:55::-;;;;:::o;35850:110::-;-1:-1:-1;;;;;35934:18:0;35907:7;35934:18;;;:9;:18;;;;;;;35850:110::o;21672:148::-;21252:12;:10;:12::i;:::-;21242:6;;-1:-1:-1;;;;;21242:6:0;;;:22;;;21234:67;;;;-1:-1:-1;;;21234:67:0;;;;;;;:::i;:::-;21779:1:::1;21763:6:::0;;21742:40:::1;::::0;-1:-1:-1;;;;;21763:6:0;;::::1;::::0;21742:40:::1;::::0;21779:1;;21742:40:::1;21810:1;21793:19:::0;;-1:-1:-1;;;;;;21793:19:0::1;::::0;;21672:148::o;39319:24::-;;;-1:-1:-1;;;;;39319:24:0;;:::o;39205:29::-;;;;:::o;40309:131::-;40366:7;40393:39;40402:15;40419:12;;40393:8;:39::i;36447:123::-;-1:-1:-1;;;;;36533:20:0;;36509:4;36533:20;;;:11;:20;;;;;:29;;:27;:29::i;39412:57::-;;;;;;;;;;;;;:::o;39119:24::-;;;;:::o;21030:79::-;21068:7;21095:6;-1:-1:-1;;;;;21095:6:0;21030:79;:::o;39075:37::-;;;;:::o;38903:19::-;;;-1:-1:-1;;;;;38903:19:0;;:::o;39350:21::-;;;-1:-1:-1;;;;;39350:21:0;;:::o;37858:127::-;37924:4;37948:29;37959:17;37974:1;37964:4;37959:10;;;;;;;:17;37948:6;;:10;:29::i;:::-;37941:36;37858:127;-1:-1:-1;;;37858:127:0:o;39241:29::-;;;;:::o;40448:420::-;40495:7;40519:13;:11;:13::i;:::-;40515:78;;-1:-1:-1;40561:20:0;;40554:27;;40515:78;40623:237;40666:179;40831:13;:11;:13::i;:::-;40666:138;40799:4;40666:106;40761:10;;40666:68;40719:14;;40666:26;:24;:26::i;:179::-;40623:20;;;:24;:237::i;38929:17::-;;;-1:-1:-1;;;;;38929:17:0;;:::o;41232:740::-;41309:10;40044:16;:14;:16::i;:::-;40021:20;:39;40088:26;:24;:26::i;:::-;40071:14;:43;-1:-1:-1;;;;;40129:21:0;;;40125:157;;40186:15;40193:7;40186:6;:15::i;:::-;-1:-1:-1;;;;;40167:16:0;;;;;;:7;:16;;;;;;;;:34;;;;40250:20;;40216:22;:31;;;;;;:54;40125:157;43014:12:::1;;42995:15;:31;42991:346;;43058:10;;43046:9;;:22;43043:101;;;43101:27;43124:3;43101:18;43116:2;43101:10;;:14;;:18;;;;:::i;:27::-;43088:10;:40:::0;43043:101:::1;43158:9;:11:::0;;::::1;;::::0;;43214:8:::1;::::0;43199:10:::1;::::0;:24:::1;::::0;:14:::1;:24::i;:::-;43186:10;:37:::0;43273:8:::1;::::0;43253:29:::1;::::0;:15:::1;::::0;:19:::1;:29::i;:::-;43238:12;:44:::0;43314:10:::1;::::0;43302:23:::1;::::0;-1:-1:-1;;;;;;;;;;;43302:23:0;::::1;::::0;::::1;:::i;:::-;;;;;;;;42991:346;43424:9:::2;;43405:15;:28;;43397:50;;;;-1:-1:-1::0;;;43397:50:0::2;;;;;;;:::i;:::-;41394:1:::3;41385:6;:10;41377:37;;;;-1:-1:-1::0;;;41377:37:0::3;;;;;;;:::i;:::-;41433:5;::::0;:29:::3;::::0;-1:-1:-1;;;41433:29:0;;-1:-1:-1;;;;;41433:5:0;;::::3;::::0;:17:::3;::::0;:29:::3;::::0;41451:10:::3;::::0;41433:29:::3;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41425:71;;;;-1:-1:-1::0;;;41425:71:0::3;;;;;;;:::i;:::-;41507:26;41520:4;41526:6;41507:12;:26::i;:::-;41574:5;::::0;:29:::3;::::0;-1:-1:-1;;;41574:29:0;;41544:16:::3;::::0;-1:-1:-1;;;;;41574:5:0::3;::::0;:17:::3;::::0;:29:::3;::::0;41592:10:::3;::::0;41574:29:::3;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41571:326;;;41630:5;::::0;:26:::3;::::0;-1:-1:-1;;;41630:26:0;;-1:-1:-1;;;;;41630:5:0;;::::3;::::0;:14:::3;::::0;:26:::3;::::0;41645:10:::3;::::0;41630:26:::3;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41677:9;::::0;41671:40:::3;::::0;-1:-1:-1;;;41671:40:0;;41619:37;;-1:-1:-1;;;;;;41677:9:0::3;::::0;41671:22:::3;::::0;:40:::3;::::0;41619:37;;41704:6;;41671:40:::3;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;-1:-1:-1::0;;41729:5:0::3;::::0;:27:::3;::::0;-1:-1:-1;;;41729:27:0;;-1:-1:-1;;;;;41729:5:0;;::::3;::::0;-1:-1:-1;41729:17:0::3;::::0;-1:-1:-1;41729:27:0::3;::::0;41747:8;;41729:27:::3;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41726:160;;;41787:5;::::0;:24:::3;::::0;-1:-1:-1;;;41787:24:0;;-1:-1:-1;;;;;41787:5:0;;::::3;::::0;:14:::3;::::0;:24:::3;::::0;41802:8;;41787:24:::3;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41836:9;::::0;41830:40:::3;::::0;-1:-1:-1;;;41830:40:0;;41776:35;;-1:-1:-1;;;;;;41836:9:0::3;::::0;41830:22:::3;::::0;:40:::3;::::0;41776:35;;41863:6;;41830:40:::3;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;41726:160;41909:3;::::0;:55:::3;::::0;-1:-1:-1;;;;;41909:3:0::3;41930:10;41950:4;41957:6:::0;41909:20:::3;:55::i;:::-;43458:1;41232:740:::0;;;:::o;39277:35::-;;;;:::o;39380:25::-;;;;:::o;39167:31::-;;;;:::o;37993:172::-;38044:4;38061:16;;:::i;:::-;38080:13;;;;:9;:13;;;;;;;;;38061:32;;;;;;;;;;;;;;;;38080:13;;38061:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;38061:32:0;;;;;;;;;;;-1:-1:-1;;;38061:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;38061:32:0;;;;;;;;;;;;-1:-1:-1;;38111:1:0;:8;;;:25;;;;;;;;;:46;;;;;38140:17;38154:2;38140:13;:17::i;21975:244::-;21252:12;:10;:12::i;:::-;21242:6;;-1:-1:-1;;;;;21242:6:0;;;:22;;;21234:67;;;;-1:-1:-1;;;21234:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22064:22:0;::::1;22056:73;;;;-1:-1:-1::0;;;22056:73:0::1;;;;;;;:::i;:::-;22166:6;::::0;;22145:38:::1;::::0;-1:-1:-1;;;;;22145:38:0;;::::1;::::0;22166:6;::::1;::::0;22145:38:::1;::::0;::::1;22194:6;:17:::0;;-1:-1:-1;;;;;;22194:17:0::1;-1:-1:-1::0;;;;;22194:17:0;;;::::1;::::0;;;::::1;::::0;;21975:244::o;2326:136::-;2384:7;2411:43;2415:1;2418;2411:43;;;;;;;;;;;;;;;;;:3;:43::i;3216:471::-;3274:7;3519:6;3515:47;;-1:-1:-1;3549:1:0;3542:8;;3515:47;3586:5;;;3590:1;3586;:5;:1;3610:5;;;;;:10;3602:56;;;;-1:-1:-1;;;3602:56:0;;;;;;;:::i;4163:132::-;4221:7;4248:39;4252:1;4255;4248:39;;;;;;;;;;;;;;;;;:3;:39::i;1862:181::-;1920:7;1952:5;;;1976:6;;;;1968:46;;;;-1:-1:-1;;;1968:46:0;;;;;;;:::i;19571:106::-;19659:10;19571:106;:::o;34023:137::-;34094:7;34129:22;34133:3;34145:5;34129:3;:22::i;25667:114::-;25759:14;;25667:114::o;37282:568::-;37330:17;37350:13;;;:9;:13;;;;;;37390:10;;37419:8;;;;-1:-1:-1;;;37419:8:0;;;;:25;;;;;;;;;37411:52;;;;-1:-1:-1;;;37411:52:0;;;;;;;:::i;:::-;37482:7;;;;-1:-1:-1;;;;;37482:16:0;;;:7;;:16;37474:42;;;;-1:-1:-1;;;37474:42:0;;;;;;;:::i;:::-;37535:16;37548:2;37535:12;:16::i;:::-;37527:45;;;;-1:-1:-1;;;37527:45:0;;;;;;;:::i;:::-;37585:8;;;;:27;;-1:-1:-1;;;;37585:27:0;-1:-1:-1;;;37585:27:0;;;-1:-1:-1;;;;;37623:18:0;;-1:-1:-1;37623:18:0;;;;;;;;;;;:29;;37649:2;37623:25;:29::i;:::-;-1:-1:-1;37689:6:0;;;;37697:8;;;;37663:11;;37677:29;;37689:6;;;;;37677:11;:29::i;:::-;37732:12;;37663:43;;-1:-1:-1;37732:24:0;;37663:43;37732:16;:24::i;:::-;37717:12;:39;-1:-1:-1;;;;;37786:16:0;;;;;;:9;:16;;;;;;:28;;37807:6;37786:20;:28::i;:::-;-1:-1:-1;;;;;37767:16:0;;;;;;:9;:16;;;;;;;:47;;;;37830:12;;;;;37840:1;;37830:12;:::i;:::-;;;;;;;;37282:568;;;;:::o;15861:177::-;15944:86;15964:5;15994:23;;;16019:2;16023:5;15971:58;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;15971:58:0;;;;;;;;;;;;;;-1:-1:-1;;;;;15971:58:0;-1:-1:-1;;;;;;15971:58:0;;;;;;;;;;15944:19;:86::i;:::-;15861:177;;;:::o;501:106::-;559:7;590:1;586;:5;:13;;598:1;586:13;;;-1:-1:-1;594:1:0;;501:106;-1:-1:-1;501:106:0:o;33565:114::-;33625:7;33652:19;33660:3;33652:7;:19::i;36578:696::-;36638:7;36648:25;:15;:23;:25::i;:::-;36638:35;-1:-1:-1;36700:10:0;36723:16;;:::i;:::-;36742:233;;;;;;;;36769:2;36742:233;;;;36792:4;36742:233;;;;;;;;;;;;;;;;36851:15;36742:233;;;;-1:-1:-1;;;;;36742:233:0;;;;;;;;-1:-1:-1;36742:233:0;;36958:5;36742:233;;;;;;;36986:13;;;:9;:13;;;;;:17;;;;;;;;36742:233;36986:17;;;;;36723:252;;-1:-1:-1;36723:252:0;;36986:17;;-1:-1:-1;;36986:17:0;;;;;;;;;;;;;;;;;-1:-1:-1;36986:17:0;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;36986:17:0;-1:-1:-1;;;;;36986:17:0;;;;;;;;;;;;;;;;-1:-1:-1;;;;36986:17:0;-1:-1:-1;;;36986:17:0;-1:-1:-1;36986:17:0;;;;;;;;;;;-1:-1:-1;36986:17:0;;;;;;;;;;;;;;;-1:-1:-1;;;36986:17:0;-1:-1:-1;;;;36986:17:0;;;;;;;;;-1:-1:-1;;;;;37014:18:0;;-1:-1:-1;37014:18:0;;;;;;;;;;;:26;;37037:2;37014:22;:26::i;:::-;;37060:25;37072:4;37078:6;37060:11;:25::i;:::-;37111:12;;37051:34;;-1:-1:-1;37111:24:0;;37051:34;37111:16;:24::i;:::-;37096:12;:39;-1:-1:-1;;;;;37165:16:0;;;;;;:9;:16;;;;;;:28;;37186:6;37165:20;:28::i;:::-;-1:-1:-1;;;;;37146:16:0;;;;;;:9;:16;;;;;:47;37214:27;:15;:25;:27::i;:::-;37257:9;37264:1;37257:9;;;;;;:::i;:::-;;;;;;;;36578:696;;;;;:::o;16046:205::-;16147:96;16167:5;16197:27;;;16226:4;16232:2;16236:5;16174:68;;;;;;;;;;:::i;38173:486::-;38226:4;38243:16;;:::i;:::-;38262:13;;;;:9;:13;;;;;;;;;38243:32;;;;;;;;;;;;;;;;38262:13;;38243:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;38243:32:0;;;;;;;;;;;-1:-1:-1;;;38243:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;38243:32:0;;;;;;;;;;;;-1:-1:-1;;38289:1:0;:6;;;:19;;;;;;;;;38286:61;;;38331:4;38324:11;;;;;38286:61;38357:17;;:::i;:::-;:81;;;;;;;;38383:1;38357:81;;;;34970:7;38357:81;;;;35025:8;38357:81;;;;;38449:6;38458:2;38466:1;:6;;;38461:12;;;;;;;;38458:16;;;;;;;;;;;38449:25;;38485:6;38529:1;38513;:11;;;38495:15;:29;38494:36;;;;;;38485:45;;38541:6;38585:1;38569;:11;;;38551:15;:29;38550:36;;;;;;;-1:-1:-1;38604:5:0;;;;;:47;;;34916:6;38613:1;:38;;38604:47;38597:54;38173:486;-1:-1:-1;;;;;;;38173:486:0:o;2765:192::-;2851:7;2887:12;2879:6;;;;2871:29;;;;-1:-1:-1;;;2871:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;2923:5:0;;;2765:192::o;4791:278::-;4877:7;4912:12;4905:5;4897:28;;;;-1:-1:-1;;;4897:28:0;;;;;;;;:::i;:::-;;4936:9;4952:1;4948;:5;;;;;;;4791:278;-1:-1:-1;;;;;4791:278:0:o;30687:204::-;30782:18;;30754:7;;30782:26;-1:-1:-1;30774:73:0;;;;-1:-1:-1;;;30774:73:0;;;;;;;:::i;:::-;30865:3;:11;;30877:5;30865:18;;;;;;;;;;;;;;;;30858:25;;30687:204;;;;:::o;33110:137::-;33180:4;33204:35;33212:3;33232:5;33204:7;:35::i;18166:761::-;18590:23;18616:69;18644:4;18616:69;;;;;;;;;;;;;;;;;18624:5;-1:-1:-1;;;;;18616:27:0;;;:69;;;;;:::i;:::-;18700:17;;18590:95;;-1:-1:-1;18700:21:0;18696:224;;18842:10;18831:30;;;;;;;;;;;;:::i;:::-;18823:85;;;;-1:-1:-1;;;18823:85:0;;;;;;;:::i;32803:131::-;32870:4;32894:32;32899:3;32919:5;32894:4;:32::i;25789:181::-;25943:19;;25961:1;25943:19;;;25789:181::o;28389:1544::-;28455:4;28594:19;;;:12;;;:19;;;;;;28630:15;;28626:1300;;29065:18;;-1:-1:-1;;29016:14:0;;;;29065:22;;;;28992:21;;29065:3;;:22;;29352;;;;;;;;;;;;;;29332:42;;29498:9;29469:3;:11;;29481:13;29469:26;;;;;;;;;;;;;;;;;;;:38;;;;29575:23;;;29617:1;29575:12;;;:23;;;;;;29601:17;;;29575:43;;29727:17;;29575:3;;29727:17;;;;;;;;;;;;;;;;;;;;;;29822:3;:12;;:19;29835:5;29822:19;;;;;;;;;;;29815:26;;;29865:4;29858:11;;;;;;;;28626:1300;29909:5;29902:12;;;;;28626:1300;28389:1544;;;;;:::o;12831:196::-;12934:12;12966:53;12989:6;12997:4;13003:1;13006:12;12966:22;:53::i;:::-;12959:60;12831:196;-1:-1:-1;;;;12831:196:0:o;27799:414::-;27862:4;27884:21;27894:3;27899:5;27884:9;:21::i;:::-;27879:327;;-1:-1:-1;27922:23:0;;;;;;;;:11;:23;;;;;;;;;;;;;28105:18;;28083:19;;;:12;;;:19;;;;;;:40;;;;28138:11;;27879:327;-1:-1:-1;28189:5:0;28182:12;;14208:979;14338:12;14371:18;14382:6;14371:10;:18::i;:::-;14363:60;;;;-1:-1:-1;;;14363:60:0;;;;;;;:::i;:::-;14497:12;14511:23;14538:6;-1:-1:-1;;;;;14538:11:0;14558:8;14569:4;14538:36;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14496:78;;;;14589:7;14585:595;;;14620:10;-1:-1:-1;14613:17:0;;-1:-1:-1;14613:17:0;14585:595;14734:17;;:21;14730:439;;14997:10;14991:17;15058:15;15045:10;15041:2;15037:19;15030:44;14945:148;15140:12;15133:20;;-1:-1:-1;;;15133:20:0;;;;;;;;:::i;30019:129::-;30092:4;30116:19;;;:12;;;;;:19;;;;;;:24;;;30019:129::o;9913:422::-;10280:20;10319:8;;;9913:422::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;710:241::-;;814:2;802:9;793:7;789:23;785:32;782:2;;;-1:-1;;820:12;782:2;85:6;72:20;97:33;124:5;97:33;:::i;958:263::-;;1073:2;1061:9;1052:7;1048:23;1044:32;1041:2;;;-1:-1;;1079:12;1041:2;226:6;220:13;238:33;265:5;238:33;:::i;1228:366::-;;;1349:2;1337:9;1328:7;1324:23;1320:32;1317:2;;;-1:-1;;1355:12;1317:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;1407:63;1507:2;1546:22;;;;640:20;;-1:-1;;;1311:283::o;1601:257::-;;1713:2;1701:9;1692:7;1688:23;1684:32;1681:2;;;-1:-1;;1719:12;1681:2;364:6;358:13;27058:5;23314:13;23307:21;27036:5;27033:32;27023:2;;-1:-1;;27069:12;1865:384;;;1995:2;1983:9;1974:7;1970:23;1966:32;1963:2;;;-1:-1;;2001:12;1963:2;507:6;494:20;27173:1;27166:5;27163:12;27153:2;;-1:-1;;27179:12;2256:241;;2360:2;2348:9;2339:7;2335:23;2331:32;2328:2;;;-1:-1;;2366:12;2328:2;-1:-1;640:20;;2322:175;-1:-1;2322:175::o;2653:103::-;-1:-1;;;;;22666:54;2714:37;;2708:48::o;2883:94::-;23314:13;23307:21;2938:34;;2932:45::o;3923:134::-;26824:1;26817:5;26814:12;26804:2;;26830:9;26804:2;3993:59;;3987:70::o;12599:271::-;;3255:5;22096:12;3366:52;3411:6;3406:3;3399:4;3392:5;3388:16;3366:52;:::i;:::-;3430:16;;;;;12733:137;-1:-1;;12733:137::o;12877:222::-;-1:-1;;;;;22666:54;;;;2714:37;;13004:2;12989:18;;12975:124::o;13351:444::-;-1:-1;;;;;22666:54;;;2714:37;;22666:54;;;;13698:2;13683:18;;2714:37;13781:2;13766:18;;12430:37;;;;13534:2;13519:18;;13505:290::o;13802:333::-;-1:-1;;;;;22666:54;;;;2714:37;;14121:2;14106:18;;12430:37;13957:2;13942:18;;13928:207::o;14142:210::-;23314:13;;23307:21;2938:34;;14263:2;14248:18;;14234:118::o;14879:310::-;;15026:2;15047:17;15040:47;4209:5;22096:12;22535:6;15026:2;15015:9;15011:18;22523:19;4303:52;4348:6;22563:14;15015:9;22563:14;15026:2;4329:5;4325:16;4303:52;:::i;:::-;26278:7;26262:14;-1:-1;;26258:28;4367:39;;;;22563:14;4367:39;;14997:192;-1:-1;;14997:192::o;15196:416::-;15396:2;15410:47;;;4643:2;15381:18;;;22523:19;4679:34;22563:14;;;4659:55;-1:-1;;;4734:12;;;4727:26;4772:12;;;15367:245::o;15619:416::-;15819:2;15833:47;;;5023:1;15804:18;;;22523:19;-1:-1;;;22563:14;;;5038:32;5089:12;;;15790:245::o;16042:416::-;16242:2;16256:47;;;5340:2;16227:18;;;22523:19;-1:-1;;;22563:14;;;5356:37;5412:12;;;16213:245::o;16465:416::-;16665:2;16679:47;;;5663:2;16650:18;;;22523:19;-1:-1;;;22563:14;;;5679:39;5737:12;;;16636:245::o;16888:416::-;17088:2;17102:47;;;5988:2;17073:18;;;22523:19;6024:31;22563:14;;;6004:52;6075:12;;;17059:245::o;17311:416::-;17511:2;17525:47;;;6326:2;17496:18;;;22523:19;6362:34;22563:14;;;6342:55;-1:-1;;;6417:12;;;6410:30;6459:12;;;17482:245::o;17734:416::-;17934:2;17948:47;;;6710:2;17919:18;;;22523:19;-1:-1;;;22563:14;;;6726:37;6782:12;;;17905:245::o;18157:416::-;18357:2;18371:47;;;7033:2;18342:18;;;22523:19;7069:29;22563:14;;;7049:50;7118:12;;;18328:245::o;18580:416::-;18780:2;18794:47;;;7369:2;18765:18;;;22523:19;-1:-1;;;22563:14;;;7385:36;7440:12;;;18751:245::o;19003:416::-;19203:2;19217:47;;;7691:2;19188:18;;;22523:19;7727:34;22563:14;;;7707:55;-1:-1;;;7782:12;;;7775:25;7819:12;;;19174:245::o;19426:416::-;19626:2;19640:47;;;19611:18;;;22523:19;8106:34;22563:14;;;8086:55;8160:12;;;19597:245::o;19849:416::-;20049:2;20063:47;;;8411:2;20034:18;;;22523:19;8447:34;22563:14;;;8427:55;-1:-1;;;8502:12;;;8495:25;8539:12;;;20020:245::o;20272:416::-;20472:2;20486:47;;;8790:2;20457:18;;;22523:19;8826:31;22563:14;;;8806:52;8877:12;;;20443:245::o;20695:416::-;20895:2;20909:47;;;9128:2;20880:18;;;22523:19;9164:34;22563:14;;;9144:55;-1:-1;;;9219:12;;;9212:34;9265:12;;;20866:245::o;21118:323::-;9537:23;;12430:37;;9708:4;9697:16;;9691:23;21295:3;21280:19;;;26715:1;26705:12;;26695:2;;26721:9;26695:2;9708:4;9775:14;;3854:57;9871:4;9860:16;;;9854:23;9931:14;;;12430:37;10030:4;10019:16;;;10013:23;10090:14;;;12430:37;10185:4;10174:16;;;10168:23;-1:-1;;;;;22666:54;10245:14;;;2714:37;22677:42;10330:16;;;10324:23;;10353:72;;10410:14;;10324:23;10353:72;:::i;:::-;-1:-1;10512:4;10501:16;;;10495:23;23314:13;23307:21;10566:14;;;;2938:34;21266:175;:::o;21448:325::-;10861:23;;12430:37;;11100:4;11089:16;;11083:23;21626:3;21611:19;;;22815:4;22804:16;26715:1;26705:12;;26695:2;;26721:9;26695:2;11266:4;11257:14;;3854:57;11340:4;11329:16;;11323:23;11490:4;11481:14;;12430:37;26715:1;11556:16;;11550:23;11717:4;11708:14;;12430:37;11790:4;11779:16;;11773:23;11883:63;11940:4;11931:14;;-1:-1;;;;;22666:54;;11883:63;:::i;:::-;12083:72;26494:3;12144;12140:14;22815:4;12067:9;26494:3;26490:15;22804:16;12083:72;:::i;:::-;12284:57;12335:4;12330:3;12326:14;22815:4;12268:9;26608:3;26604:15;22804:16;12284:57;:::i;21780:222::-;12430:37;;;21907:2;21892:18;;21878:124::o;25038:268::-;25103:1;25110:101;25124:6;25121:1;25118:13;25110:101;;;25191:11;;;25185:18;25172:11;;;25165:39;25146:2;25139:10;25110:101;;;25226:6;25223:1;25220:13;25217:2;;;-1:-1;;25103:1;25273:16;;25266:27;25087:219::o;26853:117::-;-1:-1;;;;;22666:54;;26912:35;;26902:2;;26961:1;;26951:12;26902:2;26896:74;:::o

Swarm Source

ipfs://8ce621ba9900f63bfc5e568a8e4ac28e16799fc698f940696a15b98ba5e94888
Block Transaction Gas Used Reward
Age Block Fee Address Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading