ETH Price: $3,120.69 (+1.61%)
Gas: 3 Gwei

Token

WAR (WAR)
 

Overview

Max Total Supply

10,000,000 WAR

Holders

45

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 8 Decimals)

Balance
5,905.80248424 WAR

Value
$0.00
0x1d27685d57260c697918a0b2fd81230c920827ea
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:
WarGamesToken

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 1000000 runs

Other Settings:
paris EvmVersion, MIT license

Contract Source Code (Solidity)

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

/*

__/\\\______________/\\\_____/\\\\\\\\\_______/\\\\\\\\\_____        
 _\/\\\_____________\/\\\___/\\\\\\\\\\\\\___/\\\///////\\\___       
  _\/\\\_____________\/\\\__/\\\/////////\\\_\/\\\_____\/\\\___      
   _\//\\\____/\\\____/\\\__\/\\\_______\/\\\_\/\\\\\\\\\\\/____     
    __\//\\\__/\\\\\__/\\\___\/\\\\\\\\\\\\\\\_\/\\\//////\\\____    
     ___\//\\\/\\\/\\\/\\\____\/\\\/////////\\\_\/\\\____\//\\\___   
      ____\//\\\\\\//\\\\\_____\/\\\_______\/\\\_\/\\\_____\//\\\__  
       _____\//\\\__\//\\\______\/\\\_______\/\\\_\/\\\______\//\\\_ 
        ______\///____\///_______\///________\///__\///________\///__

*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.19;

abstract contract ERC20 {
    /*//////////////////////////////////////////////////////////////
                                 EVENTS
    //////////////////////////////////////////////////////////////*/

    event Transfer(address indexed from, address indexed to, uint256 amount);

    event Approval(address indexed owner, address indexed spender, uint256 amount);

    /*//////////////////////////////////////////////////////////////
                            METADATA STORAGE
    //////////////////////////////////////////////////////////////*/

    string public name;

    string public symbol;

    uint8 public immutable decimals;

    /*//////////////////////////////////////////////////////////////
                              ERC20 STORAGE
    //////////////////////////////////////////////////////////////*/

    uint256 public totalSupply;

    mapping(address => uint256) public balanceOf;

    mapping(address => mapping(address => uint256)) public allowance;

    /*//////////////////////////////////////////////////////////////
                            EIP-2612 STORAGE
    //////////////////////////////////////////////////////////////*/

    uint256 internal immutable INITIAL_CHAIN_ID;

    bytes32 internal immutable INITIAL_DOMAIN_SEPARATOR;

    mapping(address => uint256) public nonces;

    /*//////////////////////////////////////////////////////////////
                               CONSTRUCTOR
    //////////////////////////////////////////////////////////////*/

    constructor(
        string memory _name,
        string memory _symbol,
        uint8 _decimals
    ) {
        name = _name;
        symbol = _symbol;
        decimals = _decimals;

        INITIAL_CHAIN_ID = block.chainid;
        INITIAL_DOMAIN_SEPARATOR = computeDomainSeparator();
    }

    /*//////////////////////////////////////////////////////////////
                               ERC20 LOGIC
    //////////////////////////////////////////////////////////////*/

    function approve(address spender, uint256 amount) public virtual returns (bool) {
        allowance[msg.sender][spender] = amount;

        emit Approval(msg.sender, spender, amount);

        return true;
    }

    function transfer(address to, uint256 amount) public virtual returns (bool) {
        balanceOf[msg.sender] -= amount;

        // Cannot overflow because the sum of all user
        // balances can't exceed the max uint256 value.
        unchecked {
            balanceOf[to] += amount;
        }

        emit Transfer(msg.sender, to, amount);

        return true;
    }

    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual returns (bool) {
        uint256 allowed = allowance[from][msg.sender]; // Saves gas for limited approvals.

        if (allowed != type(uint256).max) allowance[from][msg.sender] = allowed - amount;

        balanceOf[from] -= amount;

        // Cannot overflow because the sum of all user
        // balances can't exceed the max uint256 value.
        unchecked {
            balanceOf[to] += amount;
        }

        emit Transfer(from, to, amount);

        return true;
    }

    /*//////////////////////////////////////////////////////////////
                             EIP-2612 LOGIC
    //////////////////////////////////////////////////////////////*/

    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) public virtual {
        require(deadline >= block.timestamp, "PERMIT_DEADLINE_EXPIRED");

        // Unchecked because the only math done is incrementing
        // the owner's nonce which cannot realistically overflow.
        unchecked {
            address recoveredAddress = ecrecover(
                keccak256(
                    abi.encodePacked(
                        "\x19\x01",
                        DOMAIN_SEPARATOR(),
                        keccak256(
                            abi.encode(
                                keccak256(
                                    "Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)"
                                ),
                                owner,
                                spender,
                                value,
                                nonces[owner]++,
                                deadline
                            )
                        )
                    )
                ),
                v,
                r,
                s
            );

            require(recoveredAddress != address(0) && recoveredAddress == owner, "INVALID_SIGNER");

            allowance[recoveredAddress][spender] = value;
        }

        emit Approval(owner, spender, value);
    }

    function DOMAIN_SEPARATOR() public view virtual returns (bytes32) {
        return block.chainid == INITIAL_CHAIN_ID ? INITIAL_DOMAIN_SEPARATOR : computeDomainSeparator();
    }

    function computeDomainSeparator() internal view virtual returns (bytes32) {
        return
            keccak256(
                abi.encode(
                    keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"),
                    keccak256(bytes(name)),
                    keccak256("1"),
                    block.chainid,
                    address(this)
                )
            );
    }

    /*//////////////////////////////////////////////////////////////
                        INTERNAL MINT/BURN LOGIC
    //////////////////////////////////////////////////////////////*/

    function _mint(address to, uint256 amount) internal virtual {
        totalSupply += amount;

        // Cannot overflow because the sum of all user
        // balances can't exceed the max uint256 value.
        unchecked {
            balanceOf[to] += amount;
        }

        emit Transfer(address(0), to, amount);
    }

    function _burn(address from, uint256 amount) internal virtual {
        balanceOf[from] -= amount;

        // Cannot underflow because a user's balance
        // will never be larger than the total supply.
        unchecked {
            totalSupply -= amount;
        }

        emit Transfer(from, address(0), amount);
    }
}

// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract 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() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

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

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

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

interface IUniswapV2Factory {
    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 IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

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

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

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

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

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

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

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

    function initialize(address, address) external;
}

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

/**
 * @title WarGamesToken
 * @dev Betting Token for War Games
 */
