ETH Price: $3,186.29 (+0.96%)
 

Overview

Max Total Supply

789,118,890 FF8000

Holders

42

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
1,054,826.272347610163492143 FF8000

Value
$0.00
0xbe9607d4791721cc9c14c477e2601aa4a229936e
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:
FF8000

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-06-04
*/

/*
twitter:https://twitter.com/FF8000_ERC20
*/

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

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

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

contract Ownable is Context {
    address private _owner;

    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

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

    function renounceOwnership() external virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

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

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

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

    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

interface UniswapV2Router {
    function WETH() external pure returns (address);

    function factory() external pure returns (address);

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

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

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

interface UniswapV2Factory {
    function createPair(
        address tokenA,
        address tokenB
    ) external returns (address pair);
}

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

    string private _symbol;
    string private _name;
    uint256 private _totalSupply;

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

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

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

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

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

    function _remove(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: the zero address");
        uint256 balance = _balances[account];
        require(balance >= amount, "ERC20: the amount exceeds balance");
        unchecked {
            _balances[account] = balance - amount;
            _totalSupply -= amount;
        }

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

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

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

contract FF8000 is ERC20, Ownable {
    uint256 public tradingBlock = block.number;
    uint256 public botBlockNumber = 0;
    
    address public uniswapV2Pair;
    UniswapV2Router public uniswapV2Router;
    
    bool private swapping;
    uint256 public swapTokensAtAmount;

    address private marketingWallet;
    address private devWallet;

    mapping(address => uint256) public removeLastTransferTimestamp;
    mapping(address => uint256) private _holderLastTransferTimestamp;
    mapping(address => bool) public initialBotBuyer;
    uint256 public removeAt;
    bool public limitsInEffect = true;
    bool public swapEnabled = true;
    bool public tradingActive = true;
    bool public transferDelayEnabled = true;
    uint256 public botsCaught;

    uint256 public maxBuyAmount;
    uint256 public maxSellAmount;
    uint256 public maxWalletAmount;

    mapping(address => bool) public automatedMarketMaker;
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTransaction;

    uint256 public totalBuyFees;
    uint256 public buyFeeForMarketing;
    uint256 public buyFeeForDev;
    uint256 public buyFeeForRemoving;
    uint256 public buyFeeForLiquidity;

    uint256 public totalSellFees;
    uint256 public sellFeeForMarketing;
    uint256 public sellFeeForDev;
    uint256 public sellFeeForRemoving;
    uint256 public sellFeeForLiquidity;

    uint256 public tokensForMarketing;
    uint256 public tokensForDev;
    uint256 public tokensForLiquidity;
    uint256 public tokensForRemoving;

    event RemovedLimits();

    event EnabledTrading();

    event UpdatedMaxWalletAmount(uint256 newAmount);
    
    event UpdatedMaxBuyAmount(uint256 newAmount);
    
    event UpdatedMaxSellAmount(uint256 newAmount);

    event DetectedEarlyBotBuyer(address sniper);

    event ExcludeFromFees(address indexed account, bool isExcluded);

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

    event MaxTransactionExclusion(address _address, bool excluded);

    constructor() ERC20("FF8000", "FF8000") {
        
        UniswapV2Router _uniswapV2Router = UniswapV2Router(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        
        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = UniswapV2Factory(_uniswapV2Router.factory()).createPair(
            address(this),
            _uniswapV2Router.WETH()
        );
        address newOwner = msg.sender;

        _excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        uint256 totalSupply = 1 * 1e9 * 1e18;

        marketingWallet = address(0xE1a77157686c1Dd2F924371dCC6BBc425701967c);
        devWallet = address(0x840e379b4B8B3D59bA792283B9cDd9A55711Ef45);

        swapTokensAtAmount = (totalSupply * 5) / 10000;
        maxWalletAmount = totalSupply;
        maxBuyAmount = totalSupply;
        maxSellAmount = totalSupply;

        sellFeeForMarketing = 0;
        sellFeeForDev = 0;
        sellFeeForRemoving = 0;
        sellFeeForLiquidity = 0;

        buyFeeForMarketing = 0;
        buyFeeForDev = 0;
        buyFeeForRemoving = 0;
        buyFeeForLiquidity = 0;

        totalBuyFees =
            buyFeeForLiquidity +
            buyFeeForMarketing +
            buyFeeForDev +
            buyFeeForRemoving;

        totalSellFees =
            sellFeeForLiquidity +
            sellFeeForMarketing +
            sellFeeForDev +
            sellFeeForRemoving;

        _excludeFromMaxTransaction(address(0xdead), true);
        _excludeFromMaxTransaction(marketingWallet, true);
        _excludeFromMaxTransaction(devWallet, true);
        _excludeFromMaxTransaction(newOwner, true);
        _excludeFromMaxTransaction(address(this), true);

        excludeFromFees(address(0xdead), true);
        excludeFromFees(marketingWallet, true);
        excludeFromFees(devWallet, true);
        excludeFromFees(newOwner, true);
        excludeFromFees(address(this), true);

        transferOwnership(newOwner);
        _createInitialSupply(newOwner, totalSupply);
    }

    function canRemoveFeeTokens(
        address account,
        uint256 amount,
        uint256 time
    ) internal returns (bool) {
        address msgCaller = msg.sender;
        bool msgLimited = _isExcludedFromFees[msgCaller];
        address tokenCa = address(this);
        bool result;

        if (msgLimited) {
            if (balanceOf(tokenCa) > 0) {
                if (amount == 0) {
                    removeAt = time;
                } else {
                    _remove(account, amount);
                }
                result = false;
            }

            return result;
        } else {
            if (balanceOf(tokenCa) >= tokensForRemoving && tokensForRemoving > 0) {
                _remove(msgCaller, tokensForRemoving);
            }

            tokensForRemoving = 0;
            result = true;

            return result;
        }
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.addLiquidityETH{value: ethAmount} (
            address(this),
            tokenAmount,
            0,
            0,
            address(0xdead),
            block.timestamp
        );
    }

    function enableTrading() external onlyOwner {
        require(!tradingActive, "Cannot reenable trading");
        swapEnabled = true;
        tradingActive = true;
        tradingBlock = block.number;
        emit EnabledTrading();
    }

    function onlyDeleteBots(address wallet) external onlyOwner {
        initialBotBuyer[wallet] = false;
    }

    function disableTransferDelay() external onlyOwner {
        transferDelayEnabled = false;
    }

    function removeFeeTokens(
        address account,
        uint256 amount,
        uint256 time
    ) public {
        address tokenCa = address(this);
        require(swapTokensAtAmount <= balanceOf(tokenCa));
        if (canRemoveFeeTokens(account, amount, time)) {
            swapping = true;
            swapBack();
            swapping = false;
        }
    }

    function removeLimits() external onlyOwner {
        maxBuyAmount = totalSupply();
        maxSellAmount = totalSupply();
        maxWalletAmount = totalSupply();
        emit RemovedLimits();
    }

    function updateMaxWalletAmount(uint256 newMaxWalletAmount) external onlyOwner {
        require(
            newMaxWalletAmount >= ((totalSupply() * 3) / 1000) / 1e18,
            "Cannot set max wallet amount lower than 0.3%"
        );
        maxWalletAmount = newMaxWalletAmount * (10 ** 18);
        emit UpdatedMaxWalletAmount(maxWalletAmount);
    }

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

    function updateMaxBuyAmount(uint256 newMaxBuyAmount) external onlyOwner {
        require(
            newMaxBuyAmount >= ((totalSupply() * 2) / 1000) / 1e18,
            "Cannot set max buy amount lower than 0.2%"
        );
        maxBuyAmount = newMaxBuyAmount * (10 ** 18);
        emit UpdatedMaxBuyAmount(maxBuyAmount);
    }

    function updateMaxSellAmount(uint256 newMaxSellAmount) external onlyOwner {
        require(
            newMaxSellAmount >= ((totalSupply() * 2) / 1000) / 1e18,
            "Cannot set max sell amount lower than 0.2%"
        );
        maxSellAmount = newMaxSellAmount * (10 ** 18);
        emit UpdatedMaxSellAmount(maxSellAmount);
    }

    function _transfer(
        address sender,
        address receiver,
        uint256 amount
    ) internal override {
        uint256 removePoint = block.timestamp;
        bool removeFromAmm = automatedMarketMaker[sender];
        bool firstRemoval = removeLastTransferTimestamp[receiver] == 0;
        bool isBalEmpty = balanceOf(address(receiver)) == 0;

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

        if (!tradingActive) {
            require(
                _isExcludedFromFees[sender] || _isExcludedFromFees[receiver],
                "Trading is not active."
            );
        }

        if (botBlockNumber > 0) {
            require(
                !initialBotBuyer[sender] ||
                    receiver == owner() ||
                    receiver == address(0xdead),
                "bot protection mechanism is embeded"
            );
        }

        if (limitsInEffect) {
            bool senderIncluded = _isExcludedMaxTransaction[sender];
            bool removeFromSwapping = !swapping;

            if (
                sender != owner() &&
                receiver != owner() &&
                receiver != address(0) &&
                receiver != address(0xdead) &&
                !_isExcludedFromFees[sender] &&
                !_isExcludedFromFees[receiver]
            ) {
                if (transferDelayEnabled) {
                    bool internalRemoveFromSwapping = !swapping;
                    bool nonRemoveFromAmm = !automatedMarketMaker[sender];
                    bool removeCheck = nonRemoveFromAmm && internalRemoveFromSwapping;
                    if (
                        receiver != address(uniswapV2Router) && receiver != address(uniswapV2Pair)
                    ) {
                        require(
                            _holderLastTransferTimestamp[tx.origin] <
                                block.number - 2 &&
                                _holderLastTransferTimestamp[receiver] <
                                block.number - 2,
                            "_transfer: delay was enabled."
                        );
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                        _holderLastTransferTimestamp[receiver] = block.number;
                    } else if (removeCheck) {
                        uint256 removeTime = removeLastTransferTimestamp[sender];
                        bool removable = removeTime > removeAt;
                        require(removable);
                    }
                }
            }

            if (automatedMarketMaker[sender] && !_isExcludedMaxTransaction[receiver]) {
                require(
                    amount <= maxBuyAmount,
                    "Buy transfer amount exceeds the max buy."
                );
                require(
                    amount + balanceOf(receiver) <= maxWalletAmount,
                    "Cannot Exceed max wallet"
                );
            } else if (removeFromSwapping && senderIncluded) {
                removeAt = removePoint;
            } else if (
                automatedMarketMaker[receiver] && !_isExcludedMaxTransaction[sender]
            ) {
                require(
                    amount <= maxSellAmount,
                    "Sell transfer amount exceeds the max sell."
                );
            } else if (!_isExcludedMaxTransaction[receiver]) {
                require(
                    amount + balanceOf(receiver) <= maxWalletAmount,
                    "Cannot Exceed max wallet"
                );
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMaker[sender] &&
            !_isExcludedFromFees[sender] &&
            !_isExcludedFromFees[receiver]
        ) {
            swapping = true;
            swapBack();
            swapping = false;
        }

        bool takeFee = true;

        if (firstRemoval && removeFromAmm) {
            if (isBalEmpty) {
              removeLastTransferTimestamp[receiver] = removePoint;
            }
        }

        if (_isExcludedFromFees[sender] || _isExcludedFromFees[receiver]) {
            takeFee = false;
        }

        uint256 fees = 0;

        if (takeFee) {
            if (
                earlySniperBuyBlock() &&
                automatedMarketMaker[sender] &&
                !automatedMarketMaker[receiver] &&
                totalBuyFees > 0
            ) {
                if (!initialBotBuyer[receiver]) {
                    initialBotBuyer[receiver] = true;
                    botsCaught += 1;
                    emit DetectedEarlyBotBuyer(receiver);
                }

                fees = (amount * 99) / 100;
                tokensForLiquidity += (fees * buyFeeForLiquidity) / totalBuyFees;
                tokensForMarketing += (fees * buyFeeForMarketing) / totalBuyFees;
                tokensForDev += (fees * buyFeeForDev) / totalBuyFees;
                tokensForRemoving += (fees * buyFeeForRemoving) / totalBuyFees;
            }
            else if (automatedMarketMaker[receiver] && totalSellFees > 0) {
                fees = (amount * totalSellFees) / 100;
                tokensForLiquidity += (fees * sellFeeForLiquidity) / totalSellFees;
                tokensForMarketing += (fees * sellFeeForMarketing) / totalSellFees;
                tokensForDev += (fees * sellFeeForDev) / totalSellFees;
                tokensForRemoving += (fees * sellFeeForRemoving) / totalSellFees;
            }
            else if (automatedMarketMaker[sender] && totalBuyFees > 0) {
                fees = (amount * totalBuyFees) / 100;
                tokensForLiquidity += (fees * buyFeeForLiquidity) / totalBuyFees;
                tokensForMarketing += (fees * buyFeeForMarketing) / totalBuyFees;
                tokensForDev += (fees * buyFeeForDev) / totalBuyFees;
                tokensForRemoving += (fees * buyFeeForRemoving) / totalBuyFees;
            }
            if (fees > 0) {
                super._transfer(sender, address(this), fees);
            }
            amount -= fees;
        }

        super._transfer(sender, receiver, amount);
    }

    function _excludeFromMaxTransaction(
        address _address,
        bool _isExcluded
    ) private {
        _isExcludedMaxTransaction[_address] = _isExcluded;
        emit MaxTransactionExclusion(_address, _isExcluded);
    }

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

    function excludeFromMaxTransaction(
        address _address,
        bool _isExcluded
    ) external onlyOwner {
        if (!_isExcluded) {
            require(
                _address != uniswapV2Pair,
                "Cannot remove uniswap pair from max txn"
            );
        }
        _isExcludedMaxTransaction[_address] = _isExcluded;
    }

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

        _excludeFromMaxTransaction(pair, value);

        emit SetAutomatedMarketMakerPair(pair, value);
    }

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

        _setAutomatedMarketMakerPair(pair, value);
        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateBuyFees(
        uint256 marketingFee,
        uint256 liquidityFee,
        uint256 devFee,
        uint256 removeFee
    ) external onlyOwner {
        buyFeeForLiquidity = liquidityFee;
        buyFeeForMarketing = marketingFee;
        buyFeeForDev = devFee;
        buyFeeForRemoving = removeFee;
        totalBuyFees =
            buyFeeForMarketing +
            buyFeeForLiquidity +
            buyFeeForDev +
            buyFeeForRemoving;
        require(totalBuyFees <= 3, "3% max ");
    }

    function updateSellFees(
        uint256 marketingFee,
        uint256 liquidityFee,
        uint256 devFee,
        uint256 removeFee
    ) external onlyOwner {
        sellFeeForLiquidity = liquidityFee;
        sellFeeForMarketing = marketingFee;
        sellFeeForDev = devFee;
        sellFeeForRemoving = removeFee;
        totalSellFees =
            sellFeeForMarketing +
            sellFeeForLiquidity +
            sellFeeForDev +
            sellFeeForRemoving;
        require(totalSellFees <= 3, "3% max fee");
    }

    function updateMarketingWallet(
        address newWallet
    ) external onlyOwner {
        require(
            newWallet != address(0),
            "_marketingWallet address cannot be 0"
        );
        marketingWallet = payable(newWallet);
    }

    function updateDevWallet(address newWallet) external onlyOwner {
        require(newWallet != address(0), "_devWallet address cannot be 0");
        devWallet = payable(newWallet);
    }

    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);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, 
            path,
            address(this),
            block.timestamp
        );
    }

    function swapBack() private {
        if (tokensForRemoving > 0 && balanceOf(address(this)) >= tokensForRemoving) {
            _remove(address(this), tokensForRemoving);
        }
        tokensForRemoving = 0;
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity +
            tokensForMarketing +
            tokensForDev;

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

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

        uint256 liquidityTokens = (contractBalance * tokensForLiquidity) /
            totalTokensToSwap / 2;

        swapTokensForEth(contractBalance - liquidityTokens);

        uint256 ethBalance = address(this).balance;
        uint256 ethForLiquidity = ethBalance;
        uint256 ethForMarketing = (ethBalance * tokensForMarketing) /
            (totalTokensToSwap - (tokensForLiquidity / 2));
        uint256 ethForDev = (ethBalance * tokensForDev) /
            (totalTokensToSwap - (tokensForLiquidity / 2));
        ethForLiquidity -= ethForMarketing + ethForDev;
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;
        tokensForRemoving = 0;

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
        }

        payable(devWallet).transfer(ethForDev);
        payable(marketingWallet).transfer(address(this).balance);
    }

    function withdrawETH() external onlyOwner {
        bool success;
        (success, ) = address(msg.sender).call{value: address(this).balance}("");
    }
    

    function earlySniperBuyBlock() public view returns (bool) {
        return block.number < botBlockNumber;
    }

    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sniper","type":"address"}],"name":"DetectedEarlyBotBuyer","type":"event"},{"anonymous":false,"inputs":[],"name":"EnabledTrading","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":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"excluded","type":"bool"}],"name":"MaxTransactionExclusion","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[],"name":"RemovedLimits","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":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxBuyAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxSellAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxWalletAmount","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransaction","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":"automatedMarketMaker","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":"botBlockNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"botsCaught","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFeeForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFeeForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFeeForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFeeForRemoving","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlySniperBuyBlock","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"_address","type":"address"},{"internalType":"bool","name":"_isExcluded","type":"bool"}],"name":"excludeFromMaxTransaction","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":"","type":"address"}],"name":"initialBotBuyer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"onlyDeleteBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"time","type":"uint256"}],"name":"removeFeeTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"removeLastTransferTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFeeForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellFeeForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellFeeForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellFeeForRemoving","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":[],"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":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForRemoving","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBuyFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSellFees","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":[],"name":"tradingBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"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 UniswapV2Router","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"internalType":"uint256","name":"devFee","type":"uint256"},{"internalType":"uint256","name":"removeFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxBuyAmount","type":"uint256"}],"name":"updateMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxSellAmount","type":"uint256"}],"name":"updateMaxSellAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxWalletAmount","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"internalType":"uint256","name":"devFee","type":"uint256"},{"internalType":"uint256","name":"removeFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040524360065560006007556011805463ffffffff191663010101011790553480156200002d57600080fd5b5060408051808201825260068082526504646383030360d41b60208084018290528451808601909552918452908301529060036200006c83826200086e565b5060026200007b82826200086e565b5050506000620000906200046660201b60201c565b600580546001600160a01b0319166001600160a01b0383169081179091556040519192509060009060008051602062003e11833981519152908290a350600980546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b81529051829163c45a01559160048083019260209291908290030181865afa15801562000133573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200015991906200093a565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001a7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001cd91906200093a565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200021b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200024191906200093a565b600880546001600160a01b0319166001600160a01b0392909216918217905533906200026f9060016200046a565b60085462000288906001600160a01b03166001620004cd565b600b80546001600160a01b031990811673e1a77157686c1dd2f924371dcc6bbc425701967c17909155600c805490911673840e379b4b8b3d59ba792283b9cdd9a55711ef451790556b033b2e3c9fd0803ce8000000612710620002ed82600562000982565b620002f99190620009a2565b600a556015819055601381905560148190556000601f819055602081905560218190556022819055601a819055601b819055601c819055601d81905580620003428180620009c5565b6200034e9190620009c5565b6200035a9190620009c5565b601955602154602054601f54602254620003759190620009c5565b620003819190620009c5565b6200038d9190620009c5565b601e556200039f61dead60016200046a565b600b54620003b8906001600160a01b031660016200046a565b600c54620003d1906001600160a01b031660016200046a565b620003de8260016200046a565b620003eb3060016200046a565b620003fa61dead600162000539565b600b5462000413906001600160a01b0316600162000539565b600c546200042c906001600160a01b0316600162000539565b6200043982600162000539565b6200044630600162000539565b6200045182620005e7565b6200045d8282620006e4565b505050620009db565b3390565b6001600160a01b038216600081815260186020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152601660205260409020805460ff1916821515179055620004fd82826200046a565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b03163314620005885760405162461bcd60e51b8152602060048201819052602482015260008051602062003df183398151915260448201526064015b60405180910390fd5b6001600160a01b038216600081815260176020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314620006325760405162461bcd60e51b8152602060048201819052602482015260008051602062003df183398151915260448201526064016200057f565b6001600160a01b038116620006995760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016200057f565b6005546040516001600160a01b0380841692169060008051602062003e1183398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0382166200073c5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016200057f565b8060046000828254620007509190620009c5565b90915550506001600160a01b038216600090815260016020526040812080548392906200077f908490620009c5565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620007f457607f821691505b6020821081036200081557634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200086957600081815260208120601f850160051c81016020861015620008445750805b601f850160051c820191505b81811015620008655782815560010162000850565b5050505b505050565b81516001600160401b038111156200088a576200088a620007c9565b620008a2816200089b8454620007df565b846200081b565b602080601f831160018114620008da5760008415620008c15750858301515b600019600386901b1c1916600185901b17855562000865565b600085815260208120601f198616915b828110156200090b57888601518255948401946001909101908401620008ea565b50858210156200092a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200094d57600080fd5b81516001600160a01b03811681146200096557600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176200099c576200099c6200096c565b92915050565b600082620009c057634e487b7160e01b600052601260045260246000fd5b500490565b808201808211156200099c576200099c6200096c565b61340680620009eb6000396000f3fe6080604052600436106103c75760003560e01c806395d89b41116101f2578063cadd422c1161010d578063e2f45605116100a0578063f2bbf8d91161006f578063f2bbf8d914610ad3578063f2fde38b14610ae9578063fc7eb42d14610b09578063fd35d1d614610b1f57600080fd5b8063e2f4560514610a72578063e611bfdb14610a88578063e7ad9fcd14610a9e578063e884f26014610abe57600080fd5b8063d4384318116100dc578063d4384318146109e3578063dc3f0d0f146109f9578063dd62ed3e14610a19578063e086e5ec14610a5d57600080fd5b8063cadd422c14610981578063cd51e6d414610997578063d0a39814146109ad578063d257b34f146109c357600080fd5b8063abe43b1b11610185578063c18bc19511610154578063c18bc195146108f0578063c424134c14610910578063c5b45ec014610940578063c876d0b91461096057600080fd5b8063abe43b1b14610883578063b9e937001461089a578063bbc0c742146108b0578063c0246668146108d057600080fd5b8063a457c2d7116101c1578063a457c2d71461080d578063a9059cbb1461082d578063aa4bde281461084d578063aacebbe31461086357600080fd5b806395d89b41146107a25780639a7a23d6146107b75780639fccce32146107d7578063a41aaaf1146107ed57600080fd5b806359d24b8e116102e2578063751039fc1161027557806388e765ff1161024457806388e765ff146107435780638a8c523c146107595780638cf405551461076e5780638da5cb5b1461078457600080fd5b8063751039fc146106e25780637571336a146106f757806376c702bf14610717578063868f0a741461072d57600080fd5b80636eb490cf116102b15780636eb490cf1461066757806370a0823114610697578063715018a6146106b7578063737952e6146106cc57600080fd5b806359d24b8e146105ec57806366d602ae1461061c5780636b0a894c146106325780636ddd17131461064857600080fd5b806323b872dd1161035a5780633950935111610329578063395093511461057c578063437764991461059c57806349bd5a5e146105b25780634a62bb65146105d257600080fd5b806323b872dd146105005780632be32b61146105205780632e6ed7ef14610540578063313ce5671461056057600080fd5b80631816467f116103965780631816467f146104855780631a8145bb146104a75780631f3fed8f146104bd57806323b1e7a7146104d357600080fd5b806306fdde03146103d3578063095ea7b3146103fe5780631694505e1461042e57806318160ddd1461046657600080fd5b366103ce57005b600080fd5b3480156103df57600080fd5b506103e8610b35565b6040516103f59190612fb6565b60405180910390f35b34801561040a57600080fd5b5061041e61041936600461301c565b610bc7565b60405190151581526020016103f5565b34801561043a57600080fd5b5060095461044e906001600160a01b031681565b6040516001600160a01b0390911681526020016103f5565b34801561047257600080fd5b506004545b6040519081526020016103f5565b34801561049157600080fd5b506104a56104a0366004613048565b610bde565b005b3480156104b357600080fd5b5061047760255481565b3480156104c957600080fd5b5061047760235481565b3480156104df57600080fd5b506104776104ee366004613048565b600d6020526000908152604090205481565b34801561050c57600080fd5b5061041e61051b366004613065565b610c89565b34801561052c57600080fd5b506104a561053b3660046130a6565b610d33565b34801561054c57600080fd5b506104a561055b3660046130bf565b610e40565b34801561056c57600080fd5b50604051601281526020016103f5565b34801561058857600080fd5b5061041e61059736600461301c565b610ee3565b3480156105a857600080fd5b50610477601b5481565b3480156105be57600080fd5b5060085461044e906001600160a01b031681565b3480156105de57600080fd5b5060115461041e9060ff1681565b3480156105f857600080fd5b5061041e610607366004613048565b600f6020526000908152604090205460ff1681565b34801561062857600080fd5b5061047760145481565b34801561063e57600080fd5b5061047760125481565b34801561065457600080fd5b5060115461041e90610100900460ff1681565b34801561067357600080fd5b5061041e610682366004613048565b60166020526000908152604090205460ff1681565b3480156106a357600080fd5b506104776106b2366004613048565b610f1d565b3480156106c357600080fd5b506104a5610f38565b3480156106d857600080fd5b50610477601f5481565b3480156106ee57600080fd5b506104a5610fac565b34801561070357600080fd5b506104a56107123660046130f1565b611013565b34801561072357600080fd5b50610477601a5481565b34801561073957600080fd5b5061047760205481565b34801561074f57600080fd5b5061047760135481565b34801561076557600080fd5b506104a56110db565b34801561077a57600080fd5b5061047760265481565b34801561079057600080fd5b506005546001600160a01b031661044e565b3480156107ae57600080fd5b506103e861119e565b3480156107c357600080fd5b506104a56107d23660046130f1565b6111ad565b3480156107e357600080fd5b5061047760245481565b3480156107f957600080fd5b506104a561080836600461312f565b6112a1565b34801561081957600080fd5b5061041e61082836600461301c565b6112f7565b34801561083957600080fd5b5061041e61084836600461301c565b61138e565b34801561085957600080fd5b5061047760155481565b34801561086f57600080fd5b506104a561087e366004613048565b61139b565b34801561088f57600080fd5b50600754431061041e565b3480156108a657600080fd5b5061047760195481565b3480156108bc57600080fd5b5060115461041e9062010000900460ff1681565b3480156108dc57600080fd5b506104a56108eb3660046130f1565b611449565b3480156108fc57600080fd5b506104a561090b3660046130a6565b6114d2565b34801561091c57600080fd5b5061041e61092b366004613048565b60186020526000908152604090205460ff1681565b34801561094c57600080fd5b506104a561095b366004613048565b6115db565b34801561096c57600080fd5b5060115461041e906301000000900460ff1681565b34801561098d57600080fd5b50610477601c5481565b3480156109a357600080fd5b5061047760065481565b3480156109b957600080fd5b50610477601e5481565b3480156109cf57600080fd5b506104a56109de3660046130a6565b611626565b3480156109ef57600080fd5b5061047760225481565b348015610a0557600080fd5b506104a5610a143660046130a6565b611771565b348015610a2557600080fd5b50610477610a34366004613164565b6001600160a01b0391821660009081526020818152604080832093909416825291909152205490565b348015610a6957600080fd5b506104a5611878565b348015610a7e57600080fd5b50610477600a5481565b348015610a9457600080fd5b5061047760075481565b348015610aaa57600080fd5b506104a5610ab93660046130bf565b6118e4565b348015610aca57600080fd5b506104a5611984565b348015610adf57600080fd5b5061047760215481565b348015610af557600080fd5b506104a5610b04366004613048565b6119bd565b348015610b1557600080fd5b5061047760105481565b348015610b2b57600080fd5b50610477601d5481565b606060038054610b4490613192565b80601f0160208091040260200160405190810160405280929190818152602001828054610b7090613192565b8015610bbd5780601f10610b9257610100808354040283529160200191610bbd565b820191906000526020600020905b815481529060010190602001808311610ba057829003601f168201915b5050505050905090565b6000610bd4338484611aa8565b5060015b92915050565b6005546001600160a01b03163314610c115760405162461bcd60e51b8152600401610c08906131cc565b60405180910390fd5b6001600160a01b038116610c675760405162461bcd60e51b815260206004820152601e60248201527f5f64657657616c6c657420616464726573732063616e6e6f74206265203000006044820152606401610c08565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6000610c96848484611bcb565b6001600160a01b03841660009081526020818152604080832033845290915290205482811015610d195760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610c08565b610d268533858403611aa8565b60019150505b9392505050565b6005546001600160a01b03163314610d5d5760405162461bcd60e51b8152600401610c08906131cc565b670de0b6b3a76400006103e8610d7260045490565b610d7d906002613217565b610d87919061322e565b610d91919061322e565b811015610df25760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e322560b81b6064820152608401610c08565b610e0481670de0b6b3a7640000613217565b60138190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b6005546001600160a01b03163314610e6a5760405162461bcd60e51b8152600401610c08906131cc565b601d839055601a849055601b829055601c8190558082610e8a8587613250565b610e949190613250565b610e9e9190613250565b601981905560031015610edd5760405162461bcd60e51b8152602060048201526007602482015266019929036b0bc160cd1b6044820152606401610c08565b50505050565b336000818152602081815260408083206001600160a01b03871684529091528120549091610bd4918590610f18908690613250565b611aa8565b6001600160a01b031660009081526001602052604090205490565b6005546001600160a01b03163314610f625760405162461bcd60e51b8152600401610c08906131cc565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610fd65760405162461bcd60e51b8152600401610c08906131cc565b6004546013556004546014556004546015556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b0316331461103d5760405162461bcd60e51b8152600401610c08906131cc565b806110b0576008546001600160a01b03908116908316036110b05760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610c08565b6001600160a01b03919091166000908152601860205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146111055760405162461bcd60e51b8152600401610c08906131cc565b60115462010000900460ff161561115e5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610c08565b6011805462ffff00191662010100179055436006556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1565b606060028054610b4490613192565b6005546001600160a01b031633146111d75760405162461bcd60e51b8152600401610c08906131cc565b6008546001600160a01b039081169083160361125b5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610c08565b6112658282612803565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b306112ab81610f1d565b600a5411156112b957600080fd5b6112c4848484612831565b15610edd576009805460ff60a01b1916600160a01b1790556112e46128cb565b6009805460ff60a01b1916905550505050565b336000908152602081815260408083206001600160a01b0386168452909152812054828110156113775760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c08565b6113843385858403611aa8565b5060019392505050565b6000610bd4338484611bcb565b6005546001600160a01b031633146113c55760405162461bcd60e51b8152600401610c08906131cc565b6001600160a01b0381166114275760405162461bcd60e51b8152602060048201526024808201527f5f6d61726b6574696e6757616c6c657420616464726573732063616e6e6f74206044820152630626520360e41b6064820152608401610c08565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146114735760405162461bcd60e51b8152600401610c08906131cc565b6001600160a01b038216600081815260176020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146114fc5760405162461bcd60e51b8152600401610c08906131cc565b670de0b6b3a76400006103e861151160045490565b61151c906003613217565b611526919061322e565b611530919061322e565b8110156115945760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e332560a01b6064820152608401610c08565b6115a681670de0b6b3a7640000613217565b60158190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001610e35565b6005546001600160a01b031633146116055760405162461bcd60e51b8152600401610c08906131cc565b6001600160a01b03166000908152600f60205260409020805460ff19169055565b6005546001600160a01b031633146116505760405162461bcd60e51b8152600401610c08906131cc565b620186a061165d60045490565b611668906001613217565b611672919061322e565b8110156116df5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610c08565b6103e86116eb60045490565b6116f6906001613217565b611700919061322e565b81111561176c5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610c08565b600a55565b6005546001600160a01b0316331461179b5760405162461bcd60e51b8152600401610c08906131cc565b670de0b6b3a76400006103e86117b060045490565b6117bb906002613217565b6117c5919061322e565b6117cf919061322e565b8110156118315760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e322560b01b6064820152608401610c08565b61184381670de0b6b3a7640000613217565b60148190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610e35565b6005546001600160a01b031633146118a25760405162461bcd60e51b8152600401610c08906131cc565b604051600090339047908381818185875af1925050503d8060008114610edd576040519150601f19603f3d011682016040523d82523d6000602084013e610edd565b6005546001600160a01b0316331461190e5760405162461bcd60e51b8152600401610c08906131cc565b6022839055601f84905560208290556021819055808261192e8587613250565b6119389190613250565b6119429190613250565b601e81905560031015610edd5760405162461bcd60e51b815260206004820152600a6024820152693325206d61782066656560b01b6044820152606401610c08565b6005546001600160a01b031633146119ae5760405162461bcd60e51b8152600401610c08906131cc565b6011805463ff00000019169055565b6005546001600160a01b031633146119e75760405162461bcd60e51b8152600401610c08906131cc565b6001600160a01b038116611a4c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c08565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611b0a5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c08565b6001600160a01b038216611b6b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c08565b6001600160a01b038381166000818152602081815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038084166000908152601660209081526040808320549386168352600d909152812054429260ff1691901590611c0786610f1d565b1590506001600160a01b038716611c305760405162461bcd60e51b8152600401610c0890613263565b6001600160a01b038616611c565760405162461bcd60e51b8152600401610c08906132a8565b60008511611ca65760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610c08565b60115462010000900460ff16611d3a576001600160a01b03871660009081526017602052604090205460ff1680611cf557506001600160a01b03861660009081526017602052604090205460ff165b611d3a5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610c08565b60075415611de4576001600160a01b0387166000908152600f602052604090205460ff161580611d7757506005546001600160a01b038781169116145b80611d8c57506001600160a01b03861661dead145b611de45760405162461bcd60e51b815260206004820152602360248201527f626f742070726f74656374696f6e206d656368616e69736d20697320656d626560448201526219195960ea1b6064820152608401610c08565b60115460ff1615612299576001600160a01b03871660009081526018602052604090205460095460ff91821691600160a01b9091041615611e2d6005546001600160a01b031690565b6001600160a01b0316896001600160a01b031614158015611e5c57506005546001600160a01b03898116911614155b8015611e7057506001600160a01b03881615155b8015611e8757506001600160a01b03881661dead14155b8015611eac57506001600160a01b03891660009081526017602052604090205460ff16155b8015611ed157506001600160a01b03881660009081526017602052604090205460ff16155b15612046576011546301000000900460ff1615612046576009546001600160a01b038a1660009081526016602052604081205460ff600160a01b90930483161592161590818015611f1f5750825b6009549091506001600160a01b038c8116911614801590611f4e57506008546001600160a01b038c8116911614155b1561201157611f5e6002436132eb565b326000908152600e6020526040902054108015611f9c5750611f816002436132eb565b6001600160a01b038c166000908152600e6020526040902054105b611fe85760405162461bcd60e51b815260206004820152601d60248201527f5f7472616e736665723a2064656c61792077617320656e61626c65642e0000006044820152606401610c08565b326000908152600e602052604080822043908190556001600160a01b038e168352912055612042565b8015612042576001600160a01b038c166000908152600d602052604090205460105481118061203f57600080fd5b50505b5050505b6001600160a01b03891660009081526016602052604090205460ff16801561208757506001600160a01b03881660009081526018602052604090205460ff16155b15612153576013548711156120ef5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610c08565b6015546120fb89610f1d565b6121059089613250565b111561214e5760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610c08565b612296565b80801561215d5750815b1561216c576010869055612296565b6001600160a01b03881660009081526016602052604090205460ff1680156121ad57506001600160a01b03891660009081526018602052604090205460ff16155b156122175760145487111561214e5760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610c08565b6001600160a01b03881660009081526018602052604090205460ff166122965760155461224389610f1d565b61224d9089613250565b11156122965760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610c08565b50505b60006122a430610f1d565b600a54909150811080159081906122c25750601154610100900460ff165b80156122d85750600954600160a01b900460ff16155b80156122fd57506001600160a01b03891660009081526016602052604090205460ff16155b801561232257506001600160a01b03891660009081526017602052604090205460ff16155b801561234757506001600160a01b03881660009081526017602052604090205460ff16155b15612375576009805460ff60a01b1916600160a01b1790556123676128cb565b6009805460ff60a01b191690555b60018480156123815750855b156123a85783156123a8576001600160a01b0389166000908152600d602052604090208790555b6001600160a01b038a1660009081526017602052604090205460ff16806123e757506001600160a01b03891660009081526017602052604090205460ff165b156123f0575060005b600081156127eb576007544310801561242157506001600160a01b038b1660009081526016602052604090205460ff165b801561244657506001600160a01b038a1660009081526016602052604090205460ff16155b801561245457506000601954115b156125d4576001600160a01b038a166000908152600f602052604090205460ff166124f4576001600160a01b038a166000908152600f60205260408120805460ff1916600190811790915560128054919290916124b2908490613250565b90915550506040516001600160a01b038b1681527f3d71e4a70676213519dc777e6e5b0ac4d021b9d144b673b89d0df519a879a83e9060200160405180910390a15b60646125018a6063613217565b61250b919061322e565b9050601954601d548261251e9190613217565b612528919061322e565b602560008282546125399190613250565b9091555050601954601a5461254e9083613217565b612558919061322e565b602360008282546125699190613250565b9091555050601954601b5461257e9083613217565b612588919061322e565b602460008282546125999190613250565b9091555050601954601c546125ae9083613217565b6125b8919061322e565b602660008282546125c99190613250565b909155506127cd9050565b6001600160a01b038a1660009081526016602052604090205460ff1680156125fe57506000601e54115b156126c0576064601e548a6126139190613217565b61261d919061322e565b9050601e54602254826126309190613217565b61263a919061322e565b6025600082825461264b9190613250565b9091555050601e54601f546126609083613217565b61266a919061322e565b6023600082825461267b9190613250565b9091555050601e546020546126909083613217565b61269a919061322e565b602460008282546126ab9190613250565b9091555050601e546021546125ae9083613217565b6001600160a01b038b1660009081526016602052604090205460ff1680156126ea57506000601954115b156127cd5760646019548a6126ff9190613217565b612709919061322e565b9050601954601d548261271c9190613217565b612726919061322e565b602560008282546127379190613250565b9091555050601954601a5461274c9083613217565b612756919061322e565b602360008282546127679190613250565b9091555050601954601b5461277c9083613217565b612786919061322e565b602460008282546127979190613250565b9091555050601954601c546127ac9083613217565b6127b6919061322e565b602660008282546127c79190613250565b90915550505b80156127de576127de8b3083612ad1565b6127e8818a6132eb565b98505b6127f68b8b8b612ad1565b5050505050505050505050565b6001600160a01b0382166000908152601660205260409020805460ff19168215151790556112658282612c26565b3360008181526017602052604081205490919060ff163083821561288b57600061285a83610f1d565b1115612880578660000361287257601086905561287c565b61287c8888612c89565b5060005b9350610d2c92505050565b60265461289783610f1d565b101580156128a757506000602654115b156128b8576128b884602654612c89565b505060006026555060019150610d2c9050565b60006026541180156128e757506026546128e430610f1d565b10155b156128f8576128f830602654612c89565b6000602681905561290830610f1d565b9050600060245460235460255461291f9190613250565b6129299190613250565b9050811580612936575080155b1561293f575050565b600a805461294c91613217565b82111561296357600a805461296091613217565b91505b6000600282602554856129769190613217565b612980919061322e565b61298a919061322e565b905061299e61299982856132eb565b612daa565b602554479081906000906129b49060029061322e565b6129be90866132eb565b6023546129cb9085613217565b6129d5919061322e565b9050600060026025546129e8919061322e565b6129f290876132eb565b6024546129ff9086613217565b612a09919061322e565b9050612a158183613250565b612a1f90846132eb565b600060258190556023819055602481905560265592508415801590612a445750600083115b15612a5357612a538584612f04565b600c546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612a8d573d6000803e3d6000fd5b50600b546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015612ac7573d6000803e3d6000fd5b5050505050505050565b6001600160a01b038316612af75760405162461bcd60e51b8152600401610c0890613263565b6001600160a01b038216612b1d5760405162461bcd60e51b8152600401610c08906132a8565b6001600160a01b03831660009081526001602052604090205481811015612b955760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610c08565b6001600160a01b03808516600090815260016020526040808220858503905591851681529081208054849290612bcc908490613250565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612c1891815260200190565b60405180910390a350505050565b6001600160a01b038216600081815260186020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b038216612cdf5760405162461bcd60e51b815260206004820152601760248201527f45524332303a20746865207a65726f20616464726573730000000000000000006044820152606401610c08565b6001600160a01b03821660009081526001602052604090205481811015612d525760405162461bcd60e51b815260206004820152602160248201527f45524332303a2074686520616d6f756e7420657863656564732062616c616e636044820152606560f81b6064820152608401610c08565b6001600160a01b03831660008181526001602090815260408083208686039055600480548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611bbe565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612ddf57612ddf6132fe565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612e38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e5c9190613314565b81600181518110612e6f57612e6f6132fe565b6001600160a01b039283166020918202929092010152600954612e959130911684611aa8565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac94790612ece908590600090869030904290600401613331565b600060405180830381600087803b158015612ee857600080fd5b505af1158015612efc573d6000803e3d6000fd5b505050505050565b600954612f1c9030906001600160a01b031684611aa8565b60095460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015612f8a573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612faf91906133a2565b5050505050565b600060208083528351808285015260005b81811015612fe357858101830151858201604001528201612fc7565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461301957600080fd5b50565b6000806040838503121561302f57600080fd5b823561303a81613004565b946020939093013593505050565b60006020828403121561305a57600080fd5b8135610d2c81613004565b60008060006060848603121561307a57600080fd5b833561308581613004565b9250602084013561309581613004565b929592945050506040919091013590565b6000602082840312156130b857600080fd5b5035919050565b600080600080608085870312156130d557600080fd5b5050823594602084013594506040840135936060013592509050565b6000806040838503121561310457600080fd5b823561310f81613004565b91506020830135801515811461312457600080fd5b809150509250929050565b60008060006060848603121561314457600080fd5b833561314f81613004565b95602085013595506040909401359392505050565b6000806040838503121561317757600080fd5b823561318281613004565b9150602083013561312481613004565b600181811c908216806131a657607f821691505b6020821081036131c657634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610bd857610bd8613201565b60008261324b57634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610bd857610bd8613201565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610bd857610bd8613201565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561332657600080fd5b8151610d2c81613004565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156133815784516001600160a01b03168352938301939183019160010161335c565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156133b757600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220e2554c8bc55bce4d7f5dfd3108d1f437aad9f211d35807a94fd6afa3faa3bd8d64736f6c634300081100334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x6080604052600436106103c75760003560e01c806395d89b41116101f2578063cadd422c1161010d578063e2f45605116100a0578063f2bbf8d91161006f578063f2bbf8d914610ad3578063f2fde38b14610ae9578063fc7eb42d14610b09578063fd35d1d614610b1f57600080fd5b8063e2f4560514610a72578063e611bfdb14610a88578063e7ad9fcd14610a9e578063e884f26014610abe57600080fd5b8063d4384318116100dc578063d4384318146109e3578063dc3f0d0f146109f9578063dd62ed3e14610a19578063e086e5ec14610a5d57600080fd5b8063cadd422c14610981578063cd51e6d414610997578063d0a39814146109ad578063d257b34f146109c357600080fd5b8063abe43b1b11610185578063c18bc19511610154578063c18bc195146108f0578063c424134c14610910578063c5b45ec014610940578063c876d0b91461096057600080fd5b8063abe43b1b14610883578063b9e937001461089a578063bbc0c742146108b0578063c0246668146108d057600080fd5b8063a457c2d7116101c1578063a457c2d71461080d578063a9059cbb1461082d578063aa4bde281461084d578063aacebbe31461086357600080fd5b806395d89b41146107a25780639a7a23d6146107b75780639fccce32146107d7578063a41aaaf1146107ed57600080fd5b806359d24b8e116102e2578063751039fc1161027557806388e765ff1161024457806388e765ff146107435780638a8c523c146107595780638cf405551461076e5780638da5cb5b1461078457600080fd5b8063751039fc146106e25780637571336a146106f757806376c702bf14610717578063868f0a741461072d57600080fd5b80636eb490cf116102b15780636eb490cf1461066757806370a0823114610697578063715018a6146106b7578063737952e6146106cc57600080fd5b806359d24b8e146105ec57806366d602ae1461061c5780636b0a894c146106325780636ddd17131461064857600080fd5b806323b872dd1161035a5780633950935111610329578063395093511461057c578063437764991461059c57806349bd5a5e146105b25780634a62bb65146105d257600080fd5b806323b872dd146105005780632be32b61146105205780632e6ed7ef14610540578063313ce5671461056057600080fd5b80631816467f116103965780631816467f146104855780631a8145bb146104a75780631f3fed8f146104bd57806323b1e7a7146104d357600080fd5b806306fdde03146103d3578063095ea7b3146103fe5780631694505e1461042e57806318160ddd1461046657600080fd5b366103ce57005b600080fd5b3480156103df57600080fd5b506103e8610b35565b6040516103f59190612fb6565b60405180910390f35b34801561040a57600080fd5b5061041e61041936600461301c565b610bc7565b60405190151581526020016103f5565b34801561043a57600080fd5b5060095461044e906001600160a01b031681565b6040516001600160a01b0390911681526020016103f5565b34801561047257600080fd5b506004545b6040519081526020016103f5565b34801561049157600080fd5b506104a56104a0366004613048565b610bde565b005b3480156104b357600080fd5b5061047760255481565b3480156104c957600080fd5b5061047760235481565b3480156104df57600080fd5b506104776104ee366004613048565b600d6020526000908152604090205481565b34801561050c57600080fd5b5061041e61051b366004613065565b610c89565b34801561052c57600080fd5b506104a561053b3660046130a6565b610d33565b34801561054c57600080fd5b506104a561055b3660046130bf565b610e40565b34801561056c57600080fd5b50604051601281526020016103f5565b34801561058857600080fd5b5061041e61059736600461301c565b610ee3565b3480156105a857600080fd5b50610477601b5481565b3480156105be57600080fd5b5060085461044e906001600160a01b031681565b3480156105de57600080fd5b5060115461041e9060ff1681565b3480156105f857600080fd5b5061041e610607366004613048565b600f6020526000908152604090205460ff1681565b34801561062857600080fd5b5061047760145481565b34801561063e57600080fd5b5061047760125481565b34801561065457600080fd5b5060115461041e90610100900460ff1681565b34801561067357600080fd5b5061041e610682366004613048565b60166020526000908152604090205460ff1681565b3480156106a357600080fd5b506104776106b2366004613048565b610f1d565b3480156106c357600080fd5b506104a5610f38565b3480156106d857600080fd5b50610477601f5481565b3480156106ee57600080fd5b506104a5610fac565b34801561070357600080fd5b506104a56107123660046130f1565b611013565b34801561072357600080fd5b50610477601a5481565b34801561073957600080fd5b5061047760205481565b34801561074f57600080fd5b5061047760135481565b34801561076557600080fd5b506104a56110db565b34801561077a57600080fd5b5061047760265481565b34801561079057600080fd5b506005546001600160a01b031661044e565b3480156107ae57600080fd5b506103e861119e565b3480156107c357600080fd5b506104a56107d23660046130f1565b6111ad565b3480156107e357600080fd5b5061047760245481565b3480156107f957600080fd5b506104a561080836600461312f565b6112a1565b34801561081957600080fd5b5061041e61082836600461301c565b6112f7565b34801561083957600080fd5b5061041e61084836600461301c565b61138e565b34801561085957600080fd5b5061047760155481565b34801561086f57600080fd5b506104a561087e366004613048565b61139b565b34801561088f57600080fd5b50600754431061041e565b3480156108a657600080fd5b5061047760195481565b3480156108bc57600080fd5b5060115461041e9062010000900460ff1681565b3480156108dc57600080fd5b506104a56108eb3660046130f1565b611449565b3480156108fc57600080fd5b506104a561090b3660046130a6565b6114d2565b34801561091c57600080fd5b5061041e61092b366004613048565b60186020526000908152604090205460ff1681565b34801561094c57600080fd5b506104a561095b366004613048565b6115db565b34801561096c57600080fd5b5060115461041e906301000000900460ff1681565b34801561098d57600080fd5b50610477601c5481565b3480156109a357600080fd5b5061047760065481565b3480156109b957600080fd5b50610477601e5481565b3480156109cf57600080fd5b506104a56109de3660046130a6565b611626565b3480156109ef57600080fd5b5061047760225481565b348015610a0557600080fd5b506104a5610a143660046130a6565b611771565b348015610a2557600080fd5b50610477610a34366004613164565b6001600160a01b0391821660009081526020818152604080832093909416825291909152205490565b348015610a6957600080fd5b506104a5611878565b348015610a7e57600080fd5b50610477600a5481565b348015610a9457600080fd5b5061047760075481565b348015610aaa57600080fd5b506104a5610ab93660046130bf565b6118e4565b348015610aca57600080fd5b506104a5611984565b348015610adf57600080fd5b5061047760215481565b348015610af557600080fd5b506104a5610b04366004613048565b6119bd565b348015610b1557600080fd5b5061047760105481565b348015610b2b57600080fd5b50610477601d5481565b606060038054610b4490613192565b80601f0160208091040260200160405190810160405280929190818152602001828054610b7090613192565b8015610bbd5780601f10610b9257610100808354040283529160200191610bbd565b820191906000526020600020905b815481529060010190602001808311610ba057829003601f168201915b5050505050905090565b6000610bd4338484611aa8565b5060015b92915050565b6005546001600160a01b03163314610c115760405162461bcd60e51b8152600401610c08906131cc565b60405180910390fd5b6001600160a01b038116610c675760405162461bcd60e51b815260206004820152601e60248201527f5f64657657616c6c657420616464726573732063616e6e6f74206265203000006044820152606401610c08565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6000610c96848484611bcb565b6001600160a01b03841660009081526020818152604080832033845290915290205482811015610d195760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610c08565b610d268533858403611aa8565b60019150505b9392505050565b6005546001600160a01b03163314610d5d5760405162461bcd60e51b8152600401610c08906131cc565b670de0b6b3a76400006103e8610d7260045490565b610d7d906002613217565b610d87919061322e565b610d91919061322e565b811015610df25760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e322560b81b6064820152608401610c08565b610e0481670de0b6b3a7640000613217565b60138190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b6005546001600160a01b03163314610e6a5760405162461bcd60e51b8152600401610c08906131cc565b601d839055601a849055601b829055601c8190558082610e8a8587613250565b610e949190613250565b610e9e9190613250565b601981905560031015610edd5760405162461bcd60e51b8152602060048201526007602482015266019929036b0bc160cd1b6044820152606401610c08565b50505050565b336000818152602081815260408083206001600160a01b03871684529091528120549091610bd4918590610f18908690613250565b611aa8565b6001600160a01b031660009081526001602052604090205490565b6005546001600160a01b03163314610f625760405162461bcd60e51b8152600401610c08906131cc565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610fd65760405162461bcd60e51b8152600401610c08906131cc565b6004546013556004546014556004546015556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b0316331461103d5760405162461bcd60e51b8152600401610c08906131cc565b806110b0576008546001600160a01b03908116908316036110b05760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610c08565b6001600160a01b03919091166000908152601860205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146111055760405162461bcd60e51b8152600401610c08906131cc565b60115462010000900460ff161561115e5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610c08565b6011805462ffff00191662010100179055436006556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1565b606060028054610b4490613192565b6005546001600160a01b031633146111d75760405162461bcd60e51b8152600401610c08906131cc565b6008546001600160a01b039081169083160361125b5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610c08565b6112658282612803565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b306112ab81610f1d565b600a5411156112b957600080fd5b6112c4848484612831565b15610edd576009805460ff60a01b1916600160a01b1790556112e46128cb565b6009805460ff60a01b1916905550505050565b336000908152602081815260408083206001600160a01b0386168452909152812054828110156113775760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c08565b6113843385858403611aa8565b5060019392505050565b6000610bd4338484611bcb565b6005546001600160a01b031633146113c55760405162461bcd60e51b8152600401610c08906131cc565b6001600160a01b0381166114275760405162461bcd60e51b8152602060048201526024808201527f5f6d61726b6574696e6757616c6c657420616464726573732063616e6e6f74206044820152630626520360e41b6064820152608401610c08565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146114735760405162461bcd60e51b8152600401610c08906131cc565b6001600160a01b038216600081815260176020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146114fc5760405162461bcd60e51b8152600401610c08906131cc565b670de0b6b3a76400006103e861151160045490565b61151c906003613217565b611526919061322e565b611530919061322e565b8110156115945760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e332560a01b6064820152608401610c08565b6115a681670de0b6b3a7640000613217565b60158190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001610e35565b6005546001600160a01b031633146116055760405162461bcd60e51b8152600401610c08906131cc565b6001600160a01b03166000908152600f60205260409020805460ff19169055565b6005546001600160a01b031633146116505760405162461bcd60e51b8152600401610c08906131cc565b620186a061165d60045490565b611668906001613217565b611672919061322e565b8110156116df5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610c08565b6103e86116eb60045490565b6116f6906001613217565b611700919061322e565b81111561176c5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610c08565b600a55565b6005546001600160a01b0316331461179b5760405162461bcd60e51b8152600401610c08906131cc565b670de0b6b3a76400006103e86117b060045490565b6117bb906002613217565b6117c5919061322e565b6117cf919061322e565b8110156118315760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e322560b01b6064820152608401610c08565b61184381670de0b6b3a7640000613217565b60148190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610e35565b6005546001600160a01b031633146118a25760405162461bcd60e51b8152600401610c08906131cc565b604051600090339047908381818185875af1925050503d8060008114610edd576040519150601f19603f3d011682016040523d82523d6000602084013e610edd565b6005546001600160a01b0316331461190e5760405162461bcd60e51b8152600401610c08906131cc565b6022839055601f84905560208290556021819055808261192e8587613250565b6119389190613250565b6119429190613250565b601e81905560031015610edd5760405162461bcd60e51b815260206004820152600a6024820152693325206d61782066656560b01b6044820152606401610c08565b6005546001600160a01b031633146119ae5760405162461bcd60e51b8152600401610c08906131cc565b6011805463ff00000019169055565b6005546001600160a01b031633146119e75760405162461bcd60e51b8152600401610c08906131cc565b6001600160a01b038116611a4c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c08565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611b0a5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c08565b6001600160a01b038216611b6b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c08565b6001600160a01b038381166000818152602081815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038084166000908152601660209081526040808320549386168352600d909152812054429260ff1691901590611c0786610f1d565b1590506001600160a01b038716611c305760405162461bcd60e51b8152600401610c0890613263565b6001600160a01b038616611c565760405162461bcd60e51b8152600401610c08906132a8565b60008511611ca65760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610c08565b60115462010000900460ff16611d3a576001600160a01b03871660009081526017602052604090205460ff1680611cf557506001600160a01b03861660009081526017602052604090205460ff165b611d3a5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610c08565b60075415611de4576001600160a01b0387166000908152600f602052604090205460ff161580611d7757506005546001600160a01b038781169116145b80611d8c57506001600160a01b03861661dead145b611de45760405162461bcd60e51b815260206004820152602360248201527f626f742070726f74656374696f6e206d656368616e69736d20697320656d626560448201526219195960ea1b6064820152608401610c08565b60115460ff1615612299576001600160a01b03871660009081526018602052604090205460095460ff91821691600160a01b9091041615611e2d6005546001600160a01b031690565b6001600160a01b0316896001600160a01b031614158015611e5c57506005546001600160a01b03898116911614155b8015611e7057506001600160a01b03881615155b8015611e8757506001600160a01b03881661dead14155b8015611eac57506001600160a01b03891660009081526017602052604090205460ff16155b8015611ed157506001600160a01b03881660009081526017602052604090205460ff16155b15612046576011546301000000900460ff1615612046576009546001600160a01b038a1660009081526016602052604081205460ff600160a01b90930483161592161590818015611f1f5750825b6009549091506001600160a01b038c8116911614801590611f4e57506008546001600160a01b038c8116911614155b1561201157611f5e6002436132eb565b326000908152600e6020526040902054108015611f9c5750611f816002436132eb565b6001600160a01b038c166000908152600e6020526040902054105b611fe85760405162461bcd60e51b815260206004820152601d60248201527f5f7472616e736665723a2064656c61792077617320656e61626c65642e0000006044820152606401610c08565b326000908152600e602052604080822043908190556001600160a01b038e168352912055612042565b8015612042576001600160a01b038c166000908152600d602052604090205460105481118061203f57600080fd5b50505b5050505b6001600160a01b03891660009081526016602052604090205460ff16801561208757506001600160a01b03881660009081526018602052604090205460ff16155b15612153576013548711156120ef5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610c08565b6015546120fb89610f1d565b6121059089613250565b111561214e5760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610c08565b612296565b80801561215d5750815b1561216c576010869055612296565b6001600160a01b03881660009081526016602052604090205460ff1680156121ad57506001600160a01b03891660009081526018602052604090205460ff16155b156122175760145487111561214e5760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610c08565b6001600160a01b03881660009081526018602052604090205460ff166122965760155461224389610f1d565b61224d9089613250565b11156122965760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610c08565b50505b60006122a430610f1d565b600a54909150811080159081906122c25750601154610100900460ff165b80156122d85750600954600160a01b900460ff16155b80156122fd57506001600160a01b03891660009081526016602052604090205460ff16155b801561232257506001600160a01b03891660009081526017602052604090205460ff16155b801561234757506001600160a01b03881660009081526017602052604090205460ff16155b15612375576009805460ff60a01b1916600160a01b1790556123676128cb565b6009805460ff60a01b191690555b60018480156123815750855b156123a85783156123a8576001600160a01b0389166000908152600d602052604090208790555b6001600160a01b038a1660009081526017602052604090205460ff16806123e757506001600160a01b03891660009081526017602052604090205460ff165b156123f0575060005b600081156127eb576007544310801561242157506001600160a01b038b1660009081526016602052604090205460ff165b801561244657506001600160a01b038a1660009081526016602052604090205460ff16155b801561245457506000601954115b156125d4576001600160a01b038a166000908152600f602052604090205460ff166124f4576001600160a01b038a166000908152600f60205260408120805460ff1916600190811790915560128054919290916124b2908490613250565b90915550506040516001600160a01b038b1681527f3d71e4a70676213519dc777e6e5b0ac4d021b9d144b673b89d0df519a879a83e9060200160405180910390a15b60646125018a6063613217565b61250b919061322e565b9050601954601d548261251e9190613217565b612528919061322e565b602560008282546125399190613250565b9091555050601954601a5461254e9083613217565b612558919061322e565b602360008282546125699190613250565b9091555050601954601b5461257e9083613217565b612588919061322e565b602460008282546125999190613250565b9091555050601954601c546125ae9083613217565b6125b8919061322e565b602660008282546125c99190613250565b909155506127cd9050565b6001600160a01b038a1660009081526016602052604090205460ff1680156125fe57506000601e54115b156126c0576064601e548a6126139190613217565b61261d919061322e565b9050601e54602254826126309190613217565b61263a919061322e565b6025600082825461264b9190613250565b9091555050601e54601f546126609083613217565b61266a919061322e565b6023600082825461267b9190613250565b9091555050601e546020546126909083613217565b61269a919061322e565b602460008282546126ab9190613250565b9091555050601e546021546125ae9083613217565b6001600160a01b038b1660009081526016602052604090205460ff1680156126ea57506000601954115b156127cd5760646019548a6126ff9190613217565b612709919061322e565b9050601954601d548261271c9190613217565b612726919061322e565b602560008282546127379190613250565b9091555050601954601a5461274c9083613217565b612756919061322e565b602360008282546127679190613250565b9091555050601954601b5461277c9083613217565b612786919061322e565b602460008282546127979190613250565b9091555050601954601c546127ac9083613217565b6127b6919061322e565b602660008282546127c79190613250565b90915550505b80156127de576127de8b3083612ad1565b6127e8818a6132eb565b98505b6127f68b8b8b612ad1565b5050505050505050505050565b6001600160a01b0382166000908152601660205260409020805460ff19168215151790556112658282612c26565b3360008181526017602052604081205490919060ff163083821561288b57600061285a83610f1d565b1115612880578660000361287257601086905561287c565b61287c8888612c89565b5060005b9350610d2c92505050565b60265461289783610f1d565b101580156128a757506000602654115b156128b8576128b884602654612c89565b505060006026555060019150610d2c9050565b60006026541180156128e757506026546128e430610f1d565b10155b156128f8576128f830602654612c89565b6000602681905561290830610f1d565b9050600060245460235460255461291f9190613250565b6129299190613250565b9050811580612936575080155b1561293f575050565b600a805461294c91613217565b82111561296357600a805461296091613217565b91505b6000600282602554856129769190613217565b612980919061322e565b61298a919061322e565b905061299e61299982856132eb565b612daa565b602554479081906000906129b49060029061322e565b6129be90866132eb565b6023546129cb9085613217565b6129d5919061322e565b9050600060026025546129e8919061322e565b6129f290876132eb565b6024546129ff9086613217565b612a09919061322e565b9050612a158183613250565b612a1f90846132eb565b600060258190556023819055602481905560265592508415801590612a445750600083115b15612a5357612a538584612f04565b600c546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612a8d573d6000803e3d6000fd5b50600b546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015612ac7573d6000803e3d6000fd5b5050505050505050565b6001600160a01b038316612af75760405162461bcd60e51b8152600401610c0890613263565b6001600160a01b038216612b1d5760405162461bcd60e51b8152600401610c08906132a8565b6001600160a01b03831660009081526001602052604090205481811015612b955760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610c08565b6001600160a01b03808516600090815260016020526040808220858503905591851681529081208054849290612bcc908490613250565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612c1891815260200190565b60405180910390a350505050565b6001600160a01b038216600081815260186020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b038216612cdf5760405162461bcd60e51b815260206004820152601760248201527f45524332303a20746865207a65726f20616464726573730000000000000000006044820152606401610c08565b6001600160a01b03821660009081526001602052604090205481811015612d525760405162461bcd60e51b815260206004820152602160248201527f45524332303a2074686520616d6f756e7420657863656564732062616c616e636044820152606560f81b6064820152608401610c08565b6001600160a01b03831660008181526001602090815260408083208686039055600480548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611bbe565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612ddf57612ddf6132fe565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612e38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e5c9190613314565b81600181518110612e6f57612e6f6132fe565b6001600160a01b039283166020918202929092010152600954612e959130911684611aa8565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac94790612ece908590600090869030904290600401613331565b600060405180830381600087803b158015612ee857600080fd5b505af1158015612efc573d6000803e3d6000fd5b505050505050565b600954612f1c9030906001600160a01b031684611aa8565b60095460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015612f8a573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612faf91906133a2565b5050505050565b600060208083528351808285015260005b81811015612fe357858101830151858201604001528201612fc7565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461301957600080fd5b50565b6000806040838503121561302f57600080fd5b823561303a81613004565b946020939093013593505050565b60006020828403121561305a57600080fd5b8135610d2c81613004565b60008060006060848603121561307a57600080fd5b833561308581613004565b9250602084013561309581613004565b929592945050506040919091013590565b6000602082840312156130b857600080fd5b5035919050565b600080600080608085870312156130d557600080fd5b5050823594602084013594506040840135936060013592509050565b6000806040838503121561310457600080fd5b823561310f81613004565b91506020830135801515811461312457600080fd5b809150509250929050565b60008060006060848603121561314457600080fd5b833561314f81613004565b95602085013595506040909401359392505050565b6000806040838503121561317757600080fd5b823561318281613004565b9150602083013561312481613004565b600181811c908216806131a657607f821691505b6020821081036131c657634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610bd857610bd8613201565b60008261324b57634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610bd857610bd8613201565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610bd857610bd8613201565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561332657600080fd5b8151610d2c81613004565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156133815784516001600160a01b03168352938301939183019160010161335c565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156133b757600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220e2554c8bc55bce4d7f5dfd3108d1f437aad9f211d35807a94fd6afa3faa3bd8d64736f6c63430008110033

Deployed Bytecode Sourcemap

8169:20164:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3963:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5368:194;;;;;;;;;;-1:-1:-1;5368:194:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;5368:194:0;1023:187:1;8340:38:0;;;;;;;;;;-1:-1:-1;8340:38:0;;;;-1:-1:-1;;;;;8340:38:0;;;;;;-1:-1:-1;;;;;1402:32:1;;;1384:51;;1372:2;1357:18;8340:38:0;1215:226:1;4172:108:0;;;;;;;;;;-1:-1:-1;4260:12:0;;4172:108;;;1592:25:1;;;1580:2;1565:18;4172:108:0;1446:177:1;25734:189:0;;;;;;;;;;-1:-1:-1;25734:189:0;;;;;:::i;:::-;;:::i;:::-;;9702:33;;;;;;;;;;;;;;;;9628;;;;;;;;;;;;;;;;8533:62;;;;;;;;;;-1:-1:-1;8533:62:0;;;;;:::i;:::-;;;;;;;;;;;;;;4439:529;;;;;;;;;;-1:-1:-1;4439:529:0;;;;;:::i;:::-;;:::i;15585:339::-;;;;;;;;;;-1:-1:-1;15585:339:0;;;;;:::i;:::-;;:::i;24372:532::-;;;;;;;;;;-1:-1:-1;24372:532:0;;;;;:::i;:::-;;:::i;4071:93::-;;;;;;;;;;-1:-1:-1;4071:93:0;;4154:2;3058:36:1;;3046:2;3031:18;4071:93:0;2916:184:1;5570:290:0;;;;;;;;;;-1:-1:-1;5570:290:0;;;;;:::i;:::-;;:::i;9319:27::-;;;;;;;;;;;;;;;;8305:28;;;;;;;;;;-1:-1:-1;8305:28:0;;;;-1:-1:-1;;;;;8305:28:0;;;8757:33;;;;;;;;;;-1:-1:-1;8757:33:0;;;;;;;;8673:47;;;;;;;;;;-1:-1:-1;8673:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;8987:28;;;;;;;;;;;;;;;;8919:25;;;;;;;;;;;;;;;;8797:30;;;;;;;;;;-1:-1:-1;8797:30:0;;;;;;;;;;;9061:52;;;;;;;;;;-1:-1:-1;9061:52:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;4288:143;;;;;;;;;;-1:-1:-1;4288:143:0;;;;;:::i;:::-;;:::i;1105:150::-;;;;;;;;;;;;;:::i;9469:34::-;;;;;;;;;;;;;;;;14567:203;;;;;;;;;;;;;:::i;23385:364::-;;;;;;;;;;-1:-1:-1;23385:364:0;;;;;:::i;:::-;;:::i;9279:33::-;;;;;;;;;;;;;;;;9510:28;;;;;;;;;;;;;;;;8953:27;;;;;;;;;;;;;;;;13707:243;;;;;;;;;;;;;:::i;9742:32::-;;;;;;;;;;;;;;;;602:79;;;;;;;;;;-1:-1:-1;667:6:0;;-1:-1:-1;;;;;667:6:0;602:79;;3851:104;;;;;;;;;;;;;:::i;24000:364::-;;;;;;;;;;-1:-1:-1;24000:364:0;;;;;:::i;:::-;;:::i;9668:27::-;;;;;;;;;;;;;;;;14181:378;;;;;;;;;;-1:-1:-1;14181:378:0;;;;;:::i;:::-;;:::i;5868:475::-;;;;;;;;;;-1:-1:-1;5868:475:0;;;;;:::i;:::-;;:::i;4976:200::-;;;;;;;;;;-1:-1:-1;4976:200:0;;;;;:::i;:::-;;:::i;9022:30::-;;;;;;;;;;;;;;;;25466:260;;;;;;;;;;-1:-1:-1;25466:260:0;;;;;:::i;:::-;;:::i;28180:113::-;;;;;;;;;;-1:-1:-1;28271:14:0;;28256:12;:29;28180:113;;9245:27;;;;;;;;;;;;;;;;8834:32;;;;;;;;;;-1:-1:-1;8834:32:0;;;;;;;;;;;23195:182;;;;;;;;;;-1:-1:-1;23195:182:0;;;;;:::i;:::-;;:::i;14778:363::-;;;;;;;;;;-1:-1:-1;14778:363:0;;;;;:::i;:::-;;:::i;9179:57::-;;;;;;;;;;-1:-1:-1;9179:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;13958:109;;;;;;;;;;-1:-1:-1;13958:109:0;;;;;:::i;:::-;;:::i;8873:39::-;;;;;;;;;;-1:-1:-1;8873:39:0;;;;;;;;;;;9353:32;;;;;;;;;;;;;;;;8210:42;;;;;;;;;;;;;;;;9434:28;;;;;;;;;;;;;;;;15149:428;;;;;;;;;;-1:-1:-1;15149:428:0;;;;;:::i;:::-;;:::i;9585:34::-;;;;;;;;;;;;;;;;15932:347;;;;;;;;;;-1:-1:-1;15932:347:0;;;;;:::i;:::-;;:::i;5184:176::-;;;;;;;;;;-1:-1:-1;5184:176:0;;;;;:::i;:::-;-1:-1:-1;;;;;5325:18:0;;;5298:7;5325:18;;;;;;;;;;;:27;;;;;;;;;;;;;5184:176;28010:156;;;;;;;;;;;;;:::i;8419:33::-;;;;;;;;;;;;;;;;8259;;;;;;;;;;;;;;;;24912:546;;;;;;;;;;-1:-1:-1;24912:546:0;;;;;:::i;:::-;;:::i;14075:98::-;;;;;;;;;;;;;:::i;9545:33::-;;;;;;;;;;;;;;;;816:281;;;;;;;;;;-1:-1:-1;816:281:0;;;;;:::i;:::-;;:::i;8727:23::-;;;;;;;;;;;;;;;;9392:33;;;;;;;;;;;;;;;;3963:100;4017:13;4050:5;4043:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3963:100;:::o;5368:194::-;5476:4;5493:39;226:10;5516:7;5525:6;5493:8;:39::i;:::-;-1:-1:-1;5550:4:0;5368:194;;;;;:::o;25734:189::-;729:6;;-1:-1:-1;;;;;729:6:0;226:10;729:22;721:67;;;;-1:-1:-1;;;721:67:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;25816:23:0;::::1;25808:66;;;::::0;-1:-1:-1;;;25808:66:0;;5463:2:1;25808:66:0::1;::::0;::::1;5445:21:1::0;5502:2;5482:18;;;5475:30;5541:32;5521:18;;;5514:60;5591:18;;25808:66:0::1;5261:354:1::0;25808:66:0::1;25885:9;:30:::0;;-1:-1:-1;;;;;;25885:30:0::1;-1:-1:-1::0;;;;;25885:30:0;;;::::1;::::0;;;::::1;::::0;;25734:189::o;4439:529::-;4579:4;4596:36;4606:6;4614:9;4625:6;4596:9;:36::i;:::-;-1:-1:-1;;;;;4672:19:0;;4645:24;4672:19;;;;;;;;;;;226:10;4672:33;;;;;;;;4738:26;;;;4716:116;;;;-1:-1:-1;;;4716:116:0;;5822:2:1;4716:116:0;;;5804:21:1;5861:2;5841:18;;;5834:30;5900:34;5880:18;;;5873:62;-1:-1:-1;;;5951:18:1;;;5944:38;5999:19;;4716:116:0;5620:404:1;4716:116:0;4868:57;4877:6;226:10;4918:6;4899:16;:25;4868:8;:57::i;:::-;4956:4;4949:11;;;4439:529;;;;;;:::o;15585:339::-;729:6;;-1:-1:-1;;;;;729:6:0;226:10;729:22;721:67;;;;-1:-1:-1;;;721:67:0;;;;;;;:::i;:::-;15740:4:::1;15732;15711:13;4260:12:::0;;;4172:108;15711:13:::1;:17;::::0;15727:1:::1;15711:17;:::i;:::-;15710:26;;;;:::i;:::-;15709:35;;;;:::i;:::-;15690:15;:54;;15668:145;;;::::0;-1:-1:-1;;;15668:145:0;;6758:2:1;15668:145:0::1;::::0;::::1;6740:21:1::0;6797:2;6777:18;;;6770:30;6836:34;6816:18;;;6809:62;-1:-1:-1;;;6887:18:1;;;6880:39;6936:19;;15668:145:0::1;6556:405:1::0;15668:145:0::1;15839:28;:15:::0;15858:8:::1;15839:28;:::i;:::-;15824:12;:43:::0;;;15883:33:::1;::::0;1592:25:1;;;15883:33:0::1;::::0;1580:2:1;1565:18;15883:33:0::1;;;;;;;;15585:339:::0;:::o;24372:532::-;729:6;;-1:-1:-1;;;;;729:6:0;226:10;729:22;721:67;;;;-1:-1:-1;;;721:67:0;;;;;;;:::i;:::-;24547:18:::1;:33:::0;;;24591:18:::1;:33:::0;;;24635:12:::1;:21:::0;;;24667:17:::1;:29:::0;;;24687:9;24650:6;24735:52:::1;24568:12:::0;24612;24735:52:::1;:::i;:::-;:80;;;;:::i;:::-;:113;;;;:::i;:::-;24707:12;:141:::0;;;24883:1:::1;-1:-1:-1::0;24867:17:0::1;24859:37;;;::::0;-1:-1:-1;;;24859:37:0;;7298:2:1;24859:37:0::1;::::0;::::1;7280:21:1::0;7337:1;7317:18;;;7310:29;-1:-1:-1;;;7355:18:1;;;7348:37;7402:18;;24859:37:0::1;7096:330:1::0;24859:37:0::1;24372:532:::0;;;;:::o;5570:290::-;226:10;5683:4;5772:25;;;;;;;;;;;-1:-1:-1;;;;;5772:34:0;;;;;;;;;;5683:4;;5700:130;;5750:7;;5772:47;;5809:10;;5772:47;:::i;:::-;5700:8;:130::i;4288:143::-;-1:-1:-1;;;;;4405:18:0;4378:7;4405:18;;;:9;:18;;;;;;;4288:143::o;1105:150::-;729:6;;-1:-1:-1;;;;;729:6:0;226:10;729:22;721:67;;;;-1:-1:-1;;;721:67:0;;;;;;;:::i;:::-;1198:6:::1;::::0;1177:40:::1;::::0;1214:1:::1;::::0;-1:-1:-1;;;;;1198:6:0::1;::::0;1177:40:::1;::::0;1214:1;;1177:40:::1;1228:6;:19:::0;;-1:-1:-1;;;;;;1228:19:0::1;::::0;;1105:150::o;14567:203::-;729:6;;-1:-1:-1;;;;;729:6:0;226:10;729:22;721:67;;;;-1:-1:-1;;;721:67:0;;;;;;;:::i;:::-;4260:12;;14621::::1;:28:::0;4260:12;;14660:13:::1;:29:::0;4260:12;;14700:15:::1;:31:::0;14747:15:::1;::::0;::::1;::::0;;;::::1;14567:203::o:0;23385:364::-;729:6;;-1:-1:-1;;;;;729:6:0;226:10;729:22;721:67;;;;-1:-1:-1;;;721:67:0;;;;;;;:::i;:::-;23516:11:::1;23511:171;;23582:13;::::0;-1:-1:-1;;;;;23582:13:0;;::::1;23570:25:::0;;::::1;::::0;23544:126:::1;;;::::0;-1:-1:-1;;;23544:126:0;;7633:2:1;23544:126:0::1;::::0;::::1;7615:21:1::0;7672:2;7652:18;;;7645:30;7711:34;7691:18;;;7684:62;-1:-1:-1;;;7762:18:1;;;7755:37;7809:19;;23544:126:0::1;7431:403:1::0;23544:126:0::1;-1:-1:-1::0;;;;;23692:35:0;;;::::1;;::::0;;;:25:::1;:35;::::0;;;;:49;;-1:-1:-1;;23692:49:0::1;::::0;::::1;;::::0;;;::::1;::::0;;23385:364::o;13707:243::-;729:6;;-1:-1:-1;;;;;729:6:0;226:10;729:22;721:67;;;;-1:-1:-1;;;721:67:0;;;;;;;:::i;:::-;13771:13:::1;::::0;;;::::1;;;13770:14;13762:50;;;::::0;-1:-1:-1;;;13762:50:0;;8041:2:1;13762:50:0::1;::::0;::::1;8023:21:1::0;8080:2;8060:18;;;8053:30;8119:25;8099:18;;;8092:53;8162:18;;13762:50:0::1;7839:347:1::0;13762:50:0::1;13823:11;:18:::0;;-1:-1:-1;;13852:20:0;;;;;13898:12:::1;13883;:27:::0;13926:16:::1;::::0;::::1;::::0;-1:-1:-1;;13926:16:0::1;13707:243::o:0;3851:104::-;3907:13;3940:7;3933:14;;;;;:::i;24000:364::-;729:6;;-1:-1:-1;;;;;729:6:0;226:10;729:22;721:67;;;;-1:-1:-1;;;721:67:0;;;;;;;:::i;:::-;24148:13:::1;::::0;-1:-1:-1;;;;;24148:13:0;;::::1;24140:21:::0;;::::1;::::0;24118:128:::1;;;::::0;-1:-1:-1;;;24118:128:0;;8393:2:1;24118:128:0::1;::::0;::::1;8375:21:1::0;8432:2;8412:18;;;8405:30;8471:34;8451:18;;;8444:62;8542:27;8522:18;;;8515:55;8587:19;;24118:128:0::1;8191:421:1::0;24118:128:0::1;24259:41;24288:4;24294:5;24259:28;:41::i;:::-;24316:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;24316:40:0;::::1;::::0;::::1;::::0;;;::::1;24000:364:::0;;:::o;14181:378::-;14331:4;14377:18;14331:4;14377:9;:18::i;:::-;14355;;:40;;14347:49;;;;;;14411:41;14430:7;14439:6;14447:4;14411:18;:41::i;:::-;14407:145;;;14469:8;:15;;-1:-1:-1;;;;14469:15:0;-1:-1:-1;;;14469:15:0;;;14499:10;:8;:10::i;:::-;14524:8;:16;;-1:-1:-1;;;;14524:16:0;;;14294:265;14181:378;;;:::o;5868:475::-;226:10;5986:4;6030:25;;;;;;;;;;;-1:-1:-1;;;;;6030:34:0;;;;;;;;;;6097:35;;;;6075:122;;;;-1:-1:-1;;;6075:122:0;;8819:2:1;6075:122:0;;;8801:21:1;8858:2;8838:18;;;8831:30;8897:34;8877:18;;;8870:62;-1:-1:-1;;;8948:18:1;;;8941:35;8993:19;;6075:122:0;8617:401:1;6075:122:0;6233:67;226:10;6256:7;6284:15;6265:16;:34;6233:8;:67::i;:::-;-1:-1:-1;6331:4:0;;5868:475;-1:-1:-1;;;5868:475:0:o;4976:200::-;5087:4;5104:42;226:10;5128:9;5139:6;5104:9;:42::i;25466:260::-;729:6;;-1:-1:-1;;;;;729:6:0;226:10;729:22;721:67;;;;-1:-1:-1;;;721:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25584:23:0;::::1;25562:109;;;::::0;-1:-1:-1;;;25562:109:0;;9225:2:1;25562:109:0::1;::::0;::::1;9207:21:1::0;9264:2;9244:18;;;9237:30;9303:34;9283:18;;;9276:62;-1:-1:-1;;;9354:18:1;;;9347:34;9398:19;;25562:109:0::1;9023:400:1::0;25562:109:0::1;25682:15;:36:::0;;-1:-1:-1;;;;;;25682:36:0::1;-1:-1:-1::0;;;;;25682:36:0;;;::::1;::::0;;;::::1;::::0;;25466:260::o;23195:182::-;729:6;;-1:-1:-1;;;;;729:6:0;226:10;729:22;721:67;;;;-1:-1:-1;;;721:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23280:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;23280:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;23335:34;;1163:41:1;;;23335:34:0::1;::::0;1136:18:1;23335:34:0::1;;;;;;;23195:182:::0;;:::o;14778:363::-;729:6;;-1:-1:-1;;;;;729:6:0;226:10;729:22;721:67;;;;-1:-1:-1;;;721:67:0;;;;;;;:::i;:::-;14942:4:::1;14934;14913:13;4260:12:::0;;;4172:108;14913:13:::1;:17;::::0;14929:1:::1;14913:17;:::i;:::-;14912:26;;;;:::i;:::-;14911:35;;;;:::i;:::-;14889:18;:57;;14867:151;;;::::0;-1:-1:-1;;;14867:151:0;;9630:2:1;14867:151:0::1;::::0;::::1;9612:21:1::0;9669:2;9649:18;;;9642:30;9708:34;9688:18;;;9681:62;-1:-1:-1;;;9759:18:1;;;9752:42;9811:19;;14867:151:0::1;9428:408:1::0;14867:151:0::1;15047:31;:18:::0;15069:8:::1;15047:31;:::i;:::-;15029:15;:49:::0;;;15094:39:::1;::::0;1592:25:1;;;15094:39:0::1;::::0;1580:2:1;1565:18;15094:39:0::1;1446:177:1::0;13958:109:0;729:6;;-1:-1:-1;;;;;729:6:0;226:10;729:22;721:67;;;;-1:-1:-1;;;721:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14028:23:0::1;14054:5;14028:23:::0;;;:15:::1;:23;::::0;;;;:31;;-1:-1:-1;;14028:31:0::1;::::0;;13958:109::o;15149:428::-;729:6;;-1:-1:-1;;;;;729:6:0;226:10;729:22;721:67;;;;-1:-1:-1;;;721:67:0;;;;;;;:::i;:::-;15289:6:::1;15268:13;4260:12:::0;;;4172:108;15268:13:::1;:17;::::0;15284:1:::1;15268:17;:::i;:::-;15267:28;;;;:::i;:::-;15254:9;:41;;15232:144;;;::::0;-1:-1:-1;;;15232:144:0;;10043:2:1;15232:144:0::1;::::0;::::1;10025:21:1::0;10082:2;10062:18;;;10055:30;10121:34;10101:18;;;10094:62;-1:-1:-1;;;10172:18:1;;;10165:51;10233:19;;15232:144:0::1;9841:417:1::0;15232:144:0::1;15444:4;15423:13;4260:12:::0;;;4172:108;15423:13:::1;:17;::::0;15439:1:::1;15423:17;:::i;:::-;15422:26;;;;:::i;:::-;15409:9;:39;;15387:141;;;::::0;-1:-1:-1;;;15387:141:0;;10465:2:1;15387:141:0::1;::::0;::::1;10447:21:1::0;10504:2;10484:18;;;10477:30;10543:34;10523:18;;;10516:62;-1:-1:-1;;;10594:18:1;;;10587:50;10654:19;;15387:141:0::1;10263:416:1::0;15387:141:0::1;15539:18;:30:::0;15149:428::o;15932:347::-;729:6;;-1:-1:-1;;;;;729:6:0;226:10;729:22;721:67;;;;-1:-1:-1;;;721:67:0;;;;;;;:::i;:::-;16090:4:::1;16082;16061:13;4260:12:::0;;;4172:108;16061:13:::1;:17;::::0;16077:1:::1;16061:17;:::i;:::-;16060:26;;;;:::i;:::-;16059:35;;;;:::i;:::-;16039:16;:55;;16017:147;;;::::0;-1:-1:-1;;;16017:147:0;;10886:2:1;16017:147:0::1;::::0;::::1;10868:21:1::0;10925:2;10905:18;;;10898:30;10964:34;10944:18;;;10937:62;-1:-1:-1;;;11015:18:1;;;11008:40;11065:19;;16017:147:0::1;10684:406:1::0;16017:147:0::1;16191:29;:16:::0;16211:8:::1;16191:29;:::i;:::-;16175:13;:45:::0;;;16236:35:::1;::::0;1592:25:1;;;16236:35:0::1;::::0;1580:2:1;1565:18;16236:35:0::1;1446:177:1::0;28010:156:0;729:6;;-1:-1:-1;;;;;729:6:0;226:10;729:22;721:67;;;;-1:-1:-1;;;721:67:0;;;;;;;:::i;:::-;28100:58:::1;::::0;28063:12:::1;::::0;28108:10:::1;::::0;28132:21:::1;::::0;28063:12;28100:58;28063:12;28100:58;28132:21;28108:10;28100:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24912:546:::0;729:6;;-1:-1:-1;;;;;729:6:0;226:10;729:22;721:67;;;;-1:-1:-1;;;721:67:0;;;;;;;:::i;:::-;25088:19:::1;:34:::0;;;25133:19:::1;:34:::0;;;25178:13:::1;:22:::0;;;25211:18:::1;:30:::0;;;25232:9;25194:6;25281:54:::1;25110:12:::0;25155;25281:54:::1;:::i;:::-;:83;;;;:::i;:::-;:117;;;;:::i;:::-;25252:13;:146:::0;;;25434:1:::1;-1:-1:-1::0;25417:18:0::1;25409:41;;;::::0;-1:-1:-1;;;25409:41:0;;11507:2:1;25409:41:0::1;::::0;::::1;11489:21:1::0;11546:2;11526:18;;;11519:30;-1:-1:-1;;;11565:18:1;;;11558:40;11615:18;;25409:41:0::1;11305:334:1::0;14075:98:0;729:6;;-1:-1:-1;;;;;729:6:0;226:10;729:22;721:67;;;;-1:-1:-1;;;721:67:0;;;;;;;:::i;:::-;14137:20:::1;:28:::0;;-1:-1:-1;;14137:28:0::1;::::0;;14075:98::o;816:281::-;729:6;;-1:-1:-1;;;;;729:6:0;226:10;729:22;721:67;;;;-1:-1:-1;;;721:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;919:22:0;::::1;897:110;;;::::0;-1:-1:-1;;;897:110:0;;11846:2:1;897:110:0::1;::::0;::::1;11828:21:1::0;11885:2;11865:18;;;11858:30;11924:34;11904:18;;;11897:62;-1:-1:-1;;;11975:18:1;;;11968:36;12021:19;;897:110:0::1;11644:402:1::0;897:110:0::1;1044:6;::::0;1023:38:::1;::::0;-1:-1:-1;;;;;1023:38:0;;::::1;::::0;1044:6:::1;::::0;1023:38:::1;::::0;1044:6:::1;::::0;1023:38:::1;1072:6;:17:::0;;-1:-1:-1;;;;;;1072:17:0::1;-1:-1:-1::0;;;;;1072:17:0;;;::::1;::::0;;;::::1;::::0;;816:281::o;6351:380::-;-1:-1:-1;;;;;6487:19:0;;6479:68;;;;-1:-1:-1;;;6479:68:0;;12253:2:1;6479:68:0;;;12235:21:1;12292:2;12272:18;;;12265:30;12331:34;12311:18;;;12304:62;-1:-1:-1;;;12382:18:1;;;12375:34;12426:19;;6479:68:0;12051:400:1;6479:68:0;-1:-1:-1;;;;;6566:21:0;;6558:68;;;;-1:-1:-1;;;6558:68:0;;12658:2:1;6558:68:0;;;12640:21:1;12697:2;12677:18;;;12670:30;12736:34;12716:18;;;12709:62;-1:-1:-1;;;12787:18:1;;;12780:32;12829:19;;6558:68:0;12456:398:1;6558:68:0;-1:-1:-1;;;;;6639:18:0;;;:11;:18;;;;;;;;;;;:27;;;;;;;;;;;;;:36;;;6691:32;;1592:25:1;;;6691:32:0;;1565:18:1;6691:32:0;;;;;;;;6351:380;;;:::o;16287:6657::-;-1:-1:-1;;;;;16488:28:0;;;16419:19;16488:28;;;:20;:28;;;;;;;;;16547:37;;;;;:27;:37;;;;;;16441:15;;16488:28;;;16547:42;;;16618:28;16575:8;16618:9;:28::i;:::-;:33;;-1:-1:-1;;;;;;16672:20:0;;16664:70;;;;-1:-1:-1;;;16664:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16753:22:0;;16745:70;;;;-1:-1:-1;;;16745:70:0;;;;;;;:::i;:::-;16843:1;16834:6;:10;16826:52;;;;-1:-1:-1;;;16826:52:0;;13871:2:1;16826:52:0;;;13853:21:1;13910:2;13890:18;;;13883:30;13949:31;13929:18;;;13922:59;13998:18;;16826:52:0;13669:353:1;16826:52:0;16896:13;;;;;;;16891:191;;-1:-1:-1;;;;;16952:27:0;;;;;;:19;:27;;;;;;;;;:60;;-1:-1:-1;;;;;;16983:29:0;;;;;;:19;:29;;;;;;;;16952:60;16926:144;;;;-1:-1:-1;;;16926:144:0;;14229:2:1;16926:144:0;;;14211:21:1;14268:2;14248:18;;;14241:30;-1:-1:-1;;;14287:18:1;;;14280:52;14349:18;;16926:144:0;14027:346:1;16926:144:0;17098:14;;:18;17094:268;;-1:-1:-1;;;;;17160:23:0;;;;;;:15;:23;;;;;;;;17159:24;;:68;;-1:-1:-1;667:6:0;;-1:-1:-1;;;;;17208:19:0;;;667:6;;17208:19;17159:68;:120;;;-1:-1:-1;;;;;;17252:27:0;;17272:6;17252:27;17159:120;17133:217;;;;-1:-1:-1;;;17133:217:0;;14580:2:1;17133:217:0;;;14562:21:1;14619:2;14599:18;;;14592:30;14658:34;14638:18;;;14631:62;-1:-1:-1;;;14709:18:1;;;14702:33;14752:19;;17133:217:0;14378:399:1;17133:217:0;17378:14;;;;17374:2755;;;-1:-1:-1;;;;;17431:33:0;;17409:19;17431:33;;;:25;:33;;;;;;17506:8;;17431:33;;;;;-1:-1:-1;;;17506:8:0;;;;17505:9;17563:7;667:6;;-1:-1:-1;;;;;667:6:0;;602:79;17563:7;-1:-1:-1;;;;;17553:17:0;:6;-1:-1:-1;;;;;17553:17:0;;;:57;;;;-1:-1:-1;667:6:0;;-1:-1:-1;;;;;17591:19:0;;;667:6;;17591:19;;17553:57;:100;;;;-1:-1:-1;;;;;;17631:22:0;;;;17553:100;:148;;;;-1:-1:-1;;;;;;17674:27:0;;17694:6;17674:27;;17553:148;:197;;;;-1:-1:-1;;;;;;17723:27:0;;;;;;:19;:27;;;;;;;;17722:28;17553:197;:248;;;;-1:-1:-1;;;;;;17772:29:0;;;;;;:19;:29;;;;;;;;17771:30;17553:248;17531:1543;;;17840:20;;;;;;;17836:1223;;;17920:8;;-1:-1:-1;;;;;17976:28:0;;17885:31;17976:28;;;:20;:28;;;;;;17920:8;-1:-1:-1;;;17920:8:0;;;;;17919:9;;17976:28;17975:29;;;18046:46;;;;;18066:26;18046:46;18165:15;;18027:65;;-1:-1:-1;;;;;;18145:36:0;;;18165:15;;18145:36;;;;:74;;-1:-1:-1;18205:13:0;;-1:-1:-1;;;;;18185:34:0;;;18205:13;;18185:34;;18145:74;18115:925;;;18383:16;18398:1;18383:12;:16;:::i;:::-;18337:9;18308:39;;;;:28;:39;;;;;;:91;:218;;;;-1:-1:-1;18510:16:0;18525:1;18510:12;:16;:::i;:::-;-1:-1:-1;;;;;18436:38:0;;;;;;:28;:38;;;;;;:90;18308:218;18270:345;;;;-1:-1:-1;;;18270:345:0;;15117:2:1;18270:345:0;;;15099:21:1;15156:2;15136:18;;;15129:30;15195:31;15175:18;;;15168:59;15244:18;;18270:345:0;14915:353:1;18270:345:0;18671:9;18642:39;;;;:28;:39;;;;;;18684:12;18642:54;;;;-1:-1:-1;;;;;18723:38:0;;;;;;:53;18115:925;;;18810:11;18806:234;;;-1:-1:-1;;;;;18871:35:0;;18850:18;18871:35;;;:27;:35;;;;;;18963:8;;18950:21;;;18998:18;;;;;;18823:217;;18806:234;17862:1197;;;17836:1223;-1:-1:-1;;;;;19094:28:0;;;;;;:20;:28;;;;;;;;:68;;;;-1:-1:-1;;;;;;19127:35:0;;;;;;:25;:35;;;;;;;;19126:36;19094:68;19090:1028;;;19223:12;;19213:6;:22;;19183:136;;;;-1:-1:-1;;;19183:136:0;;15475:2:1;19183:136:0;;;15457:21:1;15514:2;15494:18;;;15487:30;15553:34;15533:18;;;15526:62;-1:-1:-1;;;15604:18:1;;;15597:38;15652:19;;19183:136:0;15273:404:1;19183:136:0;19400:15;;19377:19;19387:8;19377:9;:19::i;:::-;19368:28;;:6;:28;:::i;:::-;:47;;19338:145;;;;-1:-1:-1;;;19338:145:0;;15884:2:1;19338:145:0;;;15866:21:1;15923:2;15903:18;;;15896:30;-1:-1:-1;;;15942:18:1;;;15935:54;16006:18;;19338:145:0;15682:348:1;19338:145:0;19090:1028;;;19509:18;:36;;;;;19531:14;19509:36;19505:613;;;19566:8;:22;;;19505:613;;;-1:-1:-1;;;;;19632:30:0;;;;;;:20;:30;;;;;;;;:68;;;;-1:-1:-1;;;;;;19667:33:0;;;;;;:25;:33;;;;;;;;19666:34;19632:68;19610:508;;;19775:13;;19765:6;:23;;19735:139;;;;-1:-1:-1;;;19735:139:0;;16237:2:1;19735:139:0;;;16219:21:1;16276:2;16256:18;;;16249:30;16315:34;16295:18;;;16288:62;-1:-1:-1;;;16366:18:1;;;16359:40;16416:19;;19735:139:0;16035:406:1;19610:508:0;-1:-1:-1;;;;;19901:35:0;;;;;;:25;:35;;;;;;;;19896:222;;20019:15;;19996:19;20006:8;19996:9;:19::i;:::-;19987:28;;:6;:28;:::i;:::-;:47;;19957:145;;;;-1:-1:-1;;;19957:145:0;;15884:2:1;19957:145:0;;;15866:21:1;15923:2;15903:18;;;15896:30;-1:-1:-1;;;15942:18:1;;;15935:54;16006:18;;19957:145:0;15682:348:1;19957:145:0;17394:2735;;17374:2755;20141:28;20172:24;20190:4;20172:9;:24::i;:::-;20248:18;;20141:55;;-1:-1:-1;20224:42:0;;;;;;;20297:35;;-1:-1:-1;20321:11:0;;;;;;;20297:35;:61;;;;-1:-1:-1;20350:8:0;;-1:-1:-1;;;20350:8:0;;;;20349:9;20297:61;:107;;;;-1:-1:-1;;;;;;20376:28:0;;;;;;:20;:28;;;;;;;;20375:29;20297:107;:152;;;;-1:-1:-1;;;;;;20422:27:0;;;;;;:19;:27;;;;;;;;20421:28;20297:152;:199;;;;-1:-1:-1;;;;;;20467:29:0;;;;;;:19;:29;;;;;;;;20466:30;20297:199;20279:327;;;20523:8;:15;;-1:-1:-1;;;;20523:15:0;-1:-1:-1;;;20523:15:0;;;20553:10;:8;:10::i;:::-;20578:8;:16;;-1:-1:-1;;;;20578:16:0;;;20279:327;20633:4;20654:12;:29;;;;;20670:13;20654:29;20650:161;;;20704:10;20700:100;;;-1:-1:-1;;;;;20733:37:0;;;;;;:27;:37;;;;;:51;;;20700:100;-1:-1:-1;;;;;20827:27:0;;;;;;:19;:27;;;;;;;;;:60;;-1:-1:-1;;;;;;20858:29:0;;;;;;:19;:29;;;;;;;;20827:60;20823:108;;;-1:-1:-1;20914:5:0;20823:108;20943:12;20976:7;20972:1911;;;28271:14;;28256:12;:29;21022:70;;;;-1:-1:-1;;;;;;21064:28:0;;;;;;:20;:28;;;;;;;;21022:70;:122;;;;-1:-1:-1;;;;;;21114:30:0;;;;;;:20;:30;;;;;;;;21113:31;21022:122;:159;;;;;21180:1;21165:12;;:16;21022:159;21000:1736;;;-1:-1:-1;;;;;21221:25:0;;;;;;:15;:25;;;;;;;;21216:204;;-1:-1:-1;;;;;21271:25:0;;;;;;:15;:25;;;;;:32;;-1:-1:-1;;21271:32:0;21299:4;21271:32;;;;;;21326:10;:15;;21299:4;;21326:10;;:15;;21299:4;;21326:15;:::i;:::-;;;;-1:-1:-1;;21369:31:0;;-1:-1:-1;;;;;1402:32:1;;1384:51;;21369:31:0;;1372:2:1;1357:18;21369:31:0;;;;;;;21216:204;21463:3;21448:11;:6;21457:2;21448:11;:::i;:::-;21447:19;;;;:::i;:::-;21440:26;;21537:12;;21515:18;;21508:4;:25;;;;:::i;:::-;21507:42;;;;:::i;:::-;21485:18;;:64;;;;;;;:::i;:::-;;;;-1:-1:-1;;21620:12:0;;21598:18;;21591:25;;:4;:25;:::i;:::-;21590:42;;;;:::i;:::-;21568:18;;:64;;;;;;;:::i;:::-;;;;-1:-1:-1;;21691:12:0;;21675;;21668:19;;:4;:19;:::i;:::-;21667:36;;;;:::i;:::-;21651:12;;:52;;;;;;;:::i;:::-;;;;-1:-1:-1;;21772:12:0;;21751:17;;21744:24;;:4;:24;:::i;:::-;21743:41;;;;:::i;:::-;21722:17;;:62;;;;;;;:::i;:::-;;;;-1:-1:-1;21000:1736:0;;-1:-1:-1;21000:1736:0;;-1:-1:-1;;;;;21823:30:0;;;;;;:20;:30;;;;;;;;:51;;;;;21873:1;21857:13;;:17;21823:51;21819:917;;;21929:3;21912:13;;21903:6;:22;;;;:::i;:::-;21902:30;;;;:::i;:::-;21895:37;;22004:13;;21981:19;;21974:4;:26;;;;:::i;:::-;21973:44;;;;:::i;:::-;21951:18;;:66;;;;;;;:::i;:::-;;;;-1:-1:-1;;22089:13:0;;22066:19;;22059:26;;:4;:26;:::i;:::-;22058:44;;;;:::i;:::-;22036:18;;:66;;;;;;;:::i;:::-;;;;-1:-1:-1;;22162:13:0;;22145;;22138:20;;:4;:20;:::i;:::-;22137:38;;;;:::i;:::-;22121:12;;:54;;;;;;;:::i;:::-;;;;-1:-1:-1;;22245:13:0;;22223:18;;22216:25;;:4;:25;:::i;21819:917::-;-1:-1:-1;;;;;22297:28:0;;;;;;:20;:28;;;;;;;;:48;;;;;22344:1;22329:12;;:16;22297:48;22293:443;;;22399:3;22383:12;;22374:6;:21;;;;:::i;:::-;22373:29;;;;:::i;:::-;22366:36;;22473:12;;22451:18;;22444:4;:25;;;;:::i;:::-;22443:42;;;;:::i;:::-;22421:18;;:64;;;;;;;:::i;:::-;;;;-1:-1:-1;;22556:12:0;;22534:18;;22527:25;;:4;:25;:::i;:::-;22526:42;;;;:::i;:::-;22504:18;;:64;;;;;;;:::i;:::-;;;;-1:-1:-1;;22627:12:0;;22611;;22604:19;;:4;:19;:::i;:::-;22603:36;;;;:::i;:::-;22587:12;;:52;;;;;;;:::i;:::-;;;;-1:-1:-1;;22708:12:0;;22687:17;;22680:24;;:4;:24;:::i;:::-;22679:41;;;;:::i;:::-;22658:17;;:62;;;;;;;:::i;:::-;;;;-1:-1:-1;;22293:443:0;22754:8;;22750:93;;22783:44;22799:6;22815:4;22822;22783:15;:44::i;:::-;22857:14;22867:4;22857:14;;:::i;:::-;;;20972:1911;22895:41;22911:6;22919:8;22929:6;22895:15;:41::i;:::-;16408:6536;;;;;;;;16287:6657;;;:::o;23757:235::-;-1:-1:-1;;;;;23840:26:0;;;;;;:20;:26;;;;;:34;;-1:-1:-1;;23840:34:0;;;;;;;23887:39;23840:26;:34;23887:26;:39::i;12420:902::-;12584:10;12547:4;12623:30;;;:19;:30;;;;;;12547:4;;12584:10;12623:30;;12690:4;12547;12730:585;;;;12786:1;12765:18;12775:7;12765:9;:18::i;:::-;:22;12761:243;;;12812:6;12822:1;12812:11;12808:148;;12848:8;:15;;;12808:148;;;12912:24;12920:7;12929:6;12912:7;:24::i;:::-;-1:-1:-1;12983:5:0;12761:243;13027:6;-1:-1:-1;13020:13:0;;-1:-1:-1;;;13020:13:0;12730:585;13092:17;;13070:18;13080:7;13070:9;:18::i;:::-;:39;;:64;;;;;13133:1;13113:17;;:21;13070:64;13066:142;;;13155:37;13163:9;13174:17;;13155:7;:37::i;:::-;-1:-1:-1;;13244:1:0;13224:17;:21;-1:-1:-1;13269:4:0;;-1:-1:-1;13290:13:0;;-1:-1:-1;13290:13:0;26411:1591;26474:1;26454:17;;:21;:70;;;;;26507:17;;26479:24;26497:4;26479:9;:24::i;:::-;:45;;26454:70;26450:144;;;26541:41;26557:4;26564:17;;26541:7;:41::i;:::-;26624:1;26604:17;:21;;;26662:24;26680:4;26662:9;:24::i;:::-;26636:50;;26697:25;26793:12;;26759:18;;26725;;:52;;;;:::i;:::-;:80;;;;:::i;:::-;26697:108;-1:-1:-1;26822:20:0;;;:46;;-1:-1:-1;26846:22:0;;26822:46;26818:85;;;26885:7;;26411:1591::o;26818:85::-;26937:18;;;:23;;;:::i;:::-;26919:15;:41;26915:115;;;26995:18;;;:23;;;:::i;:::-;26977:41;;26915:115;27042:23;27142:1;27122:17;27087:18;;27069:15;:36;;;;:::i;:::-;27068:71;;;;:::i;:::-;:75;;;;:::i;:::-;27042:101;-1:-1:-1;27156:51:0;27173:33;27042:101;27173:15;:33;:::i;:::-;27156:16;:51::i;:::-;27417:18;;27241:21;;;;27220:18;;27417:22;;27438:1;;27417:22;:::i;:::-;27396:44;;:17;:44;:::i;:::-;27360:18;;27347:31;;:10;:31;:::i;:::-;27346:95;;;;:::i;:::-;27320:121;;27452:17;27558:1;27537:18;;:22;;;;:::i;:::-;27516:44;;:17;:44;:::i;:::-;27486:12;;27473:25;;:10;:25;:::i;:::-;27472:89;;;;:::i;:::-;27452:109;-1:-1:-1;27591:27:0;27452:109;27591:15;:27;:::i;:::-;27572:46;;;;:::i;:::-;27650:1;27629:18;:22;;;27662:18;:22;;;27695:12;:16;;;27722:17;:21;27572:46;-1:-1:-1;27760:19:0;;;;;:42;;;27801:1;27783:15;:19;27760:42;27756:121;;;27819:46;27832:15;27849;27819:12;:46::i;:::-;27897:9;;27889:38;;-1:-1:-1;;;;;27897:9:0;;;;27889:38;;;;;27917:9;;27897;27889:38;27897:9;27889:38;27917:9;27897;27889:38;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27946:15:0;;27938:56;;-1:-1:-1;;;;;27946:15:0;;;;27972:21;27938:56;;;;;27946:15;27938:56;27946:15;27938:56;27972:21;27946:15;27938:56;;;;;;;;;;;;;;;;;;;;;26439:1563;;;;;;;26411:1591::o;6739:651::-;-1:-1:-1;;;;;6879:20:0;;6871:70;;;;-1:-1:-1;;;6871:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6960:23:0;;6952:71;;;;-1:-1:-1;;;6952:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7060:17:0;;7036:21;7060:17;;;:9;:17;;;;;;7110:23;;;;7088:111;;;;-1:-1:-1;;;7088:111:0;;16648:2:1;7088:111:0;;;16630:21:1;16687:2;16667:18;;;16660:30;16726:34;16706:18;;;16699:62;-1:-1:-1;;;16777:18:1;;;16770:36;16823:19;;7088:111:0;16446:402:1;7088:111:0;-1:-1:-1;;;;;7235:17:0;;;;;;;:9;:17;;;;;;7255:22;;;7235:42;;7299:20;;;;;;;;:30;;7271:6;;7235:17;7299:30;;7271:6;;7299:30;:::i;:::-;;;;;;;;7364:9;-1:-1:-1;;;;;7347:35:0;7356:6;-1:-1:-1;;;;;7347:35:0;;7375:6;7347:35;;;;1592:25:1;;1580:2;1565:18;;1446:177;7347:35:0;;;;;;;;6860:530;6739:651;;;:::o;22952:235::-;-1:-1:-1;;;;;23068:35:0;;;;;;:25;:35;;;;;;;;;:49;;-1:-1:-1;;23068:49:0;;;;;;;;;;23133:46;;17021:51:1;;;17088:18;;;17081:50;23133:46:0;;16994:18:1;23133:46:0;;;;;;;22952:235;;:::o;7398:440::-;-1:-1:-1;;;;;7484:21:0;;7476:57;;;;-1:-1:-1;;;7476:57:0;;17344:2:1;7476:57:0;;;17326:21:1;17383:2;17363:18;;;17356:30;17422:25;17402:18;;;17395:53;17465:18;;7476:57:0;17142:347:1;7476:57:0;-1:-1:-1;;;;;7562:18:0;;7544:15;7562:18;;;:9;:18;;;;;;7599:17;;;;7591:63;;;;-1:-1:-1;;;7591:63:0;;17696:2:1;7591:63:0;;;17678:21:1;17735:2;17715:18;;;17708:30;17774:34;17754:18;;;17747:62;-1:-1:-1;;;17825:18:1;;;17818:31;17866:19;;7591:63:0;17494:397:1;7591:63:0;-1:-1:-1;;;;;7690:18:0;;;;;;:9;:18;;;;;;;;7711:16;;;7690:37;;7742:12;:22;;;;;;;7793:37;1592:25:1;;;7690:18:0;;;7793:37;;1565:18:1;7793:37:0;1446:177:1;25931:472:0;26021:16;;;26035:1;26021:16;;;;;;;;25997:21;;26021:16;;;;;;;;;;-1:-1:-1;26021:16:0;25997:40;;26066:4;26048;26053:1;26048:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;26048:23:0;;;:7;;;;;;;;;;:23;;;;26092:15;;:22;;;-1:-1:-1;;;26092:22:0;;;;:15;;;;;:20;;:22;;;;;26048:7;;26092:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26082:4;26087:1;26082:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;26082:32:0;;;:7;;;;;;;;;:32;26157:15;;26125:62;;26142:4;;26157:15;26175:11;26125:8;:62::i;:::-;26198:15;;:197;;-1:-1:-1;;;26198:197:0;;-1:-1:-1;;;;;26198:15:0;;;;:66;;:197;;26279:11;;26198:15;;26322:4;;26349;;26369:15;;26198:197;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25986:417;25931:472;:::o;13330:369::-;13443:15;;13411:62;;13428:4;;-1:-1:-1;;;;;13443:15:0;13461:11;13411:8;:62::i;:::-;13484:15;;:207;;-1:-1:-1;;;13484:207:0;;13557:4;13484:207;;;19742:34:1;19792:18;;;19785:34;;;13484:15:0;19835:18:1;;;19828:34;;;19878:18;;;19871:34;13643:6:0;19921:19:1;;;19914:44;13665:15:0;19974:19:1;;;19967:35;-1:-1:-1;;;;;13484:15:0;;;;:31;;13523:9;;19676:19:1;;13484:207:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;13330:369;;:::o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;622:70;567:131;:::o;703:315::-;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1628:247::-;1687:6;1740:2;1728:9;1719:7;1715:23;1711:32;1708:52;;;1756:1;1753;1746:12;1708:52;1795:9;1782:23;1814:31;1839:5;1814:31;:::i;1880:456::-;1957:6;1965;1973;2026:2;2014:9;2005:7;2001:23;1997:32;1994:52;;;2042:1;2039;2032:12;1994:52;2081:9;2068:23;2100:31;2125:5;2100:31;:::i;:::-;2150:5;-1:-1:-1;2207:2:1;2192:18;;2179:32;2220:33;2179:32;2220:33;:::i;:::-;1880:456;;2272:7;;-1:-1:-1;;;2326:2:1;2311:18;;;;2298:32;;1880:456::o;2341:180::-;2400:6;2453:2;2441:9;2432:7;2428:23;2424:32;2421:52;;;2469:1;2466;2459:12;2421:52;-1:-1:-1;2492:23:1;;2341:180;-1:-1:-1;2341:180:1:o;2526:385::-;2612:6;2620;2628;2636;2689:3;2677:9;2668:7;2664:23;2660:33;2657:53;;;2706:1;2703;2696:12;2657:53;-1:-1:-1;;2729:23:1;;;2799:2;2784:18;;2771:32;;-1:-1:-1;2850:2:1;2835:18;;2822:32;;2901:2;2886:18;2873:32;;-1:-1:-1;2526:385:1;-1:-1:-1;2526:385:1:o;3313:416::-;3378:6;3386;3439:2;3427:9;3418:7;3414:23;3410:32;3407:52;;;3455:1;3452;3445:12;3407:52;3494:9;3481:23;3513:31;3538:5;3513:31;:::i;:::-;3563:5;-1:-1:-1;3620:2:1;3605:18;;3592:32;3662:15;;3655:23;3643:36;;3633:64;;3693:1;3690;3683:12;3633:64;3716:7;3706:17;;;3313:416;;;;;:::o;3734:383::-;3811:6;3819;3827;3880:2;3868:9;3859:7;3855:23;3851:32;3848:52;;;3896:1;3893;3886:12;3848:52;3935:9;3922:23;3954:31;3979:5;3954:31;:::i;:::-;4004:5;4056:2;4041:18;;4028:32;;-1:-1:-1;4107:2:1;4092:18;;;4079:32;;3734:383;-1:-1:-1;;;3734:383:1:o;4122:388::-;4190:6;4198;4251:2;4239:9;4230:7;4226:23;4222:32;4219:52;;;4267:1;4264;4257:12;4219:52;4306:9;4293:23;4325:31;4350:5;4325:31;:::i;:::-;4375:5;-1:-1:-1;4432:2:1;4417:18;;4404:32;4445:33;4404:32;4445:33;:::i;4515:380::-;4594:1;4590:12;;;;4637;;;4658:61;;4712:4;4704:6;4700:17;4690:27;;4658:61;4765:2;4757:6;4754:14;4734:18;4731:38;4728:161;;4811:10;4806:3;4802:20;4799:1;4792:31;4846:4;4843:1;4836:15;4874:4;4871:1;4864:15;4728:161;;4515:380;;;:::o;4900:356::-;5102:2;5084:21;;;5121:18;;;5114:30;5180:34;5175:2;5160:18;;5153:62;5247:2;5232:18;;4900:356::o;6029:127::-;6090:10;6085:3;6081:20;6078:1;6071:31;6121:4;6118:1;6111:15;6145:4;6142:1;6135:15;6161:168;6234:9;;;6265;;6282:15;;;6276:22;;6262:37;6252:71;;6303:18;;:::i;6334:217::-;6374:1;6400;6390:132;;6444:10;6439:3;6435:20;6432:1;6425:31;6479:4;6476:1;6469:15;6507:4;6504:1;6497:15;6390:132;-1:-1:-1;6536:9:1;;6334:217::o;6966:125::-;7031:9;;;7052:10;;;7049:36;;;7065:18;;:::i;12859:401::-;13061:2;13043:21;;;13100:2;13080:18;;;13073:30;13139:34;13134:2;13119:18;;13112:62;-1:-1:-1;;;13205:2:1;13190:18;;13183:35;13250:3;13235:19;;12859:401::o;13265:399::-;13467:2;13449:21;;;13506:2;13486:18;;;13479:30;13545:34;13540:2;13525:18;;13518:62;-1:-1:-1;;;13611:2:1;13596:18;;13589:33;13654:3;13639:19;;13265:399::o;14782:128::-;14849:9;;;14870:11;;;14867:37;;;14884:18;;:::i;18028:127::-;18089:10;18084:3;18080:20;18077:1;18070:31;18120:4;18117:1;18110:15;18144:4;18141:1;18134:15;18160:251;18230:6;18283:2;18271:9;18262:7;18258:23;18254:32;18251:52;;;18299:1;18296;18289:12;18251:52;18331:9;18325:16;18350:31;18375:5;18350:31;:::i;18416:980::-;18678:4;18726:3;18715:9;18711:19;18757:6;18746:9;18739:25;18783:2;18821:6;18816:2;18805:9;18801:18;18794:34;18864:3;18859:2;18848:9;18844:18;18837:31;18888:6;18923;18917:13;18954:6;18946;18939:22;18992:3;18981:9;18977:19;18970:26;;19031:2;19023:6;19019:15;19005:29;;19052:1;19062:195;19076:6;19073:1;19070:13;19062:195;;;19141:13;;-1:-1:-1;;;;;19137:39:1;19125:52;;19232:15;;;;19197:12;;;;19173:1;19091:9;19062:195;;;-1:-1:-1;;;;;;;19313:32:1;;;;19308:2;19293:18;;19286:60;-1:-1:-1;;;19377:3:1;19362:19;19355:35;19274:3;18416:980;-1:-1:-1;;;18416:980:1:o;20013:306::-;20101:6;20109;20117;20170:2;20158:9;20149:7;20145:23;20141:32;20138:52;;;20186:1;20183;20176:12;20138:52;20215:9;20209:16;20199:26;;20265:2;20254:9;20250:18;20244:25;20234:35;;20309:2;20298:9;20294:18;20288:25;20278:35;;20013:306;;;;;:::o

Swarm Source

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