Contract 0x948dB1713D4392EC04C86189070557C5A8566766

 
Txn Hash
Block
From
To
Value [Txn Fee]
0x1cb2cfacd87d79235f27dad4377cb9ba9d6b37fd04388ede6b693f0dbdec9c7353167682021-03-02 1:45:5428 secs ago0xe188a706fcc3a4ee1722fbfaa6e92fcd2dbd9ecd IN  bDollar: Shares Distribution Pool0 BNB0.0009896
0x4dc042afa7844bfdf9e9a47de9bdfb04872d1138b5f67eb1e3ce455e3608541a53167502021-03-02 1:45:001 min ago0x1c07dda98d49eacdc6a759d6437d9c06b773553b IN  bDollar: Shares Distribution Pool0 BNB0.00107769
0x095fdefc97368876222460b0d485d175e159c1203a58979f15fc759986c3daa953167332021-03-02 1:44:092 mins ago0xe188a706fcc3a4ee1722fbfaa6e92fcd2dbd9ecd IN  bDollar: Shares Distribution Pool0 BNB0.00082916
0x9d261463624380a464fe2c075900aad90db89525efcd28f766ede1ff713f87a153167282021-03-02 1:43:542 mins ago0xe188a706fcc3a4ee1722fbfaa6e92fcd2dbd9ecd IN  bDollar: Shares Distribution Pool0 BNB0.00060044
0xcdb6ff088fba1bfba3c09bf4cb7a262e26b0be0db1f896ba8ebf51d88d6f78c153167262021-03-02 1:43:482 mins ago0xe85fac0637b44f192ee2315a9e5e6c492ed5bcd5 IN  bDollar: Shares Distribution Pool0 BNB0.00082916
0xe963c34d995cb6ba9cd6a054cf36bfd54a4c0974acc5cfea7c16c2c8eb66e41253167252021-03-02 1:43:452 mins ago0xf1aa432980e7aee68952f4f2a1331b51ecfe641c IN  bDollar: Shares Distribution Pool0 BNB0.00097916
0xfcccb780760246c8e2fc1ed8e81adb893a6aaed701500fbbc8f14e214ce77f7a53167182021-03-02 1:43:242 mins ago0xe85fac0637b44f192ee2315a9e5e6c492ed5bcd5 IN  bDollar: Shares Distribution Pool0 BNB0.00097904
0x1eb25ef15ae049673e1982357729a4055881ee830cd14287873944e356cb66ef53167182021-03-02 1:43:242 mins ago0xe188a706fcc3a4ee1722fbfaa6e92fcd2dbd9ecd IN  bDollar: Shares Distribution Pool0 BNB0.00082916
0x12a49a836bc921dfdc0f891f2e7c19831a2915b1af9ce9a561393208c247b18253167122021-03-02 1:43:063 mins ago0xf1aa432980e7aee68952f4f2a1331b51ecfe641c IN  bDollar: Shares Distribution Pool0 BNB0.00103009
0x496b714d7e9df0eff3507f9d9b439e413c9daca1334fb2ef9809fe8b4edebc1f53167102021-03-02 1:43:003 mins ago0x02bccaed9caef89fc6cc30fc7e907eb7eaabaae4 IN  bDollar: Shares Distribution Pool0 BNB0.00103009
0xc65ed86ee894b3933c6c5a8f2906cbeadb2bbbf801452dfa713f8fcf359bc76e53166952021-03-02 1:42:154 mins ago0x55891faedb61bbcf895d4bcfb3cdc37c0fb4cb5a IN  bDollar: Shares Distribution Pool0 BNB0.00091743
0x371d0cd003130543ca2bd13e6a1c2f64ef5ce1236b9a8cac876e8ee2495bdbdc53166932021-03-02 1:42:094 mins ago0x363085d9ebc20715fc61c3337f293b7940529e1f IN  bDollar: Shares Distribution Pool0 BNB0.00075044
0x3d088ccd8cb3c596a9f7d01af26f550d779b046dc8a9100cf9ec26cd0b4bdc8653166912021-03-02 1:42:034 mins ago0xaa964b4cd4ca06cbef85930b9543f00f39d251e4 IN  bDollar: Shares Distribution Pool0 BNB0.0009896
0xe88a4cf784a7fdfc014548c5ad62e03de4deeab49fe23826fcb14e2d5951acd253166642021-03-02 1:40:425 mins ago0x24f5ec5a4bc5bac9a6aadd1beaaf087561a29cb7 IN  bDollar: Shares Distribution Pool0 BNB0.00097904
0xd3faae44ea475d035c3515a1ce36c8cc525d4ca0469cbd1b2e060ebe12d342d353166422021-03-02 1:39:366 mins ago0xaa964b4cd4ca06cbef85930b9543f00f39d251e4 IN  bDollar: Shares Distribution Pool0 BNB0.00082916
0xdc54449e364a1ad6fc389cff0277f89a9f458f39cbc05ba6cf61920e54b49a2853166372021-03-02 1:39:217 mins ago0xaa964b4cd4ca06cbef85930b9543f00f39d251e4 IN  bDollar: Shares Distribution Pool0 BNB0.00097916
0x4a404632d19ffc5feca1b283fa45c8cd221dd8623011c6b4872d5c73378d4b9d53165932021-03-02 1:37:099 mins ago0x2e3de07c9b8ce1a830c5e302039945b52249c8d4 IN  bDollar: Shares Distribution Pool0 BNB0.00082904
0xd6cbab2b2fe131d36d2b4d6368b10613be5eb0d9557410bf4f30da8c213f99df53165422021-03-02 1:34:3611 mins ago0x2b41d04b959757a3c40ea63f3e79fdbf5ea01da0 IN  bDollar: Shares Distribution Pool0 BNB0.00082916
0x572c43f1f8ab1b08435f351060b265c5438a58b6d29f98c60a1480603fe98cf453165282021-03-02 1:33:5412 mins ago0x3b2c990ab164731b6fc865829bbd20eae45346c9 IN  bDollar: Shares Distribution Pool0 BNB0.00097916
0xd449abfd8a6e4c971c6249268f482637404d4574f192531ee5d944e20ab76c9053164942021-03-02 1:32:1214 mins ago0xf7065b644c7eb8ef1c33f7e57c7c988b3228c99b IN  bDollar: Shares Distribution Pool0 BNB0.00091743
0xbd4f6914fbdf589af134a315ec928238be651d77b37848a4e748d9952f0d704353164722021-03-02 1:31:0615 mins ago0x0a72888fca5c73fed5250148ddd5fdba41b0fff6 IN  bDollar: Shares Distribution Pool0 BNB0.00103009
0x777ef1801f130e93244b1a8862d2ad0a54cb5c3de01e6b8cd5a935bac8cb736353164672021-03-02 1:30:5115 mins ago0x34a09c29cd5dc0ca53a7ac38a61a6f71d18de72a IN  bDollar: Shares Distribution Pool0 BNB0.00097904
0xa60fbda14ee7862f047aa6b9e92237962348291a895f7ce5c432d77f4ba3e45953164662021-03-02 1:30:4815 mins ago0x3425b298e0f52aab03b1826224a5b84f46fe83da IN  bDollar: Shares Distribution Pool0 BNB0.008518692
0xc7977a11dc9a172033fec29a640611bf4d1776d52f6fb6fe1d1974cc9beba8e253164442021-03-02 1:29:4216 mins ago0xc54758d5f095834ed7800e2ea4c035ed34a29a7e IN  bDollar: Shares Distribution Pool0 BNB0.00106743
0xc7ecf739817f275cd62bf9aadd04f5af42b2ade85ba4a85fc495f850a1061ad553164232021-03-02 1:28:3917 mins ago0xf7d90327e1041bd9e513dd5d701ac79ff3b1ffaf IN  bDollar: Shares Distribution Pool0 BNB0.00097904
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x1cb2cfacd87d79235f27dad4377cb9ba9d6b37fd04388ede6b693f0dbdec9c7353167682021-03-02 1:45:5428 secs ago bDollar: Shares Distribution Pool PancakeSwap: sBDO-BUSD0 BNB
0x1cb2cfacd87d79235f27dad4377cb9ba9d6b37fd04388ede6b693f0dbdec9c7353167682021-03-02 1:45:5428 secs ago bDollar: Shares Distribution Pool bDollar: sBDO Token0 BNB
0x1cb2cfacd87d79235f27dad4377cb9ba9d6b37fd04388ede6b693f0dbdec9c7353167682021-03-02 1:45:5428 secs ago bDollar: Shares Distribution Pool bDollar: sBDO Token0 BNB
0x1cb2cfacd87d79235f27dad4377cb9ba9d6b37fd04388ede6b693f0dbdec9c7353167682021-03-02 1:45:5428 secs ago bDollar: Shares Distribution Pool PancakeSwap: sBDO-BUSD0 BNB
0x4a1273e071af7bb5c916d805f658a716a0208260fef55de5431ca3d8edd4530853167682021-03-02 1:45:5428 secs ago bDollar: Shares Distribution Pool PancakeSwap: BDO-BUSD0 BNB
0x4a1273e071af7bb5c916d805f658a716a0208260fef55de5431ca3d8edd4530853167682021-03-02 1:45:5428 secs ago bDollar: Shares Distribution Pool bDollar: sBDO Token0 BNB
0x4a1273e071af7bb5c916d805f658a716a0208260fef55de5431ca3d8edd4530853167682021-03-02 1:45:5428 secs ago bDollar: Shares Distribution Pool bDollar: sBDO Token0 BNB
0x4a1273e071af7bb5c916d805f658a716a0208260fef55de5431ca3d8edd4530853167682021-03-02 1:45:5428 secs ago bDollar: Shares Distribution Pool PancakeSwap: BDO-BUSD0 BNB
0x4a1273e071af7bb5c916d805f658a716a0208260fef55de5431ca3d8edd4530853167682021-03-02 1:45:5428 secs ago 0xafd5df73d0369d3adb4db524609ef30039ae22a7 bDollar: Shares Distribution Pool0 BNB
0x4a1273e071af7bb5c916d805f658a716a0208260fef55de5431ca3d8edd4530853167682021-03-02 1:45:5428 secs ago 0xafd5df73d0369d3adb4db524609ef30039ae22a7 bDollar: Shares Distribution Pool0 BNB
0xd74a8e3e54fee42e3ee82439b5e7e729d47f58577cccd204f122c9196c38252853167612021-03-02 1:45:3349 secs ago bDollar: Shares Distribution Pool PancakeSwap: BDO-BUSD0 BNB
0xd74a8e3e54fee42e3ee82439b5e7e729d47f58577cccd204f122c9196c38252853167612021-03-02 1:45:3349 secs ago bDollar: Shares Distribution Pool bDollar: sBDO Token0 BNB
0xd74a8e3e54fee42e3ee82439b5e7e729d47f58577cccd204f122c9196c38252853167612021-03-02 1:45:3349 secs ago bDollar: Shares Distribution Pool bDollar: sBDO Token0 BNB
0xd74a8e3e54fee42e3ee82439b5e7e729d47f58577cccd204f122c9196c38252853167612021-03-02 1:45:3349 secs ago bDollar: Shares Distribution Pool PancakeSwap: BDO-BUSD0 BNB
0xd74a8e3e54fee42e3ee82439b5e7e729d47f58577cccd204f122c9196c38252853167612021-03-02 1:45:3349 secs ago 0x985220f21ba808e98246fb55784bc22b6c790e86 bDollar: Shares Distribution Pool0 BNB
0x2fe544dd386f380461303f1bd7f94d648bc4540f549f9feec14a0edc0cb6753e53167552021-03-02 1:45:151 min ago bDollar: Shares Distribution Pool PancakeSwap: BDO-BUSD0 BNB
0x2fe544dd386f380461303f1bd7f94d648bc4540f549f9feec14a0edc0cb6753e53167552021-03-02 1:45:151 min ago bDollar: Shares Distribution Pool bDollar: sBDO Token0 BNB
0x2fe544dd386f380461303f1bd7f94d648bc4540f549f9feec14a0edc0cb6753e53167552021-03-02 1:45:151 min ago bDollar: Shares Distribution Pool bDollar: sBDO Token0 BNB
0x2fe544dd386f380461303f1bd7f94d648bc4540f549f9feec14a0edc0cb6753e53167552021-03-02 1:45:151 min ago bDollar: Shares Distribution Pool PancakeSwap: BDO-BUSD0 BNB
0x2fe544dd386f380461303f1bd7f94d648bc4540f549f9feec14a0edc0cb6753e53167552021-03-02 1:45:151 min ago 0xa5ca6b946eb8a2218045489c7514d5b63b6b1e22 bDollar: Shares Distribution Pool0 BNB
0x06eb31d42ef16a4c08c334c4f4e4a8fc72da4550a84bad8d409dd0ebba32efef53167522021-03-02 1:45:061 min ago bDollar: Shares Distribution Pool PancakeSwap: sBDO-BUSD0 BNB
0x06eb31d42ef16a4c08c334c4f4e4a8fc72da4550a84bad8d409dd0ebba32efef53167522021-03-02 1:45:061 min ago bDollar: Shares Distribution Pool bDollar: sBDO Token0 BNB
0x06eb31d42ef16a4c08c334c4f4e4a8fc72da4550a84bad8d409dd0ebba32efef53167522021-03-02 1:45:061 min ago bDollar: Shares Distribution Pool bDollar: sBDO Token0 BNB
0x06eb31d42ef16a4c08c334c4f4e4a8fc72da4550a84bad8d409dd0ebba32efef53167522021-03-02 1:45:061 min ago bDollar: Shares Distribution Pool PancakeSwap: sBDO-BUSD0 BNB
0x06eb31d42ef16a4c08c334c4f4e4a8fc72da4550a84bad8d409dd0ebba32efef53167522021-03-02 1:45:061 min ago 0x8f3d3fbe1c51ece5aab5b3ef11bf4dcff38fa440 bDollar: Shares Distribution Pool0 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ShareRewardPool

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 999999 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at BscScan.com on 2020-12-28
*/

