Contract 0x7cde7125dc83c0b5d1196b2ed5944c0bbe0c8381

Txn Hash Method
Block
From
To
Value [Txn Fee]
0x355d27fc3d6198d59c67d25cc88404a43d656fefd920b64c69ecc166eb5c10f4Withdraw93577022021-10-23 5:31:073 mins ago0x4c9d56c1713fa4262fd84069d701d7c01f799f79 IN  0x7cde7125dc83c0b5d1196b2ed5944c0bbe0c83810 HT0.000059109752.25
0x21b7b2c1121d96671515271378133cb275d77c438fb3cec48b15da68a121c58aWithdraw93577002021-10-23 5:31:013 mins ago0x4c9d56c1713fa4262fd84069d701d7c01f799f79 IN  0x7cde7125dc83c0b5d1196b2ed5944c0bbe0c83810 HT0.00024952052.25
0x867942a838f62cbe17d96b548558edce5217d7b9d014892b65bae207003b7c40Withdraw93575832021-10-23 5:25:109 mins ago0x507d1fbcd9b126979616b6564825459ca7c9cb37 IN  0x7cde7125dc83c0b5d1196b2ed5944c0bbe0c83810 HT0.000184119752.25
0x365cc0a1cfb16119de74bc0f0776a85e7d670502cba3b12f3a1e62f069095a2dWithdraw93573242021-10-23 5:12:1322 mins ago0x20e3b8a476b4ff8bf7bdb3b44aa72db197752b61 IN  0x7cde7125dc83c0b5d1196b2ed5944c0bbe0c83810 HT0.000180461252.25
0xad56afd3c21126459ea5f70369adbed14a4ff2c684b66f7b21cede7063b38352Deposit93572962021-10-23 5:10:4923 mins ago0x20e3b8a476b4ff8bf7bdb3b44aa72db197752b61 IN  0x7cde7125dc83c0b5d1196b2ed5944c0bbe0c83810 HT0.00020704052.25
0x4404fef91cf9b04e6cb56ca9e9cf099ef235c085ac342b2fa24d24f034ddcf5bWithdraw93572832021-10-23 5:10:1024 mins ago0x20e3b8a476b4ff8bf7bdb3b44aa72db197752b61 IN  0x7cde7125dc83c0b5d1196b2ed5944c0bbe0c83810 HT0.00024630752.25
0x60d72d116eaa6e4c5005c95c040dcc122a03b742bca1a12572fe88fe07fbfcc4Withdraw93569902021-10-23 4:55:3139 mins ago0xe931b4050da48f09368732a16a9a5cc5d91331d1 IN  0x7cde7125dc83c0b5d1196b2ed5944c0bbe0c83810 HT0.000187359752.25
0x6bad477ea05d8eddd80bf29892fd04fa43a73e6d4f9dba86bc5486a97b394b1aWithdraw93568852021-10-23 4:50:1644 mins ago0x33f3ff4c119d83768e811d91647d51adb61e5a00 IN  0x7cde7125dc83c0b5d1196b2ed5944c0bbe0c83810 HT0.000059136752.25
0xbed4f45b6d5a064a69bbccd489929e1320098dae410cc26b518cd61dca6d1a22Withdraw93568782021-10-23 4:49:5544 mins ago0x33f3ff4c119d83768e811d91647d51adb61e5a00 IN  0x7cde7125dc83c0b5d1196b2ed5944c0bbe0c83810 HT0.0001587062.25
0xa71447eb895e23acbea6fc18553acc9462e7a4ecf05325803b97d50112b6d185Withdraw93568452021-10-23 4:48:1646 mins ago0xdcd846900407e9be13505fddd673791b17dc656c IN  0x7cde7125dc83c0b5d1196b2ed5944c0bbe0c83810 HT0.0002116083
0x52b64f1bb429ffb4e4493c9032a19d0aa3cc11b649d1740d5456f6057d0f4b81Withdraw93568312021-10-23 4:47:3447 mins ago0xdcd846900407e9be13505fddd673791b17dc656c IN  0x7cde7125dc83c0b5d1196b2ed5944c0bbe0c83810 HT0.000328413
0x0442437c5f814b7d65070efd4bc35a13011b7b14775c4e4f8108f521200ebe7dWithdraw93567752021-10-23 4:44:4649 mins ago0x0c80a92bf6f50c437a2abaa793c57e4021ff1e66 IN  0x7cde7125dc83c0b5d1196b2ed5944c0bbe0c83810 HT0.00024957452.25
0xb267ab1a8a92cb7161ccd0f75582151b39cbeb8f46506ab906929833dc4763f3Withdraw93567202021-10-23 4:42:0152 mins ago0x56aab5ec7ea427166e27ba7ebb14befd3ee5f016 IN  0x7cde7125dc83c0b5d1196b2ed5944c0bbe0c83810 HT0.00020820752.5
0xee8c0db836088948e9b15cb2da799d5dfeabe8a0eba9282186abd81634b98b70Withdraw93566012021-10-23 4:36:0458 mins ago0x67659c1a9736ae5b47d72cf842cb82e187eb2f4b IN  0x7cde7125dc83c0b5d1196b2ed5944c0bbe0c83810 HT0.0001587332.25
0xe6f23026ed5acf55fcb70602c5a5b661f8c3804cf81e1ca496c767276074fd23Withdraw93565882021-10-23 4:35:2559 mins ago0x67659c1a9736ae5b47d72cf842cb82e187eb2f4b IN  0x7cde7125dc83c0b5d1196b2ed5944c0bbe0c83810 HT0.00024630752.25
0x46e70a38624d578a704a3cae8439dbdbeee48a0722599062c9d5547c148e4f6bWithdraw93562952021-10-23 4:20:461 hr 13 mins ago0x4cc178b73170ca6898dbd6f8b791ab6b3e451bb9 IN  0x7cde7125dc83c0b5d1196b2ed5944c0bbe0c83810 HT0.000187413752.25
0x975d3b9767e87bcb4c2ea2d39de7d56745811398806c1e35056305a1596f216bWithdraw93562562021-10-23 4:18:491 hr 15 mins ago0xd93be993fc0d237d1fdcf7913b8c532e5f2a686e IN  0x7cde7125dc83c0b5d1196b2ed5944c0bbe0c83810 HT0.000271275752.25
0x7ba67264caf0453e52bf7be395b3b6d35525d8cdd2e82ff7dd551824b4e7c97cWithdraw93561532021-10-23 4:13:401 hr 21 mins ago0x33f3ff4c119d83768e811d91647d51adb61e5a00 IN  0x7cde7125dc83c0b5d1196b2ed5944c0bbe0c83810 HT0.00024630752.25
0xa1ffdef4df0264d941d5712b2751925fd9023ae0d30827cbc75432e041db9377Withdraw93559052021-10-23 4:01:161 hr 33 mins ago0x78845f6d295991fddd3bd6c2af29ea2677e5c6c6 IN  0x7cde7125dc83c0b5d1196b2ed5944c0bbe0c83810 HT0.0001587332.25
0x428d7b5c316df55f8f7058f2030fa5d5cc46eae51c424ff64ab142786183e6e9Withdraw93558982021-10-23 4:00:551 hr 33 mins ago0x78845f6d295991fddd3bd6c2af29ea2677e5c6c6 IN  0x7cde7125dc83c0b5d1196b2ed5944c0bbe0c83810 HT0.00024630752.25
0x3ceb19a8036adfc638e3d2402402d31632051ba53cc4b346f330282720135787Deposit93552702021-10-23 3:29:312 hrs 5 mins ago0xb0b5aed1fcb596d426a04800e1b86d4861bd7246 IN  0x7cde7125dc83c0b5d1196b2ed5944c0bbe0c83810 HT0.0002978552.25
0x3df974539d6d8e9259f806fdd5db1fbef73940e1213b478bb8dfa55b5a9b55d5Deposit93532482021-10-23 1:48:253 hrs 46 mins ago0xa2b4b9abbc7486e297f28b1beb5f7ced0f0010f5 IN  0x7cde7125dc83c0b5d1196b2ed5944c0bbe0c83810 HT0.00020701352.25
0xcf7a59aa6c6aed3210a3070f4c1a5514f46b4f9ad834dd83afe8bb3fdee7c370Withdraw93532382021-10-23 1:47:553 hrs 46 mins ago0xa2b4b9abbc7486e297f28b1beb5f7ced0f0010f5 IN  0x7cde7125dc83c0b5d1196b2ed5944c0bbe0c83810 HT0.00024630752.25
0x3bcf895d439b86fc3e95dcc1cd2ce21870399e5645d18e545e464590e7f9682cWithdraw93526352021-10-23 1:17:464 hrs 16 mins ago0x76b132da022fdafdf6a0a3b08099f64fb9d2f7b0 IN  0x7cde7125dc83c0b5d1196b2ed5944c0bbe0c83810 HT0.00020820752.5
0xb56cd7ff6d6daf34d71bd94691c835addbb3144eea3c3300467adeb1041deeb1Withdraw93523552021-10-23 1:03:464 hrs 30 mins ago0x433ce07d71b5ec3f73b78d8cba298e74be1786b0 IN  0x7cde7125dc83c0b5d1196b2ed5944c0bbe0c83810 HT0.00024630752.25
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
HogtUpperLimitStaked

