ETH Price: $3,686.34 (+0.77%)
Gas: 7 Gwei

Token

ERC-20: Rescuer (RESCUER)
 

Overview

Max Total Supply

100,000,000 RESCUER

Holders

122

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
0.138656756 RESCUER

Value
$0.00
0x2121a77421f14034fd05539cc8a84019256e4e9b
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:
Rescuer

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.rescuercoin.vip
    💣 Twitter:    https://twitter.com/RescuerErc
    ☢️ Telegram:   https://t.me/RescuerErc
*/

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 Rescuer is ERC20, Ownable {
    using SafeMath for uint256;

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

    string private constant _name = "Rescuer";
    string private constant _symbol = "RESCUER";

    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 = 7200 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(0x69ceB3688B13839403F4CF0ee36A426681B3DD78);

        // 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 addLiquidityEth() 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 enableTrade() external onlyOwner  {
        require(!tradingOpen,"Trading is already open");

        swapEnabled = true;
        tradingOpen = true;
    }

    function isExpired() 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 removeLimits() 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 manualBurnTokens() public returns (bool) {
        return isExpired() ? 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":[],"name":"addLiquidityEth","outputs":[],"stateMutability":"payable","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":"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":"enableTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isExpired","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"view","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":"manualBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualBurnTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","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":"removeLimits","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"}]