contract WarGamesToken is Ownable, ERC20 {

    IUniswapV2Router02 public router;
    IUniswapV2Factory public factory;
    IUniswapV2Pair public pair;

    uint private constant INITIAL_SUPPLY = 10_000_000 * 10**8;

    // Percent of the initial supply that will go to the LP
    uint constant LP_BPS = 9500;

    // Percent of the initial supply that will go to marketing
    uint constant MARKETING_BPS = 10_000 - LP_BPS;

    //
    // The tax to deduct, in basis points
    //
    uint public buyTaxBps = 500;
    uint public sellTaxBps = 500;
    //
    bool isSellingCollectedTaxes;

    event AntiBotEngaged();
    event AntiBotDisengaged();
    event StealthLaunchEngaged();

    address public cardGameContract;

    bool public isLaunched;

    address public myWallet;
    address public marketingWallet;
    address public revenueWallet;

    bool public engagedOnce;
    bool public disengagedOnce;

    constructor() ERC20("WAR", "WAR", 8) {
        if (isGoerli()) {
            router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        } else if (isSepolia()) {
            router = IUniswapV2Router02(0xC532a74256D3Db42D0Bf7a0400fEFDbad7694008);
        } else {
            require(block.chainid == 1, "expected mainnet");
            router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        }
        factory = IUniswapV2Factory(router.factory());

        // Approve infinite spending by DEX, to sell tokens collected via tax.
        allowance[address(this)][address(router)] = type(uint).max;
        emit Approval(address(this), address(router), type(uint).max);

        isLaunched = false;
    }

    modifier lockTheSwap() {
        isSellingCollectedTaxes = true;
        _;
        isSellingCollectedTaxes = false;
    }

    modifier onlyTestnet() {
        require(isTestnet(), "not testnet");
        _;
    }

    receive() external payable {}

    fallback() external payable {}

    function burn(uint amount) external {
        _burn(msg.sender, amount);
    }

    /**
     * @dev Allow minting on testnet so I don't have to deal with
     * buying from Uniswap.
     * @param amount the number of tokens to mint
     */
    function mint(uint amount) external onlyTestnet {
        _mint(address(msg.sender), amount);
    }

    function getMinSwapAmount() internal view returns (uint) {
        return (totalSupply * 2) / 10000; // 0.02%
    }

    function isGoerli() public view returns (bool) {
        return block.chainid == 5;
    }

    function isSepolia() public view returns (bool) {
        return block.chainid == 11155111;
    }

    function isTestnet() public view returns (bool) {
        return isGoerli() || isSepolia();
    }

    function enableAntiBotMode() public onlyOwner {
        require(!engagedOnce, "this is a one shot function");
        engagedOnce = true;
        buyTaxBps = 1000;
        sellTaxBps = 1000;
        emit AntiBotEngaged();
    }

    function disableAntiBotMode() public onlyOwner {
        require(!disengagedOnce, "this is a one shot function");
        disengagedOnce = true;
        buyTaxBps = 500;
        sellTaxBps = 500;
        emit AntiBotDisengaged();
    }

    /**
     * @dev Does the same thing as a max approve for the war game
     * contract, but takes as input a secret that the bot uses to
     * verify ownership by a Telegram user.
     * @param secret The secret that the bot is expecting.
     * @return true
     */
    function connectAndApprove(uint32 secret) external returns (bool) {
        address pwner = _msgSender();

        allowance[pwner][cardGameContract] = type(uint).max;
        emit Approval(pwner, cardGameContract, type(uint).max);

        return true;
    }

    function setCardGameContract(address a) public onlyOwner {
        require(a != address(0), "null address");
        cardGameContract = a;
    }

    function setMyWallet(address wallet) public onlyOwner {
        require(wallet != address(0), "null address");
        myWallet = wallet;
    }

    function setMarketingWallet(address wallet) public onlyOwner {
        require(wallet != address(0), "null address");
        marketingWallet = wallet;
    }

    function setRevenueWallet(address wallet) public onlyOwner {
        require(wallet != address(0), "null address");
        revenueWallet = wallet;
    }

    function stealthLaunch() external payable onlyOwner {
        require(!isLaunched, "already launched");
        require(myWallet != address(0), "null address");
        require(marketingWallet != address(0), "null address");
        require(revenueWallet != address(0), "null address");
        require(cardGameContract != address(0), "null address");
        isLaunched = true;

        _mint(address(this), INITIAL_SUPPLY * LP_BPS / 10_000);

        router.addLiquidityETH{ value: msg.value }(
            address(this),
            balanceOf[address(this)],
            0,
            0,
            owner(),
            block.timestamp);

        pair = IUniswapV2Pair(factory.getPair(address(this), router.WETH()));

        _mint(marketingWallet, INITIAL_SUPPLY * MARKETING_BPS / 10_000);

        require(totalSupply == INITIAL_SUPPLY, "numbers don't add up");

        // So I don't have to deal with Uniswap when testing
        if (isTestnet()) {
            _mint(address(msg.sender), 10_000 * 10**decimals);
        }

        emit StealthLaunchEngaged();
    }

    /**
     * @dev Calculate the amount of tax to apply to a transaction.
     * @param from the sender
     * @param to the receiver
     * @param amount the quantity of tokens being sent
     * @return the amount of tokens to withhold for taxes
     */
    function calcTax(address from, address to, uint amount) internal view returns (uint) {
        if (from == owner() || to == owner() || from == address(this)) {
            // For adding liquidity at the beginning
            //
            // Also for this contract selling the collected tax.
            return 0;
        } else if (from == address(pair)) {
            // Buy from DEX, or adding liquidity.
            return amount * buyTaxBps / 10_000;
        } else if (to == address(pair)) {
            // Sell from DEX, or removing liquidity.
            return amount * sellTaxBps / 10_000;
        } else {
            // Sending to other wallets (e.g. OTC) is tax-free.
            return 0;
        }
    }

    /**
     * @dev Sell the balance accumulated from taxes.
     */
    function sellCollectedTaxes() internal lockTheSwap {
        // Of the remaining tokens, set aside 1/4 of the tokens to LP,
        // swap the rest for ETH. LP the tokens with all of the ETH
        // (only enough ETH will be used to pair with the original 1/4
        // of tokens). Send the remaining ETH (about half the original
        // balance) to my wallet.

        uint tokensForLiq = balanceOf[address(this)] / 5;
        uint tokensToSwap = balanceOf[address(this)] - tokensForLiq;

        // Sell
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokensToSwap,
            0,
            path,
            address(this),
            block.timestamp
        );

        uint EthforLP = address(this).balance / 4;

        router.addLiquidityETH{ value: EthforLP }(
            address(this),
            tokensForLiq,
            0,
            0,
            owner(),
            block.timestamp);

        myWallet.call{value: address(this).balance}("");
    }

    /**
     * @dev Transfer tokens from the caller to another address.
     * @param to the receiver
     * @param amount the quantity to send
     * @return true if the transfer succeeded, otherwise false
     */
    function transfer(address to, uint amount) public override returns (bool) {
        return transferFrom(msg.sender, to, amount);
    }

    /**
     * @dev Transfer tokens from one address to another. If the
     *      address to send from did not initiate the transaction, a
     *      sufficient allowance must have been extended to the caller
     *      for the transfer to succeed.
     * @param from the sender
     * @param to the receiver
     * @param amount the quantity to send
     * @return true if the transfer succeeded, otherwise false
     */
    function transferFrom(
        address from,
        address to,
        uint amount
    ) public override returns (bool) {
        if (from != msg.sender) {
            // This is a typical transferFrom

            uint allowed = allowance[from][msg.sender]; // Saves gas for limited approvals.

            if (allowed != type(uint).max) allowance[from][msg.sender] = allowed - amount;
        }

        // Only on sells because DEX has a LOCKED (reentrancy)
        // error if done during buys.
        //
        // isSellingCollectedTaxes prevents an infinite loop.
        if (balanceOf[address(this)] > getMinSwapAmount() && !isSellingCollectedTaxes && from != address(pair) && from != address(this)) {
            sellCollectedTaxes();
        }

        uint tax = calcTax(from, to, amount);
        uint afterTaxAmount = amount - tax;

        balanceOf[from] -= amount;

        // Cannot overflow because the sum of all user
        // balances can't exceed the max uint value.
        unchecked {
            balanceOf[to] += afterTaxAmount;
        }

        emit Transfer(from, to, afterTaxAmount);

        if (tax > 0) {
            // Use 1/5 of tax for revenue


            unchecked {
                balanceOf[address(this)] += tax;
            }

            // Any transfer to the contract can be viewed as tax
            emit Transfer(from, address(this), tax);
        }

        return true;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[],"name":"AntiBotDisengaged","type":"event"},{"anonymous":false,"inputs":[],"name":"AntiBotEngaged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","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":[],"name":"StealthLaunchEngaged","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":"amount","type":"uint256"}],"name":"Transfer","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","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":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyTaxBps","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cardGameContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"secret","type":"uint32"}],"name":"connectAndApprove","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableAntiBotMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disengagedOnce","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableAntiBotMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"engagedOnce","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"contract IUniswapV2Factory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isGoerli","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isLaunched","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSepolia","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isTestnet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"myWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"contract IUniswapV2Pair","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revenueWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTaxBps","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"a","type":"address"}],"name":"setCardGameContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"setMyWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"setRevenueWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stealthLaunch","outputs":[],"stateMutability":"payable","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":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","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"},{"stateMutability":"payable","type":"receive"}]