Compiler Version
v0.7.6+commit.7338295f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at hecoinfo.com on 2021-05-15
*/

// SPDX-License-Identifier: MIT
pragma solidity >=0.7.0;

library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        uint256 c = a + b;
        if (c < a) return (false, 0);
        return (true, c);
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b > a) return (false, 0);
        return (true, a - b);
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, 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 (true, 0);
        uint256 c = a * b;
        if (c / a != b) return (false, 0);
        return (true, c);
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b == 0) return (false, 0);
        return (true, a / b);
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b == 0) return (false, 0);
        return (true, a % b);
    }

    /**
     * @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) {
        require(b <= a, "SafeMath: subtraction overflow");
        return a - b;
    }

    /**
     * @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) {
        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, reverting 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) {
        require(b > 0, "SafeMath: division by zero");
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting 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) {
        require(b > 0, "SafeMath: modulo by zero");
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * 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);
        return a - b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryDiv}.
     *
     * 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);
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * 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;
    }
}

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 on 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");
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: value }(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
        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);
            }
        }
    }
}

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

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

interface IFarmPool {
    function pending(uint pid, address user) external view returns (uint);

    function deposit(uint pid, uint amount) external;

    function withdraw(uint pid, uint amount) external;

    function emergencyWithdraw(uint pid) external;
}
interface IHogt is IERC20 {
    function mint(address to, uint amount) external returns (bool);
}
interface IYogt is IERC20 {
    function mint(address to, uint amount) external returns (bool);
    function getInviter(address invitee) external returns (bool, address);
    function getInviterByIndex(uint idx) external returns (address, address);
    function inviteeLength() external returns (uint);
}
abstract 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 () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual 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;
    }
}

contract HogtUpperLimitStaked is Ownable {
    using SafeMath for uint;
    using SafeERC20 for IERC20;
    using SafeERC20 for IHogt;

    // Info of each user.
    struct UserInfo {
        uint shares;     // How many LP tokens the user has provided.
        uint rewardDebt; // Reward debt.
    }

    // Info of each pool.
    struct PoolInfo {
        uint allocPoint;      // How many allocation points assigned to this pool. HOGTs to distribute per block.
        uint lastRewardBlock; // Last block number that HOGTs distribution occurs.
        uint accHogtPerShare; // Accumulated HOGTs per share, times 1e12.
        uint totalAmount;     // Total amount of current pool deposit.
    }

    // The HOGT Token!
    IHogt public hogt;
    // The YHOGT Token!
    IYogt public yhogt;
    // HOGT tokens created per block.
    uint public hogtPerBlock;
    // Info of each pool.
    PoolInfo[] public poolInfo;
    // Info of each user that stakes LP tokens.
    mapping(uint => mapping(address => UserInfo)) public userInfo;
    // Control mining
    bool public paused = false;
    // Total allocation points. Must be the sum of all allocation points in all pools.
    uint public totalAllocPoint = 0;
    // The block number when HOGT mining starts.
    uint public startBlock;
    // How many blocks are grown
    uint public grownPeriod = 28800;
    uint public totalMaxSupply = 500000000e18;

    // Upper Limit
    uint private upperLimit = 20000000e18;
    uint private lastPeriod = 0;

    event Deposit(address indexed user, uint indexed pid, uint amount);
    event Withdraw(address indexed user, uint indexed pid, uint amount);
    event EmergencyWithdraw(address indexed user, uint indexed pid, uint amount);

    constructor(
        IHogt _hogt,
        IYogt _yhogt,
        uint _hogtPerBlock,
        uint _startBlock
    ) {
        hogt = _hogt;
        yhogt = _yhogt;
        hogtPerBlock = _hogtPerBlock;
        startBlock = _startBlock;
    }

    function setGrownPeriod(uint _block) public onlyOwner {
        grownPeriod = _block;
    }

    function setUpperLimit(uint _amount) public onlyOwner {
        upperLimit = _amount;
    }

    function getUpperLimit(uint blockNumber) public view returns (uint) {
        uint _phase = phase(blockNumber);
        uint _last =lastPeriod;
        uint _ret = upperLimit;

        // protect uint256(101 ** _phase) overflow
        while (_last < _phase) {
            _last++;
            _ret = _ret.add(_ret.mul(100).div(10000));
        }

        return _ret;
    }

    // Set the number of hogt produced by each block
    function setHogtPerBlock(uint _newPerBlock) public onlyOwner {
        massUpdatePools();
        hogtPerBlock = _newPerBlock;
    }

    function poolLength() public view returns (uint) {
        return poolInfo.length;
    }

    function setPause() public onlyOwner {
        paused = !paused;
    }

    // Deposit HOGT mint HOGT
    // XXX ONLY ADD ONCE.
    function add(uint _allocPoint, bool _withUpdate) public onlyOwner {
        if (_withUpdate) {
            massUpdatePools();
        }
        uint lastRewardBlock = block.number > startBlock ? block.number : startBlock;
        totalAllocPoint = totalAllocPoint.add(_allocPoint);
        poolInfo.push(PoolInfo({
            allocPoint : _allocPoint,
            lastRewardBlock : lastRewardBlock,
            accHogtPerShare : 0,
            totalAmount : 0
        }));
    }

    function phase(uint blockNumber) public view returns (uint) {
        if (grownPeriod == 0) {
            return 0;
        }
        if (blockNumber > startBlock) {
            return (blockNumber.sub(startBlock).sub(1)).div(grownPeriod);
        }
        return 0;
    }

    function refreshUpperLimit() internal {
        uint _phase = phase(block.number);

        // protect uint256(101 ** _phase) overflow
        while (lastPeriod < _phase) {
            lastPeriod++;
            upperLimit = upperLimit.add(upperLimit.mul(100).div(10000));
        }
    }

    function getHogtBlockReward(uint _lastRewardBlock) public view returns (uint) {
        uint blockReward = 0;
        if (block.number > _lastRewardBlock) {
            blockReward = blockReward.add(block.number.sub(_lastRewardBlock).mul(hogtPerBlock));
        }
        return blockReward;
    }

    // Update reward variables for all pools. Be careful of gas spending!
    function massUpdatePools() public {
        uint length = poolInfo.length;
        for (uint pid = 0; pid < length; ++pid) {
            updatePool(pid);
        }
    }

    // Update reward variables of the given pool to be up-to-date.
    function updatePool(uint _pid) public {
        PoolInfo storage pool = poolInfo[_pid];
        if (block.number <= pool.lastRewardBlock) {
            return;
        }

        uint hSupply = pool.totalAmount;
        if (hSupply == 0) {
            pool.lastRewardBlock = block.number;
            return;
        }

        uint hogtSuppy = hogt.totalSupply();
        if (hogtSuppy >= totalMaxSupply) {
            pool.lastRewardBlock = block.number;
            return;
        }

        uint blockReward = getHogtBlockReward(pool.lastRewardBlock);
        if (blockReward <= 0) {
            return;
        }

        // Mint HOGT
        uint hogtReward = blockReward.mul(pool.allocPoint).div(totalAllocPoint);
        if (hogtSuppy.add(hogtReward) > totalMaxSupply) {
            hogtReward = totalMaxSupply.sub(hogtSuppy);
        }

        bool minRet = hogt.mint(address(this), hogtReward);
        if (minRet) {
            pool.accHogtPerShare = pool.accHogtPerShare.add(hogtReward.mul(1e12).div(hSupply));

            // Mint YHOGT
            yhogt.mint(address(this), hogtReward);
        }
        pool.lastRewardBlock = block.number;
    }

    // View function to see pending HOGTs on frontend.
    function pending(uint _pid, address _user) external view returns (uint) {
        PoolInfo storage pool = poolInfo[_pid];
        UserInfo storage user = userInfo[_pid][_user];
        uint accHogtPerShare = pool.accHogtPerShare;
        uint hSupply = pool.totalAmount;

        if (user.shares > 0) {
            if (block.number > pool.lastRewardBlock) {
                uint blockReward = getHogtBlockReward(pool.lastRewardBlock);
                uint hogtReward = blockReward.mul(pool.allocPoint).div(totalAllocPoint);
                accHogtPerShare = accHogtPerShare.add(hogtReward.mul(1e12).div(hSupply));
                return user.shares.mul(accHogtPerShare).div(1e12).sub(user.rewardDebt);
            }
            if (block.number == pool.lastRewardBlock) {
                return user.shares.mul(accHogtPerShare).div(1e12).sub(user.rewardDebt);
            }
        }
        return 0;
    }

    // Deposit LP tokens to StakedPool for HOGT allocation.
    function deposit(uint _pid, uint _amount) public notPause {
        address _user = msg.sender;
        PoolInfo storage pool = poolInfo[_pid];
        UserInfo storage user = userInfo[_pid][_user];

        refreshUpperLimit();
        updatePool(_pid);

        if (user.shares > 0) {
            uint pendingAmount = user.shares.mul(pool.accHogtPerShare).div(1e12).sub(user.rewardDebt);
            if (pendingAmount > 0) {
                safeHogtTransfer(_user, pendingAmount);
            }
        }
        if (_amount > 0) {
            hogt.safeTransferFrom(_user, address(this), _amount);
            user.shares = user.shares.add(_amount);
            pool.totalAmount = pool.totalAmount.add(_amount);
            require(pool.totalAmount <= upperLimit, "over upper limit");
        }
        user.rewardDebt = user.shares.mul(pool.accHogtPerShare).div(1e12);
        emit Deposit(_user, _pid, _amount);
    }

    // Withdraw LP tokens from StakedPool.
    function withdraw(uint _pid, uint _amount) public {
        address _user = msg.sender;
        PoolInfo storage pool = poolInfo[_pid];
        UserInfo storage user = userInfo[_pid][_user];

        require(user.shares >= _amount, "withdraw: not good");

        refreshUpperLimit();
        updatePool(_pid);

        uint pendingAmount = user.shares.mul(pool.accHogtPerShare).div(1e12).sub(user.rewardDebt);
        if (pendingAmount > 0) {
            safeHogtTransfer(_user, pendingAmount);
        }
        if (_amount > 0) {
            user.shares = user.shares.sub(_amount);
            pool.totalAmount = pool.totalAmount.sub(_amount);
            hogt.safeTransfer(_user, _amount);
        }
        user.rewardDebt = user.shares.mul(pool.accHogtPerShare).div(1e12);
        emit Withdraw(_user, _pid, _amount);
    }

    // Withdraw without caring about rewards. EMERGENCY ONLY.
    function emergencyWithdraw(uint _pid) public {
        address _user = msg.sender;
        PoolInfo storage pool = poolInfo[_pid];
        UserInfo storage user = userInfo[_pid][_user];
        uint amount = user.shares;
        user.shares = 0;
        user.rewardDebt = 0;
        hogt.safeTransfer(_user, amount);
        pool.totalAmount = pool.totalAmount.sub(amount);
        emit EmergencyWithdraw(_user, _pid, amount);
    }

    // Safe HOGT transfer function, just in case if rounding error causes pool to not have enough HOGTs.
    function safeHogtTransfer(address _to, uint _amount) internal {
        uint hogtBal = hogt.balanceOf(address(this));
        if (_amount > hogtBal) {
            hogt.transfer(_to, hogtBal);
        } else {
            hogt.transfer(_to, _amount);
        }

        // 1. Inviter = 70% YHOGT
        // 2. Invitee = 30% YHOGT
        (bool hasInviter, address inviter) = yhogt.getInviter(_to);
        if (hasInviter) {
            uint yBal = yhogt.balanceOf(address(this));
            if (_amount > yBal) {
                _amount = yBal;
            }

            uint y70 = _amount.mul(700).div(1e3);
            yhogt.transfer(inviter, y70);
            yhogt.transfer(_to, _amount.sub(y70));
        }
    }

    modifier notPause() {
        require(paused == false, "Mining has been suspended");
        _;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"contract IHogt","name":"_hogt","type":"address"},{"internalType":"contract IYogt","name":"_yhogt","type":"address"},{"internalType":"uint256","name":"_hogtPerBlock","type":"uint256"},{"internalType":"uint256","name":"_startBlock","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EmergencyWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"bool","name":"_withUpdate","type":"bool"}],"name":"add","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_lastRewardBlock","type":"uint256"}],"name":"getHogtBlockReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"getUpperLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"grownPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hogt","outputs":[{"internalType":"contract IHogt","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hogtPerBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"massUpdatePools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"_user","type":"address"}],"name":"pending","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"phase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"poolInfo","outputs":[{"internalType":"uint256","name":"allocPoint","type":"uint256"},{"internalType":"uint256","name":"lastRewardBlock","type":"uint256"},{"internalType":"uint256","name":"accHogtPerShare","type":"uint256"},{"internalType":"uint256","name":"totalAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_block","type":"uint256"}],"name":"setGrownPeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPerBlock","type":"uint256"}],"name":"setHogtPerBlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setPause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setUpperLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalAllocPoint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalMaxSupply","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":"uint256","name":"_pid","type":"uint256"}],"name":"updatePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"userInfo","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"uint256","name":"rewardDebt","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"yhogt","outputs":[{"internalType":"contract IYogt","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

60806040526006805460ff19169055600060078190556170806009556b019d971e4fe8401e74000000600a556a108b2a2c28029094000000600b55600c5534801561004957600080fd5b50604051611dbe380380611dbe8339818101604052608081101561006c57600080fd5b5080516020820151604083015160609093015191929091600061008d610115565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600180546001600160a01b039586166001600160a01b0319918216179091556002805494909516931692909217909255600391909155600855610119565b3390565b611c96806101286000396000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c8063630b5ba1116100f9578063a7d4ed1f11610097578063e2bbb15811610071578063e2bbb15814610410578063e4c75c2714610433578063e97e8c9c1461045f578063f2fde38b1461047c576101c4565b8063a7d4ed1f146103c6578063d431b1ac146103eb578063d54d4e02146103f3576101c4565b806393f1a40b116100d357806393f1a40b14610354578063983be3a314610399578063a0617ad0146103b6578063a5ff63d8146103be576101c4565b8063630b5ba11461033c578063715018a6146103445780638da5cb5b1461034c576101c4565b8063355f0a5e1161016657806351e5255e1161014057806351e5255e146102de57806351eb05a6146102e65780635312ea8e146103035780635c975abb14610320576101c4565b8063355f0a5e146102ab578063441a3e70146102b357806348cd4cb1146102d6576101c4565b80631526fe27116101a25780631526fe271461021f57806317caf6f1146102625780631800ee251461026a5780632ffa616614610287576101c4565b8063081e3eda146101c95780630e256ef9146101e3578063135f8aa714610202575b600080fd5b6101d16104a2565b60408051918252519081900360200190f35b610200600480360360208110156101f957600080fd5b50356104a8565b005b6101d16004803603602081101561021857600080fd5b503561050f565b61023c6004803603602081101561023557600080fd5b503561056a565b604080519485526020850193909352838301919091526060830152519081900360800190f35b6101d16105a4565b6102006004803603602081101561028057600080fd5b50356105aa565b61028f610619565b604080516001600160a01b039092168252519081900360200190f35b6101d1610628565b610200600480360360408110156102c957600080fd5b508035906020013561062e565b6101d16107b6565b6101d16107bc565b610200600480360360208110156102fc57600080fd5b50356107c2565b6102006004803603602081101561031957600080fd5b5035610a36565b610328610af4565b604080519115158252519081900360200190f35b610200610afd565b610200610b20565b61028f610bcc565b6103806004803603604081101561036a57600080fd5b50803590602001356001600160a01b0316610bdb565b6040805192835260208301919091528051918290030190f35b6101d1600480360360208110156103af57600080fd5b5035610bff565b6101d1610c35565b61028f610c3b565b610200600480360360408110156103dc57600080fd5b50803590602001351515610c4a565b610200610db9565b6102006004803603602081101561040957600080fd5b5035610e2f565b6102006004803603604081101561042657600080fd5b5080359060200135610e96565b6101d16004803603604081101561044957600080fd5b50803590602001356001600160a01b031661107f565b6101d16004803603602081101561047557600080fd5b50356111b3565b6102006004803603602081101561049257600080fd5b50356001600160a01b03166111fb565b60045490565b6104b06112fd565b6001600160a01b03166104c1610bcc565b6001600160a01b03161461050a576040805162461bcd60e51b81526020600482018190526024820152600080516020611c17833981519152604482015290519081900360640190fd5b600955565b60006009546000141561052457506000610565565b6008548211156105615761055a600954610554600161054e6008548761130190919063ffffffff16565b90611301565b9061135e565b9050610565565b5060005b919050565b6004818154811061057a57600080fd5b60009182526020909120600490910201805460018201546002830154600390930154919350919084565b60075481565b6105b26112fd565b6001600160a01b03166105c3610bcc565b6001600160a01b03161461060c576040805162461bcd60e51b81526020600482018190526024820152600080516020611c17833981519152604482015290519081900360640190fd5b610614610afd565b600355565b6002546001600160a01b031681565b60095481565b600033905060006004848154811061064257fe5b600091825260208083208784526005825260408085206001600160a01b038816865290925292208054600490920290920192508411156106be576040805162461bcd60e51b81526020600482015260126024820152711dda5d1a191c985dce881b9bdd0819dbdbd960721b604482015290519081900360640190fd5b6106c66113c5565b6106cf856107c2565b60006106fd826001015461054e64e8d4a510006105548760020154876000015461141190919063ffffffff16565b9050801561070f5761070f8482611471565b841561074e5781546107219086611301565b825560038301546107329086611301565b600384015560015461074e906001600160a01b0316858761183e565b600283015482546107699164e8d4a510009161055491611411565b600183015560408051868152905187916001600160a01b038716917ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b5689181900360200190a3505050505050565b60085481565b60035481565b6000600482815481106107d157fe5b90600052602060002090600402019050806001015443116107f25750610a33565b600381015480610809575043600190910155610a33565b600154604080516318160ddd60e01b815290516000926001600160a01b0316916318160ddd916004808301926020929190829003018186803b15801561084e57600080fd5b505afa158015610862573d6000803e3d6000fd5b505050506040513d602081101561087857600080fd5b5051600a54909150811061089457505043600190910155610a33565b60006108a38460010154610bff565b9050600081116108b65750505050610a33565b60075484546000916108cd91610554908590611411565b600a549091506108dd8483611895565b11156108f357600a546108f09084611301565b90505b600154604080516340c10f1960e01b81523060048201526024810184905290516000926001600160a01b0316916340c10f1991604480830192602092919082900301818787803b15801561094657600080fd5b505af115801561095a573d6000803e3d6000fd5b505050506040513d602081101561097057600080fd5b505190508015610a235761099b610990866105548564e8d4a51000611411565b600288015490611895565b60028088019190915554604080516340c10f1960e01b81523060048201526024810185905290516001600160a01b03909216916340c10f19916044808201926020929091908290030181600087803b1580156109f657600080fd5b505af1158015610a0a573d6000803e3d6000fd5b505050506040513d6020811015610a2057600080fd5b50505b4386600101819055505050505050505b50565b6000339050600060048381548110610a4a57fe5b600091825260208083208684526005825260408085206001600160a01b0380891687529352842080548582556001808301969096559454600490940290910194509291610a999116858361183e565b6003830154610aa89082611301565b600384015560408051828152905186916001600160a01b038716917fbb757047c2b5f3974fe26b7c10f732e7bce710b0952a71082702781e62ae05959181900360200190a35050505050565b60065460ff1681565b60045460005b81811015610b1c57610b14816107c2565b600101610b03565b5050565b610b286112fd565b6001600160a01b0316610b39610bcc565b6001600160a01b031614610b82576040805162461bcd60e51b81526020600482018190526024820152600080516020611c17833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031690565b60056020908152600092835260408084209091529082529020805460019091015482565b60008043831015610c2f57600354610c2c90610c2590610c1f4387611301565b90611411565b8290611895565b90505b92915050565b600a5481565b6001546001600160a01b031681565b610c526112fd565b6001600160a01b0316610c63610bcc565b6001600160a01b031614610cac576040805162461bcd60e51b81526020600482018190526024820152600080516020611c17833981519152604482015290519081900360640190fd5b8015610cba57610cba610afd565b60006008544311610ccd57600854610ccf565b435b600754909150610cdf9084611895565b600755604080516080810182529384526020840191825260009084018181526060850182815260048054600181018255938190529551929095027f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b81019290925591517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19c82015590517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19d82015591517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19e9092019190915550565b610dc16112fd565b6001600160a01b0316610dd2610bcc565b6001600160a01b031614610e1b576040805162461bcd60e51b81526020600482018190526024820152600080516020611c17833981519152604482015290519081900360640190fd5b6006805460ff19811660ff90911615179055565b610e376112fd565b6001600160a01b0316610e48610bcc565b6001600160a01b031614610e91576040805162461bcd60e51b81526020600482018190526024820152600080516020611c17833981519152604482015290519081900360640190fd5b600b55565b60065460ff1615610eee576040805162461bcd60e51b815260206004820152601960248201527f4d696e696e6720686173206265656e2073757370656e64656400000000000000604482015290519081900360640190fd5b6000339050600060048481548110610f0257fe5b600091825260208083208784526005825260408085206001600160a01b0388168652909252922060049091029091019150610f3b6113c5565b610f44856107c2565b805415610f8d576000610f79826001015461054e64e8d4a510006105548760020154876000015461141190919063ffffffff16565b90508015610f8b57610f8b8482611471565b505b831561101857600154610fab906001600160a01b03168430876118ef565b8054610fb79085611895565b81556003820154610fc89085611895565b60038301819055600b541015611018576040805162461bcd60e51b815260206004820152601060248201526f1bdd995c881d5c1c195c881b1a5b5a5d60821b604482015290519081900360640190fd5b600282015481546110339164e8d4a510009161055491611411565b600182015560408051858152905186916001600160a01b038616917f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a159181900360200190a35050505050565b6000806004848154811061108f57fe5b600091825260208083208784526005825260408085206001600160a01b038916865290925292206002600490920290920190810154600382015483549294509091156111a65783600101544311156111675760006110f08560010154610bff565b9050600061111160075461055488600001548561141190919063ffffffff16565b9050611130611129846105548464e8d4a51000611411565b8590611895565b935061115a856001015461054e64e8d4a51000610554888a6000015461141190919063ffffffff16565b9650505050505050610c2f565b83600101544314156111a65761119b836001015461054e64e8d4a5100061055486886000015461141190919063ffffffff16565b945050505050610c2f565b5060009695505050505050565b6000806111bf8361050f565b600c54600b54919250905b828210156111f3576001909101906111ec610c25612710610554846064611411565b90506111ca565b949350505050565b6112036112fd565b6001600160a01b0316611214610bcc565b6001600160a01b03161461125d576040805162461bcd60e51b81526020600482018190526024820152600080516020611c17833981519152604482015290519081900360640190fd5b6001600160a01b0381166112a25760405162461bcd60e51b8152600401808060200182810382526026815260200180611bd06026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3390565b600082821115611358576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b60008082116113b4576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b8183816113bd57fe5b049392505050565b60006113d04361050f565b90505b80600c541015610a3357600c80546001019055600b54611409906114009061271090610554906064611411565b600b5490611895565b600b556113d3565b60008261142057506000610c2f565b8282028284828161142d57fe5b041461146a5760405162461bcd60e51b8152600401808060200182810382526021815260200180611bf66021913960400191505060405180910390fd5b9392505050565b600154604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b1580156114bc57600080fd5b505afa1580156114d0573d6000803e3d6000fd5b505050506040513d60208110156114e657600080fd5b505190508082111561157a576001546040805163a9059cbb60e01b81526001600160a01b038681166004830152602482018590529151919092169163a9059cbb9160448083019260209291908290030181600087803b15801561154857600080fd5b505af115801561155c573d6000803e3d6000fd5b505050506040513d602081101561157257600080fd5b506115fd9050565b6001546040805163a9059cbb60e01b81526001600160a01b038681166004830152602482018690529151919092169163a9059cbb9160448083019260209291908290030181600087803b1580156115d057600080fd5b505af11580156115e4573d6000803e3d6000fd5b505050506040513d60208110156115fa57600080fd5b50505b6002546040805163d216ce6f60e01b81526001600160a01b0386811660048301528251600094859492169263d216ce6f92602480830193919282900301818787803b15801561164b57600080fd5b505af115801561165f573d6000803e3d6000fd5b505050506040513d604081101561167557600080fd5b5080516020909101519092509050811561183757600254604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b1580156116d457600080fd5b505afa1580156116e8573d6000803e3d6000fd5b505050506040513d60208110156116fe57600080fd5b505190508085111561170e578094505b60006117226103e8610554886102bc611411565b6002546040805163a9059cbb60e01b81526001600160a01b03878116600483015260248201859052915193945091169163a9059cbb916044808201926020929091908290030181600087803b15801561177a57600080fd5b505af115801561178e573d6000803e3d6000fd5b505050506040513d60208110156117a457600080fd5b50506002546001600160a01b031663a9059cbb886117c28985611301565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561180857600080fd5b505af115801561181c573d6000803e3d6000fd5b505050506040513d602081101561183257600080fd5b505050505b5050505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261189090849061194f565b505050565b60008282018381101561146a576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b17905261194990859061194f565b50505050565b60006119a4826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611a009092919063ffffffff16565b805190915015611890578080602001905160208110156119c357600080fd5b50516118905760405162461bcd60e51b815260040180806020018281038252602a815260200180611c37602a913960400191505060405180910390fd5b60606111f3848460008585611a1485611b25565b611a65576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b600080866001600160a01b031685876040518082805190602001908083835b60208310611aa35780518252601f199092019160209182019101611a84565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114611b05576040519150601f19603f3d011682016040523d82523d6000602084013e611b0a565b606091505b5091509150611b1a828286611b2b565b979650505050505050565b3b151590565b60608315611b3a57508161146a565b825115611b4a5782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611b94578181015183820152602001611b7c565b50505050905090810190601f168015611bc15780820380516001836020036101000a031916815260200191505b509250505060405180910390fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a26469706673582212200823ba9333bd239938566f79806e6d309b65dacd116c23b3d0b2ea3c89b22dca64736f6c63430007060033000000000000000000000000fc33785f44c1069010b5de466ee7657c27ab8a0e0000000000000000000000002bfbeea9fb5ab4d4fdc0375d286c36db564646af000000000000000000000000000000000000000000000000268ca62bed6b1c710000000000000000000000000000000000000000000000000000000000489398

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

000000000000000000000000fc33785f44c1069010b5de466ee7657c27ab8a0e0000000000000000000000002bfbeea9fb5ab4d4fdc0375d286c36db564646af000000000000000000000000000000000000000000000000268ca62bed6b1c710000000000000000000000000000000000000000000000000000000000489398

-----Decoded View---------------
Arg [0] : _hogt (address): 0xfc33785f44c1069010b5de466ee7657c27ab8a0e
Arg [1] : _yhogt (address): 0x2bfbeea9fb5ab4d4fdc0375d286c36db564646af
Arg [2] : _hogtPerBlock (uint256): 2777777777777777777
Arg [3] : _startBlock (uint256): 4756376

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000fc33785f44c1069010b5de466ee7657c27ab8a0e
Arg [1] : 0000000000000000000000002bfbeea9fb5ab4d4fdc0375d286c36db564646af
Arg [2] : 000000000000000000000000000000000000000000000000268ca62bed6b1c71
Arg [3] : 0000000000000000000000000000000000000000000000000000000000489398


Deployed ByteCode Sourcemap

23302:10380:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26135:90;;;:::i;:::-;;;;;;;;;;;;;;;;25342:93;;;;;;;;;;;;;;;;-1:-1:-1;25342:93:0;;:::i;:::-;;26870:281;;;;;;;;;;;;;;;;-1:-1:-1;26870:281:0;;:::i;24219:26::-;;;;;;;;;;;;;;;;-1:-1:-1;24219:26:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24513:31;;;:::i;25992:135::-;;;;;;;;;;;;;;;;-1:-1:-1;25992:135:0;;:::i;24097:18::-;;;:::i;:::-;;;;-1:-1:-1;;;;;24097:18:0;;;;;;;;;;;;;;24664:31;;;:::i;31351:850::-;;;;;;;;;;;;;;;;-1:-1:-1;31351:850:0;;;;;;;:::i;24601:22::-;;;:::i;24161:24::-;;;:::i;28098:1200::-;;;;;;;;;;;;;;;;-1:-1:-1;28098:1200:0;;:::i;32272:442::-;;;;;;;;;;;;;;;;-1:-1:-1;32272:442:0;;:::i;24392:26::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;27848:174;;;:::i;22748:148::-;;;:::i;22097:87::-;;;:::i;24301:61::-;;;;;;;;;;;;;;;;-1:-1:-1;24301:61:0;;;;;;-1:-1:-1;;;;;24301:61:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;27462:303;;;;;;;;;;;;;;;;-1:-1:-1;27462:303:0;;:::i;24702:41::-;;;:::i;24048:17::-;;;:::i;26371:491::-;;;;;;;;;;;;;;;;-1:-1:-1;26371:491:0;;;;;;;;;:::i;26233:72::-;;;:::i;25443:93::-;;;;;;;;;;;;;;;;-1:-1:-1;25443:93:0;;:::i;30356:943::-;;;;;;;;;;;;;;;;-1:-1:-1;30356:943:0;;;;;;;:::i;29362:925::-;;;;;;;;;;;;;;;;-1:-1:-1;29362:925:0;;;;;;-1:-1:-1;;;;;29362:925:0;;:::i;25544:386::-;;;;;;;;;;;;;;;;-1:-1:-1;25544:386:0;;:::i;23051:244::-;;;;;;;;;;;;;;;;-1:-1:-1;23051:244:0;-1:-1:-1;;;;;23051:244:0;;:::i;26135:90::-;26202:8;:15;26135:90;:::o;25342:93::-;22328:12;:10;:12::i;:::-;-1:-1:-1;;;;;22317:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;22317:23:0;;22309:68;;;;;-1:-1:-1;;;22309:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;22309:68:0;;;;;;;;;;;;;;;25407:11:::1;:20:::0;25342:93::o;26870:281::-;26924:4;26945:11;;26960:1;26945:16;26941:57;;;-1:-1:-1;26985:1:0;26978:8;;26941:57;27026:10;;27012:11;:24;27008:117;;;27060:53;27101:11;;27061:34;27093:1;27061:27;27077:10;;27061:11;:15;;:27;;;;:::i;:::-;:31;;:34::i;:::-;27060:40;;:53::i;:::-;27053:60;;;;27008:117;-1:-1:-1;27142:1:0;26870:281;;;;:::o;24219:26::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24219:26:0;;;:::o;24513:31::-;;;;:::o;25992:135::-;22328:12;:10;:12::i;:::-;-1:-1:-1;;;;;22317:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;22317:23:0;;22309:68;;;;;-1:-1:-1;;;22309:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;22309:68:0;;;;;;;;;;;;;;;26064:17:::1;:15;:17::i;:::-;26092:12;:27:::0;25992:135::o;24097:18::-;;;-1:-1:-1;;;;;24097:18:0;;:::o;24664:31::-;;;;:::o;31351:850::-;31412:13;31428:10;31412:26;;31449:21;31473:8;31482:4;31473:14;;;;;;;;;;;;;;;;31522;;;:8;:14;;;;;;-1:-1:-1;;;;;31522:21:0;;;;;;;;;31564:11;;31473:14;;;;;;;;-1:-1:-1;31564:22:0;-1:-1:-1;31564:22:0;31556:53;;;;;-1:-1:-1;;;31556:53:0;;;;;;;;;;;;-1:-1:-1;;;31556:53:0;;;;;;;;;;;;;;;31622:19;:17;:19::i;:::-;31652:16;31663:4;31652:10;:16::i;:::-;31681:18;31702:68;31754:4;:15;;;31702:47;31744:4;31702:37;31718:4;:20;;;31702:4;:11;;;:15;;:37;;;;:::i;:68::-;31681:89;-1:-1:-1;31785:17:0;;31781:88;;31819:38;31836:5;31843:13;31819:16;:38::i;:::-;31883:11;;31879:193;;31925:11;;:24;;31941:7;31925:15;:24::i;:::-;31911:38;;31983:16;;;;:29;;32004:7;31983:20;:29::i;:::-;31964:16;;;:48;32027:4;;:33;;-1:-1:-1;;;;;32027:4:0;32045:5;32052:7;32027:17;:33::i;:::-;32116:20;;;;32100:11;;:47;;32142:4;;32100:37;;:15;:37::i;:47::-;32082:15;;;:65;32163:30;;;;;;;;32179:4;;-1:-1:-1;;;;;32163:30:0;;;;;;;;;;;;31351:850;;;;;;:::o;24601:22::-;;;;:::o;24161:24::-;;;;:::o;28098:1200::-;28147:21;28171:8;28180:4;28171:14;;;;;;;;;;;;;;;;;;28147:38;;28216:4;:20;;;28200:12;:36;28196:75;;28253:7;;;28196:75;28298:16;;;;28329:12;28325:101;;-1:-1:-1;28381:12:0;28358:20;;;;:35;28408:7;;28325:101;28455:4;;:18;;;-1:-1:-1;;;28455:18:0;;;;28438:14;;-1:-1:-1;;;;;28455:4:0;;:16;;:18;;;;;;;;;;;;;;:4;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28455:18:0;28501:14;;28455:18;;-1:-1:-1;28488:27:0;;28484:116;;-1:-1:-1;;28555:12:0;28532:20;;;;:35;28582:7;;28484:116;28612:16;28631:40;28650:4;:20;;;28631:18;:40::i;:::-;28612:59;;28701:1;28686:11;:16;28682:55;;28719:7;;;;;;28682:55;28826:15;;28805;;28771;;28789:53;;:32;;:11;;:15;:32::i;:53::-;28885:14;;28771:71;;-1:-1:-1;28857:25:0;:9;28771:71;28857:13;:25::i;:::-;:42;28853:117;;;28929:14;;:29;;28948:9;28929:18;:29::i;:::-;28916:42;;28853:117;28996:4;;:36;;;-1:-1:-1;;;28996:36:0;;29014:4;28996:36;;;;;;;;;;;;28982:11;;-1:-1:-1;;;;;28996:4:0;;:9;;:36;;;;;;;;;;;;;;28982:11;28996:4;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28996:36:0;;-1:-1:-1;29043:202:0;;;;29093:59;29118:33;29143:7;29118:20;:10;29133:4;29118:14;:20::i;:33::-;29093:20;;;;;:24;:59::i;:::-;29070:20;;;;:82;;;;29196:5;:37;;;-1:-1:-1;;;29196:37:0;;29215:4;29196:37;;;;;;;;;;;;-1:-1:-1;;;;;29196:5:0;;;;:10;;:37;;;;;;;;;;;;;;;:5;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;29043:202:0;29278:12;29255:4;:20;;:35;;;;28098:1200;;;;;;;;:::o;32272:442::-;32328:13;32344:10;32328:26;;32365:21;32389:8;32398:4;32389:14;;;;;;;;;;;;;;;;32438;;;:8;:14;;;;;;-1:-1:-1;;;;;32438:21:0;;;;;;;;;32484:11;;32506:15;;;-1:-1:-1;32532:15:0;;;:19;;;;32562:4;;32389:14;;;;;;;;-1:-1:-1;32438:21:0;32484:11;32562:32;;:4;32453:5;32484:11;32562:17;:32::i;:::-;32624:16;;;;:28;;32645:6;32624:20;:28::i;:::-;32605:16;;;:47;32668:38;;;;;;;;32693:4;;-1:-1:-1;;;;;32668:38:0;;;;;;;;;;;;32272:442;;;;;:::o;24392:26::-;;;;;;:::o;27848:174::-;27907:8;:15;27893:11;27933:82;27958:6;27952:3;:12;27933:82;;;27988:15;27999:3;27988:10;:15::i;:::-;27966:5;;27933:82;;;;27848:174;:::o;22748:148::-;22328:12;:10;:12::i;:::-;-1:-1:-1;;;;;22317:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;22317:23:0;;22309:68;;;;;-1:-1:-1;;;22309:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;22309:68:0;;;;;;;;;;;;;;;22855:1:::1;22839:6:::0;;22818:40:::1;::::0;-1:-1:-1;;;;;22839:6:0;;::::1;::::0;22818:40:::1;::::0;22855:1;;22818:40:::1;22886:1;22869:19:::0;;-1:-1:-1;;;;;;22869:19:0::1;::::0;;22748:148::o;22097:87::-;22143:7;22170:6;-1:-1:-1;;;;;22170:6:0;22097:87;:::o;24301:61::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;27462:303::-;27534:4;;27586:12;:31;-1:-1:-1;27582:147:0;;;27703:12;;27648:69;;27664:52;;:34;:12;27681:16;27664;:34::i;:::-;:38;;:52::i;:::-;27648:11;;:15;:69::i;:::-;27634:83;;27582:147;27746:11;27462:303;-1:-1:-1;;27462:303:0:o;24702:41::-;;;;:::o;24048:17::-;;;-1:-1:-1;;;;;24048:17:0;;:::o;26371:491::-;22328:12;:10;:12::i;:::-;-1:-1:-1;;;;;22317:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;22317:23:0;;22309:68;;;;;-1:-1:-1;;;22309:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;22309:68:0;;;;;;;;;;;;;;;26452:11:::1;26448:61;;;26480:17;:15;:17::i;:::-;26519:20;26557:10;;26542:12;:25;:53;;26585:10;;26542:53;;;26570:12;26542:53;26624:15;::::0;26519:76;;-1:-1:-1;26624:32:0::1;::::0;26644:11;26624:19:::1;:32::i;:::-;26606:15;:50:::0;26681:172:::1;::::0;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;-1:-1:-1;26681:172:0;;;;;;;;;;;;26667:8:::1;:187:::0;;::::1;::::0;::::1;::::0;;;;;;;;;;;::::1;::::0;;::::1;::::0;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26371:491:0:o;26233:72::-;22328:12;:10;:12::i;:::-;-1:-1:-1;;;;;22317:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;22317:23:0;;22309:68;;;;;-1:-1:-1;;;22309:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;22309:68:0;;;;;;;;;;;;;;;26291:6:::1;::::0;;-1:-1:-1;;26281:16:0;::::1;26291:6;::::0;;::::1;26290:7;26281:16;::::0;;26233:72::o;25443:93::-;22328:12;:10;:12::i;:::-;-1:-1:-1;;;;;22317:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;22317:23:0;;22309:68;;;;;-1:-1:-1;;;22309:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;22309:68:0;;;;;;;;;;;;;;;25508:10:::1;:20:::0;25443:93::o;30356:943::-;33614:6;;;;:15;33606:53;;;;;-1:-1:-1;;;33606:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;30425:13:::1;30441:10;30425:26;;30462:21;30486:8;30495:4;30486:14;;;;;;;;;::::0;;;::::1;::::0;;;30535;;;:8:::1;:14:::0;;;;;;-1:-1:-1;;;;;30535:21:0;::::1;::::0;;;;;;;30486:14:::1;::::0;;::::1;::::0;;::::1;::::0;-1:-1:-1;30569:19:0::1;:17;:19::i;:::-;30599:16;30610:4;30599:10;:16::i;:::-;30632:11:::0;;:15;30628:247:::1;;30664:18;30685:68;30737:4;:15;;;30685:47;30727:4;30685:37;30701:4;:20;;;30685:4;:11;;;:15;;:37;;;;:::i;:68::-;30664:89:::0;-1:-1:-1;30772:17:0;;30768:96:::1;;30810:38;30827:5;30834:13;30810:16;:38::i;:::-;30628:247;;30889:11:::0;;30885:286:::1;;30917:4;::::0;:52:::1;::::0;-1:-1:-1;;;;;30917:4:0::1;30939:5:::0;30954:4:::1;30961:7:::0;30917:21:::1;:52::i;:::-;30998:11:::0;;:24:::1;::::0;31014:7;30998:15:::1;:24::i;:::-;30984:38:::0;;31056:16:::1;::::0;::::1;::::0;:29:::1;::::0;31077:7;31056:20:::1;:29::i;:::-;31037:16;::::0;::::1;:48:::0;;;31128:10:::1;::::0;-1:-1:-1;31108:30:0::1;31100:59;;;::::0;;-1:-1:-1;;;31100:59:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;31100:59:0;;;;;;;;;;;;;::::1;;31215:20;::::0;::::1;::::0;31199:11;;:47:::1;::::0;31241:4:::1;::::0;31199:37:::1;::::0;:15:::1;:37::i;:47::-;31181:15;::::0;::::1;:65:::0;31262:29:::1;::::0;;;;;;;31277:4;;-1:-1:-1;;;;;31262:29:0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;::::1;33670:1;;;30356:943:::0;;:::o;29362:925::-;29428:4;29445:21;29469:8;29478:4;29469:14;;;;;;;;;;;;;;;;29518;;;:8;:14;;;;;;-1:-1:-1;;;;;29518:21:0;;;;;;;;;29573:20;29469:14;;;;;;;29573:20;;;;29619:16;;;;29652:11;;29469:14;;-1:-1:-1;29573:20:0;;29652:15;29648:613;;29703:4;:20;;;29688:12;:35;29684:405;;;29744:16;29763:40;29782:4;:20;;;29763:18;:40::i;:::-;29744:59;;29822:15;29840:53;29877:15;;29840:32;29856:4;:15;;;29840:11;:15;;:32;;;;:::i;:53::-;29822:71;-1:-1:-1;29930:54:0;29950:33;29975:7;29950:20;29822:71;29965:4;29950:14;:20::i;:33::-;29930:15;;:19;:54::i;:::-;29912:72;;30010:63;30057:4;:15;;;30010:42;30047:4;30010:32;30026:15;30010:4;:11;;;:15;;:32;;;;:::i;:63::-;30003:70;;;;;;;;;;29684:405;30123:4;:20;;;30107:12;:36;30103:147;;;30171:63;30218:4;:15;;;30171:42;30208:4;30171:32;30187:15;30171:4;:11;;;:15;;:32;;;;:::i;:63::-;30164:70;;;;;;;;30103:147;-1:-1:-1;30278:1:0;;29362:925;-1:-1:-1;;;;;;29362:925:0:o;25544:386::-;25606:4;25623:11;25637:18;25643:11;25637:5;:18::i;:::-;25678:10;;25711;;25623:32;;-1:-1:-1;25678:10:0;25786:113;25801:6;25793:5;:14;25786:113;;;25824:7;;;;;25853:34;25862:24;25880:5;25862:13;:4;25871:3;25862:8;:13::i;25853:34::-;25846:41;;25786:113;;;25918:4;25544:386;-1:-1:-1;;;;25544:386:0:o;23051:244::-;22328:12;:10;:12::i;:::-;-1:-1:-1;;;;;22317:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;22317:23:0;;22309:68;;;;;-1:-1:-1;;;22309:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;22309:68:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;23140:22:0;::::1;23132:73;;;;-1:-1:-1::0;;;23132:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23242:6;::::0;;23221:38:::1;::::0;-1:-1:-1;;;;;23221:38:0;;::::1;::::0;23242:6;::::1;::::0;23221:38:::1;::::0;::::1;23270:6;:17:::0;;-1:-1:-1;;;;;;23270:17:0::1;-1:-1:-1::0;;;;;23270:17:0;;;::::1;::::0;;;::::1;::::0;;23051:244::o;14757:106::-;14845:10;14757:106;:::o;2650:158::-;2708:7;2741:1;2736;:6;;2728:49;;;;;-1:-1:-1;;;2728:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2795:5:0;;;2650:158::o;3765:153::-;3823:7;3855:1;3851;:5;3843:44;;;;;-1:-1:-1;;;3843:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;3909:1;3905;:5;;;;;;;3765:153;-1:-1:-1;;;3765:153:0:o;27159:295::-;27208:11;27222:19;27228:12;27222:5;:19::i;:::-;27208:33;;27306:141;27326:6;27313:10;;:19;27306:141;;;27349:10;:12;;;;;;27404:10;;27389:46;;27404:30;;27428:5;;27404:19;;27419:3;27404:14;:19::i;:30::-;27389:10;;;:14;:46::i;:::-;27376:10;:59;27306:141;;3067:220;3125:7;3149:6;3145:20;;-1:-1:-1;3164:1:0;3157:8;;3145:20;3188:5;;;3192:1;3188;:5;:1;3212:5;;;;;:10;3204:56;;;;-1:-1:-1;;;3204:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3278:1;3067:220;-1:-1:-1;;;3067:220:0:o;32828:739::-;32916:4;;:29;;;-1:-1:-1;;;32916:29:0;;32939:4;32916:29;;;;;;32901:12;;-1:-1:-1;;;;;32916:4:0;;:14;;:29;;;;;;;;;;;;;;:4;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32916:29:0;;-1:-1:-1;32960:17:0;;;32956:137;;;32994:4;;:27;;;-1:-1:-1;;;32994:27:0;;-1:-1:-1;;;;;32994:27:0;;;;;;;;;;;;;;;:4;;;;;:13;;:27;;;;;;;;;;;;;;:4;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32956:137:0;;-1:-1:-1;32956:137:0;;33054:4;;:27;;;-1:-1:-1;;;33054:27:0;;-1:-1:-1;;;;;33054:27:0;;;;;;;;;;;;;;;:4;;;;;:13;;:27;;;;;;;;;;;;;;:4;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;32956:137:0;33212:5;;:21;;;-1:-1:-1;;;33212:21:0;;-1:-1:-1;;;;;33212:21:0;;;;;;;;;33176:15;;;;33212:5;;;:16;;:21;;;;;;;;;;;;33176:15;33212:5;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33212:21:0;;;;;;;;;-1:-1:-1;33212:21:0;-1:-1:-1;33244:316:0;;;;33287:5;;:30;;;-1:-1:-1;;;33287:30:0;;33311:4;33287:30;;;;;;33275:9;;-1:-1:-1;;;;;33287:5:0;;:15;;:30;;;;;;;;;;;;;;:5;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33287:30:0;;-1:-1:-1;33336:14:0;;;33332:69;;;33381:4;33371:14;;33332:69;33417:8;33428:25;33449:3;33428:16;:7;33440:3;33428:11;:16::i;:25::-;33468:5;;:28;;;-1:-1:-1;;;33468:28:0;;-1:-1:-1;;;;;33468:28:0;;;;;;;;;;;;;;;33417:36;;-1:-1:-1;33468:5:0;;;:14;;:28;;;;;;;;;;;;;;;:5;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;33511:5:0;;-1:-1:-1;;;;;33511:5:0;:14;33526:3;33531:16;:7;33543:3;33531:11;:16::i;:::-;33511:37;;;;;;;;;;;;;-1:-1:-1;;;;;33511:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;33244:316:0;32828:739;;;;;:::o;17840:177::-;17950:58;;;-1:-1:-1;;;;;17950:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17950:58:0;-1:-1:-1;;;17950:58:0;;;17923:86;;17943:5;;17923:19;:86::i;:::-;17840:177;;;:::o;2188:179::-;2246:7;2278:5;;;2302:6;;;;2294:46;;;;;-1:-1:-1;;;2294:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;18025:205;18153:68;;;-1:-1:-1;;;;;18153:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18153:68:0;-1:-1:-1;;;18153:68:0;;;18126:96;;18146:5;;18126:19;:96::i;:::-;18025:205;;;;:::o;20145:761::-;20569:23;20595:69;20623:4;20595:69;;;;;;;;;;;;;;;;;20603:5;-1:-1:-1;;;;;20595:27:0;;;:69;;;;;:::i;:::-;20679:17;;20569:95;;-1:-1:-1;20679:21:0;20675:224;;20821:10;20810:30;;;;;;;;;;;;;;;-1:-1:-1;20810:30:0;20802:85;;;;-1:-1:-1;;;20802:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10383:195;10486:12;10518:52;10540:6;10548:4;10554:1;10557:12;10486;11687:18;11698:6;11687:10;:18::i;:::-;11679:60;;;;;-1:-1:-1;;;11679:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;11813:12;11827:23;11854:6;-1:-1:-1;;;;;11854:11:0;11874:5;11882:4;11854:33;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;11854:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11812:75;;;;11905:52;11923:7;11932:10;11944:12;11905:17;:52::i;:::-;11898:59;11435:530;-1:-1:-1;;;;;;;11435:530:0:o;7465:422::-;7832:20;7871:8;;;7465:422::o;13975:742::-;14090:12;14119:7;14115:595;;;-1:-1:-1;14150:10:0;14143:17;;14115:595;14264:17;;:21;14260:439;;14527:10;14521:17;14588:15;14575:10;14571:2;14567:19;14560:44;14475:148;14670:12;14663:20;;-1:-1:-1;;;14663:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Swarm Source

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