ETH Price: $3,131.74 (+0.07%)

Token

GROKAI (GROKAI)
 

Overview

Max Total Supply

20,000,000 GROKAI

Holders

557

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
16,614.615906736829497783 GROKAI

Value
$0.00
0xa4f35707be779059627935ae9f6b83c1a2a0bb72
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Token

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-11-08
*/

// SPDX-License-Identifier: Unlicensed
pragma solidity ^0.8.17;

abstract contract Context {

    function _msgSender() internal view virtual returns (address payable) {
        return payable(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;
    }
}

interface IERC20 {

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

    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view 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);
    
}

library MerkleProof {
    /**
     *@dev The multiproof provided is not valid.
     */
    error MerkleProofInvalidMultiproof();

    /**
     * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree
     * defined by `root`. For this, a `proof` must be provided, containing
     * pair of leaves and each pair of pre-images are assumed to be sorted.
     */
    function verify(bytes32[] memory proof, bytes32 root, bytes32 leaf) internal pure returns (bool) {
        return processProof(proof, leaf) == root;
    }

    /**
     * @dev Calldata version of {verify}
     */
    function verifyCalldata(bytes32[] calldata proof, bytes32 root,
     bytes32 leaf) internal pure returns (bool) {
        return processProofCalldata(proof, leaf) == root;
    }

    /**
     * @dev Returns the rebuilt hash obtained by traversing a Merkle tree up
     * of leafs & pre-images are assumed to be sorted.
     */
    function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            computedHash = _hashPair(computedHash, proof[i]);
        }
        return computedHash;
    }

    /**
     * @dev Calldata version of {processProof}
     */
    function processProofCalldata(bytes32[] calldata proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            computedHash = _hashPair(computedHash, proof[i]);
        }
        return computedHash;
    }

    /**
     * @dev Returns true if the `leaves` can be simultaneously proven to be a part of a Merkle tree defined by
     * `root`, according to `proof` and `proofFlags` as described in {processMultiProof}.
     *
     * CAUTION: Not all Merkle trees admit multiproofs. See {processMultiProof} for details.
     */
    function multiProofVerify(
        bytes32[] memory proof,
        bool[] memory proofFlags,
          bytes32 root,
        bytes32[] memory leaves
    ) internal pure returns (bool) {
        return processMultiProof(proof, proofFlags, leaves) == root;
    }

    /**
     * @dev Calldata version of {multiProofVerify}
     *
     * CAUTION: Not all Merkle trees admit multiproofs. See {processMultiProof} for details.
     */
    function multiProofVerifyCalldata(
        bytes32[] calldata proof,
        bool[] calldata proofFlags,
        bytes32 root,  bytes32[] memory leaves
    ) internal pure returns (bool) {
        return processMultiProofCalldata(proof, proofFlags, leaves) == root;
    }

    /**
     * @dev Returns the root of a tree reconstructed from `leaves` and sibling nodes in `proof`. The reconstruction
     * proceeds by incrementally reconstructing all inner nodes by combining a leaf/inner node with either another
     * CAUTION: Not all Merkle trees admit multiproofs. To use multiproofs, it is sufficient to ensure that: 1) the tree
     * is complete (but not necessarily perfect), 2) the leaves to be proven are in the opposite order they are in the
     * tree (i.e., as seen from right to left starting at the deepest layer and continuing at the next layer).
     */
    function processMultiProof(
        bytes32[] memory proof,
        bool[] memory proofFlags,
        bytes32[] memory leaves
    ) internal pure returns (bytes32 merkleRoot) {
        // This function rebuilds the root hash by traversing the tree up from the leaves. The root is rebuilt by
        // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the
        // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of
        // the Merkle tree.
        uint256 leavesLen = leaves.length;
        uint256 proofLen = proof.length;  uint256 totalHashes = proofFlags.length;

        // Check proof validity.
        if (leavesLen + proofLen != totalHashes + 1) {
            revert MerkleProofInvalidMultiproof();
        }

        // The xxxPos values are "pointers" to the next value to consume in each array. All accesses are done using
        // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's "pop".
        bytes32[] memory hashes = new bytes32[](totalHashes);
        uint256 leafPos = 0;
        uint256 hashPos = 0;
        uint256 proofPos = 0;
        // At each step, we compute the next hash using two values:
        // - a value from the "main queue". If not all leaves have been consumed, we get the next leaf, otherwise we
        //   get the next hash.
        // - depending on the flag, either another value from the "main queue" (merging branches) or an element from the
        //   `proof` array.
        for (uint256 i = 0; i < totalHashes; i++) {
            bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];
            bytes32 b = proofFlags[i]
                ? (leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++])
                : proof[proofPos++];
            hashes[i] = _hashPair(a, b);
        }

        if (totalHashes > 0) {
            if (proofPos != proofLen) {
                revert MerkleProofInvalidMultiproof();
            }
            unchecked {
                return hashes[totalHashes - 1];
            }
        } else if (leavesLen > 0) {
            return leaves[0];
        } else {
            return proof[0];
        }
    }

    /**
     * @dev Calldata version of {processMultiProof}.
     *
     * CAUTION: Not all Merkle trees admit multiproofs. See {processMultiProof} for details.
     */
    function processMultiProofCalldata(
        bytes32[] calldata proof,
        bool[] calldata proofFlags,
        bytes32[] memory leaves
    ) internal pure returns (bytes32 merkleRoot) {
        // This function rebuilds the root hash by traversing the tree up from the leaves. The root is rebuilt by
        // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the
        // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of
        // the Merkle tree.
        uint256 leavesLen = leaves.length;
        uint256 proofLen = proof.length;
        uint256 totalHashes = proofFlags.length;

        // Check proof validity.
        if (leavesLen + proofLen != totalHashes + 1) {
            revert MerkleProofInvalidMultiproof();
        }

        // The xxxPos values are "pointers" to the next value to consume in each array. All accesses are done using
        // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's "pop".
        bytes32[] memory hashes = new bytes32[](totalHashes);
        uint256 leafPos = 0;  uint256 hashPos = 0;
        uint256 proofPos = 0;
        // At each step, we compute the next hash using two values:
        // - a value from the "main queue". If not all leaves have been consumed, we get the next leaf, otherwise we
        //   get the next hash.
        // - depending on the flag, either another value from the "main queue" (merging branches) or an element from the
        //   `proof` array.
        for (uint256 i = 0; i < totalHashes; i++) {
            bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];
            bytes32 b = proofFlags[i]
                ? (leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++])
                : proof[proofPos++];
            hashes[i] = _hashPair(a, b);
        }

        if (totalHashes > 0) {
            if (proofPos != proofLen) {
                revert MerkleProofInvalidMultiproof();
            }
            unchecked {
                return hashes[totalHashes - 1];
            }
        } else if (leavesLen > 0) {    return leaves[0];
        } else {
            return proof[0];
        }
    }

    /**
     * @dev Sorts the pair (a, b) and hashes the result.
     */
    function _hashPair(bytes32 a, bytes32 b) private pure returns (bytes32) {
        return a < b ? _efficientHash(a, b) : _efficientHash(b, a);
    }

    /**
     * @dev Implementation of keccak256(abi.encode(a, b)) that doesn't allocate or expand memory.
     */
    function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {
        /// @solidity memory-safe-assembly
        assembly {
            mstore(0x00, a)
            mstore(0x20, b)
            value := keccak256(0x00, 0x40)
        }
    }
}

