Contract 0x6924021135712940a2aeb97ff8676dca3247259d

Contract Overview

Balance:
0 AVAX

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xcd61c86970de4a52833dbbd6c4923bb7c26e03b6b32865404c6ac9dc9da52642Withdraw67016502022-02-28 14:53:55212 days 9 hrs ago0x78c4ef60e3cb762ea076a2a64701ca8d00285dbc IN 0x6924021135712940a2aeb97ff8676dca3247259d0 AVAX0.00257485 25
0xc58e5d485fd9f5e41890645a18f90c1baa80158d8b78e8db27bd15018d3ed981Withdraw67016312022-02-28 14:53:17212 days 9 hrs ago0x78c4ef60e3cb762ea076a2a64701ca8d00285dbc IN 0x6924021135712940a2aeb97ff8676dca3247259d0 AVAX0.00257455 25
0x5ac1a4e858f27f514ea1d82595db07bd2f8da7cd8b1a740f0ff0eb7091e4eea2Withdraw66976122022-02-28 13:10:11212 days 11 hrs ago0x78c4ef60e3cb762ea076a2a64701ca8d00285dbc IN 0x6924021135712940a2aeb97ff8676dca3247259d0 AVAX0.00218445 25
0x9ab24ba94a9c54cece4ab21764f2f012e0abff6cd4e4e97917c0034b1f0fa4a9Withdraw66975642022-02-28 13:08:34212 days 11 hrs ago0x78c4ef60e3cb762ea076a2a64701ca8d00285dbc IN 0x6924021135712940a2aeb97ff8676dca3247259d0 AVAX0.00261165 25
0xa582c1ca2cb1b01763b9a609e309dc8ce4beeb2d6f748a9feb983d3e3f80e689Deposit66556562022-02-27 13:44:41213 days 11 hrs ago0x78c4ef60e3cb762ea076a2a64701ca8d00285dbc IN 0x6924021135712940a2aeb97ff8676dca3247259d0 AVAX0.0029366 25
0xa60489c5dd6b9e90c7557621a0a6b1970d8047c3fa0892eadd5a6fbe442974a9Deposit66553732022-02-27 13:35:00213 days 11 hrs ago0x78c4ef60e3cb762ea076a2a64701ca8d00285dbc IN 0x6924021135712940a2aeb97ff8676dca3247259d0 AVAX0.003065675 25
0x73a6a6172f8ec7cbe1e70ae9a07afa730e0e223e5007bcf1c3e77bc004dde0bbDeposit66550922022-02-27 13:25:31213 days 11 hrs ago0x78c4ef60e3cb762ea076a2a64701ca8d00285dbc IN 0x6924021135712940a2aeb97ff8676dca3247259d0 AVAX0.0029363 25
0xe92a6e814259428f50f5c9fe0c185f724e60e816cf3808195970592f14fc4eb7Deposit47219152022-01-11 17:41:01260 days 7 hrs ago0x878ecdd898336dccc076ce0e16dabbf8f507ab9d IN 0x6924021135712940a2aeb97ff8676dca3247259d0 AVAX0.002638475 25
0x02b6c537a7ba87848caa709f87d52fd701d54b6a5e1cb0cc0b3686ec9cfb6347Withdraw47206372022-01-11 16:58:08260 days 7 hrs ago0x878ecdd898336dccc076ce0e16dabbf8f507ab9d IN 0x6924021135712940a2aeb97ff8676dca3247259d0 AVAX0.00218445 25
0x505e94aa4692b7f0e6d19848653b891b2824c562b756921a5d94d014ef606dc9Withdraw45540582022-01-07 16:42:46264 days 8 hrs ago0xba88cef1ecd3f155264d52b2cf8ab41e628c2258 IN 0x6924021135712940a2aeb97ff8676dca3247259d0 AVAX0.0021841525
0xd3c4cafb280e626d21b61e6bf2b34516316e61bd30863368c08973dabab87cdeDeposit43755132022-01-03 7:26:44268 days 17 hrs ago0xd1fe1a27c6b05cab0e32918eb8c4b696097496fa IN 0x6924021135712940a2aeb97ff8676dca3247259d0 AVAX0.00293625
0x41e8eb656e2571f883028e1704caa6aa55da95732749f1e075be6728f89166a7Withdraw43329532022-01-02 4:23:23269 days 20 hrs ago0xba88cef1ecd3f155264d52b2cf8ab41e628c2258 IN 0x6924021135712940a2aeb97ff8676dca3247259d0 AVAX0.0026116525
0xf6f3480d7bf763ee2c5a99e37faf8b6307677ff6deffc50705251621b0e656e9Deposit43319012022-01-02 3:42:32269 days 21 hrs ago0xba88cef1ecd3f155264d52b2cf8ab41e628c2258 IN 0x6924021135712940a2aeb97ff8676dca3247259d0 AVAX0.00293625
0xf03a47f709450c7d8ed9beedf38485cac25e9b0496a087df20ed9ac00a1c678dWithdraw41599472021-12-28 19:30:02274 days 5 hrs ago0x58020bab25e6053a4c41a4eb78dfd8900ca4d7cf IN 0x6924021135712940a2aeb97ff8676dca3247259d0 AVAX0.00218445 25
0x361daf5fe3d4731f1981c3f36d23aa7864af074a952e106e471d252b1b8b80ceWithdraw41599372021-12-28 19:29:42274 days 5 hrs ago0x58020bab25e6053a4c41a4eb78dfd8900ca4d7cf IN 0x6924021135712940a2aeb97ff8676dca3247259d0 AVAX0.00218415 25
0x597f9c64d08b333b36a4e35f73775bc491c8fc40b2f8b048280ca7aac44a2dbdWithdraw41465992021-12-28 11:51:26274 days 12 hrs ago0x58020bab25e6053a4c41a4eb78dfd8900ca4d7cf IN 0x6924021135712940a2aeb97ff8676dca3247259d0 AVAX0.00218415 25
0x55ee13cf7c40218161228ba2fce900b781b1ef2d66fcca21510022455890e037Withdraw41465932021-12-28 11:51:12274 days 12 hrs ago0x58020bab25e6053a4c41a4eb78dfd8900ca4d7cf IN 0x6924021135712940a2aeb97ff8676dca3247259d0 AVAX0.00218445 25
0x6b65668b8cd752299df1ccc16120f2119de85b99d1b365cb0061fd649d07849aWithdraw41464912021-12-28 11:47:39274 days 12 hrs ago0x58020bab25e6053a4c41a4eb78dfd8900ca4d7cf IN 0x6924021135712940a2aeb97ff8676dca3247259d0 AVAX0.00218445 25
0xe1e0ea9c9e11fc47b902dde6ba3431953ca6f26b8e334c478e8fbc9fbbbb25ccDeposit41463642021-12-28 11:42:55274 days 13 hrs ago0x58020bab25e6053a4c41a4eb78dfd8900ca4d7cf IN 0x6924021135712940a2aeb97ff8676dca3247259d0 AVAX0.003065675 25
0xb7ecaa6398546e7f56f05b8c819c6c26eb20e6d1d4bec5fe2213af4e5aa92125Withdraw41463282021-12-28 11:41:32274 days 13 hrs ago0x58020bab25e6053a4c41a4eb78dfd8900ca4d7cf IN 0x6924021135712940a2aeb97ff8676dca3247259d0 AVAX0.00218415 25
0x76c10ab9560da1ebe28043459fdc66af2116ae28dbfb033cf169bd7382b3d347Withdraw41462422021-12-28 11:38:29274 days 13 hrs ago0x58020bab25e6053a4c41a4eb78dfd8900ca4d7cf IN 0x6924021135712940a2aeb97ff8676dca3247259d0 AVAX0.00218445 25
0x6612d381bd6e324ddd4d4ff76ee56a9d57e4c654f4b2c704c84fdb7be5c8b142Withdraw41462332021-12-28 11:38:09274 days 13 hrs ago0x58020bab25e6053a4c41a4eb78dfd8900ca4d7cf IN 0x6924021135712940a2aeb97ff8676dca3247259d0 AVAX0.00218415 25
0x4d974f97efb0a37c71417c4f80635e90ad01ba4135f50bc259a927ed3fb7da79Deposit41462292021-12-28 11:37:58274 days 13 hrs ago0x58020bab25e6053a4c41a4eb78dfd8900ca4d7cf IN 0x6924021135712940a2aeb97ff8676dca3247259d0 AVAX0.003065075 25
0x3a191a58df021d8dff90cccfc025a9b705c275507b4a7c8d3808374c967ccdb4Deposit41461232021-12-28 11:34:12274 days 13 hrs ago0x58020bab25e6053a4c41a4eb78dfd8900ca4d7cf IN 0x6924021135712940a2aeb97ff8676dca3247259d0 AVAX0.0029363 25
0xa3d86f2be1de5cfb6c3804616d21dc364c2b4e9ed96fb6e220dfbde60edbaa87Withdraw41460022021-12-28 11:29:51274 days 13 hrs ago0x58020bab25e6053a4c41a4eb78dfd8900ca4d7cf IN 0x6924021135712940a2aeb97ff8676dca3247259d0 AVAX0.00218415 25
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xcd61c86970de4a52833dbbd6c4923bb7c26e03b6b32865404c6ac9dc9da5264267016502022-02-28 14:53:55212 days 9 hrs ago 0x6924021135712940a2aeb97ff8676dca3247259d 0x431865a482a49b3f3b82226b39a4deecc7f2f2010 AVAX
0xcd61c86970de4a52833dbbd6c4923bb7c26e03b6b32865404c6ac9dc9da5264267016502022-02-28 14:53:55212 days 9 hrs ago 0x6924021135712940a2aeb97ff8676dca3247259d0x153478b3dd08b7e889ca062abc08059f894bedb20 AVAX
0xcd61c86970de4a52833dbbd6c4923bb7c26e03b6b32865404c6ac9dc9da5264267016502022-02-28 14:53:55212 days 9 hrs ago 0x6924021135712940a2aeb97ff8676dca3247259d0x153478b3dd08b7e889ca062abc08059f894bedb20 AVAX
0xcd61c86970de4a52833dbbd6c4923bb7c26e03b6b32865404c6ac9dc9da5264267016502022-02-28 14:53:55212 days 9 hrs ago 0x6924021135712940a2aeb97ff8676dca3247259d 0x431865a482a49b3f3b82226b39a4deecc7f2f2010 AVAX
0xc58e5d485fd9f5e41890645a18f90c1baa80158d8b78e8db27bd15018d3ed98167016312022-02-28 14:53:17212 days 9 hrs ago 0x6924021135712940a2aeb97ff8676dca3247259d 0x3336300120b693c9d807d1c8e8cb8059594cfb8f0 AVAX
0xc58e5d485fd9f5e41890645a18f90c1baa80158d8b78e8db27bd15018d3ed98167016312022-02-28 14:53:17212 days 9 hrs ago 0x6924021135712940a2aeb97ff8676dca3247259d0x153478b3dd08b7e889ca062abc08059f894bedb20 AVAX
0xc58e5d485fd9f5e41890645a18f90c1baa80158d8b78e8db27bd15018d3ed98167016312022-02-28 14:53:17212 days 9 hrs ago 0x6924021135712940a2aeb97ff8676dca3247259d0x153478b3dd08b7e889ca062abc08059f894bedb20 AVAX
0xc58e5d485fd9f5e41890645a18f90c1baa80158d8b78e8db27bd15018d3ed98167016312022-02-28 14:53:17212 days 9 hrs ago 0x6924021135712940a2aeb97ff8676dca3247259d 0x3336300120b693c9d807d1c8e8cb8059594cfb8f0 AVAX
0x5ac1a4e858f27f514ea1d82595db07bd2f8da7cd8b1a740f0ff0eb7091e4eea266976122022-02-28 13:10:11212 days 11 hrs ago 0x6924021135712940a2aeb97ff8676dca3247259d0x153478b3dd08b7e889ca062abc08059f894bedb20 AVAX
0x5ac1a4e858f27f514ea1d82595db07bd2f8da7cd8b1a740f0ff0eb7091e4eea266976122022-02-28 13:10:11212 days 11 hrs ago 0x6924021135712940a2aeb97ff8676dca3247259d0x153478b3dd08b7e889ca062abc08059f894bedb20 AVAX
0x5ac1a4e858f27f514ea1d82595db07bd2f8da7cd8b1a740f0ff0eb7091e4eea266976122022-02-28 13:10:11212 days 11 hrs ago 0x6924021135712940a2aeb97ff8676dca3247259d 0x431865a482a49b3f3b82226b39a4deecc7f2f2010 AVAX
0x9ab24ba94a9c54cece4ab21764f2f012e0abff6cd4e4e97917c0034b1f0fa4a966975642022-02-28 13:08:34212 days 11 hrs ago 0x6924021135712940a2aeb97ff8676dca3247259d0x153478b3dd08b7e889ca062abc08059f894bedb20 AVAX
0x9ab24ba94a9c54cece4ab21764f2f012e0abff6cd4e4e97917c0034b1f0fa4a966975642022-02-28 13:08:34212 days 11 hrs ago 0x6924021135712940a2aeb97ff8676dca3247259d0x153478b3dd08b7e889ca062abc08059f894bedb20 AVAX
0x9ab24ba94a9c54cece4ab21764f2f012e0abff6cd4e4e97917c0034b1f0fa4a966975642022-02-28 13:08:34212 days 11 hrs ago 0x6924021135712940a2aeb97ff8676dca3247259d 0x3336300120b693c9d807d1c8e8cb8059594cfb8f0 AVAX
0xa582c1ca2cb1b01763b9a609e309dc8ce4beeb2d6f748a9feb983d3e3f80e68966556562022-02-27 13:44:41213 days 11 hrs ago 0x6924021135712940a2aeb97ff8676dca3247259d 0x431865a482a49b3f3b82226b39a4deecc7f2f2010 AVAX
0xa582c1ca2cb1b01763b9a609e309dc8ce4beeb2d6f748a9feb983d3e3f80e68966556562022-02-27 13:44:41213 days 11 hrs ago 0x6924021135712940a2aeb97ff8676dca3247259d 0x431865a482a49b3f3b82226b39a4deecc7f2f2010 AVAX
0xa60489c5dd6b9e90c7557621a0a6b1970d8047c3fa0892eadd5a6fbe442974a966553732022-02-27 13:35:00213 days 11 hrs ago 0x6924021135712940a2aeb97ff8676dca3247259d 0x3336300120b693c9d807d1c8e8cb8059594cfb8f0 AVAX
0xa60489c5dd6b9e90c7557621a0a6b1970d8047c3fa0892eadd5a6fbe442974a966553732022-02-27 13:35:00213 days 11 hrs ago 0x6924021135712940a2aeb97ff8676dca3247259d0x153478b3dd08b7e889ca062abc08059f894bedb20 AVAX
0xa60489c5dd6b9e90c7557621a0a6b1970d8047c3fa0892eadd5a6fbe442974a966553732022-02-27 13:35:00213 days 11 hrs ago 0x6924021135712940a2aeb97ff8676dca3247259d0x153478b3dd08b7e889ca062abc08059f894bedb20 AVAX
0xa60489c5dd6b9e90c7557621a0a6b1970d8047c3fa0892eadd5a6fbe442974a966553732022-02-27 13:35:00213 days 11 hrs ago 0x6924021135712940a2aeb97ff8676dca3247259d 0x3336300120b693c9d807d1c8e8cb8059594cfb8f0 AVAX
0x73a6a6172f8ec7cbe1e70ae9a07afa730e0e223e5007bcf1c3e77bc004dde0bb66550922022-02-27 13:25:31213 days 11 hrs ago 0x6924021135712940a2aeb97ff8676dca3247259d 0x3336300120b693c9d807d1c8e8cb8059594cfb8f0 AVAX
0x73a6a6172f8ec7cbe1e70ae9a07afa730e0e223e5007bcf1c3e77bc004dde0bb66550922022-02-27 13:25:31213 days 11 hrs ago 0x6924021135712940a2aeb97ff8676dca3247259d 0x3336300120b693c9d807d1c8e8cb8059594cfb8f0 AVAX
0xe92a6e814259428f50f5c9fe0c185f724e60e816cf3808195970592f14fc4eb747219152022-01-11 17:41:01260 days 7 hrs ago 0x6924021135712940a2aeb97ff8676dca3247259d 0x431865a482a49b3f3b82226b39a4deecc7f2f2010 AVAX
0xe92a6e814259428f50f5c9fe0c185f724e60e816cf3808195970592f14fc4eb747219152022-01-11 17:41:01260 days 7 hrs ago 0x6924021135712940a2aeb97ff8676dca3247259d0x153478b3dd08b7e889ca062abc08059f894bedb20 AVAX
0xe92a6e814259428f50f5c9fe0c185f724e60e816cf3808195970592f14fc4eb747219152022-01-11 17:41:01260 days 7 hrs ago 0x6924021135712940a2aeb97ff8676dca3247259d0x153478b3dd08b7e889ca062abc08059f894bedb20 AVAX
[ Download CSV Export 
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.

Contract Source Code Verified (Exact Match)

Contract Name:
HSharesRewardPool

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at testnet.snowtrace.io on 2021-12-17
*/

// SPDX-License-Identifier: MIXED

// File @openzeppelin/contracts/token/ERC20/[email protected]
// License-Identifier: MIT

pragma solidity >=0.6.0 <0.8.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/math/[email protected]
// License-Identifier: MIT

pragma solidity >=0.6.0 <0.8.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, 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;
    }
}