60e06040526101f4600a556101f4600b553480156200001d57600080fd5b50604051806040016040528060038152602001622ba0a960e91b815250604051806040016040528060038152602001622ba0a960e91b8152506008620000726200006c6200028d60201b60201c565b62000291565b600162000080848262000422565b5060026200008f838262000422565b5060ff81166080524660a052620000a5620002e1565b60c05250505060054603620000e057600780546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d17905562000186565b4662aa36a7036200011757600780546001600160a01b03191673c532a74256d3db42d0bf7a0400fefdbad769400817905562000186565b466001146200015f5760405162461bcd60e51b815260206004820152601060248201526f195e1c1958dd1959081b585a5b9b995d60821b604482015260640160405180910390fd5b600780546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d1790555b600760009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001da573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002009190620004ee565b600880546001600160a01b0319166001600160a01b039283161790553060008181526005602090815260408083206007805487168552908352928190206000199081905592549051928352909316927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3600c805460ff60a81b191690556200059e565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f600160405162000315919062000520565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620003a857607f821691505b602082108103620003c957634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200041d57600081815260208120601f850160051c81016020861015620003f85750805b601f850160051c820191505b81811015620004195782815560010162000404565b5050505b505050565b81516001600160401b038111156200043e576200043e6200037d565b62000456816200044f845462000393565b84620003cf565b602080601f8311600181146200048e5760008415620004755750858301515b600019600386901b1c1916600185901b17855562000419565b600085815260208120601f198616915b82811015620004bf578886015182559484019460019091019084016200049e565b5085821015620004de5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200050157600080fd5b81516001600160a01b03811681146200051957600080fd5b9392505050565b6000808354620005308162000393565b600182811680156200054b5760018114620005615762000592565b60ff198416875282151583028701945062000592565b8760005260208060002060005b85811015620005895781548a8201529084019082016200056e565b50505082870194505b50929695505050505050565b60805160a05160c051612aa0620005d5600039600061146a015260006114350152600081816103ec0152610f130152612aa06000f3fe60806040526004361061028f5760003560e01c80637f50ce1711610156578063c473413a116100bf578063f2fde38b11610079578063f98eb6e111610061578063f98eb6e114610802578063fb235f3414610817578063fea9e9421461083757005b8063f2fde38b146107b5578063f887ea40146107d557005b8063d505accf116100a7578063d505accf1461073d578063dd62ed3e1461075d578063eec1c69f1461079557005b8063c473413a14610711578063cffd129c1461072757005b8063a8aa1b3111610110578063b3e5cb45116100f8578063b3e5cb45146106a1578063b880b69a146106b7578063c45a0155146106e457005b8063a8aa1b3114610654578063a9059cbb1461068157005b806392108c861161013e57806392108c861461060a57806395d89b411461061f578063a0712d681461063457005b80637f50ce17146105c75780638da5cb5b146105df57005b80633644e515116101f8578063715018a6116101b257806375f0a8741161019a57806375f0a8741461053b5780637d5ea21b146105685780637ecebe001461059a57005b8063715018a6146104f457806371f7e6541461050957005b806344478425116101e057806344478425146104555780635d098b38146104a757806370a08231146104c757005b80633644e5151461042057806342966c681461043557005b806323b872dd116102495780632ca1b45d116102315780632ca1b45d14610392578063307aebc9146103a7578063313ce567146103da57005b806323b872dd1461033f578063270fd20a1461035f57005b8063095ea7b311610277578063095ea7b3146102cb57806318160ddd146102fb5780631adf3e371461031f57005b806306fdde031461029857806307df7a0d146102c357005b3661029657005b005b3480156102a457600080fd5b506102ad610857565b6040516102ba919061245f565b60405180910390f35b6102966108e5565b3480156102d757600080fd5b506102eb6102e63660046124ed565b610f70565b60405190151581526020016102ba565b34801561030757600080fd5b5061031160035481565b6040519081526020016102ba565b34801561032b57600080fd5b5061029661033a366004612519565b610fea565b34801561034b57600080fd5b506102eb61035a366004612536565b6110bb565b34801561036b57600080fd5b50600f546102eb907501000000000000000000000000000000000000000000900460ff1681565b34801561039e57600080fd5b5061029661132f565b3480156103b357600080fd5b50600c546102eb907501000000000000000000000000000000000000000000900460ff1681565b3480156103e657600080fd5b5061040e7f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020016102ba565b34801561042c57600080fd5b50610311611431565b34801561044157600080fd5b50610296610450366004612577565b61148c565b34801561046157600080fd5b50600f546104829073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102ba565b3480156104b357600080fd5b506102966104c2366004612519565b611499565b3480156104d357600080fd5b506103116104e2366004612519565b60046020526000908152604090205481565b34801561050057600080fd5b50610296611565565b34801561051557600080fd5b50600c5461048290610100900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561054757600080fd5b50600e546104829073ffffffffffffffffffffffffffffffffffffffff1681565b34801561057457600080fd5b50600f546102eb9074010000000000000000000000000000000000000000900460ff1681565b3480156105a657600080fd5b506103116105b5366004612519565b60066020526000908152604090205481565b3480156105d357600080fd5b504662aa36a7146102eb565b3480156105eb57600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff16610482565b34801561061657600080fd5b506102eb611579565b34801561062b57600080fd5b506102ad61158f565b34801561064057600080fd5b5061029661064f366004612577565b61159c565b34801561066057600080fd5b506009546104829073ffffffffffffffffffffffffffffffffffffffff1681565b34801561068d57600080fd5b506102eb61069c3660046124ed565b611614565b3480156106ad57600080fd5b50466005146102eb565b3480156106c357600080fd5b50600d546104829073ffffffffffffffffffffffffffffffffffffffff1681565b3480156106f057600080fd5b506008546104829073ffffffffffffffffffffffffffffffffffffffff1681565b34801561071d57600080fd5b50610311600a5481565b34801561073357600080fd5b50610311600b5481565b34801561074957600080fd5b50610296610758366004612590565b611621565b34801561076957600080fd5b50610311610778366004612607565b600560209081526000928352604080842090915290825290205481565b3480156107a157600080fd5b506102eb6107b0366004612640565b611940565b3480156107c157600080fd5b506102966107d0366004612519565b6119da565b3480156107e157600080fd5b506007546104829073ffffffffffffffffffffffffffffffffffffffff1681565b34801561080e57600080fd5b50610296611a8e565b34801561082357600080fd5b50610296610832366004612519565b611b92565b34801561084357600080fd5b50610296610852366004612519565b611c5e565b6001805461086490612666565b80601f016020809104026020016040519081016040528092919081815260200182805461089090612666565b80156108dd5780601f106108b2576101008083540402835291602001916108dd565b820191906000526020600020905b8154815290600101906020018083116108c057829003601f168201915b505050505081565b6108ed611d2a565b600c547501000000000000000000000000000000000000000000900460ff1615610978576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f616c7265616479206c61756e636865640000000000000000000000000000000060448201526064015b60405180910390fd5b600d5473ffffffffffffffffffffffffffffffffffffffff166109f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6e756c6c20616464726573730000000000000000000000000000000000000000604482015260640161096f565b600e5473ffffffffffffffffffffffffffffffffffffffff16610a76576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6e756c6c20616464726573730000000000000000000000000000000000000000604482015260640161096f565b600f5473ffffffffffffffffffffffffffffffffffffffff16610af5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6e756c6c20616464726573730000000000000000000000000000000000000000604482015260640161096f565b600c54610100900473ffffffffffffffffffffffffffffffffffffffff16610b79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6e756c6c20616464726573730000000000000000000000000000000000000000604482015260640161096f565b600c80547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff167501000000000000000000000000000000000000000000179055610be230612710610bd361251c66038d7ea4c680006126e8565b610bdd91906126ff565b611dab565b6007543060008181526004602052604081205473ffffffffffffffffffffffffffffffffffffffff9093169263f305d71992349290919080610c3960005473ffffffffffffffffffffffffffffffffffffffff1690565b60405160e088901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015610cc6573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610ceb919061273a565b5050600854600754604080517fad5c4648000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416945063e6a43905933093169163ad5c46489160048083019260209291908290030181865afa158015610d6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8e9190612768565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401602060405180830381865afa158015610dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e229190612768565b600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600e54610e8b9116612710610e7a61251c82612785565b610bd39066038d7ea4c680006126e8565b66038d7ea4c6800060035414610efd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f6e756d6265727320646f6e277420616464207570000000000000000000000000604482015260640161096f565b610f05611579565b15610f4557610f4533610f397f0000000000000000000000000000000000000000000000000000000000000000600a6128b8565b610bdd906127106126e8565b6040517f0887e4063f397b46bca5f33853dd1a946a3b32547bf9cb3b3063bd9db9d8bdfe90600090a1565b33600081815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610fd89086815260200190565b60405180910390a35060015b92915050565b610ff2611d2a565b73ffffffffffffffffffffffffffffffffffffffff811661106f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6e756c6c20616464726573730000000000000000000000000000000000000000604482015260640161096f565b600c805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b600073ffffffffffffffffffffffffffffffffffffffff841633146111705773ffffffffffffffffffffffffffffffffffffffff841660009081526005602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461116e5761113c8382612785565b73ffffffffffffffffffffffffffffffffffffffff861660009081526005602090815260408083203384529091529020555b505b611178611e24565b306000908152600460205260409020541180156111985750600c5460ff16155b80156111bf575060095473ffffffffffffffffffffffffffffffffffffffff858116911614155b80156111e1575073ffffffffffffffffffffffffffffffffffffffff84163014155b156111ee576111ee611e42565b60006111fb8585856121d0565b905060006112098285612785565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260046020526040812080549293508692909190611243908490612785565b909155505073ffffffffffffffffffffffffffffffffffffffff808616600081815260046020526040908190208054850190555190918816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906112ab9085815260200190565b60405180910390a381156113215730600081815260046020526040908190208054850190555173ffffffffffffffffffffffffffffffffffffffff8816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906113189086815260200190565b60405180910390a35b6001925050505b9392505050565b611337611d2a565b600f5474010000000000000000000000000000000000000000900460ff16156113bc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f746869732069732061206f6e652073686f742066756e6374696f6e0000000000604482015260640161096f565b600f80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790556103e8600a819055600b556040517fa1f3078ed9e1e966576844270dda3bb31267ba7d982fc64933d94552630a436890600090a1565b60007f00000000000000000000000000000000000000000000000000000000000000004614611467576114626122c2565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b611496338261235c565b50565b6114a1611d2a565b73ffffffffffffffffffffffffffffffffffffffff811661151e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6e756c6c20616464726573730000000000000000000000000000000000000000604482015260640161096f565b600e80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b61156d611d2a565b61157760006123ea565b565b6000466005148061146257505062aa36a7461490565b6002805461086490612666565b6115a4611579565b61160a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e6f7420746573746e6574000000000000000000000000000000000000000000604482015260640161096f565b6114963382611dab565b60006113283384846110bb565b4284101561168b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f5045524d49545f444541444c494e455f45585049524544000000000000000000604482015260640161096f565b60006001611697611431565b73ffffffffffffffffffffffffffffffffffffffff8a811660008181526006602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98184015280840194909452938d166060840152608083018c905260a083019390935260c08083018b90528151808403909101815260e0830190915280519201919091207f190100000000000000000000000000000000000000000000000000000000000061010083015261010282019290925261012281019190915261014201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600084529083018083525260ff871690820152606081018590526080810184905260a0016020604051602081039080840390855afa1580156117e9573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81161580159061186457508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b6118ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f494e56414c49445f5349474e4552000000000000000000000000000000000000604482015260640161096f565b73ffffffffffffffffffffffffffffffffffffffff90811660009081526005602090815260408083208a8516808552908352928190208990555188815291928a16917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350505050505050565b336000818152600560209081526040808320600c805473ffffffffffffffffffffffffffffffffffffffff61010091829004811687529285528386207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9081905591549351918252949594909204169183917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259101610fd8565b6119e2611d2a565b73ffffffffffffffffffffffffffffffffffffffff8116611a85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161096f565b611496816123ea565b611a96611d2a565b600f547501000000000000000000000000000000000000000000900460ff1615611b1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f746869732069732061206f6e652073686f742066756e6374696f6e0000000000604482015260640161096f565b600f80547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790556101f4600a819055600b556040517fc8c66e37e8b41bcc2deecfa7487ae0d5ed2fd626c0544a58c33ba95d90a47d4a90600090a1565b611b9a611d2a565b73ffffffffffffffffffffffffffffffffffffffff8116611c17576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6e756c6c20616464726573730000000000000000000000000000000000000000604482015260640161096f565b600f80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b611c66611d2a565b73ffffffffffffffffffffffffffffffffffffffff8116611ce3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6e756c6c20616464726573730000000000000000000000000000000000000000604482015260640161096f565b600d80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60005473ffffffffffffffffffffffffffffffffffffffff163314611577576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161096f565b8060036000828254611dbd91906128c7565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000818152600460209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91015b60405180910390a35050565b60006127106003546002611e3891906126e8565b61146291906126ff565b600c80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905530600090815260046020526040812054611e89906005906126ff565b3060009081526004602052604081205491925090611ea8908390612785565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110611ee257611ee26128da565b73ffffffffffffffffffffffffffffffffffffffff928316602091820292909201810191909152600754604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa158015611f61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f859190612768565b81600181518110611f9857611f986128da565b73ffffffffffffffffffffffffffffffffffffffff92831660209182029290920101526007546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac94790612004908590600090869030904290600401612909565b600060405180830381600087803b15801561201e57600080fd5b505af1158015612032573d6000803e3d6000fd5b50505050600060044761204591906126ff565b60075490915073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308760008061208b60005473ffffffffffffffffffffffffffffffffffffffff1690565b60405160e088901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015612118573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061213d919061273a565b5050600d5460405173ffffffffffffffffffffffffffffffffffffffff90911691504790600081818185875af1925050503d806000811461219a576040519150601f19603f3d011682016040523d82523d6000602084013e61219f565b606091505b5050600c80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555050505050565b6000805473ffffffffffffffffffffffffffffffffffffffff85811691161480612214575060005473ffffffffffffffffffffffffffffffffffffffff8481169116145b80612234575073ffffffffffffffffffffffffffffffffffffffff841630145b1561224157506000611328565b60095473ffffffffffffffffffffffffffffffffffffffff9081169085160361228657612710600a548361227591906126e8565b61227f91906126ff565b9050611328565b60095473ffffffffffffffffffffffffffffffffffffffff908116908416036122ba57612710600b548361227591906126e8565b506000611328565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60016040516122f49190612994565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b73ffffffffffffffffffffffffffffffffffffffff821660009081526004602052604081208054839290612391908490612785565b909155505060038054829003905560405181815260009073ffffffffffffffffffffffffffffffffffffffff8416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001611e18565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208083528351808285015260005b8181101561248c57858101830151858201604001528201612470565b5060006040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461149657600080fd5b6000806040838503121561250057600080fd5b823561250b816124cb565b946020939093013593505050565b60006020828403121561252b57600080fd5b8135611328816124cb565b60008060006060848603121561254b57600080fd5b8335612556816124cb565b92506020840135612566816124cb565b929592945050506040919091013590565b60006020828403121561258957600080fd5b5035919050565b600080600080600080600060e0888a0312156125ab57600080fd5b87356125b6816124cb565b965060208801356125c6816124cb565b95506040880135945060608801359350608088013560ff811681146125ea57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561261a57600080fd5b8235612625816124cb565b91506020830135612635816124cb565b809150509250929050565b60006020828403121561265257600080fd5b813563ffffffff8116811461132857600080fd5b600181811c9082168061267a57607f821691505b6020821081036126b3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082028115828204841417610fe457610fe46126b9565b600082612735577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60008060006060848603121561274f57600080fd5b8351925060208401519150604084015190509250925092565b60006020828403121561277a57600080fd5b8151611328816124cb565b81810381811115610fe457610fe46126b9565b600181815b808511156127f157817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156127d7576127d76126b9565b808516156127e457918102915b93841c939080029061279d565b509250929050565b60008261280857506001610fe4565b8161281557506000610fe4565b816001811461282b576002811461283557612851565b6001915050610fe4565b60ff841115612846576128466126b9565b50506001821b610fe4565b5060208310610133831016604e8410600b8410161715612874575081810a610fe4565b61287e8383612798565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156128b0576128b06126b9565b029392505050565b600061132860ff8416836127f9565b80820180821115610fe457610fe46126b9565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561296657845173ffffffffffffffffffffffffffffffffffffffff1683529383019391830191600101612934565b505073ffffffffffffffffffffffffffffffffffffffff969096166060850152505050608001529392505050565b600080835481600182811c9150808316806129b057607f831692505b602080841082036129e8577f4e487b710000000000000000000000000000000000000000000000000000000086526022600452602486fd5b8180156129fc5760018114612a2f57612a5c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0086168952841515850289019650612a5c565b60008a81526020902060005b86811015612a545781548b820152908501908301612a3b565b505084890196505b50949897505050505050505056fea2646970667358221220b708faeea6e11bb50c1b693886eb76e4cd11a40d5f5cb12277a2bc8c2cabf7cf64736f6c63430008130033