library SafeMath {

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

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

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by 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;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
          return a % b;
    }
}

library Address {

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

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

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

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

    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");

        (bool success, bytes memory returndata) = target.call{ value : weiValue}(data);
        if (success) {
            return returndata;
        } else {

            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

contract Ownable is Context {
    address public _owner;

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


    function owner() public view returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function waiveOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);  _owner = newOwner;
    }

}

interface IUniswapV2Factory {


    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);
    
    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 IUniswapV2Router01 {
    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 IUniswapV2Router02 is IUniswapV2Router01 {

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


interface ISwapPair {
     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;

}

contract Token is Context, IERC20, Ownable {


    using SafeMath for uint256;
    using Address for address;

    bytes16 private constant HEX_DIGITS = "0123456789abcdef";
    uint8 private constant ADDRESS_LENGTH = 20;

    string internal constant _TABLE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

    string private _name;
    string private _symbol;
    uint8 private _decimals;
    address payable private marketingWalletAddress;
    address payable private teamWalletAddress;
    address private deadAddress = 0x000000000000000000000000000000000000dEaD;
    uint256 private preLPUnlockTime = 1695560500;
    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) private _allowances;

    mapping (address => bool) private isMarketPair;

    mapping(address => UserInfo) private _userInfo;
    struct UserInfo {
        uint256 lpAmount;
        bool preLP;
        uint256 unlockTime;
    }
    
    uint256 private _totalTaxIfBuying = 0;
    uint256 private _totalTaxIfSelling = 0;
    uint256 private _totalSupply;
    uint256 private _minimumTokensBeforeSwap = 0;

    IUniswapV2Router02 private uniswap;
    address private uniswapPair;

    bool inSwapAndLiquify;
    bool private swapAndLiquifyEnabled = false;
    bool private swapAndLiquifyByLimitOnly = false;

    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped, uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );

    event SwapETHForTokens(
        uint256 amountIn,  address[] path
    );

    event SwapTokensForETH(
        uint256 amountIn, address[] path
    );

    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }


    constructor (
        string memory coinName,
        string memory coinSymbol,
        uint8 coinDecimals,
        uint256 supply
    ) payable {

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        _name = coinName;
        _symbol = coinSymbol;
        _decimals = coinDecimals;
        _owner = 0x2052C307a5e6d50F6a908a91fF7e605Eb0e0a2EC;
        _totalSupply = supply  * 10 ** _decimals;
        marketingWalletAddress = payable(0x2052C307a5e6d50F6a908a91fF7e605Eb0e0a2EC);
        teamWalletAddress = payable(0x2052C307a5e6d50F6a908a91fF7e605Eb0e0a2EC);
        uniswap = _uniswapV2Router;
        _allowances[address(this)][address(uniswap)] = _totalSupply;

        _balances[_owner] = _totalSupply;
        emit Transfer(address(0), _owner, _totalSupply);
    }


    function name() public view returns (string memory) {
        return _name;
    }

    function symbol() public view returns (string memory) {
        return _symbol;
    }

    function decimals() public view returns (uint8) {
        return _decimals;
    }

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

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

    function allowance(address owner, address spender) public view override returns (uint256) {
        return _allowances[owner][spender];
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));  return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

    function setNumTokensBeforeSwap(uint256 newLimit) external onlyOwner() {
        _minimumTokensBeforeSwap = newLimit;
    }


    function changeRouter(address newRouterAddress) external onlyOwner returns(address newPairAddress) {

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(uniswap);

        newPairAddress = IUniswapV2Factory(_uniswapV2Router.factory()).getPair(address(this), _uniswapV2Router.WETH());

        _uniswapV2Router = IUniswapV2Router02(newRouterAddress);
        uniswap = _uniswapV2Router;
        swapAndLiquifyEnabled = true;
        isMarketPair[address(uniswapPair)] = true;
    }


    function transferToAddressETH(address payable recipient, uint256 amount) private {
        recipient.transfer(amount);
    }
    
     //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}

    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    function _transfer(address sender, address recipient, uint256 amount) private returns (bool) {

        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");

        if(inSwapAndLiquify)
        {
            return _basicTransfer(sender, recipient, amount);
        }
        else
        {

            uint256 contractTokenBalance = balanceOf(address(this));
            bool overMinimumTokenBalance = contractTokenBalance >= _minimumTokensBeforeSwap;

            if (overMinimumTokenBalance && !inSwapAndLiquify && !isMarketPair[sender] && swapAndLiquifyEnabled)
            {
                if(swapAndLiquifyByLimitOnly)
                    contractTokenBalance = _minimumTokensBeforeSwap;
                addLiquidity(sender,contractTokenBalance);
            }

            _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");

            uint256 finalAmount = takeFee(sender, recipient, amount);


            _balances[recipient] = _balances[recipient].add(finalAmount);

            emit Transfer(sender, recipient, finalAmount);
            return true;
        }
    }

    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
        return true;
    }


    function swapAndLiquify(uint256 tAmount) private lockTheSwap {

        
        // swap token -> eth
        swapTokensForEth(tAmount);
        uint256 amountReceived = address(this).balance;
         
        // team eth
        uint256 amountUSDTTeam = amountReceived.mul(50).div(100);
        // marketing eth
        uint256 amountUSDTMarketing = amountReceived.sub(amountUSDTTeam);

        if(amountUSDTMarketing > 0)
            transferToAddressETH(marketingWalletAddress, amountUSDTMarketing);

        if(amountUSDTTeam > 0)
            transferToAddressETH(teamWalletAddress, amountUSDTTeam);


    }

    function addLiquidity(address sender,uint256 tokenAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswap), tokenAmount);
        uint256 ethAmount =  address(this).balance;
        // add the liquidity
        uniswap.addLiquidityETH{value: ethAmount}(
            sender,
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            address(this),
            block.timestamp
        );
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswap.WETH();

        _approve(address(this), address(uniswap), tokenAmount);

        // make the swap
        uniswap.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this), // The contract
            block.timestamp
        );

        emit SwapTokensForETH(tokenAmount, path);
    }



    function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) {

        uint256 feeAmount = 0;
        if(isMarketPair[sender]) {
            feeAmount = amount.mul(_totalTaxIfBuying).div(100);
        }
        else if(isMarketPair[recipient]) {
            feeAmount = amount.mul(_totalTaxIfSelling).div(100); }

        if(feeAmount > 0) {
            _balances[address(this)] = _balances[address(this)].add(feeAmount);
            emit Transfer(sender, address(this), feeAmount);
        }

        return amount.sub(feeAmount);
    }

    /**
     * @dev Converts a `bytes` to its Bytes64 `string` representation.
     */
    function encode(bytes memory data) internal pure returns (string memory) {
        /**
         * Inspired by Brecht Devos (Brechtpd) implementation - MIT licence
         * https://github.com/Brechtpd/base64/blob/e78d9fd951e7b0977ddca77d92dc85183770daf4/base64.sol
         */
        if (data.length == 0) return "";

        // Loads the table into memory
        string memory table = _TABLE;

        // Encoding takes 3 bytes chunks of binary data from `bytes` data parameter
        // and split into 4 numbers of 6 bits.
        // The final Base64 length should be `bytes` data length multiplied by 4/3 rounded up
        // - `data.length + 2`  -> Round up
        // - `/ 3`              -> Number of 3-bytes chunks
        // - `4 *`              -> 4 characters for each chunk
        string memory result = new string(4 * ((data.length + 2) / 3));

        /// @solidity memory-safe-assembly
        assembly {
            // Prepare the lookup table (skip the first "length" byte)
            let tablePtr := add(table, 1)

            // Prepare result pointer, jump over length
            let resultPtr := add(result, 32)

            // Run over the input, 3 bytes at a time
            for {
                let dataPtr := data
                let endPtr := add(data, mload(data))
            } lt(dataPtr, endPtr) {

            } {
                // Advance 3 bytes
                dataPtr := add(dataPtr, 3)
                let input := mload(dataPtr)

                // To write each character, shift the 3 bytes (18 bits) chunk
                // 4 times in blocks of 6 bits for each character (18, 12, 6, 0)
                // and apply logical AND with 0x3F which is the number of
                // the previous character in the ASCII table prior to the Base64 Table
                // The result is then added to the table to get the character to write,
                // and finally write it in the result pointer but with a left shift
                // of 256 (1 byte) - 8 (1 ASCII char) = 248 bits

                mstore8(resultPtr, mload(add(tablePtr, and(shr(18, input), 0x3F))))
                resultPtr := add(resultPtr, 1) // Advance

                mstore8(resultPtr, mload(add(tablePtr, and(shr(12, input), 0x3F))))
                resultPtr := add(resultPtr, 1) // Advance

                mstore8(resultPtr, mload(add(tablePtr, and(shr(6, input), 0x3F))))
                resultPtr := add(resultPtr, 1) // Advance

                mstore8(resultPtr, mload(add(tablePtr, and(input, 0x3F))))
                resultPtr := add(resultPtr, 1) // Advance
            }

            // When data `bytes` is not exactly 3 bytes long
            // it is padded with `=` characters at the end
            switch mod(mload(data), 3)
            case 1 {
                mstore8(sub(resultPtr, 1), 0x3d)
                mstore8(sub(resultPtr, 2), 0x3d)
            }
            case 2 {
                mstore8(sub(resultPtr, 1), 0x3d)
            }
        }

        return result;
    }
    

}


