Contract 0x76ec1ae8065ec5e7d53b7e3869e222cdf2b36db2 1

 

Contract Overview

Balance:
0 BNB

BNB Value:
$0.00

Token:
 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xe30ca0878afd83a240f7770814cd6c0c2edfc10645c33b38761e9e1055702441Swap111293712021-09-22 6:42:3314 hrs 6 mins ago0x3667ca41bcf0eeccd08dc58fa7d952cb0917a6ba IN  0x76ec1ae8065ec5e7d53b7e3869e222cdf2b36db20 BNB0.00181988
0xb0bd453e786a71c1702adedebef7b779c6706b907bc17f9f365c7be86f50e597Swap111242982021-09-22 2:26:5818 hrs 22 mins ago0x3bfd8f8644e292e174a5547b70bfb09870b79866 IN  0x76ec1ae8065ec5e7d53b7e3869e222cdf2b36db20 BNB0.00181988
0x5bba6bf7f2748102ae851e1952ea91d28245824e20f529de9afb3da8fad05844Swap111162762021-09-21 19:40:091 day 1 hr ago0x4030c053f27e505a746707300bb8d9fdfaae3d2b IN  0x76ec1ae8065ec5e7d53b7e3869e222cdf2b36db20 BNB0.00181988
0x590458841fae70bd9d20da7c6a7ba934ffc2319c9d901ad5291cd0cc7a46cd57Swap111089662021-09-21 13:31:461 day 7 hrs ago0xf0725787c3b51001f055a303a476fcde41f3490b IN  0x76ec1ae8065ec5e7d53b7e3869e222cdf2b36db20 BNB0.00181988
0x9479650dfd1edf43086f75a1d53e7ca829430ba08cbad96cfc2e74a5d4b6375eSwap110827412021-09-20 15:37:412 days 5 hrs ago0xeb837fdcddc510b4d3234804e532f7394be85b60 IN  0x76ec1ae8065ec5e7d53b7e3869e222cdf2b36db20 BNB0.00181988
0x985492236b6b9af7a7a9ee5a86757adf770add07e0fb3a0c444bd5372ab838f5Swap110818012021-09-20 14:50:412 days 5 hrs ago0x24844841823727b9e1d480fe0dac9a0e06405e1f IN  0x76ec1ae8065ec5e7d53b7e3869e222cdf2b36db20 BNB0.00181988
0x73eb3c9dcbbc13e5e8c80e8cf5a2234223216bfbcbbd74f0c2a94bc24e92983aSwap110676412021-09-20 3:00:172 days 17 hrs ago0x789723252e546505bb5e2467862c4e62d572ed19 IN  0x76ec1ae8065ec5e7d53b7e3869e222cdf2b36db20 BNB0.00181988
0x86d75ad1f57339bb41e7b34e75fa03b42a1b9d397b4406ddddf8f51cc9f8590aSwap110576782021-09-19 18:42:053 days 2 hrs ago0x96fe89c15a7273397b6e5f69f210ca1cd325d00e IN  0x76ec1ae8065ec5e7d53b7e3869e222cdf2b36db20 BNB0.00181988
0xdb6ffde9b8092134924ce463cf0db4754bb19ec58de5410b11c8adc1a7112b85Swap110527342021-09-19 14:34:483 days 6 hrs ago0x9e4cea3fa60c0f9491b96927aedb1d1b672cb3ab IN  0x76ec1ae8065ec5e7d53b7e3869e222cdf2b36db20 BNB0.00181988
0x825380e50803381ddbafb0465fddd81530260019fc83599dce190b3a19a6e586Swap110522202021-09-19 14:09:063 days 6 hrs ago0xfd6867f6ff4ddc0a5c83f96d58b2b0fc9ba359a5 IN  0x76ec1ae8065ec5e7d53b7e3869e222cdf2b36db20 BNB0.00181988
0x38791ed5c9132a4cc1d6e4d53bba5eb60e883c0f53f9c3ee24f68c605bf45660Swap110404682021-09-19 4:07:493 days 16 hrs ago0x7a117780afca23b54b9cc8a78e4afb99429490df IN  0x76ec1ae8065ec5e7d53b7e3869e222cdf2b36db20 BNB0.00181988
0x289334f5c56fc005e46dff54fe6fe9ecf42be9a73d7957a42e125128348e444fSwap110396082021-09-19 3:24:333 days 17 hrs ago0xb97f068f1dadf25ba78f1588622468e97c499713 IN  0x76ec1ae8065ec5e7d53b7e3869e222cdf2b36db20 BNB0.00181988
0x31fc23f6ee41cca4f76a97d492ee9fe8ef4277336246c5f1902879a703b90c4fSwap110279432021-09-18 17:40:124 days 3 hrs ago0x2a442e386926931283428837dfbddd33f4b65143 IN  0x76ec1ae8065ec5e7d53b7e3869e222cdf2b36db20 BNB0.00181988
0xed777c1924f35aefd5eb1089d627634f12e23d1e8e6ea7e882e15ca078274700Swap110255882021-09-18 15:41:584 days 5 hrs ago0x011934773513e88a0c88cc357aa1e80ce2822b31 IN  0x76ec1ae8065ec5e7d53b7e3869e222cdf2b36db20 BNB0.00181988
0xc61f8256d729c894a1cd139a3feaefcb5b181c3ef07b82a785e5feffcc0e7e0cSwap110178792021-09-18 9:14:294 days 11 hrs ago0x1901cceae792b8318edff4ef1689899919bc8c85 IN  0x76ec1ae8065ec5e7d53b7e3869e222cdf2b36db20 BNB0.00181988
0x4a7e00d08d3c4d6ea64bfefb69295021f0acced2b52d3c7e277e320a0cafef5eSwap109963072021-09-17 15:14:025 days 5 hrs ago0x783eaa631e0c96c10c55bf3e7c6d0660ba899e7d IN  0x76ec1ae8065ec5e7d53b7e3869e222cdf2b36db20 BNB0.00181988
0xcc47d5866d7d0d0ef73695b1a7b15db83243b90edced4db3669dd7cae82ad6d9Swap109678322021-09-16 15:28:366 days 5 hrs ago0x1ec8b1eedef03df50889d66915d9d44c107c578d IN  0x76ec1ae8065ec5e7d53b7e3869e222cdf2b36db20 BNB0.0043911
0xa9846f28b0b73f67f4ccd254e08cbdde71b7361ada63223a708064bb8f0c2864Swap109659292021-09-16 13:53:046 days 6 hrs ago0xbfc726614ad20ad7d627e809f79bdb1d2af7bc71 IN  0x76ec1ae8065ec5e7d53b7e3869e222cdf2b36db20 BNB0.00181988
0x968af8b4bb78b425873f3e4415acc672361a459ba7fc9e1f2722e7eaf25bc63aSwap109610702021-09-16 9:48:586 days 11 hrs ago0x6dbe5a2af32069736fd82c6521b7b24e5af3766c IN  0x76ec1ae8065ec5e7d53b7e3869e222cdf2b36db20 BNB0.001674185
0x2db381c9ee58979d6dcb8e3d8d58d7109c193c9252dad53315f7fc1ee810fe0dSwap109582482021-09-16 7:27:086 days 13 hrs ago0x1a589af2650b969a01a7a35980ee208c046affd2 IN  0x76ec1ae8065ec5e7d53b7e3869e222cdf2b36db20 BNB0.00181988
0xd6778de18bd550de6e9b3d3377f60ff729fa75dcd6accb517cb35e4d993381deSwap109562422021-09-16 5:46:486 days 15 hrs ago0x52adec80c8e4ab1f623b9b895d01e57a75f00a3a IN  0x76ec1ae8065ec5e7d53b7e3869e222cdf2b36db20 BNB0.00181988
0xe0ff55d092eeb1ff7a6e896a725bd8a7d4452a3714cd5d326d33c98c14e11290Swap109553842021-09-16 5:03:546 days 15 hrs ago0xab2d99313c1bea0b85ed63ebe4f7e9b9fc17f692 IN  0x76ec1ae8065ec5e7d53b7e3869e222cdf2b36db20 BNB0.001674225
0xd2beb249d94864c18cdc53ee1fddba656438887fd801ec6841db7c8fae240816Swap109329532021-09-15 10:21:147 days 10 hrs ago0x09bbbe2697467071b3cb4f9acc14cc76152db920 IN  0x76ec1ae8065ec5e7d53b7e3869e222cdf2b36db20 BNB0.00181988
0x67725eb7c46487bf385c54594815fb66eff96656d101160fd9bc7f2a27c78a9aSwap109327402021-09-15 10:10:357 days 10 hrs ago0x19961c68373cd95dd91fdc28888e7111ea466ed4 IN  0x76ec1ae8065ec5e7d53b7e3869e222cdf2b36db20 BNB0.00166988
0x71e2d3902a48933bd6ee4767371c55acab0593dc96b6b7a6df6a869c05eb8f9fSwap109104602021-09-14 15:29:498 days 5 hrs ago0x4e7018c6b190fc52462aaafa295c5932e1210bf1 IN  0x76ec1ae8065ec5e7d53b7e3869e222cdf2b36db20 BNB0.00181988
[ Download CSV Export 
Latest 1 internal transaction
Parent Txn Hash Block From To Value
0xc2ddb20a37dce458651654795da5d6461b872920ec649313cfd760899af558c269887262021-04-29 13:51:54146 days 6 hrs ago BSC: Token Hub 0x76ec1ae8065ec5e7d53b7e3869e222cdf2b36db20.8035675 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Similar Match)
Note: This contract matches the deployed ByteCode of the Source Code for Contract 0xbA25f40abeB09E2d7bEaefdF893199496ea19DA2

