Contract 0x212331e1435A8df230715dB4C02B2a3A0abF8c61 2

Txn Hash Method
Block
From
To
Value [Txn Fee]
0x07d8acacc5bf0cab80402299e627f8f489184d96d94594cde3010d1624e932a4Approve40813362022-08-09 14:10:5911 mins ago0x7814b597cda2c7f53ca92b5df238af1728150963 IN  0x212331e1435a8df230715db4c02b2a3a0abf8c610 CRO0.222145 5,000
0x177ae24002d51577b548fcba56e82d1a9965bcf8d746b475dd91a416fddb8eaaTransfer40811912022-08-09 13:57:1225 mins ago0xc184a8a9a8fe3cf044075d97da58d01706107cad IN  0x212331e1435a8df230715db4c02b2a3a0abf8c610 CRO0.2189285745920
0xa3d1f7c0970ba5cad9d70d11d214cdddfdbb9a5f65a7dd15c2dc3c23c4ae3309Transfer40805312022-08-09 12:54:541 hr 27 mins ago0xeee8f66ad2dd4e9a332d2b408bc8d8860a9ea025 IN  0x212331e1435a8df230715db4c02b2a3a0abf8c610 CRO0.2189299162480
0x7b0bcedfa86324fe728dc7e0580ebd800276dacdcbd9f14db710b7f7b1bf6726Approve40792742022-08-09 10:56:053 hrs 26 mins ago0x834786bbf1c1f417293a03bdb7110887ee23a2fd IN  0x212331e1435a8df230715db4c02b2a3a0abf8c610 CRO0.311003 7,000
0x39fbbb597dd0bbfb245a9cd47169051c7c7216a8106dbbaeb315c681a1170c56Approve40786652022-08-09 9:58:244 hrs 24 mins ago0xcfe76d377c7ab09eb9f1569430fe475daab0e55a IN  0x212331e1435a8df230715db4c02b2a3a0abf8c610 CRO0.219736961388 4,945.800296835
0x8efd5ad5285bc969aa09efd50877a2b1f3397ca94749c3f0c4a4b22db2a71c86Approve40783712022-08-09 9:30:284 hrs 52 mins ago0x9a6911bf0188c16de5f420480537946037614cd8 IN  0x212331e1435a8df230715db4c02b2a3a0abf8c610 CRO0.2221450
0xc29b8776a676d8a455a15feb635c3208369db53b1f9d438c188390710e083fc1Approve40779542022-08-09 8:50:295 hrs 32 mins ago0x5534e008aea0b41d16bbb45117c4acf3e9529787 IN  0x212331e1435a8df230715db4c02b2a3a0abf8c610 CRO0.2221450
0xba6403f747544767c6d015dc317302bf09b9b71fa2d1cfa623574c825e8b46f8Approve40777662022-08-09 8:32:455 hrs 49 mins ago0x3d6e2e430bb02b24e542f082f63b09b520eae7b2 IN  0x212331e1435a8df230715db4c02b2a3a0abf8c610 CRO0.222145 5,000
0xf358a9b07b2f6df803b4c01e0da9ccde3b682e468d211d5b5ea16a307fe12fd2Approve40763752022-08-09 6:21:148 hrs 1 min ago0xf9e1619736709700319c435157a1c75e59a06376 IN  0x212331e1435a8df230715db4c02b2a3a0abf8c610 CRO0.2416424045910
0x6135f2a326438e39071d11fc1d427246544698b42bcb5d767d344a81d1d4d18cTransfer40763382022-08-09 6:17:448 hrs 4 mins ago0x769658c30a98753578b68f0f10e3f5e7011a004d IN  0x212331e1435a8df230715db4c02b2a3a0abf8c610 CRO0.218960172306 4,945.905272224
0xbd723de477cde168a943d8f0080e243490e4aa93982a16ebcb6f29fec9baa907Transfer40761002022-08-09 5:55:158 hrs 27 mins ago0x888dd20d2f8b740bea2827d7ca05954076df1965 IN  0x212331e1435a8df230715db4c02b2a3a0abf8c610 CRO0.159560199519 4,945.916106749
0x34f7b2caa58d009c361a806cdd2e976ba98bab403ed8116888a7cf8540d875a7Transfer40759552022-08-09 5:41:318 hrs 41 mins ago0x293eb8a87037f9a7db53ac38bc0cdfbf2533cf67 IN  0x212331e1435a8df230715db4c02b2a3a0abf8c610 CRO0.159609871871 4,945.922713017
0x905b753d3a462b9e78b48ba00f699f75b7e0e137f06bc2665fe0fb73a19fb2f1Transfer40750222022-08-09 4:13:2810 hrs 9 mins ago0x3997d0fd8c8ee4356062f62fd75d045cbbcd0ffd IN  0x212331e1435a8df230715db4c02b2a3a0abf8c610 CRO0.218913386727 4,945.965674697
0xc5b0540212dec4fb3d99d84be87d34e07bb2ad8ef1fd836be648eb34ce8d98b0Transfer40749972022-08-09 4:11:0710 hrs 11 mins ago0xd69e8a439750511d9aa1c58ff73200dbd2996587 IN  0x212331e1435a8df230715db4c02b2a3a0abf8c610 CRO0.199391707228 4,945.966841006
0xd484ac5ed2998db8647d272cfe3a83a433868aac2c5a6a409621d4d2aa20d438Transfer40749742022-08-09 4:08:5710 hrs 13 mins ago0xb33257cbcdb4c9944751f00d13d6b1cd6cde48bf IN  0x212331e1435a8df230715db4c02b2a3a0abf8c610 CRO0.19933239848 4,945.967904334
0x24fc5c9c0466d344158b5507126525f5004bfd9fdb082acba72bf9d39acee825Transfer40749292022-08-09 4:04:4310 hrs 17 mins ago0x579453e15becca4811b6eacbe1054e2932186286 IN  0x212331e1435a8df230715db4c02b2a3a0abf8c610 CRO0.273640734617 4,945.969971028
0xc6f43b1d63140aeefa760278ea3af60cba25438cca8b9e1e069271b8f171476fApprove40731152022-08-09 1:13:3313 hrs 9 mins ago0x986b9015609006444f372f84c5c54c0eddbbe0cf IN  0x212331e1435a8df230715db4c02b2a3a0abf8c610 CRO0.222145 5,000
0xfc5cee841f81eb0d4e2effe033477caeffc75b21eaf71bc65a448a571ecfc3cbApprove40729122022-08-09 0:54:2413 hrs 28 mins ago0x6358c42c29d574198b057ed0ada2bd17fcbb4fed IN  0x212331e1435a8df230715db4c02b2a3a0abf8c610 CRO0.2196819969510
0xf8961d0a84344944eea9e4f9480ef25f61a7f789b6f4dc591b62e34ae9562da9Approve40729052022-08-09 0:53:4513 hrs 28 mins ago0x54c9ea247a2a9404e5654086caa496ec1fafb00c IN  0x212331e1435a8df230715db4c02b2a3a0abf8c610 CRO0.114891885836 4,944.563859386
0x4d5a65214547b74a9b63595caab2e452d700b9cfd1bd6a0ac806322cb21ed732Approve40728532022-08-09 0:48:5013 hrs 33 mins ago0x8e7daee2736149a715e3d58255112695be026391 IN  0x212331e1435a8df230715db4c02b2a3a0abf8c610 CRO0.222145 5,000
0x11c998ff8701bd60e36c15e66fb7fd3b5fe5660dbd8208dc24f81580cb0c5880Approve40711592022-08-08 22:08:5516 hrs 13 mins ago0x0269002d8f3ae5bbade76f0d8943974d5b47c4b5 IN  0x212331e1435a8df230715db4c02b2a3a0abf8c610 CRO0.2196856104020
0x6960989445d8a97c358a318d20f79ad178745f6070c422440ca2383723660130Transfer40693212022-08-08 19:15:1819 hrs 7 mins ago0x6a1ddcd8c8f3613865ffdba9df55a4fe88683190 IN  0x212331e1435a8df230715db4c02b2a3a0abf8c610 CRO0.159664178024 4,946.226085018
0x4fbe5f90e867d8f8203ad05620d72e3d12b2f50a17b0dd804c5671e9c316973aApprove40687382022-08-08 18:20:0220 hrs 2 mins ago0xb42580cc6d79dc111852160c0942527fedf01318 IN  0x212331e1435a8df230715db4c02b2a3a0abf8c610 CRO0.2196903792350
0x36089a91bf0b43bd1b499ba03a935fa0ccf830afb02ba66fd2c7c4325822b766Approve40681082022-08-08 17:20:2321 hrs 2 mins ago0x047c3fb73b26c7f8867c0afeb046107a8fb66dc8 IN  0x212331e1435a8df230715db4c02b2a3a0abf8c610 CRO0.2196916265180
0x591732d0506ad8f219aea8d64cbc0736ed32aa0ccab281fc3bd432a947e86d9aTransfer40674172022-08-08 16:14:5722 hrs 7 mins ago0x286fb9ff6f7fcc5b597c3ca88049a7e5c765aa4e IN  0x212331e1435a8df230715db4c02b2a3a0abf8c610 CRO0.219022644009 4,946.310840317
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
MadToken

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at cronoscan.com on 2022-05-05
*/

