ETH Price: $2,967.75 (-0.75%)
Gas: 6 Gwei

Token

TAZ (TAZ)
 

Overview

Max Total Supply

100,000,000 TAZ

Holders

87

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
1,331,198.936174648 TAZ

Value
$0.00
0xec0b92f0f6ef0a9f16d0ffb0fbf19ae8701d4251
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:
TAZ

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-10-16
*/

// SPDX-License-Identifier: MIT

/** 
    ☀️ Website:    https://www.tazcoin.vip
    🌱 Twitter:    https://twitter.com/tazcoin
    🐷 Telegram:   https://t.me/taz_portal
*/

pragma solidity 0.8.19;

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

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

contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

interface IERC20 {
    function totalSupply() external view returns (uint256);

    function balanceOf(address account) external view returns (uint256);

    function transfer(
        address recipient,
        uint256 amount
    ) external returns (bool);

    function allowance(
        address owner,
        address spender
    ) external view returns (uint256);

    function approve(address spender, uint256 amount) external returns (bool);

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

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

    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function decimals() external view returns (uint8);
}

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

    function decimals() public view virtual override returns (uint8) {
        return 9;
    }

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

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

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

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(
            currentAllowance >= amount,
            "ERC20: transfer amount exceeds allowance"
        );
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

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

    function decreaseAllowance(
        address spender,
        uint256 subtractedValue
    ) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(
            currentAllowance >= subtractedValue,
            "ERC20: decreased allowance below zero"
        );
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(
            senderBalance >= amount,
            "ERC20: transfer amount exceeds balance"
        );
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

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

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

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

