ETH Price: $2,720.35 (-8.99%)
 

Overview

Max Total Supply

1,000,000,000 SPEED

Holders

72

Transfers

-
0

Market

Onchain Market Cap

-

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

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:
SPEED

Compiler Version
v0.8.28+commit.7893614a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at Etherscan.io on 2024-11-28
*/

// SPDX-License-Identifier: MIT

/*

https://speed-token.com

https://x.com/SpeedTokenETH

https://t.me/SpeedEntry

*/

pragma solidity ^0.8.28;

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

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

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

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

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _transferOwnership(_msgSender());
    }

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

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

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

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

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

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

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


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

    // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp;
    bool public transferDelayEnabled = false;

    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyDevFee;

    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellDevFee;

    uint256 public tokensForMarkets;
    uint256 public tokensForDev;

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

    bool private swapping;

    address public marketerWallet;
    address public DevsWallet;

    uint256 public maxTx;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallets;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;

    mapping(address => bool) private _isBlackList;
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedmaxTx;

    mapping(address => bool) public automatedMarketMakerPairs;

    event UpdateUniswapV2Router(
        address indexed newAddress,
        address indexed oldAddress
    );

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event marketerWalletUpdated(
        address indexed newWallet,
        address indexed olDevsWalletallet
    );

    event DevsWalletUpdated(
        address indexed newWallet,
        address indexed olDevsWalletallet
    );

    constructor() ERC20("Speed Terminal", unicode"SPEED") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

        uint256 _buyMarketingFee = 25;
        uint256 _buyDevFee = 0;

        uint256 _sellMarketingFee = 25;
        uint256 _sellDevFee = 0;

        uint256 totalSupply = 1000000000 * 1e18;

        maxTx = (totalSupply * 10) / 1000;
        maxWallets = (totalSupply * 10) / 1000;
        swapTokensAtAmount = (totalSupply * 3) / 10000;

        excludeFromMaxTx(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;

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

        buyMarketingFee = _buyMarketingFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyMarketingFee + buyDevFee;

        sellMarketingFee = _sellMarketingFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellMarketingFee + sellDevFee;

        marketerWallet = address(0x6Cf770f9974961f520Fb007881AF53779C6fEd02);
        DevsWallet = address(0x6Cf770f9974961f520Fb007881AF53779C6fEd02);

        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);

        excludeFromMaxTx(owner(), true);
        excludeFromMaxTx(address(this), true);
        excludeFromMaxTx(address(0xdead), true);

        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
    }

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

    function updateSwapTokensAtAmount(uint256 newAmount)
        external
        onlyOwner
        returns (bool)
    {
        require(
            newAmount >= (totalSupply() * 1) / 100000,
            "Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            newAmount <= (totalSupply() * 5) / 1000,
            "Swap amount cannot be higher than 0.5% total supply."
        );
        swapTokensAtAmount = newAmount;
        return true;
    }

    function setMaxTransaction(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 1) / 1000) / 1e18,
            "Cannot set maxTx lower than 0.1%"
        );
        maxTx = newNum * (10**18);
    }

    function setMaxWallet(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 5) / 1000) / 1e18,
            "Cannot set maxWallets lower than 0.5%"
        );
        maxWallets = newNum * (10**18);
    }


    function removeTransferDelay() external onlyOwner returns (bool) {
        transferDelayEnabled = false;
        return true;
    }

    function randNamrqwghortqw() external onlyOwner returns (bool) {
        transferDelayEnabled = false;
        return true;
    }


    function excludeFromMaxTx(address updAds, bool isEx)
        public
        onlyOwner
    {
        _isExcludedmaxTx[updAds] = isEx;
    }

        function excludeFromTxLimit(address updAds, bool isEx)
        public
        onlyOwner
    {
        _isExcludedmaxTx[updAds] = isEx;
    }

    function updateSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
    }
    
    function updateMarketingWallet(address newmarketerWallet) external onlyOwner {
        emit marketerWalletUpdated(newmarketerWallet, marketerWallet);
        marketerWallet = newmarketerWallet;
    }

    function updateDevWallet(address newWallet) external onlyOwner {
        emit DevsWalletUpdated(newWallet, DevsWallet);
        DevsWallet = newWallet;
    }

    function setFees(
        uint256 _buyMarketingFee,
        uint256 _buyDevFee,
        uint256 _sellMarketingFee,
        uint256 _sellDevFee) external onlyOwner {
        buyMarketingFee = _buyMarketingFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyMarketingFee + buyDevFee;
        sellMarketingFee = _sellMarketingFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellMarketingFee + sellDevFee;
        require(buyTotalFees <= 99, "Must keep fees at 75% or less");
        require(sellTotalFees <= 99, "Must keep fees at 75% or less");
    }

    function setBuyTax(
        uint256 _marketingFee,
        uint256 _devFee
    ) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyDevFee = _devFee;
        buyTotalFees = buyMarketingFee + buyDevFee;
        require(buyTotalFees <= 99, "Must keep fees at 75% or less");
    }

    function setSellTax(
        uint256 _marketingFee,
        uint256 _devFee
    ) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellDevFee = _devFee;
        sellTotalFees = sellMarketingFee + sellDevFee;
        require(sellTotalFees <= 99, "Must keep fees at 75% or less");
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function setAutomatedMarketMakerPair(address pair, bool value)
        public
        onlyOwner
    {
        require(
            pair != uniswapV2Pair,
            "The pair cannot be removed from automatedMarketMakerPairs"
        );

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function isExcludedFromFees(address account) public view returns (bool) {
        return _isExcludedFromFees[account];
    }

    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");
        require(!_isBlackList[from], "[from] black list");
        require(!_isBlackList[to], "[to] black list");

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

        if (limitsInEffect) {
            if (from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping) {
                if (!tradingActive) {
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.
                if (transferDelayEnabled) {
                    if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)) {
                        require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed.");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }

                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedmaxTx[to]) {
                    require(amount <= maxTx, "Buy transfer amount exceeds the maxTx.");
                    require(amount + balanceOf(to) <= maxWallets, "Max wallet exceeded");
                }
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedmaxTx[from]) {
                    require(amount <= maxTx, "Sell transfer amount exceeds the maxTx.");
                }
                else if (!_isExcludedmaxTx[to]) {
                    require(amount + balanceOf(to) <= maxWallets, "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;
        }

        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(100);
                tokensForDev += (fees * sellDevFee) / sellTotalFees;
                tokensForMarkets += (fees * sellMarketingFee) / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForDev += (fees * buyDevFee) / buyTotalFees;
                tokensForMarkets += (fees * buyMarketingFee) / buyTotalFees;
            }

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

            amount -= fees;
        }

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

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

    function manualSwap(uint256 amount) external {
        require(_msgSender() == marketerWallet);
        require(amount <= balanceOf(address(this)) && amount > 0, "Wrong amount");
        swapTokensForEth(amount);
    }


    function swapTokensForEth(uint256 tokenAmount) private {
        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 swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForMarkets + tokensForDev;
        bool success;

        if (contractBalance == 0) {
            return;
        }

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

        uint256 initialETHBalance = address(this).balance;
        swapTokensForEth(contractBalance);

        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);

        tokensForMarkets = 0;
        tokensForDev = 0;

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

Contract Security Audit

Contract ABI

API
[{"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":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"olDevsWalletallet","type":"address"}],"name":"DevsWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","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":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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"olDevsWalletallet","type":"address"}],"name":"marketerWalletUpdated","type":"event"},{"inputs":[],"name":"DevsWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedmaxTx","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","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":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromTxLimit","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":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketerWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallets","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":"randNamrqwghortqw","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","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":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"setBuyTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyMarketingFee","type":"uint256"},{"internalType":"uint256","name":"_buyDevFee","type":"uint256"},{"internalType":"uint256","name":"_sellMarketingFee","type":"uint256"},{"internalType":"uint256","name":"_sellDevFee","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"setMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"setSellTax","outputs":[],"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":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarkets","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":"tradingActive","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":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newmarketerWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526007805460ff191690556016805462ffffff19166001179055348015610028575f5ffd5b506040518060400160405280600e81526020016d14dc1959590815195c9b5a5b985b60921b8152506040518060400160405280600581526020016414d411515160da1b815250816003908161007d91906106cc565b50600461008a82826106cc565b5050506100a361009e61039160201b60201c565b610395565b737a250d5630b4cf539739df2c5dacb4c659f2488d60195f81816b033b2e3c9fd0803ce80000006103e86100d882600a61079a565b6100e291906107b7565b6013556103e86100f382600a61079a565b6100fd91906107b7565b60155561271061010e82600361079a565b61011891906107b7565b6014556101268660016103e6565b6001600160a01b03861660808190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801561016e573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061019291906107d6565b6001600160a01b031663c9c6539630886001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101dd573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061020191906107d6565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af115801561024b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061026f91906107d6565b601080546001600160a01b0319166001600160a01b039290921691821790556102999060016103e6565b6010546102b0906001600160a01b0316600161045c565b6009859055600a8490556102c48486610803565b600855600c839055600d8290556102db8284610803565b600b5560118054736cf770f9974961f520fb007881af53779c6fed026001600160a01b031991821681179092556012805490911690911790556103306103296005546001600160a01b031690565b60016104af565b61033b3060016104af565b61034861dead60016104af565b61036461035d6005546001600160a01b031690565b60016103e6565b61036f3060016103e6565b61037c61dead60016103e6565b6103863382610554565b505050505050610816565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6005546001600160a01b031633146104325760405162461bcd60e51b815260206004820181905260248201525f51602061303d5f395f51905f5260448201526064015b60405180910390fd5b6001600160a01b03919091165f908152601960205260409020805460ff1916911515919091179055565b6001600160a01b0382165f818152601a6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6005546001600160a01b031633146104f65760405162461bcd60e51b815260206004820181905260248201525f51602061303d5f395f51905f526044820152606401610429565b6001600160a01b0382165f81815260186020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b0382166105aa5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610429565b8060025f8282546105bb9190610803565b90915550506001600160a01b0382165f90815260208190526040812080548392906105e7908490610803565b90915550506040518181526001600160a01b038316905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b634e487b7160e01b5f52604160045260245ffd5b600181811c9082168061065d57607f821691505b60208210810361067b57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561063057805f5260205f20601f840160051c810160208510156106a65750805b601f840160051c820191505b818110156106c5575f81556001016106b2565b5050505050565b81516001600160401b038111156106e5576106e5610635565b6106f9816106f38454610649565b84610681565b6020601f82116001811461072b575f83156107145750848201515b5f19600385901b1c1916600184901b1784556106c5565b5f84815260208120601f198516915b8281101561075a578785015182556020948501946001909201910161073a565b508482101561077757868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176107b1576107b1610786565b92915050565b5f826107d157634e487b7160e01b5f52601260045260245ffd5b500490565b5f602082840312156107e6575f5ffd5b81516001600160a01b03811681146107fc575f5ffd5b9392505050565b808201808211156107b1576107b1610786565b6080516127f361084a5f395f81816103da015281816118ac01528181611fa60152818161205d015261209901526127f35ff3fe608060405260043610610344575f3560e01c80638a8c523c116101bd578063b62496f5116100f2578063d85ba06311610092578063e5f04c391161006d578063e5f04c391461094f578063e6819ba714610963578063f2fde38b14610991578063f8686f071461094f575f5ffd5b8063d85ba063146108e1578063dd62ed3e146108f6578063e2f456051461093a575f5ffd5b8063c0246668116100cd578063c02466681461088a578063c876d0b9146108a9578063d257b34f146108c2578063d4c989d3146104a4575f5ffd5b8063b62496f51461081f578063b70143c91461084d578063bbc0c7421461086c575f5ffd5b80639fccce321161015d578063a72f458611610138578063a72f4586146107a3578063a9059cbb146107c2578063aacebbe3146107e1578063ab5a188714610800575f5ffd5b80639fccce321461075a578063a0d82dc51461076f578063a457c2d714610784575f5ffd5b8063924de9b711610198578063924de9b7146106f357806395d89b41146107125780639a7a23d6146107265780639c3b4fdc14610745575f5ffd5b80638a8c523c146106ad5780638da5cb5b146106c157806392136913146106de575f5ffd5b806339509351116102935780636ddd171311610233578063715018a61161020e578063715018a61461065b5780637437681e1461066f578063751039fc146106845780637bce5a0414610698575f5ffd5b80636ddd1713146105e95780636fcba3771461060857806370a0823114610627575f5ffd5b80634fbee1931161026e5780634fbee193146105695780635d0044ca146105a057806361528e27146105bf5780636a486a8e146105d4575f5ffd5b8063395093511461051257806349bd5a5e146105315780634a62bb6514610550575f5ffd5b806323b872dd116102fe57806330280a71116102d957806330280a71146104a457806330a136ad146104c35780633103b39e146104d8578063313ce567146104f7575f5ffd5b806323b872dd14610451578063247b912d1461047057806327c8f8351461048f575f5ffd5b806305a1f36d1461034f57806306fdde0314610370578063095ea7b31461039a5780631694505e146103c957806318160ddd146104145780631816467f14610432575f5ffd5b3661034b57005b5f5ffd5b34801561035a575f5ffd5b5061036e6103693660046123be565b6109b0565b005b34801561037b575f5ffd5b50610384610a20565b60405161039191906123de565b60405180910390f35b3480156103a5575f5ffd5b506103b96103b4366004612427565b610ab0565b6040519015158152602001610391565b3480156103d4575f5ffd5b506103fc7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610391565b34801561041f575f5ffd5b506002545b604051908152602001610391565b34801561043d575f5ffd5b5061036e61044c366004612451565b610ac6565b34801561045c575f5ffd5b506103b961046b36600461246c565b610b4c565b34801561047b575f5ffd5b5061036e61048a3660046123be565b610bf4565b34801561049a575f5ffd5b506103fc61dead81565b3480156104af575f5ffd5b5061036e6104be3660046124b9565b610c57565b3480156104ce575f5ffd5b5061042460155481565b3480156104e3575f5ffd5b506012546103fc906001600160a01b031681565b348015610502575f5ffd5b5060405160128152602001610391565b34801561051d575f5ffd5b506103b961052c366004612427565b610cab565b34801561053c575f5ffd5b506010546103fc906001600160a01b031681565b34801561055b575f5ffd5b506016546103b99060ff1681565b348015610574575f5ffd5b506103b9610583366004612451565b6001600160a01b03165f9081526018602052604090205460ff1690565b3480156105ab575f5ffd5b5061036e6105ba3660046124ec565b610ce6565b3480156105ca575f5ffd5b50610424600e5481565b3480156105df575f5ffd5b50610424600b5481565b3480156105f4575f5ffd5b506016546103b99062010000900460ff1681565b348015610613575f5ffd5b5061036e610622366004612503565b610db9565b348015610632575f5ffd5b50610424610641366004612451565b6001600160a01b03165f9081526020819052604090205490565b348015610666575f5ffd5b5061036e610e5d565b34801561067a575f5ffd5b5061042460135481565b34801561068f575f5ffd5b506103b9610e92565b3480156106a3575f5ffd5b5061042460095481565b3480156106b8575f5ffd5b5061036e610ece565b3480156106cc575f5ffd5b506005546001600160a01b03166103fc565b3480156106e9575f5ffd5b50610424600c5481565b3480156106fe575f5ffd5b5061036e61070d366004612532565b610f0b565b34801561071d575f5ffd5b50610384610f51565b348015610731575f5ffd5b5061036e6107403660046124b9565b610f60565b348015610750575f5ffd5b50610424600a5481565b348015610765575f5ffd5b50610424600f5481565b34801561077a575f5ffd5b50610424600d5481565b34801561078f575f5ffd5b506103b961079e366004612427565b611018565b3480156107ae575f5ffd5b506011546103fc906001600160a01b031681565b3480156107cd575f5ffd5b506103b96107dc366004612427565b6110b0565b3480156107ec575f5ffd5b5061036e6107fb366004612451565b6110bc565b34801561080b575f5ffd5b5061036e61081a3660046124ec565b611142565b34801561082a575f5ffd5b506103b9610839366004612451565b601a6020525f908152604090205460ff1681565b348015610858575f5ffd5b5061036e6108673660046124ec565b611207565b348015610877575f5ffd5b506016546103b990610100900460ff1681565b348015610895575f5ffd5b5061036e6108a43660046124b9565b61128a565b3480156108b4575f5ffd5b506007546103b99060ff1681565b3480156108cd575f5ffd5b506103b96108dc3660046124ec565b611312565b3480156108ec575f5ffd5b5061042460085481565b348015610901575f5ffd5b5061042461091036600461254b565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b348015610945575f5ffd5b5061042460145481565b34801561095a575f5ffd5b506103b9611468565b34801561096e575f5ffd5b506103b961097d366004612451565b60196020525f908152604090205460ff1681565b34801561099c575f5ffd5b5061036e6109ab366004612451565b6114a4565b6005546001600160a01b031633146109e35760405162461bcd60e51b81526004016109da90612582565b60405180910390fd5b6009829055600a8190556109f781836125cb565b600881905560631015610a1c5760405162461bcd60e51b81526004016109da906125de565b5050565b606060038054610a2f90612615565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5b90612615565b8015610aa65780601f10610a7d57610100808354040283529160200191610aa6565b820191905f5260205f20905b815481529060010190602001808311610a8957829003601f168201915b5050505050905090565b5f610abc33848461153c565b5060015b92915050565b6005546001600160a01b03163314610af05760405162461bcd60e51b81526004016109da90612582565b6012546040516001600160a01b03918216918316907f9e3da7e72199adc414f24e73d3985f288cce5edbc5c370e29af583afdd78c2c2905f90a3601280546001600160a01b0319166001600160a01b0392909216919091179055565b5f610b5884848461165f565b6001600160a01b0384165f90815260016020908152604080832033845290915290205482811015610bdc5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084016109da565b610be9853385840361153c565b506001949350505050565b6005546001600160a01b03163314610c1e5760405162461bcd60e51b81526004016109da90612582565b600c829055600d819055610c3281836125cb565b600b81905560631015610a1c5760405162461bcd60e51b81526004016109da906125de565b6005546001600160a01b03163314610c815760405162461bcd60e51b81526004016109da90612582565b6001600160a01b03919091165f908152601960205260409020805460ff1916911515919091179055565b335f8181526001602090815260408083206001600160a01b03871684529091528120549091610abc918590610ce19086906125cb565b61153c565b6005546001600160a01b03163314610d105760405162461bcd60e51b81526004016109da90612582565b670de0b6b3a76400006103e8610d2560025490565b610d3090600561264d565b610d3a9190612664565b610d449190612664565b811015610da15760405162461bcd60e51b815260206004820152602560248201527f43616e6e6f7420736574206d617857616c6c657473206c6f776572207468616e60448201526420302e352560d81b60648201526084016109da565b610db381670de0b6b3a764000061264d565b60155550565b6005546001600160a01b03163314610de35760405162461bcd60e51b81526004016109da90612582565b6009849055600a839055610df783856125cb565b600855600c829055600d819055610e0e81836125cb565b600b5560085460631015610e345760405162461bcd60e51b81526004016109da906125de565b6063600b541115610e575760405162461bcd60e51b81526004016109da906125de565b50505050565b6005546001600160a01b03163314610e875760405162461bcd60e51b81526004016109da90612582565b610e905f611ead565b565b6005545f906001600160a01b03163314610ebe5760405162461bcd60e51b81526004016109da90612582565b506016805460ff19169055600190565b6005546001600160a01b03163314610ef85760405162461bcd60e51b81526004016109da90612582565b6016805462ffff00191662010100179055565b6005546001600160a01b03163314610f355760405162461bcd60e51b81526004016109da90612582565b60168054911515620100000262ff000019909216919091179055565b606060048054610a2f90612615565b6005546001600160a01b03163314610f8a5760405162461bcd60e51b81526004016109da90612582565b6010546001600160a01b039081169083160361100e5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b657250616972730000000000000060648201526084016109da565b610a1c8282611efe565b335f9081526001602090815260408083206001600160a01b0386168452909152812054828110156110995760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016109da565b6110a6338585840361153c565b5060019392505050565b5f610abc33848461165f565b6005546001600160a01b031633146110e65760405162461bcd60e51b81526004016109da90612582565b6011546040516001600160a01b03918216918316907f455cf943964d06e77e44126ecca5a66b2c9721f4576a31f8693127282c55700f905f90a3601180546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461116c5760405162461bcd60e51b81526004016109da90612582565b670de0b6b3a76400006103e861118160025490565b61118c90600161264d565b6111969190612664565b6111a09190612664565b8110156111ef5760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f7420736574206d61785478206c6f776572207468616e20302e312560448201526064016109da565b61120181670de0b6b3a764000061264d565b60135550565b6011546001600160a01b0316336001600160a01b031614611226575f5ffd5b305f90815260208190526040902054811115801561124357505f81115b61127e5760405162461bcd60e51b815260206004820152600c60248201526b15dc9bdb99c8185b5bdd5b9d60a21b60448201526064016109da565b61128781611f51565b50565b6005546001600160a01b031633146112b45760405162461bcd60e51b81526004016109da90612582565b6001600160a01b0382165f81815260186020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005545f906001600160a01b0316331461133e5760405162461bcd60e51b81526004016109da90612582565b620186a061134b60025490565b61135690600161264d565b6113609190612664565b8210156113cd5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b60648201526084016109da565b6103e86113d960025490565b6113e490600561264d565b6113ee9190612664565b82111561145a5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b60648201526084016109da565b50601481905560015b919050565b6005545f906001600160a01b031633146114945760405162461bcd60e51b81526004016109da90612582565b506007805460ff19169055600190565b6005546001600160a01b031633146114ce5760405162461bcd60e51b81526004016109da90612582565b6001600160a01b0381166115335760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109da565b61128781611ead565b6001600160a01b03831661159e5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109da565b6001600160a01b0382166115ff5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109da565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166116855760405162461bcd60e51b81526004016109da90612683565b6001600160a01b0382166116ab5760405162461bcd60e51b81526004016109da906126c8565b6001600160a01b0383165f9081526017602052604090205460ff16156117075760405162461bcd60e51b815260206004820152601160248201527016d99c9bdb5748189b1858dac81b1a5cdd607a1b60448201526064016109da565b6001600160a01b0382165f9081526017602052604090205460ff16156117615760405162461bcd60e51b815260206004820152600f60248201526e16dd1bd748189b1858dac81b1a5cdd608a1b60448201526064016109da565b805f036117785761177383835f612107565b505050565b60165460ff1615611be8576005546001600160a01b038481169116148015906117af57506005546001600160a01b03838116911614155b80156117c357506001600160a01b03821615155b80156117da57506001600160a01b03821661dead14155b80156117f05750601054600160a01b900460ff16155b15611be857601654610100900460ff16611886576001600160a01b0383165f9081526018602052604090205460ff168061184157506001600160a01b0382165f9081526018602052604090205460ff165b6118865760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b60448201526064016109da565b60075460ff16156119a7576005546001600160a01b038381169116148015906118e157507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b80156118fb57506010546001600160a01b03838116911614155b156119a757325f9081526006602052604090205443116119955760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a4016109da565b325f9081526006602052604090204390555b6001600160a01b0383165f908152601a602052604090205460ff1680156119e657506001600160a01b0382165f9081526019602052604090205460ff16155b15611aba57601354811115611a4c5760405162461bcd60e51b815260206004820152602660248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526536b0bc2a3c1760d11b60648201526084016109da565b6015546001600160a01b0383165f90815260208190526040902054611a7190836125cb565b1115611ab55760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016109da565b611be8565b6001600160a01b0382165f908152601a602052604090205460ff168015611af957506001600160a01b0383165f9081526019602052604090205460ff16155b15611b6057601354811115611ab55760405162461bcd60e51b815260206004820152602760248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152661036b0bc2a3c1760c91b60648201526084016109da565b6001600160a01b0382165f9081526019602052604090205460ff16611be8576015546001600160a01b0383165f90815260208190526040902054611ba490836125cb565b1115611be85760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016109da565b305f9081526020819052604090205460145481108015908190611c13575060165462010000900460ff165b8015611c295750601054600160a01b900460ff16155b8015611c4d57506001600160a01b0385165f908152601a602052604090205460ff16155b8015611c7157506001600160a01b0385165f9081526018602052604090205460ff16155b8015611c9557506001600160a01b0384165f9081526018602052604090205460ff16155b15611cc3576010805460ff60a01b1916600160a01b179055611cb5612259565b6010805460ff60a01b191690555b6010546001600160a01b0386165f9081526018602052604090205460ff600160a01b909204821615911680611d0f57506001600160a01b0385165f9081526018602052604090205460ff165b15611d1757505f5b5f8115611e99576001600160a01b0386165f908152601a602052604090205460ff168015611d4657505f600b54115b15611dd257611d6b6064611d65600b548861239690919063ffffffff16565b906123a8565b9050600b54600d5482611d7e919061264d565b611d889190612664565b600f5f828254611d9891906125cb565b9091555050600b54600c54611dad908361264d565b611db79190612664565b600e5f828254611dc791906125cb565b90915550611e7b9050565b6001600160a01b0387165f908152601a602052604090205460ff168015611dfa57505f600854115b15611e7b57611e196064611d656008548861239690919063ffffffff16565b9050600854600a5482611e2c919061264d565b611e369190612664565b600f5f828254611e4691906125cb565b9091555050600854600954611e5b908361264d565b611e659190612664565b600e5f828254611e7591906125cb565b90915550505b8015611e8c57611e8c873083612107565b611e96818661270b565b94505b611ea4878787612107565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b0382165f818152601a6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110611f8457611f8461271e565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612000573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120249190612732565b816001815181106120375761203761271e565b60200260200101906001600160a01b031690816001600160a01b031681525050612082307f00000000000000000000000000000000000000000000000000000000000000008461153c565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac947906120d69085905f9086903090429060040161274d565b5f604051808303815f87803b1580156120ed575f5ffd5b505af11580156120ff573d5f5f3e3d5ffd5b505050505050565b6001600160a01b03831661212d5760405162461bcd60e51b81526004016109da90612683565b6001600160a01b0382166121535760405162461bcd60e51b81526004016109da906126c8565b6001600160a01b0383165f90815260208190526040902054818110156121ca5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016109da565b6001600160a01b038085165f908152602081905260408082208585039055918516815290812080548492906122009084906125cb565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161224c91815260200190565b60405180910390a3610e57565b305f9081526020819052604081205490505f600f54600e5461227b91906125cb565b90505f825f0361228a57505050565b601480546122979161264d565b8311156122ae57601480546122ab9161264d565b92505b476122b884611f51565b5f6122c347836123b3565b90505f6122df85611d65600f548561239690919063ffffffff16565b5f600e819055600f8190556012546040519293506001600160a01b031691839181818185875af1925050503d805f8114612334576040519150601f19603f3d011682016040523d82523d5f602084013e612339565b606091505b50506011546040519195506001600160a01b03169047905f81818185875af1925050503d805f8114612386576040519150601f19603f3d011682016040523d82523d5f602084013e61238b565b606091505b505050505050505050565b5f6123a1828461264d565b9392505050565b5f6123a18284612664565b5f6123a1828461270b565b5f5f604083850312156123cf575f5ffd5b50508035926020909101359150565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b6001600160a01b0381168114611287575f5ffd5b5f5f60408385031215612438575f5ffd5b823561244381612413565b946020939093013593505050565b5f60208284031215612461575f5ffd5b81356123a181612413565b5f5f5f6060848603121561247e575f5ffd5b833561248981612413565b9250602084013561249981612413565b929592945050506040919091013590565b80358015158114611463575f5ffd5b5f5f604083850312156124ca575f5ffd5b82356124d581612413565b91506124e3602084016124aa565b90509250929050565b5f602082840312156124fc575f5ffd5b5035919050565b5f5f5f5f60808587031215612516575f5ffd5b5050823594602084013594506040840135936060013592509050565b5f60208284031215612542575f5ffd5b6123a1826124aa565b5f5f6040838503121561255c575f5ffd5b823561256781612413565b9150602083013561257781612413565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610ac057610ac06125b7565b6020808252601d908201527f4d757374206b656570206665657320617420373525206f72206c657373000000604082015260600190565b600181811c9082168061262957607f821691505b60208210810361264757634e487b7160e01b5f52602260045260245ffd5b50919050565b8082028115828204841417610ac057610ac06125b7565b5f8261267e57634e487b7160e01b5f52601260045260245ffd5b500490565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610ac057610ac06125b7565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215612742575f5ffd5b81516123a181612413565b5f60a0820187835286602084015260a0604084015280865180835260c0850191506020880192505f5b8181101561279d5783516001600160a01b0316835260209384019390920191600101612776565b50506001600160a01b03959095166060840152505060800152939250505056fea2646970667358221220f0e135e94fbfc526c2b4beee58b1f929f6522a062f926e30d2c3ab3928db0bff64736f6c634300081c00334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572

Deployed Bytecode

0x608060405260043610610344575f3560e01c80638a8c523c116101bd578063b62496f5116100f2578063d85ba06311610092578063e5f04c391161006d578063e5f04c391461094f578063e6819ba714610963578063f2fde38b14610991578063f8686f071461094f575f5ffd5b8063d85ba063146108e1578063dd62ed3e146108f6578063e2f456051461093a575f5ffd5b8063c0246668116100cd578063c02466681461088a578063c876d0b9146108a9578063d257b34f146108c2578063d4c989d3146104a4575f5ffd5b8063b62496f51461081f578063b70143c91461084d578063bbc0c7421461086c575f5ffd5b80639fccce321161015d578063a72f458611610138578063a72f4586146107a3578063a9059cbb146107c2578063aacebbe3146107e1578063ab5a188714610800575f5ffd5b80639fccce321461075a578063a0d82dc51461076f578063a457c2d714610784575f5ffd5b8063924de9b711610198578063924de9b7146106f357806395d89b41146107125780639a7a23d6146107265780639c3b4fdc14610745575f5ffd5b80638a8c523c146106ad5780638da5cb5b146106c157806392136913146106de575f5ffd5b806339509351116102935780636ddd171311610233578063715018a61161020e578063715018a61461065b5780637437681e1461066f578063751039fc146106845780637bce5a0414610698575f5ffd5b80636ddd1713146105e95780636fcba3771461060857806370a0823114610627575f5ffd5b80634fbee1931161026e5780634fbee193146105695780635d0044ca146105a057806361528e27146105bf5780636a486a8e146105d4575f5ffd5b8063395093511461051257806349bd5a5e146105315780634a62bb6514610550575f5ffd5b806323b872dd116102fe57806330280a71116102d957806330280a71146104a457806330a136ad146104c35780633103b39e146104d8578063313ce567146104f7575f5ffd5b806323b872dd14610451578063247b912d1461047057806327c8f8351461048f575f5ffd5b806305a1f36d1461034f57806306fdde0314610370578063095ea7b31461039a5780631694505e146103c957806318160ddd146104145780631816467f14610432575f5ffd5b3661034b57005b5f5ffd5b34801561035a575f5ffd5b5061036e6103693660046123be565b6109b0565b005b34801561037b575f5ffd5b50610384610a20565b60405161039191906123de565b60405180910390f35b3480156103a5575f5ffd5b506103b96103b4366004612427565b610ab0565b6040519015158152602001610391565b3480156103d4575f5ffd5b506103fc7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610391565b34801561041f575f5ffd5b506002545b604051908152602001610391565b34801561043d575f5ffd5b5061036e61044c366004612451565b610ac6565b34801561045c575f5ffd5b506103b961046b36600461246c565b610b4c565b34801561047b575f5ffd5b5061036e61048a3660046123be565b610bf4565b34801561049a575f5ffd5b506103fc61dead81565b3480156104af575f5ffd5b5061036e6104be3660046124b9565b610c57565b3480156104ce575f5ffd5b5061042460155481565b3480156104e3575f5ffd5b506012546103fc906001600160a01b031681565b348015610502575f5ffd5b5060405160128152602001610391565b34801561051d575f5ffd5b506103b961052c366004612427565b610cab565b34801561053c575f5ffd5b506010546103fc906001600160a01b031681565b34801561055b575f5ffd5b506016546103b99060ff1681565b348015610574575f5ffd5b506103b9610583366004612451565b6001600160a01b03165f9081526018602052604090205460ff1690565b3480156105ab575f5ffd5b5061036e6105ba3660046124ec565b610ce6565b3480156105ca575f5ffd5b50610424600e5481565b3480156105df575f5ffd5b50610424600b5481565b3480156105f4575f5ffd5b506016546103b99062010000900460ff1681565b348015610613575f5ffd5b5061036e610622366004612503565b610db9565b348015610632575f5ffd5b50610424610641366004612451565b6001600160a01b03165f9081526020819052604090205490565b348015610666575f5ffd5b5061036e610e5d565b34801561067a575f5ffd5b5061042460135481565b34801561068f575f5ffd5b506103b9610e92565b3480156106a3575f5ffd5b5061042460095481565b3480156106b8575f5ffd5b5061036e610ece565b3480156106cc575f5ffd5b506005546001600160a01b03166103fc565b3480156106e9575f5ffd5b50610424600c5481565b3480156106fe575f5ffd5b5061036e61070d366004612532565b610f0b565b34801561071d575f5ffd5b50610384610f51565b348015610731575f5ffd5b5061036e6107403660046124b9565b610f60565b348015610750575f5ffd5b50610424600a5481565b348015610765575f5ffd5b50610424600f5481565b34801561077a575f5ffd5b50610424600d5481565b34801561078f575f5ffd5b506103b961079e366004612427565b611018565b3480156107ae575f5ffd5b506011546103fc906001600160a01b031681565b3480156107cd575f5ffd5b506103b96107dc366004612427565b6110b0565b3480156107ec575f5ffd5b5061036e6107fb366004612451565b6110bc565b34801561080b575f5ffd5b5061036e61081a3660046124ec565b611142565b34801561082a575f5ffd5b506103b9610839366004612451565b601a6020525f908152604090205460ff1681565b348015610858575f5ffd5b5061036e6108673660046124ec565b611207565b348015610877575f5ffd5b506016546103b990610100900460ff1681565b348015610895575f5ffd5b5061036e6108a43660046124b9565b61128a565b3480156108b4575f5ffd5b506007546103b99060ff1681565b3480156108cd575f5ffd5b506103b96108dc3660046124ec565b611312565b3480156108ec575f5ffd5b5061042460085481565b348015610901575f5ffd5b5061042461091036600461254b565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b348015610945575f5ffd5b5061042460145481565b34801561095a575f5ffd5b506103b9611468565b34801561096e575f5ffd5b506103b961097d366004612451565b60196020525f908152604090205460ff1681565b34801561099c575f5ffd5b5061036e6109ab366004612451565b6114a4565b6005546001600160a01b031633146109e35760405162461bcd60e51b81526004016109da90612582565b60405180910390fd5b6009829055600a8190556109f781836125cb565b600881905560631015610a1c5760405162461bcd60e51b81526004016109da906125de565b5050565b606060038054610a2f90612615565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5b90612615565b8015610aa65780601f10610a7d57610100808354040283529160200191610aa6565b820191905f5260205f20905b815481529060010190602001808311610a8957829003601f168201915b5050505050905090565b5f610abc33848461153c565b5060015b92915050565b6005546001600160a01b03163314610af05760405162461bcd60e51b81526004016109da90612582565b6012546040516001600160a01b03918216918316907f9e3da7e72199adc414f24e73d3985f288cce5edbc5c370e29af583afdd78c2c2905f90a3601280546001600160a01b0319166001600160a01b0392909216919091179055565b5f610b5884848461165f565b6001600160a01b0384165f90815260016020908152604080832033845290915290205482811015610bdc5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084016109da565b610be9853385840361153c565b506001949350505050565b6005546001600160a01b03163314610c1e5760405162461bcd60e51b81526004016109da90612582565b600c829055600d819055610c3281836125cb565b600b81905560631015610a1c5760405162461bcd60e51b81526004016109da906125de565b6005546001600160a01b03163314610c815760405162461bcd60e51b81526004016109da90612582565b6001600160a01b03919091165f908152601960205260409020805460ff1916911515919091179055565b335f8181526001602090815260408083206001600160a01b03871684529091528120549091610abc918590610ce19086906125cb565b61153c565b6005546001600160a01b03163314610d105760405162461bcd60e51b81526004016109da90612582565b670de0b6b3a76400006103e8610d2560025490565b610d3090600561264d565b610d3a9190612664565b610d449190612664565b811015610da15760405162461bcd60e51b815260206004820152602560248201527f43616e6e6f7420736574206d617857616c6c657473206c6f776572207468616e60448201526420302e352560d81b60648201526084016109da565b610db381670de0b6b3a764000061264d565b60155550565b6005546001600160a01b03163314610de35760405162461bcd60e51b81526004016109da90612582565b6009849055600a839055610df783856125cb565b600855600c829055600d819055610e0e81836125cb565b600b5560085460631015610e345760405162461bcd60e51b81526004016109da906125de565b6063600b541115610e575760405162461bcd60e51b81526004016109da906125de565b50505050565b6005546001600160a01b03163314610e875760405162461bcd60e51b81526004016109da90612582565b610e905f611ead565b565b6005545f906001600160a01b03163314610ebe5760405162461bcd60e51b81526004016109da90612582565b506016805460ff19169055600190565b6005546001600160a01b03163314610ef85760405162461bcd60e51b81526004016109da90612582565b6016805462ffff00191662010100179055565b6005546001600160a01b03163314610f355760405162461bcd60e51b81526004016109da90612582565b60168054911515620100000262ff000019909216919091179055565b606060048054610a2f90612615565b6005546001600160a01b03163314610f8a5760405162461bcd60e51b81526004016109da90612582565b6010546001600160a01b039081169083160361100e5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b657250616972730000000000000060648201526084016109da565b610a1c8282611efe565b335f9081526001602090815260408083206001600160a01b0386168452909152812054828110156110995760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016109da565b6110a6338585840361153c565b5060019392505050565b5f610abc33848461165f565b6005546001600160a01b031633146110e65760405162461bcd60e51b81526004016109da90612582565b6011546040516001600160a01b03918216918316907f455cf943964d06e77e44126ecca5a66b2c9721f4576a31f8693127282c55700f905f90a3601180546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461116c5760405162461bcd60e51b81526004016109da90612582565b670de0b6b3a76400006103e861118160025490565b61118c90600161264d565b6111969190612664565b6111a09190612664565b8110156111ef5760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f7420736574206d61785478206c6f776572207468616e20302e312560448201526064016109da565b61120181670de0b6b3a764000061264d565b60135550565b6011546001600160a01b0316336001600160a01b031614611226575f5ffd5b305f90815260208190526040902054811115801561124357505f81115b61127e5760405162461bcd60e51b815260206004820152600c60248201526b15dc9bdb99c8185b5bdd5b9d60a21b60448201526064016109da565b61128781611f51565b50565b6005546001600160a01b031633146112b45760405162461bcd60e51b81526004016109da90612582565b6001600160a01b0382165f81815260186020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005545f906001600160a01b0316331461133e5760405162461bcd60e51b81526004016109da90612582565b620186a061134b60025490565b61135690600161264d565b6113609190612664565b8210156113cd5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b60648201526084016109da565b6103e86113d960025490565b6113e490600561264d565b6113ee9190612664565b82111561145a5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b60648201526084016109da565b50601481905560015b919050565b6005545f906001600160a01b031633146114945760405162461bcd60e51b81526004016109da90612582565b506007805460ff19169055600190565b6005546001600160a01b031633146114ce5760405162461bcd60e51b81526004016109da90612582565b6001600160a01b0381166115335760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109da565b61128781611ead565b6001600160a01b03831661159e5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109da565b6001600160a01b0382166115ff5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109da565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166116855760405162461bcd60e51b81526004016109da90612683565b6001600160a01b0382166116ab5760405162461bcd60e51b81526004016109da906126c8565b6001600160a01b0383165f9081526017602052604090205460ff16156117075760405162461bcd60e51b815260206004820152601160248201527016d99c9bdb5748189b1858dac81b1a5cdd607a1b60448201526064016109da565b6001600160a01b0382165f9081526017602052604090205460ff16156117615760405162461bcd60e51b815260206004820152600f60248201526e16dd1bd748189b1858dac81b1a5cdd608a1b60448201526064016109da565b805f036117785761177383835f612107565b505050565b60165460ff1615611be8576005546001600160a01b038481169116148015906117af57506005546001600160a01b03838116911614155b80156117c357506001600160a01b03821615155b80156117da57506001600160a01b03821661dead14155b80156117f05750601054600160a01b900460ff16155b15611be857601654610100900460ff16611886576001600160a01b0383165f9081526018602052604090205460ff168061184157506001600160a01b0382165f9081526018602052604090205460ff165b6118865760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b60448201526064016109da565b60075460ff16156119a7576005546001600160a01b038381169116148015906118e157507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316826001600160a01b031614155b80156118fb57506010546001600160a01b03838116911614155b156119a757325f9081526006602052604090205443116119955760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a4016109da565b325f9081526006602052604090204390555b6001600160a01b0383165f908152601a602052604090205460ff1680156119e657506001600160a01b0382165f9081526019602052604090205460ff16155b15611aba57601354811115611a4c5760405162461bcd60e51b815260206004820152602660248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526536b0bc2a3c1760d11b60648201526084016109da565b6015546001600160a01b0383165f90815260208190526040902054611a7190836125cb565b1115611ab55760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016109da565b611be8565b6001600160a01b0382165f908152601a602052604090205460ff168015611af957506001600160a01b0383165f9081526019602052604090205460ff16155b15611b6057601354811115611ab55760405162461bcd60e51b815260206004820152602760248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152661036b0bc2a3c1760c91b60648201526084016109da565b6001600160a01b0382165f9081526019602052604090205460ff16611be8576015546001600160a01b0383165f90815260208190526040902054611ba490836125cb565b1115611be85760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016109da565b305f9081526020819052604090205460145481108015908190611c13575060165462010000900460ff165b8015611c295750601054600160a01b900460ff16155b8015611c4d57506001600160a01b0385165f908152601a602052604090205460ff16155b8015611c7157506001600160a01b0385165f9081526018602052604090205460ff16155b8015611c9557506001600160a01b0384165f9081526018602052604090205460ff16155b15611cc3576010805460ff60a01b1916600160a01b179055611cb5612259565b6010805460ff60a01b191690555b6010546001600160a01b0386165f9081526018602052604090205460ff600160a01b909204821615911680611d0f57506001600160a01b0385165f9081526018602052604090205460ff165b15611d1757505f5b5f8115611e99576001600160a01b0386165f908152601a602052604090205460ff168015611d4657505f600b54115b15611dd257611d6b6064611d65600b548861239690919063ffffffff16565b906123a8565b9050600b54600d5482611d7e919061264d565b611d889190612664565b600f5f828254611d9891906125cb565b9091555050600b54600c54611dad908361264d565b611db79190612664565b600e5f828254611dc791906125cb565b90915550611e7b9050565b6001600160a01b0387165f908152601a602052604090205460ff168015611dfa57505f600854115b15611e7b57611e196064611d656008548861239690919063ffffffff16565b9050600854600a5482611e2c919061264d565b611e369190612664565b600f5f828254611e4691906125cb565b9091555050600854600954611e5b908361264d565b611e659190612664565b600e5f828254611e7591906125cb565b90915550505b8015611e8c57611e8c873083612107565b611e96818661270b565b94505b611ea4878787612107565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b0382165f818152601a6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110611f8457611f8461271e565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612000573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120249190612732565b816001815181106120375761203761271e565b60200260200101906001600160a01b031690816001600160a01b031681525050612082307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461153c565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac947906120d69085905f9086903090429060040161274d565b5f604051808303815f87803b1580156120ed575f5ffd5b505af11580156120ff573d5f5f3e3d5ffd5b505050505050565b6001600160a01b03831661212d5760405162461bcd60e51b81526004016109da90612683565b6001600160a01b0382166121535760405162461bcd60e51b81526004016109da906126c8565b6001600160a01b0383165f90815260208190526040902054818110156121ca5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016109da565b6001600160a01b038085165f908152602081905260408082208585039055918516815290812080548492906122009084906125cb565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161224c91815260200190565b60405180910390a3610e57565b305f9081526020819052604081205490505f600f54600e5461227b91906125cb565b90505f825f0361228a57505050565b601480546122979161264d565b8311156122ae57601480546122ab9161264d565b92505b476122b884611f51565b5f6122c347836123b3565b90505f6122df85611d65600f548561239690919063ffffffff16565b5f600e819055600f8190556012546040519293506001600160a01b031691839181818185875af1925050503d805f8114612334576040519150601f19603f3d011682016040523d82523d5f602084013e612339565b606091505b50506011546040519195506001600160a01b03169047905f81818185875af1925050503d805f8114612386576040519150601f19603f3d011682016040523d82523d5f602084013e61238b565b606091505b505050505050505050565b5f6123a1828461264d565b9392505050565b5f6123a18284612664565b5f6123a1828461270b565b5f5f604083850312156123cf575f5ffd5b50508035926020909101359150565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b6001600160a01b0381168114611287575f5ffd5b5f5f60408385031215612438575f5ffd5b823561244381612413565b946020939093013593505050565b5f60208284031215612461575f5ffd5b81356123a181612413565b5f5f5f6060848603121561247e575f5ffd5b833561248981612413565b9250602084013561249981612413565b929592945050506040919091013590565b80358015158114611463575f5ffd5b5f5f604083850312156124ca575f5ffd5b82356124d581612413565b91506124e3602084016124aa565b90509250929050565b5f602082840312156124fc575f5ffd5b5035919050565b5f5f5f5f60808587031215612516575f5ffd5b5050823594602084013594506040840135936060013592509050565b5f60208284031215612542575f5ffd5b6123a1826124aa565b5f5f6040838503121561255c575f5ffd5b823561256781612413565b9150602083013561257781612413565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610ac057610ac06125b7565b6020808252601d908201527f4d757374206b656570206665657320617420373525206f72206c657373000000604082015260600190565b600181811c9082168061262957607f821691505b60208210810361264757634e487b7160e01b5f52602260045260245ffd5b50919050565b8082028115828204841417610ac057610ac06125b7565b5f8261267e57634e487b7160e01b5f52601260045260245ffd5b500490565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610ac057610ac06125b7565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215612742575f5ffd5b81516123a181612413565b5f60a0820187835286602084015260a0604084015280865180835260c0850191506020880192505f5b8181101561279d5783516001600160a01b0316835260209384019390920191600101612776565b50506001600160a01b03959095166060840152505060800152939250505056fea2646970667358221220f0e135e94fbfc526c2b4beee58b1f929f6522a062f926e30d2c3ab3928db0bff64736f6c634300081c0033

Deployed Bytecode Sourcemap

15053:13447:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21440:307;;;;;;;;;;-1:-1:-1;21440:307:0;;;;;:::i;:::-;;:::i;:::-;;10417:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11331:169;;;;;;;;;;-1:-1:-1;11331:169:0;;;;;:::i;:::-;;:::i;:::-;;;1461:14:1;;1454:22;1436:41;;1424:2;1409:18;11331:169:0;1296:187:1;15588:51:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1678:32:1;;;1660:51;;1648:2;1633:18;15588:51:0;1488:229:1;10738:108:0;;;;;;;;;;-1:-1:-1;10826:12:0;;10738:108;;;1868:25:1;;;1856:2;1841:18;10738:108:0;1722:177:1;20677:160:0;;;;;;;;;;-1:-1:-1;20677:160:0;;;;;:::i;:::-;;:::i;11508:492::-;;;;;;;;;;-1:-1:-1;11508:492:0;;;;;:::i;:::-;;:::i;21755:314::-;;;;;;;;;;-1:-1:-1;21755:314:0;;;;;:::i;:::-;;:::i;15681:53::-;;;;;;;;;;;;15727:6;15681:53;;20202:145;;;;;;;;;;-1:-1:-1;20202:145:0;;;;;:::i;:::-;;:::i;15910:25::-;;;;;;;;;;;;;;;;15809;;;;;;;;;;-1:-1:-1;15809:25:0;;;;-1:-1:-1;;;;;15809:25:0;;;10637:93;;;;;;;;;;-1:-1:-1;10637:93:0;;10720:2;3504:36:1;;3492:2;3477:18;10637:93:0;3362:184:1;12008:215:0;;;;;;;;;;-1:-1:-1;12008:215:0;;;;;:::i;:::-;;:::i;15646:28::-;;;;;;;;;;-1:-1:-1;15646:28:0;;;;-1:-1:-1;;;;;15646:28:0;;;15944:33;;;;;;;;;;-1:-1:-1;15944:33:0;;;;;;;;22775:126;;;;;;;;;;-1:-1:-1;22775:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;22865:28:0;22841:4;22865:28;;;:19;:28;;;;;;;;;22775:126;19504:249;;;;;;;;;;-1:-1:-1;19504:249:0;;;;;:::i;:::-;;:::i;15514:31::-;;;;;;;;;;;;;;;;15407:28;;;;;;;;;;;;;;;;16024:31;;;;;;;;;;-1:-1:-1;16024:31:0;;;;;;;;;;;20845:587;;;;;;;;;;-1:-1:-1;20845:587:0;;;;;:::i;:::-;;:::i;10854:127::-;;;;;;;;;;-1:-1:-1;10854:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;10955:18:0;10928:7;10955:18;;;;;;;;;;;;10854:127;9493:103;;;;;;;;;;;;;:::i;15843:20::-;;;;;;;;;;;;;;;;18618:121;;;;;;;;;;;;;:::i;15337:30::-;;;;;;;;;;;;;;;;18498:112;;;;;;;;;;;;;:::i;9270:87::-;;;;;;;;;;-1:-1:-1;9343:6:0;;-1:-1:-1;;;;;9343:6:0;9270:87;;15442:31;;;;;;;;;;;;;;;;20355:100;;;;;;;;;;-1:-1:-1;20355:100:0;;;;;:::i;:::-;;:::i;10525:104::-;;;;;;;;;;;;;:::i;22267:304::-;;;;;;;;;;-1:-1:-1;22267:304:0;;;;;:::i;:::-;;:::i;15374:24::-;;;;;;;;;;;;;;;;15552:27;;;;;;;;;;;;;;;;15480:25;;;;;;;;;;;;;;;;12231:413;;;;;;;;;;-1:-1:-1;12231:413:0;;;;;:::i;:::-;;:::i;15773:29::-;;;;;;;;;;-1:-1:-1;15773:29:0;;;;-1:-1:-1;;;;;15773:29:0;;;10989:175;;;;;;;;;;-1:-1:-1;10989:175:0;;;;;:::i;:::-;;:::i;20467:202::-;;;;;;;;;;-1:-1:-1;20467:202:0;;;;;:::i;:::-;;:::i;19252:244::-;;;;;;;;;;-1:-1:-1;19252:244:0;;;;;:::i;:::-;;:::i;16232:57::-;;;;;;;;;;-1:-1:-1;16232:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;26852:222;;;;;;;;;;-1:-1:-1;26852:222:0;;;;;:::i;:::-;;:::i;15984:33::-;;;;;;;;;;-1:-1:-1;15984:33:0;;;;;;;;;;;22077:182;;;;;;;;;;-1:-1:-1;22077:182:0;;;;;:::i;:::-;;:::i;15254:40::-;;;;;;;;;;-1:-1:-1;15254:40:0;;;;;;;;18747:497;;;;;;;;;;-1:-1:-1;18747:497:0;;;;;:::i;:::-;;:::i;15303:27::-;;;;;;;;;;;;;;;;11172:151;;;;;;;;;;-1:-1:-1;11172:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;11288:18:0;;;11261:7;11288:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;11172:151;15870:33;;;;;;;;;;;;;;;;19905:132;;;;;;;;;;;;;:::i;16175:48::-;;;;;;;;;;-1:-1:-1;16175:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;9604:201;;;;;;;;;;-1:-1:-1;9604:201:0;;;;;:::i;:::-;;:::i;21440:307::-;9343:6;;-1:-1:-1;;;;;9343:6:0;8896:10;9405:23;9397:68;;;;-1:-1:-1;;;9397:68:0;;;;;;;:::i;:::-;;;;;;;;;21554:15:::1;:31:::0;;;21596:9:::1;:19:::0;;;21641:27:::1;21608:7:::0;21572:13;21641:27:::1;:::i;:::-;21626:12;:42:::0;;;21703:2:::1;-1:-1:-1::0;21687:18:0::1;21679:60;;;;-1:-1:-1::0;;;21679:60:0::1;;;;;;;:::i;:::-;21440:307:::0;;:::o;10417:100::-;10471:13;10504:5;10497:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10417:100;:::o;11331:169::-;11414:4;11431:39;8896:10;11454:7;11463:6;11431:8;:39::i;:::-;-1:-1:-1;11488:4:0;11331:169;;;;;:::o;20677:160::-;9343:6;;-1:-1:-1;;;;;9343:6:0;8896:10;9405:23;9397:68;;;;-1:-1:-1;;;9397:68:0;;;;;;;:::i;:::-;20785:10:::1;::::0;20756:40:::1;::::0;-1:-1:-1;;;;;20785:10:0;;::::1;::::0;20756:40;::::1;::::0;::::1;::::0;20785:10:::1;::::0;20756:40:::1;20807:10;:22:::0;;-1:-1:-1;;;;;;20807:22:0::1;-1:-1:-1::0;;;;;20807:22:0;;;::::1;::::0;;;::::1;::::0;;20677:160::o;11508:492::-;11648:4;11665:36;11675:6;11683:9;11694:6;11665:9;:36::i;:::-;-1:-1:-1;;;;;11741:19:0;;11714:24;11741:19;;;:11;:19;;;;;;;;8896:10;11741:33;;;;;;;;11793:26;;;;11785:79;;;;-1:-1:-1;;;11785:79:0;;6520:2:1;11785:79:0;;;6502:21:1;6559:2;6539:18;;;6532:30;6598:34;6578:18;;;6571:62;-1:-1:-1;;;6649:18:1;;;6642:38;6697:19;;11785:79:0;6318:404:1;11785:79:0;11900:57;11909:6;8896:10;11950:6;11931:16;:25;11900:8;:57::i;:::-;-1:-1:-1;11988:4:0;;11508:492;-1:-1:-1;;;;11508:492:0:o;21755:314::-;9343:6;;-1:-1:-1;;;;;9343:6:0;8896:10;9405:23;9397:68;;;;-1:-1:-1;;;9397:68:0;;;;;;;:::i;:::-;21870:16:::1;:32:::0;;;21913:10:::1;:20:::0;;;21960:29:::1;21926:7:::0;21889:13;21960:29:::1;:::i;:::-;21944:13;:45:::0;;;22025:2:::1;-1:-1:-1::0;22008:19:0::1;22000:61;;;;-1:-1:-1::0;;;22000:61:0::1;;;;;;;:::i;20202:145::-:0;9343:6;;-1:-1:-1;;;;;9343:6:0;8896:10;9405:23;9397:68;;;;-1:-1:-1;;;9397:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20308:24:0;;;::::1;;::::0;;;:16:::1;:24;::::0;;;;:31;;-1:-1:-1;;20308:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20202:145::o;12008:215::-;8896:10;12096:4;12145:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;12145:34:0;;;;;;;;;;12096:4;;12113:80;;12136:7;;12145:47;;12182:10;;12145:47;:::i;:::-;12113:8;:80::i;19504:249::-;9343:6;;-1:-1:-1;;;;;9343:6:0;8896:10;9405:23;9397:68;;;;-1:-1:-1;;;9397:68:0;;;;;;;:::i;:::-;19635:4:::1;19627;19606:13;10826:12:::0;;;10738:108;19606:13:::1;:17;::::0;19622:1:::1;19606:17;:::i;:::-;19605:26;;;;:::i;:::-;19604:35;;;;:::i;:::-;19594:6;:45;;19572:132;;;::::0;-1:-1:-1;;;19572:132:0;;7324:2:1;19572:132:0::1;::::0;::::1;7306:21:1::0;7363:2;7343:18;;;7336:30;7402:34;7382:18;;;7375:62;-1:-1:-1;;;7453:18:1;;;7446:35;7498:19;;19572:132:0::1;7122:401:1::0;19572:132:0::1;19728:17;:6:::0;19738::::1;19728:17;:::i;:::-;19715:10;:30:::0;-1:-1:-1;19504:249:0:o;20845:587::-;9343:6;;-1:-1:-1;;;;;9343:6:0;8896:10;9405:23;9397:68;;;;-1:-1:-1;;;9397:68:0;;;;;;;:::i;:::-;21023:15:::1;:34:::0;;;21068:9:::1;:22:::0;;;21116:27:::1;21080:10:::0;21041:16;21116:27:::1;:::i;:::-;21101:12;:42:::0;21154:16:::1;:36:::0;;;21201:10:::1;:24:::0;;;21252:29:::1;21214:11:::0;21173:17;21252:29:::1;:::i;:::-;21236:13;:45:::0;21300:12:::1;::::0;21316:2:::1;-1:-1:-1::0;21300:18:0::1;21292:60;;;;-1:-1:-1::0;;;21292:60:0::1;;;;;;;:::i;:::-;21388:2;21371:13;;:19;;21363:61;;;;-1:-1:-1::0;;;21363:61:0::1;;;;;;;:::i;:::-;20845:587:::0;;;;:::o;9493:103::-;9343:6;;-1:-1:-1;;;;;9343:6:0;8896:10;9405:23;9397:68;;;;-1:-1:-1;;;9397:68:0;;;;;;;:::i;:::-;9558:30:::1;9585:1;9558:18;:30::i;:::-;9493:103::o:0;18618:121::-;9343:6;;18670:4;;-1:-1:-1;;;;;9343:6:0;8896:10;9405:23;9397:68;;;;-1:-1:-1;;;9397:68:0;;;;;;;:::i;:::-;-1:-1:-1;18687:14:0::1;:22:::0;;-1:-1:-1;;18687:22:0::1;::::0;;;18618:121;:::o;18498:112::-;9343:6;;-1:-1:-1;;;;;9343:6:0;8896:10;9405:23;9397:68;;;;-1:-1:-1;;;9397:68:0;;;;;;;:::i;:::-;18553:13:::1;:20:::0;;-1:-1:-1;;18584:18:0;;;;;18498:112::o;20355:100::-;9343:6;;-1:-1:-1;;;;;9343:6:0;8896:10;9405:23;9397:68;;;;-1:-1:-1;;;9397:68:0;;;;;;;:::i;:::-;20426:11:::1;:21:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;20426:21:0;;::::1;::::0;;;::::1;::::0;;20355:100::o;10525:104::-;10581:13;10614:7;10607:14;;;;;:::i;22267:304::-;9343:6;;-1:-1:-1;;;;;9343:6:0;8896:10;9405:23;9397:68;;;;-1:-1:-1;;;9397:68:0;;;;;;;:::i;:::-;22411:13:::1;::::0;-1:-1:-1;;;;;22411:13:0;;::::1;22403:21:::0;;::::1;::::0;22381:128:::1;;;::::0;-1:-1:-1;;;22381:128:0;;7730:2:1;22381:128:0::1;::::0;::::1;7712:21:1::0;7769:2;7749:18;;;7742:30;7808:34;7788:18;;;7781:62;7879:27;7859:18;;;7852:55;7924:19;;22381:128:0::1;7528:421:1::0;22381:128:0::1;22522:41;22551:4;22557:5;22522:28;:41::i;12231:413::-:0;8896:10;12324:4;12368:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;12368:34:0;;;;;;;;;;12421:35;;;;12413:85;;;;-1:-1:-1;;;12413:85:0;;8156:2:1;12413:85:0;;;8138:21:1;8195:2;8175:18;;;8168:30;8234:34;8214:18;;;8207:62;-1:-1:-1;;;8285:18:1;;;8278:35;8330:19;;12413:85:0;7954:401:1;12413:85:0;12534:67;8896:10;12557:7;12585:15;12566:16;:34;12534:8;:67::i;:::-;-1:-1:-1;12632:4:0;;12231:413;-1:-1:-1;;;12231:413:0:o;10989:175::-;11075:4;11092:42;8896:10;11116:9;11127:6;11092:9;:42::i;20467:202::-;9343:6;;-1:-1:-1;;;;;9343:6:0;8896:10;9405:23;9397:68;;;;-1:-1:-1;;;9397:68:0;;;;;;;:::i;:::-;20601:14:::1;::::0;20560:56:::1;::::0;-1:-1:-1;;;;;20601:14:0;;::::1;::::0;20560:56;::::1;::::0;::::1;::::0;20601:14:::1;::::0;20560:56:::1;20627:14;:34:::0;;-1:-1:-1;;;;;;20627:34:0::1;-1:-1:-1::0;;;;;20627:34:0;;;::::1;::::0;;;::::1;::::0;;20467:202::o;19252:244::-;9343:6;;-1:-1:-1;;;;;9343:6:0;8896:10;9405:23;9397:68;;;;-1:-1:-1;;;9397:68:0;;;;;;;:::i;:::-;19388:4:::1;19380;19359:13;10826:12:::0;;;10738:108;19359:13:::1;:17;::::0;19375:1:::1;19359:17;:::i;:::-;19358:26;;;;:::i;:::-;19357:35;;;;:::i;:::-;19347:6;:45;;19325:127;;;::::0;-1:-1:-1;;;19325:127:0;;8562:2:1;19325:127:0::1;::::0;::::1;8544:21:1::0;;;8581:18;;;8574:30;8640:34;8620:18;;;8613:62;8692:18;;19325:127:0::1;8360:356:1::0;19325:127:0::1;19471:17;:6:::0;19481::::1;19471:17;:::i;:::-;19463:5;:25:::0;-1:-1:-1;19252:244:0:o;26852:222::-;26932:14;;-1:-1:-1;;;;;26932:14:0;8896:10;-1:-1:-1;;;;;26916:30:0;;26908:39;;;;;;26994:4;10928:7;10955:18;;;;;;;;;;;26966:6;:34;;:48;;;;;27013:1;27004:6;:10;26966:48;26958:73;;;;-1:-1:-1;;;26958:73:0;;8923:2:1;26958:73:0;;;8905:21:1;8962:2;8942:18;;;8935:30;-1:-1:-1;;;8981:18:1;;;8974:42;9033:18;;26958:73:0;8721:336:1;26958:73:0;27042:24;27059:6;27042:16;:24::i;:::-;26852:222;:::o;22077:182::-;9343:6;;-1:-1:-1;;;;;9343:6:0;8896:10;9405:23;9397:68;;;;-1:-1:-1;;;9397:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22162:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;22162:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;22217:34;;1436:41:1;;;22217:34:0::1;::::0;1409:18:1;22217:34:0::1;;;;;;;22077:182:::0;;:::o;18747:497::-;9343:6;;18855:4;;-1:-1:-1;;;;;9343:6:0;8896:10;9405:23;9397:68;;;;-1:-1:-1;;;9397:68:0;;;;;;;:::i;:::-;18934:6:::1;18913:13;10826:12:::0;;;10738:108;18913:13:::1;:17;::::0;18929:1:::1;18913:17;:::i;:::-;18912:28;;;;:::i;:::-;18899:9;:41;;18877:144;;;::::0;-1:-1:-1;;;18877:144:0;;9264:2:1;18877:144:0::1;::::0;::::1;9246:21:1::0;9303:2;9283:18;;;9276:30;9342:34;9322:18;;;9315:62;-1:-1:-1;;;9393:18:1;;;9386:51;9454:19;;18877:144:0::1;9062:417:1::0;18877:144:0::1;19089:4;19068:13;10826:12:::0;;;10738:108;19068:13:::1;:17;::::0;19084:1:::1;19068:17;:::i;:::-;19067:26;;;;:::i;:::-;19054:9;:39;;19032:141;;;::::0;-1:-1:-1;;;19032:141:0;;9686:2:1;19032:141:0::1;::::0;::::1;9668:21:1::0;9725:2;9705:18;;;9698:30;9764:34;9744:18;;;9737:62;-1:-1:-1;;;9815:18:1;;;9808:50;9875:19;;19032:141:0::1;9484:416:1::0;19032:141:0::1;-1:-1:-1::0;19184:18:0::1;:30:::0;;;19232:4:::1;9476:1;18747:497:::0;;;:::o;19905:132::-;9343:6;;19962:4;;-1:-1:-1;;;;;9343:6:0;8896:10;9405:23;9397:68;;;;-1:-1:-1;;;9397:68:0;;;;;;;:::i;:::-;-1:-1:-1;19979:20:0::1;:28:::0;;-1:-1:-1;;19979:28:0::1;::::0;;;19905:132;:::o;9604:201::-;9343:6;;-1:-1:-1;;;;;9343:6:0;8896:10;9405:23;9397:68;;;;-1:-1:-1;;;9397:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9693:22:0;::::1;9685:73;;;::::0;-1:-1:-1;;;9685:73:0;;10107:2:1;9685:73:0::1;::::0;::::1;10089:21:1::0;10146:2;10126:18;;;10119:30;10185:34;10165:18;;;10158:62;-1:-1:-1;;;10236:18:1;;;10229:36;10282:19;;9685:73:0::1;9905:402:1::0;9685:73:0::1;9769:28;9788:8;9769:18;:28::i;14399:380::-:0;-1:-1:-1;;;;;14535:19:0;;14527:68;;;;-1:-1:-1;;;14527:68:0;;10514:2:1;14527:68:0;;;10496:21:1;10553:2;10533:18;;;10526:30;10592:34;10572:18;;;10565:62;-1:-1:-1;;;10643:18:1;;;10636:34;10687:19;;14527:68:0;10312:400:1;14527:68:0;-1:-1:-1;;;;;14614:21:0;;14606:68;;;;-1:-1:-1;;;14606:68:0;;10919:2:1;14606:68:0;;;10901:21:1;10958:2;10938:18;;;10931:30;10997:34;10977:18;;;10970:62;-1:-1:-1;;;11048:18:1;;;11041:32;11090:19;;14606:68:0;10717:398:1;14606:68:0;-1:-1:-1;;;;;14687:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;14739:32;;1868:25:1;;;14739:32:0;;1841:18:1;14739:32:0;;;;;;;14399:380;;;:::o;22909:3820::-;-1:-1:-1;;;;;23041:18:0;;23033:68;;;;-1:-1:-1;;;23033:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23120:16:0;;23112:64;;;;-1:-1:-1;;;23112:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23196:18:0;;;;;;:12;:18;;;;;;;;23195:19;23187:49;;;;-1:-1:-1;;;23187:49:0;;12132:2:1;23187:49:0;;;12114:21:1;12171:2;12151:18;;;12144:30;-1:-1:-1;;;12190:18:1;;;12183:47;12247:18;;23187:49:0;11930:341:1;23187:49:0;-1:-1:-1;;;;;23256:16:0;;;;;;:12;:16;;;;;;;;23255:17;23247:45;;;;-1:-1:-1;;;23247:45:0;;12478:2:1;23247:45:0;;;12460:21:1;12517:2;12497:18;;;12490:30;-1:-1:-1;;;12536:18:1;;;12529:45;12591:18;;23247:45:0;12276:339:1;23247:45:0;23309:6;23319:1;23309:11;23305:93;;23337:28;23353:4;23359:2;23363:1;23337:15;:28::i;:::-;22909:3820;;;:::o;23305:93::-;23414:14;;;;23410:1666;;;9343:6;;-1:-1:-1;;;;;23449:15:0;;;9343:6;;23449:15;;;;:49;;-1:-1:-1;9343:6:0;;-1:-1:-1;;;;;23485:13:0;;;9343:6;;23485:13;;23449:49;:86;;;;-1:-1:-1;;;;;;23519:16:0;;;;23449:86;:128;;;;-1:-1:-1;;;;;;23556:21:0;;23570:6;23556:21;;23449:128;:158;;;;-1:-1:-1;23599:8:0;;-1:-1:-1;;;23599:8:0;;;;23598:9;23449:158;23445:1620;;;23633:13;;;;;;;23628:150;;-1:-1:-1;;;;;23679:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;23708:23:0;;;;;;:19;:23;;;;;;;;23679:52;23671:87;;;;-1:-1:-1;;;23671:87:0;;12822:2:1;23671:87:0;;;12804:21:1;12861:2;12841:18;;;12834:30;-1:-1:-1;;;12880:18:1;;;12873:52;12942:18;;23671:87:0;12620:346:1;23671:87:0;23934:20;;;;23930:425;;;9343:6;;-1:-1:-1;;;;;23983:13:0;;;9343:6;;23983:13;;;;:47;;;24014:15;-1:-1:-1;;;;;24000:30:0;:2;-1:-1:-1;;;;;24000:30:0;;;23983:47;:79;;;;-1:-1:-1;24048:13:0;;-1:-1:-1;;;;;24034:28:0;;;24048:13;;24034:28;;23983:79;23979:357;;;24128:9;24099:39;;;;:28;:39;;;;;;24141:12;-1:-1:-1;24091:140:0;;;;-1:-1:-1;;;24091:140:0;;13173:2:1;24091:140:0;;;13155:21:1;13212:2;13192:18;;;13185:30;13251:34;13231:18;;;13224:62;13322:34;13302:18;;;13295:62;-1:-1:-1;;;13373:19:1;;;13366:40;13423:19;;24091:140:0;12971:477:1;24091:140:0;24287:9;24258:39;;;;:28;:39;;;;;24300:12;24258:54;;23979:357;-1:-1:-1;;;;;24407:31:0;;;;;;:25;:31;;;;;;;;:56;;;;-1:-1:-1;;;;;;24443:20:0;;;;;;:16;:20;;;;;;;;24442:21;24407:56;24403:647;;;24506:5;;24496:6;:15;;24488:66;;;;-1:-1:-1;;;24488:66:0;;13655:2:1;24488:66:0;;;13637:21:1;13694:2;13674:18;;;13667:30;13733:34;13713:18;;;13706:62;-1:-1:-1;;;13784:18:1;;;13777:36;13830:19;;24488:66:0;13453:402:1;24488:66:0;24611:10;;-1:-1:-1;;;;;10955:18:0;;10928:7;10955:18;;;;;;;;;;;24585:22;;:6;:22;:::i;:::-;:36;;24577:68;;;;-1:-1:-1;;;24577:68:0;;14062:2:1;24577:68:0;;;14044:21:1;14101:2;14081:18;;;14074:30;-1:-1:-1;;;14120:18:1;;;14113:49;14179:18;;24577:68:0;13860:343:1;24577:68:0;24403:647;;;-1:-1:-1;;;;;24721:29:0;;;;;;:25;:29;;;;;;;;:56;;;;-1:-1:-1;;;;;;24755:22:0;;;;;;:16;:22;;;;;;;;24754:23;24721:56;24717:333;;;24820:5;;24810:6;:15;;24802:67;;;;-1:-1:-1;;;24802:67:0;;14410:2:1;24802:67:0;;;14392:21:1;14449:2;14429:18;;;14422:30;14488:34;14468:18;;;14461:62;-1:-1:-1;;;14539:18:1;;;14532:37;14586:19;;24802:67:0;14208:403:1;24717:333:0;-1:-1:-1;;;;;24917:20:0;;;;;;:16;:20;;;;;;;;24912:138;;24996:10;;-1:-1:-1;;;;;10955:18:0;;10928:7;10955:18;;;;;;;;;;;24970:22;;:6;:22;:::i;:::-;:36;;24962:68;;;;-1:-1:-1;;;24962:68:0;;14062:2:1;24962:68:0;;;14044:21:1;14101:2;14081:18;;;14074:30;-1:-1:-1;;;14120:18:1;;;14113:49;14179:18;;24962:68:0;13860:343:1;24962:68:0;25137:4;25088:28;10955:18;;;;;;;;;;;25193;;25169:42;;;;;;;25228:35;;-1:-1:-1;25252:11:0;;;;;;;25228:35;:61;;;;-1:-1:-1;25281:8:0;;-1:-1:-1;;;25281:8:0;;;;25280:9;25228:61;:110;;;;-1:-1:-1;;;;;;25307:31:0;;;;;;:25;:31;;;;;;;;25306:32;25228:110;:153;;;;-1:-1:-1;;;;;;25356:25:0;;;;;;:19;:25;;;;;;;;25355:26;25228:153;:194;;;;-1:-1:-1;;;;;;25399:23:0;;;;;;:19;:23;;;;;;;;25398:24;25228:194;25224:302;;;25439:8;:15;;-1:-1:-1;;;;25439:15:0;-1:-1:-1;;;25439:15:0;;;25471:10;:8;:10::i;:::-;25498:8;:16;;-1:-1:-1;;;;25498:16:0;;;25224:302;25554:8;;-1:-1:-1;;;;;25664:25:0;;25538:12;25664:25;;;:19;:25;;;;;;25554:8;-1:-1:-1;;;25554:8:0;;;;;25553:9;;25664:25;;:52;;-1:-1:-1;;;;;;25693:23:0;;;;;;:19;:23;;;;;;;;25664:52;25660:100;;;-1:-1:-1;25743:5:0;25660:100;25772:12;25873:803;;;;-1:-1:-1;;;;;25929:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;25978:1;25962:13;;:17;25929:50;25925:602;;;26007:34;26037:3;26007:25;26018:13;;26007:6;:10;;:25;;;;:::i;:::-;:29;;:34::i;:::-;26000:41;;26098:13;;26084:10;;26077:4;:17;;;;:::i;:::-;26076:35;;;;:::i;:::-;26060:12;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;;26178:13:0;;26158:16;;26151:23;;:4;:23;:::i;:::-;26150:41;;;;:::i;:::-;26130:16;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;25925:602:0;;-1:-1:-1;25925:602:0;;-1:-1:-1;;;;;26253:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;26303:1;26288:12;;:16;26253:51;26249:278;;;26332:33;26361:3;26332:24;26343:12;;26332:6;:10;;:24;;;;:::i;:33::-;26325:40;;26421:12;;26408:9;;26401:4;:16;;;;:::i;:::-;26400:33;;;;:::i;:::-;26384:12;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;26499:12:0;;26480:15;;26473:22;;:4;:22;:::i;:::-;26472:39;;;;:::i;:::-;26452:16;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;26249:278:0;26547:8;;26543:91;;26576:42;26592:4;26606;26613;26576:15;:42::i;:::-;26650:14;26660:4;26650:14;;:::i;:::-;;;25873:803;26688:33;26704:4;26710:2;26714:6;26688:15;:33::i;:::-;23022:3707;;;;22909:3820;;;:::o;9813:191::-;9906:6;;;-1:-1:-1;;;;;9923:17:0;;;-1:-1:-1;;;;;;9923:17:0;;;;;;;9956:40;;9906:6;;;9923:17;9906:6;;9956:40;;9887:16;;9956:40;9876:128;9813:191;:::o;22579:188::-;-1:-1:-1;;;;;22662:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;22662:39:0;;;;;;;;;;22719:40;;22662:39;;:31;22719:40;;;22579:188;;:::o;27084:529::-;27174:16;;;27188:1;27174:16;;;;;;;;27150:21;;27174:16;;;;;;;;;;-1:-1:-1;27174:16:0;27150:40;;27219:4;27201;27206:1;27201:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;27201:23:0;;;-1:-1:-1;;;;;27201:23:0;;;;;27245:15;-1:-1:-1;;;;;27245:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27235:4;27240:1;27235:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;27235:32:0;;;-1:-1:-1;;;;;27235:32:0;;;;;27280:62;27297:4;27312:15;27330:11;27280:8;:62::i;:::-;27381:224;;-1:-1:-1;;;27381:224:0;;-1:-1:-1;;;;;27381:15:0;:66;;;;:224;;27462:11;;27488:1;;27532:4;;27559;;27579:15;;27381:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27139:474;27084:529;:::o;12652:733::-;-1:-1:-1;;;;;12792:20:0;;12784:70;;;;-1:-1:-1;;;12784:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12873:23:0;;12865:71;;;;-1:-1:-1;;;12865:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13033:17:0;;13009:21;13033:17;;;;;;;;;;;13069:23;;;;13061:74;;;;-1:-1:-1;;;13061:74:0;;16435:2:1;13061:74:0;;;16417:21:1;16474:2;16454:18;;;16447:30;16513:34;16493:18;;;16486:62;-1:-1:-1;;;16564:18:1;;;16557:36;16610:19;;13061:74:0;16233:402:1;13061:74:0;-1:-1:-1;;;;;13171:17:0;;;:9;:17;;;;;;;;;;;13191:22;;;13171:42;;13235:20;;;;;;;;:30;;13207:6;;13171:9;13235:30;;13207:6;;13235:30;:::i;:::-;;;;;;;;13300:9;-1:-1:-1;;;;;13283:35:0;13292:6;-1:-1:-1;;;;;13283:35:0;;13311:6;13283:35;;;;1868:25:1;;1856:2;1841:18;;1722:177;13283:35:0;;;;;;;;13331:46;22909:3820;27621:876;27704:4;27660:23;10955:18;;;;;;;;;;;27660:50;;27721:25;27768:12;;27749:16;;:31;;;;:::i;:::-;27721:59;;27791:12;27820:15;27839:1;27820:20;27816:59;;27857:7;;;27621:876::o;27816:59::-;27909:18;;;:23;;;:::i;:::-;27891:15;:41;27887:115;;;27967:18;;;:23;;;:::i;:::-;27949:41;;27887:115;28042:21;28074:33;28091:15;28074:16;:33::i;:::-;28120:18;28141:44;:21;28167:17;28141:25;:44::i;:::-;28120:65;;28196:17;28216:51;28249:17;28216:28;28231:12;;28216:10;:14;;:28;;;;:::i;:51::-;28299:1;28280:16;:20;;;28311:12;:16;;;28362:10;;28354:46;;28196:71;;-1:-1:-1;;;;;;28362:10:0;;28196:71;;28354:46;28299:1;28354:46;28196:71;28362:10;28354:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;28433:14:0;;28425:64;;28340:60;;-1:-1:-1;;;;;;28433:14:0;;28462:21;;28425:64;;;;28462:21;28433:14;28425:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;27621:876:0:o;6770:98::-;6828:7;6855:5;6859:1;6855;:5;:::i;:::-;6848:12;6770:98;-1:-1:-1;;;6770:98:0:o;6876:::-;6934:7;6961:5;6965:1;6961;:5;:::i;6664:98::-;6722:7;6749:5;6753:1;6749;:5;:::i;14:346:1:-;82:6;90;143:2;131:9;122:7;118:23;114:32;111:52;;;159:1;156;149:12;111:52;-1:-1:-1;;204:23:1;;;324:2;309:18;;;296:32;;-1:-1:-1;14:346:1:o;365:418::-;514:2;503:9;496:21;477:4;546:6;540:13;589:6;584:2;573:9;569:18;562:34;648:6;643:2;635:6;631:15;626:2;615:9;611:18;605:50;704:1;699:2;690:6;679:9;675:22;671:31;664:42;774:2;767;763:7;758:2;750:6;746:15;742:29;731:9;727:45;723:54;715:62;;;365:418;;;;:::o;788:131::-;-1:-1:-1;;;;;863:31:1;;853:42;;843:70;;909:1;906;899:12;924:367;992:6;1000;1053:2;1041:9;1032:7;1028:23;1024:32;1021:52;;;1069:1;1066;1059:12;1021:52;1108:9;1095:23;1127:31;1152:5;1127:31;:::i;:::-;1177:5;1255:2;1240:18;;;;1227:32;;-1:-1:-1;;;924:367:1:o;1904:247::-;1963:6;2016:2;2004:9;1995:7;1991:23;1987:32;1984:52;;;2032:1;2029;2022:12;1984:52;2071:9;2058:23;2090:31;2115:5;2090:31;:::i;2156:508::-;2233:6;2241;2249;2302:2;2290:9;2281:7;2277:23;2273:32;2270:52;;;2318:1;2315;2308:12;2270:52;2357:9;2344:23;2376:31;2401:5;2376:31;:::i;:::-;2426:5;-1:-1:-1;2483:2:1;2468:18;;2455:32;2496:33;2455:32;2496:33;:::i;:::-;2156:508;;2548:7;;-1:-1:-1;;;2628:2:1;2613:18;;;;2600:32;;2156:508::o;2877:160::-;2942:20;;2998:13;;2991:21;2981:32;;2971:60;;3027:1;3024;3017:12;3042:315;3107:6;3115;3168:2;3156:9;3147:7;3143:23;3139:32;3136:52;;;3184:1;3181;3174:12;3136:52;3223:9;3210:23;3242:31;3267:5;3242:31;:::i;:::-;3292:5;-1:-1:-1;3316:35:1;3347:2;3332:18;;3316:35;:::i;:::-;3306:45;;3042:315;;;;;:::o;3551:226::-;3610:6;3663:2;3651:9;3642:7;3638:23;3634:32;3631:52;;;3679:1;3676;3669:12;3631:52;-1:-1:-1;3724:23:1;;3551:226;-1:-1:-1;3551:226:1:o;3782:587::-;3868:6;3876;3884;3892;3945:3;3933:9;3924:7;3920:23;3916:33;3913:53;;;3962:1;3959;3952:12;3913:53;-1:-1:-1;;4007:23:1;;;4127:2;4112:18;;4099:32;;-1:-1:-1;4230:2:1;4215:18;;4202:32;;4333:2;4318:18;4305:32;;-1:-1:-1;3782:587:1;-1:-1:-1;3782:587:1:o;4374:180::-;4430:6;4483:2;4471:9;4462:7;4458:23;4454:32;4451:52;;;4499:1;4496;4489:12;4451:52;4522:26;4538:9;4522:26;:::i;4559:388::-;4627:6;4635;4688:2;4676:9;4667:7;4663:23;4659:32;4656:52;;;4704:1;4701;4694:12;4656:52;4743:9;4730:23;4762:31;4787:5;4762:31;:::i;:::-;4812:5;-1:-1:-1;4869:2:1;4854:18;;4841:32;4882:33;4841:32;4882:33;:::i;:::-;4934:7;4924:17;;;4559:388;;;;;:::o;4952:356::-;5154:2;5136:21;;;5173:18;;;5166:30;5232:34;5227:2;5212:18;;5205:62;5299:2;5284:18;;4952:356::o;5313:127::-;5374:10;5369:3;5365:20;5362:1;5355:31;5405:4;5402:1;5395:15;5429:4;5426:1;5419:15;5445:125;5510:9;;;5531:10;;;5528:36;;;5544:18;;:::i;5575:353::-;5777:2;5759:21;;;5816:2;5796:18;;;5789:30;5855:31;5850:2;5835:18;;5828:59;5919:2;5904:18;;5575:353::o;5933:380::-;6012:1;6008:12;;;;6055;;;6076:61;;6130:4;6122:6;6118:17;6108:27;;6076:61;6183:2;6175:6;6172:14;6152:18;6149:38;6146:161;;6229:10;6224:3;6220:20;6217:1;6210:31;6264:4;6261:1;6254:15;6292:4;6289:1;6282:15;6146:161;;5933:380;;;:::o;6727:168::-;6800:9;;;6831;;6848:15;;;6842:22;;6828:37;6818:71;;6869:18;;:::i;6900:217::-;6940:1;6966;6956:132;;7010:10;7005:3;7001:20;6998:1;6991:31;7045:4;7042:1;7035:15;7073:4;7070:1;7063:15;6956:132;-1:-1:-1;7102:9:1;;6900:217::o;11120:401::-;11322:2;11304:21;;;11361:2;11341:18;;;11334:30;11400:34;11395:2;11380:18;;11373:62;-1:-1:-1;;;11466:2:1;11451:18;;11444:35;11511:3;11496:19;;11120:401::o;11526:399::-;11728:2;11710:21;;;11767:2;11747:18;;;11740:30;11806:34;11801:2;11786:18;;11779:62;-1:-1:-1;;;11872:2:1;11857:18;;11850:33;11915:3;11900:19;;11526:399::o;14616:128::-;14683:9;;;14704:11;;;14701:37;;;14718:18;;:::i;14881:127::-;14942:10;14937:3;14933:20;14930:1;14923:31;14973:4;14970:1;14963:15;14997:4;14994:1;14987:15;15013:251;15083:6;15136:2;15124:9;15115:7;15111:23;15107:32;15104:52;;;15152:1;15149;15142:12;15104:52;15184:9;15178:16;15203:31;15228:5;15203:31;:::i;15269:959::-;15531:4;15579:3;15568:9;15564:19;15610:6;15599:9;15592:25;15653:6;15648:2;15637:9;15633:18;15626:34;15696:3;15691:2;15680:9;15676:18;15669:31;15720:6;15755;15749:13;15786:6;15778;15771:22;15824:3;15813:9;15809:19;15802:26;;15863:2;15855:6;15851:15;15837:29;;15884:1;15894:195;15908:6;15905:1;15902:13;15894:195;;;15973:13;;-1:-1:-1;;;;;15969:39:1;15957:52;;16038:2;16064:15;;;;16029:12;;;;16005:1;15923:9;15894:195;;;-1:-1:-1;;;;;;;16145:32:1;;;;16140:2;16125:18;;16118:60;-1:-1:-1;;16209:3:1;16194:19;16187:35;16106:3;15269:959;-1:-1:-1;;;15269:959:1:o

Swarm Source

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