// File @openzeppelin/contracts/utils/[email protected]
// License-Identifier: MIT

pragma solidity >=0.6.2 <0.8.0;

/**
 * @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 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);
            }
        }
    }
}

// File @openzeppelin/contracts/token/ERC20/[email protected]
// License-Identifier: MIT

pragma solidity >=0.6.0 <0.8.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 contracts/distribution/HSharesRewardPool.sol
// License-Identifier: MIT

pragma solidity 0.6.12;



// Note that this pool has no minter key of tSHARE (rewards).
// Instead, the governance will call tSHARE distributeReward method and send reward to this pool at the beginning.
contract HSharesRewardPool {
    using SafeMath for uint256;
    using SafeERC20 for IERC20;

    // governance
    address public operator;

    // Info of each user.
    struct UserInfo {
        uint256 amount; // How many LP tokens the user has provided.
        uint256 rewardDebt; // Reward debt. See explanation below.
    }

    // Info of each pool.
    struct PoolInfo {
        IERC20 token; // Address of LP token contract.
        uint256 allocPoint; // How many allocation points assigned to this pool. tSHAREs to distribute per block.
        uint256 lastRewardTime; // Last time that tSHAREs distribution occurs.
        uint256 accHSharesPerShare; // Accumulated tSHAREs per share, times 1e18. See below.
        bool isStarted; // if lastRewardTime has passed
    }

    IERC20 public bshare;

    // Info of each pool.
    PoolInfo[] public poolInfo;

    // Info of each user that stakes LP tokens.
    mapping(uint256 => mapping(address => UserInfo)) public userInfo;

    // Total allocation points. Must be the sum of all allocation points in all pools.
    uint256 public totalAllocPoint = 0;

    // The time when tSHARE mining starts.
    uint256 public poolStartTime;

    // The time when tSHARE mining ends.
    uint256 public poolEndTime;

    uint256 public tSharePerSecond = 0.00186122 ether; // 59500 bshare / (370 days * 24h * 60min * 60s)
    uint256 public runningTime = 370 days; // 370 days
    uint256 public constant TOTAL_REWARDS = 59500 ether;

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

    constructor(
        address _bshare,
        uint256 _poolStartTime
    ) public {
        require(block.timestamp < _poolStartTime, "late");
        if (_bshare != address(0)) bshare = IERC20(_bshare);
        poolStartTime = _poolStartTime;
        poolEndTime = poolStartTime + runningTime;
        operator = msg.sender;
    }

    modifier onlyOperator() {
        require(operator == msg.sender, "HSharesRewardPool: caller is not the operator");
        _;
    }

    function checkPoolDuplicate(IERC20 _token) internal view {
        uint256 length = poolInfo.length;
        for (uint256 pid = 0; pid < length; ++pid) {
            require(poolInfo[pid].token != _token, "HSharesRewardPool: existing pool?");
        }
    }

    // Add a new lp to the pool. Can only be called by the owner.
    function add(
        uint256 _allocPoint,
        IERC20 _token,
        bool _withUpdate,
        uint256 _lastRewardTime
    ) public onlyOperator {
        checkPoolDuplicate(_token);
        if (_withUpdate) {
            massUpdatePools();
        }
        if (block.timestamp < poolStartTime) {
            // chef is sleeping
            if (_lastRewardTime == 0) {
                _lastRewardTime = poolStartTime;
            } else {
                if (_lastRewardTime < poolStartTime) {
                    _lastRewardTime = poolStartTime;
                }
            }
        } else {
            // chef is cooking
            if (_lastRewardTime == 0 || _lastRewardTime < block.timestamp) {
                _lastRewardTime = block.timestamp;
            }
        }
        bool _isStarted =
        (_lastRewardTime <= poolStartTime) ||
        (_lastRewardTime <= block.timestamp);
        poolInfo.push(PoolInfo({
            token : _token,
            allocPoint : _allocPoint,
            lastRewardTime : _lastRewardTime,
            accHSharesPerShare : 0,
            isStarted : _isStarted
            }));
        if (_isStarted) {
            totalAllocPoint = totalAllocPoint.add(_allocPoint);
        }
    }

    // Update the given pool's tSHARE allocation point. Can only be called by the owner.
    function set(uint256 _pid, uint256 _allocPoint) public onlyOperator {
        massUpdatePools();
        PoolInfo storage pool = poolInfo[_pid];
        if (pool.isStarted) {
            totalAllocPoint = totalAllocPoint.sub(pool.allocPoint).add(
                _allocPoint
            );
        }
        pool.allocPoint = _allocPoint;
    }

    // Return accumulate rewards over the given _from to _to block.
    function getGeneratedReward(uint256 _fromTime, uint256 _toTime) public view returns (uint256) {
        if (_fromTime >= _toTime) return 0;
        if (_toTime >= poolEndTime) {
            if (_fromTime >= poolEndTime) return 0;
            if (_fromTime <= poolStartTime) return poolEndTime.sub(poolStartTime).mul(tSharePerSecond);
            return poolEndTime.sub(_fromTime).mul(tSharePerSecond);
        } else {
            if (_toTime <= poolStartTime) return 0;
            if (_fromTime <= poolStartTime) return _toTime.sub(poolStartTime).mul(tSharePerSecond);
            return _toTime.sub(_fromTime).mul(tSharePerSecond);
        }
    }

    // View function to see pending tSHAREs on frontend.
    function pendingShare(uint256 _pid, address _user) external view returns (uint256) {
        PoolInfo storage pool = poolInfo[_pid];
        UserInfo storage user = userInfo[_pid][_user];
        uint256 accHSharesPerShare = pool.accHSharesPerShare;
        uint256 tokenSupply = pool.token.balanceOf(address(this));
        if (block.timestamp > pool.lastRewardTime && tokenSupply != 0) {
            uint256 _generatedReward = getGeneratedReward(pool.lastRewardTime, block.timestamp);
            uint256 _bshareReward = _generatedReward.mul(pool.allocPoint).div(totalAllocPoint);
            accHSharesPerShare = accHSharesPerShare.add(_bshareReward.mul(1e18).div(tokenSupply));
        }
        return user.amount.mul(accHSharesPerShare).div(1e18).sub(user.rewardDebt);
    }

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

    // Update reward variables of the given pool to be up-to-date.
    function updatePool(uint256 _pid) public {
        PoolInfo storage pool = poolInfo[_pid];
        if (block.timestamp <= pool.lastRewardTime) {
            return;
        }
        uint256 tokenSupply = pool.token.balanceOf(address(this));
        if (tokenSupply == 0) {
            pool.lastRewardTime = block.timestamp;
            return;
        }
        if (!pool.isStarted) {
            pool.isStarted = true;
            totalAllocPoint = totalAllocPoint.add(pool.allocPoint);
        }
        if (totalAllocPoint > 0) {
            uint256 _generatedReward = getGeneratedReward(pool.lastRewardTime, block.timestamp);
            uint256 _bshareReward = _generatedReward.mul(pool.allocPoint).div(totalAllocPoint);
            pool.accHSharesPerShare = pool.accHSharesPerShare.add(_bshareReward.mul(1e18).div(tokenSupply));
        }
        pool.lastRewardTime = block.timestamp;
    }

    // Deposit LP tokens.
    function deposit(uint256 _pid, uint256 _amount) public {
        address _sender = msg.sender;
        PoolInfo storage pool = poolInfo[_pid];
        UserInfo storage user = userInfo[_pid][_sender];
        updatePool(_pid);
        if (user.amount > 0) {
            uint256 _pending = user.amount.mul(pool.accHSharesPerShare).div(1e18).sub(user.rewardDebt);
            if (_pending > 0) {
                safeHSharesTransfer(_sender, _pending);
                emit RewardPaid(_sender, _pending);
            }
        }
        if (_amount > 0) {
            pool.token.safeTransferFrom(_sender, address(this), _amount);
            user.amount = user.amount.add(_amount);
        }
        user.rewardDebt = user.amount.mul(pool.accHSharesPerShare).div(1e18);
        emit Deposit(_sender, _pid, _amount);
    }

    // Withdraw LP tokens.
    function withdraw(uint256 _pid, uint256 _amount) public {
        address _sender = msg.sender;
        PoolInfo storage pool = poolInfo[_pid];
        UserInfo storage user = userInfo[_pid][_sender];
        require(user.amount >= _amount, "withdraw: not good");
        updatePool(_pid);
        uint256 _pending = user.amount.mul(pool.accHSharesPerShare).div(1e18).sub(user.rewardDebt);
        if (_pending > 0) {
            safeHSharesTransfer(_sender, _pending);
            emit RewardPaid(_sender, _pending);
        }
        if (_amount > 0) {
            user.amount = user.amount.sub(_amount);
            pool.token.safeTransfer(_sender, _amount);
        }
        user.rewardDebt = user.amount.mul(pool.accHSharesPerShare).div(1e18);
        emit Withdraw(_sender, _pid, _amount);
    }

    // Withdraw without caring about rewards. EMERGENCY ONLY.
    function emergencyWithdraw(uint256 _pid) public {
        PoolInfo storage pool = poolInfo[_pid];
        UserInfo storage user = userInfo[_pid][msg.sender];
        uint256 _amount = user.amount;
        user.amount = 0;
        user.rewardDebt = 0;
        pool.token.safeTransfer(msg.sender, _amount);
        emit EmergencyWithdraw(msg.sender, _pid, _amount);
    }

    // Safe bshare transfer function, just in case if rounding error causes pool to not have enough tSHAREs.
    function safeHSharesTransfer(address _to, uint256 _amount) internal {
        uint256 _bshareBal = bshare.balanceOf(address(this));
        if (_bshareBal > 0) {
            if (_amount > _bshareBal) {
                bshare.safeTransfer(_to, _bshareBal);
            } else {
                bshare.safeTransfer(_to, _amount);
            }
        }
    }

    function setOperator(address _operator) external onlyOperator {
        operator = _operator;
    }

    function governanceRecoverUnsupported(IERC20 _token, uint256 amount, address to) external onlyOperator {
        if (block.timestamp < poolEndTime + 90 days) {
            // do not allow to drain core token (tSHARE or lps) if less than 90 days after pool ends
            require(_token != bshare, "bshare");
            uint256 length = poolInfo.length;
            for (uint256 pid = 0; pid < length; ++pid) {
                PoolInfo storage pool = poolInfo[pid];
                require(_token != pool.token, "pool.token");
            }
        }
        _token.safeTransfer(to, amount);
    }
}

Contract ABI

[{"inputs":[{"internalType":"address","name":"_bshare","type":"address"},{"internalType":"uint256","name":"_poolStartTime","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":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"RewardPaid","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":[],"name":"TOTAL_REWARDS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"contract IERC20","name":"_token","type":"address"},{"internalType":"bool","name":"_withUpdate","type":"bool"},{"internalType":"uint256","name":"_lastRewardTime","type":"uint256"}],"name":"add","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"bshare","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","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":"_fromTime","type":"uint256"},{"internalType":"uint256","name":"_toTime","type":"uint256"}],"name":"getGeneratedReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"governanceRecoverUnsupported","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"massUpdatePools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"operator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"_user","type":"address"}],"name":"pendingShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolEndTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"poolInfo","outputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"uint256","name":"allocPoint","type":"uint256"},{"internalType":"uint256","name":"lastRewardTime","type":"uint256"},{"internalType":"uint256","name":"accHSharesPerShare","type":"uint256"},{"internalType":"bool","name":"isStarted","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolStartTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"runningTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_allocPoint","type":"uint256"}],"name":"set","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"}],"name":"setOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tSharePerSecond","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalAllocPoint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"amount","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"}]

6080604052600060045566069cc50cf2e8006007556301e7cb0060085534801561002857600080fd5b506040516118633803806118638339818101604052604081101561004b57600080fd5b508051602090910151428111610091576040805162461bcd60e51b815260206004808301919091526024820152636c61746560e01b604482015290519081900360640190fd5b6001600160a01b038216156100bc57600180546001600160a01b0319166001600160a01b0384161790555b60058190556008540160065550600080546001600160a01b03191633179055611779806100ea6000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c80635f96dc11116100b857806396805e541161007c57806396805e54146103165780639beb31df146103505780639e63d26114610358578063b3ab15fb14610360578063cf4b55cb14610386578063e2bbb158146103b257610137565b80635f96dc11146102b1578063630b5ba1146102b95780636e271dd5146102c157806393f1a40b146102c9578063943f013d1461030e57610137565b8063441a3e70116100ff578063441a3e70146101fa57806351eb05a61461021d5780635312ea8e1461023a57806354575af414610257578063570ca7351461028d57610137565b806309cf60911461013c5780631526fe271461015657806317caf6f1146101aa5780631ab06ee5146101b2578063231f0c6a146101d7575b600080fd5b6101446103d5565b60408051918252519081900360200190f35b6101736004803603602081101561016c57600080fd5b50356103e3565b604080516001600160a01b039096168652602086019490945284840192909252606084015215156080830152519081900360a00190f35b61014461042e565b6101d5600480360360408110156101c857600080fd5b5080359060200135610434565b005b610144600480360360408110156101ed57600080fd5b50803590602001356104e2565b6101d56004803603604081101561021057600080fd5b50803590602001356105a7565b6101d56004803603602081101561023357600080fd5b5035610764565b6101d56004803603602081101561025057600080fd5b50356108c2565b6101d56004803603606081101561026d57600080fd5b506001600160a01b0381358116916020810135916040909101351661095e565b610295610aa6565b604080516001600160a01b039092168252519081900360200190f35b610144610ab5565b6101d5610abb565b610144610ade565b6102f5600480360360408110156102df57600080fd5b50803590602001356001600160a01b0316610ae4565b6040805192835260208301919091528051918290030190f35b610144610b08565b6101d56004803603608081101561032c57600080fd5b508035906001600160a01b0360208201351690604081013515159060600135610b0e565b610295610d0b565b610144610d1a565b6101d56004803603602081101561037657600080fd5b50356001600160a01b0316610d20565b6101446004803603604081101561039c57600080fd5b50803590602001356001600160a01b0316610d8b565b6101d5600480360360408110156103c857600080fd5b5080359060200135610ee7565b690c99805fe37d3e30000081565b600281815481106103f057fe5b6000918252602090912060059091020180546001820154600283015460038401546004909401546001600160a01b0390931694509092909160ff1685565b60045481565b6000546001600160a01b0316331461047d5760405162461bcd60e51b815260040180806020018281038252602d815260200180611717602d913960400191505060405180910390fd5b610485610abb565b60006002838154811061049457fe5b60009182526020909120600590910201600481015490915060ff16156104db576104d7826104d1836001015460045461105790919063ffffffff16565b906110b4565b6004555b6001015550565b60008183106104f3575060006105a1565b600654821061055b57600654831061050d575060006105a1565b60055483116105405761053960075461053360055460065461105790919063ffffffff16565b90611115565b90506105a1565b6105396007546105338560065461105790919063ffffffff16565b600554821161056c575060006105a1565b6005548311610590576105396007546105336005548561105790919063ffffffff16565b600754610539906105338486611057565b92915050565b60003390506000600284815481106105bb57fe5b600091825260208083208784526003825260408085206001600160a01b03881686529092529220805460059092029092019250841115610637576040805162461bcd60e51b81526020600482015260126024820152711dda5d1a191c985dce881b9bdd0819dbdbd960721b604482015290519081900360640190fd5b61064085610764565b600061067d8260010154610677670de0b6b3a76400006106718760030154876000015461111590919063ffffffff16565b9061116e565b90611057565b905080156106cf5761068f84826111d5565b6040805182815290516001600160a01b038616917fe2403640ba68fed3a2f88b7557551d1993f84b99bb10ff833f0cf8db0c5e0486919081900360200190a25b84156106f95781546106e19086611057565b825582546106f9906001600160a01b0316858761128b565b6003830154825461071791670de0b6b3a76400009161067191611115565b600183015560408051868152905187916001600160a01b038716917ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b5689181900360200190a3505050505050565b60006002828154811061077357fe5b906000526020600020906005020190508060020154421161079457506108bf565b8054604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b1580156107de57600080fd5b505afa1580156107f2573d6000803e3d6000fd5b505050506040513d602081101561080857600080fd5b505190508061081e5750426002909101556108bf565b600482015460ff1661084f576004808301805460ff19166001908117909155830154905461084b916110b4565b6004555b600454156108b65760006108678360020154426104e2565b9050600061088860045461067186600101548561111590919063ffffffff16565b90506108ae6108a38461067184670de0b6b3a7640000611115565b6003860154906110b4565b600385015550505b50426002909101555b50565b6000600282815481106108d157fe5b600091825260208083208584526003825260408085203380875293528420805485825560018201959095556005909302018054909450919291610921916001600160a01b0391909116908361128b565b604080518281529051859133917fbb757047c2b5f3974fe26b7c10f732e7bce710b0952a71082702781e62ae05959181900360200190a350505050565b6000546001600160a01b031633146109a75760405162461bcd60e51b815260040180806020018281038252602d815260200180611717602d913960400191505060405180910390fd5b6006546276a70001421015610a8d576001546001600160a01b0384811691161415610a02576040805162461bcd60e51b815260206004820152600660248201526562736861726560d01b604482015290519081900360640190fd5b60025460005b81811015610a8a57600060028281548110610a1f57fe5b6000918252602090912060059091020180549091506001600160a01b0387811691161415610a81576040805162461bcd60e51b815260206004820152600a6024820152693837b7b6173a37b5b2b760b11b604482015290519081900360640190fd5b50600101610a08565b50505b610aa16001600160a01b038416828461128b565b505050565b6000546001600160a01b031681565b60055481565b60025460005b81811015610ada57610ad281610764565b600101610ac1565b5050565b60065481565b60036020908152600092835260408084209091529082529020805460019091015482565b60085481565b6000546001600160a01b03163314610b575760405162461bcd60e51b815260040180806020018281038252602d815260200180611717602d913960400191505060405180910390fd5b610b60836112dd565b8115610b6e57610b6e610abb565b600554421015610b9a5780610b865750600554610b95565b600554811015610b9557506005545b610bae565b801580610ba657504281105b15610bae5750425b600060055482111580610bc15750428211155b6040805160a0810182526001600160a01b03878116825260208201898152928201868152600060608401818152861580156080870190815260028054600181018255945295517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace600590940293840180546001600160a01b031916919096161790945594517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf82015590517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad082015592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad184015590517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad2909201805460ff191692151592909217909155909150610d0457600454610d0090866110b4565b6004555b5050505050565b6001546001600160a01b031681565b60075481565b6000546001600160a01b03163314610d695760405162461bcd60e51b815260040180806020018281038252602d815260200180611717602d913960400191505060405180910390fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b60008060028481548110610d9b57fe5b60009182526020808320878452600380835260408086206001600160a01b03808b168852908552818720600590960290930191820154825482516370a0823160e01b815230600482015292519398509596909590949316926370a0823192602480840193829003018186803b158015610e1357600080fd5b505afa158015610e27573d6000803e3d6000fd5b505050506040513d6020811015610e3d57600080fd5b5051600285015490915042118015610e5457508015155b15610eb1576000610e698560020154426104e2565b90506000610e8a60045461067188600101548561111590919063ffffffff16565b9050610eac610ea58461067184670de0b6b3a7640000611115565b85906110b4565b935050505b610edc8360010154610677670de0b6b3a764000061067186886000015461111590919063ffffffff16565b979650505050505050565b6000339050600060028481548110610efb57fe5b600091825260208083208784526003825260408085206001600160a01b0388168652909252922060059091029091019150610f3585610764565b805415610fc1576000610f6d8260010154610677670de0b6b3a76400006106718760030154876000015461111590919063ffffffff16565b90508015610fbf57610f7f84826111d5565b6040805182815290516001600160a01b038616917fe2403640ba68fed3a2f88b7557551d1993f84b99bb10ff833f0cf8db0c5e0486919081900360200190a25b505b8315610fed578154610fde906001600160a01b0316843087611361565b8054610fea90856110b4565b81555b6003820154815461100b91670de0b6b3a76400009161067191611115565b600182015560408051858152905186916001600160a01b038616917f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a159181900360200190a35050505050565b6000828211156110ae576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b60008282018381101561110e576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b600082611124575060006105a1565b8282028284828161113157fe5b041461110e5760405162461bcd60e51b81526004018080602001828103825260218152602001806116ab6021913960400191505060405180910390fd5b60008082116111c4576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b8183816111cd57fe5b049392505050565b600154604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561122057600080fd5b505afa158015611234573d6000803e3d6000fd5b505050506040513d602081101561124a57600080fd5b505190508015610aa1578082111561127857600154611273906001600160a01b0316848361128b565b610aa1565b600154610aa1906001600160a01b031684845b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610aa19084906113c1565b60025460005b81811015610aa157826001600160a01b03166002828154811061130257fe5b60009182526020909120600590910201546001600160a01b031614156113595760405162461bcd60e51b81526004018080602001828103825260218152602001806116cc6021913960400191505060405180910390fd5b6001016112e3565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b1790526113bb9085906113c1565b50505050565b6060611416826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166114729092919063ffffffff16565b805190915015610aa15780806020019051602081101561143557600080fd5b5051610aa15760405162461bcd60e51b815260040180806020018281038252602a8152602001806116ed602a913960400191505060405180910390fd5b60606114818484600085611489565b949350505050565b6060824710156114ca5760405162461bcd60e51b81526004018080602001828103825260268152602001806116856026913960400191505060405180910390fd5b6114d3856115da565b611524576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b602083106115635780518252601f199092019160209182019101611544565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146115c5576040519150601f19603f3d011682016040523d82523d6000602084013e6115ca565b606091505b5091509150610edc8282866115e0565b3b151590565b606083156115ef57508161110e565b8251156115ff5782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611649578181015183820152602001611631565b50505050905090810190601f1680156116765780820380516001836020036101000a031916815260200191505b509250505060405180910390fdfe416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7748536861726573526577617264506f6f6c3a206578697374696e6720706f6f6c3f5361666545524332303a204552433230206f7065726174696f6e20646964206e6f74207375636365656448536861726573526577617264506f6f6c3a2063616c6c6572206973206e6f7420746865206f70657261746f72a2646970667358221220e6825219066483877613943abfd047adb0cc3493b2da7f602f95a2d2cb60e26a64736f6c634300060c0033000000000000000000000000153478b3dd08b7e889ca062abc08059f894bedb20000000000000000000000000000000000000000000000000000000061bcacf8

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

000000000000000000000000153478b3dd08b7e889ca062abc08059f894bedb20000000000000000000000000000000000000000000000000000000061bcacf8

-----Decoded View---------------
Arg [0] : _bshare (address): 0x153478b3dd08b7e889ca062abc08059f894bedb2
Arg [1] : _poolStartTime (uint256): 1639755000

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000153478b3dd08b7e889ca062abc08059f894bedb2
Arg [1] : 0000000000000000000000000000000000000000000000000000000061bcacf8


Deployed ByteCode Sourcemap

22496:10643:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23970:51;;;:::i;:::-;;;;;;;;;;;;;;;;23363:26;;;;;;;;;;;;;;;;-1:-1:-1;23363:26:0;;:::i;:::-;;;;-1:-1:-1;;;;;23363:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23608:34;;;:::i;26547:353::-;;;;;;;;;;;;;;;;-1:-1:-1;26547:353:0;;;;;;;:::i;:::-;;26977:661;;;;;;;;;;;;;;;;-1:-1:-1;26977:661:0;;;;;;;:::i;30658:819::-;;;;;;;;;;;;;;;;-1:-1:-1;30658:819:0;;;;;;;:::i;28834:918::-;;;;;;;;;;;;;;;;-1:-1:-1;28834:918:0;;:::i;31548:377::-;;;;;;;;;;;;;;;;-1:-1:-1;31548:377:0;;:::i;32526:610::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;32526:610:0;;;;;;;;;;;;;;;;;:::i;22617:23::-;;;:::i;:::-;;;;-1:-1:-1;;;;;22617:23:0;;;;;;;;;;;;;;23695:28;;;:::i;28578:180::-;;;:::i;23774:26::-;;;:::i;23447:64::-;;;;;;;;;;;;;;;;-1:-1:-1;23447:64:0;;;;;;-1:-1:-1;;;;;23447:64:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;23914:37;;;:::i;25170:1279::-;;;;;;;;;;;;;;;;-1:-1:-1;25170:1279:0;;;-1:-1:-1;;;;;25170:1279:0;;;;;;;;;;;;;;;;;:::i;23307:20::-;;;:::i;23809:49::-;;;:::i;32417:101::-;;;;;;;;;;;;;;;;-1:-1:-1;32417:101:0;-1:-1:-1;;;;;32417:101:0;;:::i;27704:791::-;;;;;;;;;;;;;;;;-1:-1:-1;27704:791:0;;;;;;-1:-1:-1;;;;;27704:791:0;;:::i;29787:835::-;;;;;;;;;;;;;;;;-1:-1:-1;29787:835:0;;;;;;;:::i;23970:51::-;24010:11;23970:51;:::o;23363:26::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23363:26:0;;;;-1:-1:-1;23363:26:0;;;;;;;:::o;23608:34::-;;;;:::o;26547:353::-;24732:8;;-1:-1:-1;;;;;24732:8:0;24744:10;24732:22;24724:80;;;;-1:-1:-1;;;24724:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26626:17:::1;:15;:17::i;:::-;26654:21;26678:8;26687:4;26678:14;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;;26707;::::0;::::1;::::0;26678;;-1:-1:-1;26707:14:0::1;;26703:150;;;26756:85;26815:11;26756:36;26776:4;:15;;;26756;;:19;;:36;;;;:::i;:::-;:40:::0;::::1;:85::i;:::-;26738:15;:103:::0;26703:150:::1;26863:15;;:29:::0;-1:-1:-1;26547:353:0:o;26977:661::-;27062:7;27099;27086:9;:20;27082:34;;-1:-1:-1;27115:1:0;27108:8;;27082:34;27142:11;;27131:7;:22;27127:504;;27187:11;;27174:9;:24;27170:38;;-1:-1:-1;27207:1:0;27200:8;;27170:38;27240:13;;27227:9;:26;27223:90;;27262:51;27297:15;;27262:30;27278:13;;27262:11;;:15;;:30;;;;:::i;:::-;:34;;:51::i;:::-;27255:58;;;;27223:90;27335:47;27366:15;;27335:26;27351:9;27335:11;;:15;;:26;;;;:::i;27127:504::-;27430:13;;27419:7;:24;27415:38;;-1:-1:-1;27452:1:0;27445:8;;27415:38;27485:13;;27472:9;:26;27468:86;;27507:47;27538:15;;27507:26;27519:13;;27507:7;:11;;:26;;;;:::i;27468:86::-;27603:15;;27576:43;;:22;:7;27588:9;27576:11;:22::i;27127:504::-;26977:661;;;;:::o;30658:819::-;30725:15;30743:10;30725:28;;30764:21;30788:8;30797:4;30788:14;;;;;;;;;;;;;;;;30837;;;:8;:14;;;;;;-1:-1:-1;;;;;30837:23:0;;;;;;;;;30879:11;;30788:14;;;;;;;;-1:-1:-1;30879:22:0;-1:-1:-1;30879:22:0;30871:53;;;;;-1:-1:-1;;;30871:53:0;;;;;;;;;;;;-1:-1:-1;;;30871:53:0;;;;;;;;;;;;;;;30935:16;30946:4;30935:10;:16::i;:::-;30962;30981:71;31036:4;:15;;;30981:50;31026:4;30981:40;30997:4;:23;;;30981:4;:11;;;:15;;:40;;;;:::i;:::-;:44;;:50::i;:::-;:54;;:71::i;:::-;30962:90;-1:-1:-1;31067:12:0;;31063:132;;31096:38;31116:7;31125:8;31096:19;:38::i;:::-;31154:29;;;;;;;;-1:-1:-1;;;;;31154:29:0;;;;;;;;;;;;;31063:132;31209:11;;31205:138;;31251:11;;:24;;31267:7;31251:15;:24::i;:::-;31237:38;;31290:10;;:41;;-1:-1:-1;;;;;31290:10:0;31314:7;31323;31290:23;:41::i;:::-;31387:23;;;;31371:11;;:50;;31416:4;;31371:40;;:15;:40::i;:50::-;31353:15;;;:68;31437:32;;;;;;;;31455:4;;-1:-1:-1;;;;;31437:32:0;;;;;;;;;;;;30658:819;;;;;;:::o;28834:918::-;28886:21;28910:8;28919:4;28910:14;;;;;;;;;;;;;;;;;;28886:38;;28958:4;:19;;;28939:15;:38;28935:77;;28994:7;;;28935:77;29044:10;;:35;;;-1:-1:-1;;;29044:35:0;;29073:4;29044:35;;;;;;29022:19;;-1:-1:-1;;;;;29044:10:0;;:20;;:35;;;;;;;;;;;;;;:10;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29044:35:0;;-1:-1:-1;29094:16:0;29090:107;;-1:-1:-1;29149:15:0;29127:19;;;;:37;29179:7;;29090:107;29212:14;;;;;;29207:138;;29243:14;;;;:21;;-1:-1:-1;;29243:21:0;29260:4;29243:21;;;;;;29317:15;;;29297;;:36;;:19;:36::i;:::-;29279:15;:54;29207:138;29359:15;;:19;29355:342;;29395:24;29422:56;29441:4;:19;;;29462:15;29422:18;:56::i;:::-;29395:83;;29493:21;29517:58;29559:15;;29517:37;29538:4;:15;;;29517:16;:20;;:37;;;;:::i;:58::-;29493:82;-1:-1:-1;29616:69:0;29644:40;29672:11;29644:23;29493:82;29662:4;29644:17;:23::i;:40::-;29616:23;;;;;:27;:69::i;:::-;29590:23;;;:95;-1:-1:-1;;29355:342:0;-1:-1:-1;29729:15:0;29707:19;;;;:37;28834:918;;:::o;31548:377::-;31607:21;31631:8;31640:4;31631:14;;;;;;;;;;;;;;;;31680;;;:8;:14;;;;;;31695:10;31680:26;;;;;;;31735:11;;31757:15;;;-1:-1:-1;31783:15:0;;:19;;;;31631:14;;;;;31813:10;;31631:14;;-1:-1:-1;31680:26:0;;31735:11;31813:44;;-1:-1:-1;;;;;31813:10:0;;;;;31735:11;31813:23;:44::i;:::-;31873;;;;;;;;31903:4;;31891:10;;31873:44;;;;;;;;;31548:377;;;;:::o;32526:610::-;24732:8;;-1:-1:-1;;;;;24732:8:0;24744:10;24732:22;24724:80;;;;-1:-1:-1;;;24724:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32662:11:::1;;32676:7;32662:21;32644:15;:39;32640:447;;;32820:6;::::0;-1:-1:-1;;;;;32810:16:0;;::::1;32820:6:::0;::::1;32810:16;;32802:35;;;::::0;;-1:-1:-1;;;32802:35:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;32802:35:0;;;;;;;;;;;;;::::1;;32869:8;:15:::0;32852:14:::1;32899:177;32927:6;32921:3;:12;32899:177;;;32961:21;32985:8;32994:3;32985:13;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;;33035:10:::0;;32985:13;;-1:-1:-1;;;;;;33025:20:0;;::::1;33035:10:::0;::::1;33025:20;;33017:43;;;::::0;;-1:-1:-1;;;33017:43:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;33017:43:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;32935:5:0::1;;32899:177;;;;32640:447;;33097:31;-1:-1:-1::0;;;;;33097:19:0;::::1;33117:2:::0;33121:6;33097:19:::1;:31::i;:::-;32526:610:::0;;;:::o;22617:23::-;;;-1:-1:-1;;;;;22617:23:0;;:::o;23695:28::-;;;;:::o;28578:180::-;28640:8;:15;28623:14;28666:85;28694:6;28688:3;:12;28666:85;;;28724:15;28735:3;28724:10;:15::i;:::-;28702:5;;28666:85;;;;28578:180;:::o;23774:26::-;;;;:::o;23447:64::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23914:37::-;;;;:::o;25170:1279::-;24732:8;;-1:-1:-1;;;;;24732:8:0;24744:10;24732:22;24724:80;;;;-1:-1:-1;;;24724:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25336:26:::1;25355:6;25336:18;:26::i;:::-;25377:11;25373:61;;;25405:17;:15;:17::i;:::-;25466:13;;25448:15;:31;25444:534;;;25533:20:::0;25529:243:::1;;-1:-1:-1::0;25592:13:0::1;::::0;25529:243:::1;;;25668:13;;25650:15;:31;25646:111;;;-1:-1:-1::0;25724:13:0::1;::::0;25646:111:::1;25444:534;;;25840:20:::0;;;:57:::1;;;25882:15;25864;:33;25840:57;25836:131;;;-1:-1:-1::0;25936:15:0::1;25836:131;25988:15;26035:13;;26016:15;:32;;26015:83;;;;26082:15;26063;:34;;26015:83;26123:214;::::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;;;;;26123:214:0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;-1:-1:-1;26123:214:0;;;;;;;::::1;::::0;::::1;::::0;;;;;;26109:8:::1;:229:::0;;::::1;::::0;::::1;::::0;;;;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;;;;26109:229:0::1;::::0;;;::::1;;::::0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;26109:229:0::1;::::0;::::1;;::::0;;;::::1;::::0;;;26123:214;;-1:-1:-1;26349:93:0::1;;26398:15;::::0;:32:::1;::::0;26418:11;26398:19:::1;:32::i;:::-;26380:15;:50:::0;26349:93:::1;24815:1;25170:1279:::0;;;;:::o;23307:20::-;;;-1:-1:-1;;;;;23307:20:0;;:::o;23809:49::-;;;;:::o;32417:101::-;24732:8;;-1:-1:-1;;;;;24732:8:0;24744:10;24732:22;24724:80;;;;-1:-1:-1;;;24724:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32490:8:::1;:20:::0;;-1:-1:-1;;;;;;32490:20:0::1;-1:-1:-1::0;;;;;32490:20:0;;;::::1;::::0;;;::::1;::::0;;32417:101::o;27704:791::-;27778:7;27798:21;27822:8;27831:4;27822:14;;;;;;;;;;;;;;;;27871;;;:8;:14;;;;;;;-1:-1:-1;;;;;27871:21:0;;;;;;;;;;;27822:14;;;;;;;27932:23;;;;27988:10;;:35;;-1:-1:-1;;;27988:35:0;;28017:4;27988:35;;;;;;27822:14;;-1:-1:-1;27871:21:0;;27932:23;;27822:14;;27988:10;;;:20;;:35;;;;;;;;;;:10;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27988:35:0;28056:19;;;;27988:35;;-1:-1:-1;28038:15:0;:37;:57;;;;-1:-1:-1;28079:16:0;;;28038:57;28034:370;;;28112:24;28139:56;28158:4;:19;;;28179:15;28139:18;:56::i;:::-;28112:83;;28210:21;28234:58;28276:15;;28234:37;28255:4;:15;;;28234:16;:20;;:37;;;;:::i;:58::-;28210:82;-1:-1:-1;28328:64:0;28351:40;28379:11;28351:23;28210:82;28369:4;28351:17;:23::i;:40::-;28328:18;;:22;:64::i;:::-;28307:85;;28034:370;;;28421:66;28471:4;:15;;;28421:45;28461:4;28421:35;28437:18;28421:4;:11;;;:15;;:35;;;;:::i;:66::-;28414:73;27704:791;-1:-1:-1;;;;;;;27704:791:0:o;29787:835::-;29853:15;29871:10;29853:28;;29892:21;29916:8;29925:4;29916:14;;;;;;;;;;;;;;;;29965;;;:8;:14;;;;;;-1:-1:-1;;;;;29965:23:0;;;;;;;;;29916:14;;;;;;;;-1:-1:-1;29999:16:0;29974:4;29999:10;:16::i;:::-;30030:11;;:15;30026:296;;30062:16;30081:71;30136:4;:15;;;30081:50;30126:4;30081:40;30097:4;:23;;;30081:4;:11;;;:15;;:40;;;;:::i;:71::-;30062:90;-1:-1:-1;30171:12:0;;30167:144;;30204:38;30224:7;30233:8;30204:19;:38::i;:::-;30266:29;;;;;;;;-1:-1:-1;;;;;30266:29:0;;;;;;;;;;;;;30167:144;30026:296;;30336:11;;30332:157;;30364:10;;:60;;-1:-1:-1;;;;;30364:10:0;30392:7;30409:4;30416:7;30364:27;:60::i;:::-;30453:11;;:24;;30469:7;30453:15;:24::i;:::-;30439:38;;30332:157;30533:23;;;;30517:11;;:50;;30562:4;;30517:40;;:15;:40::i;:50::-;30499:15;;;:68;30583:31;;;;;;;;30600:4;;-1:-1:-1;;;;;30583:31:0;;;;;;;;;;;;29787:835;;;;;:::o;6167:158::-;6225:7;6258:1;6253;:6;;6245:49;;;;;-1:-1:-1;;;6245:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6312:5:0;;;6167:158::o;5705:179::-;5763:7;5795:5;;;5819:6;;;;5811:46;;;;;-1:-1:-1;;;5811:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;5875:1;5705:179;-1:-1:-1;;;5705:179:0:o;6584:220::-;6642:7;6666:6;6662:20;;-1:-1:-1;6681:1:0;6674:8;;6662:20;6705:5;;;6709:1;6705;:5;:1;6729:5;;;;;:10;6721:56;;;;-1:-1:-1;;;6721:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7282:153;7340:7;7372:1;7368;:5;7360:44;;;;;-1:-1:-1;;;7360:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;7426:1;7422;:5;;;;;;;7282:153;-1:-1:-1;;;7282:153:0:o;32043:366::-;32143:6;;:31;;;-1:-1:-1;;;32143:31:0;;32168:4;32143:31;;;;;;32122:18;;-1:-1:-1;;;;;32143:6:0;;:16;;:31;;;;;;;;;;;;;;:6;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32143:31:0;;-1:-1:-1;32189:14:0;;32185:217;;32234:10;32224:7;:20;32220:171;;;32265:6;;:36;;-1:-1:-1;;;;;32265:6:0;32285:3;32290:10;32265:19;:36::i;:::-;32220:171;;;32342:6;;:33;;-1:-1:-1;;;;;32342:6:0;32362:3;32367:7;19129:177;19239:58;;;-1:-1:-1;;;;;19239:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19239:58:0;-1:-1:-1;;;19239:58:0;;;19212:86;;19232:5;;19212:19;:86::i;24832:263::-;24917:8;:15;24900:14;24943:145;24971:6;24965:3;:12;24943:145;;;25032:6;-1:-1:-1;;;;;25009:29:0;:8;25018:3;25009:13;;;;;;;;;;;;;;;;;;;;;:19;-1:-1:-1;;;;;25009:19:0;:29;;25001:75;;;;-1:-1:-1;;;25001:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24979:5;;24943:145;;19314:205;19442:68;;;-1:-1:-1;;;;;19442:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19442:68:0;-1:-1:-1;;;19442:68:0;;;19415:96;;19435:5;;19415:19;:96::i;:::-;19314:205;;;;:::o;21434:761::-;21858:23;21884:69;21912:4;21884:69;;;;;;;;;;;;;;;;;21892:5;-1:-1:-1;;;;;21884:27:0;;;:69;;;;;:::i;:::-;21968:17;;21858:95;;-1:-1:-1;21968:21:0;21964:224;;22110:10;22099:30;;;;;;;;;;;;;;;-1:-1:-1;22099:30:0;22091:85;;;;-1:-1:-1;;;22091:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14094:195;14197:12;14229:52;14251:6;14259:4;14265:1;14268:12;14229:21;:52::i;:::-;14222:59;14094:195;-1:-1:-1;;;;14094:195:0:o;15146:530::-;15273:12;15331:5;15306:21;:30;;15298:81;;;;-1:-1:-1;;;15298:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15398:18;15409:6;15398:10;:18::i;:::-;15390:60;;;;;-1:-1:-1;;;15390:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;15524:12;15538:23;15565:6;-1:-1:-1;;;;;15565:11:0;15585:5;15593:4;15565:33;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;15565:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15523:75;;;;15616:52;15634:7;15643:10;15655:12;15616:17;:52::i;11176:422::-;11543:20;11582:8;;;11176:422::o;17686:742::-;17801:12;17830:7;17826:595;;;-1:-1:-1;17861:10:0;17854:17;;17826:595;17975:17;;:21;17971:439;;18238:10;18232:17;18299:15;18286:10;18282:2;18278:19;18271:44;18186:148;18381:12;18374:20;;-1:-1:-1;;;18374:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Swarm Source

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