60806040526007805461ffff60a81b19169055600c805460ff199081169091556019600d819055610e10600e55611c20601155600160148190556000601581905560168190556018829055909155601a819055601e80549092161790556064601f553480156200006e57600080fd5b50604051806040016040528060078152602001662932b9b1bab2b960c91b815250604051806040016040528060078152602001662922a9a1aaa2a960c91b8152508160039081620000c09190620004b4565b506004620000cf8282620004b4565b5050506000620000e46200031f60201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35060016000818167016345785d8a000060646200015082600262000596565b6200015c9190620005b6565b600a5560646200016e82600262000596565b6200017a9190620005b6565b600b556127106200018d82600562000596565b620001999190620005b6565b60095542600f81905560105560148590556015849055620001bb8486620005d9565b60135560188390556019829055620001d48284620005d9565b601755600880546001600160a01b0319167369ceb3688b13839403f4cf0ee36a426681b3dd78178155336000908152602080526040808220805460ff19908116600190811790925593546001600160a01b031683528183208054851682179055308352908220805484168217905561dead82527fcbaad361c71be11fa6bdbe0e740c6259be964b32182da2da47b54472477c6a1780549093168117909255602190620002886005546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905530815260219093528183208054851660019081179091557fda90364631e387f138e7e413f1de75a8ecb4767574209ddf012729113dea45c0805486168217905560085490911683529120805490921617905562000314338262000323565b5050505050620005ef565b3390565b6001600160a01b0382166200037e5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b8060026000828254620003929190620005d9565b90915550506001600160a01b03821660009081526020819052604081208054839290620003c1908490620005d9565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200043b57607f821691505b6020821081036200045c57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200040b57600081815260208120601f850160051c810160208610156200048b5750805b601f850160051c820191505b81811015620004ac5782815560010162000497565b505050505050565b81516001600160401b03811115620004d057620004d062000410565b620004e881620004e1845462000426565b8462000462565b602080601f831160018114620005205760008415620005075750858301515b600019600386901b1c1916600185901b178555620004ac565b600085815260208120601f198616915b82811015620005515788860151825594840194600190910190840162000530565b5085821015620005705787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417620005b057620005b062000580565b92915050565b600082620005d457634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115620005b057620005b062000580565b6123c980620005ff6000396000f3fe6080604052600436106102cc5760003560e01c8063715018a611610175578063b62496f5116100dc578063e5c91c1411610095578063f2fde38b1161006f578063f2fde38b146107de578063f6374342146107fe578063f8b45b0514610814578063ffb54a991461082a57600080fd5b8063e5c91c141461079d578063e71dc3f5146107b2578063f11a24d3146107c857600080fd5b8063b62496f5146106cf578063bf56b371146106ff578063c8c8ebe414610715578063d85ba0631461072b578063dd62ed3e14610741578063e2f456051461078757600080fd5b806395d89b411161012e57806395d89b41146106385780639ec22c0e1461064d578063a457c2d714610663578063a4c82a0014610683578063a9059cbb14610699578063adb873bd146106b957600080fd5b8063715018a6146105a4578063751039fc146105b957806375f0a874146105ce5780637bce5a04146105ee5780638da5cb5b14610604578063921369131461062257600080fd5b806324e344431161023457806339509351116101ed5780634a62bb65116101c75780634a62bb65146105335780636a486a8e1461054d5780636ddd17131461056357806370a082311461058457600080fd5b806339509351146104de5780633d39e32c146104fe57806349bd5a5e1461051357600080fd5b806324e344431461045f57806327c8f835146104675780632c3e486c1461047d5780632e82f1a0146104935780632f13b60c146104ad578063313ce567146104c257600080fd5b8063184c16c511610286578063184c16c5146103d1578063199ffc72146103e75780631a8145bb146103fd5780631d777856146104135780631f3fed8f1461042957806323b872dd1461043f57600080fd5b806299d386146102d857806306fdde03146102ef578063095ea7b31461031a57806310d5de531461034a5780631694505e1461037a57806318160ddd146103b257600080fd5b366102d357005b600080fd5b3480156102e457600080fd5b506102ed61084b565b005b3480156102fb57600080fd5b506103046108ef565b6040516103119190611fd8565b60405180910390f35b34801561032657600080fd5b5061033a61033536600461203e565b610981565b6040519015158152602001610311565b34801561035657600080fd5b5061033a61036536600461206a565b60216020526000908152604090205460ff1681565b34801561038657600080fd5b5060065461039a906001600160a01b031681565b6040516001600160a01b039091168152602001610311565b3480156103be57600080fd5b506002545b604051908152602001610311565b3480156103dd57600080fd5b506103c360115481565b3480156103f357600080fd5b506103c3600d5481565b34801561040957600080fd5b506103c3601c5481565b34801561041f57600080fd5b506103c3601d5481565b34801561043557600080fd5b506103c3601b5481565b34801561044b57600080fd5b5061033a61045a366004612087565b610998565b6102ed610a42565b34801561047357600080fd5b5061039a61dead81565b34801561048957600080fd5b506103c3600e5481565b34801561049f57600080fd5b50600c5461033a9060ff1681565b3480156104b957600080fd5b5061033a610cb6565b3480156104ce57600080fd5b5060405160098152602001610311565b3480156104ea57600080fd5b5061033a6104f936600461203e565b610cda565b34801561050a57600080fd5b5061033a610d16565b34801561051f57600080fd5b5060075461039a906001600160a01b031681565b34801561053f57600080fd5b50601e5461033a9060ff1681565b34801561055957600080fd5b506103c360175481565b34801561056f57600080fd5b5060075461033a90600160b01b900460ff1681565b34801561059057600080fd5b506103c361059f36600461206a565b610d71565b3480156105b057600080fd5b506102ed610d8c565b3480156105c557600080fd5b5061033a610e00565b3480156105da57600080fd5b5060085461039a906001600160a01b031681565b3480156105fa57600080fd5b506103c360145481565b34801561061057600080fd5b506005546001600160a01b031661039a565b34801561062e57600080fd5b506103c360185481565b34801561064457600080fd5b50610304610e3d565b34801561065957600080fd5b506103c360125481565b34801561066f57600080fd5b5061033a61067e36600461203e565b610e4c565b34801561068f57600080fd5b506103c3600f5481565b3480156106a557600080fd5b5061033a6106b436600461203e565b610ee5565b3480156106c557600080fd5b506103c3601a5481565b3480156106db57600080fd5b5061033a6106ea36600461206a565b60226020526000908152604090205460ff1681565b34801561070b57600080fd5b506103c360105481565b34801561072157600080fd5b506103c3600a5481565b34801561073757600080fd5b506103c360135481565b34801561074d57600080fd5b506103c361075c3660046120c8565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561079357600080fd5b506103c360095481565b3480156107a957600080fd5b5061033a610ef2565b3480156107be57600080fd5b506103c360165481565b3480156107d457600080fd5b506103c360155481565b3480156107ea57600080fd5b506102ed6107f936600461206a565b610f13565b34801561080a57600080fd5b506103c360195481565b34801561082057600080fd5b506103c3600b5481565b34801561083657600080fd5b5060075461033a90600160a81b900460ff1681565b6005546001600160a01b0316331461087e5760405162461bcd60e51b815260040161087590612101565b60405180910390fd5b600754600160a81b900460ff16156108d85760405162461bcd60e51b815260206004820152601760248201527f54726164696e6720697320616c7265616479206f70656e0000000000000000006044820152606401610875565b6007805461ffff60a81b191661010160a81b179055565b6060600380546108fe90612136565b80601f016020809104026020016040519081016040528092919081815260200182805461092a90612136565b80156109775780601f1061094c57610100808354040283529160200191610977565b820191906000526020600020905b81548152906001019060200180831161095a57829003601f168201915b5050505050905090565b600061098e338484610ffe565b5060015b92915050565b60006109a5848484611122565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610a2a5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610875565b610a378533858403610ffe565b506001949350505050565b6005546001600160a01b03163314610a6c5760405162461bcd60e51b815260040161087590612101565b600680546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b81529051829163c45a01559160048083019260209291908290030181865afa158015610ad1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af59190612170565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b669190612170565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015610bb3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd79190612170565b600780546001600160a01b0319166001600160a01b0392831690811782556000908152602160205260409020805460ff191660019081179091559054610c1e9216906118af565b610c2b3082600019610ffe565b6006546001600160a01b031663f305d7193430610c4781610d71565b60008033426040518863ffffffff1660e01b8152600401610c6d9695949392919061218d565b60606040518083038185885af1158015610c8b573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610cb091906121c8565b50505050565b600042601154600f54610cc9919061220c565b10610cd45750600090565b50600190565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161098e918590610d1190869061220c565b610ffe565b6005546000906001600160a01b03163314610d435760405162461bcd60e51b815260040161087590612101565b50600060138190556014819055601581905560178190556018819055601955601e805460ff19169055600190565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b03163314610db65760405162461bcd60e51b815260040161087590612101565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546000906001600160a01b03163314610e2d5760405162461bcd60e51b815260040161087590612101565b50601e805460ff19169055600190565b6060600480546108fe90612136565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015610ece5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610875565b610edb3385858403610ffe565b5060019392505050565b600061098e338484611122565b6000610efc610cb6565b610f065750600090565b610f0e611903565b905090565b6005546001600160a01b03163314610f3d5760405162461bcd60e51b815260040161087590612101565b6001600160a01b038116610fa25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610875565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166110605760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610875565b6001600160a01b0382166110c15760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610875565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166111485760405162461bcd60e51b81526004016108759061221f565b6001600160a01b03821661116e5760405162461bcd60e51b815260040161087590612264565b806000036111875761118283836000611a63565b505050565b601e5460ff16156114dd576005546001600160a01b038481169116148015906111be57506005546001600160a01b03838116911614155b80156111d257506001600160a01b03821615155b80156111e957506001600160a01b03821661dead14155b80156111ff5750600754600160a01b900460ff16155b156114dd57600754600160a81b900460ff16611297576001600160a01b038316600090815260208052604090205460ff168061125257506001600160a01b038216600090815260208052604090205460ff165b6112975760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610875565b6001600160a01b03831660009081526022602052604090205460ff1680156112d857506001600160a01b03821660009081526021602052604090205460ff16155b156113ac57600a5481111561134d5760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610875565b600b5461135983610d71565b611363908361220c565b11156113a75760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610875565b6114dd565b6001600160a01b03821660009081526022602052604090205460ff1680156113ed57506001600160a01b03831660009081526021602052604090205460ff16155b1561146357600a548111156113a75760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610875565b6001600160a01b03821660009081526021602052604090205460ff166114dd57600b5461148f83610d71565b611499908361220c565b11156114dd5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610875565b60006114e830610d71565b600954909150811080159081906115085750600754600160b01b900460ff165b801561151e5750600754600160a01b900460ff16155b801561154357506001600160a01b03851660009081526022602052604090205460ff16155b801561156757506001600160a01b038516600090815260208052604090205460ff16155b801561158b57506001600160a01b038416600090815260208052604090205460ff16155b156115b9576007805460ff60a01b1916600160a01b1790556115ab611bb7565b6007805460ff60a01b191690555b600754600160a01b900460ff161580156115eb57506001600160a01b03841660009081526022602052604090205460ff165b80156115f95750600c5460ff165b80156116145750600e54600f54611610919061220c565b4210155b801561163857506001600160a01b038516600090815260208052604090205460ff16155b1561164757611645611903565b505b6007546001600160a01b038616600090815260208052604090205460ff600160a01b90920482161591168061169357506001600160a01b038516600090815260208052604090205460ff165b1561169c575060005b6000811561189b576001600160a01b03861660009081526022602052604090205460ff1680156116ce57506000601754115b15611796576116f4601f546116ee60175488611d5b90919063ffffffff16565b90611d6e565b90506017546019548261170791906122a7565b61171191906122be565b601c6000828254611722919061220c565b909155505060175460185461173790836122a7565b61174191906122be565b601b6000828254611752919061220c565b9091555050601a5461176390611d7a565b601a5461177090836122a7565b61177a91906122be565b601d600082825461178b919061220c565b9091555061187d9050565b6001600160a01b03871660009081526022602052604090205460ff1680156117c057506000601354115b1561187d576117e0601f546116ee60135488611d5b90919063ffffffff16565b9050601354601554826117f391906122a7565b6117fd91906122be565b601c600082825461180e919061220c565b909155505060135460145461182390836122a7565b61182d91906122be565b601b600082825461183e919061220c565b909155505060165461184f90611d7a565b60165461185c90836122a7565b61186691906122be565b601d6000828254611877919061220c565b90915550505b801561188e5761188e873083611a63565b61189881866122e0565b94505b6118a6878787611a63565b50505050505050565b6001600160a01b038216600081815260226020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b42600f556007546040516370a0823160e01b81526001600160a01b039091166004820152600090819030906370a0823190602401602060405180830381865afa158015611954573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061197891906122f3565b905060006119ad61199a6127106116ee600d5486611d5b90919063ffffffff16565b6119a8633b9aca00856122e0565b611dbb565b905080156119ce576007546119ce906001600160a01b031661dead83611a63565b6007546040805160016209351760e01b0319815290516001600160a01b0390921691829163fff6cae991600480830192600092919082900301818387803b158015611a1857600080fd5b505af1158015611a2c573d6000803e3d6000fd5b50506040517f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d925060009150a16001935050505090565b6001600160a01b038316611a895760405162461bcd60e51b81526004016108759061221f565b6001600160a01b038216611aaf5760405162461bcd60e51b815260040161087590612264565b6001600160a01b03831660009081526020819052604090205481811015611b275760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610875565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290611b5e90849061220c565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611baa91815260200190565b60405180910390a3610cb0565b6000611bc230610d71565b90506000601b54601c54611bd6919061220c565b90506000821580611be5575081155b15611bef57505050565b600954611bfd9060146122a7565b831115611c1557600954611c129060146122a7565b92505b6000600283601c5486611c2891906122a7565b611c3291906122be565b611c3c91906122be565b90506000611c4a8583611dd1565b905047611c5682611ddd565b6000611c624783611dd1565b90506000611c7f876116ee601b5485611d5b90919063ffffffff16565b90506000611c8d82846122e0565b6000601c819055601b5590508515801590611ca85750600081115b15611cfb57611cb78682611f37565b601c54604080518781526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b6008546040516001600160a01b03909116904790600081818185875af1925050503d8060008114611d48576040519150601f19603f3d011682016040523d82523d6000602084013e611d4d565b606091505b505050505050505050505050565b6000611d6782846122a7565b9392505050565b6000611d6782846122be565b600080611d8861dead610d71565b118015611d955750600082115b611da0576001610992565b60646001601f54611db191906122e0565b61099291906122be565b6000818311611dca5781611d67565b5090919050565b6000611d6782846122e0565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611e1257611e1261230c565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611e6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e8f9190612170565b81600181518110611ea257611ea261230c565b6001600160a01b039283166020918202929092010152600654611ec89130911684610ffe565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790611f01908590600090869030904290600401612322565b600060405180830381600087803b158015611f1b57600080fd5b505af1158015611f2f573d6000803e3d6000fd5b505050505050565b600654611f4f9030906001600160a01b031684610ffe565b60065460405163f305d71960e01b81526001600160a01b039091169063f305d719908390611f8e9030908790600090819061dead90429060040161218d565b60606040518083038185885af1158015611fac573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611fd191906121c8565b5050505050565b600060208083528351808285015260005b8181101561200557858101830151858201604001528201611fe9565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461203b57600080fd5b50565b6000806040838503121561205157600080fd5b823561205c81612026565b946020939093013593505050565b60006020828403121561207c57600080fd5b8135611d6781612026565b60008060006060848603121561209c57600080fd5b83356120a781612026565b925060208401356120b781612026565b929592945050506040919091013590565b600080604083850312156120db57600080fd5b82356120e681612026565b915060208301356120f681612026565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c9082168061214a57607f821691505b60208210810361216a57634e487b7160e01b600052602260045260246000fd5b50919050565b60006020828403121561218257600080fd5b8151611d6781612026565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b6000806000606084860312156121dd57600080fd5b8351925060208401519150604084015190509250925092565b634e487b7160e01b600052601160045260246000fd5b80820180821115610992576109926121f6565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b8082028115828204841417610992576109926121f6565b6000826122db57634e487b7160e01b600052601260045260246000fd5b500490565b81810381811115610992576109926121f6565b60006020828403121561230557600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156123725784516001600160a01b03168352938301939183019160010161234d565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220c099a7a9d390cfba2b28a58652a8db4a0b54f4a6562f1af4b9d32e22adfda43264736f6c63430008130033

