Contract 0xC3477ad3755DCD84C7a100807ED9c53fb3b8a0c8 2

 
 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x9d7e0cbeb5ae65bdc8c23634ff2efd893e8079e4188c000f0ec8081c7810dcf6Exit57865272021-03-18 11:02:26306 days 17 hrs ago0xb06aad5379b1a8fe61caede0c0e80b9eb5722670 IN  0xc3477ad3755dcd84c7a100807ed9c53fb3b8a0c80 BNB0.0015475956
0x96fc7dd235de67b03dc1f19061a501465d4da7a300dcb01272f7c16dde003f7cWithdraw57701022021-03-17 21:19:50307 days 6 hrs ago0xb06aad5379b1a8fe61caede0c0e80b9eb5722670 IN  0xc3477ad3755dcd84c7a100807ed9c53fb3b8a0c80 BNB0.0011029652
0x480f745000ce36e75d37d4c4287227772f8a49aeac7e1ceab977c30dc53237b8Stake57697422021-03-17 21:01:50307 days 7 hrs ago0xb06aad5379b1a8fe61caede0c0e80b9eb5722670 IN  0xc3477ad3755dcd84c7a100807ed9c53fb3b8a0c80 BNB0.0015133069
0xa6902a9e211718ea974d2945179d3cdc57e980c514238b5bfdcce43d70f85b6aExit55808832021-03-11 7:22:29313 days 20 hrs ago0x7e936787dfd63eb78ca5b1808a03b2a876eeee81 IN  0xc3477ad3755dcd84c7a100807ed9c53fb3b8a0c80 BNB0.00131052
0xe41186131aa93d9df74b56203d5e8267f9322636542207b22c18b9d0ef2fdc78Stake55645072021-03-10 17:43:26314 days 10 hrs ago0x7e936787dfd63eb78ca5b1808a03b2a876eeee81 IN  0xc3477ad3755dcd84c7a100807ed9c53fb3b8a0c80 BNB0.00126048
0xf758cf13e25cb2e08963229c272feb4d7ee275a3da44acc3c765272e6ed8747fExit55119082021-03-08 21:49:37316 days 6 hrs ago0x163a141869bbe9705a8fe9a4e8d72dbaa2c07a9b IN  0xc3477ad3755dcd84c7a100807ed9c53fb3b8a0c80 BNB0.00131052
0x5c9b03fcf45046e7ac49c8b24f2490165f90e2f4894718abae8998df83b089faStake55109012021-03-08 20:59:16316 days 7 hrs ago0x163a141869bbe9705a8fe9a4e8d72dbaa2c07a9b IN  0xc3477ad3755dcd84c7a100807ed9c53fb3b8a0c80 BNB0.0011106
0x7d980e6d49681c52afc58c76bc0526a606ae5bfecac5075bbc94ac4e8e92dd7bExit55106072021-03-08 20:44:34316 days 7 hrs ago0x163a141869bbe9705a8fe9a4e8d72dbaa2c07a9b IN  0xc3477ad3755dcd84c7a100807ed9c53fb3b8a0c80 BNB0.00161052
0x5dc6c87ed6b2656ba85c7202b933484610a21a44e9861d96b5fdf823144ec946Stake55097662021-03-08 20:02:31316 days 8 hrs ago0x163a141869bbe9705a8fe9a4e8d72dbaa2c07a9b IN  0xc3477ad3755dcd84c7a100807ed9c53fb3b8a0c80 BNB0.00131935
0x32a24a39d3812b43ffdc65989a051f81679f42351a57de2874ccdbbd6ba2d8bcWithdraw52798542021-02-28 18:52:38324 days 9 hrs ago0x858ec3405cb3b09696d5238ac1a5a04e46d35c54 IN  0xc3477ad3755dcd84c7a100807ed9c53fb3b8a0c80 BNB0.0009854272
0x8319bff675338e7b0f1ea60a0b952ed7a4a88a15c5ce5f736e4b1baf4006afb3Stake52797662021-02-28 18:48:14324 days 9 hrs ago0x858ec3405cb3b09696d5238ac1a5a04e46d35c54 IN  0xc3477ad3755dcd84c7a100807ed9c53fb3b8a0c80 BNB0.0015722045
0x3264b7f67503aff25c4d2f24c22d12a3cf509ffe4570c2f77fd1e4f9f1a0065bWithdraw40983922021-01-18 13:00:41365 days 15 hrs ago0x7abc42e2cfd1337b2bf069b7ab90ced1b6eed2b7 IN  0xc3477ad3755dcd84c7a100807ed9c53fb3b8a0c80 BNB0.00225942
0xa3faf653b2536fd0266acd93b0d0e3adf75e744632e200ad9bb3a4a9b5c9b82eStake37911802021-01-07 20:58:19376 days 7 hrs ago0x7abc42e2cfd1337b2bf069b7ab90ced1b6eed2b7 IN  0xc3477ad3755dcd84c7a100807ed9c53fb3b8a0c80 BNB0.0025212
0xa9e9a7611de7d2e9d54321bfab2d7283b736b340b64d9b05e7a19ec66e9b68d4Withdraw36942992021-01-04 12:11:27379 days 15 hrs ago0xefd0199657b444856e3259ed8e3c39ee43cf51dc IN  0xc3477ad3755dcd84c7a100807ed9c53fb3b8a0c80 BNB0.00225966
0xe3d02412418dd2022ae5fc2c45d838228277ded4c036c2c2150700301e18035aGet Reward36941792021-01-04 12:05:27379 days 16 hrs ago0xefd0199657b444856e3259ed8e3c39ee43cf51dc IN  0xc3477ad3755dcd84c7a100807ed9c53fb3b8a0c80 BNB0.00223316
0x8ccc84a28b15e41a0b63f5c7e6673b8c82877fa031f20f44a320847d12f4c966Withdraw28976552020-12-07 19:21:12407 days 8 hrs ago0x60cafdbcdaac781ba04cee6595bf4de228bfb4b7 IN  0xc3477ad3755dcd84c7a100807ed9c53fb3b8a0c80 BNB0.00184216
0x79da2098bf159b6f01dba5a05b10cef0dff77465be9b2bb11ba949d3d6118af5Withdraw27484942020-12-02 14:52:18412 days 13 hrs ago0xd9112665418ac2609a721577fbe91f1f12eff887 IN  0xc3477ad3755dcd84c7a100807ed9c53fb3b8a0c80 BNB0.00225942
0x6c4728f904e75f6f1624c5c9534ae64e05602f76d537ef9f6e6fe68888b6204aStake26089542020-11-27 18:29:48417 days 9 hrs ago0xd9112665418ac2609a721577fbe91f1f12eff887 IN  0xc3477ad3755dcd84c7a100807ed9c53fb3b8a0c80 BNB0.0025212
0x27e04cb8e2802049ac92b82ba0bae9e06296fdb77188f79413d52b4a2f77c041Withdraw25180082020-11-24 14:34:44420 days 13 hrs ago0x1153e31b1a7d46ffd1ed4c577be915e5823fa0fb IN  0xc3477ad3755dcd84c7a100807ed9c53fb3b8a0c80 BNB0.00255942
0xff40b2d3c2ebd1a326f2f97b903625ccdcab0ea13fdd9518ec609ea44580b560Stake24680052020-11-22 20:49:11422 days 7 hrs ago0x60cafdbcdaac781ba04cee6595bf4de228bfb4b7 IN  0xc3477ad3755dcd84c7a100807ed9c53fb3b8a0c80 BNB0.00222144
0x60e1b314896a384c0324b36c91c68d456738924583555494551fe88aadfc998eWithdraw23602692020-11-19 2:55:49426 days 1 hr ago0x5d4bde479e649d77253f0786057b9d76b539214b IN  0xc3477ad3755dcd84c7a100807ed9c53fb3b8a0c80 BNB0.00184216
0x957192516088628a6c2511a48e2e5d70fd7fb7ae865038b1b82417b65928312aGet Reward23334352020-11-18 4:31:33426 days 23 hrs ago0x5d4bde479e649d77253f0786057b9d76b539214b IN  0xc3477ad3755dcd84c7a100807ed9c53fb3b8a0c80 BNB0.00183128
0x0aab0258209ef66599e266363662a2f2987ebd9a45f998be3b4723bca3017be0Withdraw23124182020-11-17 10:57:37427 days 17 hrs ago0xa8ff85e01ce596d4f3305d43cc2a70a9ee018adf IN  0xc3477ad3755dcd84c7a100807ed9c53fb3b8a0c80 BNB0.00184216
0xc0fec7d9715a39dd4c43c59adbc465e9bcbb252bf49b2c6665eb6df0a126cc5eGet Reward22958352020-11-16 21:06:51428 days 7 hrs ago0x5d4bde479e649d77253f0786057b9d76b539214b IN  0xc3477ad3755dcd84c7a100807ed9c53fb3b8a0c80 BNB0.00183128
0xff0b8ee3c0661726f60c41a8d25f0e63c1ef1d3b347be60c72e12c6d256cd1c2Stake22923212020-11-16 18:10:36428 days 9 hrs ago0xa8ff85e01ce596d4f3305d43cc2a70a9ee018adf IN  0xc3477ad3755dcd84c7a100807ed9c53fb3b8a0c80 BNB0.00222144
[ Download CSV Export 
Latest 1 internal transaction
Parent Txn Hash Block From To Value
0x76afb3006eb7cbd4e610b7df6bd0bded2054f666d1ea75f399579d7625c1f45c4165552020-09-12 14:37:25493 days 13 hrs ago 0x4bf38c704675a148e4ecb8142b8e505591092e97  Contract Creation0 BNB
[ Download CSV Export 
Loading

Similar Match Source Code
Note: This contract matches the deployed ByteCode of the Source Code for Contract 0xa789383b848bcd7c60975094ae3ba5444ed70103

Contract Name:
FomoCow

Compiler Version
v0.5.16+commit.9c3226ce

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at BscScan.com on 2020-09-05
*/

// File: @openzeppelin/contracts/math/Math.sol

pragma solidity ^0.5.0;

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

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

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

// File: @openzeppelin/upgrades/contracts/Initializable.sol

pragma solidity >=0.4.24 <0.7.0;


/**
 * @title Initializable
 *
 * @dev Helper contract to support initializer functions. To use it, replace
 * the constructor with a function that has the `initializer` modifier.
 * WARNING: Unlike constructors, initializer functions must be manually
 * invoked. This applies both to deploying an Initializable contract, as well
 * as extending an Initializable contract via inheritance.
 * WARNING: When used with inheritance, manual care must be taken to not invoke
 * a parent initializer twice, or ensure that all initializers are idempotent,
 * because this is not dealt with automatically as with constructors.
 */
contract Initializable {

  /**
   * @dev Indicates that the contract has been initialized.
   */
  bool private initialized;

  /**
   * @dev Indicates that the contract is in the process of being initialized.
   */
  bool private initializing;

  /**
   * @dev Modifier to use in the initializer function of a contract.
   */
  modifier initializer() {
    require(initializing || isConstructor() || !initialized, "Contract instance has already been initialized");

    bool isTopLevelCall = !initializing;
    if (isTopLevelCall) {
      initializing = true;
      initialized = true;
    }

    _;

    if (isTopLevelCall) {
      initializing = false;
    }
  }

  /// @dev Returns true if and only if the function is running in the constructor
  function isConstructor() private view returns (bool) {
    // extcodesize checks the size of the code stored in an address, and
    // address returns the current address. Since the code is still not
    // deployed when running a constructor, any checks on its code size will
    // yield zero, making it an effective way to detect if a contract is
    // under construction or not.
    address self = address(this);
    uint256 cs;
    assembly { cs := extcodesize(self) }
    return cs == 0;
  }

  // Reserved storage space to allow for layout changes in the future.
  uint256[50] private ______gap;
}

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol

pragma solidity ^0.5.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP. Does not include
 * the optional functions; to access them see {ERC20Detailed}.
 */
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/SafeMath.sol

pragma solidity ^0.5.0;

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

        return c;
    }

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

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     * - Subtraction cannot overflow.
     *
     * _Available since v2.4.0._
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     *
     * _Available since v2.4.0._
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     *
     * _Available since v2.4.0._
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

// File: @openzeppelin/contracts/utils/Address.sol

pragma solidity ^0.5.5;

/**
 * @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) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    /**
     * @dev Converts an `address` into `address payable`. Note that this is
     * simply a type cast: the actual underlying value is not changed.
     *
     * _Available since v2.4.0._
     */
    function toPayable(address account) internal pure returns (address payable) {
        return address(uint160(account));
    }

    /**
     * @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].
     *
     * _Available since v2.4.0._
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

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

// File: @openzeppelin/contracts/token/ERC20/SafeERC20.sol

pragma solidity ^0.5.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 ERC20;` 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));
    }

    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.

        // A Solidity high level call has three parts:
        //  1. The target address is checked to verify it contains contract code
        //  2. The call itself is made, and success asserted
        //  3. The return value is decoded, which in turn checks the size of the returned data.
        // solhint-disable-next-line max-line-length
        require(address(token).isContract(), "SafeERC20: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = address(token).call(data);
        require(success, "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/StakePool.sol

pragma solidity ^0.5.16;





contract StakePool is Initializable {
    using SafeMath for uint256;
    using SafeERC20 for IERC20;

    IERC20 public stakeToken;

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

    function initialize(address _token) public initializer {
        stakeToken = IERC20(_token);
    }

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

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

    function _stake(uint256 amount) internal {
        _totalSupply = _totalSupply.add(amount);
        _balances[msg.sender] = _balances[msg.sender].add(amount);
        stakeToken.safeTransferFrom(msg.sender, address(this), amount);
    }

    function _withdraw(uint256 amount) internal {
        _totalSupply = _totalSupply.sub(amount);
        _balances[msg.sender] = _balances[msg.sender].sub(amount);
        stakeToken.safeTransfer(msg.sender, amount);
    }
}

// File: contracts/FomoCow.sol

pragma solidity ^0.5.16;



/**
 * @dev https://cow.money
 * MILK will be halved at each period.
 */
 
contract FomoCow is StakePool {
    IERC20 public yieldToken;

    uint256 public duration;
    uint256 public initreward;
    uint256 public starttime;
    uint256 public periodFinish = 0;
    uint256 public rewardRate = 0;
    uint256 public lastUpdateTime;
    uint256 public rewardPerTokenStored;
    uint256 public totalRewards = 0;
    address public deployer;

    mapping(address => uint256) public userRewardPerTokenPaid;
    mapping(address => uint256) public rewards;

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

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

    constructor () public {
        deployer = msg.sender;
    }

    function initialize(
        address _stakeToken, 
        address _yieldToken, 
        uint256 _duration, 
        uint256 _initreward, 
        uint256 _starttime
    ) public initializer 
    {
        require(deployer == msg.sender, "ERROR: Forbidden");

        super.initialize(_stakeToken);
        yieldToken = IERC20(_yieldToken);

        duration = _duration;
        starttime = _starttime;
        notifyRewardAmount(_initreward.mul(50).div(100));
    }

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

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

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

    function stake(uint256 amount) public updateReward(msg.sender) checkhalve checkStart{
        require(amount > 0, "ERROR: Cannot stake 0");
        super._stake(amount);
        emit Staked(msg.sender, amount);
    }

    function withdraw(uint256 amount) public updateReward(msg.sender) checkhalve checkStart{
        require(amount > 0, "ERROR: Cannot withdraw 0");
        super._withdraw(amount);
        emit Withdrawn(msg.sender, amount);
    }

    function exit() external {
        withdraw(balanceOf(msg.sender));
        getReward();
    }

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

    modifier checkhalve(){
        if (block.timestamp >= periodFinish) {
            initreward = initreward.mul(50).div(100);

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

    modifier checkStart(){
        require(block.timestamp > starttime,"ERROR: Not start");
        _;
    }

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

Contract Security Audit

Contract ABI

[{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"RewardAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"RewardPaid","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Staked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdrawn","type":"event"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"deployer","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"duration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"earned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"exit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"getReward","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"initialize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_stakeToken","type":"address"},{"internalType":"address","name":"_yieldToken","type":"address"},{"internalType":"uint256","name":"_duration","type":"uint256"},{"internalType":"uint256","name":"_initreward","type":"uint256"},{"internalType":"uint256","name":"_starttime","type":"uint256"}],"name":"initialize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"initreward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"lastTimeRewardApplicable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"lastUpdateTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"periodFinish","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"rewardPerToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"rewardPerTokenStored","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"rewardRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"stake","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"stakeToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"starttime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userRewardPerTokenPaid","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"yieldToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"}]

60806040526000603a556000603b556000603e5534801561001f57600080fd5b5033603f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061218b806100706000396000f3fe608060405234801561001057600080fd5b50600436106101575760003560e01c80638b876347116100c3578063cd3daf9d1161007c578063cd3daf9d146104ea578063d13f90b414610508578063d5f394881461058a578063df136d65146105d4578063e9fad8ee146105f2578063ebe2b12b146105fc57610157565b80638b876347146103c65780638da588971461041e5780639c907b581461043c578063a694fc3a1461045a578063c4d66de814610488578063c8f33c91146104cc57610157565b80633d18b912116101155780633d18b9121461029457806351ed6a301461029e57806370a08231146102e857806376d5de85146103405780637b0a47ee1461038a57806380faa57d146103a857610157565b80628cc2621461015c5780630700037d146101b45780630e15561a1461020c5780630fb5a6b41461022a57806318160ddd146102485780632e1a7d4d14610266575b600080fd5b61019e6004803603602081101561017257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061061a565b6040518082815260200191505060405180910390f35b6101f6600480360360208110156101ca57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610701565b6040518082815260200191505060405180910390f35b610214610719565b6040518082815260200191505060405180910390f35b61023261071f565b6040518082815260200191505060405180910390f35b610250610725565b6040518082815260200191505060405180910390f35b6102926004803603602081101561027c57600080fd5b810190808035906020019092919050505061072f565b005b61029c610a05565b005b6102a6610d20565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61032a600480360360208110156102fe57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d46565b6040518082815260200191505060405180910390f35b610348610d8f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610392610db5565b6040518082815260200191505060405180910390f35b6103b0610dbb565b6040518082815260200191505060405180910390f35b610408600480360360208110156103dc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610dce565b6040518082815260200191505060405180910390f35b610426610de6565b6040518082815260200191505060405180910390f35b610444610dec565b6040518082815260200191505060405180910390f35b6104866004803603602081101561047057600080fd5b8101908080359060200190929190505050610df2565b005b6104ca6004803603602081101561049e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506110c8565b005b6104d4611209565b6040518082815260200191505060405180910390f35b6104f261120f565b6040518082815260200191505060405180910390f35b610588600480360360a081101561051e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001909291905050506112a7565b005b6105926114f5565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105dc61151b565b6040518082815260200191505060405180910390f35b6105fa611521565b005b61060461153c565b6040518082815260200191505060405180910390f35b60006106fa604160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546106ec670de0b6b3a76400006106de6106c7604060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546106b961120f565b61154290919063ffffffff16565b6106d088610d46565b61158c90919063ffffffff16565b61161290919063ffffffff16565b61165c90919063ffffffff16565b9050919050565b60416020528060005260406000206000915090505481565b603e5481565b60375481565b6000603454905090565b3361073861120f565b603d81905550610746610dbb565b603c81905550600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610813576107898161061a565b604160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550603d54604060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b603a5442106108bd576108456064610837603260385461158c90919063ffffffff16565b61161290919063ffffffff16565b60388190555061086260375460385461161290919063ffffffff16565b603b8190555061087d6037544261165c90919063ffffffff16565b603a819055507fde88a922e0d3b88b24e9623efeb464919c6bf9f66857a65e2bfcf2ce87a9433d6038546040518082815260200191505060405180910390a15b6039544211610934576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4552524f523a204e6f742073746172740000000000000000000000000000000081525060200191505060405180910390fd5b600082116109aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f4552524f523a2043616e6e6f742077697468647261772030000000000000000081525060200191505060405180910390fd5b6109b3826116e4565b3373ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5836040518082815260200191505060405180910390a25050565b33610a0e61120f565b603d81905550610a1c610dbb565b603c81905550600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610ae957610a5f8161061a565b604160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550603d54604060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b603a544210610b9357610b1b6064610b0d603260385461158c90919063ffffffff16565b61161290919063ffffffff16565b603881905550610b3860375460385461161290919063ffffffff16565b603b81905550610b536037544261165c90919063ffffffff16565b603a819055507fde88a922e0d3b88b24e9623efeb464919c6bf9f66857a65e2bfcf2ce87a9433d6038546040518082815260200191505060405180910390a15b6039544211610c0a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4552524f523a204e6f742073746172740000000000000000000000000000000081525060200191505060405180910390fd5b6000610c153361061a565b90506000811115610d1c576000604160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610cb23382603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166117e49092919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff167fe2403640ba68fed3a2f88b7557551d1993f84b99bb10ff833f0cf8db0c5e0486826040518082815260200191505060405180910390a2610d1581603e5461165c90919063ffffffff16565b603e819055505b5050565b603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000603560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b603b5481565b6000610dc942603a546118b5565b905090565b60406020528060005260406000206000915090505481565b60395481565b60385481565b33610dfb61120f565b603d81905550610e09610dbb565b603c81905550600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610ed657610e4c8161061a565b604160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550603d54604060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b603a544210610f8057610f086064610efa603260385461158c90919063ffffffff16565b61161290919063ffffffff16565b603881905550610f2560375460385461161290919063ffffffff16565b603b81905550610f406037544261165c90919063ffffffff16565b603a819055507fde88a922e0d3b88b24e9623efeb464919c6bf9f66857a65e2bfcf2ce87a9433d6038546040518082815260200191505060405180910390a15b6039544211610ff7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4552524f523a204e6f742073746172740000000000000000000000000000000081525060200191505060405180910390fd5b6000821161106d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f4552524f523a2043616e6e6f74207374616b652030000000000000000000000081525060200191505060405180910390fd5b611076826118ce565b3373ffffffffffffffffffffffffffffffffffffffff167f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d836040518082815260200191505060405180910390a25050565b600060019054906101000a900460ff16806110e757506110e66119d0565b5b806110fe57506000809054906101000a900460ff16155b611153576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806120ff602e913960400191505060405180910390fd5b60008060019054906101000a900460ff1615905080156111a3576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b81603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080156112055760008060016101000a81548160ff0219169083151502179055505b5050565b603c5481565b60008061121a610725565b141561122a57603d5490506112a4565b6112a1611290611238610725565b611282670de0b6b3a7640000611274603b54611266603c54611258610dbb565b61154290919063ffffffff16565b61158c90919063ffffffff16565b61158c90919063ffffffff16565b61161290919063ffffffff16565b603d5461165c90919063ffffffff16565b90505b90565b600060019054906101000a900460ff16806112c657506112c56119d0565b5b806112dd57506000809054906101000a900460ff16155b611332576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806120ff602e913960400191505060405180910390fd5b60008060019054906101000a900460ff161590508015611382576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b3373ffffffffffffffffffffffffffffffffffffffff16603f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611445576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4552524f523a20466f7262696464656e0000000000000000000000000000000081525060200191505060405180910390fd5b61144e866110c8565b84603660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083603781905550816039819055506114cc6114c760646114b960328761158c90919063ffffffff16565b61161290919063ffffffff16565b6119e7565b80156114ed5760008060016101000a81548160ff0219169083151502179055505b505050505050565b603f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b603d5481565b61153261152d33610d46565b61072f565b61153a610a05565b565b603a5481565b600061158483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611bbb565b905092915050565b60008083141561159f576000905061160c565b60008284029050828482816115b057fe5b0414611607576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806120de6021913960400191505060405180910390fd5b809150505b92915050565b600061165483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611c7b565b905092915050565b6000808284019050838110156116da576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6116f98160345461154290919063ffffffff16565b60348190555061175181603560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461154290919063ffffffff16565b603560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506117e13382603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166117e49092919063ffffffff16565b50565b6118b0838473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb905060e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611d41565b505050565b60008183106118c457816118c6565b825b905092915050565b6118e38160345461165c90919063ffffffff16565b60348190555061193b81603560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461165c90919063ffffffff16565b603560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506119cd333083603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611f8c909392919063ffffffff16565b50565b6000803090506000813b9050600081149250505090565b60006119f161120f565b603d819055506119ff610dbb565b603c81905550600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611acc57611a428161061a565b604160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550603d54604060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b603a544210611af557611aea6037548361161290919063ffffffff16565b603b81905550611b57565b6000611b0c42603a5461154290919063ffffffff16565b90506000611b25603b548361158c90919063ffffffff16565b9050611b4e603754611b40838761165c90919063ffffffff16565b61161290919063ffffffff16565b603b8190555050505b8160388190555042603c81905550611b7a6037544261165c90919063ffffffff16565b603a819055507fde88a922e0d3b88b24e9623efeb464919c6bf9f66857a65e2bfcf2ce87a9433d826040518082815260200191505060405180910390a15050565b6000838311158290611c68576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611c2d578082015181840152602081019050611c12565b50505050905090810190601f168015611c5a5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60008083118290611d27576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611cec578082015181840152602081019050611cd1565b50505050905090810190601f168015611d195780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581611d3357fe5b049050809150509392505050565b611d608273ffffffffffffffffffffffffffffffffffffffff16612092565b611dd2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e74726163740081525060200191505060405180910390fd5b600060608373ffffffffffffffffffffffffffffffffffffffff16836040518082805190602001908083835b60208310611e215780518252602082019150602081019050602083039250611dfe565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611e83576040519150601f19603f3d011682016040523d82523d6000602084013e611e88565b606091505b509150915081611f00576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656481525060200191505060405180910390fd5b600081511115611f8657808060200190516020811015611f1f57600080fd5b8101908080519060200190929190505050611f85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a81526020018061212d602a913960400191505060405180910390fd5b5b50505050565b61208c848573ffffffffffffffffffffffffffffffffffffffff166323b872dd905060e01b858585604051602401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611d41565b50505050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f91508082141580156120d457506000801b8214155b9250505091905056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a65645361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a265627a7a72315820c5f3c65e592ed2b5168698618649c1647898578d7e3c8596065244a14cd6e2a364736f6c63430005100032

Deployed ByteCode Sourcemap

19531:4429:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19531:4429:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21717:265;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;21717:265:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19980:42;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;19980:42:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19846:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19601:23;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18689:91;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22218:232;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;22218:232:0;;;;;;;;;;;;;;;;;:::i;:::-;;22563:366;;;:::i;:::-;;18458:24;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;18788:110;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18788:110:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19568:24;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;19732:29;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21150:131;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19916:57;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;19916:57:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19663:24;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19631:25;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21990:220;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;21990:220:0;;;;;;;;;;;;;;;;;:::i;:::-;;18580:101;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18580:101:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;19768:29;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21289:420;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20659:483;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;20659:483:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;19884:23;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;19804:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22458:97;;;:::i;:::-;;19694:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21717:265;21771:7;21811:163;21957:7;:16;21965:7;21957:16;;;;;;;;;;;;;;;;21811:123;21929:4;21811:95;21852:53;21873:22;:31;21896:7;21873:31;;;;;;;;;;;;;;;;21852:16;:14;:16::i;:::-;:20;;:53;;;;:::i;:::-;21811:18;21821:7;21811:9;:18::i;:::-;:40;;:95;;;;:::i;:::-;:117;;:123;;;;:::i;:::-;:145;;:163;;;;:::i;:::-;21791:183;;21717:265;;;:::o;19980:42::-;;;;;;;;;;;;;;;;;:::o;19846:31::-;;;;:::o;19601:23::-;;;;:::o;18689:91::-;18733:7;18760:12;;18753:19;;18689:91;:::o;22218:232::-;22272:10;20324:16;:14;:16::i;:::-;20301:20;:39;;;;20368:26;:24;:26::i;:::-;20351:14;:43;;;;20428:1;20409:21;;:7;:21;;;20405:157;;20466:15;20473:7;20466:6;:15::i;:::-;20447:7;:16;20455:7;20447:16;;;;;;;;;;;;;;;:34;;;;20530:20;;20496:22;:31;20519:7;20496:31;;;;;;;;;;;;;;;:54;;;;20405:157;22992:12;;22973:15;:31;22969:260;;23034:27;23057:3;23034:18;23049:2;23034:10;;:14;;:18;;;;:::i;:::-;:22;;:27;;;;:::i;:::-;23021:10;:40;;;;23091:24;23106:8;;23091:10;;:14;;:24;;;;:::i;:::-;23078:10;:37;;;;23145:29;23165:8;;23145:15;:19;;:29;;;;:::i;:::-;23130:12;:44;;;;23194:23;23206:10;;23194:23;;;;;;;;;;;;;;;;;;22969:260;23314:9;;23296:15;:27;23288:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22333:1;22324:6;:10;22316:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22374:23;22390:6;22374:15;:23::i;:::-;22423:10;22413:29;;;22435:6;22413:29;;;;;;;;;;;;;;;;;;22218:232;;:::o;22563:366::-;22604:10;20324:16;:14;:16::i;:::-;20301:20;:39;;;;20368:26;:24;:26::i;:::-;20351:14;:43;;;;20428:1;20409:21;;:7;:21;;;20405:157;;20466:15;20473:7;20466:6;:15::i;:::-;20447:7;:16;20455:7;20447:16;;;;;;;;;;;;;;;:34;;;;20530:20;;20496:22;:31;20519:7;20496:31;;;;;;;;;;;;;;;:54;;;;20405:157;22992:12;;22973:15;:31;22969:260;;23034:27;23057:3;23034:18;23049:2;23034:10;;:14;;:18;;;;:::i;:::-;:22;;:27;;;;:::i;:::-;23021:10;:40;;;;23091:24;23106:8;;23091:10;;:14;;:24;;;;:::i;:::-;23078:10;:37;;;;23145:29;23165:8;;23145:15;:19;;:29;;;;:::i;:::-;23130:12;:44;;;;23194:23;23206:10;;23194:23;;;;;;;;;;;;;;;;;;22969:260;23314:9;;23296:15;:27;23288:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22648:14;22665:18;22672:10;22665:6;:18::i;:::-;22648:35;;22707:1;22698:6;:10;22694:228;;;22747:1;22725:7;:19;22733:10;22725:19;;;;;;;;;;;;;;;:23;;;;22763:43;22787:10;22799:6;22763:10;;;;;;;;;;;:23;;;;:43;;;;;:::i;:::-;22837:10;22826:30;;;22849:6;22826:30;;;;;;;;;;;;;;;;;;22886:24;22903:6;22886:12;;:16;;:24;;;;:::i;:::-;22871:12;:39;;;;22694:228;23354:1;22563:366;:::o;18458:24::-;;;;;;;;;;;;;:::o;18788:110::-;18845:7;18872:9;:18;18882:7;18872:18;;;;;;;;;;;;;;;;18865:25;;18788:110;;;:::o;19568:24::-;;;;;;;;;;;;;:::o;19732:29::-;;;;:::o;21150:131::-;21207:7;21234:39;21243:15;21260:12;;21234:8;:39::i;:::-;21227:46;;21150:131;:::o;19916:57::-;;;;;;;;;;;;;;;;;:::o;19663:24::-;;;;:::o;19631:25::-;;;;:::o;21990:220::-;22041:10;20324:16;:14;:16::i;:::-;20301:20;:39;;;;20368:26;:24;:26::i;:::-;20351:14;:43;;;;20428:1;20409:21;;:7;:21;;;20405:157;;20466:15;20473:7;20466:6;:15::i;:::-;20447:7;:16;20455:7;20447:16;;;;;;;;;;;;;;;:34;;;;20530:20;;20496:22;:31;20519:7;20496:31;;;;;;;;;;;;;;;:54;;;;20405:157;22992:12;;22973:15;:31;22969:260;;23034:27;23057:3;23034:18;23049:2;23034:10;;:14;;:18;;;;:::i;:::-;:22;;:27;;;;:::i;:::-;23021:10;:40;;;;23091:24;23106:8;;23091:10;;:14;;:24;;;;:::i;:::-;23078:10;:37;;;;23145:29;23165:8;;23145:15;:19;;:29;;;;:::i;:::-;23130:12;:44;;;;23194:23;23206:10;;23194:23;;;;;;;;;;;;;;;;;;22969:260;23314:9;;23296:15;:27;23288:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22102:1;22093:6;:10;22085:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22140:20;22153:6;22140:12;:20::i;:::-;22183:10;22176:26;;;22195:6;22176:26;;;;;;;;;;;;;;;;;;21990:220;;:::o;18580:101::-;1967:12;;;;;;;;;;;:31;;;;1983:15;:13;:15::i;:::-;1967:31;:47;;;;2003:11;;;;;;;;;;;2002:12;1967:47;1959:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2074:19;2097:12;;;;;;;;;;;2096:13;2074:35;;2120:14;2116:83;;;2160:4;2145:12;;:19;;;;;;;;;;;;;;;;;;2187:4;2173:11;;:18;;;;;;;;;;;;;;;;;;2116:83;18666:6;18646:10;;:27;;;;;;;;;;;;;;;;;;2221:14;2217:57;;;2261:5;2246:12;;:20;;;;;;;;;;;;;;;;;;2217:57;18580:101;;:::o;19768:29::-;;;;:::o;21289:420::-;21336:7;21377:1;21360:13;:11;:13::i;:::-;:18;21356:78;;;21402:20;;21395:27;;;;21356:78;21464:237;21507:179;21672:13;:11;:13::i;:::-;21507:138;21640:4;21507:106;21602:10;;21507:68;21560:14;;21507:26;:24;:26::i;:::-;:52;;:68;;;;:::i;:::-;:94;;:106;;;;:::i;:::-;:132;;:138;;;;:::i;:::-;:164;;:179;;;;:::i;:::-;21464:20;;:24;;:237;;;;:::i;:::-;21444:257;;21289:420;;:::o;20659:483::-;1967:12;;;;;;;;;;;:31;;;;1983:15;:13;:15::i;:::-;1967:31;:47;;;;2003:11;;;;;;;;;;;2002:12;1967:47;1959:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2074:19;2097:12;;;;;;;;;;;2096:13;2074:35;;2120:14;2116:83;;;2160:4;2145:12;;:19;;;;;;;;;;;;;;;;;;2187:4;2173:11;;:18;;;;;;;;;;;;;;;;;;2116:83;20893:10;20881:22;;:8;;;;;;;;;;;:22;;;20873:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20937:29;20954:11;20937:16;:29::i;:::-;20997:11;20977:10;;:32;;;;;;;;;;;;;;;;;;21033:9;21022:8;:20;;;;21065:10;21053:9;:22;;;;21086:48;21105:28;21129:3;21105:19;21121:2;21105:11;:15;;:19;;;;:::i;:::-;:23;;:28;;;;:::i;:::-;21086:18;:48::i;:::-;2221:14;2217:57;;;2261:5;2246:12;;:20;;;;;;;;;;;;;;;;;;2217:57;20659:483;;;;;;:::o;19884:23::-;;;;;;;;;;;;;:::o;19804:35::-;;;;:::o;22458:97::-;22494:31;22503:21;22513:10;22503:9;:21::i;:::-;22494:8;:31::i;:::-;22536:11;:9;:11::i;:::-;22458:97::o;19694:31::-;;;;:::o;7240:136::-;7298:7;7325:43;7329:1;7332;7325:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;7318:50;;7240:136;;;;:::o;8156:471::-;8214:7;8464:1;8459;:6;8455:47;;;8489:1;8482:8;;;;8455:47;8514:9;8530:1;8526;:5;8514:17;;8559:1;8554;8550;:5;;;;;;:10;8542:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8618:1;8611:8;;;8156:471;;;;;:::o;9095:132::-;9153:7;9180:39;9184:1;9187;9180:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;9173:46;;9095:132;;;;:::o;6784:181::-;6842:7;6862:9;6878:1;6874;:5;6862:17;;6903:1;6898;:6;;6890:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6956:1;6949:8;;;6784:181;;;;:::o;19154:224::-;19224:24;19241:6;19224:12;;:16;;:24;;;;:::i;:::-;19209:12;:39;;;;19283:33;19309:6;19283:9;:21;19293:10;19283:21;;;;;;;;;;;;;;;;:25;;:33;;;;:::i;:::-;19259:9;:21;19269:10;19259:21;;;;;;;;;;;;;;;:57;;;;19327:43;19351:10;19363:6;19327:10;;;;;;;;;;;:23;;;;:43;;;;;:::i;:::-;19154:224;:::o;15115:176::-;15198:85;15217:5;15247;:14;;;:23;;;;15272:2;15276:5;15224:58;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;15224:58:0;;;;;;;38:4:-1;29:7;25:18;67:10;61:17;96:58;199:8;192:4;186;182:15;179:29;167:10;160:49;0:215;;;15224:58:0;15198:18;:85::i;:::-;15115:176;;;:::o;424:106::-;482:7;513:1;509;:5;:13;;521:1;509:13;;;517:1;509:13;502:20;;424:106;;;;:::o;18906:240::-;18973:24;18990:6;18973:12;;:16;;:24;;;;:::i;:::-;18958:12;:39;;;;19032:33;19058:6;19032:9;:21;19042:10;19032:21;;;;;;;;;;;;;;;;:25;;:33;;;;:::i;:::-;19008:9;:21;19018:10;19008:21;;;;;;;;;;;;;;;:57;;;;19076:62;19104:10;19124:4;19131:6;19076:10;;;;;;;;;;;:27;;;;:62;;;;;;:::i;:::-;18906:240;:::o;2368:508::-;2415:4;2762:12;2785:4;2762:28;;2797:10;2843:4;2831:17;2825:23;;2869:1;2863:2;:7;2856:14;;;;2368:508;:::o;23371:586::-;23463:1;20324:16;:14;:16::i;:::-;20301:20;:39;;;;20368:26;:24;:26::i;:::-;20351:14;:43;;;;20428:1;20409:21;;:7;:21;;;20405:157;;20466:15;20473:7;20466:6;:15::i;:::-;20447:7;:16;20455:7;20447:16;;;;;;;;;;;;;;;:34;;;;20530:20;;20496:22;:31;20519:7;20496:31;;;;;;;;;;;;;;;:54;;;;20405:157;23506:12;;23487:15;:31;23483:304;;23548:20;23559:8;;23548:6;:10;;:20;;;;:::i;:::-;23535:10;:33;;;;23483:304;;;23601:17;23621:33;23638:15;23621:12;;:16;;:33;;;;:::i;:::-;23601:53;;23669:16;23688:25;23702:10;;23688:9;:13;;:25;;;;:::i;:::-;23669:44;;23741:34;23766:8;;23741:20;23752:8;23741:6;:10;;:20;;;;:::i;:::-;:24;;:34;;;;:::i;:::-;23728:10;:47;;;;23483:304;;;23810:6;23797:10;:19;;;;23844:15;23827:14;:32;;;;23885:29;23905:8;;23885:15;:19;;:29;;;;:::i;:::-;23870:12;:44;;;;23930:19;23942:6;23930:19;;;;;;;;;;;;;;;;;;23371:586;;:::o;7713:192::-;7799:7;7832:1;7827;:6;;7835:12;7819:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;7819:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7859:9;7875:1;7871;:5;7859:17;;7896:1;7889:8;;;7713:192;;;;;:::o;9757:345::-;9843:7;9942:1;9938;:5;9945:12;9930:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;9930:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9969:9;9985:1;9981;:5;;;;;;9969:17;;10093:1;10086:8;;;9757:345;;;;;:::o;17154:1114::-;17758:27;17766:5;17758:25;;;:27::i;:::-;17750:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17895:12;17909:23;17944:5;17936:19;;17956:4;17936:25;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;17936:25:0;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;17894:67:0;;;;17980:7;17972:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18061:1;18041:10;:17;:21;18037:224;;;18183:10;18172:30;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18172:30:0;;;;;;;;;;;;;;;;18164:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18037:224;17154:1114;;;;:::o;15299:204::-;15400:95;15419:5;15449;:18;;;:27;;;;15478:4;15484:2;15488:5;15426:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;15426:68:0;;;;;;;38:4:-1;29:7;25:18;67:10;61:17;96:58;199:8;192:4;186;182:15;179:29;167:10;160:49;0:215;;;15426:68:0;15400:18;:95::i;:::-;15299:204;;;;:::o;12144:619::-;12204:4;12466:16;12493:19;12515:66;12493:88;;;;12684:7;12672:20;12660:32;;12724:11;12712:8;:23;;:42;;;;;12751:3;12739:15;;:8;:15;;12712:42;12704:51;;;;12144:619;;;:::o

Swarm Source

bzzr://c5f3c65e592ed2b5168698618649c1647898578d7e3c8596065244a14cd6e2a3
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.