Contract Name:
MoonRatSwap

Compiler Version
v0.6.8+commit.0bbfe453

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at BscScan.com on 2021-04-25
*/

// File: contracts/lib/IERC20.sol

pragma solidity ^0.6.0;

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

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

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

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

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

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

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

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

// File: contracts/lib/bep/BepLib.sol

/**
 *Submitted for verification at BscScan.com on 2021-03-22
*/

//SPDX-License-Identifier: Unlicensed

pragma solidity >=0.6.8;

interface IBEP20 {

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

abstract contract Context {
    function _msgSender() internal view virtual returns (address payable) {
        return msg.sender;
    }

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


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

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

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

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

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

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

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

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

    function geUnlockTime() public view returns (uint256) {
        return _lockTime;
    }

    //Locks the contract for owner for the amount of time provided
    function lock(uint256 time) public virtual onlyOwner {
        _previousOwner = _owner;
        _owner = address(0);
        _lockTime = now + time;
        emit OwnershipTransferred(_owner, address(0));
    }

    //Unlocks the contract for owner when _lockTime is exceeds
    function unlock() public virtual {
        require(_previousOwner == msg.sender, "You don't have permission to unlock");
        require(now > _lockTime , "Contract is locked until 7 days");
        emit OwnershipTransferred(_owner, _previousOwner);
        _owner = _previousOwner;
    }
}

interface IPancakeFactory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

interface IPancakePair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

interface IPancakeRouter01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
    external
    payable
    returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
    external
    returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
    external
    returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
    external
    payable
    returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IPancakeRouter02 is IPancakeRouter01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

// File: contracts/lib/bep/ReentrancyGuard.sol

pragma solidity >=0.6.8;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor () public {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and make it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }

    modifier isHuman() {
        require(tx.origin == msg.sender, "sorry humans only");
        _;
    }
}

// File: contracts/distribution/MoonRatSwap.sol

pragma solidity >=0.6.8;
pragma experimental ABIEncoderV2;




contract MoonRatSwap is Ownable, ReentrancyGuard {
    using SafeMath for uint256;

    IERC20 public classicMrat;
    IERC20 public securedMrat;

    mapping(address => bool) public isSwapped;

    constructor(
        address classicMratAddress,
        address securedMratAddress
    ) public {
        setSwapPair(classicMratAddress, securedMratAddress);
    }

    function setSwapPair(
        address classicMratAddress,
        address securedMratAddress
    ) public onlyOwner {
        classicMrat = IERC20(classicMratAddress);
        securedMrat = IERC20(securedMratAddress);
    }

    function emergencyWithdraw() public onlyOwner {
        securedMrat.transfer(msg.sender, securedMrat.balanceOf(address(this)));
    }

    function swap() public nonReentrant isHuman {
        // Non-reentrancy guard
        require(isSwapped[msg.sender] == false, 'Already swapped :)');

        // make sure users have classic MRAT Balance
        uint256 classicMratBalance = classicMrat.balanceOf(msg.sender);

        require(classicMratBalance > 0, 'Classic MRAT balance is zero');
        require(securedMrat.balanceOf(address(this)) >= classicMratBalance, "Fund exceeds");

        // Re-update
        isSwapped[msg.sender] = true;

        // Burn the old token
        classicMrat.transferFrom(msg.sender, address(0x000000000000000000000000000000000000dEaD), classicMratBalance);

        // Now transfer new token
        securedMrat.transfer(msg.sender, classicMratBalance);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"classicMratAddress","type":"address"},{"internalType":"address","name":"securedMratAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"classicMrat","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"geUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isSwapped","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"securedMrat","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"classicMratAddress","type":"address"},{"internalType":"address","name":"securedMratAddress","type":"address"}],"name":"setSwapPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b5060405162001bd938038062001bd983398181016040528101906200003791906200024f565b6000620000496200010960201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35060016003819055506200010182826200011160201b60201c565b505062000353565b600033905090565b620001216200010960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620001b2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001a990620002d2565b60405180910390fd5b81600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b600081519050620002498162000339565b92915050565b600080604083850312156200026357600080fd5b6000620002738582860162000238565b9250506020620002868582860162000238565b9150509250929050565b60006200029f602083620002f4565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b60006020820190508181036000830152620002ed8162000290565b9050919050565b600082825260208201905092915050565b6000620003128262000319565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b620003448162000305565b81146200035057600080fd5b50565b61187680620003636000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c8063b6c5232411610071578063b6c5232414610143578063c19c73db14610161578063db2e21bc1461017f578063dc2c50e514610189578063dd467064146101a5578063f2fde38b146101c1576100b4565b8063135bfbdd146100b95780635e376257146100e9578063715018a6146101075780638119c065146101115780638da5cb5b1461011b578063a69df4b514610139575b600080fd5b6100d360048036038101906100ce919061118a565b6101dd565b6040516100e091906115d7565b60405180910390f35b6100f16101fd565b6040516100fe91906115f2565b60405180910390f35b61010f610223565b005b610119610378565b005b61012361086d565b6040516101309190611541565b60405180910390f35b610141610896565b005b61014b610a6b565b604051610158919061172d565b60405180910390f35b610169610a75565b60405161017691906115f2565b60405180910390f35b610187610a9b565b005b6101a3600480360381019061019e91906111b3565b610c8d565b005b6101bf60048036038101906101ba9190611218565b610da9565b005b6101db60048036038101906101d6919061118a565b610f6a565b005b60066020528060005260406000206000915054906101000a900460ff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61022b61112e565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146102b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102b09061166d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600260035414156103be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103b5906116cd565b60405180910390fd5b60026003819055503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614610434576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042b9061164d565b60405180910390fd5b60001515600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146104c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104be9061162d565b60405180910390fd5b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401610524919061155c565b60206040518083038186803b15801561053c57600080fd5b505afa158015610550573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105749190611241565b9050600081116105b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105b09061168d565b60405180910390fd5b80600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016106159190611541565b60206040518083038186803b15801561062d57600080fd5b505afa158015610641573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106659190611241565b10156106a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161069d906116ed565b60405180910390fd5b6001600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3361dead846040518463ffffffff1660e01b815260040161075f93929190611577565b602060405180830381600087803b15801561077957600080fd5b505af115801561078d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107b191906111ef565b50600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b815260040161080f9291906115ae565b602060405180830381600087803b15801561082957600080fd5b505af115801561083d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061086191906111ef565b50506001600381905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610926576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091d9061170d565b60405180910390fd5b600254421161096a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610961906116ad565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600254905090565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610aa361112e565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b289061166d565b60405180910390fd5b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610bcb9190611541565b60206040518083038186803b158015610be357600080fd5b505afa158015610bf7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1b9190611241565b6040518363ffffffff1660e01b8152600401610c389291906115ae565b602060405180830381600087803b158015610c5257600080fd5b505af1158015610c66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8a91906111ef565b50565b610c9561112e565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1a9061166d565b60405180910390fd5b81600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b610db161112e565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e369061166d565b60405180910390fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550804201600281905550600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b610f7261112e565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611000576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff79061166d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611070576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110679061160d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600081359050611145816117fb565b92915050565b60008151905061115a81611812565b92915050565b60008135905061116f81611829565b92915050565b60008151905061118481611829565b92915050565b60006020828403121561119c57600080fd5b60006111aa84828501611136565b91505092915050565b600080604083850312156111c657600080fd5b60006111d485828601611136565b92505060206111e585828601611136565b9150509250929050565b60006020828403121561120157600080fd5b600061120f8482850161114b565b91505092915050565b60006020828403121561122a57600080fd5b600061123884828501611160565b91505092915050565b60006020828403121561125357600080fd5b600061126184828501611175565b91505092915050565b611273816117a1565b82525050565b61128281611759565b82525050565b6112918161176b565b82525050565b6112a0816117b3565b82525050565b60006112b3602683611748565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000611319601283611748565b91507f416c72656164792073776170706564203a2900000000000000000000000000006000830152602082019050919050565b6000611359601183611748565b91507f736f7272792068756d616e73206f6e6c790000000000000000000000000000006000830152602082019050919050565b6000611399602083611748565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b60006113d9601c83611748565b91507f436c6173736963204d5241542062616c616e6365206973207a65726f000000006000830152602082019050919050565b6000611419601f83611748565b91507f436f6e7472616374206973206c6f636b656420756e74696c20372064617973006000830152602082019050919050565b6000611459601f83611748565b91507f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006000830152602082019050919050565b6000611499600c83611748565b91507f46756e64206578636565647300000000000000000000000000000000000000006000830152602082019050919050565b60006114d9602383611748565b91507f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60008301527f6f636b00000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b61153b81611797565b82525050565b60006020820190506115566000830184611279565b92915050565b6000602082019050611571600083018461126a565b92915050565b600060608201905061158c600083018661126a565b6115996020830185611279565b6115a66040830184611532565b949350505050565b60006040820190506115c3600083018561126a565b6115d06020830184611532565b9392505050565b60006020820190506115ec6000830184611288565b92915050565b60006020820190506116076000830184611297565b92915050565b60006020820190508181036000830152611626816112a6565b9050919050565b600060208201905081810360008301526116468161130c565b9050919050565b600060208201905081810360008301526116668161134c565b9050919050565b600060208201905081810360008301526116868161138c565b9050919050565b600060208201905081810360008301526116a6816113cc565b9050919050565b600060208201905081810360008301526116c68161140c565b9050919050565b600060208201905081810360008301526116e68161144c565b9050919050565b600060208201905081810360008301526117068161148c565b9050919050565b60006020820190508181036000830152611726816114cc565b9050919050565b60006020820190506117426000830184611532565b92915050565b600082825260208201905092915050565b600061176482611777565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006117ac826117d7565b9050919050565b60006117be826117c5565b9050919050565b60006117d082611777565b9050919050565b60006117e2826117e9565b9050919050565b60006117f482611777565b9050919050565b61180481611759565b811461180f57600080fd5b50565b61181b8161176b565b811461182657600080fd5b50565b61183281611797565b811461183d57600080fd5b5056fea26469706673582212209d9848785d458cb1acd4771e39dcaea29a5b049ed26d4f953e55c9e1a6a233a064736f6c634300060800330000000000000000000000006d949f9297a522c0f97c232cc209a67bd7cfa4710000000000000000000000004bd2e8e6e5e8026baa0ed6f2bf42e3637b09206e