Deployed Bytecode

0x6080604052600436106102cc5760003560e01c8063715018a611610175578063b62496f5116100dc578063e5c91c1411610095578063f2fde38b1161006f578063f2fde38b146107de578063f6374342146107fe578063f8b45b0514610814578063ffb54a991461082a57600080fd5b8063e5c91c141461079d578063e71dc3f5146107b2578063f11a24d3146107c857600080fd5b8063b62496f5146106cf578063bf56b371146106ff578063c8c8ebe414610715578063d85ba0631461072b578063dd62ed3e14610741578063e2f456051461078757600080fd5b806395d89b411161012e57806395d89b41146106385780639ec22c0e1461064d578063a457c2d714610663578063a4c82a0014610683578063a9059cbb14610699578063adb873bd146106b957600080fd5b8063715018a6146105a4578063751039fc146105b957806375f0a874146105ce5780637bce5a04146105ee5780638da5cb5b14610604578063921369131461062257600080fd5b806324e344431161023457806339509351116101ed5780634a62bb65116101c75780634a62bb65146105335780636a486a8e1461054d5780636ddd17131461056357806370a082311461058457600080fd5b806339509351146104de5780633d39e32c146104fe57806349bd5a5e1461051357600080fd5b806324e344431461045f57806327c8f835146104675780632c3e486c1461047d5780632e82f1a0146104935780632f13b60c146104ad578063313ce567146104c257600080fd5b8063184c16c511610286578063184c16c5146103d1578063199ffc72146103e75780631a8145bb146103fd5780631d777856146104135780631f3fed8f1461042957806323b872dd1461043f57600080fd5b806299d386146102d857806306fdde03146102ef578063095ea7b31461031a57806310d5de531461034a5780631694505e1461037a57806318160ddd146103b257600080fd5b366102d357005b600080fd5b3480156102e457600080fd5b506102ed61084b565b005b3480156102fb57600080fd5b506103046108ef565b6040516103119190611fd8565b60405180910390f35b34801561032657600080fd5b5061033a61033536600461203e565b610981565b6040519015158152602001610311565b34801561035657600080fd5b5061033a61036536600461206a565b60216020526000908152604090205460ff1681565b34801561038657600080fd5b5060065461039a906001600160a01b031681565b6040516001600160a01b039091168152602001610311565b3480156103be57600080fd5b506002545b604051908152602001610311565b3480156103dd57600080fd5b506103c360115481565b3480156103f357600080fd5b506103c3600d5481565b34801561040957600080fd5b506103c3601c5481565b34801561041f57600080fd5b506103c3601d5481565b34801561043557600080fd5b506103c3601b5481565b34801561044b57600080fd5b5061033a61045a366004612087565b610998565b6102ed610a42565b34801561047357600080fd5b5061039a61dead81565b34801561048957600080fd5b506103c3600e5481565b34801561049f57600080fd5b50600c5461033a9060ff1681565b3480156104b957600080fd5b5061033a610cb6565b3480156104ce57600080fd5b5060405160098152602001610311565b3480156104ea57600080fd5b5061033a6104f936600461203e565b610cda565b34801561050a57600080fd5b5061033a610d16565b34801561051f57600080fd5b5060075461039a906001600160a01b031681565b34801561053f57600080fd5b50601e5461033a9060ff1681565b34801561055957600080fd5b506103c360175481565b34801561056f57600080fd5b5060075461033a90600160b01b900460ff1681565b34801561059057600080fd5b506103c361059f36600461206a565b610d71565b3480156105b057600080fd5b506102ed610d8c565b3480156105c557600080fd5b5061033a610e00565b3480156105da57600080fd5b5060085461039a906001600160a01b031681565b3480156105fa57600080fd5b506103c360145481565b34801561061057600080fd5b506005546001600160a01b031661039a565b34801561062e57600080fd5b506103c360185481565b34801561064457600080fd5b50610304610e3d565b34801561065957600080fd5b506103c360125481565b34801561066f57600080fd5b5061033a61067e36600461203e565b610e4c565b34801561068f57600080fd5b506103c3600f5481565b3480156106a557600080fd5b5061033a6106b436600461203e565b610ee5565b3480156106c557600080fd5b506103c3601a5481565b3480156106db57600080fd5b5061033a6106ea36600461206a565b60226020526000908152604090205460ff1681565b34801561070b57600080fd5b506103c360105481565b34801561072157600080fd5b506103c3600a5481565b34801561073757600080fd5b506103c360135481565b34801561074d57600080fd5b506103c361075c3660046120c8565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561079357600080fd5b506103c360095481565b3480156107a957600080fd5b5061033a610ef2565b3480156107be57600080fd5b506103c360165481565b3480156107d457600080fd5b506103c360155481565b3480156107ea57600080fd5b506102ed6107f936600461206a565b610f13565b34801561080a57600080fd5b506103c360195481565b34801561082057600080fd5b506103c3600b5481565b34801561083657600080fd5b5060075461033a90600160a81b900460ff1681565b6005546001600160a01b0316331461087e5760405162461bcd60e51b815260040161087590612101565b60405180910390fd5b600754600160a81b900460ff16156108d85760405162461bcd60e51b815260206004820152601760248201527f54726164696e6720697320616c7265616479206f70656e0000000000000000006044820152606401610875565b6007805461ffff60a81b191661010160a81b179055565b6060600380546108fe90612136565b80601f016020809104026020016040519081016040528092919081815260200182805461092a90612136565b80156109775780601f1061094c57610100808354040283529160200191610977565b820191906000526020600020905b81548152906001019060200180831161095a57829003601f168201915b5050505050905090565b600061098e338484610ffe565b5060015b92915050565b60006109a5848484611122565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610a2a5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610875565b610a378533858403610ffe565b506001949350505050565b6005546001600160a01b03163314610a6c5760405162461bcd60e51b815260040161087590612101565b600680546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b81529051829163c45a01559160048083019260209291908290030181865afa158015610ad1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af59190612170565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b669190612170565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015610bb3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd79190612170565b600780546001600160a01b0319166001600160a01b0392831690811782556000908152602160205260409020805460ff191660019081179091559054610c1e9216906118af565b610c2b3082600019610ffe565b6006546001600160a01b031663f305d7193430610c4781610d71565b60008033426040518863ffffffff1660e01b8152600401610c6d9695949392919061218d565b60606040518083038185885af1158015610c8b573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610cb091906121c8565b50505050565b600042601154600f54610cc9919061220c565b10610cd45750600090565b50600190565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161098e918590610d1190869061220c565b610ffe565b6005546000906001600160a01b03163314610d435760405162461bcd60e51b815260040161087590612101565b50600060138190556014819055601581905560178190556018819055601955601e805460ff19169055600190565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b03163314610db65760405162461bcd60e51b815260040161087590612101565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546000906001600160a01b03163314610e2d5760405162461bcd60e51b815260040161087590612101565b50601e805460ff19169055600190565b6060600480546108fe90612136565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015610ece5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610875565b610edb3385858403610ffe565b5060019392505050565b600061098e338484611122565b6000610efc610cb6565b610f065750600090565b610f0e611903565b905090565b6005546001600160a01b03163314610f3d5760405162461bcd60e51b815260040161087590612101565b6001600160a01b038116610fa25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610875565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166110605760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610875565b6001600160a01b0382166110c15760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610875565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166111485760405162461bcd60e51b81526004016108759061221f565b6001600160a01b03821661116e5760405162461bcd60e51b815260040161087590612264565b806000036111875761118283836000611a63565b505050565b601e5460ff16156114dd576005546001600160a01b038481169116148015906111be57506005546001600160a01b03838116911614155b80156111d257506001600160a01b03821615155b80156111e957506001600160a01b03821661dead14155b80156111ff5750600754600160a01b900460ff16155b156114dd57600754600160a81b900460ff16611297576001600160a01b038316600090815260208052604090205460ff168061125257506001600160a01b038216600090815260208052604090205460ff165b6112975760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610875565b6001600160a01b03831660009081526022602052604090205460ff1680156112d857506001600160a01b03821660009081526021602052604090205460ff16155b156113ac57600a5481111561134d5760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610875565b600b5461135983610d71565b611363908361220c565b11156113a75760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610875565b6114dd565b6001600160a01b03821660009081526022602052604090205460ff1680156113ed57506001600160a01b03831660009081526021602052604090205460ff16155b1561146357600a548111156113a75760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610875565b6001600160a01b03821660009081526021602052604090205460ff166114dd57600b5461148f83610d71565b611499908361220c565b11156114dd5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610875565b60006114e830610d71565b600954909150811080159081906115085750600754600160b01b900460ff165b801561151e5750600754600160a01b900460ff16155b801561154357506001600160a01b03851660009081526022602052604090205460ff16155b801561156757506001600160a01b038516600090815260208052604090205460ff16155b801561158b57506001600160a01b038416600090815260208052604090205460ff16155b156115b9576007805460ff60a01b1916600160a01b1790556115ab611bb7565b6007805460ff60a01b191690555b600754600160a01b900460ff161580156115eb57506001600160a01b03841660009081526022602052604090205460ff165b80156115f95750600c5460ff165b80156116145750600e54600f54611610919061220c565b4210155b801561163857506001600160a01b038516600090815260208052604090205460ff16155b1561164757611645611903565b505b6007546001600160a01b038616600090815260208052604090205460ff600160a01b90920482161591168061169357506001600160a01b038516600090815260208052604090205460ff165b1561169c575060005b6000811561189b576001600160a01b03861660009081526022602052604090205460ff1680156116ce57506000601754115b15611796576116f4601f546116ee60175488611d5b90919063ffffffff16565b90611d6e565b90506017546019548261170791906122a7565b61171191906122be565b601c6000828254611722919061220c565b909155505060175460185461173790836122a7565b61174191906122be565b601b6000828254611752919061220c565b9091555050601a5461176390611d7a565b601a5461177090836122a7565b61177a91906122be565b601d600082825461178b919061220c565b9091555061187d9050565b6001600160a01b03871660009081526022602052604090205460ff1680156117c057506000601354115b1561187d576117e0601f546116ee60135488611d5b90919063ffffffff16565b9050601354601554826117f391906122a7565b6117fd91906122be565b601c600082825461180e919061220c565b909155505060135460145461182390836122a7565b61182d91906122be565b601b600082825461183e919061220c565b909155505060165461184f90611d7a565b60165461185c90836122a7565b61186691906122be565b601d6000828254611877919061220c565b90915550505b801561188e5761188e873083611a63565b61189881866122e0565b94505b6118a6878787611a63565b50505050505050565b6001600160a01b038216600081815260226020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b42600f556007546040516370a0823160e01b81526001600160a01b039091166004820152600090819030906370a0823190602401602060405180830381865afa158015611954573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061197891906122f3565b905060006119ad61199a6127106116ee600d5486611d5b90919063ffffffff16565b6119a8633b9aca00856122e0565b611dbb565b905080156119ce576007546119ce906001600160a01b031661dead83611a63565b6007546040805160016209351760e01b0319815290516001600160a01b0390921691829163fff6cae991600480830192600092919082900301818387803b158015611a1857600080fd5b505af1158015611a2c573d6000803e3d6000fd5b50506040517f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d925060009150a16001935050505090565b6001600160a01b038316611a895760405162461bcd60e51b81526004016108759061221f565b6001600160a01b038216611aaf5760405162461bcd60e51b815260040161087590612264565b6001600160a01b03831660009081526020819052604090205481811015611b275760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610875565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290611b5e90849061220c565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611baa91815260200190565b60405180910390a3610cb0565b6000611bc230610d71565b90506000601b54601c54611bd6919061220c565b90506000821580611be5575081155b15611bef57505050565b600954611bfd9060146122a7565b831115611c1557600954611c129060146122a7565b92505b6000600283601c5486611c2891906122a7565b611c3291906122be565b611c3c91906122be565b90506000611c4a8583611dd1565b905047611c5682611ddd565b6000611c624783611dd1565b90506000611c7f876116ee601b5485611d5b90919063ffffffff16565b90506000611c8d82846122e0565b6000601c819055601b5590508515801590611ca85750600081115b15611cfb57611cb78682611f37565b601c54604080518781526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b6008546040516001600160a01b03909116904790600081818185875af1925050503d8060008114611d48576040519150601f19603f3d011682016040523d82523d6000602084013e611d4d565b606091505b505050505050505050505050565b6000611d6782846122a7565b9392505050565b6000611d6782846122be565b600080611d8861dead610d71565b118015611d955750600082115b611da0576001610992565b60646001601f54611db191906122e0565b61099291906122be565b6000818311611dca5781611d67565b5090919050565b6000611d6782846122e0565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611e1257611e1261230c565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611e6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e8f9190612170565b81600181518110611ea257611ea261230c565b6001600160a01b039283166020918202929092010152600654611ec89130911684610ffe565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790611f01908590600090869030904290600401612322565b600060405180830381600087803b158015611f1b57600080fd5b505af1158015611f2f573d6000803e3d6000fd5b505050505050565b600654611f4f9030906001600160a01b031684610ffe565b60065460405163f305d71960e01b81526001600160a01b039091169063f305d719908390611f8e9030908790600090819061dead90429060040161218d565b60606040518083038185885af1158015611fac573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611fd191906121c8565b5050505050565b600060208083528351808285015260005b8181101561200557858101830151858201604001528201611fe9565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461203b57600080fd5b50565b6000806040838503121561205157600080fd5b823561205c81612026565b946020939093013593505050565b60006020828403121561207c57600080fd5b8135611d6781612026565b60008060006060848603121561209c57600080fd5b83356120a781612026565b925060208401356120b781612026565b929592945050506040919091013590565b600080604083850312156120db57600080fd5b82356120e681612026565b915060208301356120f681612026565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c9082168061214a57607f821691505b60208210810361216a57634e487b7160e01b600052602260045260246000fd5b50919050565b60006020828403121561218257600080fd5b8151611d6781612026565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b6000806000606084860312156121dd57600080fd5b8351925060208401519150604084015190509250925092565b634e487b7160e01b600052601160045260246000fd5b80820180821115610992576109926121f6565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b8082028115828204841417610992576109926121f6565b6000826122db57634e487b7160e01b600052601260045260246000fd5b500490565b81810381811115610992576109926121f6565b60006020828403121561230557600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156123725784516001600160a01b03168352938301939183019160010161234d565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220c099a7a9d390cfba2b28a58652a8db4a0b54f4a6562f1af4b9d32e22adfda43264736f6c63430008130033