library SafeMath {
    function tryAdd(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    function trySub(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    function tryMul(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    function tryDiv(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    function tryMod(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

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

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

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

interface IUniswapV2Factory {
    event PairCreated(
        address indexed token0,
        address indexed token1,
        address pair,
        uint256
    );

    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(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

    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,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 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 (uint256);

    function balanceOf(address owner) external view returns (uint256);

    function allowance(
        address owner,
        address spender
    ) external view returns (uint256);

    function approve(address spender, uint256 value) external returns (bool);

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 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 (uint256);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    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 (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function mint(address to) external returns (uint256 liquidity);

    function burn(
        address to
    ) external returns (uint256 amount0, uint256 amount1);

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

interface IUniswapV2Router02 {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB, uint256 liquidity);

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (uint256 amountToken, uint256 amountETH, uint256 liquidity);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}

contract TAZ is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;
    
    address public constant deadAddress = address(0xdead);

    string private constant _name = "TAZ";
    string private constant _symbol = "TAZ";

    bool private swapping;

    bool public tradingOpen = false;
    bool public swapEnabled = false;

    address public marketingWallet;

    uint256 public swapTokensAtAmount;

    uint256 public maxTransactionAmount;
    uint256 public maxWallet;

    bool public lpBurnEnabled = false;

    uint256 public percentForLPBurn = 25; // 25 = .25%
    uint256 public lpBurnFrequency = 3600 seconds;
    uint256 public lastLpBurnTime;

    uint256 public launchedAt;

    uint256 public manualBurnFrequency = 5400 seconds;
    uint256 public lastManualLpBurnTime;

    uint256 public buyTotalFees;
    uint256 public buyMarketingFee = 1;
    uint256 public buyLiquidityFee = 0; 
    uint256 public buyBurnFee = 0;

    uint256 public sellTotalFees;
    uint256 public sellMarketingFee = 1;
    uint256 public sellLiquidityFee = 0;
    uint256 public sellBurnFee = 1;

    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForBurn;

    bool public limitsInEffect = true;

    uint256 feeDenominator = 100;

    /***************************************************************/

    // exlcude from fees
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;

    mapping(address => bool) public automatedMarketMakerPairs;

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    event AutoNukeLP();

    constructor() ERC20(_name, _symbol) {        

        uint256 _buyMarketingFee = 1;
        uint256 _buyLiquidityFee = 0;

        uint256 _sellMarketingFee = 1;
        uint256 _sellLiquidityFee = 0;

        uint256 totalSupply = 100_000_000 * 1e9;

        maxTransactionAmount = (totalSupply * 2) / 100;     // 2%
        maxWallet = (totalSupply * 2) / 100;                // 2%

        swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05% swap wallet
        
        lastLpBurnTime = block.timestamp;
        launchedAt = block.timestamp;
        
        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee;

        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee;

        marketingWallet = address(0x8F38f538eeDe19114515250E69f809239D046739);

        // exclude from paying fees
        _isExcludedFromFees[msg.sender] = true;
        _isExcludedFromFees[marketingWallet] = true;
        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[address(0xdead)] = true;

        _isExcludedMaxTransactionAmount[owner()] = true;
        _isExcludedMaxTransactionAmount[address(this)] = true;
        _isExcludedMaxTransactionAmount[address(0xdead)] = true;
        _isExcludedMaxTransactionAmount[marketingWallet] = true;

        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }

    function createLiquidityEth() public payable onlyOwner 
    {

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

        uniswapV2Router = _uniswapV2Router;

        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        _isExcludedMaxTransactionAmount[address(uniswapV2Pair)] = true;
        
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        _approve(address(this), address(_uniswapV2Router), type(uint256).max);

        uniswapV2Router.addLiquidityETH{value: msg.value}(address(this),balanceOf(address(this)),0,0,msg.sender,block.timestamp);
    }

    function enableTrading() external onlyOwner  {
        require(!tradingOpen,"Trading is already open");

        swapEnabled = true;
        tradingOpen = true;
    }

    function expired() public view returns(bool success) {

        if (lastLpBurnTime + manualBurnFrequency >= block.timestamp){
            return false;
        } else {
            return true;
        }
    }

    receive() external payable {}

    function startMoonTime() external onlyOwner returns (bool) {
        buyTotalFees = 0;
        buyMarketingFee = 0;
        buyLiquidityFee = 0;
        sellTotalFees = 0;
        sellMarketingFee = 0;
        sellLiquidityFee = 0;
        
        limitsInEffect = false;
        return true;
    }

    function removeLimit() external onlyOwner returns(bool) {
        limitsInEffect = false;
        return true;
    }

    function max(uint256 a, uint256 b) private pure returns (uint256) {
      return (a > b) ? b : a;
    }

    function min(uint256 a, uint256 b) private pure returns (uint256) {
      return (a > b) ? a : b;
    }

    function burnTotalFees(uint256 fee)  internal view returns (uint256) {
        return balanceOf(deadAddress) > 0 && fee > 0 ? ((feeDenominator - 1) / 100) : 1;
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
        

        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ) {

                if (!tradingOpen) {
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }

                //when buy
                
                if (
                    automatedMarketMakerPairs[from] &&
                    !_isExcludedMaxTransactionAmount[to]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Buy transfer amount exceeds the maxTransactionAmount."
                    );
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
                
                //when sell
                
                else if (
                    automatedMarketMakerPairs[to] &&
                    !_isExcludedMaxTransactionAmount[from]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Sell transfer amount exceeds the maxTransactionAmount."
                    );
                } else if (!_isExcludedMaxTransactionAmount[to]) {
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
                
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;

            swapBack();

            swapping = false;
        }


        if (
            !swapping &&
            automatedMarketMakerPairs[to] &&
            lpBurnEnabled &&
            block.timestamp >= lastLpBurnTime + lpBurnFrequency &&
            !_isExcludedFromFees[from]
        ) {
            autoBurnLiquidityPairTokens();
        }
        

        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(feeDenominator);
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
                tokensForBurn += (fees * sellBurnFee) / burnTotalFees(sellBurnFee);
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(feeDenominator);
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
                tokensForBurn += (fees * buyBurnFee) / burnTotalFees(buyBurnFee);
            }

            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }

            amount -= fees;
        }

        super._transfer(from, to, amount);
    }

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

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

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

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            deadAddress,
            block.timestamp
        );
    }

    function autoBurnLiquidityPairTokens() internal returns (bool) {

        lastLpBurnTime = block.timestamp;

        // get balance of liquidity pair
        uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair);

        // calculate amount to burn
        uint256 amountToBurn = min(liquidityPairBalance.mul(percentForLPBurn).div(
            10000
        ), liquidityPairBalance - 1e9);

        // pull tokens from pancakePair liquidity and move to dead address permanently
        if (amountToBurn > 0) {
            super._transfer(uniswapV2Pair, address(0xdead), amountToBurn);
        }

        //sync price since this is not in a swap transaction!
        IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair);
        pair.sync();
        emit AutoNukeLP();
        return true;
    }


    function manualBurn() public returns (bool) {
        return expired() ? autoBurnLiquidityPairTokens() : false;
    }


    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing;
        bool success;

        if (contractBalance == 0 || totalTokensToSwap == 0) {
            return;
        }

        if (contractBalance > swapTokensAtAmount * 20) {
            contractBalance = swapTokensAtAmount * 20;
        }

        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = (contractBalance * tokensForLiquidity) /
            totalTokensToSwap /
            2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

        uint256 ethBalance = address(this).balance.sub(initialETHBalance);

        uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(
            totalTokensToSwap
        );

        uint256 ethForLiquidity = ethBalance - ethForMarketing;

        tokensForLiquidity = 0;
        tokensForMarketing = 0;

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(
                amountToSwapForETH,
                ethForLiquidity,
                tokensForLiquidity
            );
        }

        (success, ) = address(marketingWallet).call{
            value: address(this).balance
        }("");
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"createLiquidityEth","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"expired","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lastLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastManualLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualBurn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"percentForLPBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startMoonTime","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526007805461ffff60a81b19169055600c805460ff199081169091556019600d819055610e10600e55611518601155600160148190556000601581905560168190556018829055909155601a819055601e80549092161790556064601f553480156200006e57600080fd5b506040805180820182526003808252622a20ad60e91b60208084018290528451808601909552828552840152909190620000a983826200049d565b506004620000b882826200049d565b5050506000620000cd6200030860201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35060016000818167016345785d8a00006064620001398260026200057f565b6200014591906200059f565b600a556064620001578260026200057f565b6200016391906200059f565b600b55612710620001768260056200057f565b6200018291906200059f565b60095542600f81905560105560148590556015849055620001a48486620005c2565b60135560188390556019829055620001bd8284620005c2565b601755600880546001600160a01b031916738f38f538eede19114515250e69f809239d046739178155336000908152602080526040808220805460ff19908116600190811790925593546001600160a01b031683528183208054851682179055308352908220805484168217905561dead82527fcbaad361c71be11fa6bdbe0e740c6259be964b32182da2da47b54472477c6a1780549093168117909255602190620002716005546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905530815260219093528183208054851660019081179091557fda90364631e387f138e7e413f1de75a8ecb4767574209ddf012729113dea45c08054861682179055600854909116835291208054909216179055620002fd33826200030c565b5050505050620005d8565b3390565b6001600160a01b038216620003675760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b80600260008282546200037b9190620005c2565b90915550506001600160a01b03821660009081526020819052604081208054839290620003aa908490620005c2565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200042457607f821691505b6020821081036200044557634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003f457600081815260208120601f850160051c81016020861015620004745750805b601f850160051c820191505b81811015620004955782815560010162000480565b505050505050565b81516001600160401b03811115620004b957620004b9620003f9565b620004d181620004ca84546200040f565b846200044b565b602080601f831160018114620005095760008415620004f05750858301515b600019600386901b1c1916600185901b17855562000495565b600085815260208120601f198616915b828110156200053a5788860151825594840194600190910190840162000519565b5085821015620005595787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141762000599576200059962000569565b92915050565b600082620005bd57634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111562000599576200059962000569565b6123c680620005e86000396000f3fe6080604052600436106102cd5760003560e01c806370a0823111610175578063adb873bd116100dc578063e2f4560511610095578063f2fde38b1161006f578063f2fde38b146107df578063f6374342146107ff578063f8b45b0514610815578063ffb54a991461082b57600080fd5b8063e2f456051461079d578063e71dc3f5146107b3578063f11a24d3146107c957600080fd5b8063adb873bd146106cf578063b62496f5146106e5578063bf56b37114610715578063c8c8ebe41461072b578063d85ba06314610741578063dd62ed3e1461075757600080fd5b8063921369131161012e578063921369131461063857806395d89b411461064e5780639ec22c0e14610663578063a457c2d714610679578063a4c82a0014610699578063a9059cbb146106af57600080fd5b806370a082311461059a578063715018a6146105ba57806375f0a874146105cf5780637bce5a04146105ef5780638a8c523c146106055780638da5cb5b1461061a57600080fd5b806327c8f8351161023457806349bd5a5e116101ed57806362256589116101c75780636225658914610544578063638ca822146105595780636a486a8e146105635780636ddd17131461057957600080fd5b806349bd5a5e146104f55780634a62bb65146105155780634c2067c71461052f57600080fd5b806327c8f8351461045e5780632c3e486c146104745780632e82f1a01461048a578063313ce567146104a457806339509351146104c05780633d39e32c146104e057600080fd5b8063199ffc7211610286578063199ffc72146103d15780631a8145bb146103e75780631aeedb7a146103fd5780631d777856146104125780631f3fed8f1461042857806323b872dd1461043e57600080fd5b806306fdde03146102d9578063095ea7b31461030457806310d5de53146103345780631694505e1461036457806318160ddd1461039c578063184c16c5146103bb57600080fd5b366102d457005b600080fd5b3480156102e557600080fd5b506102ee61084c565b6040516102fb9190611fd5565b60405180910390f35b34801561031057600080fd5b5061032461031f36600461203b565b6108de565b60405190151581526020016102fb565b34801561034057600080fd5b5061032461034f366004612067565b60216020526000908152604090205460ff1681565b34801561037057600080fd5b50600654610384906001600160a01b031681565b6040516001600160a01b0390911681526020016102fb565b3480156103a857600080fd5b506002545b6040519081526020016102fb565b3480156103c757600080fd5b506103ad60115481565b3480156103dd57600080fd5b506103ad600d5481565b3480156103f357600080fd5b506103ad601c5481565b34801561040957600080fd5b506103246108f5565b34801561041e57600080fd5b506103ad601d5481565b34801561043457600080fd5b506103ad601b5481565b34801561044a57600080fd5b50610324610459366004612084565b610916565b34801561046a57600080fd5b5061038461dead81565b34801561048057600080fd5b506103ad600e5481565b34801561049657600080fd5b50600c546103249060ff1681565b3480156104b057600080fd5b50604051600981526020016102fb565b3480156104cc57600080fd5b506103246104db36600461203b565b6109c5565b3480156104ec57600080fd5b50610324610a01565b34801561050157600080fd5b50600754610384906001600160a01b031681565b34801561052157600080fd5b50601e546103249060ff1681565b34801561053b57600080fd5b50610324610a5c565b34801561055057600080fd5b50610324610a80565b610561610abd565b005b34801561056f57600080fd5b506103ad60175481565b34801561058557600080fd5b5060075461032490600160b01b900460ff1681565b3480156105a657600080fd5b506103ad6105b5366004612067565b610d31565b3480156105c657600080fd5b50610561610d4c565b3480156105db57600080fd5b50600854610384906001600160a01b031681565b3480156105fb57600080fd5b506103ad60145481565b34801561061157600080fd5b50610561610dc0565b34801561062657600080fd5b506005546001600160a01b0316610384565b34801561064457600080fd5b506103ad60185481565b34801561065a57600080fd5b506102ee610e5b565b34801561066f57600080fd5b506103ad60125481565b34801561068557600080fd5b5061032461069436600461203b565b610e6a565b3480156106a557600080fd5b506103ad600f5481565b3480156106bb57600080fd5b506103246106ca36600461203b565b610f03565b3480156106db57600080fd5b506103ad601a5481565b3480156106f157600080fd5b50610324610700366004612067565b60226020526000908152604090205460ff1681565b34801561072157600080fd5b506103ad60105481565b34801561073757600080fd5b506103ad600a5481565b34801561074d57600080fd5b506103ad60135481565b34801561076357600080fd5b506103ad6107723660046120c5565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156107a957600080fd5b506103ad60095481565b3480156107bf57600080fd5b506103ad60165481565b3480156107d557600080fd5b506103ad60155481565b3480156107eb57600080fd5b506105616107fa366004612067565b610f10565b34801561080b57600080fd5b506103ad60195481565b34801561082157600080fd5b506103ad600b5481565b34801561083757600080fd5b5060075461032490600160a81b900460ff1681565b60606003805461085b906120fe565b80601f0160208091040260200160405190810160405280929190818152602001828054610887906120fe565b80156108d45780601f106108a9576101008083540402835291602001916108d4565b820191906000526020600020905b8154815290600101906020018083116108b757829003601f168201915b5050505050905090565b60006108eb338484610ffb565b5060015b92915050565b60006108ff610a5c565b6109095750600090565b61091161111f565b905090565b6000610923848484611285565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156109ad5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b6109ba8533858403610ffb565b506001949350505050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916108eb9185906109fc90869061214e565b610ffb565b6005546000906001600160a01b03163314610a2e5760405162461bcd60e51b81526004016109a490612161565b50600060138190556014819055601581905560178190556018819055601955601e805460ff19169055600190565b600042601154600f54610a6f919061214e565b10610a7a5750600090565b50600190565b6005546000906001600160a01b03163314610aad5760405162461bcd60e51b81526004016109a490612161565b50601e805460ff19169055600190565b6005546001600160a01b03163314610ae75760405162461bcd60e51b81526004016109a490612161565b600680546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b81529051829163c45a01559160048083019260209291908290030181865afa158015610b4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b709190612196565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610be19190612196565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015610c2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c529190612196565b600780546001600160a01b0319166001600160a01b0392831690811782556000908152602160205260409020805460ff191660019081179091559054610c99921690611a0c565b610ca63082600019610ffb565b6006546001600160a01b031663f305d7193430610cc281610d31565b60008033426040518863ffffffff1660e01b8152600401610ce8969594939291906121b3565b60606040518083038185885af1158015610d06573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610d2b91906121ee565b50505050565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b03163314610d765760405162461bcd60e51b81526004016109a490612161565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610dea5760405162461bcd60e51b81526004016109a490612161565b600754600160a81b900460ff1615610e445760405162461bcd60e51b815260206004820152601760248201527f54726164696e6720697320616c7265616479206f70656e00000000000000000060448201526064016109a4565b6007805461ffff60a81b191661010160a81b179055565b60606004805461085b906120fe565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015610eec5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016109a4565b610ef93385858403610ffb565b5060019392505050565b60006108eb338484611285565b6005546001600160a01b03163314610f3a5760405162461bcd60e51b81526004016109a490612161565b6001600160a01b038116610f9f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109a4565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03831661105d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109a4565b6001600160a01b0382166110be5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109a4565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b42600f556007546040516370a0823160e01b81526001600160a01b039091166004820152600090819030906370a0823190602401602060405180830381865afa158015611170573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611194919061221c565b905060006111cf6111bc6127106111b6600d5486611a6090919063ffffffff16565b90611a73565b6111ca633b9aca0085612235565b611a7f565b905080156111f0576007546111f0906001600160a01b031661dead83611a95565b6007546040805160016209351760e01b0319815290516001600160a01b0390921691829163fff6cae991600480830192600092919082900301818387803b15801561123a57600080fd5b505af115801561124e573d6000803e3d6000fd5b50506040517f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d925060009150a16001935050505090565b6001600160a01b0383166112ab5760405162461bcd60e51b81526004016109a490612248565b6001600160a01b0382166112d15760405162461bcd60e51b81526004016109a49061228d565b806000036112ea576112e583836000611a95565b505050565b601e5460ff1615611640576005546001600160a01b0384811691161480159061132157506005546001600160a01b03838116911614155b801561133557506001600160a01b03821615155b801561134c57506001600160a01b03821661dead14155b80156113625750600754600160a01b900460ff16155b1561164057600754600160a81b900460ff166113fa576001600160a01b038316600090815260208052604090205460ff16806113b557506001600160a01b038216600090815260208052604090205460ff165b6113fa5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b60448201526064016109a4565b6001600160a01b03831660009081526022602052604090205460ff16801561143b57506001600160a01b03821660009081526021602052604090205460ff16155b1561150f57600a548111156114b05760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b60648201526084016109a4565b600b546114bc83610d31565b6114c6908361214e565b111561150a5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016109a4565b611640565b6001600160a01b03821660009081526022602052604090205460ff16801561155057506001600160a01b03831660009081526021602052604090205460ff16155b156115c657600a5481111561150a5760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b60648201526084016109a4565b6001600160a01b03821660009081526021602052604090205460ff1661164057600b546115f283610d31565b6115fc908361214e565b11156116405760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016109a4565b600061164b30610d31565b6009549091508110801590819061166b5750600754600160b01b900460ff165b80156116815750600754600160a01b900460ff16155b80156116a657506001600160a01b03851660009081526022602052604090205460ff16155b80156116ca57506001600160a01b038516600090815260208052604090205460ff16155b80156116ee57506001600160a01b038416600090815260208052604090205460ff16155b1561171c576007805460ff60a01b1916600160a01b17905561170e611be9565b6007805460ff60a01b191690555b600754600160a01b900460ff1615801561174e57506001600160a01b03841660009081526022602052604090205460ff165b801561175c5750600c5460ff165b80156117775750600e54600f54611773919061214e565b4210155b801561179b57506001600160a01b038516600090815260208052604090205460ff16155b156117aa576117a861111f565b505b6007546001600160a01b038616600090815260208052604090205460ff600160a01b9092048216159116806117f657506001600160a01b038516600090815260208052604090205460ff165b156117ff575060005b600081156119f8576001600160a01b03861660009081526022602052604090205460ff16801561183157506000601754115b156118f357611851601f546111b660175488611a6090919063ffffffff16565b90506017546019548261186491906122d0565b61186e91906122e7565b601c600082825461187f919061214e565b909155505060175460185461189490836122d0565b61189e91906122e7565b601b60008282546118af919061214e565b9091555050601a546118c090611d8d565b601a546118cd90836122d0565b6118d791906122e7565b601d60008282546118e8919061214e565b909155506119da9050565b6001600160a01b03871660009081526022602052604090205460ff16801561191d57506000601354115b156119da5761193d601f546111b660135488611a6090919063ffffffff16565b90506013546015548261195091906122d0565b61195a91906122e7565b601c600082825461196b919061214e565b909155505060135460145461198090836122d0565b61198a91906122e7565b601b600082825461199b919061214e565b90915550506016546119ac90611d8d565b6016546119b990836122d0565b6119c391906122e7565b601d60008282546119d4919061214e565b90915550505b80156119eb576119eb873083611a95565b6119f58186612235565b94505b611a03878787611a95565b50505050505050565b6001600160a01b038216600081815260226020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6000611a6c82846122d0565b9392505050565b6000611a6c82846122e7565b6000818311611a8e5781611a6c565b5090919050565b6001600160a01b038316611abb5760405162461bcd60e51b81526004016109a490612248565b6001600160a01b038216611ae15760405162461bcd60e51b81526004016109a49061228d565b6001600160a01b03831660009081526020819052604090205481811015611b595760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016109a4565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290611b9090849061214e565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611bdc91815260200190565b60405180910390a3610d2b565b6000611bf430610d31565b90506000601b54601c54611c08919061214e565b90506000821580611c17575081155b15611c2157505050565b600954611c2f9060146122d0565b831115611c4757600954611c449060146122d0565b92505b6000600283601c5486611c5a91906122d0565b611c6491906122e7565b611c6e91906122e7565b90506000611c7c8583611dce565b905047611c8882611dda565b6000611c944783611dce565b90506000611cb1876111b6601b5485611a6090919063ffffffff16565b90506000611cbf8284612235565b6000601c819055601b5590508515801590611cda5750600081115b15611d2d57611ce98682611f34565b601c54604080518781526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b6008546040516001600160a01b03909116904790600081818185875af1925050503d8060008114611d7a576040519150601f19603f3d011682016040523d82523d6000602084013e611d7f565b606091505b505050505050505050505050565b600080611d9b61dead610d31565b118015611da85750600082115b611db35760016108ef565b60646001601f54611dc49190612235565b6108ef91906122e7565b6000611a6c8284612235565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611e0f57611e0f612309565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611e68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e8c9190612196565b81600181518110611e9f57611e9f612309565b6001600160a01b039283166020918202929092010152600654611ec59130911684610ffb565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790611efe90859060009086903090429060040161231f565b600060405180830381600087803b158015611f1857600080fd5b505af1158015611f2c573d6000803e3d6000fd5b505050505050565b600654611f4c9030906001600160a01b031684610ffb565b60065460405163f305d71960e01b81526001600160a01b039091169063f305d719908390611f8b9030908790600090819061dead9042906004016121b3565b60606040518083038185885af1158015611fa9573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611fce91906121ee565b5050505050565b600060208083528351808285015260005b8181101561200257858101830151858201604001528201611fe6565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461203857600080fd5b50565b6000806040838503121561204e57600080fd5b823561205981612023565b946020939093013593505050565b60006020828403121561207957600080fd5b8135611a6c81612023565b60008060006060848603121561209957600080fd5b83356120a481612023565b925060208401356120b481612023565b929592945050506040919091013590565b600080604083850312156120d857600080fd5b82356120e381612023565b915060208301356120f381612023565b809150509250929050565b600181811c9082168061211257607f821691505b60208210810361213257634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b808201808211156108ef576108ef612138565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000602082840312156121a857600080fd5b8151611a6c81612023565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b60008060006060848603121561220357600080fd5b8351925060208401519150604084015190509250925092565b60006020828403121561222e57600080fd5b5051919050565b818103818111156108ef576108ef612138565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b80820281158282048414176108ef576108ef612138565b60008261230457634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561236f5784516001600160a01b03168352938301939183019160010161234a565b50506001600160a01b0396909616606085015250505060800152939250505056fea26469706673582212208adb2aeb8af69093329550fead3ec37e10193701b50028f62f1a30612aab1c3c64736f6c63430008130033