Deployed ByteCode Sourcemap

31225:1540:0:-:0;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31225:1540:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;9;2:12;31382:41:0;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;31316:25;;;:::i;:::-;;;;;;;;;;;;;;;;19093:148;;;:::i;:::-;;31990:772;;;:::i;:::-;;18457:79;;;:::i;:::-;;;;;;;;;;;;;;;;20099:293;;;:::i;:::-;;19648:89;;;:::i;:::-;;;;;;;;;;;;;;;;31348:25;;;:::i;:::-;;;;;;;;;;;;;;;;31847:135;;;:::i;:::-;;31610:229;;;;;;;;;;;;;;;;:::i;:::-;;19813:214;;;;;;;;;;;;;;;;:::i;:::-;;19396:244;;;;;;;;;;;;;;;;:::i;:::-;;31382:41;;;;;;;;;;;;;;;;;;;;;;:::o;31316:25::-;;;;;;;;;;;;;:::o;19093:148::-;18679:12;:10;:12::i;:::-;18669:22;;:6;;;;;;;;;;;:22;;;18661:67;;;;;;;;;;;;;;;;;;;;;;19200:1:::1;19163:40;;19184:6;::::0;::::1;;;;;;;;;19163:40;;;;;;;;;;;;19231:1;19214:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;19093:148::o:0;31990:772::-;30041:1;30645:7;;:19;;30637:63;;;;;;;;;;;;;;;;;;;;;;30041:1;30778:7;:18;;;;31046:10:::1;31033:23;;:9;:23;;;31025:53;;;;;;;;;;;;;;;;;;;;;;32111:5:::2;32086:30;;:9;:21;32096:10;32086:21;;;;;;;;;;;;;;;;;;;;;;;;;:30;;;32078:61;;;;;;;;;;;;;;;;;;;;;;32206:26;32235:11;;;;;;;;;;;:21;;;32257:10;32235:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::2;2:2;32235:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::2;77:16;74:1;67:27;5:2;32235:33:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;32235:33:0;;;;;;;;;32206:62;;32310:1;32289:18;:22;32281:63;;;;;;;;;;;;;;;;;;;;;;32403:18;32363:11;;;;;;;;;;;:21;;;32393:4;32363:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::2;2:2;32363:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::2;77:16;74:1;67:27;5:2;32363:36:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;32363:36:0;;;;;;;;;:58;;32355:83;;;;;;;;;;;;;;;;;;;;;;32497:4;32473:9;:21;32483:10;32473:21;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;32545:11;;;;;;;;;;;:24;;;32570:10;32590:42;32635:18;32545:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::2;2:2;32545:109:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::2;77:16;74:1;67:27;5:2;32545:109:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;32545:109:0;;;;;;;;;;32702:11;;;;;;;;;;;:20;;;32723:10;32735:18;32702:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::2;2:2;32702:52:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::2;77:16;74:1;67:27;5:2;32702:52:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;32702:52:0;;;;;;;;;;31089:1;29997::::0;30957:7;:22;;;;31990:772::o;18457:79::-;18495:7;18522:6;;;;;;;;;;;18515:13;;18457:79;:::o;20099:293::-;20169:10;20151:28;;:14;;;;;;;;;;;:28;;;20143:76;;;;;;;;;;;;;;;;;;;;;;20244:9;;20238:3;:15;20230:60;;;;;;;;;;;;;;;;;;;;;;20335:14;;;;;;;;;;;20306:44;;20327:6;;;;;;;;;;;20306:44;;;;;;;;;;;;20370:14;;;;;;;;;;;20361:6;;:23;;;;;;;;;;;;;;;;;;20099:293::o;19648:89::-;19693:7;19720:9;;19713:16;;19648:89;:::o;31348:25::-;;;;;;;;;;;;;:::o;31847:135::-;18679:12;:10;:12::i;:::-;18669:22;;:6;;;;;;;;;;;:22;;;18661:67;;;;;;;;;;;;;;;;;;;;;;31904:11:::1;;;;;;;;;;;:20;;;31925:10;31937:11;;;;;;;;;;;:21;;;31967:4;31937:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31937:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31937:36:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;31937:36:0;;;;;;;;;31904:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31904:70:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31904:70:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;31904:70:0;;;;;;;;;;31847:135::o:0;31610:229::-;18679:12;:10;:12::i;:::-;18669:22;;:6;;;;;;;;;;;:22;;;18661:67;;;;;;;;;;;;;;;;;;;;;;31761:18:::1;31740:11;;:40;;;;;;;;;;;;;;;;;;31812:18;31791:11;;:40;;;;;;;;;;;;;;;;;;31610:229:::0;;:::o;19813:214::-;18679:12;:10;:12::i;:::-;18669:22;;:6;;;;;;;;;;;:22;;;18661:67;;;;;;;;;;;;;;;;;;;;;;19894:6:::1;::::0;::::1;;;;;;;;;19877:14;;:23;;;;;;;;;;;;;;;;;;19928:1;19911:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;19959:4;19953:3;:10;19941:9;:22;;;;20016:1;19979:40;;20000:6;::::0;::::1;;;;;;;;;19979:40;;;;;;;;;;;;19813:214:::0;:::o;19396:244::-;18679:12;:10;:12::i;:::-;18669:22;;:6;;;;;;;;;;;:22;;;18661:67;;;;;;;;;;;;;;;;;;;;;;19505:1:::1;19485:22;;:8;:22;;;;19477:73;;;;;;;;;;;;;;;;;;;;;;19595:8;19566:38;;19587:6;::::0;::::1;;;;;;;;;19566:38;;;;;;;;;;;;19624:8;19615:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;19396:244:::0;:::o;10863:106::-;10916:15;10951:10;10944:17;;10863:106;:::o;5:130:-1:-;;85:6;72:20;63:29;;97:33;124:5;97:33;;;57:78;;;;;142:128;;223:6;217:13;208:22;;235:30;259:5;235:30;;;202:68;;;;;277:130;;357:6;344:20;335:29;;369:33;396:5;369:33;;;329:78;;;;;414:134;;498:6;492:13;483:22;;510:33;537:5;510:33;;;477:71;;;;;555:241;;659:2;647:9;638:7;634:23;630:32;627:2;;;675:1;672;665:12;627:2;710:1;727:53;772:7;763:6;752:9;748:22;727:53;;;717:63;;689:97;621:175;;;;;803:366;;;924:2;912:9;903:7;899:23;895:32;892:2;;;940:1;937;930:12;892:2;975:1;992:53;1037:7;1028:6;1017:9;1013:22;992:53;;;982:63;;954:97;1082:2;1100:53;1145:7;1136:6;1125:9;1121:22;1100:53;;;1090:63;;1061:98;886:283;;;;;;1176:257;;1288:2;1276:9;1267:7;1263:23;1259:32;1256:2;;;1304:1;1301;1294:12;1256:2;1339:1;1356:61;1409:7;1400:6;1389:9;1385:22;1356:61;;;1346:71;;1318:105;1250:183;;;;;1440:241;;1544:2;1532:9;1523:7;1519:23;1515:32;1512:2;;;1560:1;1557;1550:12;1512:2;1595:1;1612:53;1657:7;1648:6;1637:9;1633:22;1612:53;;;1602:63;;1574:97;1506:175;;;;;1688:263;;1803:2;1791:9;1782:7;1778:23;1774:32;1771:2;;;1819:1;1816;1809:12;1771:2;1854:1;1871:64;1927:7;1918:6;1907:9;1903:22;1871:64;;;1861:74;;1833:108;1765:186;;;;;1958:142;2049:45;2088:5;2049:45;;;2044:3;2037:58;2031:69;;;2107:113;2190:24;2208:5;2190:24;;;2185:3;2178:37;2172:48;;;2227:104;2304:21;2319:5;2304:21;;;2299:3;2292:34;2286:45;;;2338:152;2434:50;2478:5;2434:50;;;2429:3;2422:63;2416:74;;;2498:375;;2658:67;2722:2;2717:3;2658:67;;;2651:74;;2758:34;2754:1;2749:3;2745:11;2738:55;2827:8;2822:2;2817:3;2813:12;2806:30;2864:2;2859:3;2855:12;2848:19;;2644:229;;;;2882:318;;3042:67;3106:2;3101:3;3042:67;;;3035:74;;3142:20;3138:1;3133:3;3129:11;3122:41;3191:2;3186:3;3182:12;3175:19;;3028:172;;;;3209:317;;3369:67;3433:2;3428:3;3369:67;;;3362:74;;3469:19;3465:1;3460:3;3456:11;3449:40;3517:2;3512:3;3508:12;3501:19;;3355:171;;;;3535:332;;3695:67;3759:2;3754:3;3695:67;;;3688:74;;3795:34;3791:1;3786:3;3782:11;3775:55;3858:2;3853:3;3849:12;3842:19;;3681:186;;;;3876:328;;4036:67;4100:2;4095:3;4036:67;;;4029:74;;4136:30;4132:1;4127:3;4123:11;4116:51;4195:2;4190:3;4186:12;4179:19;;4022:182;;;;4213:331;;4373:67;4437:2;4432:3;4373:67;;;4366:74;;4473:33;4469:1;4464:3;4460:11;4453:54;4535:2;4530:3;4526:12;4519:19;;4359:185;;;;4553:331;;4713:67;4777:2;4772:3;4713:67;;;4706:74;;4813:33;4809:1;4804:3;4800:11;4793:54;4875:2;4870:3;4866:12;4859:19;;4699:185;;;;4893:312;;5053:67;5117:2;5112:3;5053:67;;;5046:74;;5153:14;5149:1;5144:3;5140:11;5133:35;5196:2;5191:3;5187:12;5180:19;;5039:166;;;;5214:372;;5374:67;5438:2;5433:3;5374:67;;;5367:74;;5474:34;5470:1;5465:3;5461:11;5454:55;5543:5;5538:2;5533:3;5529:12;5522:27;5577:2;5572:3;5568:12;5561:19;;5360:226;;;;5594:113;5677:24;5695:5;5677:24;;;5672:3;5665:37;5659:48;;;5714:222;;5841:2;5830:9;5826:18;5818:26;;5855:71;5923:1;5912:9;5908:17;5899:6;5855:71;;;5812:124;;;;;5943:238;;6078:2;6067:9;6063:18;6055:26;;6092:79;6168:1;6157:9;6153:17;6144:6;6092:79;;;6049:132;;;;;6188:460;;6379:2;6368:9;6364:18;6356:26;;6393:79;6469:1;6458:9;6454:17;6445:6;6393:79;;;6483:72;6551:2;6540:9;6536:18;6527:6;6483:72;;;6566;6634:2;6623:9;6619:18;6610:6;6566:72;;;6350:298;;;;;;;6655:349;;6818:2;6807:9;6803:18;6795:26;;6832:79;6908:1;6897:9;6893:17;6884:6;6832:79;;;6922:72;6990:2;6979:9;6975:18;6966:6;6922:72;;;6789:215;;;;;;7011:210;;7132:2;7121:9;7117:18;7109:26;;7146:65;7208:1;7197:9;7193:17;7184:6;7146:65;;;7103:118;;;;;7228:248;;7368:2;7357:9;7353:18;7345:26;;7382:84;7463:1;7452:9;7448:17;7439:6;7382:84;;;7339:137;;;;;7483:416;;7683:2;7672:9;7668:18;7660:26;;7733:9;7727:4;7723:20;7719:1;7708:9;7704:17;7697:47;7758:131;7884:4;7758:131;;;7750:139;;7654:245;;;;7906:416;;8106:2;8095:9;8091:18;8083:26;;8156:9;8150:4;8146:20;8142:1;8131:9;8127:17;8120:47;8181:131;8307:4;8181:131;;;8173:139;;8077:245;;;;8329:416;;8529:2;8518:9;8514:18;8506:26;;8579:9;8573:4;8569:20;8565:1;8554:9;8550:17;8543:47;8604:131;8730:4;8604:131;;;8596:139;;8500:245;;;;8752:416;;8952:2;8941:9;8937:18;8929:26;;9002:9;8996:4;8992:20;8988:1;8977:9;8973:17;8966:47;9027:131;9153:4;9027:131;;;9019:139;;8923:245;;;;9175:416;;9375:2;9364:9;9360:18;9352:26;;9425:9;9419:4;9415:20;9411:1;9400:9;9396:17;9389:47;9450:131;9576:4;9450:131;;;9442:139;;9346:245;;;;9598:416;;9798:2;9787:9;9783:18;9775:26;;9848:9;9842:4;9838:20;9834:1;9823:9;9819:17;9812:47;9873:131;9999:4;9873:131;;;9865:139;;9769:245;;;;10021:416;;10221:2;10210:9;10206:18;10198:26;;10271:9;10265:4;10261:20;10257:1;10246:9;10242:17;10235:47;10296:131;10422:4;10296:131;;;10288:139;;10192:245;;;;10444:416;;10644:2;10633:9;10629:18;10621:26;;10694:9;10688:4;10684:20;10680:1;10669:9;10665:17;10658:47;10719:131;10845:4;10719:131;;;10711:139;;10615:245;;;;10867:416;;11067:2;11056:9;11052:18;11044:26;;11117:9;11111:4;11107:20;11103:1;11092:9;11088:17;11081:47;11142:131;11268:4;11142:131;;;11134:139;;11038:245;;;;11290:222;;11417:2;11406:9;11402:18;11394:26;;11431:71;11499:1;11488:9;11484:17;11475:6;11431:71;;;11388:124;;;;;11520:163;;11635:6;11630:3;11623:19;11672:4;11667:3;11663:14;11648:29;;11616:67;;;;;11691:91;;11753:24;11771:5;11753:24;;;11742:35;;11736:46;;;;11789:85;;11862:5;11855:13;11848:21;11837:32;;11831:43;;;;11881:121;;11954:42;11947:5;11943:54;11932:65;;11926:76;;;;12009:72;;12071:5;12060:16;;12054:27;;;;12088:129;;12175:37;12206:5;12175:37;;;12162:50;;12156:61;;;;12224:147;;12316:50;12360:5;12316:50;;;12303:63;;12297:74;;;;12378:121;;12470:24;12488:5;12470:24;;;12457:37;;12451:48;;;;12506:121;;12585:37;12616:5;12585:37;;;12572:50;;12566:61;;;;12634:108;;12713:24;12731:5;12713:24;;;12700:37;;12694:48;;;;12749:117;12818:24;12836:5;12818:24;;;12811:5;12808:35;12798:2;;12857:1;12854;12847:12;12798:2;12792:74;;12873:111;12939:21;12954:5;12939:21;;;12932:5;12929:32;12919:2;;12975:1;12972;12965:12;12919:2;12913:71;;12991:117;13060:24;13078:5;13060:24;;;13053:5;13050:35;13040:2;;13099:1;13096;13089:12;13040:2;13034:74;

Swarm Source

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