// SPDX-License-Identifier: MIT
pragma solidity 0.6.12;

contract Context {
    // Empty internal constructor, to prevent people from mistakenly deploying
    // an instance of this contract, which should be used via inheritance.
    constructor() internal {}

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

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

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() 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 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 onlyOwner {
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     */
    function _transferOwnership(address newOwner) internal {
        require(newOwner != address(0), 'Ownable: new owner is the zero address');
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}
interface IBEP20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    function preMineSupply() external view returns (uint256);

    function maxSupply() external view returns (uint256);

    /**
     * @dev Returns the token decimals.
     */
    function decimals() external view returns (uint8);

    /**
     * @dev Returns the token symbol.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the token name.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the bep token owner.
     */
    function getOwner() external view returns (address);

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

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

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

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

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

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

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}
library 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;
    }

    function min(uint256 x, uint256 y) internal pure returns (uint256 z) {
        z = x < y ? x : y;
    }

    // babylonian method (https://en.wikipedia.org/wiki/Methods_of_computing_square_roots#Babylonian_method)
    function sqrt(uint256 y) internal pure returns (uint256 z) {
        if (y > 3) {
            z = y;
            uint256 x = y / 2 + 1;
            while (x < z) {
                z = x;
                x = (y / x + x) / 2;
            }
        } else if (y != 0) {
            z = 1;
        }
    }
}
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 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);
            }
        }
    }
}