// SPDX-License-Identifier: MIT

pragma solidity 0.6.12;

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// Note that this pool has no minter key of sBDO (rewards).
// Instead, the governance will call sBDO distributeReward method and send reward to this pool at the beginning.
contract ShareRewardPool {
    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 lpToken; // Address of LP token contract.
        uint256 allocPoint; // How many allocation points assigned to this pool. sBDOs to distribute per block.
        uint256 lastRewardBlock; // Last block number that sBDOs distribution occurs.
        uint256 accSbdoPerShare; // Accumulated sBDOs per share, times 1e18. See below.
        bool isStarted; // if lastRewardBlock has passed
    }

    IERC20 public sbdo = IERC20(0x0d9319565be7f53CeFE84Ad201Be3f40feAE2740);

    // 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 block number when sBDO mining starts.
    uint256 public startBlock;

    uint256 public endBlock;

    uint256 public sbdoPerBlock = 0.008 ether;

    uint256 public runningBlocks = 10625000; // 368 days

    uint256 public constant BLOCKS_PER_WEEK = 201600; // 86400 * 7 / 3;
    uint256 public constant TOTAL_REWARDS = 85000 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 _sbdo, uint256 _startBlock) public {
        require(block.number < _startBlock, "late");
        if (_sbdo != address(0)) sbdo = IERC20(_sbdo);
        startBlock = _startBlock; // supposed to be 3,496,900 (Mon Dec 28 2020 15:00:00 UTC)
        endBlock = startBlock + runningBlocks; // 14,121,900 (Sat Jan 01 2022 20:45:00 UTC)
        operator = msg.sender;
    }

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

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

    // Add a new lp to the pool. Can only be called by the owner.
    function add(
        uint256 _allocPoint,
        IERC20 _lpToken,
        bool _withUpdate,
        uint256 _lastRewardBlock
    ) public onlyOperator {
        checkPoolDuplicate(_lpToken);
        if (_withUpdate) {
            massUpdatePools();
        }
        if (block.number < startBlock) {
            // chef is sleeping
            if (_lastRewardBlock == 0) {
                _lastRewardBlock = startBlock;
            } else {
                if (_lastRewardBlock < startBlock) {
                    _lastRewardBlock = startBlock;
                }
            }
        } else {
            // chef is cooking
            if (_lastRewardBlock == 0 || _lastRewardBlock < block.number) {
                _lastRewardBlock = block.number;
            }
        }
        bool _isStarted = (_lastRewardBlock <= startBlock) || (_lastRewardBlock <= block.number);
        poolInfo.push(PoolInfo({lpToken: _lpToken, allocPoint: _allocPoint, lastRewardBlock: _lastRewardBlock, accSbdoPerShare: 0, isStarted: _isStarted}));
        if (_isStarted) {
            totalAllocPoint = totalAllocPoint.add(_allocPoint);
        }
    }

    // Update the given pool's sBDO 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 _from, uint256 _to) public view returns (uint256) {
        if (_from >= _to) return 0;
        if (_to >= endBlock) {
            if (_from >= endBlock) return 0;
            if (_from <= startBlock) return endBlock.sub(startBlock).mul(sbdoPerBlock);
            return endBlock.sub(_from).mul(sbdoPerBlock);
        } else {
            if (_to <= startBlock) return 0;
            if (_from <= startBlock) return _to.sub(startBlock).mul(sbdoPerBlock);
            return _to.sub(_from).mul(sbdoPerBlock);
        }
    }

    // View function to see pending sBDOs on frontend.
    function pendingShare(uint256 _pid, address _user) external view returns (uint256) {
        PoolInfo storage pool = poolInfo[_pid];
        UserInfo storage user = userInfo[_pid][_user];
        uint256 accSbdoPerShare = pool.accSbdoPerShare;
        uint256 lpSupply = pool.lpToken.balanceOf(address(this));
        if (block.number > pool.lastRewardBlock && lpSupply != 0) {
            uint256 _generatedReward = getGeneratedReward(pool.lastRewardBlock, block.number);
            uint256 _sbdoReward = _generatedReward.mul(pool.allocPoint).div(totalAllocPoint);
            accSbdoPerShare = accSbdoPerShare.add(_sbdoReward.mul(1e18).div(lpSupply));
        }
        return user.amount.mul(accSbdoPerShare).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.number <= pool.lastRewardBlock) {
            return;
        }
        uint256 lpSupply = pool.lpToken.balanceOf(address(this));
        if (lpSupply == 0) {
            pool.lastRewardBlock = block.number;
            return;
        }
        if (!pool.isStarted) {
            pool.isStarted = true;
            totalAllocPoint = totalAllocPoint.add(pool.allocPoint);
        }
        if (totalAllocPoint > 0) {
            uint256 _generatedReward = getGeneratedReward(pool.lastRewardBlock, block.number);
            uint256 _sbdoReward = _generatedReward.mul(pool.allocPoint).div(totalAllocPoint);
            pool.accSbdoPerShare = pool.accSbdoPerShare.add(_sbdoReward.mul(1e18).div(lpSupply));
        }
        pool.lastRewardBlock = block.number;
    }

    // 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.accSbdoPerShare).div(1e18).sub(user.rewardDebt);
            if (_pending > 0) {
                safeSbdoTransfer(_sender, _pending);
                emit RewardPaid(_sender, _pending);
            }
        }
        if (_amount > 0) {
            pool.lpToken.safeTransferFrom(_sender, address(this), _amount);
            user.amount = user.amount.add(_amount);
        }
        user.rewardDebt = user.amount.mul(pool.accSbdoPerShare).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.accSbdoPerShare).div(1e18).sub(user.rewardDebt);
        if (_pending > 0) {
            safeSbdoTransfer(_sender, _pending);
            emit RewardPaid(_sender, _pending);
        }
        if (_amount > 0) {
            user.amount = user.amount.sub(_amount);
            pool.lpToken.safeTransfer(_sender, _amount);
        }
        user.rewardDebt = user.amount.mul(pool.accSbdoPerShare).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.lpToken.safeTransfer(msg.sender, _amount);
        emit EmergencyWithdraw(msg.sender, _pid, _amount);
    }

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

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

    function governanceRecoverUnsupported(
        IERC20 _token,
        uint256 amount,
        address to
    ) external onlyOperator {
        if (block.number < endBlock + BLOCKS_PER_WEEK * 26) {
            // do not allow to drain core token (sBDO or lps) if less than 6 months after pool ends
            require(_token != sbdo, "sbdo");
            uint256 length = poolInfo.length;
            for (uint256 pid = 0; pid < length; ++pid) {
                PoolInfo storage pool = poolInfo[pid];
                require(_token != pool.lpToken, "pool.lpToken");
            }
        }
        _token.safeTransfer(to, amount);
    }
}