Deployed Bytecode

0x60806040526004361061028f5760003560e01c80637f50ce1711610156578063c473413a116100bf578063f2fde38b11610079578063f98eb6e111610061578063f98eb6e114610802578063fb235f3414610817578063fea9e9421461083757005b8063f2fde38b146107b5578063f887ea40146107d557005b8063d505accf116100a7578063d505accf1461073d578063dd62ed3e1461075d578063eec1c69f1461079557005b8063c473413a14610711578063cffd129c1461072757005b8063a8aa1b3111610110578063b3e5cb45116100f8578063b3e5cb45146106a1578063b880b69a146106b7578063c45a0155146106e457005b8063a8aa1b3114610654578063a9059cbb1461068157005b806392108c861161013e57806392108c861461060a57806395d89b411461061f578063a0712d681461063457005b80637f50ce17146105c75780638da5cb5b146105df57005b80633644e515116101f8578063715018a6116101b257806375f0a8741161019a57806375f0a8741461053b5780637d5ea21b146105685780637ecebe001461059a57005b8063715018a6146104f457806371f7e6541461050957005b806344478425116101e057806344478425146104555780635d098b38146104a757806370a08231146104c757005b80633644e5151461042057806342966c681461043557005b806323b872dd116102495780632ca1b45d116102315780632ca1b45d14610392578063307aebc9146103a7578063313ce567146103da57005b806323b872dd1461033f578063270fd20a1461035f57005b8063095ea7b311610277578063095ea7b3146102cb57806318160ddd146102fb5780631adf3e371461031f57005b806306fdde031461029857806307df7a0d146102c357005b3661029657005b005b3480156102a457600080fd5b506102ad610857565b6040516102ba919061245f565b60405180910390f35b6102966108e5565b3480156102d757600080fd5b506102eb6102e63660046124ed565b610f70565b60405190151581526020016102ba565b34801561030757600080fd5b5061031160035481565b6040519081526020016102ba565b34801561032b57600080fd5b5061029661033a366004612519565b610fea565b34801561034b57600080fd5b506102eb61035a366004612536565b6110bb565b34801561036b57600080fd5b50600f546102eb907501000000000000000000000000000000000000000000900460ff1681565b34801561039e57600080fd5b5061029661132f565b3480156103b357600080fd5b50600c546102eb907501000000000000000000000000000000000000000000900460ff1681565b3480156103e657600080fd5b5061040e7f000000000000000000000000000000000000000000000000000000000000000881565b60405160ff90911681526020016102ba565b34801561042c57600080fd5b50610311611431565b34801561044157600080fd5b50610296610450366004612577565b61148c565b34801561046157600080fd5b50600f546104829073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102ba565b3480156104b357600080fd5b506102966104c2366004612519565b611499565b3480156104d357600080fd5b506103116104e2366004612519565b60046020526000908152604090205481565b34801561050057600080fd5b50610296611565565b34801561051557600080fd5b50600c5461048290610100900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561054757600080fd5b50600e546104829073ffffffffffffffffffffffffffffffffffffffff1681565b34801561057457600080fd5b50600f546102eb9074010000000000000000000000000000000000000000900460ff1681565b3480156105a657600080fd5b506103116105b5366004612519565b60066020526000908152604090205481565b3480156105d357600080fd5b504662aa36a7146102eb565b3480156105eb57600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff16610482565b34801561061657600080fd5b506102eb611579565b34801561062b57600080fd5b506102ad61158f565b34801561064057600080fd5b5061029661064f366004612577565b61159c565b34801561066057600080fd5b506009546104829073ffffffffffffffffffffffffffffffffffffffff1681565b34801561068d57600080fd5b506102eb61069c3660046124ed565b611614565b3480156106ad57600080fd5b50466005146102eb565b3480156106c357600080fd5b50600d546104829073ffffffffffffffffffffffffffffffffffffffff1681565b3480156106f057600080fd5b506008546104829073ffffffffffffffffffffffffffffffffffffffff1681565b34801561071d57600080fd5b50610311600a5481565b34801561073357600080fd5b50610311600b5481565b34801561074957600080fd5b50610296610758366004612590565b611621565b34801561076957600080fd5b50610311610778366004612607565b600560209081526000928352604080842090915290825290205481565b3480156107a157600080fd5b506102eb6107b0366004612640565b611940565b3480156107c157600080fd5b506102966107d0366004612519565b6119da565b3480156107e157600080fd5b506007546104829073ffffffffffffffffffffffffffffffffffffffff1681565b34801561080e57600080fd5b50610296611a8e565b34801561082357600080fd5b50610296610832366004612519565b611b92565b34801561084357600080fd5b50610296610852366004612519565b611c5e565b6001805461086490612666565b80601f016020809104026020016040519081016040528092919081815260200182805461089090612666565b80156108dd5780601f106108b2576101008083540402835291602001916108dd565b820191906000526020600020905b8154815290600101906020018083116108c057829003601f168201915b505050505081565b6108ed611d2a565b600c547501000000000000000000000000000000000000000000900460ff1615610978576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f616c7265616479206c61756e636865640000000000000000000000000000000060448201526064015b60405180910390fd5b600d5473ffffffffffffffffffffffffffffffffffffffff166109f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6e756c6c20616464726573730000000000000000000000000000000000000000604482015260640161096f565b600e5473ffffffffffffffffffffffffffffffffffffffff16610a76576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6e756c6c20616464726573730000000000000000000000000000000000000000604482015260640161096f565b600f5473ffffffffffffffffffffffffffffffffffffffff16610af5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6e756c6c20616464726573730000000000000000000000000000000000000000604482015260640161096f565b600c54610100900473ffffffffffffffffffffffffffffffffffffffff16610b79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6e756c6c20616464726573730000000000000000000000000000000000000000604482015260640161096f565b600c80547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff167501000000000000000000000000000000000000000000179055610be230612710610bd361251c66038d7ea4c680006126e8565b610bdd91906126ff565b611dab565b6007543060008181526004602052604081205473ffffffffffffffffffffffffffffffffffffffff9093169263f305d71992349290919080610c3960005473ffffffffffffffffffffffffffffffffffffffff1690565b60405160e088901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015610cc6573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610ceb919061273a565b5050600854600754604080517fad5c4648000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416945063e6a43905933093169163ad5c46489160048083019260209291908290030181865afa158015610d6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8e9190612768565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401602060405180830381865afa158015610dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e229190612768565b600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600e54610e8b9116612710610e7a61251c82612785565b610bd39066038d7ea4c680006126e8565b66038d7ea4c6800060035414610efd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f6e756d6265727320646f6e277420616464207570000000000000000000000000604482015260640161096f565b610f05611579565b15610f4557610f4533610f397f0000000000000000000000000000000000000000000000000000000000000008600a6128b8565b610bdd906127106126e8565b6040517f0887e4063f397b46bca5f33853dd1a946a3b32547bf9cb3b3063bd9db9d8bdfe90600090a1565b33600081815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610fd89086815260200190565b60405180910390a35060015b92915050565b610ff2611d2a565b73ffffffffffffffffffffffffffffffffffffffff811661106f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6e756c6c20616464726573730000000000000000000000000000000000000000604482015260640161096f565b600c805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b600073ffffffffffffffffffffffffffffffffffffffff841633146111705773ffffffffffffffffffffffffffffffffffffffff841660009081526005602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461116e5761113c8382612785565b73ffffffffffffffffffffffffffffffffffffffff861660009081526005602090815260408083203384529091529020555b505b611178611e24565b306000908152600460205260409020541180156111985750600c5460ff16155b80156111bf575060095473ffffffffffffffffffffffffffffffffffffffff858116911614155b80156111e1575073ffffffffffffffffffffffffffffffffffffffff84163014155b156111ee576111ee611e42565b60006111fb8585856121d0565b905060006112098285612785565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260046020526040812080549293508692909190611243908490612785565b909155505073ffffffffffffffffffffffffffffffffffffffff808616600081815260046020526040908190208054850190555190918816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906112ab9085815260200190565b60405180910390a381156113215730600081815260046020526040908190208054850190555173ffffffffffffffffffffffffffffffffffffffff8816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906113189086815260200190565b60405180910390a35b6001925050505b9392505050565b611337611d2a565b600f5474010000000000000000000000000000000000000000900460ff16156113bc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f746869732069732061206f6e652073686f742066756e6374696f6e0000000000604482015260640161096f565b600f80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790556103e8600a819055600b556040517fa1f3078ed9e1e966576844270dda3bb31267ba7d982fc64933d94552630a436890600090a1565b60007f00000000000000000000000000000000000000000000000000000000000000014614611467576114626122c2565b905090565b507fab6b4b824aa822b6834464df3d1b46af0f3fceae7e2154e8a4c04f60143d5d2990565b611496338261235c565b50565b6114a1611d2a565b73ffffffffffffffffffffffffffffffffffffffff811661151e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6e756c6c20616464726573730000000000000000000000000000000000000000604482015260640161096f565b600e80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b61156d611d2a565b61157760006123ea565b565b6000466005148061146257505062aa36a7461490565b6002805461086490612666565b6115a4611579565b61160a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e6f7420746573746e6574000000000000000000000000000000000000000000604482015260640161096f565b6114963382611dab565b60006113283384846110bb565b4284101561168b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f5045524d49545f444541444c494e455f45585049524544000000000000000000604482015260640161096f565b60006001611697611431565b73ffffffffffffffffffffffffffffffffffffffff8a811660008181526006602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98184015280840194909452938d166060840152608083018c905260a083019390935260c08083018b90528151808403909101815260e0830190915280519201919091207f190100000000000000000000000000000000000000000000000000000000000061010083015261010282019290925261012281019190915261014201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600084529083018083525260ff871690820152606081018590526080810184905260a0016020604051602081039080840390855afa1580156117e9573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81161580159061186457508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b6118ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f494e56414c49445f5349474e4552000000000000000000000000000000000000604482015260640161096f565b73ffffffffffffffffffffffffffffffffffffffff90811660009081526005602090815260408083208a8516808552908352928190208990555188815291928a16917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350505050505050565b336000818152600560209081526040808320600c805473ffffffffffffffffffffffffffffffffffffffff61010091829004811687529285528386207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9081905591549351918252949594909204169183917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259101610fd8565b6119e2611d2a565b73ffffffffffffffffffffffffffffffffffffffff8116611a85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161096f565b611496816123ea565b611a96611d2a565b600f547501000000000000000000000000000000000000000000900460ff1615611b1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f746869732069732061206f6e652073686f742066756e6374696f6e0000000000604482015260640161096f565b600f80547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790556101f4600a819055600b556040517fc8c66e37e8b41bcc2deecfa7487ae0d5ed2fd626c0544a58c33ba95d90a47d4a90600090a1565b611b9a611d2a565b73ffffffffffffffffffffffffffffffffffffffff8116611c17576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6e756c6c20616464726573730000000000000000000000000000000000000000604482015260640161096f565b600f80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b611c66611d2a565b73ffffffffffffffffffffffffffffffffffffffff8116611ce3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6e756c6c20616464726573730000000000000000000000000000000000000000604482015260640161096f565b600d80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60005473ffffffffffffffffffffffffffffffffffffffff163314611577576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161096f565b8060036000828254611dbd91906128c7565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000818152600460209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91015b60405180910390a35050565b60006127106003546002611e3891906126e8565b61146291906126ff565b600c80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905530600090815260046020526040812054611e89906005906126ff565b3060009081526004602052604081205491925090611ea8908390612785565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110611ee257611ee26128da565b73ffffffffffffffffffffffffffffffffffffffff928316602091820292909201810191909152600754604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa158015611f61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f859190612768565b81600181518110611f9857611f986128da565b73ffffffffffffffffffffffffffffffffffffffff92831660209182029290920101526007546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac94790612004908590600090869030904290600401612909565b600060405180830381600087803b15801561201e57600080fd5b505af1158015612032573d6000803e3d6000fd5b50505050600060044761204591906126ff565b60075490915073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308760008061208b60005473ffffffffffffffffffffffffffffffffffffffff1690565b60405160e088901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015612118573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061213d919061273a565b5050600d5460405173ffffffffffffffffffffffffffffffffffffffff90911691504790600081818185875af1925050503d806000811461219a576040519150601f19603f3d011682016040523d82523d6000602084013e61219f565b606091505b5050600c80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555050505050565b6000805473ffffffffffffffffffffffffffffffffffffffff85811691161480612214575060005473ffffffffffffffffffffffffffffffffffffffff8481169116145b80612234575073ffffffffffffffffffffffffffffffffffffffff841630145b1561224157506000611328565b60095473ffffffffffffffffffffffffffffffffffffffff9081169085160361228657612710600a548361227591906126e8565b61227f91906126ff565b9050611328565b60095473ffffffffffffffffffffffffffffffffffffffff908116908416036122ba57612710600b548361227591906126e8565b506000611328565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60016040516122f49190612994565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b73ffffffffffffffffffffffffffffffffffffffff821660009081526004602052604081208054839290612391908490612785565b909155505060038054829003905560405181815260009073ffffffffffffffffffffffffffffffffffffffff8416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001611e18565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208083528351808285015260005b8181101561248c57858101830151858201604001528201612470565b5060006040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461149657600080fd5b6000806040838503121561250057600080fd5b823561250b816124cb565b946020939093013593505050565b60006020828403121561252b57600080fd5b8135611328816124cb565b60008060006060848603121561254b57600080fd5b8335612556816124cb565b92506020840135612566816124cb565b929592945050506040919091013590565b60006020828403121561258957600080fd5b5035919050565b600080600080600080600060e0888a0312156125ab57600080fd5b87356125b6816124cb565b965060208801356125c6816124cb565b95506040880135945060608801359350608088013560ff811681146125ea57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561261a57600080fd5b8235612625816124cb565b91506020830135612635816124cb565b809150509250929050565b60006020828403121561265257600080fd5b813563ffffffff8116811461132857600080fd5b600181811c9082168061267a57607f821691505b6020821081036126b3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082028115828204841417610fe457610fe46126b9565b600082612735577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60008060006060848603121561274f57600080fd5b8351925060208401519150604084015190509250925092565b60006020828403121561277a57600080fd5b8151611328816124cb565b81810381811115610fe457610fe46126b9565b600181815b808511156127f157817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156127d7576127d76126b9565b808516156127e457918102915b93841c939080029061279d565b509250929050565b60008261280857506001610fe4565b8161281557506000610fe4565b816001811461282b576002811461283557612851565b6001915050610fe4565b60ff841115612846576128466126b9565b50506001821b610fe4565b5060208310610133831016604e8410600b8410161715612874575081810a610fe4565b61287e8383612798565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156128b0576128b06126b9565b029392505050565b600061132860ff8416836127f9565b80820180821115610fe457610fe46126b9565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561296657845173ffffffffffffffffffffffffffffffffffffffff1683529383019391830191600101612934565b505073ffffffffffffffffffffffffffffffffffffffff969096166060850152505050608001529392505050565b600080835481600182811c9150808316806129b057607f831692505b602080841082036129e8577f4e487b710000000000000000000000000000000000000000000000000000000086526022600452602486fd5b8180156129fc5760018114612a2f57612a5c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0086168952841515850289019650612a5c565b60008a81526020902060005b86811015612a545781548b820152908501908301612a3b565b505084890196505b50949897505050505050505056fea2646970667358221220b708faeea6e11bb50c1b693886eb76e4cd11a40d5f5cb12277a2bc8c2cabf7cf64736f6c63430008130033