contract BEP20 is Context, IBEP20, Ownable {
    uint256 private constant _preMineSupply = 2000000 * 1e18;
    uint256 private constant _maxSupply = 15000000 * 1e18; 

    using SafeMath for uint256;
    using Address for address;

    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;
    uint8 private _decimals;

    /**
     * @dev Sets the values for {name} and {symbol}, initializes {decimals} with
     * a default value of 18.
     *
     * To select a different value for {decimals}, use {_setupDecimals}.
     *
     * All three of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name, string memory symbol) public {
        _name = name;
        _symbol = symbol;
        _decimals = 18;

        _mint(msg.sender, _preMineSupply);
    }

    /**
     * @dev Returns the bep token owner.
     */
    function getOwner() external override view returns (address) {
        return owner();
    }

    /**
     * @dev Returns the token name.
     */
    function name() public override view returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the token decimals.
     */
    function decimals() public override view returns (uint8) {
        return _decimals;
    }

    /**
     * @dev Returns the token symbol.
     */
    function symbol() public override view returns (string memory) {
        return _symbol;
    }

    /**
     * @dev See {BEP20-totalSupply}.
     */
    function totalSupply() public override view returns (uint256) {
        return _totalSupply;
    }

    function preMineSupply() public override view returns (uint256) {
        return _preMineSupply;
    }

    function maxSupply() public override view returns (uint256) {
        return _maxSupply;
    }

    /**
     * @dev See {BEP20-balanceOf}.
     */
    function balanceOf(address account) public override view returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {BEP20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    /**
     * @dev See {BEP20-allowance}.
     */
    function allowance(address owner, address spender) public override view returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {BEP20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev See {BEP20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {BEP20};
     *
     * Requirements:
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for `sender`'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(
            sender,
            _msgSender(),
            _allowances[sender][_msgSender()].sub(amount, 'BEP20: transfer amount exceeds allowance')
        );
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {BEP20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {BEP20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender].sub(subtractedValue, 'BEP20: decreased allowance below zero')
        );
        return true;
    }

    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal {
        require(sender != address(0), 'BEP20: transfer from the zero address');
        require(recipient != address(0), 'BEP20: transfer to the zero address');

        _balances[sender] = _balances[sender].sub(amount, 'BEP20: transfer amount exceeds balance');
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements
     *
     * - `to` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal returns(bool) {
        require(account != address(0), 'BEP20: mint to the zero address');
        if (amount.add(_totalSupply) > _maxSupply) {
            return false;
        }

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal {
        require(account != address(0), 'BEP20: burn from the zero address');

        _balances[account] = _balances[account].sub(amount, 'BEP20: burn amount exceeds balance');
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner`s tokens.
     *
     * This is internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal {
        require(owner != address(0), 'BEP20: approve from the zero address');
        require(spender != address(0), 'BEP20: approve to the zero address');

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`.`amount` is then deducted
     * from the caller's allowance.
     *
     * See {_burn} and {_approve}.
     */
    function _burnFrom(address account, uint256 amount) internal {
        _burn(account, amount);
        _approve(
            account,
            _msgSender(),
            _allowances[account][_msgSender()].sub(amount, 'BEP20: burn amount exceeds allowance')
        );
    }
}

library EnumerableSet {
    // To implement this library for multiple types with as little code
    // repetition as possible, we write it in terms of a generic Set type with
    // bytes32 values.
    // The Set implementation uses private functions, and user-facing
    // implementations (such as AddressSet) are just wrappers around the
    // underlying Set.
    // This means that we can only create new EnumerableSets for types that fit
    // in bytes32.

    struct Set {
        // Storage of set values
        bytes32[] _values;
        // Position of the value in the `values` array, plus 1 because index 0
        // means a value is not in the set.
        mapping(bytes32 => uint256) _indexes;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function _add(Set storage set, bytes32 value) private returns (bool) {
        if (!_contains(set, value)) {
            set._values.push(value);
            // The value is stored at length-1, but we add 1 to all indexes
            // and use 0 as a sentinel value
            set._indexes[value] = set._values.length;
            return true;
        } else {
            return false;
        }
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function _remove(Set storage set, bytes32 value) private returns (bool) {
        // We read and store the value's index to prevent multiple reads from the same storage slot
        uint256 valueIndex = set._indexes[value];

        if (valueIndex != 0) {
            // Equivalent to contains(set, value)
            // To delete an element from the _values array in O(1), we swap the element to delete with the last one in
            // the array, and then remove the last element (sometimes called as 'swap and pop').
            // This modifies the order of the array, as noted in {at}.

            uint256 toDeleteIndex = valueIndex - 1;
            uint256 lastIndex = set._values.length - 1;

            // When the value to delete is the last one, the swap operation is unnecessary. However, since this occurs
            // so rarely, we still do the swap anyway to avoid the gas cost of adding an 'if' statement.

            bytes32 lastvalue = set._values[lastIndex];

            // Move the last value to the index where the value to delete is
            set._values[toDeleteIndex] = lastvalue;
            // Update the index for the moved value
            set._indexes[lastvalue] = toDeleteIndex + 1; // All indexes are 1-based

            // Delete the slot where the moved value was stored
            set._values.pop();

            // Delete the index for the deleted slot
            delete set._indexes[value];

            return true;
        } else {
            return false;
        }
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function _contains(Set storage set, bytes32 value) private view returns (bool) {
        return set._indexes[value] != 0;
    }

    /**
     * @dev Returns the number of values on the set. O(1).
     */
    function _length(Set storage set) private view returns (uint256) {
        return set._values.length;
    }

    /**
     * @dev Returns the value stored at position `index` in the set. O(1).
     *
     * Note that there are no guarantees on the ordering of values inside the
     * array, and it may change when more values are added or removed.
     *
     * Requirements:
     *
     * - `index` must be strictly less than {length}.
     */
    function _at(Set storage set, uint256 index) private view returns (bytes32) {
        require(set._values.length > index, 'EnumerableSet: index out of bounds');
        return set._values[index];
    }

    // AddressSet

    struct AddressSet {
        Set _inner;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function add(AddressSet storage set, address value) internal returns (bool) {
        return _add(set._inner, bytes32(uint256(value)));
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function remove(AddressSet storage set, address value) internal returns (bool) {
        return _remove(set._inner, bytes32(uint256(value)));
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function contains(AddressSet storage set, address value) internal view returns (bool) {
        return _contains(set._inner, bytes32(uint256(value)));
    }

    /**
     * @dev Returns the number of values in the set. O(1).
     */
    function length(AddressSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    /**
     * @dev Returns the value stored at position `index` in the set. O(1).
     *
     * Note that there are no guarantees on the ordering of values inside the
     * array, and it may change when more values are added or removed.
     *
     * Requirements:
     *
     * - `index` must be strictly less than {length}.
     */
    function at(AddressSet storage set, uint256 index) internal view returns (address) {
        return address(uint256(_at(set._inner, index)));
    }

    // UintSet

    struct UintSet {
        Set _inner;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function add(UintSet storage set, uint256 value) internal returns (bool) {
        return _add(set._inner, bytes32(value));
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function remove(UintSet storage set, uint256 value) internal returns (bool) {
        return _remove(set._inner, bytes32(value));
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function contains(UintSet storage set, uint256 value) internal view returns (bool) {
        return _contains(set._inner, bytes32(value));
    }

    /**
     * @dev Returns the number of values on the set. O(1).
     */
    function length(UintSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    /**
     * @dev Returns the value stored at position `index` in the set. O(1).
     *
     * Note that there are no guarantees on the ordering of values inside the
     * array, and it may change when more values are added or removed.
     *
     * Requirements:
     *
     * - `index` must be strictly less than {length}.
     */
    function at(UintSet storage set, uint256 index) internal view returns (uint256) {
        return uint256(_at(set._inner, index));
    }
}

// Mad token with
contract MadToken is BEP20('Mad Bucks', 'MAD') {
    using EnumerableSet for EnumerableSet.AddressSet;
    EnumerableSet.AddressSet private _minters;

    /// @notice Creates `_amount` token to `_to`.
    function mint(address _to, uint256 _amount) public onlyMinter returns(bool) {
        _mint(_to, _amount);
        return true;
    }

    function addMinter(address _addMinter) public onlyOwner returns (bool) {
        require(_addMinter != address(0), "MAD: _addMinter is the zero address");
        return EnumerableSet.add(_minters, _addMinter);
    }

    function delMinter(address _delMinter) public onlyOwner returns (bool) {
        require(_delMinter != address(0), "MAD: _delMinter is the zero address");
        return EnumerableSet.remove(_minters, _delMinter);
    }

    function getMinterLength() public view returns (uint256) {
        return EnumerableSet.length(_minters);
    }

    function isMinter(address account) public view returns (bool) {
        return EnumerableSet.contains(_minters, account);
    }

    function getMinter(uint256 _index) public view onlyOwner returns (address){
        require(_index <= getMinterLength() - 1, "MAD: index out of bounds");
        return EnumerableSet.at(_minters, _index);
    }

    // modifier for mint function
    modifier onlyMinter() {
        require(isMinter(msg.sender), "caller is not the minter");
        _;
    }
}

Contract ABI

[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"_addMinter","type":"address"}],"name":"addMinter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_delMinter","type":"address"}],"name":"delMinter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"getMinter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMinterLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isMinter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preMineSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b50604051806040016040528060098152602001684d6164204275636b7360b81b8152506040518060400160405280600381526020016213505160ea1b8152506000620000626200010560201b60201c565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508151620000c1906004906020850190620002ad565b508051620000d7906005906020840190620002ad565b506006805460ff19166012179055620000fc336a01a784379d99db4200000062000109565b50505062000349565b3390565b60006001600160a01b03831662000167576040805162461bcd60e51b815260206004820152601f60248201527f42455032303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b6a0c685fa11e01ec6f0000006200018f600354846200024b60201b62000b1c1790919060201c565b11156200019f5750600062000245565b620001bb826003546200024b60201b62000b1c1790919060201c565b6003556001600160a01b038316600090815260016020908152604090912054620001f091849062000b1c6200024b821b17901c565b6001600160a01b03841660008181526001602090815260408083209490945583518681529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35b92915050565b600082820183811015620002a6576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620002f057805160ff191683800117855562000320565b8280016001018555821562000320579182015b828111156200032057825182559160200191906001019062000303565b506200032e92915062000332565b5090565b5b808211156200032e576000815560010162000333565b6113da80620003596000396000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c806370a08231116100c3578063a457c2d71161007c578063a457c2d7146103b2578063a9059cbb146103de578063aa271e1a1461040a578063d5abeb0114610430578063dd62ed3e14610438578063f2fde38b146104665761014d565b806370a0823114610344578063715018a61461036a578063893d20e8146103745780638da5cb5b1461037c57806395d89b4114610384578063983b2d561461038c5761014d565b806323338b881161011557806323338b881461023957806323b872dd1461025f578063313ce5671461029557806339509351146102b357806340c10f19146102df5780635b7121f81461030b5761014d565b80630323aac71461015257806306fdde031461016c578063095ea7b3146101e95780630c16ea831461022957806318160ddd14610231575b600080fd5b61015a61048c565b60408051918252519081900360200190f35b61017461049d565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101ae578181015183820152602001610196565b50505050905090810190601f1680156101db5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610215600480360360408110156101ff57600080fd5b506001600160a01b038135169060200135610533565b604080519115158252519081900360200190f35b61015a610551565b61015a610560565b6102156004803603602081101561024f57600080fd5b50356001600160a01b0316610566565b6102156004803603606081101561027557600080fd5b506001600160a01b03813581169160208101359091169060400135610610565b61029d610697565b6040805160ff9092168252519081900360200190f35b610215600480360360408110156102c957600080fd5b506001600160a01b0381351690602001356106a0565b610215600480360360408110156102f557600080fd5b506001600160a01b0381351690602001356106ee565b6103286004803603602081101561032157600080fd5b5035610754565b604080516001600160a01b039092168252519081900360200190f35b61015a6004803603602081101561035a57600080fd5b50356001600160a01b0316610818565b610372610833565b005b6103286108d5565b6103286108db565b6101746108ea565b610215600480360360208110156103a257600080fd5b50356001600160a01b031661094b565b610215600480360360408110156103c857600080fd5b506001600160a01b0381351690602001356109f5565b610215600480360360408110156103f457600080fd5b506001600160a01b038135169060200135610a5d565b6102156004803603602081101561042057600080fd5b50356001600160a01b0316610a71565b61015a610a7e565b61015a6004803603604081101561044e57600080fd5b506001600160a01b0381358116916020013516610a8d565b6103726004803603602081101561047c57600080fd5b50356001600160a01b0316610ab8565b60006104986007610b7d565b905090565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156105295780601f106104fe57610100808354040283529160200191610529565b820191906000526020600020905b81548152906001019060200180831161050c57829003601f168201915b5050505050905090565b6000610547610540610b88565b8484610b8c565b5060015b92915050565b6a01a784379d99db4200000090565b60035490565b6000610570610b88565b6000546001600160a01b039081169116146105c0576040805162461bcd60e51b815260206004820181905260248201526000805160206112d2833981519152604482015290519081900360640190fd5b6001600160a01b0382166106055760405162461bcd60e51b81526004018080602001828103825260238152602001806113826023913960400191505060405180910390fd5b61054b600783610c78565b600061061d848484610c8d565b61068d84610629610b88565b61068885604051806060016040528060288152602001611287602891396001600160a01b038a16600090815260026020526040812090610667610b88565b6001600160a01b031681526020810191909152604001600020549190610ddf565b610b8c565b5060019392505050565b60065460ff1690565b60006105476106ad610b88565b8461068885600260006106be610b88565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490610b1c565b60006106f933610a71565b61074a576040805162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420746865206d696e7465720000000000000000604482015290519081900360640190fd5b61068d8383610e76565b600061075e610b88565b6000546001600160a01b039081169116146107ae576040805162461bcd60e51b815260206004820181905260248201526000805160206112d2833981519152604482015290519081900360640190fd5b60016107b861048c565b0382111561080d576040805162461bcd60e51b815260206004820152601860248201527f4d41443a20696e646578206f7574206f6620626f756e64730000000000000000604482015290519081900360640190fd5b61054b600783610f8f565b6001600160a01b031660009081526001602052604090205490565b61083b610b88565b6000546001600160a01b0390811691161461088b576040805162461bcd60e51b815260206004820181905260248201526000805160206112d2833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b60006104985b6000546001600160a01b031690565b60058054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156105295780601f106104fe57610100808354040283529160200191610529565b6000610955610b88565b6000546001600160a01b039081169116146109a5576040805162461bcd60e51b815260206004820181905260248201526000805160206112d2833981519152604482015290519081900360640190fd5b6001600160a01b0382166109ea5760405162461bcd60e51b81526004018080602001828103825260238152602001806112af6023913960400191505060405180910390fd5b61054b600783610f9b565b6000610547610a02610b88565b846106888560405180606001604052806025815260200161133b6025913960026000610a2c610b88565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190610ddf565b6000610547610a6a610b88565b8484610c8d565b600061054b600783610fb0565b6a0c685fa11e01ec6f00000090565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b610ac0610b88565b6000546001600160a01b03908116911614610b10576040805162461bcd60e51b815260206004820181905260248201526000805160206112d2833981519152604482015290519081900360640190fd5b610b1981610fc5565b50565b600082820183811015610b76576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b600061054b82611065565b3390565b6001600160a01b038316610bd15760405162461bcd60e51b815260040180806020018281038252602481526020018061123d6024913960400191505060405180910390fd5b6001600160a01b038216610c165760405162461bcd60e51b81526004018080602001828103825260228152602001806113606022913960400191505060405180910390fd5b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6000610b76836001600160a01b038416611069565b6001600160a01b038316610cd25760405162461bcd60e51b81526004018080602001828103825260258152602001806112186025913960400191505060405180910390fd5b6001600160a01b038216610d175760405162461bcd60e51b81526004018080602001828103825260238152602001806113186023913960400191505060405180910390fd5b610d54816040518060600160405280602681526020016112f2602691396001600160a01b0386166000908152600160205260409020549190610ddf565b6001600160a01b038085166000908152600160205260408082209390935590841681522054610d839082610b1c565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115610e6e5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610e33578181015183820152602001610e1b565b50505050905090810190601f168015610e605780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60006001600160a01b038316610ed3576040805162461bcd60e51b815260206004820152601f60248201527f42455032303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b6a0c685fa11e01ec6f000000610ef460035484610b1c90919063ffffffff16565b1115610f025750600061054b565b600354610f0f9083610b1c565b6003556001600160a01b038316600090815260016020526040902054610f359083610b1c565b6001600160a01b03841660008181526001602090815260408083209490945583518681529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a392915050565b6000610b76838361112f565b6000610b76836001600160a01b038416611193565b6000610b76836001600160a01b0384166111dd565b6001600160a01b03811661100a5760405162461bcd60e51b81526004018080602001828103825260268152602001806112616026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b5490565b60008181526001830160205260408120548015611125578354600019808301919081019060009087908390811061109c57fe5b90600052602060002001549050808760000184815481106110b957fe5b6000918252602080832090910192909255828152600189810190925260409020908401905586548790806110e957fe5b6001900381819060005260206000200160009055905586600101600087815260200190815260200160002060009055600194505050505061054b565b600091505061054b565b815460009082106111715760405162461bcd60e51b81526004018080602001828103825260228152602001806111f66022913960400191505060405180910390fd5b82600001828154811061118057fe5b9060005260206000200154905092915050565b600061119f83836111dd565b6111d55750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561054b565b50600061054b565b6000908152600191909101602052604090205415159056fe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e647342455032303a207472616e736665722066726f6d20746865207a65726f206164647265737342455032303a20617070726f76652066726f6d20746865207a65726f20616464726573734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737342455032303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654d41443a205f6164644d696e74657220697320746865207a65726f20616464726573734f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657242455032303a207472616e7366657220616d6f756e7420657863656564732062616c616e636542455032303a207472616e7366657220746f20746865207a65726f206164647265737342455032303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f42455032303a20617070726f766520746f20746865207a65726f20616464726573734d41443a205f64656c4d696e74657220697320746865207a65726f2061646472657373a26469706673582212202a3477a56092acc2e180157cc56904674123ad2f0de9fd2f6bbb18c77376dcc464736f6c634300060c0033

Deployed ByteCode Sourcemap

33791:1438:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34602:113;;;:::i;:::-;;;;;;;;;;;;;;;;18634:92;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20337:161;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;20337:161:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;19218:104;;;:::i;19110:100::-;;;:::i;34372:222::-;;;;;;;;;;;;;;;;-1:-1:-1;34372:222:0;-1:-1:-1;;;;;34372:222:0;;:::i;20969:397::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;20969:397:0;;;;;;;;;;;;;;;;;:::i;18793:92::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21774:210;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;21774:210:0;;;;;;;;:::i;34001:136::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;34001:136:0;;;;;;;;:::i;34860:213::-;;;;;;;;;;;;;;;;-1:-1:-1;34860:213:0;;:::i;:::-;;;;-1:-1:-1;;;;;34860:213:0;;;;;;;;;;;;;;19488:119;;;;;;;;;;;;;;;;-1:-1:-1;19488:119:0;-1:-1:-1;;;;;19488:119:0;;:::i;1751:140::-;;;:::i;:::-;;18477:94;;;:::i;1109:79::-;;;:::i;18950:96::-;;;:::i;34145:219::-;;;;;;;;;;;;;;;;-1:-1:-1;34145:219:0;-1:-1:-1;;;;;34145:219:0;;:::i;22486:311::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;22486:311:0;;;;;;;;:::i;19819:167::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;19819:167:0;;;;;;;;:::i;34723:129::-;;;;;;;;;;;;;;;;-1:-1:-1;34723:129:0;-1:-1:-1;;;;;34723:129:0;;:::i;19330:96::-;;;:::i;20048:143::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;20048:143:0;;;;;;;;;;:::i;2046:109::-;;;;;;;;;;;;;;;;-1:-1:-1;2046:109:0;-1:-1:-1;;;;;2046:109:0;;:::i;34602:113::-;34650:7;34677:30;34698:8;34677:20;:30::i;:::-;34670:37;;34602:113;:::o;18634:92::-;18713:5;18706:12;;;;;;;;-1:-1:-1;;18706:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18680:13;;18706:12;;18713:5;;18706:12;;18713:5;18706:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18634:92;:::o;20337:161::-;20412:4;20429:39;20438:12;:10;:12::i;:::-;20452:7;20461:6;20429:8;:39::i;:::-;-1:-1:-1;20486:4:0;20337:161;;;;;:::o;19218:104::-;17488:14;19218:104;:::o;19110:100::-;19190:12;;19110:100;:::o;34372:222::-;34437:4;1331:12;:10;:12::i;:::-;1321:6;;-1:-1:-1;;;;;1321:6:0;;;:22;;;1313:67;;;;;-1:-1:-1;;;1313:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1313:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;34462:24:0;::::1;34454:72;;;;-1:-1:-1::0;;;34454:72:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34544:42;34565:8;34575:10;34544:20;:42::i;20969:397::-:0;21101:4;21118:36;21128:6;21136:9;21147:6;21118:9;:36::i;:::-;21165:171;21188:6;21209:12;:10;:12::i;:::-;21236:89;21274:6;21236:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21236:19:0;;;;;;:11;:19;;;;;;21256:12;:10;:12::i;:::-;-1:-1:-1;;;;;21236:33:0;;;;;;;;;;;;-1:-1:-1;21236:33:0;;;:89;:37;:89::i;:::-;21165:8;:171::i;:::-;-1:-1:-1;21354:4:0;20969:397;;;;;:::o;18793:92::-;18868:9;;;;18793:92;:::o;21774:210::-;21854:4;21871:83;21880:12;:10;:12::i;:::-;21894:7;21903:50;21942:10;21903:11;:25;21915:12;:10;:12::i;:::-;-1:-1:-1;;;;;21903:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;21903:25:0;;;:34;;;;;;;;;;;:38;:50::i;34001:136::-;34071:4;35157:20;35166:10;35157:8;:20::i;:::-;35149:57;;;;;-1:-1:-1;;;35149:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;34088:19:::1;34094:3;34099:7;34088:5;:19::i;34860:213::-:0;34926:7;1331:12;:10;:12::i;:::-;1321:6;;-1:-1:-1;;;;;1321:6:0;;;:22;;;1313:67;;;;;-1:-1:-1;;;1313:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1313:67:0;;;;;;;;;;;;;;;34983:1:::1;34963:17;:15;:17::i;:::-;:21;34953:6;:31;;34945:68;;;::::0;;-1:-1:-1;;;34945:68:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;35031:34;35048:8;35058:6;35031:16;:34::i;19488:119::-:0;-1:-1:-1;;;;;19581:18:0;19554:7;19581:18;;;:9;:18;;;;;;;19488:119::o;1751:140::-;1331:12;:10;:12::i;:::-;1321:6;;-1:-1:-1;;;;;1321:6:0;;;:22;;;1313:67;;;;;-1:-1:-1;;;1313:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1313:67:0;;;;;;;;;;;;;;;1850:1:::1;1834:6:::0;;1813:40:::1;::::0;-1:-1:-1;;;;;1834:6:0;;::::1;::::0;1813:40:::1;::::0;1850:1;;1813:40:::1;1881:1;1864:19:::0;;-1:-1:-1;;;;;;1864:19:0::1;::::0;;1751:140::o;18477:94::-;18529:7;18556;1109:79;1147:7;1174:6;-1:-1:-1;;;;;1174:6:0;1109:79;:::o;18950:96::-;19031:7;19024:14;;;;;;;;-1:-1:-1;;19024:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18998:13;;19024:14;;19031:7;;19024:14;;19031:7;19024:14;;;;;;;;;;;;;;;;;;;;;;;;34145:219;34210:4;1331:12;:10;:12::i;:::-;1321:6;;-1:-1:-1;;;;;1321:6:0;;;:22;;;1313:67;;;;;-1:-1:-1;;;1313:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1313:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;34235:24:0;::::1;34227:72;;;;-1:-1:-1::0;;;34227:72:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34317:39;34335:8;34345:10;34317:17;:39::i;22486:311::-:0;22571:4;22588:179;22611:12;:10;:12::i;:::-;22638:7;22660:96;22699:15;22660:96;;;;;;;;;;;;;;;;;:11;:25;22672:12;:10;:12::i;:::-;-1:-1:-1;;;;;22660:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;22660:25:0;;;:34;;;;;;;;;;;:96;:38;:96::i;19819:167::-;19897:4;19914:42;19924:12;:10;:12::i;:::-;19938:9;19949:6;19914:9;:42::i;34723:129::-;34779:4;34803:41;34826:8;34836:7;34803:22;:41::i;19330:96::-;17547:15;19330:96;:::o;20048:143::-;-1:-1:-1;;;;;20156:18:0;;;20129:7;20156:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;20048:143::o;2046:109::-;1331:12;:10;:12::i;:::-;1321:6;;-1:-1:-1;;;;;1321:6:0;;;:22;;;1313:67;;;;;-1:-1:-1;;;1313:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1313:67:0;;;;;;;;;;;;;;;2119:28:::1;2138:8;2119:18;:28::i;:::-;2046:109:::0;:::o;6031:181::-;6089:7;6121:5;;;6145:6;;;;6137:46;;;;;-1:-1:-1;;;6137:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;6203:1;6031:181;-1:-1:-1;;;6031:181:0:o;31530:117::-;31593:7;31620:19;31628:3;31620:7;:19::i;273:98::-;353:10;273:98;:::o;25607:372::-;-1:-1:-1;;;;;25735:19:0;;25727:68;;;;-1:-1:-1;;;25727:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25814:21:0;;25806:68;;;;-1:-1:-1;;;25806:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25887:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;25939:32;;;;;;;;;;;;;;;;;25607:372;;;:::o;31051:149::-;31124:4;31148:44;31156:3;-1:-1:-1;;;;;31176:14:0;;31148:7;:44::i;23287:505::-;-1:-1:-1;;;;;23419:20:0;;23411:70;;;;-1:-1:-1;;;23411:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23500:23:0;;23492:71;;;;-1:-1:-1;;;23492:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23596;23618:6;23596:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23596:17:0;;;;;;:9;:17;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;23576:17:0;;;;;;;:9;:17;;;;;;:91;;;;23701:20;;;;;;;:32;;23726:6;23701:24;:32::i;:::-;-1:-1:-1;;;;;23678:20:0;;;;;;;:9;:20;;;;;;;;;:55;;;;23749:35;;;;;;;23678:20;;23749:35;;;;;;;;;;;;;23287:505;;;:::o;6934:226::-;7054:7;7090:12;7082:6;;;;7074:29;;;;-1:-1:-1;;;7074:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;7126:5:0;;;6934:226::o;24073:414::-;24138:4;-1:-1:-1;;;;;24163:21:0;;24155:65;;;;;-1:-1:-1;;;24155:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;17547:15;24235:24;24246:12;;24235:6;:10;;:24;;;;:::i;:::-;:37;24231:82;;;-1:-1:-1;24296:5:0;24289:12;;24231:82;24340:12;;:24;;24357:6;24340:16;:24::i;:::-;24325:12;:39;-1:-1:-1;;;;;24396:18:0;;;;;;:9;:18;;;;;;:30;;24419:6;24396:22;:30::i;:::-;-1:-1:-1;;;;;24375:18:0;;;;;;:9;:18;;;;;;;;:51;;;;24442:37;;;;;;;24375:18;;;;24442:37;;;;;;;;;;24073:414;;;;:::o;32001:149::-;32075:7;32118:22;32122:3;32134:5;32118:3;:22::i;30732:143::-;30802:4;30826:41;30831:3;-1:-1:-1;;;;;30851:14:0;;30826:4;:41::i;31286:158::-;31366:4;31390:46;31400:3;-1:-1:-1;;;;;31420:14:0;;31390:9;:46::i;2261:229::-;-1:-1:-1;;;;;2335:22:0;;2327:73;;;;-1:-1:-1;;;2327:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2437:6;;;2416:38;;-1:-1:-1;;;;;2416:38:0;;;;2437:6;;;2416:38;;;2465:6;:17;;-1:-1:-1;;;;;;2465:17:0;-1:-1:-1;;;;;2465:17:0;;;;;;;;;;2261:229::o;29811:109::-;29894:18;;29811:109::o;27953:1557::-;28019:4;28158:19;;;:12;;;:19;;;;;;28194:15;;28190:1313;;28642:18;;-1:-1:-1;;28593:14:0;;;;28642:22;;;;28569:21;;28642:3;;:22;;28929;;;;;;;;;;;;;;28909:42;;29075:9;29046:3;:11;;29058:13;29046:26;;;;;;;;;;;;;;;;;;;:38;;;;29152:23;;;29194:1;29152:12;;;:23;;;;;;29178:17;;;29152:43;;29304:17;;29152:3;;29304:17;;;;;;;;;;;;;;;;;;;;;;29399:3;:12;;:19;29412:5;29399:19;;;;;;;;;;;29392:26;;;29442:4;29435:11;;;;;;;;28190:1313;29486:5;29479:12;;;;;30274:204;30369:18;;30341:7;;30369:26;-1:-1:-1;30361:73:0;;;;-1:-1:-1;;;30361:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30452:3;:11;;30464:5;30452:18;;;;;;;;;;;;;;;;30445:25;;30274:204;;;;:::o;27363:414::-;27426:4;27448:21;27458:3;27463:5;27448:9;:21::i;:::-;27443:327;;-1:-1:-1;27486:23:0;;;;;;;;:11;:23;;;;;;;;;;;;;27669:18;;27647:19;;;:12;;;:19;;;;;;:40;;;;27702:11;;27443:327;-1:-1:-1;27753:5:0;27746:12;;29596:129;29669:4;29693:19;;;:12;;;;;:19;;;;;;:24;;;29596:129::o

Swarm Source

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