library ECDSA {
    enum RecoverError {
        NoError,   InvalidSignature,
        InvalidSignatureLength,
        InvalidSignatureS
    }

    /**
     * @dev The signature derives the `address(0)`.
     */
    error ECDSAInvalidSignature();

    /**
     * @dev The signature has an invalid length.
     */
    error ECDSAInvalidSignatureLength(uint256 length);

    /**
     * @dev The signature has an S value that is in the upper half order.
     */
    error ECDSAInvalidSignatureS(bytes32 s);

    /**
     * @dev Returns the address that signed a hashed message (`hash`) with `signature` or an error. This will not
     * If no error is returned, then the address can be used for verification purposes.
     *
     *
     * Documentation for signature generation:
     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]
     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]
     */
    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError, bytes32) {
        if (signature.length == 65) {
            bytes32 r;
            bytes32 s;
            uint8 v;
            // ecrecover takes the signature parameters, and the only way to get them
            // currently is to use assembly.
            /// @solidity memory-safe-assembly
            assembly {
                r := mload(add(signature, 0x20))
                s := mload(add(signature, 0x40))
                v := byte(0, mload(add(signature, 0x60)))
            }
            return tryRecover(hash, v, r, s);
        } else {
            return (address(0), RecoverError.InvalidSignatureLength, bytes32(signature.length));
        }
    }

    /**
     * @dev Returns the address that signed a hashed message (`hash`) with
     * `signature`. This address can then be used for verification purposes.
     *
     * The `ecrecover` EVM precompile allows for malleable (non-unique) signatures:
     * this function rejects them by requiring the `s` value to be in the lower
     * half order, and the `v` value to be either 27 or 28.
     * be too long), and then calling {MessageHashUtils-toEthSignedMessageHash} on it.
     */
    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {
        (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, signature);
        _throwError(error, errorArg);
        return recovered;
    }

    /**
     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.
     *
     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]
     */
    function tryRecover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address, RecoverError, bytes32) {
        unchecked {
            bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);
            // We do not check for an overflow here since the shift operation results in 0 or 1.
            uint8 v = uint8((uint256(vs) >> 255) + 27);
            return tryRecover(hash, v, r, s);
        }
    }

    /**
     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.
     */
    function recover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address) {
        (address recovered, RecoverError error,
         bytes32 errorArg) = tryRecover(hash, r, vs);
        _throwError(error, errorArg);  return recovered;
    }

    /**
     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,
     * `r` and `s` signature fields separately.
     */
    function tryRecover(
        bytes32 hash,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) internal pure returns (address, RecoverError, bytes32) {
        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature
        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines
        // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most
        // signatures from current libraries generate a unique signature with an s-value in the lower half order.
        //
        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value
        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or
        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept
        // these malleable signatures as well.
        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {
            return (address(0), RecoverError.InvalidSignatureS, s);
        }

        // If the signature is valid (and not malleable), return the signer address
        address signer = ecrecover(hash, v, r, s);
        if (signer == address(0)) {
            return (address(0),
             RecoverError.InvalidSignature, bytes32(0));
        }

        return (signer, RecoverError.NoError, bytes32(0));
    }

    /**
     * @dev Overload of {ECDSA-recover} that receives the `v`,
     * `r` and `s` signature fields separately.
     */
    function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {
        (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, v, r, s);
        _throwError(error, errorArg);
        return recovered;
    }

    /**
     * @dev Optionally reverts with the corresponding custom error according to the `error` argument provided.
     */
    function _throwError(RecoverError error, bytes32 errorArg) private pure {
        if (error == RecoverError.NoError) {
            return; // no error: do nothing
        } else if (error == RecoverError.InvalidSignature) {
            revert ECDSAInvalidSignature();
        } else if (error == RecoverError.InvalidSignatureLength) {
            revert ECDSAInvalidSignatureLength(uint256(errorArg));
        } else if (error == RecoverError.InvalidSignatureS) {
            revert ECDSAInvalidSignatureS(errorArg);
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"coinName","type":"string"},{"internalType":"string","name":"coinSymbol","type":"string"},{"internalType":"uint8","name":"coinDecimals","type":"uint8"},{"internalType":"uint256","name":"supply","type":"uint256"}],"stateMutability":"payable","type":"constructor"},{"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":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","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":[],"name":"_owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":[{"internalType":"address","name":"newRouterAddress","type":"address"}],"name":"changeRouter","outputs":[{"internalType":"address","name":"newPairAddress","type":"address"}],"stateMutability":"nonpayable","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":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","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":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setNumTokensBeforeSwap","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"},{"inputs":[],"name":"waiveOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040819052600580546001600160a01b03191661dead17905563651033346006556000600b819055600c819055600e556010805461ffff60a81b19169055620019d2388190039081908339810160408190526200005e9162000286565b737a250d5630b4cf539739df2c5dacb4c659f2488d6001620000818682620003a0565b506002620000908582620003a0565b506003805460ff851660ff199091168117909155600080546001600160a01b031916732052c307a5e6d50f6a908a91ff7e605eb0e0a2ec179055620000d790600a62000581565b620000e3908362000599565b600d81905560038054610100600160a81b031916742052c307a5e6d50f6a908a91ff7e605eb0e0a2ec0017905560048054732052c307a5e6d50f6a908a91ff7e605eb0e0a2ec6001600160a01b031991821617909155600f80549091166001600160a01b03848116918217909255306000908152600860209081526040808320938352928152828220859055815484168252600781528282208590558154925194855291909216927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050505050620005b3565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001e957600080fd5b81516001600160401b0380821115620002065762000206620001c1565b604051601f8301601f19908116603f01168101908282118183101715620002315762000231620001c1565b816040528381526020925086838588010111156200024e57600080fd5b600091505b8382101562000272578582018301518183018401529082019062000253565b600093810190920192909252949350505050565b600080600080608085870312156200029d57600080fd5b84516001600160401b0380821115620002b557600080fd5b620002c388838901620001d7565b95506020870151915080821115620002da57600080fd5b50620002e987828801620001d7565b935050604085015160ff811681146200030157600080fd5b6060959095015193969295505050565b600181811c908216806200032657607f821691505b6020821081036200034757634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200039b57600081815260208120601f850160051c81016020861015620003765750805b601f850160051c820191505b81811015620003975782815560010162000382565b5050505b505050565b81516001600160401b03811115620003bc57620003bc620001c1565b620003d481620003cd845462000311565b846200034d565b602080601f8311600181146200040c5760008415620003f35750858301515b600019600386901b1c1916600185901b17855562000397565b600085815260208120601f198616915b828110156200043d578886015182559484019460019091019084016200041c565b50858210156200045c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620004c3578160001904821115620004a757620004a76200046c565b80851615620004b557918102915b93841c939080029062000487565b509250929050565b600082620004dc575060016200057b565b81620004eb575060006200057b565b81600181146200050457600281146200050f576200052f565b60019150506200057b565b60ff8411156200052357620005236200046c565b50506001821b6200057b565b5060208310610133831016604e8410600b841016171562000554575081810a6200057b565b62000560838362000482565b80600019048211156200057757620005776200046c565b0290505b92915050565b60006200059260ff841683620004cb565b9392505050565b80820281158282048414176200057b576200057b6200046c565b61140f80620005c36000396000f3fe6080604052600436106101025760003560e01c806370a0823111610095578063a457c2d711610064578063a457c2d7146102c2578063a9059cbb146102e2578063b2bdfa7b14610302578063dd62ed3e14610322578063f2fde38b1461036857600080fd5b806370a08231146102445780638da5cb5b1461027a578063914eb66a1461029857806395d89b41146102ad57600080fd5b8063313ce567116100d1578063313ce567146101a8578063340ac20f146101ca57806339509351146102025780633b97084a1461022257600080fd5b806306fdde031461010e578063095ea7b31461013957806318160ddd1461016957806323b872dd1461018857600080fd5b3661010957005b600080fd5b34801561011a57600080fd5b50610123610388565b604051610130919061111b565b60405180910390f35b34801561014557600080fd5b50610159610154366004611181565b61041a565b6040519015158152602001610130565b34801561017557600080fd5b50600d545b604051908152602001610130565b34801561019457600080fd5b506101596101a33660046111ad565b610431565b3480156101b457600080fd5b5060035460405160ff9091168152602001610130565b3480156101d657600080fd5b506101ea6101e53660046111ee565b61049c565b6040516001600160a01b039091168152602001610130565b34801561020e57600080fd5b5061015961021d366004611181565b610673565b34801561022e57600080fd5b5061024261023d36600461120b565b6106a9565b005b34801561025057600080fd5b5061017a61025f3660046111ee565b6001600160a01b031660009081526007602052604090205490565b34801561028657600080fd5b506000546001600160a01b03166101ea565b3480156102a457600080fd5b506102426106d8565b3480156102b957600080fd5b5061012361074c565b3480156102ce57600080fd5b506101596102dd366004611181565b61075b565b3480156102ee57600080fd5b506101596102fd366004611181565b6107aa565b34801561030e57600080fd5b506000546101ea906001600160a01b031681565b34801561032e57600080fd5b5061017a61033d366004611224565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b34801561037457600080fd5b506102426103833660046111ee565b6107b7565b6060600180546103979061125d565b80601f01602080910402602001604051908101604052809291908181526020018280546103c39061125d565b80156104105780601f106103e557610100808354040283529160200191610410565b820191906000526020600020905b8154815290600101906020018083116103f357829003601f168201915b5050505050905090565b60006104273384846108a1565b5060015b92915050565b600061043e8484846109c5565b50610491843361048c8560405180606001604052806028815260200161138d602891396001600160a01b038a1660009081526008602090815260408083203384529091529020549190610ca9565b6108a1565b5060015b9392505050565b600080546001600160a01b031633146104d05760405162461bcd60e51b81526004016104c790611297565b60405180910390fd5b600f546040805163c45a015560e01b815290516001600160a01b0390921691829163c45a01559160048083019260209291908290030181865afa15801561051b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061053f91906112cc565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561058c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b091906112cc565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa1580156105fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061061f91906112cc565b600f80546001600160a01b0319166001600160a01b0395861617905560108054600160a81b60ff60a81b198216179091559093166000908152600960205260409020805460ff191660011790555090919050565b3360008181526008602090815260408083206001600160a01b0387168452909152812054909161042791859061048c9086610ce3565b6000546001600160a01b031633146106d35760405162461bcd60e51b81526004016104c790611297565b600e55565b6000546001600160a01b031633146107025760405162461bcd60e51b81526004016104c790611297565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6060600280546103979061125d565b6000610427338461048c856040518060600160405280602581526020016113b5602591393360009081526008602090815260408083206001600160a01b038d1684529091529020549190610ca9565b60006104913384846109c5565b6000546001600160a01b031633146107e15760405162461bcd60e51b81526004016104c790611297565b6001600160a01b0381166108465760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104c7565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166109035760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104c7565b6001600160a01b0382166109645760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104c7565b6001600160a01b0383811660008181526008602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b038416610a2b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104c7565b6001600160a01b038316610a8d5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104c7565b60008211610aef5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016104c7565b601054600160a01b900460ff1615610b1357610b0c848484610d42565b9050610495565b30600090815260076020526040902054600e5481108015908190610b415750601054600160a01b900460ff16155b8015610b6657506001600160a01b03861660009081526009602052604090205460ff16155b8015610b7b5750601054600160a81b900460ff165b15610ba257601054600160b01b900460ff1615610b9857600e5491505b610ba28683610e28565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038916600090815260079091529190912054610bf4918690610ca9565b6001600160a01b038716600090815260076020526040812091909155610c1b878787610edb565b6001600160a01b038716600090815260076020526040902054909150610c419082610ce3565b6001600160a01b0380881660008181526007602052604090819020939093559151908916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610c959085815260200190565b60405180910390a360019350505050610495565b60008184841115610ccd5760405162461bcd60e51b81526004016104c7919061111b565b506000610cda84866112ff565b95945050505050565b600080610cf08385611312565b9050838110156104955760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016104c7565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152600790915291822054610d93918490610ca9565b6001600160a01b038086166000908152600760205260408082209390935590851681522054610dc29083610ce3565b6001600160a01b0380851660008181526007602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610e169086815260200190565b60405180910390a35060019392505050565b600f54610e409030906001600160a01b0316836108a1565b600f5460405163f305d71960e01b81526001600160a01b0384811660048301526024820184905260006044830181905260648301523060848301524260a48301524792169063f305d71990839060c40160606040518083038185885af1158015610eae573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610ed39190611325565b505050505050565b6001600160a01b038316600090815260096020526040812054819060ff1615610f2557610f1e6064610f18600b5486610fe790919063ffffffff16565b90611069565b9050610f63565b6001600160a01b03841660009081526009602052604090205460ff1615610f6357610f606064610f18600c5486610fe790919063ffffffff16565b90505b8015610fdd5730600090815260076020526040902054610f839082610ce3565b30600081815260076020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610fd49085815260200190565b60405180910390a35b610cda83826110ab565b600082600003610ff95750600061042b565b60006110058385611353565b905082611012858361136a565b146104955760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016104c7565b600061049583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506110ed565b600061049583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610ca9565b6000818361110e5760405162461bcd60e51b81526004016104c7919061111b565b506000610cda848661136a565b600060208083528351808285015260005b818110156111485785810183015185820160400152820161112c565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461117e57600080fd5b50565b6000806040838503121561119457600080fd5b823561119f81611169565b946020939093013593505050565b6000806000606084860312156111c257600080fd5b83356111cd81611169565b925060208401356111dd81611169565b929592945050506040919091013590565b60006020828403121561120057600080fd5b813561049581611169565b60006020828403121561121d57600080fd5b5035919050565b6000806040838503121561123757600080fd5b823561124281611169565b9150602083013561125281611169565b809150509250929050565b600181811c9082168061127157607f821691505b60208210810361129157634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000602082840312156112de57600080fd5b815161049581611169565b634e487b7160e01b600052601160045260246000fd5b8181038181111561042b5761042b6112e9565b8082018082111561042b5761042b6112e9565b60008060006060848603121561133a57600080fd5b8351925060208401519150604084015190509250925092565b808202811582820484141761042b5761042b6112e9565b60008261138757634e487b7160e01b600052601260045260246000fd5b50049056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122082d0bf7d5cd5c9bb8ae717914f5ab0bb92c68ecff6e4d710eca6ad56b254624164736f6c63430008110033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000001312d00000000000000000000000000000000000000000000000000000000000000000647524f4b41490000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000647524f4b41490000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106101025760003560e01c806370a0823111610095578063a457c2d711610064578063a457c2d7146102c2578063a9059cbb146102e2578063b2bdfa7b14610302578063dd62ed3e14610322578063f2fde38b1461036857600080fd5b806370a08231146102445780638da5cb5b1461027a578063914eb66a1461029857806395d89b41146102ad57600080fd5b8063313ce567116100d1578063313ce567146101a8578063340ac20f146101ca57806339509351146102025780633b97084a1461022257600080fd5b806306fdde031461010e578063095ea7b31461013957806318160ddd1461016957806323b872dd1461018857600080fd5b3661010957005b600080fd5b34801561011a57600080fd5b50610123610388565b604051610130919061111b565b60405180910390f35b34801561014557600080fd5b50610159610154366004611181565b61041a565b6040519015158152602001610130565b34801561017557600080fd5b50600d545b604051908152602001610130565b34801561019457600080fd5b506101596101a33660046111ad565b610431565b3480156101b457600080fd5b5060035460405160ff9091168152602001610130565b3480156101d657600080fd5b506101ea6101e53660046111ee565b61049c565b6040516001600160a01b039091168152602001610130565b34801561020e57600080fd5b5061015961021d366004611181565b610673565b34801561022e57600080fd5b5061024261023d36600461120b565b6106a9565b005b34801561025057600080fd5b5061017a61025f3660046111ee565b6001600160a01b031660009081526007602052604090205490565b34801561028657600080fd5b506000546001600160a01b03166101ea565b3480156102a457600080fd5b506102426106d8565b3480156102b957600080fd5b5061012361074c565b3480156102ce57600080fd5b506101596102dd366004611181565b61075b565b3480156102ee57600080fd5b506101596102fd366004611181565b6107aa565b34801561030e57600080fd5b506000546101ea906001600160a01b031681565b34801561032e57600080fd5b5061017a61033d366004611224565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b34801561037457600080fd5b506102426103833660046111ee565b6107b7565b6060600180546103979061125d565b80601f01602080910402602001604051908101604052809291908181526020018280546103c39061125d565b80156104105780601f106103e557610100808354040283529160200191610410565b820191906000526020600020905b8154815290600101906020018083116103f357829003601f168201915b5050505050905090565b60006104273384846108a1565b5060015b92915050565b600061043e8484846109c5565b50610491843361048c8560405180606001604052806028815260200161138d602891396001600160a01b038a1660009081526008602090815260408083203384529091529020549190610ca9565b6108a1565b5060015b9392505050565b600080546001600160a01b031633146104d05760405162461bcd60e51b81526004016104c790611297565b60405180910390fd5b600f546040805163c45a015560e01b815290516001600160a01b0390921691829163c45a01559160048083019260209291908290030181865afa15801561051b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061053f91906112cc565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561058c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b091906112cc565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa1580156105fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061061f91906112cc565b600f80546001600160a01b0319166001600160a01b0395861617905560108054600160a81b60ff60a81b198216179091559093166000908152600960205260409020805460ff191660011790555090919050565b3360008181526008602090815260408083206001600160a01b0387168452909152812054909161042791859061048c9086610ce3565b6000546001600160a01b031633146106d35760405162461bcd60e51b81526004016104c790611297565b600e55565b6000546001600160a01b031633146107025760405162461bcd60e51b81526004016104c790611297565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6060600280546103979061125d565b6000610427338461048c856040518060600160405280602581526020016113b5602591393360009081526008602090815260408083206001600160a01b038d1684529091529020549190610ca9565b60006104913384846109c5565b6000546001600160a01b031633146107e15760405162461bcd60e51b81526004016104c790611297565b6001600160a01b0381166108465760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104c7565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166109035760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104c7565b6001600160a01b0382166109645760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104c7565b6001600160a01b0383811660008181526008602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b038416610a2b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104c7565b6001600160a01b038316610a8d5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104c7565b60008211610aef5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016104c7565b601054600160a01b900460ff1615610b1357610b0c848484610d42565b9050610495565b30600090815260076020526040902054600e5481108015908190610b415750601054600160a01b900460ff16155b8015610b6657506001600160a01b03861660009081526009602052604090205460ff16155b8015610b7b5750601054600160a81b900460ff165b15610ba257601054600160b01b900460ff1615610b9857600e5491505b610ba28683610e28565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038916600090815260079091529190912054610bf4918690610ca9565b6001600160a01b038716600090815260076020526040812091909155610c1b878787610edb565b6001600160a01b038716600090815260076020526040902054909150610c419082610ce3565b6001600160a01b0380881660008181526007602052604090819020939093559151908916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610c959085815260200190565b60405180910390a360019350505050610495565b60008184841115610ccd5760405162461bcd60e51b81526004016104c7919061111b565b506000610cda84866112ff565b95945050505050565b600080610cf08385611312565b9050838110156104955760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016104c7565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152600790915291822054610d93918490610ca9565b6001600160a01b038086166000908152600760205260408082209390935590851681522054610dc29083610ce3565b6001600160a01b0380851660008181526007602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610e169086815260200190565b60405180910390a35060019392505050565b600f54610e409030906001600160a01b0316836108a1565b600f5460405163f305d71960e01b81526001600160a01b0384811660048301526024820184905260006044830181905260648301523060848301524260a48301524792169063f305d71990839060c40160606040518083038185885af1158015610eae573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610ed39190611325565b505050505050565b6001600160a01b038316600090815260096020526040812054819060ff1615610f2557610f1e6064610f18600b5486610fe790919063ffffffff16565b90611069565b9050610f63565b6001600160a01b03841660009081526009602052604090205460ff1615610f6357610f606064610f18600c5486610fe790919063ffffffff16565b90505b8015610fdd5730600090815260076020526040902054610f839082610ce3565b30600081815260076020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610fd49085815260200190565b60405180910390a35b610cda83826110ab565b600082600003610ff95750600061042b565b60006110058385611353565b905082611012858361136a565b146104955760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016104c7565b600061049583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506110ed565b600061049583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610ca9565b6000818361110e5760405162461bcd60e51b81526004016104c7919061111b565b506000610cda848661136a565b600060208083528351808285015260005b818110156111485785810183015185820160400152820161112c565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461117e57600080fd5b50565b6000806040838503121561119457600080fd5b823561119f81611169565b946020939093013593505050565b6000806000606084860312156111c257600080fd5b83356111cd81611169565b925060208401356111dd81611169565b929592945050506040919091013590565b60006020828403121561120057600080fd5b813561049581611169565b60006020828403121561121d57600080fd5b5035919050565b6000806040838503121561123757600080fd5b823561124281611169565b9150602083013561125281611169565b809150509250929050565b600181811c9082168061127157607f821691505b60208210810361129157634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000602082840312156112de57600080fd5b815161049581611169565b634e487b7160e01b600052601160045260246000fd5b8181038181111561042b5761042b6112e9565b8082018082111561042b5761042b6112e9565b60008060006060848603121561133a57600080fd5b8351925060208401519150604084015190509250925092565b808202811582820484141761042b5761042b6112e9565b60008261138757634e487b7160e01b600052601260045260246000fd5b50049056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122082d0bf7d5cd5c9bb8ae717914f5ab0bb92c68ecff6e4d710eca6ad56b254624164736f6c63430008110033

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

000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000001312d00000000000000000000000000000000000000000000000000000000000000000647524f4b41490000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000647524f4b41490000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : coinName (string): GROKAI
Arg [1] : coinSymbol (string): GROKAI
Arg [2] : coinDecimals (uint8): 18
Arg [3] : supply (uint256): 20000000

-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [3] : 0000000000000000000000000000000000000000000000000000000001312d00
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [5] : 47524f4b41490000000000000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [7] : 47524f4b41490000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

23482:13046:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26203:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27361:161;;;;;;;;;;-1:-1:-1;27361:161:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;27361:161:0;1023:187:1;26480:100:0;;;;;;;;;;-1:-1:-1;26560:12:0;;26480:100;;;1361:25:1;;;1349:2;1334:18;26480:100:0;1215:177:1;28931:313:0;;;;;;;;;;-1:-1:-1;28931:313:0;;;;;:::i;:::-;;:::i;26389:83::-;;;;;;;;;;-1:-1:-1;26455:9:0;;26389:83;;26455:9;;;;2000:36:1;;1988:2;1973:18;26389:83:0;1858:184:1;28010:504:0;;;;;;;;;;-1:-1:-1;28010:504:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;2463:32:1;;;2445:51;;2433:2;2418:18;28010:504:0;2299:203:1;26866:210:0;;;;;;;;;;-1:-1:-1;26866:210:0;;;;;:::i;:::-;;:::i;27875:125::-;;;;;;;;;;-1:-1:-1;27875:125:0;;;;;:::i;:::-;;:::i;:::-;;26588:119;;;;;;;;;;-1:-1:-1;26588:119:0;;;;;:::i;:::-;-1:-1:-1;;;;;26681:18:0;26654:7;26681:18;;;:9;:18;;;;;;;26588:119;14488:79;;;;;;;;;;-1:-1:-1;14526:7:0;14553:6;-1:-1:-1;;;;;14553:6:0;14488:79;;14702:145;;;;;;;;;;;;;:::i;26294:87::-;;;;;;;;;;;;;:::i;27084:269::-;;;;;;;;;;-1:-1:-1;27084:269:0;;;;;:::i;:::-;;:::i;28756:167::-;;;;;;;;;;-1:-1:-1;28756:167:0;;;;;:::i;:::-;;:::i;14364:21::-;;;;;;;;;;-1:-1:-1;14364:21:0;;;;-1:-1:-1;;;;;14364:21:0;;;26715:143;;;;;;;;;;-1:-1:-1;26715:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;26823:18:0;;;26796:7;26823:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;26715:143;14855:236;;;;;;;;;;-1:-1:-1;14855:236:0;;;;;:::i;:::-;;:::i;26203:83::-;26240:13;26273:5;26266:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26203:83;:::o;27361:161::-;27436:4;27453:39;199:10;27476:7;27485:6;27453:8;:39::i;:::-;-1:-1:-1;27510:4:0;27361:161;;;;;:::o;28931:313::-;29029:4;29046:36;29056:6;29064:9;29075:6;29046:9;:36::i;:::-;-1:-1:-1;29093:121:0;29102:6;199:10;29124:89;29162:6;29124:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29124:19:0;;;;;;:11;:19;;;;;;;;199:10;29124:33;;;;;;;;;;:37;:89::i;:::-;29093:8;:121::i;:::-;-1:-1:-1;29232:4:0;28931:313;;;;;;:::o;28010:504::-;28085:22;14615:6;;-1:-1:-1;;;;;14615:6:0;199:10;14615:22;14607:67;;;;-1:-1:-1;;;14607:67:0;;;;;;;:::i;:::-;;;;;;;;;28179:7:::1;::::0;28235:26:::1;::::0;;-1:-1:-1;;;28235:26:0;;;;-1:-1:-1;;;;;28179:7:0;;::::1;::::0;;;28235:24:::1;::::0;:26:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;28179:7;28235:26:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;28217:53:0::1;;28279:4;28286:16;-1:-1:-1::0;;;;;28286:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28217:93;::::0;-1:-1:-1;;;;;;28217:93:0::1;::::0;;;;;;-1:-1:-1;;;;;4317:15:1;;;28217:93:0::1;::::0;::::1;4299:34:1::0;4369:15;;4349:18;;;4342:43;4234:18;;28217:93:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28389:7;:26:::0;;-1:-1:-1;;;;;;28389:26:0::1;-1:-1:-1::0;;;;;28389:26:0;;::::1;;::::0;;28426:21:::1;:28:::0;;-1:-1:-1;;;;;;;28426:28:0;::::1;;::::0;;;28486:11;;;-1:-1:-1;28465:34:0;;;:12:::1;:34;::::0;;;;:41;;-1:-1:-1;;28465:41:0::1;-1:-1:-1::0;28465:41:0::1;::::0;;-1:-1:-1;28486:11:0;;28200:110;-1:-1:-1;28010:504:0:o;26866:210::-;199:10;26954:4;27003:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;27003:34:0;;;;;;;;;;26954:4;;26971:83;;26994:7;;27003:50;;27042:10;27003:38;:50::i;27875:125::-;14615:6;;-1:-1:-1;;;;;14615:6:0;199:10;14615:22;14607:67;;;;-1:-1:-1;;;14607:67:0;;;;;;;:::i;:::-;27957:24:::1;:35:::0;27875:125::o;14702:145::-;14615:6;;-1:-1:-1;;;;;14615:6:0;199:10;14615:22;14607:67;;;;-1:-1:-1;;;14607:67:0;;;;;;;:::i;:::-;14806:1:::1;14790:6:::0;;14769:40:::1;::::0;-1:-1:-1;;;;;14790:6:0;;::::1;::::0;14769:40:::1;::::0;14806:1;;14769:40:::1;14837:1;14820:19:::0;;-1:-1:-1;;;;;;14820:19:0::1;::::0;;14702:145::o;26294:87::-;26333:13;26366:7;26359:14;;;;;:::i;27084:269::-;27177:4;27194:129;199:10;27217:7;27226:96;27265:15;27226:96;;;;;;;;;;;;;;;;;199:10;27226:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;27226:34:0;;;;;;;;;;;;:38;:96::i;28756:167::-;28834:4;28851:42;199:10;28875:9;28886:6;28851:9;:42::i;14855:236::-;14615:6;;-1:-1:-1;;;;;14615:6:0;199:10;14615:22;14607:67;;;;-1:-1:-1;;;14607:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14944:22:0;::::1;14936:73;;;::::0;-1:-1:-1;;;14936:73:0;;4598:2:1;14936:73:0::1;::::0;::::1;4580:21:1::0;4637:2;4617:18;;;4610:30;4676:34;4656:18;;;4649:62;-1:-1:-1;;;4727:18:1;;;4720:36;4773:19;;14936:73:0::1;4396:402:1::0;14936:73:0::1;15046:6;::::0;;15025:38:::1;::::0;-1:-1:-1;;;;;15025:38:0;;::::1;::::0;15046:6;::::1;::::0;15025:38:::1;::::0;::::1;15066:6;:17:::0;;-1:-1:-1;;;;;;15066:17:0::1;-1:-1:-1::0;;;;;15066:17:0;;;::::1;::::0;;;::::1;::::0;;14855:236::o;27530:337::-;-1:-1:-1;;;;;27623:19:0;;27615:68;;;;-1:-1:-1;;;27615:68:0;;5005:2:1;27615:68:0;;;4987:21:1;5044:2;5024:18;;;5017:30;5083:34;5063:18;;;5056:62;-1:-1:-1;;;5134:18:1;;;5127:34;5178:19;;27615:68:0;4803:400:1;27615:68:0;-1:-1:-1;;;;;27702:21:0;;27694:68;;;;-1:-1:-1;;;27694:68:0;;5410:2:1;27694:68:0;;;5392:21:1;5449:2;5429:18;;;5422:30;5488:34;5468:18;;;5461:62;-1:-1:-1;;;5539:18:1;;;5532:32;5581:19;;27694:68:0;5208:398:1;27694:68:0;-1:-1:-1;;;;;27775:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;27827:32;;1361:25:1;;;27827:32:0;;1334:18:1;27827:32:0;;;;;;;27530:337;;;:::o;29252:1312::-;29339:4;-1:-1:-1;;;;;29366:20:0;;29358:70;;;;-1:-1:-1;;;29358:70:0;;5813:2:1;29358:70:0;;;5795:21:1;5852:2;5832:18;;;5825:30;5891:34;5871:18;;;5864:62;-1:-1:-1;;;5942:18:1;;;5935:35;5987:19;;29358:70:0;5611:401:1;29358:70:0;-1:-1:-1;;;;;29447:23:0;;29439:71;;;;-1:-1:-1;;;29439:71:0;;6219:2:1;29439:71:0;;;6201:21:1;6258:2;6238:18;;;6231:30;6297:34;6277:18;;;6270:62;-1:-1:-1;;;6348:18:1;;;6341:33;6391:19;;29439:71:0;6017:399:1;29439:71:0;29538:1;29529:6;:10;29521:64;;;;-1:-1:-1;;;29521:64:0;;6623:2:1;29521:64:0;;;6605:21:1;6662:2;6642:18;;;6635:30;6701:34;6681:18;;;6674:62;-1:-1:-1;;;6752:18:1;;;6745:39;6801:19;;29521:64:0;6421:405:1;29521:64:0;29601:16;;-1:-1:-1;;;29601:16:0;;;;29598:959;;;29650:41;29665:6;29673:9;29684:6;29650:14;:41::i;:::-;29643:48;;;;29598:959;29793:4;29744:28;26681:18;;;:9;:18;;;;;;29869:24;;29845:48;;;;;;;29914:44;;-1:-1:-1;29942:16:0;;-1:-1:-1;;;29942:16:0;;;;29941:17;29914:44;:69;;;;-1:-1:-1;;;;;;29963:20:0;;;;;;:12;:20;;;;;;;;29962:21;29914:69;:94;;;;-1:-1:-1;29987:21:0;;-1:-1:-1;;;29987:21:0;;;;29914:94;29910:306;;;30045:25;;-1:-1:-1;;;30045:25:0;;;;30042:98;;;30116:24;;30093:47;;30042:98;30159:41;30172:6;30179:20;30159:12;:41::i;:::-;30252:53;;;;;;;;;;;-1:-1:-1;;;30252:53:0;;;;;;;;-1:-1:-1;;;;;30252:17:0;;-1:-1:-1;30252:17:0;;;:9;:17;;;;;;;;:53;;30274:6;;30252:21;:53::i;:::-;-1:-1:-1;;;;;30232:17:0;;;;;;:9;:17;;;;;:73;;;;30344:34;30242:6;30360:9;30371:6;30344:7;:34::i;:::-;-1:-1:-1;;;;;30420:20:0;;;;;;:9;:20;;;;;;30322:56;;-1:-1:-1;30420:37:0;;30322:56;30420:24;:37::i;:::-;-1:-1:-1;;;;;30397:20:0;;;;;;;:9;:20;;;;;;;:60;;;;30479:40;;;;;;;;;;30507:11;1361:25:1;;1349:2;1334:18;;1215:177;30479:40:0;;;;;;;;30541:4;30534:11;;;;;;;10422:192;10508:7;10544:12;10536:6;;;;10528:29;;;;-1:-1:-1;;;10528:29:0;;;;;;;;:::i;:::-;-1:-1:-1;10568:9:0;10580:5;10584:1;10580;:5;:::i;:::-;10568:17;10422:192;-1:-1:-1;;;;;10422:192:0:o;10091:179::-;10149:7;;10181:5;10185:1;10181;:5;:::i;:::-;10169:17;;10210:1;10205;:6;;10197:46;;;;-1:-1:-1;;;10197:46:0;;7428:2:1;10197:46:0;;;7410:21:1;7467:2;7447:18;;;7440:30;7506:29;7486:18;;;7479:57;7553:18;;10197:46:0;7226:351:1;30572:330:0;30702:53;;;;;;;;;;;-1:-1:-1;;;30702:53:0;;;;;;;;-1:-1:-1;;;;;30702:17:0;;30665:4;30702:17;;;:9;:17;;;;;;;:53;;30724:6;;30702:21;:53::i;:::-;-1:-1:-1;;;;;30682:17:0;;;;;;;:9;:17;;;;;;:73;;;;30789:20;;;;;;;:32;;30814:6;30789:24;:32::i;:::-;-1:-1:-1;;;;;30766:20:0;;;;;;;:9;:20;;;;;;;:55;;;;30837:35;;;;;;;;;;30865:6;1361:25:1;;1349:2;1334:18;;1215:177;30837:35:0;;;;;;;;-1:-1:-1;30890:4:0;30572:330;;;;;:::o;31551:543::-;31727:7;;31695:54;;31712:4;;-1:-1:-1;;;;;31727:7:0;31737:11;31695:8;:54::i;:::-;31843:7;;:243;;-1:-1:-1;;;31843:243:0;;-1:-1:-1;;;;;7941:15:1;;;31843:243:0;;;7923:34:1;7973:18;;;7966:34;;;31760:17:0;8016:18:1;;;8009:34;;;8059:18;;;8052:34;32040:4:0;8102:19:1;;;8095:44;32060:15:0;8155:19:1;;;8148:35;31781:21:0;;31843:7;;:23;;31781:21;;7857:19:1;;31843:243:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;31617:477;31551:543;;:::o;32735:587::-;-1:-1:-1;;;;;32878:20:0;;32821:7;32878:20;;;:12;:20;;;;;;32821:7;;32878:20;;32875:214;;;32927:38;32961:3;32927:29;32938:17;;32927:6;:10;;:29;;;;:::i;:::-;:33;;:38::i;:::-;32915:50;;32875:214;;;-1:-1:-1;;;;;32995:23:0;;;;;;:12;:23;;;;;;;;32992:97;;;33047:39;33082:3;33047:30;33058:18;;33047:6;:10;;:30;;;;:::i;:39::-;33035:51;;32992:97;33104:13;;33101:173;;33179:4;33161:24;;;;:9;:24;;;;;;:39;;33190:9;33161:28;:39::i;:::-;33152:4;33134:24;;;;:9;:24;;;;;;;:66;;;;33220:42;;-1:-1:-1;;;;;33220:42:0;;;;;;;33252:9;1361:25:1;;1349:2;1334:18;;1215:177;33220:42:0;;;;;;;;33101:173;33293:21;:6;33304:9;33293:10;:21::i;10622:250::-;10680:7;10704:1;10709;10704:6;10700:47;;-1:-1:-1;10734:1:0;10727:8;;10700:47;10759:9;10771:5;10775:1;10771;:5;:::i;:::-;10759:17;-1:-1:-1;10804:1:0;10795:5;10799:1;10759:17;10795:5;:::i;:::-;:10;10787:56;;;;-1:-1:-1;;;10787:56:0;;9102:2:1;10787:56:0;;;9084:21:1;9141:2;9121:18;;;9114:30;9180:34;9160:18;;;9153:62;-1:-1:-1;;;9231:18:1;;;9224:31;9272:19;;10787:56:0;8900:397:1;10880:132:0;10938:7;10965:39;10969:1;10972;10965:39;;;;;;;;;;;;;;;;;:3;:39::i;10278:136::-;10336:7;10363:43;10367:1;10370;10363:43;;;;;;;;;;;;;;;;;:3;:43::i;11020:278::-;11106:7;11141:12;11134:5;11126:28;;;;-1:-1:-1;;;11126:28:0;;;;;;;;:::i;:::-;-1:-1:-1;11165:9:0;11177:5;11181:1;11177;:5;:::i;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;622:70;567:131;:::o;703:315::-;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1397:456::-;1474:6;1482;1490;1543:2;1531:9;1522:7;1518:23;1514:32;1511:52;;;1559:1;1556;1549:12;1511:52;1598:9;1585:23;1617:31;1642:5;1617:31;:::i;:::-;1667:5;-1:-1:-1;1724:2:1;1709:18;;1696:32;1737:33;1696:32;1737:33;:::i;:::-;1397:456;;1789:7;;-1:-1:-1;;;1843:2:1;1828:18;;;;1815:32;;1397:456::o;2047:247::-;2106:6;2159:2;2147:9;2138:7;2134:23;2130:32;2127:52;;;2175:1;2172;2165:12;2127:52;2214:9;2201:23;2233:31;2258:5;2233:31;:::i;2507:180::-;2566:6;2619:2;2607:9;2598:7;2594:23;2590:32;2587:52;;;2635:1;2632;2625:12;2587:52;-1:-1:-1;2658:23:1;;2507:180;-1:-1:-1;2507:180:1:o;2692:388::-;2760:6;2768;2821:2;2809:9;2800:7;2796:23;2792:32;2789:52;;;2837:1;2834;2827:12;2789:52;2876:9;2863:23;2895:31;2920:5;2895:31;:::i;:::-;2945:5;-1:-1:-1;3002:2:1;2987:18;;2974:32;3015:33;2974:32;3015:33;:::i;:::-;3067:7;3057:17;;;2692:388;;;;;:::o;3085:380::-;3164:1;3160:12;;;;3207;;;3228:61;;3282:4;3274:6;3270:17;3260:27;;3228:61;3335:2;3327:6;3324:14;3304:18;3301:38;3298:161;;3381:10;3376:3;3372:20;3369:1;3362:31;3416:4;3413:1;3406:15;3444:4;3441:1;3434:15;3298:161;;3085:380;;;:::o;3470:356::-;3672:2;3654:21;;;3691:18;;;3684:30;3750:34;3745:2;3730:18;;3723:62;3817:2;3802:18;;3470:356::o;3831:251::-;3901:6;3954:2;3942:9;3933:7;3929:23;3925:32;3922:52;;;3970:1;3967;3960:12;3922:52;4002:9;3996:16;4021:31;4046:5;4021:31;:::i;6831:127::-;6892:10;6887:3;6883:20;6880:1;6873:31;6923:4;6920:1;6913:15;6947:4;6944:1;6937:15;6963:128;7030:9;;;7051:11;;;7048:37;;;7065:18;;:::i;7096:125::-;7161:9;;;7182:10;;;7179:36;;;7195:18;;:::i;8194:306::-;8282:6;8290;8298;8351:2;8339:9;8330:7;8326:23;8322:32;8319:52;;;8367:1;8364;8357:12;8319:52;8396:9;8390:16;8380:26;;8446:2;8435:9;8431:18;8425:25;8415:35;;8490:2;8479:9;8475:18;8469:25;8459:35;;8194:306;;;;;:::o;8505:168::-;8578:9;;;8609;;8626:15;;;8620:22;;8606:37;8596:71;;8647:18;;:::i;8678:217::-;8718:1;8744;8734:132;;8788:10;8783:3;8779:20;8776:1;8769:31;8823:4;8820:1;8813:15;8851:4;8848:1;8841:15;8734:132;-1:-1:-1;8880:9:1;;8678:217::o

Swarm Source

ipfs://82d0bf7d5cd5c9bb8ae717914f5ab0bb92c68ecff6e4d710eca6ad56b2546241
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.