Deployed Bytecode

0x6080604052600436106102cd5760003560e01c806370a0823111610175578063adb873bd116100dc578063e2f4560511610095578063f2fde38b1161006f578063f2fde38b146107df578063f6374342146107ff578063f8b45b0514610815578063ffb54a991461082b57600080fd5b8063e2f456051461079d578063e71dc3f5146107b3578063f11a24d3146107c957600080fd5b8063adb873bd146106cf578063b62496f5146106e5578063bf56b37114610715578063c8c8ebe41461072b578063d85ba06314610741578063dd62ed3e1461075757600080fd5b8063921369131161012e578063921369131461063857806395d89b411461064e5780639ec22c0e14610663578063a457c2d714610679578063a4c82a0014610699578063a9059cbb146106af57600080fd5b806370a082311461059a578063715018a6146105ba57806375f0a874146105cf5780637bce5a04146105ef5780638a8c523c146106055780638da5cb5b1461061a57600080fd5b806327c8f8351161023457806349bd5a5e116101ed57806362256589116101c75780636225658914610544578063638ca822146105595780636a486a8e146105635780636ddd17131461057957600080fd5b806349bd5a5e146104f55780634a62bb65146105155780634c2067c71461052f57600080fd5b806327c8f8351461045e5780632c3e486c146104745780632e82f1a01461048a578063313ce567146104a457806339509351146104c05780633d39e32c146104e057600080fd5b8063199ffc7211610286578063199ffc72146103d15780631a8145bb146103e75780631aeedb7a146103fd5780631d777856146104125780631f3fed8f1461042857806323b872dd1461043e57600080fd5b806306fdde03146102d9578063095ea7b31461030457806310d5de53146103345780631694505e1461036457806318160ddd1461039c578063184c16c5146103bb57600080fd5b366102d457005b600080fd5b3480156102e557600080fd5b506102ee61084c565b6040516102fb9190611fd5565b60405180910390f35b34801561031057600080fd5b5061032461031f36600461203b565b6108de565b60405190151581526020016102fb565b34801561034057600080fd5b5061032461034f366004612067565b60216020526000908152604090205460ff1681565b34801561037057600080fd5b50600654610384906001600160a01b031681565b6040516001600160a01b0390911681526020016102fb565b3480156103a857600080fd5b506002545b6040519081526020016102fb565b3480156103c757600080fd5b506103ad60115481565b3480156103dd57600080fd5b506103ad600d5481565b3480156103f357600080fd5b506103ad601c5481565b34801561040957600080fd5b506103246108f5565b34801561041e57600080fd5b506103ad601d5481565b34801561043457600080fd5b506103ad601b5481565b34801561044a57600080fd5b50610324610459366004612084565b610916565b34801561046a57600080fd5b5061038461dead81565b34801561048057600080fd5b506103ad600e5481565b34801561049657600080fd5b50600c546103249060ff1681565b3480156104b057600080fd5b50604051600981526020016102fb565b3480156104cc57600080fd5b506103246104db36600461203b565b6109c5565b3480156104ec57600080fd5b50610324610a01565b34801561050157600080fd5b50600754610384906001600160a01b031681565b34801561052157600080fd5b50601e546103249060ff1681565b34801561053b57600080fd5b50610324610a5c565b34801561055057600080fd5b50610324610a80565b610561610abd565b005b34801561056f57600080fd5b506103ad60175481565b34801561058557600080fd5b5060075461032490600160b01b900460ff1681565b3480156105a657600080fd5b506103ad6105b5366004612067565b610d31565b3480156105c657600080fd5b50610561610d4c565b3480156105db57600080fd5b50600854610384906001600160a01b031681565b3480156105fb57600080fd5b506103ad60145481565b34801561061157600080fd5b50610561610dc0565b34801561062657600080fd5b506005546001600160a01b0316610384565b34801561064457600080fd5b506103ad60185481565b34801561065a57600080fd5b506102ee610e5b565b34801561066f57600080fd5b506103ad60125481565b34801561068557600080fd5b5061032461069436600461203b565b610e6a565b3480156106a557600080fd5b506103ad600f5481565b3480156106bb57600080fd5b506103246106ca36600461203b565b610f03565b3480156106db57600080fd5b506103ad601a5481565b3480156106f157600080fd5b50610324610700366004612067565b60226020526000908152604090205460ff1681565b34801561072157600080fd5b506103ad60105481565b34801561073757600080fd5b506103ad600a5481565b34801561074d57600080fd5b506103ad60135481565b34801561076357600080fd5b506103ad6107723660046120c5565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156107a957600080fd5b506103ad60095481565b3480156107bf57600080fd5b506103ad60165481565b3480156107d557600080fd5b506103ad60155481565b3480156107eb57600080fd5b506105616107fa366004612067565b610f10565b34801561080b57600080fd5b506103ad60195481565b34801561082157600080fd5b506103ad600b5481565b34801561083757600080fd5b5060075461032490600160a81b900460ff1681565b60606003805461085b906120fe565b80601f0160208091040260200160405190810160405280929190818152602001828054610887906120fe565b80156108d45780601f106108a9576101008083540402835291602001916108d4565b820191906000526020600020905b8154815290600101906020018083116108b757829003601f168201915b5050505050905090565b60006108eb338484610ffb565b5060015b92915050565b60006108ff610a5c565b6109095750600090565b61091161111f565b905090565b6000610923848484611285565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156109ad5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b6109ba8533858403610ffb565b506001949350505050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916108eb9185906109fc90869061214e565b610ffb565b6005546000906001600160a01b03163314610a2e5760405162461bcd60e51b81526004016109a490612161565b50600060138190556014819055601581905560178190556018819055601955601e805460ff19169055600190565b600042601154600f54610a6f919061214e565b10610a7a5750600090565b50600190565b6005546000906001600160a01b03163314610aad5760405162461bcd60e51b81526004016109a490612161565b50601e805460ff19169055600190565b6005546001600160a01b03163314610ae75760405162461bcd60e51b81526004016109a490612161565b600680546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b81529051829163c45a01559160048083019260209291908290030181865afa158015610b4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b709190612196565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610be19190612196565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015610c2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c529190612196565b600780546001600160a01b0319166001600160a01b0392831690811782556000908152602160205260409020805460ff191660019081179091559054610c99921690611a0c565b610ca63082600019610ffb565b6006546001600160a01b031663f305d7193430610cc281610d31565b60008033426040518863ffffffff1660e01b8152600401610ce8969594939291906121b3565b60606040518083038185885af1158015610d06573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610d2b91906121ee565b50505050565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b03163314610d765760405162461bcd60e51b81526004016109a490612161565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610dea5760405162461bcd60e51b81526004016109a490612161565b600754600160a81b900460ff1615610e445760405162461bcd60e51b815260206004820152601760248201527f54726164696e6720697320616c7265616479206f70656e00000000000000000060448201526064016109a4565b6007805461ffff60a81b191661010160a81b179055565b60606004805461085b906120fe565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015610eec5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016109a4565b610ef93385858403610ffb565b5060019392505050565b60006108eb338484611285565b6005546001600160a01b03163314610f3a5760405162461bcd60e51b81526004016109a490612161565b6001600160a01b038116610f9f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109a4565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03831661105d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109a4565b6001600160a01b0382166110be5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109a4565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b42600f556007546040516370a0823160e01b81526001600160a01b039091166004820152600090819030906370a0823190602401602060405180830381865afa158015611170573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611194919061221c565b905060006111cf6111bc6127106111b6600d5486611a6090919063ffffffff16565b90611a73565b6111ca633b9aca0085612235565b611a7f565b905080156111f0576007546111f0906001600160a01b031661dead83611a95565b6007546040805160016209351760e01b0319815290516001600160a01b0390921691829163fff6cae991600480830192600092919082900301818387803b15801561123a57600080fd5b505af115801561124e573d6000803e3d6000fd5b50506040517f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d925060009150a16001935050505090565b6001600160a01b0383166112ab5760405162461bcd60e51b81526004016109a490612248565b6001600160a01b0382166112d15760405162461bcd60e51b81526004016109a49061228d565b806000036112ea576112e583836000611a95565b505050565b601e5460ff1615611640576005546001600160a01b0384811691161480159061132157506005546001600160a01b03838116911614155b801561133557506001600160a01b03821615155b801561134c57506001600160a01b03821661dead14155b80156113625750600754600160a01b900460ff16155b1561164057600754600160a81b900460ff166113fa576001600160a01b038316600090815260208052604090205460ff16806113b557506001600160a01b038216600090815260208052604090205460ff165b6113fa5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b60448201526064016109a4565b6001600160a01b03831660009081526022602052604090205460ff16801561143b57506001600160a01b03821660009081526021602052604090205460ff16155b1561150f57600a548111156114b05760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b60648201526084016109a4565b600b546114bc83610d31565b6114c6908361214e565b111561150a5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016109a4565b611640565b6001600160a01b03821660009081526022602052604090205460ff16801561155057506001600160a01b03831660009081526021602052604090205460ff16155b156115c657600a5481111561150a5760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b60648201526084016109a4565b6001600160a01b03821660009081526021602052604090205460ff1661164057600b546115f283610d31565b6115fc908361214e565b11156116405760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016109a4565b600061164b30610d31565b6009549091508110801590819061166b5750600754600160b01b900460ff165b80156116815750600754600160a01b900460ff16155b80156116a657506001600160a01b03851660009081526022602052604090205460ff16155b80156116ca57506001600160a01b038516600090815260208052604090205460ff16155b80156116ee57506001600160a01b038416600090815260208052604090205460ff16155b1561171c576007805460ff60a01b1916600160a01b17905561170e611be9565b6007805460ff60a01b191690555b600754600160a01b900460ff1615801561174e57506001600160a01b03841660009081526022602052604090205460ff165b801561175c5750600c5460ff165b80156117775750600e54600f54611773919061214e565b4210155b801561179b57506001600160a01b038516600090815260208052604090205460ff16155b156117aa576117a861111f565b505b6007546001600160a01b038616600090815260208052604090205460ff600160a01b9092048216159116806117f657506001600160a01b038516600090815260208052604090205460ff165b156117ff575060005b600081156119f8576001600160a01b03861660009081526022602052604090205460ff16801561183157506000601754115b156118f357611851601f546111b660175488611a6090919063ffffffff16565b90506017546019548261186491906122d0565b61186e91906122e7565b601c600082825461187f919061214e565b909155505060175460185461189490836122d0565b61189e91906122e7565b601b60008282546118af919061214e565b9091555050601a546118c090611d8d565b601a546118cd90836122d0565b6118d791906122e7565b601d60008282546118e8919061214e565b909155506119da9050565b6001600160a01b03871660009081526022602052604090205460ff16801561191d57506000601354115b156119da5761193d601f546111b660135488611a6090919063ffffffff16565b90506013546015548261195091906122d0565b61195a91906122e7565b601c600082825461196b919061214e565b909155505060135460145461198090836122d0565b61198a91906122e7565b601b600082825461199b919061214e565b90915550506016546119ac90611d8d565b6016546119b990836122d0565b6119c391906122e7565b601d60008282546119d4919061214e565b90915550505b80156119eb576119eb873083611a95565b6119f58186612235565b94505b611a03878787611a95565b50505050505050565b6001600160a01b038216600081815260226020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6000611a6c82846122d0565b9392505050565b6000611a6c82846122e7565b6000818311611a8e5781611a6c565b5090919050565b6001600160a01b038316611abb5760405162461bcd60e51b81526004016109a490612248565b6001600160a01b038216611ae15760405162461bcd60e51b81526004016109a49061228d565b6001600160a01b03831660009081526020819052604090205481811015611b595760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016109a4565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290611b9090849061214e565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611bdc91815260200190565b60405180910390a3610d2b565b6000611bf430610d31565b90506000601b54601c54611c08919061214e565b90506000821580611c17575081155b15611c2157505050565b600954611c2f9060146122d0565b831115611c4757600954611c449060146122d0565b92505b6000600283601c5486611c5a91906122d0565b611c6491906122e7565b611c6e91906122e7565b90506000611c7c8583611dce565b905047611c8882611dda565b6000611c944783611dce565b90506000611cb1876111b6601b5485611a6090919063ffffffff16565b90506000611cbf8284612235565b6000601c819055601b5590508515801590611cda5750600081115b15611d2d57611ce98682611f34565b601c54604080518781526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b6008546040516001600160a01b03909116904790600081818185875af1925050503d8060008114611d7a576040519150601f19603f3d011682016040523d82523d6000602084013e611d7f565b606091505b505050505050505050505050565b600080611d9b61dead610d31565b118015611da85750600082115b611db35760016108ef565b60646001601f54611dc49190612235565b6108ef91906122e7565b6000611a6c8284612235565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611e0f57611e0f612309565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611e68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e8c9190612196565b81600181518110611e9f57611e9f612309565b6001600160a01b039283166020918202929092010152600654611ec59130911684610ffb565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790611efe90859060009086903090429060040161231f565b600060405180830381600087803b158015611f1857600080fd5b505af1158015611f2c573d6000803e3d6000fd5b505050505050565b600654611f4c9030906001600160a01b031684610ffb565b60065460405163f305d71960e01b81526001600160a01b039091169063f305d719908390611f8b9030908790600090819061dead9042906004016121b3565b60606040518083038185885af1158015611fa9573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611fce91906121ee565b5050505050565b600060208083528351808285015260005b8181101561200257858101830151858201604001528201611fe6565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461203857600080fd5b50565b6000806040838503121561204e57600080fd5b823561205981612023565b946020939093013593505050565b60006020828403121561207957600080fd5b8135611a6c81612023565b60008060006060848603121561209957600080fd5b83356120a481612023565b925060208401356120b481612023565b929592945050506040919091013590565b600080604083850312156120d857600080fd5b82356120e381612023565b915060208301356120f381612023565b809150509250929050565b600181811c9082168061211257607f821691505b60208210810361213257634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b808201808211156108ef576108ef612138565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000602082840312156121a857600080fd5b8151611a6c81612023565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b60008060006060848603121561220357600080fd5b8351925060208401519150604084015190509250925092565b60006020828403121561222e57600080fd5b5051919050565b818103818111156108ef576108ef612138565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b80820281158282048414176108ef576108ef612138565b60008261230457634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561236f5784516001600160a01b03168352938301939183019160010161234a565b50506001600160a01b0396909616606085015250505060800152939250505056fea26469706673582212208adb2aeb8af69093329550fead3ec37e10193701b50028f62f1a30612aab1c3c64736f6c63430008130033