Deployed Bytecode Sourcemap

16221:13813:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20634:169;;;;;;;;;;;;;:::i;:::-;;3661:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4640:194;;;;;;;;;;-1:-1:-1;4640:194:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;4640:194:0;1023:187:1;17802:63:0;;;;;;;;;;-1:-1:-1;17802:63:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;16298:41;;;;;;;;;;-1:-1:-1;16298:41:0;;;;-1:-1:-1;;;;;16298:41:0;;;;;;-1:-1:-1;;;;;1658:32:1;;;1640:51;;1628:2;1613:18;16298:41:0;1467:230:1;3981:108:0;;;;;;;;;;-1:-1:-1;4069:12:0;;3981:108;;;1848:25:1;;;1836:2;1821:18;3981:108:0;1702:177:1;17035:49:0;;;;;;;;;;;;;;;;16855:36;;;;;;;;;;;;;;;;17488:33;;;;;;;;;;;;;;;;17528:28;;;;;;;;;;;;;;;;17448:33;;;;;;;;;;;;;;;;4842:529;;;;;;;;;;-1:-1:-1;4842:529:0;;;;;:::i;:::-;;:::i;19870:756::-;;;:::i;16387:53::-;;;;;;;;;;;;16433:6;16387:53;;16911:45;;;;;;;;;;;;;;;;16813:33;;;;;;;;;;-1:-1:-1;16813:33:0;;;;;;;;20811:218;;;;;;;;;;;;;:::i;3881:92::-;;;;;;;;;;-1:-1:-1;3881:92:0;;3964:1;2695:36:1;;2683:2;2668:18;3881:92:0;2553:184:1;5379:290:0;;;;;;;;;;-1:-1:-1;5379:290:0;;;;;:::i;:::-;;:::i;21074:309::-;;;;;;;;;;;;;:::i;16346:28::-;;;;;;;;;;-1:-1:-1;16346:28:0;;;;-1:-1:-1;;;;;16346:28:0;;;17565:33;;;;;;;;;;-1:-1:-1;17565:33:0;;;;;;;;17290:28;;;;;;;;;;;;;;;;16617:31;;;;;;;;;;-1:-1:-1;16617:31:0;;;;-1:-1:-1;;;16617:31:0;;;;;;4097:143;;;;;;;;;;-1:-1:-1;4097:143:0;;;;;:::i;:::-;;:::i;1630:148::-;;;;;;;;;;;;;:::i;21391:120::-;;;;;;;;;;;;;:::i;16657:30::-;;;;;;;;;;-1:-1:-1;16657:30:0;;;;-1:-1:-1;;;;;16657:30:0;;;17169:34;;;;;;;;;;;;;;;;988:79;;;;;;;;;;-1:-1:-1;1053:6:0;;-1:-1:-1;;;;;1053:6:0;988:79;;17325:35;;;;;;;;;;;;;;;;3769:104;;;;;;;;;;;;;:::i;17091:35::-;;;;;;;;;;;;;;;;5677:475;;;;;;;;;;-1:-1:-1;5677:475:0;;;;;:::i;:::-;;:::i;16963:29::-;;;;;;;;;;;;;;;;4248:200;;;;;;;;;;-1:-1:-1;4248:200:0;;;;;:::i;:::-;;:::i;17409:30::-;;;;;;;;;;;;;;;;17874:57;;;;;;;;;;-1:-1:-1;17874:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;17001:25;;;;;;;;;;;;;;;;16738:35;;;;;;;;;;;;;;;;17135:27;;;;;;;;;;;;;;;;4456:176;;;;;;;;;;-1:-1:-1;4456:176:0;;;;;:::i;:::-;-1:-1:-1;;;;;4597:18:0;;;4570:7;4597:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4456:176;16696:33;;;;;;;;;;;;;;;;28370:127;;;;;;;;;;;;;:::i;17252:29::-;;;;;;;;;;;;;;;;17210:34;;;;;;;;;;;;;;;;1933:281;;;;;;;;;;-1:-1:-1;1933:281:0;;;;;:::i;:::-;;:::i;17367:35::-;;;;;;;;;;;;;;;;16780:24;;;;;;;;;;;;;;;;16579:31;;;;;;;;;;-1:-1:-1;16579:31:0;;;;-1:-1:-1;;;16579:31:0;;;;;;20634:169;1200:6;;-1:-1:-1;;;;;1200:6:0;338:10;1200:22;1192:67;;;;-1:-1:-1;;;1192:67:0;;;;;;;:::i;:::-;;;;;;;;;20697:11:::1;::::0;-1:-1:-1;;;20697:11:0;::::1;;;20696:12;20688:47;;;::::0;-1:-1:-1;;;20688:47:0;;3698:2:1;20688:47:0::1;::::0;::::1;3680:21:1::0;3737:2;3717:18;;;3710:30;3776:25;3756:18;;;3749:53;3819:18;;20688:47:0::1;3496:347:1::0;20688:47:0::1;20748:11;:18:::0;;-1:-1:-1;;;;20777:18:0;-1:-1:-1;;;20777:18:0;;;20634:169::o;3661:100::-;3715:13;3748:5;3741:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3661:100;:::o;4640:194::-;4748:4;4765:39;338:10;4788:7;4797:6;4765:8;:39::i;:::-;-1:-1:-1;4822:4:0;4640:194;;;;;:::o;4842:529::-;4982:4;4999:36;5009:6;5017:9;5028:6;4999:9;:36::i;:::-;-1:-1:-1;;;;;5075:19:0;;5048:24;5075:19;;;:11;:19;;;;;;;;338:10;5075:33;;;;;;;;5141:26;;;;5119:116;;;;-1:-1:-1;;;5119:116:0;;4435:2:1;5119:116:0;;;4417:21:1;4474:2;4454:18;;;4447:30;4513:34;4493:18;;;4486:62;-1:-1:-1;;;4564:18:1;;;4557:38;4612:19;;5119:116:0;4233:404:1;5119:116:0;5271:57;5280:6;338:10;5321:6;5302:16;:25;5271:8;:57::i;:::-;-1:-1:-1;5359:4:0;;4842:529;-1:-1:-1;;;;4842:529:0:o;19870:756::-;1200:6;;-1:-1:-1;;;;;1200:6:0;338:10;1200:22;1192:67;;;;-1:-1:-1;;;1192:67:0;;;;;;;:::i;:::-;20078:15:::1;:34:::0;;-1:-1:-1;;;;;;20078:34:0::1;20012:42;20078:34:::0;;::::1;::::0;;;20159:26:::1;::::0;;-1:-1:-1;;;20159:26:0;;;;20012:42;;20159:24:::1;::::0;:26:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;20012:42;20159:26:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;20141:70:0::1;;20220:4;20227:16;-1:-1:-1::0;;;;;20227:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20141:110;::::0;-1:-1:-1;;;;;;20141:110:0::1;::::0;;;;;;-1:-1:-1;;;;;5128:15:1;;;20141:110:0::1;::::0;::::1;5110:34:1::0;5180:15;;5160:18;;;5153:43;5045:18;;20141:110:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20125:13;:126:::0;;-1:-1:-1;;;;;;20125:126:0::1;-1:-1:-1::0;;;;;20125:126:0;;::::1;::::0;;::::1;::::0;;-1:-1:-1;20262:55:0;;;:31:::1;:55;::::0;;;;:62;;-1:-1:-1;;20262:62:0::1;-1:-1:-1::0;20262:62:0;;::::1;::::0;;;20382:13;;20345:58:::1;::::0;20382:13:::1;::::0;20345:28:::1;:58::i;:::-;20416:69;20433:4;20448:16;-1:-1:-1::0;;20416:8:0::1;:69::i;:::-;20498:15;::::0;-1:-1:-1;;;;;20498:15:0::1;:31;20537:9;20556:4;20562:24;20556:4:::0;20562:9:::1;:24::i;:::-;20587:1;20589::::0;20591:10:::1;20602:15;20498:120;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;19928:698;19870:756::o:0;20811:218::-;20852:12;20923:15;20900:19;;20883:14;;:36;;;;:::i;:::-;:55;20879:143;;-1:-1:-1;20961:5:0;;20811:218::o;20879:143::-;-1:-1:-1;21006:4:0;;20811:218::o;5379:290::-;338:10;5492:4;5581:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;5581:34:0;;;;;;;;;;5492:4;;5509:130;;5559:7;;5581:47;;5618:10;;5581:47;:::i;:::-;5509:8;:130::i;21074:309::-;1200:6;;21127:4;;-1:-1:-1;;;;;1200:6:0;338:10;1200:22;1192:67;;;;-1:-1:-1;;;1192:67:0;;;;;;;:::i;:::-;-1:-1:-1;21159:1:0::1;21144:12;:16:::0;;;21171:15:::1;:19:::0;;;21201:15:::1;:19:::0;;;21231:13:::1;:17:::0;;;21259:16:::1;:20:::0;;;21290:16:::1;:20:::0;21331:14:::1;:22:::0;;-1:-1:-1;;21331:22:0::1;::::0;;;21074:309;:::o;4097:143::-;-1:-1:-1;;;;;4214:18:0;4187:7;4214:18;;;;;;;;;;;;4097:143::o;1630:148::-;1200:6;;-1:-1:-1;;;;;1200:6:0;338:10;1200:22;1192:67;;;;-1:-1:-1;;;1192:67:0;;;;;;;:::i;:::-;1721:6:::1;::::0;1700:40:::1;::::0;1737:1:::1;::::0;-1:-1:-1;;;;;1721:6:0::1;::::0;1700:40:::1;::::0;1737:1;;1700:40:::1;1751:6;:19:::0;;-1:-1:-1;;;;;;1751:19:0::1;::::0;;1630:148::o;21391:120::-;1200:6;;21442:4;;-1:-1:-1;;;;;1200:6:0;338:10;1200:22;1192:67;;;;-1:-1:-1;;;1192:67:0;;;;;;;:::i;:::-;-1:-1:-1;21459:14:0::1;:22:::0;;-1:-1:-1;;21459:22:0::1;::::0;;;21391:120;:::o;3769:104::-;3825:13;3858:7;3851:14;;;;;:::i;5677:475::-;338:10;5795:4;5839:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;5839:34:0;;;;;;;;;;5906:35;;;;5884:122;;;;-1:-1:-1;;;5884:122:0;;6594:2:1;5884: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;;5884:122:0;6392:401:1;5884:122:0;6042:67;338:10;6065:7;6093:15;6074:16;:34;6042:8;:67::i;:::-;-1:-1:-1;6140:4:0;;5677:475;-1:-1:-1;;;5677:475:0:o;4248:200::-;4359:4;4376:42;338:10;4400:9;4411:6;4376:9;:42::i;28370:127::-;28414:4;28438:11;:9;:11::i;:::-;:51;;-1:-1:-1;28484:5:0;;28370:127::o;28438:51::-;28452:29;:27;:29::i;:::-;28431:58;;28370:127;:::o;1933:281::-;1200:6;;-1:-1:-1;;;;;1200:6:0;338:10;1200:22;1192:67;;;;-1:-1:-1;;;1192:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2036:22:0;::::1;2014:110;;;::::0;-1:-1:-1;;;2014:110:0;;7000:2:1;2014: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;;2014:110:0::1;6798:402:1::0;2014:110:0::1;2161:6;::::0;2140:38:::1;::::0;-1:-1:-1;;;;;2140:38:0;;::::1;::::0;2161:6:::1;::::0;2140:38:::1;::::0;2161:6:::1;::::0;2140:38:::1;2189:6;:17:::0;;-1:-1:-1;;;;;;2189:17:0::1;-1:-1:-1::0;;;;;2189:17:0;;;::::1;::::0;;;::::1;::::0;;1933:281::o;7944:380::-;-1:-1:-1;;;;;8080:19:0;;8072:68;;;;-1:-1:-1;;;8072:68:0;;7407:2:1;8072: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;;8072:68:0;7205:400:1;8072:68:0;-1:-1:-1;;;;;8159:21:0;;8151:68;;;;-1:-1:-1;;;8151:68:0;;7812:2:1;8151: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;;8151:68:0;7610:398:1;8151:68:0;-1:-1:-1;;;;;8232:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;8284:32;;1848:25:1;;;8284:32:0;;1821:18:1;8284:32:0;;;;;;;7944:380;;;:::o;22116:4291::-;-1:-1:-1;;;;;22248:18:0;;22240:68;;;;-1:-1:-1;;;22240:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22327:16:0;;22319:64;;;;-1:-1:-1;;;22319:64:0;;;;;;;:::i;:::-;22400:6;22410:1;22400:11;22396:93;;22428:28;22444:4;22450:2;22454:1;22428:15;:28::i;:::-;22116:4291;;;:::o;22396:93::-;22515:14;;;;22511:1693;;;1053:6;;-1:-1:-1;;;;;22568:15:0;;;1053:6;;22568:15;;;;:49;;-1:-1:-1;1053:6:0;;-1:-1:-1;;;;;22604:13:0;;;1053:6;;22604:13;;22568:49;:86;;;;-1:-1:-1;;;;;;22638:16:0;;;;22568:86;:128;;;;-1:-1:-1;;;;;;22675:21:0;;22689:6;22675:21;;22568:128;:158;;;;-1:-1:-1;22718:8:0;;-1:-1:-1;;;22718:8:0;;;;22717:9;22568:158;22546:1647;;;22768:11;;-1:-1:-1;;;22768:11:0;;;;22763:148;;-1:-1:-1;;;;;22812:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;22841:23:0;;;;;;:19;:23;;;;;;;;22812:52;22804:87;;;;-1:-1:-1;;;22804:87:0;;9025:2:1;22804:87:0;;;9007:21:1;9064:2;9044:18;;;9037:30;-1:-1:-1;;;9083:18:1;;;9076:52;9145:18;;22804:87:0;8823:346:1;22804:87:0;-1:-1:-1;;;;;23003:31:0;;;;;;:25;:31;;;;;;;;:92;;;;-1:-1:-1;;;;;;23060:35:0;;;;;;:31;:35;;;;;;;;23059:36;23003:92;22977:1183;;;23182:20;;23172:6;:30;;23138:169;;;;-1:-1:-1;;;23138:169:0;;9376:2:1;23138:169:0;;;9358:21:1;9415:2;9395:18;;;9388:30;9454:34;9434:18;;;9427:62;-1:-1:-1;;;9505:18:1;;;9498:51;9566:19;;23138:169:0;9174:417:1;23138:169:0;23390:9;;23373:13;23383:2;23373:9;:13::i;:::-;23364:22;;:6;:22;:::i;:::-;:35;;23330:140;;;;-1:-1:-1;;;23330:140:0;;9798:2:1;23330:140:0;;;9780:21:1;9837:2;9817:18;;;9810:30;-1:-1:-1;;;9856:18:1;;;9849:49;9915:18;;23330:140:0;9596:343:1;23330:140:0;22977:1183;;;-1:-1:-1;;;;;23604:29:0;;;;;;:25;:29;;;;;;;;:92;;;;-1:-1:-1;;;;;;23659:37:0;;;;;;:31;:37;;;;;;;;23658:38;23604:92;23578:582;;;23783:20;;23773:6;:30;;23739:170;;;;-1:-1:-1;;;23739:170:0;;10146:2:1;23739:170:0;;;10128:21:1;10185:2;10165:18;;;10158:30;10224:34;10204:18;;;10197:62;-1:-1:-1;;;10275:18:1;;;10268:52;10337:19;;23739:170:0;9944:418:1;23578:582:0;-1:-1:-1;;;;;23940:35:0;;;;;;:31;:35;;;;;;;;23935:225;;24060:9;;24043:13;24053:2;24043:9;:13::i;:::-;24034:22;;:6;:22;:::i;:::-;:35;;24000:140;;;;-1:-1:-1;;;24000:140:0;;9798:2:1;24000:140:0;;;9780:21:1;9837:2;9817:18;;;9810:30;-1:-1:-1;;;9856:18:1;;;9849:49;9915:18;;24000:140:0;9596:343:1;24000:140:0;24216:28;24247:24;24265:4;24247:9;:24::i;:::-;24323:18;;24216:55;;-1:-1:-1;24299:42:0;;;;;;;24372:35;;-1:-1:-1;24396:11:0;;-1:-1:-1;;;24396:11:0;;;;24372:35;:61;;;;-1:-1:-1;24425:8:0;;-1:-1:-1;;;24425:8:0;;;;24424:9;24372:61;:110;;;;-1:-1:-1;;;;;;24451:31:0;;;;;;:25;:31;;;;;;;;24450:32;24372:110;:153;;;;-1:-1:-1;;;;;;24500:25:0;;;;;;:19;:25;;;;;;;;24499:26;24372:153;:194;;;;-1:-1:-1;;;;;;24543:23:0;;;;;;:19;:23;;;;;;;;24542:24;24372:194;24354:326;;;24593:8;:15;;-1:-1:-1;;;;24593:15:0;-1:-1:-1;;;24593:15:0;;;24625:10;:8;:10::i;:::-;24652:8;:16;;-1:-1:-1;;;;24652:16:0;;;24354:326;24713:8;;-1:-1:-1;;;24713:8:0;;;;24712:9;:55;;;;-1:-1:-1;;;;;;24738:29:0;;;;;;:25;:29;;;;;;;;24712:55;:85;;;;-1:-1:-1;24784:13:0;;;;24712:85;:153;;;;;24850:15;;24833:14;;:32;;;;:::i;:::-;24814:15;:51;;24712:153;:196;;;;-1:-1:-1;;;;;;24883:25:0;;;;;;:19;:25;;;;;;;;24882:26;24712:196;24694:282;;;24935:29;:27;:29::i;:::-;;24694:282;25014:8;;-1:-1:-1;;;;;25124:25:0;;24998:12;25124:25;;;:19;:25;;;;;;25014:8;-1:-1:-1;;;25014:8:0;;;;;25013:9;;25124:25;;:52;;-1:-1:-1;;;;;;25153:23:0;;;;;;:19;:23;;;;;;;;25124:52;25120:100;;;-1:-1:-1;25203:5:0;25120:100;25232:12;25337:7;25333:1021;;;-1:-1:-1;;;;;25389:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;25438:1;25422:13;;:17;25389:50;25385:820;;;25467:45;25497:14;;25467:25;25478:13;;25467:6;:10;;:25;;;;:::i;:::-;:29;;:45::i;:::-;25460:52;;25581:13;;25561:16;;25554:4;:23;;;;:::i;:::-;25553:41;;;;:::i;:::-;25531:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;25663:13:0;;25643:16;;25636:23;;:4;:23;:::i;:::-;25635:41;;;;:::i;:::-;25613:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;25749:11:0;;25735:26;;:13;:26::i;:::-;25720:11;;25713:18;;:4;:18;:::i;:::-;25712:49;;;;:::i;:::-;25695:13;;:66;;;;;;;:::i;:::-;;;;-1:-1:-1;25385:820:0;;-1:-1:-1;25385:820:0;;-1:-1:-1;;;;;25823:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;25873:1;25858:12;;:16;25823:51;25819:386;;;25902:44;25931:14;;25902:24;25913:12;;25902:6;:10;;:24;;;;:::i;:44::-;25895:51;;26014:12;;25995:15;;25988:4;:22;;;;:::i;:::-;25987:39;;;;:::i;:::-;25965:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;26094:12:0;;26075:15;;26068:22;;:4;:22;:::i;:::-;26067:39;;;;:::i;:::-;26045:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;26178:10:0;;26164:25;;:13;:25::i;:::-;26150:10;;26143:17;;:4;:17;:::i;:::-;26142:47;;;;:::i;:::-;26125:13;;:64;;;;;;;:::i;:::-;;;;-1:-1:-1;;25819:386:0;26225:8;;26221:91;;26254:42;26270:4;26284;26291;26254:15;:42::i;:::-;26328:14;26338:4;26328:14;;:::i;:::-;;;25333:1021;26366:33;26382:4;26388:2;26392:6;26366:15;:33::i;:::-;22229:4178;;;;22116:4291;;;:::o;21920:188::-;-1:-1:-1;;;;;22003:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;22003:39:0;;;;;;;;;;22060:40;;22003:39;;:31;22060:40;;;21920:188;;:::o;27537:823::-;27630:15;27613:14;:32;27746:13;;27731:29;;-1:-1:-1;;;27731:29:0;;-1:-1:-1;;;;;27746:13:0;;;27731:29;;;1640:51:1;27594:4:0;;;;27731;;:14;;1613:18:1;;27731:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27700:60;;27810:20;27833:110;27837:77;27898:5;27837:42;27862:16;;27837:20;:24;;:42;;;;:::i;:77::-;27916:26;27939:3;27916:20;:26;:::i;:::-;27833:3;:110::i;:::-;27810:133;-1:-1:-1;28048:16:0;;28044:110;;28097:13;;28081:61;;-1:-1:-1;;;;;28097:13:0;28120:6;28129:12;28081:15;:61::i;:::-;28266:13;;28291:11;;;-1:-1:-1;;;;;;28291:11:0;;;;-1:-1:-1;;;;;28266:13:0;;;;;;28291:9;;:11;;;;;28229:19;;28291:11;;;;;;;28229:19;28266:13;28291:11;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;28318:12:0;;;;-1:-1:-1;28318:12:0;;-1:-1:-1;28318:12:0;28348:4;28341:11;;;;;27537:823;:::o;6160:770::-;-1:-1:-1;;;;;6300:20:0;;6292:70;;;;-1:-1:-1;;;6292:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6381:23:0;;6373:71;;;;-1:-1:-1;;;6373:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6541:17:0;;6517:21;6541:17;;;;;;;;;;;6591:23;;;;6569:111;;;;-1:-1:-1;;;6569:111:0;;11286:2:1;6569: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;;6569:111:0;11084:402:1;6569:111:0;-1:-1:-1;;;;;6716:17:0;;;:9;:17;;;;;;;;;;;6736:22;;;6716:42;;6780:20;;;;;;;;:30;;6752:6;;6716:9;6780:30;;6752:6;;6780:30;:::i;:::-;;;;;;;;6845:9;-1:-1:-1;;;;;6828:35:0;6837:6;-1:-1:-1;;;;;6828:35:0;;6856:6;6828:35;;;;1848:25:1;;1836:2;1821:18;;1702:177;6828:35:0;;;;;;;;6876:46;22116:4291;28507:1522;28546:23;28572:24;28590:4;28572:9;:24::i;:::-;28546:50;;28607:25;28656:18;;28635;;:39;;;;:::i;:::-;28607:67;-1:-1:-1;28685:12:0;28714:20;;;:46;;-1:-1:-1;28738:22:0;;28714:46;28710:85;;;28777:7;;;28507:1522::o;28710:85::-;28829:18;;:23;;28850:2;28829:23;:::i;:::-;28811:15;:41;28807:115;;;28887:18;;:23;;28908:2;28887:23;:::i;:::-;28869:41;;28807:115;28983:23;29096:1;29063:17;29028:18;;29010:15;:36;;;;:::i;:::-;29009:71;;;;:::i;:::-;:88;;;;:::i;:::-;28983:114;-1:-1:-1;29108:26:0;29137:36;:15;28983:114;29137:19;:36::i;:::-;29108:65;-1:-1:-1;29214:21:0;29248:36;29108:65;29248:16;:36::i;:::-;29297:18;29318:44;:21;29344:17;29318:25;:44::i;:::-;29297:65;;29375:23;29401:81;29454:17;29401:34;29416:18;;29401:10;:14;;:34;;;;:::i;:81::-;29375:107;-1:-1:-1;29495:23:0;29521:28;29375:107;29521:10;:28;:::i;:::-;29583:1;29562:18;:22;;;29595:18;:22;29495:54;-1:-1:-1;29634:19:0;;;;;:42;;;29675:1;29657:15;:19;29634:42;29630:278;;;29693:46;29706:15;29723;29693:12;:46::i;:::-;29863:18;;29759:137;;;11693:25:1;;;11749:2;11734:18;;11727:34;;;11777:18;;;11770:34;;;;29759:137:0;;;;;;11681:2:1;29759:137:0;;;29630:278;29942:15;;29934:87;;-1:-1:-1;;;;;29942:15:0;;;;29985:21;;29934:87;;;;29985:21;29942:15;29934:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;28507:1522:0:o;10073:98::-;10131:7;10158:5;10162:1;10158;:5;:::i;:::-;10151:12;10073:98;-1:-1:-1;;;10073:98:0:o;10179:::-;10237:7;10264:5;10268:1;10264;:5;:::i;21745:167::-;21805:7;21857:1;21832:22;16433:6;21832:9;:22::i;:::-;:26;:37;;;;;21868:1;21862:3;:7;21832:37;:72;;21903:1;21832:72;;;21896:3;21891:1;21874:14;;:18;;;;:::i;:::-;21873:26;;;;:::i;21632:105::-;21689:7;21719:1;21715;:5;21714:15;;21728:1;21714:15;;;-1:-1:-1;21724:1:0;;21632:105;-1:-1:-1;21632:105:0:o;9967:98::-;10025:7;10052:5;10056:1;10052;:5;:::i;26415:589::-;26565:16;;;26579:1;26565:16;;;;;;;;26541:21;;26565:16;;;;;;;;;;-1:-1:-1;26565:16:0;26541:40;;26610:4;26592;26597:1;26592:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;26592:23:0;;;:7;;;;;;;;;;:23;;;;26636:15;;:22;;;-1:-1:-1;;;26636:22:0;;;;:15;;;;;:20;;:22;;;;;26592:7;;26636:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26626:4;26631:1;26626:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;26626:32:0;;;:7;;;;;;;;;:32;26703:15;;26671:62;;26688:4;;26703:15;26721:11;26671:8;:62::i;:::-;26772:15;;:224;;-1:-1:-1;;;26772:224:0;;-1:-1:-1;;;;;26772:15:0;;;;:66;;:224;;26853:11;;26772:15;;26923:4;;26950;;26970:15;;26772:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26470:534;26415:589;:::o;27012:517::-;27192:15;;27160:62;;27177:4;;-1:-1:-1;;;;;27192:15:0;27210:11;27160:8;:62::i;:::-;27265:15;;:256;;-1:-1:-1;;;27265:256:0;;-1:-1:-1;;;;;27265:15:0;;;;:31;;27304:9;;27265:256;;27337:4;;27357:11;;27265:15;;;;16433:6;;27495:15;;27265:256;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;27012: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:356::-;3337:2;3319:21;;;3356:18;;;3349:30;3415:34;3410:2;3395:18;;3388:62;3482:2;3467:18;;3135:356::o;3848:380::-;3927:1;3923:12;;;;3970;;;3991:61;;4045:4;4037:6;4033:17;4023:27;;3991:61;4098:2;4090:6;4087:14;4067:18;4064:38;4061:161;;4144:10;4139:3;4135:20;4132:1;4125:31;4179:4;4176:1;4169:15;4207:4;4204:1;4197:15;4061:161;;3848:380;;;:::o;4642:251::-;4712:6;4765:2;4753:9;4744:7;4740:23;4736:32;4733:52;;;4781:1;4778;4771:12;4733:52;4813:9;4807:16;4832:31;4857:5;4832:31;:::i;5207:607::-;-1:-1:-1;;;;;5566:15:1;;;5548:34;;5613:2;5598:18;;5591:34;;;;5656:2;5641:18;;5634:34;;;;5699:2;5684:18;;5677:34;;;;5748:15;;;5742:3;5727:19;;5720:44;5528:3;5780:19;;5773:35;;;;5497:3;5482:19;;5207:607::o;5819:306::-;5907:6;5915;5923;5976:2;5964:9;5955:7;5951:23;5947:32;5944:52;;;5992:1;5989;5982:12;5944:52;6021:9;6015:16;6005:26;;6071:2;6060:9;6056:18;6050:25;6040:35;;6115:2;6104:9;6100:18;6094:25;6084:35;;5819:306;;;;;:::o;6130:127::-;6191:10;6186:3;6182:20;6179:1;6172:31;6222:4;6219:1;6212:15;6246:4;6243:1;6236:15;6262:125;6327:9;;;6348:10;;;6345:36;;;6361:18;;:::i;8013:401::-;8215:2;8197:21;;;8254:2;8234:18;;;8227:30;8293:34;8288:2;8273:18;;8266:62;-1:-1:-1;;;8359:2:1;8344:18;;8337:35;8404:3;8389:19;;8013:401::o;8419:399::-;8621:2;8603:21;;;8660:2;8640:18;;;8633:30;8699:34;8694:2;8679:18;;8672:62;-1:-1:-1;;;8765:2:1;8750:18;;8743:33;8808:3;8793:19;;8419:399::o;10367:168::-;10440:9;;;10471;;10488:15;;;10482:22;;10468:37;10458:71;;10509:18;;:::i;10540:217::-;10580:1;10606;10596:132;;10650:10;10645:3;10641:20;10638:1;10631:31;10685:4;10682:1;10675:15;10713:4;10710:1;10703:15;10596:132;-1:-1:-1;10742:9:1;;10540:217::o;10762:128::-;10829:9;;;10850:11;;;10847:37;;;10864:18;;:::i;10895:184::-;10965:6;11018:2;11006:9;10997:7;10993:23;10989:32;10986:52;;;11034:1;11031;11024:12;10986:52;-1:-1:-1;11057:16:1;;10895:184;-1:-1:-1;10895:184:1: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://c099a7a9d390cfba2b28a58652a8db4a0b54f4a6562f1af4b9d32e22adfda432
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.