Contract ABI

[{"inputs":[{"internalType":"address","name":"_sbdo","type":"address"},{"internalType":"uint256","name":"_startBlock","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EmergencyWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"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":"BLOCKS_PER_WEEK","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"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":"_lpToken","type":"address"},{"internalType":"bool","name":"_withUpdate","type":"bool"},{"internalType":"uint256","name":"_lastRewardBlock","type":"uint256"}],"name":"add","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"endBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_from","type":"uint256"},{"internalType":"uint256","name":"_to","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":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"poolInfo","outputs":[{"internalType":"contract IERC20","name":"lpToken","type":"address"},{"internalType":"uint256","name":"allocPoint","type":"uint256"},{"internalType":"uint256","name":"lastRewardBlock","type":"uint256"},{"internalType":"uint256","name":"accSbdoPerShare","type":"uint256"},{"internalType":"bool","name":"isStarted","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"runningBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sbdo","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sbdoPerBlock","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":"startBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalAllocPoint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"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"}]

6080604052600180546001600160a01b031916730d9319565be7f53cefe84ad201be3f40feae27401790556000600455661c6bf52634000060075562a21fe860085534801561004d57600080fd5b50604051611dcc380380611dcc8339818101604052604081101561007057600080fd5b5080516020909101514381116100b6576040805162461bcd60e51b815260206004808301919091526024820152636c61746560e01b604482015290519081900360640190fd5b6001600160a01b038216156100e157600180546001600160a01b0319166001600160a01b0384161790555b60058190556008540160065550600080546001600160a01b03191633179055611cbd8061010f6000396000f3fe608060405234801561001057600080fd5b50600436106101825760003560e01c806354575af4116100d857806396805e541161008c578063e2bbb15811610066578063e2bbb15814610450578063e6ba2bfe14610473578063fc47e2091461047b57610182565b806396805e541461039d578063b3ab15fb146103e4578063cf4b55cb1461041757610182565b8063630b5ba1116100bd578063630b5ba11461033b5780638d9d08191461034357806393f1a40b1461034b57610182565b806354575af4146102c7578063570ca7351461030a57610182565b80631ab06ee51161013a57806348cd4cb11161011457806348cd4cb11461028557806351eb05a61461028d5780635312ea8e146102aa57610182565b80631ab06ee51461021a578063231f0c6a1461023f578063441a3e701461026257610182565b806309cf60911161016b57806309cf6091146101a95780631526fe27146101b157806317caf6f11461021257610182565b806307f7d75714610187578063083c6323146101a1575b600080fd5b61018f610483565b60408051918252519081900360200190f35b61018f610489565b61018f61048f565b6101ce600480360360208110156101c757600080fd5b503561049d565b6040805173ffffffffffffffffffffffffffffffffffffffff9096168652602086019490945284840192909252606084015215156080830152519081900360a00190f35b61018f6104f5565b61023d6004803603604081101561023057600080fd5b50803590602001356104fb565b005b61018f6004803603604081101561025557600080fd5b50803590602001356105d0565b61023d6004803603604081101561027857600080fd5b5080359060200135610695565b61018f6108ab565b61023d600480360360208110156102a357600080fd5b50356108b1565b61023d600480360360208110156102c057600080fd5b5035610a53565b61023d600480360360608110156102dd57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359160409091013516610afc565b610312610cf2565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b61023d610d0e565b61018f610d31565b6103846004803603604081101561036157600080fd5b508035906020013573ffffffffffffffffffffffffffffffffffffffff16610d37565b6040805192835260208301919091528051918290030190f35b61023d600480360360808110156103b357600080fd5b5080359073ffffffffffffffffffffffffffffffffffffffff60208201351690604081013515159060600135610d5b565b61023d600480360360208110156103fa57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610fc2565b61018f6004803603604081101561042d57600080fd5b508035906020013573ffffffffffffffffffffffffffffffffffffffff16611079565b61023d6004803603604081101561046657600080fd5b50803590602001356111fb565b61031261139f565b61018f6113bb565b60075481565b60065481565b6911ffdbf6b2b2eb20000081565b600281815481106104aa57fe5b60009182526020909120600590910201805460018201546002830154600384015460049094015473ffffffffffffffffffffffffffffffffffffffff90931694509092909160ff1685565b60045481565b60005473ffffffffffffffffffffffffffffffffffffffff16331461056b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180611c12602b913960400191505060405180910390fd5b610573610d0e565b60006002838154811061058257fe5b60009182526020909120600590910201600481015490915060ff16156105c9576105c5826105bf83600101546004546113c290919063ffffffff16565b9061140b565b6004555b6001015550565b60008183106105e15750600061068f565b60065482106106495760065483106105fb5750600061068f565b600554831161062e576106276007546106216005546006546113c290919063ffffffff16565b9061147f565b905061068f565b610627600754610621856006546113c290919063ffffffff16565b600554821161065a5750600061068f565b600554831161067e57610627600754610621600554856113c290919063ffffffff16565b6007546106279061062184866113c2565b92915050565b60003390506000600284815481106106a957fe5b6000918252602080832087845260038252604080852073ffffffffffffffffffffffffffffffffffffffff88168652909252922080546005909202909201925084111561075757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f77697468647261773a206e6f7420676f6f640000000000000000000000000000604482015290519081900360640190fd5b610760856108b1565b600061079d8260010154610797670de0b6b3a76400006107918760030154876000015461147f90919063ffffffff16565b906114f2565b906113c2565b905080156107fc576107af8482611534565b60408051828152905173ffffffffffffffffffffffffffffffffffffffff8616917fe2403640ba68fed3a2f88b7557551d1993f84b99bb10ff833f0cf8db0c5e0486919081900360200190a25b841561083357815461080e90866113c2565b825582546108339073ffffffffffffffffffffffffffffffffffffffff16858761162a565b6003830154825461085191670de0b6b3a7640000916107919161147f565b6001830155604080518681529051879173ffffffffffffffffffffffffffffffffffffffff8716917ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b5689181900360200190a3505050505050565b60055481565b6000600282815481106108c057fe5b90600052602060002090600502019050806002015443116108e15750610a50565b8054604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905160009273ffffffffffffffffffffffffffffffffffffffff16916370a08231916024808301926020929190829003018186803b15801561095157600080fd5b505afa158015610965573d6000803e3d6000fd5b505050506040513d602081101561097b57600080fd5b5051905080610991575043600290910155610a50565b600482015460ff166109e057600480830180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915583015490546109dc9161140b565b6004555b60045415610a475760006109f88360020154436105d0565b90506000610a1960045461079186600101548561147f90919063ffffffff16565b9050610a3f610a348461079184670de0b6b3a764000061147f565b60038601549061140b565b600385015550505b50436002909101555b50565b600060028281548110610a6257fe5b600091825260208083208584526003825260408085203380875293528420805485825560018201959095556005909302018054909450919291610abf9173ffffffffffffffffffffffffffffffffffffffff91909116908361162a565b604080518281529051859133917fbb757047c2b5f3974fe26b7c10f732e7bce710b0952a71082702781e62ae05959181900360200190a350505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610b6c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180611c12602b913960400191505060405180910390fd5b600654624ffb0001431015610ccc5760015473ffffffffffffffffffffffffffffffffffffffff84811691161415610c0757604080517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048083019190915260248201527f7362646f00000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60025460005b81811015610cc957600060028281548110610c2457fe5b60009182526020909120600590910201805490915073ffffffffffffffffffffffffffffffffffffffff87811691161415610cc057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f706f6f6c2e6c70546f6b656e0000000000000000000000000000000000000000604482015290519081900360640190fd5b50600101610c0d565b50505b610ced73ffffffffffffffffffffffffffffffffffffffff8416828461162a565b505050565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60025460005b81811015610d2d57610d25816108b1565b600101610d14565b5050565b60085481565b60036020908152600092835260408084209091529082529020805460019091015482565b60005473ffffffffffffffffffffffffffffffffffffffff163314610dcb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180611c12602b913960400191505060405180910390fd5b610dd4836116b7565b8115610de257610de2610d0e565b600554431015610e0e5780610dfa5750600554610e09565b600554811015610e0957506005545b610e22565b801580610e1a57504381105b15610e225750435b600060055482111580610e355750438211155b6040805160a08101825273ffffffffffffffffffffffffffffffffffffffff878116825260208201898152928201868152600060608401818152861580156080870190815260028054600181018255945295517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace600590940293840180547fffffffffffffffffffffffff000000000000000000000000000000000000000016919096161790945594517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf82015590517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad082015592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad184015590517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad290920180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001692151592909217909155909150610fbb57600454610fb7908661140b565b6004555b5050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314611032576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180611c12602b913960400191505060405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6000806002848154811061108957fe5b600091825260208083208784526003808352604080862073ffffffffffffffffffffffffffffffffffffffff808b168852908552818720600590960290930191820154825482517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015292519398509596909590949316926370a0823192602480840193829003018186803b15801561112757600080fd5b505afa15801561113b573d6000803e3d6000fd5b505050506040513d602081101561115157600080fd5b505160028501549091504311801561116857508015155b156111c557600061117d8560020154436105d0565b9050600061119e60045461079188600101548561147f90919063ffffffff16565b90506111c06111b98461079184670de0b6b3a764000061147f565b859061140b565b935050505b6111f08360010154610797670de0b6b3a764000061079186886000015461147f90919063ffffffff16565b979650505050505050565b600033905060006002848154811061120f57fe5b6000918252602080832087845260038252604080852073ffffffffffffffffffffffffffffffffffffffff88168652909252922060059091029091019150611256856108b1565b8054156112ef57600061128e8260010154610797670de0b6b3a76400006107918760030154876000015461147f90919063ffffffff16565b905080156112ed576112a08482611534565b60408051828152905173ffffffffffffffffffffffffffffffffffffffff8616917fe2403640ba68fed3a2f88b7557551d1993f84b99bb10ff833f0cf8db0c5e0486919081900360200190a25b505b83156113285781546113199073ffffffffffffffffffffffffffffffffffffffff16843087611785565b8054611325908561140b565b81555b6003820154815461134691670de0b6b3a7640000916107919161147f565b6001820155604080518581529051869173ffffffffffffffffffffffffffffffffffffffff8616917f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a159181900360200190a35050505050565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b6203138081565b600061140483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611820565b9392505050565b60008282018381101561140457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60008261148e5750600061068f565b8282028284828161149b57fe5b0414611404576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180611c3d6021913960400191505060405180910390fd5b600061140483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506118d1565b600154604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905160009273ffffffffffffffffffffffffffffffffffffffff16916370a08231916024808301926020929190829003018186803b1580156115a557600080fd5b505afa1580156115b9573d6000803e3d6000fd5b505050506040513d60208110156115cf57600080fd5b505190508015610ced578082111561160a576001546116059073ffffffffffffffffffffffffffffffffffffffff16848361162a565b610ced565b600154610ced9073ffffffffffffffffffffffffffffffffffffffff1684845b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610ced908490611950565b60025460005b81811015610ced578273ffffffffffffffffffffffffffffffffffffffff16600282815481106116e957fe5b600091825260209091206005909102015473ffffffffffffffffffffffffffffffffffffffff16141561177d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5368617265526577617264506f6f6c3a206578697374696e6720706f6f6c3f00604482015290519081900360640190fd5b6001016116bd565b6040805173ffffffffffffffffffffffffffffffffffffffff80861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261181a908590611950565b50505050565b600081848411156118c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561188e578181015183820152602001611876565b50505050905090810190601f1680156118bb5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000818361193a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181815283516024840152835190928392604490910191908501908083836000831561188e578181015183820152602001611876565b50600083858161194657fe5b0495945050505050565b60606119b2826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16611a289092919063ffffffff16565b805190915015610ced578080602001905160208110156119d157600080fd5b5051610ced576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180611c5e602a913960400191505060405180910390fd5b6060611a378484600085611a3f565b949350505050565b6060611a4a85611c0b565b611ab557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b600060608673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b60208310611b1f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611ae2565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114611b81576040519150601f19603f3d011682016040523d82523d6000602084013e611b86565b606091505b50915091508115611b9a579150611a379050565b805115611baa5780518082602001fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181815286516024840152865187939192839260440191908501908083836000831561188e578181015183820152602001611876565b3b15159056fe5368617265526577617264506f6f6c3a2063616c6c6572206973206e6f7420746865206f70657261746f72536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a2646970667358221220e5fa0d8854c210dd7969d7e484c9cb19de8b3a378eb78241c868cd72ffbe732564736f6c634300060c00330000000000000000000000000d9319565be7f53cefe84ad201be3f40feae27400000000000000000000000000000000000000000000000000000000000355bc4

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

0000000000000000000000000d9319565be7f53cefe84ad201be3f40feae27400000000000000000000000000000000000000000000000000000000000355bc4

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000000d9319565be7f53cefe84ad201be3f40feae2740
Arg [1] : 0000000000000000000000000000000000000000000000000000000000355bc4


Deployed ByteCode Sourcemap

18323:10441:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19646:41;;;:::i;:::-;;;;;;;;;;;;;;;;19614:23;;;:::i;19829:51::-;;;:::i;19242:26::-;;;;;;;;;;;;;;;;-1:-1:-1;19242:26:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19487:34;;;:::i;22345:321::-;;;;;;;;;;;;;;;;-1:-1:-1;22345:321:0;;;;;;;:::i;:::-;;22743:570;;;;;;;;;;;;;;;;-1:-1:-1;22743:570:0;;;;;;;:::i;26269:812::-;;;;;;;;;;;;;;;;-1:-1:-1;26269:812:0;;;;;;;:::i;19580:25::-;;;:::i;24477:893::-;;;;;;;;;;;;;;;;-1:-1:-1;24477:893:0;;:::i;27152:379::-;;;;;;;;;;;;;;;;-1:-1:-1;27152:379:0;;:::i;28111:650::-;;;;;;;;;;;;;;;;-1:-1:-1;28111:650:0;;;;;;;;;;;;;;;;;;:::i;18442:23::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;24221:180;;;:::i;19696:39::-;;;:::i;19326:64::-;;;;;;;;;;;;;;;;-1:-1:-1;19326:64:0;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;21083:1166;;;;;;;;;;;;;;;;-1:-1:-1;21083:1166:0;;;;;;;;;;;;;;;;;;;;;:::i;28002:101::-;;;;;;;;;;;;;;;;-1:-1:-1;28002:101:0;;;;:::i;23377:761::-;;;;;;;;;;;;;;;;-1:-1:-1;23377:761:0;;;;;;;;;:::i;25405:828::-;;;;;;;;;;;;;;;;-1:-1:-1;25405:828:0;;;;;;;:::i;19135:71::-;;;:::i;19756:48::-;;;:::i;19646:41::-;;;;:::o;19614:23::-;;;;:::o;19829:51::-;19869:11;19829:51;:::o;19242:26::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19242:26:0;;;;;;;:::o;19487:34::-;;;;:::o;22345:321::-;20643:8;;:22;:8;20655:10;20643:22;20635:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22424:17:::1;:15;:17::i;:::-;22452:21;22476:8;22485:4;22476:14;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;;22505;::::0;::::1;::::0;22476;;-1:-1:-1;22505:14:0::1;;22501:118;;;22554:53;22595:11;22554:36;22574:4;:15;;;22554;;:19;;:36;;;;:::i;:::-;:40:::0;::::1;:53::i;:::-;22536:15;:71:::0;22501:118:::1;22629:15;;:29:::0;-1:-1:-1;22345:321:0:o;22743:570::-;22820:7;22853:3;22844:5;:12;22840:26;;-1:-1:-1;22865:1:0;22858:8;;22840:26;22888:8;;22881:3;:15;22877:429;;22926:8;;22917:5;:17;22913:31;;-1:-1:-1;22943:1:0;22936:8;;22913:31;22972:10;;22963:5;:19;22959:74;;22991:42;23020:12;;22991:24;23004:10;;22991:8;;:12;;:24;;;;:::i;:::-;:28;;:42::i;:::-;22984:49;;;;22959:74;23055:37;23079:12;;23055:19;23068:5;23055:8;;:12;;:19;;;;:::i;22877:429::-;23136:10;;23129:3;:17;23125:31;;-1:-1:-1;23155:1:0;23148:8;;23125:31;23184:10;;23175:5;:19;23171:69;;23203:37;23227:12;;23203:19;23211:10;;23203:3;:7;;:19;;;;:::i;23171:69::-;23281:12;;23262:32;;:14;:3;23270:5;23262:7;:14::i;22877:429::-;22743:570;;;;:::o;26269:812::-;26336:15;26354:10;26336:28;;26375:21;26399:8;26408:4;26399:14;;;;;;;;;;;;;;;;26448;;;:8;:14;;;;;;:23;;;;;;;;;;26490:11;;26399:14;;;;;;;;-1:-1:-1;26490:22:0;-1:-1:-1;26490:22:0;26482:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26546:16;26557:4;26546:10;:16::i;:::-;26573;26592:68;26644:4;:15;;;26592:47;26634:4;26592:37;26608:4;:20;;;26592:4;:11;;;:15;;:37;;;;:::i;:::-;:41;;:47::i;:::-;:51;;:68::i;:::-;26573:87;-1:-1:-1;26675:12:0;;26671:129;;26704:35;26721:7;26730:8;26704:16;:35::i;:::-;26759:29;;;;;;;;;;;;;;;;;;;;;;26671:129;26814:11;;26810:140;;26856:11;;:24;;26872:7;26856:15;:24::i;:::-;26842:38;;26895:12;;:43;;:12;;26921:7;26930;26895:25;:43::i;:::-;26994:20;;;;26978:11;;:47;;27020:4;;26978:37;;:15;:37::i;:47::-;26960:15;;;:65;27041:32;;;;;;;;27059:4;;27041:32;;;;;;;;;;;;;26269:812;;;;;;:::o;19580:25::-;;;;:::o;24477:893::-;24529:21;24553:8;24562:4;24553:14;;;;;;;;;;;;;;;;;;24529:38;;24598:4;:20;;;24582:12;:36;24578:75;;24635:7;;;24578:75;24682:12;;:37;;;;;;24713:4;24682:37;;;;;;24663:16;;24682:12;;;:22;;:37;;;;;;;;;;;;;;:12;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24682:37:0;;-1:-1:-1;24734:13:0;24730:102;;-1:-1:-1;24787:12:0;24764:20;;;;:35;24814:7;;24730:102;24847:14;;;;;;24842:138;;24878:14;;;;:21;;;;24895:4;24878:21;;;;;;24952:15;;;24932;;:36;;:19;:36::i;:::-;24914:15;:54;24842:138;24994:15;;:19;24990:327;;25030:24;25057:54;25076:4;:20;;;25098:12;25057:18;:54::i;:::-;25030:81;;25126:19;25148:58;25190:15;;25148:37;25169:4;:15;;;25148:16;:20;;:37;;;;:::i;:58::-;25126:80;-1:-1:-1;25244:61:0;25269:35;25295:8;25269:21;25126:80;25285:4;25269:15;:21::i;:35::-;25244:20;;;;;:24;:61::i;:::-;25221:20;;;:84;-1:-1:-1;;24990:327:0;-1:-1:-1;25350:12:0;25327:20;;;;:35;24477:893;;:::o;27152:379::-;27211:21;27235:8;27244:4;27235:14;;;;;;;;;;;;;;;;27284;;;:8;:14;;;;;;27299:10;27284:26;;;;;;;27339:11;;27361:15;;;-1:-1:-1;27387:15:0;;:19;;;;27235:14;;;;;27417:12;;27235:14;;-1:-1:-1;27284:26:0;;27339:11;27417:46;;27284:26;27417:12;;;;;27339:11;27417:25;:46::i;:::-;27479:44;;;;;;;;27509:4;;27497:10;;27479:44;;;;;;;;;27152:379;;;;:::o;28111:650::-;20643:8;;:22;:8;20655:10;20643:22;20635:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28278:8:::1;::::0;28289:20;28278:31:::1;28263:12;:46;28259:453;;;28445:4;::::0;::::1;28435:14:::0;;::::1;28445:4:::0;::::1;28435:14;;28427:31;;;::::0;;::::1;::::0;;::::1;;::::0;;::::1;::::0;;;;;;;;::::1;::::0;;;;;;;;;;;;;::::1;;28490:8;:15:::0;28473:14:::1;28520:181;28548:6;28542:3;:12;28520:181;;;28582:21;28606:8;28615:3;28606:13;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;;28656:12:::0;;28606:13;;-1:-1:-1;28656:12:0::1;28646:22:::0;;::::1;28656:12:::0;::::1;28646:22;;28638:47;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;28556:5:0::1;;28520:181;;;;28259:453;;28722:31;:19;::::0;::::1;28742:2:::0;28746:6;28722:19:::1;:31::i;:::-;28111:650:::0;;;:::o;18442:23::-;;;;;;:::o;24221:180::-;24283:8;:15;24266:14;24309:85;24337:6;24331:3;:12;24309:85;;;24367:15;24378:3;24367:10;:15::i;:::-;24345:5;;24309:85;;;;24221:180;:::o;19696:39::-;;;;:::o;19326:64::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;21083:1166::-;20643:8;;:22;:8;20655:10;20643:22;20635:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21252:28:::1;21271:8;21252:18;:28::i;:::-;21295:11;21291:61;;;21323:17;:15;:17::i;:::-;21381:10;;21366:12;:25;21362:520;;;21445:21:::0;21441:238:::1;;-1:-1:-1::0;21506:10:0::1;::::0;21441:238:::1;;;21580:10;;21561:16;:29;21557:107;;;-1:-1:-1::0;21634:10:0::1;::::0;21557:107:::1;21362:520;;;21747:21:::0;;;:56:::1;;;21791:12;21772:16;:31;21747:56;21743:128;;;-1:-1:-1::0;21843:12:0::1;21743:128;21892:15;21931:10;;21911:16;:30;;21910:70;;;;21967:12;21947:16;:32;;21910:70;22005:132;::::0;;::::1;::::0;::::1;::::0;;::::1;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;-1:-1:-1;22005:132:0;;;;;;;::::1;::::0;::::1;::::0;;;;;;21991:8:::1;:147:::0;;::::1;::::0;::::1;::::0;;;;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;::::1;;::::0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::1;::::0;::::1;;::::0;;;::::1;::::0;;;22005:132;;-1:-1:-1;22149:93:0::1;;22198:15;::::0;:32:::1;::::0;22218:11;22198:19:::1;:32::i;:::-;22180:15;:50:::0;22149:93:::1;20724:1;21083:1166:::0;;;;:::o;28002:101::-;20643:8;;:22;:8;20655:10;20643:22;20635:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28075:8:::1;:20:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;28002:101::o;23377:761::-;23451:7;23471:21;23495:8;23504:4;23495:14;;;;;;;;;;;;;;;;23544;;;:8;:14;;;;;;;:21;;;;;;;;;;;;23495:14;;;;;;;23602:20;;;;23652:12;;:37;;;;;23683:4;23652:37;;;;;;23495:14;;-1:-1:-1;23544:21:0;;23602:20;;23495:14;;23652:12;;;:22;;:37;;;;;;;;;;:12;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23652:37:0;23719:20;;;;23652:37;;-1:-1:-1;23704:12:0;:35;:52;;;;-1:-1:-1;23743:13:0;;;23704:52;23700:350;;;23773:24;23800:54;23819:4;:20;;;23841:12;23800:18;:54::i;:::-;23773:81;;23869:19;23891:58;23933:15;;23891:37;23912:4;:15;;;23891:16;:20;;:37;;;;:::i;:58::-;23869:80;-1:-1:-1;23982:56:0;24002:35;24028:8;24002:21;23869:80;24018:4;24002:15;:21::i;:35::-;23982:15;;:19;:56::i;:::-;23964:74;;23700:350;;;24067:63;24114:4;:15;;;24067:42;24104:4;24067:32;24083:15;24067:4;:11;;;:15;;:32;;;;:::i;:63::-;24060:70;23377:761;-1:-1:-1;;;;;;;23377:761:0:o;25405:828::-;25471:15;25489:10;25471:28;;25510:21;25534:8;25543:4;25534:14;;;;;;;;;;;;;;;;25583;;;:8;:14;;;;;;:23;;;;;;;;;;25534:14;;;;;;;;-1:-1:-1;25617:16:0;25592:4;25617:10;:16::i;:::-;25648:11;;:15;25644:290;;25680:16;25699:68;25751:4;:15;;;25699:47;25741:4;25699:37;25715:4;:20;;;25699:4;:11;;;:15;;:37;;;;:::i;:68::-;25680:87;-1:-1:-1;25786:12:0;;25782:141;;25819:35;25836:7;25845:8;25819:16;:35::i;:::-;25878:29;;;;;;;;;;;;;;;;;;;;;;25782:141;25644:290;;25948:11;;25944:159;;25976:12;;:62;;:12;;26006:7;26023:4;26030:7;25976:29;:62::i;:::-;26067:11;;:24;;26083:7;26067:15;:24::i;:::-;26053:38;;25944:159;26147:20;;;;26131:11;;:47;;26173:4;;26131:37;;:15;:37::i;:47::-;26113:15;;;:65;26194:31;;;;;;;;26211:4;;26194:31;;;;;;;;;;;;;25405:828;;;;;:::o;19135:71::-;;;;;;:::o;19756:48::-;19798:6;19756:48;:::o;4113:136::-;4171:7;4198:43;4202:1;4205;4198:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;4191:50;4113:136;-1:-1:-1;;;4113:136:0:o;3649:181::-;3707:7;3739:5;;;3763:6;;;;3755:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5037:471;5095:7;5340:6;5336:47;;-1:-1:-1;5370:1:0;5363:8;;5336:47;5407:5;;;5411:1;5407;:5;:1;5431:5;;;;;:10;5423:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5984:132;6042:7;6069:39;6073:1;6076;6069:39;;;;;;;;;;;;;;;;;:3;:39::i;27645:349::-;27740:4;;:29;;;;;;27763:4;27740:29;;;;;;27721:16;;27740:4;;;:14;;:29;;;;;;;;;;;;;;:4;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27740:29:0;;-1:-1:-1;27784:12:0;;27780:207;;27827:8;27817:7;:18;27813:163;;;27856:4;;:32;;:4;;27874:3;27879:8;27856:17;:32::i;:::-;27813:163;;;27929:4;;:31;;:4;;27947:3;27952:7;14906:211;15050:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15073:23;15050:58;;;15023:86;;15043:5;;15023:19;:86::i;20741:267::-;20828:8;:15;20811:14;20854:147;20882:6;20876:3;:12;20854:147;;;20945:8;20920:33;;:8;20929:3;20920:13;;;;;;;;;;;;;;;;;;;;;:21;;;:33;;20912:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20890:5;;20854:147;;15125:248;15296:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15319:27;15296:68;;;15269:96;;15289:5;;15269:19;:96::i;:::-;15125:248;;;;:::o;4552:226::-;4672:7;4708:12;4700:6;;;;4692:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;4744:5:0;;;4552:226::o;6612:312::-;6732:7;6767:12;6760:5;6752:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6791:9;6807:1;6803;:5;;;;;;;6612:312;-1:-1:-1;;;;;6612:312:0:o;17367:774::-;17791:23;17817:69;17845:4;17817:69;;;;;;;;;;;;;;;;;17825:5;17817:27;;;;:69;;;;;:::i;:::-;17901:17;;17791:95;;-1:-1:-1;17901:21:0;17897:237;;18056:10;18045:30;;;;;;;;;;;;;;;-1:-1:-1;18045:30:0;18037:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11832:230;11969:12;12001:53;12024:6;12032:4;12038:1;12041:12;12001:22;:53::i;:::-;11994:60;11832:230;-1:-1:-1;;;;11832:230:0:o;13320:1020::-;13493:12;13526:18;13537:6;13526:10;:18::i;:::-;13518:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13652:12;13666:23;13693:6;:11;;13712:8;13722:4;13693:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13651:76;;;;13742:7;13738:595;;;13773:10;-1:-1:-1;13766:17:0;;-1:-1:-1;13766:17:0;13738:595;13887:17;;:21;13883:439;;14150:10;14144:17;14211:15;14198:10;14194:2;14190:19;14183:44;14098:148;14286:20;;;;;;;;;;;;;;;;;;;;14293:12;;14286:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8892:444;9272:20;9320:8;;;8892:444::o

Swarm Source

ipfs://e5fa0d8854c210dd7969d7e484c9cb19de8b3a378eb78241c868cd72ffbe7325
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.