Deployed Bytecode Sourcemap

18713:10151:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1285:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23231:1104;;;:::i;2762:217::-;;;;;;;;;;-1:-1:-1;2762:217:0;;;;;:::i;:::-;;:::i;:::-;;;1270:14:1;;1263:22;1245:41;;1233:2;1218:18;2762:217:0;1105:187:1;1568:26:0;;;;;;;;;;;;;;;;;;;1443:25:1;;;1431:2;1416:18;1568:26:0;1297:177:1;22590:147:0;;;;;;;;;;-1:-1:-1;22590:147:0;;;;;:::i;:::-;;:::i;27385:1476::-;;;;;;;;;;-1:-1:-1;27385:1476:0;;;;;:::i;:::-;;:::i;19633:26::-;;;;;;;;;;-1:-1:-1;19633:26:0;;;;;;;;;;;21548:233;;;;;;;;;;;;;:::i;19468:22::-;;;;;;;;;;-1:-1:-1;19468:22:0;;;;;;;;;;;1341:31;;;;;;;;;;;;;;;;;;2364:4:1;2352:17;;;2334:36;;2322:2;2307:18;1341:31:0;2192:184:1;5722:179:0;;;;;;;;;;;;;:::i;20748:80::-;;;;;;;;;;-1:-1:-1;20748:80:0;;;;;:::i;:::-;;:::i;19566:28::-;;;;;;;;;;-1:-1:-1;19566:28:0;;;;;;;;;;;2924:42:1;2912:55;;;2894:74;;2882:2;2867:18;19566:28:0;2748:226:1;22899:160:0;;;;;;;;;;-1:-1:-1;22899:160:0;;;;;:::i;:::-;;:::i;1603:44::-;;;;;;;;;;-1:-1:-1;1603:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;9861:103;;;;;;;;;;;;;:::i;19428:31::-;;;;;;;;;;-1:-1:-1;19428:31:0;;;;;;;;;;;19529:30;;;;;;;;;;-1:-1:-1;19529:30:0;;;;;;;;19603:23;;;;;;;;;;-1:-1:-1;19603:23:0;;;;;;;;;;;2029:41;;;;;;;;;;-1:-1:-1;2029:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;21334:99;;;;;;;;;;-1:-1:-1;21400:13:0;21417:8;21400:25;21334:99;;9213:87;;;;;;;;;;-1:-1:-1;9259:7:0;9286:6;;;9213:87;;21441:99;;;;;;;;;;;;;:::i;1312:20::-;;;;;;;;;;;;;:::i;21001:101::-;;;;;;;;;;-1:-1:-1;21001:101:0;;;;;:::i;:::-;;:::i;18841:26::-;;;;;;;;;;-1:-1:-1;18841:26:0;;;;;;;;26805:136;;;;;;;;;;-1:-1:-1;26805:136:0;;;;;:::i;:::-;;:::i;21235:91::-;;;;;;;;;;-1:-1:-1;21300:13:0;21317:1;21300:18;21235:91;;19499:23;;;;;;;;;;-1:-1:-1;19499:23:0;;;;;;;;18802:32;;;;;;;;;;-1:-1:-1;18802:32:0;;;;;;;;19216:27;;;;;;;;;;;;;;;;19250:28;;;;;;;;;;;;;;;;4187:1527;;;;;;;;;;-1:-1:-1;4187:1527:0;;;;;:::i;:::-;;:::i;1656:64::-;;;;;;;;;;-1:-1:-1;1656:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;22316:266;;;;;;;;;;-1:-1:-1;22316:266:0;;;;;:::i;:::-;;:::i;10119:201::-;;;;;;;;;;-1:-1:-1;10119:201:0;;;;;:::i;:::-;;:::i;18763:32::-;;;;;;;;;;-1:-1:-1;18763:32:0;;;;;;;;21789:241;;;;;;;;;;;;;:::i;23067:156::-;;;;;;;;;;-1:-1:-1;23067:156:0;;;;;:::i;:::-;;:::i;22745:146::-;;;;;;;;;;-1:-1:-1;22745:146:0;;;;;:::i;:::-;;:::i;1285:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23231:1104::-;9099:13;:11;:13::i;:::-;23303:10:::1;::::0;;;::::1;;;23302:11;23294:40;;;::::0;::::1;::::0;;5898:2:1;23294:40:0::1;::::0;::::1;5880:21:1::0;5937:2;5917:18;;;5910:30;5976:18;5956;;;5949:46;6012:18;;23294:40:0::1;;;;;;;;;23353:8;::::0;:22:::1;:8;23345:47;;;::::0;::::1;::::0;;6243:2:1;23345:47:0::1;::::0;::::1;6225:21:1::0;6282:2;6262:18;;;6255:30;6321:14;6301:18;;;6294:42;6353:18;;23345:47:0::1;6041:336:1::0;23345:47:0::1;23411:15;::::0;:29:::1;:15;23403:54;;;::::0;::::1;::::0;;6243:2:1;23403:54:0::1;::::0;::::1;6225:21:1::0;6282:2;6262:18;;;6255:30;6321:14;6301:18;;;6294:42;6353:18;;23403:54:0::1;6041:336:1::0;23403:54:0::1;23476:13;::::0;:27:::1;:13;23468:52;;;::::0;::::1;::::0;;6243:2:1;23468:52:0::1;::::0;::::1;6225:21:1::0;6282:2;6262:18;;;6255:30;6321:14;6301:18;;;6294:42;6353:18;;23468:52:0::1;6041:336:1::0;23468:52:0::1;23539:16;::::0;::::1;::::0;::::1;:30;:16;23531:55;;;::::0;::::1;::::0;;6243:2:1;23531:55:0::1;::::0;::::1;6225:21:1::0;6282:2;6262:18;;;6255:30;6321:14;6301:18;;;6294:42;6353:18;;23531:55:0::1;6041:336:1::0;23531:55:0::1;23597:10;:17:::0;;;::::1;::::0;::::1;::::0;;23627:54:::1;23641:4;23674:6;23648:23;19026:4;18915:18;23648:23;:::i;:::-;:32;;;;:::i;:::-;23627:5;:54::i;:::-;23694:6;::::0;23759:4:::1;23694:6;23779:24:::0;;;:9:::1;:24;::::0;;;;;23694:6:::1;::::0;;::::1;::::0;:22:::1;::::0;23725:9:::1;::::0;23759:4;;23779:24;23694:6;23850:7:::1;9259::::0;9286:6;;;;9213:87;23850:7:::1;23694:194;::::0;::::1;::::0;;;;;;;7336:42:1;7405:15;;;23694:194:0::1;::::0;::::1;7387:34:1::0;7437:18;;;7430:34;;;;7480:18;;;7473:34;;;;7523:18;;;7516:34;7587:15;;;7566:19;;;7559:44;23872:15:0::1;7619:19:1::0;;;7612:35;7298:19;;23694:194:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;23923:7:0::1;::::0;23954:6:::1;::::0;:13:::1;::::0;;;;;;;23923:7:::1;::::0;;::::1;::::0;-1:-1:-1;23923:15:0::1;::::0;23947:4:::1;::::0;23954:6:::1;::::0;:11:::1;::::0;:13:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:6;:13:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23923:45;::::0;;::::1;::::0;;;;;;8409:42:1;8478:15;;;23923:45:0::1;::::0;::::1;8460:34:1::0;8530:15;;8510:18;;;8503:43;8372:18;;23923:45:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23901:4;:68:::0;;;::::1;;::::0;;::::1;;::::0;;23988:15:::1;::::0;23982:63:::1;::::0;23988:15:::1;24038:6;19133:15;19026:4;24038:6:::0;19133:15:::1;:::i;:::-;24005:30;::::0;18915:18:::1;24005:30;:::i;23982:63::-;18915:18;24066:11;;:29;24058:62;;;::::0;::::1;::::0;;8892:2:1;24058:62:0::1;::::0;::::1;8874:21:1::0;8931:2;8911:18;;;8904:30;8970:22;8950:18;;;8943:50;9010:18;;24058:62:0::1;8690:344:1::0;24058:62:0::1;24199:11;:9;:11::i;:::-;24195:93;;;24227:49;24241:10;24263:12;24267:8;24263:2;:12;:::i;:::-;24254:21;::::0;:6:::1;:21;:::i;24227:49::-;24305:22;::::0;::::1;::::0;;;::::1;23231:1104::o:0;2762:217::-;2863:10;2836:4;2853:21;;;:9;:21;;;;;;;;;:30;;;;;;;;;;:39;;;2910:37;2836:4;;2853:30;;2910:37;;;;2886:6;1443:25:1;;1431:2;1416:18;;1297:177;2910:37:0;;;;;;;;-1:-1:-1;2967:4:0;2762:217;;;;;:::o;22590:147::-;9099:13;:11;:13::i;:::-;22666:15:::1;::::0;::::1;22658:40;;;::::0;::::1;::::0;;6243:2:1;22658:40:0::1;::::0;::::1;6225:21:1::0;6282:2;6262:18;;;6255:30;6321:14;6301:18;;;6294:42;6353:18;;22658:40:0::1;6041:336:1::0;22658:40:0::1;22709:16;:20:::0;;::::1;::::0;;::::1;;;::::0;;;::::1;::::0;;;::::1;::::0;;22590:147::o;27385:1476::-;27505:4;27526:18;;;27534:10;27526:18;27522:272;;27625:15;;;27610:12;27625:15;;;:9;:15;;;;;;;;27641:10;27625:27;;;;;;;;27720:14;27709:25;;27705:77;;27766:16;27776:6;27766:7;:16;:::i;:::-;27736:15;;;;;;;:9;:15;;;;;;;;27752:10;27736:27;;;;;;;:46;27705:77;27546:248;27522:272;28015:18;:16;:18::i;:::-;28006:4;27988:24;;;;:9;:24;;;;;;:45;:73;;;;-1:-1:-1;28038:23:0;;;;28037:24;27988:73;:98;;;;-1:-1:-1;28081:4:0;;;28065:21;;;28081:4;;28065:21;;27988:98;:123;;;;-1:-1:-1;28090:21:0;;;28106:4;28090:21;;27988:123;27984:176;;;28128:20;:18;:20::i;:::-;28172:8;28183:25;28191:4;28197:2;28201:6;28183:7;:25::i;:::-;28172:36;-1:-1:-1;28219:19:0;28241:12;28172:36;28241:6;:12;:::i;:::-;28266:15;;;;;;;:9;:15;;;;;:25;;28219:34;;-1:-1:-1;28285:6:0;;28266:15;;;:25;;28285:6;;28266:25;:::i;:::-;;;;-1:-1:-1;;28439:13:0;;;;;;;;:9;:13;;;;;;;:31;;;;;;28499:34;28439:13;;28499:34;;;;;;;28456:14;1443:25:1;;1431:2;1416:18;;1297:177;28499:34:0;;;;;;;;28550:7;;28546:284;;28668:4;28650:24;;;;:9;:24;;;;;;;:31;;;;;;28784:34;28650:24;28784:34;;;;;;;28678:3;1443:25:1;;1431:2;1416:18;;1297:177;28784:34:0;;;;;;;;28546:284;28849:4;28842:11;;;;27385:1476;;;;;;:::o;21548:233::-;9099:13;:11;:13::i;:::-;21614:11:::1;::::0;;;::::1;;;21613:12;21605:52;;;::::0;::::1;::::0;;10744:2:1;21605:52:0::1;::::0;::::1;10726:21:1::0;10783:2;10763:18;;;10756:30;10822:29;10802:18;;;10795:57;10869:18;;21605:52:0::1;10542:351:1::0;21605:52:0::1;21668:11;:18:::0;;;::::1;::::0;::::1;::::0;;21709:4:::1;21697:9;:16:::0;;;21724:10:::1;:17:::0;21757:16:::1;::::0;::::1;::::0;21668:18;;21757:16:::1;21548:233::o:0;5722:179::-;5779:7;5823:16;5806:13;:33;:87;;5869:24;:22;:24::i;:::-;5799:94;;5722:179;:::o;5806:87::-;-1:-1:-1;5842:24:0;;5722:179::o;20748:80::-;20795:25;20801:10;20813:6;20795:5;:25::i;:::-;20748:80;:::o;22899:160::-;9099:13;:11;:13::i;:::-;22979:20:::1;::::0;::::1;22971:45;;;::::0;::::1;::::0;;6243:2:1;22971:45:0::1;::::0;::::1;6225:21:1::0;6282:2;6262:18;;;6255:30;6321:14;6301:18;;;6294:42;6353:18;;22971:45:0::1;6041:336:1::0;22971:45:0::1;23027:15;:24:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;22899:160::o;9861:103::-;9099:13;:11;:13::i;:::-;9926:30:::1;9953:1;9926:18;:30::i;:::-;9861:103::o:0;21441:99::-;21483:4;21300:13;21317:1;21300:18;21507:25;;;-1:-1:-1;;21417:8:0;21400:13;:25;;5722:179::o;1312:20::-;;;;;;;:::i;21001:101::-;20618:11;:9;:11::i;:::-;20610:35;;;;;;;11100:2:1;20610:35:0;;;11082:21:1;11139:2;11119:18;;;11112:30;11178:13;11158:18;;;11151:41;11209:18;;20610:35:0;10898:335:1;20610:35:0;21060:34:::1;21074:10;21087:6;21060:5;:34::i;26805:136::-:0;26873:4;26897:36;26910:10;26922:2;26926:6;26897:12;:36::i;4187:1527::-;4415:15;4403:8;:27;;4395:63;;;;;;;11440:2:1;4395:63:0;;;11422:21:1;11479:2;11459:18;;;11452:30;11518:25;11498:18;;;11491:53;11561:18;;4395:63:0;11238:347:1;4395:63:0;4628:24;4655:827;4795:18;:16;:18::i;:::-;5249:13;;;;;;;;:6;:13;;;;;;;;;:15;;;;;;;;4880:458;;4925:167;4880:458;;;11877:25:1;11979:18;;;11972:43;;;;12051:15;;;12031:18;;;12024:43;12083:18;;;12076:34;;;12126:19;;;12119:35;;;;12170:19;;;;12163:35;;;4880:458:0;;;;;;;;;;11849:19:1;;;4880:458:0;;;4840:525;;;;;;;;12479:66:1;4715:673:0;;;12467:79:1;12562:11;;;12555:27;;;;12598:12;;;12591:28;;;;12635:12;;4715:673:0;;;;;;;;;;;;;4683:724;;4715:673;4683:724;;;;4655:827;;;;;;;;;12885:25:1;12958:4;12946:17;;12926:18;;;12919:45;12980:18;;;12973:34;;;13023:18;;;13016:34;;;12857:19;;4655:827:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4655:827:0;;;;;;-1:-1:-1;;5507:30:0;;;;;;;:59;;;5561:5;5541:25;;:16;:25;;;5507:59;5499:86;;;;;;;13263:2:1;5499:86:0;;;13245:21:1;13302:2;13282:18;;;13275:30;13341:16;13321:18;;;13314:44;13375:18;;5499:86:0;13061:338:1;5499:86:0;5602:27;;;;;;;;:9;:27;;;;;;;;:36;;;;;;;;;;;;;:44;;;5675:31;1443:25:1;;;5602:36:0;;5675:31;;;;;1416:18:1;5675:31:0;;;;;;;4187:1527;;;;;;;:::o;22316:266::-;8002:10;22376:4;22434:16;;;:9;:16;;;;;;;;22451;;;22434;22451;;;;;;;22434:34;;;;;;;;22471:14;22434:51;;;;22517:16;;22501:49;;1443:25:1;;;22376:4:0;;8002:10;22517:16;;;;;8002:10;;22501:49;;1416:18:1;22501:49:0;1297:177:1;10119:201:0;9099:13;:11;:13::i;:::-;10208:22:::1;::::0;::::1;10200:73;;;::::0;::::1;::::0;;13606:2:1;10200:73:0::1;::::0;::::1;13588:21:1::0;13645:2;13625:18;;;13618:30;13684:34;13664:18;;;13657:62;13755:8;13735:18;;;13728:36;13781:19;;10200:73:0::1;13404:402:1::0;10200:73:0::1;10284:28;10303:8;10284:18;:28::i;21789:241::-:0;9099:13;:11;:13::i;:::-;21856:14:::1;::::0;;;::::1;;;21855:15;21847:55;;;::::0;::::1;::::0;;10744:2:1;21847:55:0::1;::::0;::::1;10726:21:1::0;10783:2;10763:18;;;10756:30;10822:29;10802:18;;;10795:57;10869:18;;21847:55:0::1;10542:351:1::0;21847:55:0::1;21913:14;:21:::0;;;::::1;::::0;::::1;::::0;;21957:3:::1;21945:9;:15:::0;;;21971:10:::1;:16:::0;22003:19:::1;::::0;::::1;::::0;21913:21;;22003:19:::1;21789:241::o:0;23067:156::-;9099:13;:11;:13::i;:::-;23145:20:::1;::::0;::::1;23137:45;;;::::0;::::1;::::0;;6243:2:1;23137:45:0::1;::::0;::::1;6225:21:1::0;6282:2;6262:18;;;6255:30;6321:14;6301:18;;;6294:42;6353:18;;23137:45:0::1;6041:336:1::0;23137:45:0::1;23193:13;:22:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;23067:156::o;22745:146::-;9099:13;:11;:13::i;:::-;22818:20:::1;::::0;::::1;22810:45;;;::::0;::::1;::::0;;6243:2:1;22810:45:0::1;::::0;::::1;6225:21:1::0;6282:2;6262:18;;;6255:30;6321:14;6301:18;;;6294:42;6353:18;;22810:45:0::1;6041:336:1::0;22810:45:0::1;22866:8;:17:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;22745:146::o;9378:132::-;9259:7;9286:6;9442:23;9286:6;8002:10;9442:23;9434:68;;;;;;;14013:2:1;9434:68:0;;;13995:21:1;;;14032:18;;;14025:30;14091:34;14071:18;;;14064:62;14143:18;;9434:68:0;13811:356:1;6566:335:0;6652:6;6637:11;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;;6809:13:0;;;;;;;:9;:13;;;;;;;;:23;;;;;;6861:32;1443:25:1;;;6861:32:0;;1416:18:1;6861:32:0;;;;;;;;6566:335;;:::o;21110:117::-;21161:4;21205:5;21186:11;;21200:1;21186:15;;;;:::i;:::-;21185:25;;;;:::i;25421:1155::-;20476:23;:30;;;;20502:4;20476:30;;;25843:4:::1;20476:23:::0;25825:24;;;:9:::1;:24;::::0;;;;;:28:::1;::::0;25852:1:::1;::::0;25825:28:::1;:::i;:::-;25902:4;25864:17;25884:24:::0;;;:9:::1;:24;::::0;;;;;25805:48;;-1:-1:-1;25864:17:0;25884:39:::1;::::0;25805:48;;25884:39:::1;:::i;:::-;25977:16;::::0;;25991:1:::1;25977:16:::0;;;;;::::1;::::0;;25864:59;;-1:-1:-1;25953:21:0::1;::::0;25977:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;25977:16:0::1;25953:40;;26022:4;26004;26009:1;26004:7;;;;;;;;:::i;:::-;:23;::::0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;26048:6:::1;::::0;:13:::1;::::0;;;;;;;:6;;;::::1;::::0;:11:::1;::::0;:13:::1;::::0;;::::1;::::0;26004:7;;26048:13;;;;;:6;:13:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26038:4;26043:1;26038:7;;;;;;;;:::i;:::-;:23;::::0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;26072:6:::1;::::0;:188:::1;::::0;;;;:6;::::1;::::0;:57:::1;::::0;:188:::1;::::0;26144:12;;26072:6:::1;::::0;26187:4;;26214::::1;::::0;26234:15:::1;::::0;26072:188:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;26273:13;26313:1;26289:21;:25;;;;:::i;:::-;26327:6;::::0;26273:41;;-1:-1:-1;26327:6:0::1;;:22;26273:41:::0;26391:4:::1;26411:12:::0;26327:6:::1;::::0;26470:7:::1;9259::::0;9286:6;;;;9213:87;26470:7:::1;26327:181;::::0;::::1;::::0;;;;;;;7336:42:1;7405:15;;;26327:181:0::1;::::0;::::1;7387:34:1::0;7437:18;;;7430:34;;;;7480:18;;;7473:34;;;;7523:18;;;7516:34;7587:15;;;7566:19;;;7559:44;26492:15:0::1;7619:19:1::0;;;7612:35;7298:19;;26327:181:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;26521:8:0::1;::::0;:47:::1;::::0;:8:::1;::::0;;::::1;::::0;-1:-1:-1;26542:21:0::1;::::0;26521:47:::1;::::0;;;26542:21;26521:8;:47:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;20529:23:0;:31;;;;;;-1:-1:-1;;;;;25421:1155:0:o;24606:735::-;24685:4;9286:6;;;24706:15;;;9286:6;;24706:15;;:32;;-1:-1:-1;9259:7:0;9286:6;;24725:13;;;9286:6;;24725:13;24706:32;:57;;;-1:-1:-1;24742:21:0;;;24758:4;24742:21;24706:57;24702:632;;;-1:-1:-1;24923:1:0;24916:8;;24702:632;24962:4;;;;;;24946:21;;;;24942:392;;25063:6;25051:9;;25042:6;:18;;;;:::i;:::-;:27;;;;:::i;:::-;25035:34;;;;24942:392;25105:4;;;;;;25091:19;;;;25087:247;;25210:6;25197:10;;25188:6;:19;;;;:::i;25087:247::-;-1:-1:-1;25321:1:0;25314:8;;5909:457;5974:7;6075:95;6209:4;6193:22;;;;;;:::i;:::-;;;;;;;;;;6042:301;;;17562:25:1;;;;17603:18;;17596:34;;;;6238:14:0;17646:18:1;;;17639:34;6275:13:0;17689:18:1;;;17682:34;6319:4:0;17732:19:1;;;17725:84;17534:19;;6042:301:0;;;;;;;;;;;;6014:344;;;;;;5994:364;;5909:457;:::o;6909:338::-;6982:15;;;;;;;:9;:15;;;;;:25;;7001:6;;6982:15;:25;;7001:6;;6982:25;:::i;:::-;;;;-1:-1:-1;;7155:11:0;:21;;;;;;;7205:34;;1443:25:1;;;-1:-1:-1;;7205:34:0;;;;;;1431:2:1;1416:18;7205:34:0;1297:177:1;10480:191:0;10554:16;10573:6;;;10590:17;;;;;;;;;;10623:40;;10573:6;;;;;;;10623:40;;10554:16;10623:40;10543:128;10480:191;:::o;14:607: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;612:2;542:66;537:2;529:6;525:15;521:88;510:9;506:104;502:113;494:121;;;;14:607;;;;:::o;626:154::-;712:42;705:5;701:54;694:5;691:65;681:93;;770:1;767;760:12;785:315;853:6;861;914:2;902:9;893:7;889:23;885:32;882:52;;;930:1;927;920:12;882:52;969:9;956:23;988:31;1013:5;988:31;:::i;:::-;1038:5;1090:2;1075:18;;;;1062:32;;-1:-1:-1;;;785:315:1:o;1479:247::-;1538:6;1591:2;1579:9;1570:7;1566:23;1562:32;1559:52;;;1607:1;1604;1597:12;1559:52;1646:9;1633:23;1665:31;1690:5;1665:31;:::i;1731:456::-;1808:6;1816;1824;1877:2;1865:9;1856:7;1852:23;1848:32;1845:52;;;1893:1;1890;1883:12;1845:52;1932:9;1919:23;1951:31;1976:5;1951:31;:::i;:::-;2001:5;-1:-1:-1;2058:2:1;2043:18;;2030:32;2071:33;2030:32;2071:33;:::i;:::-;1731:456;;2123:7;;-1:-1:-1;;;2177:2:1;2162:18;;;;2149:32;;1731:456::o;2563:180::-;2622:6;2675:2;2663:9;2654:7;2650:23;2646:32;2643:52;;;2691:1;2688;2681:12;2643:52;-1:-1:-1;2714:23:1;;2563:180;-1:-1:-1;2563:180:1:o;3488:829::-;3599:6;3607;3615;3623;3631;3639;3647;3700:3;3688:9;3679:7;3675:23;3671:33;3668:53;;;3717:1;3714;3707:12;3668:53;3756:9;3743:23;3775:31;3800:5;3775:31;:::i;:::-;3825:5;-1:-1:-1;3882:2:1;3867:18;;3854:32;3895:33;3854:32;3895:33;:::i;:::-;3947:7;-1:-1:-1;4001:2:1;3986:18;;3973:32;;-1:-1:-1;4052:2:1;4037:18;;4024:32;;-1:-1:-1;4108:3:1;4093:19;;4080:33;4157:4;4144:18;;4132:31;;4122:59;;4177:1;4174;4167:12;4122:59;3488:829;;;;-1:-1:-1;3488:829:1;;;;4200:7;4254:3;4239:19;;4226:33;;-1:-1:-1;4306:3:1;4291:19;;;4278:33;;3488:829;-1:-1:-1;;3488:829:1:o;4322:388::-;4390:6;4398;4451:2;4439:9;4430:7;4426:23;4422:32;4419:52;;;4467:1;4464;4457:12;4419:52;4506:9;4493:23;4525:31;4550:5;4525:31;:::i;:::-;4575:5;-1:-1:-1;4632:2:1;4617:18;;4604:32;4645:33;4604:32;4645:33;:::i;:::-;4697:7;4687:17;;;4322:388;;;;;:::o;4715:276::-;4773:6;4826:2;4814:9;4805:7;4801:23;4797:32;4794:52;;;4842:1;4839;4832:12;4794:52;4881:9;4868:23;4931:10;4924:5;4920:22;4913:5;4910:33;4900:61;;4957:1;4954;4947:12;5254:437;5333:1;5329:12;;;;5376;;;5397:61;;5451:4;5443:6;5439:17;5429:27;;5397:61;5504:2;5496:6;5493:14;5473:18;5470:38;5467:218;;5541:77;5538:1;5531:88;5642:4;5639:1;5632:15;5670:4;5667:1;5660:15;5467:218;;5254:437;;;:::o;6382:184::-;6434:77;6431:1;6424:88;6531:4;6528:1;6521:15;6555:4;6552:1;6545:15;6571:168;6644:9;;;6675;;6692:15;;;6686:22;;6672:37;6662:71;;6713:18;;:::i;6744:274::-;6784:1;6810;6800:189;;6845:77;6842:1;6835:88;6946:4;6943:1;6936:15;6974:4;6971:1;6964:15;6800:189;-1:-1:-1;7003:9:1;;6744:274::o;7658:306::-;7746:6;7754;7762;7815:2;7803:9;7794:7;7790:23;7786:32;7783:52;;;7831:1;7828;7821:12;7783:52;7860:9;7854:16;7844:26;;7910:2;7899:9;7895:18;7889:25;7879:35;;7954:2;7943:9;7939:18;7933:25;7923:35;;7658:306;;;;;:::o;7969:251::-;8039:6;8092:2;8080:9;8071:7;8067:23;8063:32;8060:52;;;8108:1;8105;8098:12;8060:52;8140:9;8134:16;8159:31;8184:5;8159:31;:::i;8557:128::-;8624:9;;;8645:11;;;8642:37;;;8659:18;;:::i;9039:482::-;9128:1;9171:5;9128:1;9185:330;9206:7;9196:8;9193:21;9185:330;;;9325:4;9257:66;9253:77;9247:4;9244:87;9241:113;;;9334:18;;:::i;:::-;9384:7;9374:8;9370:22;9367:55;;;9404:16;;;;9367:55;9483:22;;;;9443:15;;;;9185:330;;;9189:3;9039:482;;;;;:::o;9526:866::-;9575:5;9605:8;9595:80;;-1:-1:-1;9646:1:1;9660:5;;9595:80;9694:4;9684:76;;-1:-1:-1;9731:1:1;9745:5;;9684:76;9776:4;9794:1;9789:59;;;;9862:1;9857:130;;;;9769:218;;9789:59;9819:1;9810:10;;9833:5;;;9857:130;9894:3;9884:8;9881:17;9878:43;;;9901:18;;:::i;:::-;-1:-1:-1;;9957:1:1;9943:16;;9972:5;;9769:218;;10071:2;10061:8;10058:16;10052:3;10046:4;10043:13;10039:36;10033:2;10023:8;10020:16;10015:2;10009:4;10006:12;10002:35;9999:77;9996:159;;;-1:-1:-1;10108:19:1;;;10140:5;;9996:159;10187:34;10212:8;10206:4;10187:34;:::i;:::-;10317:6;10249:66;10245:79;10236:7;10233:92;10230:118;;;10328:18;;:::i;:::-;10366:20;;9526:866;-1:-1:-1;;;9526:866:1:o;10397:140::-;10455:5;10484:47;10525:4;10515:8;10511:19;10505:4;10484:47;:::i;14172:125::-;14237:9;;;14258:10;;;14255:36;;;14271:18;;:::i;14491:184::-;14543:77;14540:1;14533:88;14640:4;14637:1;14630:15;14664:4;14661:1;14654:15;14680:1026;14942:4;14990:3;14979:9;14975:19;15021:6;15010:9;15003:25;15047:2;15085:6;15080:2;15069:9;15065:18;15058:34;15128:3;15123:2;15112:9;15108:18;15101:31;15152:6;15187;15181:13;15218:6;15210;15203:22;15256:3;15245:9;15241:19;15234:26;;15295:2;15287:6;15283:15;15269:29;;15316:1;15326:218;15340:6;15337:1;15334:13;15326:218;;;15405:13;;15420:42;15401:62;15389:75;;15519:15;;;;15484:12;;;;15362:1;15355:9;15326:218;;;-1:-1:-1;;15612:42:1;15600:55;;;;15595:2;15580:18;;15573:83;-1:-1:-1;;;15687:3:1;15672:19;15665:35;15561:3;14680:1026;-1:-1:-1;;;14680:1026:1:o;16050:1248::-;16180:3;16209:1;16242:6;16236:13;16272:3;16294:1;16322:9;16318:2;16314:18;16304:28;;16382:2;16371:9;16367:18;16404;16394:61;;16448:4;16440:6;16436:17;16426:27;;16394:61;16474:2;16522;16514:6;16511:14;16491:18;16488:38;16485:222;;16561:77;16556:3;16549:90;16662:4;16659:1;16652:15;16692:4;16687:3;16680:17;16485:222;16723:18;16750:191;;;;16955:1;16950:323;;;;16716:557;;16750:191;16798:66;16787:9;16783:82;16778:3;16771:95;16921:6;16914:14;16907:22;16899:6;16895:35;16890:3;16886:45;16879:52;;16750:191;;16950:323;15997:1;15990:14;;;16034:4;16021:18;;17048:1;17062:165;17076:6;17073:1;17070:13;17062:165;;;17154:14;;17141:11;;;17134:35;17197:16;;;;17091:10;;17062:165;;;17066:3;;17256:6;17251:3;17247:16;17240:23;;16716:557;-1:-1:-1;17289:3:1;;16050:1248;-1:-1:-1;;;;;;;;16050:1248:1:o

Swarm Source

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