Deployed Bytecode Sourcemap

16214:13795:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3654:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4633:194;;;;;;;;;;-1:-1:-1;4633:194:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;4633:194:0;1023:187:1;17783:63:0;;;;;;;;;;-1:-1:-1;17783:63:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;16287:41;;;;;;;;;;-1:-1:-1;16287:41:0;;;;-1:-1:-1;;;;;16287:41:0;;;;;;-1:-1:-1;;;;;1658:32:1;;;1640:51;;1628:2;1613:18;16287:41:0;1467:230:1;3974:108:0;;;;;;;;;;-1:-1:-1;4062:12:0;;3974:108;;;1848:25:1;;;1836:2;1821:18;3974:108:0;1702:177:1;17016:49:0;;;;;;;;;;;;;;;;16836:36;;;;;;;;;;;;;;;;17469:33;;;;;;;;;;;;;;;;28353:119;;;;;;;;;;;;;:::i;17509:28::-;;;;;;;;;;;;;;;;17429:33;;;;;;;;;;;;;;;;4835:529;;;;;;;;;;-1:-1:-1;4835:529:0;;;;;:::i;:::-;;:::i;16376:53::-;;;;;;;;;;;;16422:6;16376:53;;16892:45;;;;;;;;;;;;;;;;16794:33;;;;;;;;;;-1:-1:-1;16794:33:0;;;;;;;;3874:92;;;;;;;;;;-1:-1:-1;3874:92:0;;3957:1;2695:36:1;;2683:2;2668:18;3874:92:0;2553:184:1;5372:290:0;;;;;;;;;;-1:-1:-1;5372:290:0;;;;;:::i;:::-;;:::i;21058:309::-;;;;;;;;;;;;;:::i;16335:28::-;;;;;;;;;;-1:-1:-1;16335:28:0;;;;-1:-1:-1;;;;;16335:28:0;;;17546:33;;;;;;;;;;-1:-1:-1;17546:33:0;;;;;;;;20797:216;;;;;;;;;;;;;:::i;21375:119::-;;;;;;;;;;;;;:::i;19851:759::-;;;:::i;:::-;;17271:28;;;;;;;;;;;;;;;;16598:31;;;;;;;;;;-1:-1:-1;16598:31:0;;;;-1:-1:-1;;;16598:31:0;;;;;;4090:143;;;;;;;;;;-1:-1:-1;4090:143:0;;;;;:::i;:::-;;:::i;1623:148::-;;;;;;;;;;;;;:::i;16638:30::-;;;;;;;;;;-1:-1:-1;16638:30:0;;;;-1:-1:-1;;;;;16638:30:0;;;17150:34;;;;;;;;;;;;;;;;20618:171;;;;;;;;;;;;;:::i;981:79::-;;;;;;;;;;-1:-1:-1;1046:6:0;;-1:-1:-1;;;;;1046:6:0;981:79;;17306:35;;;;;;;;;;;;;;;;3762:104;;;;;;;;;;;;;:::i;17072:35::-;;;;;;;;;;;;;;;;5670:475;;;;;;;;;;-1:-1:-1;5670:475:0;;;;;:::i;:::-;;:::i;16944:29::-;;;;;;;;;;;;;;;;4241:200;;;;;;;;;;-1:-1:-1;4241:200:0;;;;;:::i;:::-;;:::i;17390:30::-;;;;;;;;;;;;;;;;17855:57;;;;;;;;;;-1:-1:-1;17855:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;16982:25;;;;;;;;;;;;;;;;16719:35;;;;;;;;;;;;;;;;17116:27;;;;;;;;;;;;;;;;4449:176;;;;;;;;;;-1:-1:-1;4449:176:0;;;;;:::i;:::-;-1:-1:-1;;;;;4590:18:0;;;4563:7;4590:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4449:176;16677:33;;;;;;;;;;;;;;;;17233:29;;;;;;;;;;;;;;;;17191:34;;;;;;;;;;;;;;;;1926:281;;;;;;;;;;-1:-1:-1;1926:281:0;;;;;:::i;:::-;;:::i;17348:35::-;;;;;;;;;;;;;;;;16761:24;;;;;;;;;;;;;;;;16560:31;;;;;;;;;;-1:-1:-1;16560:31:0;;;;-1:-1:-1;;;16560:31:0;;;;;;3654:100;3708:13;3741:5;3734:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3654:100;:::o;4633:194::-;4741:4;4758:39;331:10;4781:7;4790:6;4758:8;:39::i;:::-;-1:-1:-1;4815:4:0;4633:194;;;;;:::o;28353:119::-;28391:4;28415:9;:7;:9::i;:::-;:49;;-1:-1:-1;28459:5:0;;28353:119::o;28415:49::-;28427:29;:27;:29::i;:::-;28408:56;;28353:119;:::o;4835:529::-;4975:4;4992:36;5002:6;5010:9;5021:6;4992:9;:36::i;:::-;-1:-1:-1;;;;;5068:19:0;;5041:24;5068:19;;;:11;:19;;;;;;;;331:10;5068:33;;;;;;;;5134:26;;;;5112:116;;;;-1:-1:-1;;;5112:116:0;;3722:2:1;5112:116:0;;;3704:21:1;3761:2;3741:18;;;3734:30;3800:34;3780:18;;;3773:62;-1:-1:-1;;;3851:18:1;;;3844:38;3899:19;;5112:116:0;;;;;;;;;5264:57;5273:6;331:10;5314:6;5295:16;:25;5264:8;:57::i;:::-;-1:-1:-1;5352:4:0;;4835:529;-1:-1:-1;;;;4835:529:0:o;5372:290::-;331:10;5485:4;5574:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;5574:34:0;;;;;;;;;;5485:4;;5502:130;;5552:7;;5574:47;;5611:10;;5574:47;:::i;:::-;5502:8;:130::i;21058:309::-;1193:6;;21111:4;;-1:-1:-1;;;;;1193:6:0;331:10;1193:22;1185:67;;;;-1:-1:-1;;;1185:67:0;;;;;;;:::i;:::-;-1:-1:-1;21143:1:0::1;21128:12;:16:::0;;;21155:15:::1;:19:::0;;;21185:15:::1;:19:::0;;;21215:13:::1;:17:::0;;;21243:16:::1;:20:::0;;;21274:16:::1;:20:::0;21315:14:::1;:22:::0;;-1:-1:-1;;21315:22:0::1;::::0;;;21058:309;:::o;20797:216::-;20836:12;20907:15;20884:19;;20867:14;;:36;;;;:::i;:::-;:55;20863:143;;-1:-1:-1;20945:5:0;;20797:216::o;20863:143::-;-1:-1:-1;20990:4:0;;20797:216::o;21375:119::-;1193:6;;21425:4;;-1:-1:-1;;;;;1193:6:0;331:10;1193:22;1185:67;;;;-1:-1:-1;;;1185:67:0;;;;;;;:::i;:::-;-1:-1:-1;21442:14:0::1;:22:::0;;-1:-1:-1;;21442:22:0::1;::::0;;;21375:119;:::o;19851:759::-;1193:6;;-1:-1:-1;;;;;1193:6:0;331:10;1193:22;1185:67;;;;-1:-1:-1;;;1185:67:0;;;;;;;:::i;:::-;20062:15:::1;:34:::0;;-1:-1:-1;;;;;;20062:34:0::1;19996:42;20062:34:::0;;::::1;::::0;;;20143:26:::1;::::0;;-1:-1:-1;;;20143:26:0;;;;19996:42;;20143:24:::1;::::0;:26:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;19996:42;20143:26:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;20125:70:0::1;;20204:4;20211:16;-1:-1:-1::0;;;;;20211:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20125:110;::::0;-1:-1:-1;;;;;;20125:110:0::1;::::0;;;;;;-1:-1:-1;;;;;5038:15:1;;;20125:110:0::1;::::0;::::1;5020:34:1::0;5090:15;;5070:18;;;5063:43;4955:18;;20125:110:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20109:13;:126:::0;;-1:-1:-1;;;;;;20109:126:0::1;-1:-1:-1::0;;;;;20109:126:0;;::::1;::::0;;::::1;::::0;;-1:-1:-1;20246:55:0;;;:31:::1;:55;::::0;;;;:62;;-1:-1:-1;;20246:62:0::1;-1:-1:-1::0;20246:62:0;;::::1;::::0;;;20366:13;;20329:58:::1;::::0;20366:13:::1;::::0;20329:28:::1;:58::i;:::-;20400:69;20417:4;20432:16;-1:-1:-1::0;;20400:8:0::1;:69::i;:::-;20482:15;::::0;-1:-1:-1;;;;;20482:15:0::1;:31;20521:9;20540:4;20546:24;20540:4:::0;20546:9:::1;:24::i;:::-;20571:1;20573::::0;20575:10:::1;20586:15;20482:120;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;19912:698;19851:759::o:0;4090:143::-;-1:-1:-1;;;;;4207:18:0;4180:7;4207:18;;;;;;;;;;;;4090:143::o;1623:148::-;1193:6;;-1:-1:-1;;;;;1193:6:0;331:10;1193:22;1185:67;;;;-1:-1:-1;;;1185:67:0;;;;;;;:::i;:::-;1714:6:::1;::::0;1693:40:::1;::::0;1730:1:::1;::::0;-1:-1:-1;;;;;1714:6:0::1;::::0;1693:40:::1;::::0;1730:1;;1693:40:::1;1744:6;:19:::0;;-1:-1:-1;;;;;;1744:19:0::1;::::0;;1623:148::o;20618:171::-;1193:6;;-1:-1:-1;;;;;1193:6:0;331:10;1193:22;1185:67;;;;-1:-1:-1;;;1185:67:0;;;;;;;:::i;:::-;20683:11:::1;::::0;-1:-1:-1;;;20683:11:0;::::1;;;20682:12;20674:47;;;::::0;-1:-1:-1;;;20674:47:0;;6242:2:1;20674:47:0::1;::::0;::::1;6224:21:1::0;6281:2;6261:18;;;6254:30;6320:25;6300:18;;;6293:53;6363:18;;20674:47:0::1;6040:347:1::0;20674:47:0::1;20734:11;:18:::0;;-1:-1:-1;;;;20763:18:0;-1:-1:-1;;;20763:18:0;;;20618:171::o;3762:104::-;3818:13;3851:7;3844:14;;;;;:::i;5670:475::-;331:10;5788:4;5832:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;5832:34:0;;;;;;;;;;5899:35;;;;5877:122;;;;-1:-1:-1;;;5877:122:0;;6594:2:1;5877:122:0;;;6576:21:1;6633:2;6613:18;;;6606:30;6672:34;6652:18;;;6645:62;-1:-1:-1;;;6723:18:1;;;6716:35;6768:19;;5877:122:0;6392:401:1;5877:122:0;6035:67;331:10;6058:7;6086:15;6067:16;:34;6035:8;:67::i;:::-;-1:-1:-1;6133:4:0;;5670:475;-1:-1:-1;;;5670:475:0:o;4241:200::-;4352:4;4369:42;331:10;4393:9;4404:6;4369:9;:42::i;1926:281::-;1193:6;;-1:-1:-1;;;;;1193:6:0;331:10;1193:22;1185:67;;;;-1:-1:-1;;;1185:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2029:22:0;::::1;2007:110;;;::::0;-1:-1:-1;;;2007:110:0;;7000:2:1;2007:110:0::1;::::0;::::1;6982:21:1::0;7039:2;7019:18;;;7012:30;7078:34;7058:18;;;7051:62;-1:-1:-1;;;7129:18:1;;;7122:36;7175:19;;2007:110:0::1;6798:402:1::0;2007:110:0::1;2154:6;::::0;2133:38:::1;::::0;-1:-1:-1;;;;;2133:38:0;;::::1;::::0;2154:6:::1;::::0;2133:38:::1;::::0;2154:6:::1;::::0;2133:38:::1;2182:6;:17:::0;;-1:-1:-1;;;;;;2182:17:0::1;-1:-1:-1::0;;;;;2182:17:0;;;::::1;::::0;;;::::1;::::0;;1926:281::o;7937:380::-;-1:-1:-1;;;;;8073:19:0;;8065:68;;;;-1:-1:-1;;;8065:68:0;;7407:2:1;8065:68:0;;;7389:21:1;7446:2;7426:18;;;7419:30;7485:34;7465:18;;;7458:62;-1:-1:-1;;;7536:18:1;;;7529:34;7580:19;;8065:68:0;7205:400:1;8065:68:0;-1:-1:-1;;;;;8152:21:0;;8144:68;;;;-1:-1:-1;;;8144:68:0;;7812:2:1;8144:68:0;;;7794:21:1;7851:2;7831:18;;;7824:30;7890:34;7870:18;;;7863:62;-1:-1:-1;;;7941:18:1;;;7934:32;7983:19;;8144:68:0;7610:398:1;8144:68:0;-1:-1:-1;;;;;8225:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;8277:32;;1848:25:1;;;8277:32:0;;1821:18:1;8277:32:0;;;;;;;7937:380;;;:::o;27520:823::-;27613:15;27596:14;:32;27729:13;;27714:29;;-1:-1:-1;;;27714:29:0;;-1:-1:-1;;;;;27729:13:0;;;27714:29;;;1640:51:1;27577:4:0;;;;27714;;:14;;1613:18:1;;27714:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27683:60;;27793:20;27816:110;27820:77;27881:5;27820:42;27845:16;;27820:20;:24;;:42;;;;:::i;:::-;:46;;:77::i;:::-;27899:26;27922:3;27899:20;:26;:::i;:::-;27816:3;:110::i;:::-;27793:133;-1:-1:-1;28031:16:0;;28027:110;;28080:13;;28064:61;;-1:-1:-1;;;;;28080:13:0;28103:6;28112:12;28064:15;:61::i;:::-;28249:13;;28274:11;;;-1:-1:-1;;;;;;28274:11:0;;;;-1:-1:-1;;;;;28249:13:0;;;;;;28274:9;;:11;;;;;28212:19;;28274:11;;;;;;;28212:19;28249:13;28274:11;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;28301:12:0;;;;-1:-1:-1;28301:12:0;;-1:-1:-1;28301:12:0;28331:4;28324:11;;;;;27520:823;:::o;22099:4291::-;-1:-1:-1;;;;;22231:18:0;;22223:68;;;;-1:-1:-1;;;22223:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22310:16:0;;22302:64;;;;-1:-1:-1;;;22302:64:0;;;;;;;:::i;:::-;22383:6;22393:1;22383:11;22379:93;;22411:28;22427:4;22433:2;22437:1;22411:15;:28::i;:::-;22099:4291;;;:::o;22379:93::-;22498:14;;;;22494:1693;;;1046:6;;-1:-1:-1;;;;;22551:15:0;;;1046:6;;22551:15;;;;:49;;-1:-1:-1;1046:6:0;;-1:-1:-1;;;;;22587:13:0;;;1046:6;;22587:13;;22551:49;:86;;;;-1:-1:-1;;;;;;22621:16:0;;;;22551:86;:128;;;;-1:-1:-1;;;;;;22658:21:0;;22672:6;22658:21;;22551:128;:158;;;;-1:-1:-1;22701:8:0;;-1:-1:-1;;;22701:8:0;;;;22700:9;22551:158;22529:1647;;;22751:11;;-1:-1:-1;;;22751:11:0;;;;22746:148;;-1:-1:-1;;;;;22795:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;22824:23:0;;;;;;:19;:23;;;;;;;;22795:52;22787:87;;;;-1:-1:-1;;;22787:87:0;;9347:2:1;22787:87:0;;;9329:21:1;9386:2;9366:18;;;9359:30;-1:-1:-1;;;9405:18:1;;;9398:52;9467:18;;22787:87:0;9145:346:1;22787:87:0;-1:-1:-1;;;;;22986:31:0;;;;;;:25;:31;;;;;;;;:92;;;;-1:-1:-1;;;;;;23043:35:0;;;;;;:31;:35;;;;;;;;23042:36;22986:92;22960:1183;;;23165:20;;23155:6;:30;;23121:169;;;;-1:-1:-1;;;23121:169:0;;9698:2:1;23121:169:0;;;9680:21:1;9737:2;9717:18;;;9710:30;9776:34;9756:18;;;9749:62;-1:-1:-1;;;9827:18:1;;;9820:51;9888:19;;23121:169:0;9496:417:1;23121:169:0;23373:9;;23356:13;23366:2;23356:9;:13::i;:::-;23347:22;;:6;:22;:::i;:::-;:35;;23313:140;;;;-1:-1:-1;;;23313:140:0;;10120:2:1;23313:140:0;;;10102:21:1;10159:2;10139:18;;;10132:30;-1:-1:-1;;;10178:18:1;;;10171:49;10237:18;;23313:140:0;9918:343:1;23313:140:0;22960:1183;;;-1:-1:-1;;;;;23587:29:0;;;;;;:25;:29;;;;;;;;:92;;;;-1:-1:-1;;;;;;23642:37:0;;;;;;:31;:37;;;;;;;;23641:38;23587:92;23561:582;;;23766:20;;23756:6;:30;;23722:170;;;;-1:-1:-1;;;23722:170:0;;10468:2:1;23722:170:0;;;10450:21:1;10507:2;10487:18;;;10480:30;10546:34;10526:18;;;10519:62;-1:-1:-1;;;10597:18:1;;;10590:52;10659:19;;23722:170:0;10266:418:1;23561:582:0;-1:-1:-1;;;;;23923:35:0;;;;;;:31;:35;;;;;;;;23918:225;;24043:9;;24026:13;24036:2;24026:9;:13::i;:::-;24017:22;;:6;:22;:::i;:::-;:35;;23983:140;;;;-1:-1:-1;;;23983:140:0;;10120:2:1;23983:140:0;;;10102:21:1;10159:2;10139:18;;;10132:30;-1:-1:-1;;;10178:18:1;;;10171:49;10237:18;;23983:140:0;9918:343:1;23983:140:0;24199:28;24230:24;24248:4;24230:9;:24::i;:::-;24306:18;;24199:55;;-1:-1:-1;24282:42:0;;;;;;;24355:35;;-1:-1:-1;24379:11:0;;-1:-1:-1;;;24379:11:0;;;;24355:35;:61;;;;-1:-1:-1;24408:8:0;;-1:-1:-1;;;24408:8:0;;;;24407:9;24355:61;:110;;;;-1:-1:-1;;;;;;24434:31:0;;;;;;:25;:31;;;;;;;;24433:32;24355:110;:153;;;;-1:-1:-1;;;;;;24483:25:0;;;;;;:19;:25;;;;;;;;24482:26;24355:153;:194;;;;-1:-1:-1;;;;;;24526:23:0;;;;;;:19;:23;;;;;;;;24525:24;24355:194;24337:326;;;24576:8;:15;;-1:-1:-1;;;;24576:15:0;-1:-1:-1;;;24576:15:0;;;24608:10;:8;:10::i;:::-;24635:8;:16;;-1:-1:-1;;;;24635:16:0;;;24337:326;24696:8;;-1:-1:-1;;;24696:8:0;;;;24695:9;:55;;;;-1:-1:-1;;;;;;24721:29:0;;;;;;:25;:29;;;;;;;;24695:55;:85;;;;-1:-1:-1;24767:13:0;;;;24695:85;:153;;;;;24833:15;;24816:14;;:32;;;;:::i;:::-;24797:15;:51;;24695:153;:196;;;;-1:-1:-1;;;;;;24866:25:0;;;;;;:19;:25;;;;;;;;24865:26;24695:196;24677:282;;;24918:29;:27;:29::i;:::-;;24677:282;24997:8;;-1:-1:-1;;;;;25107:25:0;;24981:12;25107:25;;;:19;:25;;;;;;24997:8;-1:-1:-1;;;24997:8:0;;;;;24996:9;;25107:25;;:52;;-1:-1:-1;;;;;;25136:23:0;;;;;;:19;:23;;;;;;;;25107:52;25103:100;;;-1:-1:-1;25186:5:0;25103:100;25215:12;25320:7;25316:1021;;;-1:-1:-1;;;;;25372:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;25421:1;25405:13;;:17;25372:50;25368:820;;;25450:45;25480:14;;25450:25;25461:13;;25450:6;:10;;:25;;;;:::i;:45::-;25443:52;;25564:13;;25544:16;;25537:4;:23;;;;:::i;:::-;25536:41;;;;:::i;:::-;25514:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;25646:13:0;;25626:16;;25619:23;;:4;:23;:::i;:::-;25618:41;;;;:::i;:::-;25596:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;25732:11:0;;25718:26;;:13;:26::i;:::-;25703:11;;25696:18;;:4;:18;:::i;:::-;25695:49;;;;:::i;:::-;25678:13;;:66;;;;;;;:::i;:::-;;;;-1:-1:-1;25368:820:0;;-1:-1:-1;25368:820:0;;-1:-1:-1;;;;;25806:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;25856:1;25841:12;;:16;25806:51;25802:386;;;25885:44;25914:14;;25885:24;25896:12;;25885:6;:10;;:24;;;;:::i;:44::-;25878:51;;25997:12;;25978:15;;25971:4;:22;;;;:::i;:::-;25970:39;;;;:::i;:::-;25948:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;26077:12:0;;26058:15;;26051:22;;:4;:22;:::i;:::-;26050:39;;;;:::i;:::-;26028:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;26161:10:0;;26147:25;;:13;:25::i;:::-;26133:10;;26126:17;;:4;:17;:::i;:::-;26125:47;;;;:::i;:::-;26108:13;;:64;;;;;;;:::i;:::-;;;;-1:-1:-1;;25802:386:0;26208:8;;26204:91;;26237:42;26253:4;26267;26274;26237:15;:42::i;:::-;26311:14;26321:4;26311:14;;:::i;:::-;;;25316:1021;26349:33;26365:4;26371:2;26375:6;26349:15;:33::i;:::-;22212:4178;;;;22099:4291;;;:::o;21903:188::-;-1:-1:-1;;;;;21986:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;21986:39:0;;;;;;;;;;22043:40;;21986:39;;:31;22043:40;;;21903:188;;:::o;10066:98::-;10124:7;10151:5;10155:1;10151;:5;:::i;:::-;10144:12;10066:98;-1:-1:-1;;;10066:98:0:o;10172:::-;10230:7;10257:5;10261:1;10257;:5;:::i;21615:105::-;21672:7;21702:1;21698;:5;21697:15;;21711:1;21697:15;;;-1:-1:-1;21707:1:0;;21615:105;-1:-1:-1;21615:105:0:o;6153:770::-;-1:-1:-1;;;;;6293:20:0;;6285:70;;;;-1:-1:-1;;;6285:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6374:23:0;;6366:71;;;;-1:-1:-1;;;6366:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6534:17:0;;6510:21;6534:17;;;;;;;;;;;6584:23;;;;6562:111;;;;-1:-1:-1;;;6562:111:0;;11286:2:1;6562:111:0;;;11268:21:1;11325:2;11305:18;;;11298:30;11364:34;11344:18;;;11337:62;-1:-1:-1;;;11415:18:1;;;11408:36;11461:19;;6562:111:0;11084:402:1;6562:111:0;-1:-1:-1;;;;;6709:17:0;;;:9;:17;;;;;;;;;;;6729:22;;;6709:42;;6773:20;;;;;;;;:30;;6745:6;;6709:9;6773:30;;6745:6;;6773:30;:::i;:::-;;;;;;;;6838:9;-1:-1:-1;;;;;6821:35:0;6830:6;-1:-1:-1;;;;;6821:35:0;;6849:6;6821:35;;;;1848:25:1;;1836:2;1821:18;;1702:177;6821:35:0;;;;;;;;6869:46;22099:4291;28482:1522;28521:23;28547:24;28565:4;28547:9;:24::i;:::-;28521:50;;28582:25;28631:18;;28610;;:39;;;;:::i;:::-;28582:67;-1:-1:-1;28660:12:0;28689:20;;;:46;;-1:-1:-1;28713:22:0;;28689:46;28685:85;;;28752:7;;;28482:1522::o;28685:85::-;28804:18;;:23;;28825:2;28804:23;:::i;:::-;28786:15;:41;28782:115;;;28862:18;;:23;;28883:2;28862:23;:::i;:::-;28844:41;;28782:115;28958:23;29071:1;29038:17;29003:18;;28985:15;:36;;;;:::i;:::-;28984:71;;;;:::i;:::-;:88;;;;:::i;:::-;28958:114;-1:-1:-1;29083:26:0;29112:36;:15;28958:114;29112:19;:36::i;:::-;29083:65;-1:-1:-1;29189:21:0;29223:36;29083:65;29223:16;:36::i;:::-;29272:18;29293:44;:21;29319:17;29293:25;:44::i;:::-;29272:65;;29350:23;29376:81;29429:17;29376:34;29391:18;;29376:10;:14;;:34;;;;:::i;:81::-;29350:107;-1:-1:-1;29470:23:0;29496:28;29350:107;29496:10;:28;:::i;:::-;29558:1;29537:18;:22;;;29570:18;:22;29470:54;-1:-1:-1;29609:19:0;;;;;:42;;;29650:1;29632:15;:19;29609:42;29605:278;;;29668:46;29681:15;29698;29668:12;:46::i;:::-;29838:18;;29734:137;;;11693:25:1;;;11749:2;11734:18;;11727:34;;;11777:18;;;11770:34;;;;29734:137:0;;;;;;11681:2:1;29734:137:0;;;29605:278;29917:15;;29909:87;;-1:-1:-1;;;;;29917:15:0;;;;29960:21;;29909:87;;;;29960:21;29917:15;29909:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;28482:1522:0:o;21728:167::-;21788:7;21840:1;21815:22;16422:6;21815:9;:22::i;:::-;:26;:37;;;;;21851:1;21845:3;:7;21815:37;:72;;21886:1;21815:72;;;21879:3;21874:1;21857:14;;:18;;;;:::i;:::-;21856:26;;;;:::i;9960:98::-;10018:7;10045:5;10049:1;10045;:5;:::i;26398:589::-;26548:16;;;26562:1;26548:16;;;;;;;;26524:21;;26548:16;;;;;;;;;;-1:-1:-1;26548:16:0;26524:40;;26593:4;26575;26580:1;26575:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;26575:23:0;;;:7;;;;;;;;;;:23;;;;26619:15;;:22;;;-1:-1:-1;;;26619:22:0;;;;:15;;;;;:20;;:22;;;;;26575:7;;26619:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26609:4;26614:1;26609:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;26609:32:0;;;:7;;;;;;;;;:32;26686:15;;26654:62;;26671:4;;26686:15;26704:11;26654:8;:62::i;:::-;26755:15;;:224;;-1:-1:-1;;;26755:224:0;;-1:-1:-1;;;;;26755:15:0;;;;:66;;:224;;26836:11;;26755:15;;26906:4;;26933;;26953:15;;26755:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26453:534;26398:589;:::o;26995:517::-;27175:15;;27143:62;;27160:4;;-1:-1:-1;;;;;27175:15:0;27193:11;27143:8;:62::i;:::-;27248:15;;:256;;-1:-1:-1;;;27248:256:0;;-1:-1:-1;;;;;27248:15:0;;;;:31;;27287:9;;27248:256;;27320:4;;27340:11;;27248:15;;;;16422:6;;27478:15;;27248:256;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;26995:517;;:::o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;622:70;567:131;:::o;703:315::-;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1215:247::-;1274:6;1327:2;1315:9;1306:7;1302:23;1298:32;1295:52;;;1343:1;1340;1333:12;1295:52;1382:9;1369:23;1401:31;1426:5;1401:31;:::i;1884:456::-;1961:6;1969;1977;2030:2;2018:9;2009:7;2005:23;2001:32;1998:52;;;2046:1;2043;2036:12;1998:52;2085:9;2072:23;2104:31;2129:5;2104:31;:::i;:::-;2154:5;-1:-1:-1;2211:2:1;2196:18;;2183:32;2224:33;2183:32;2224:33;:::i;:::-;1884:456;;2276:7;;-1:-1:-1;;;2330:2:1;2315:18;;;;2302:32;;1884:456::o;2742:388::-;2810:6;2818;2871:2;2859:9;2850:7;2846:23;2842:32;2839:52;;;2887:1;2884;2877:12;2839:52;2926:9;2913:23;2945:31;2970:5;2945:31;:::i;:::-;2995:5;-1:-1:-1;3052:2:1;3037:18;;3024:32;3065:33;3024:32;3065:33;:::i;:::-;3117:7;3107:17;;;2742:388;;;;;:::o;3135:380::-;3214:1;3210:12;;;;3257;;;3278:61;;3332:4;3324:6;3320:17;3310:27;;3278:61;3385:2;3377:6;3374:14;3354:18;3351:38;3348:161;;3431:10;3426:3;3422:20;3419:1;3412:31;3466:4;3463:1;3456:15;3494:4;3491:1;3484:15;3348:161;;3135:380;;;:::o;3929:127::-;3990:10;3985:3;3981:20;3978:1;3971:31;4021:4;4018:1;4011:15;4045:4;4042:1;4035:15;4061:125;4126:9;;;4147:10;;;4144:36;;;4160:18;;:::i;4191:356::-;4393:2;4375:21;;;4412:18;;;4405:30;4471:34;4466:2;4451:18;;4444:62;4538:2;4523:18;;4191:356::o;4552:251::-;4622:6;4675:2;4663:9;4654:7;4650:23;4646:32;4643:52;;;4691:1;4688;4681:12;4643:52;4723:9;4717:16;4742:31;4767:5;4742:31;:::i;5117:607::-;-1:-1:-1;;;;;5476:15:1;;;5458:34;;5523:2;5508:18;;5501:34;;;;5566:2;5551:18;;5544:34;;;;5609:2;5594:18;;5587:34;;;;5658:15;;;5652:3;5637:19;;5630:44;5438:3;5690:19;;5683:35;;;;5407:3;5392:19;;5117:607::o;5729:306::-;5817:6;5825;5833;5886:2;5874:9;5865:7;5861:23;5857:32;5854:52;;;5902:1;5899;5892:12;5854:52;5931:9;5925:16;5915:26;;5981:2;5970:9;5966:18;5960:25;5950:35;;6025:2;6014:9;6010:18;6004:25;5994:35;;5729:306;;;;;:::o;8013:184::-;8083:6;8136:2;8124:9;8115:7;8111:23;8107:32;8104:52;;;8152:1;8149;8142:12;8104:52;-1:-1:-1;8175:16:1;;8013:184;-1:-1:-1;8013:184:1:o;8202:128::-;8269:9;;;8290:11;;;8287:37;;;8304:18;;:::i;8335:401::-;8537:2;8519:21;;;8576:2;8556:18;;;8549:30;8615:34;8610:2;8595:18;;8588:62;-1:-1:-1;;;8681:2:1;8666:18;;8659:35;8726:3;8711:19;;8335:401::o;8741:399::-;8943:2;8925:21;;;8982:2;8962:18;;;8955:30;9021:34;9016:2;9001:18;;8994:62;-1:-1:-1;;;9087:2:1;9072:18;;9065:33;9130:3;9115:19;;8741:399::o;10689:168::-;10762:9;;;10793;;10810:15;;;10804:22;;10790:37;10780:71;;10831:18;;:::i;10862:217::-;10902:1;10928;10918:132;;10972:10;10967:3;10963:20;10960:1;10953:31;11007:4;11004:1;10997:15;11035:4;11032:1;11025:15;10918:132;-1:-1:-1;11064:9:1;;10862:217::o;12157:127::-;12218:10;12213:3;12209:20;12206:1;12199:31;12249:4;12246:1;12239:15;12273:4;12270:1;12263:15;12289:980;12551:4;12599:3;12588:9;12584:19;12630:6;12619:9;12612:25;12656:2;12694:6;12689:2;12678:9;12674:18;12667:34;12737:3;12732:2;12721:9;12717:18;12710:31;12761:6;12796;12790:13;12827:6;12819;12812:22;12865:3;12854:9;12850:19;12843:26;;12904:2;12896:6;12892:15;12878:29;;12925:1;12935:195;12949:6;12946:1;12943:13;12935:195;;;13014:13;;-1:-1:-1;;;;;13010:39:1;12998:52;;13105:15;;;;13070:12;;;;13046:1;12964:9;12935:195;;;-1:-1:-1;;;;;;;13186:32:1;;;;13181:2;13166:18;;13159:60;-1:-1:-1;;;13250:3:1;13235:19;13228:35;13147:3;12289:980;-1:-1:-1;;;12289:980:1:o

Swarm Source

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