ETH Price: $3,175.32 (+2.20%)

Token

Trident Of Poseidon (TOP)
 

Overview

Max Total Supply

3,909,764,293 TOP

Holders

90

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
7,583,392.121141311807747049 TOP

Value
$0.00
0xeaa1315fa4cad2da4dab5a767929261723821638
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:
TridentOfPoseidon

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// www.tridentofposeidon.com
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.5;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

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

        return true;
    }

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

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

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");
        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _totalSupply -= amount;
        }

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

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

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

contract Ownable is Context {
    address private _owner;

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

    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 renounceOwnership() external virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

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

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

    function WETH() external pure returns (address);

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

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

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

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

contract TridentOfPoseidon is ERC20, Ownable {
    uint256 public maxBuyAmount;
    uint256 public maxSellAmount;
    uint256 public maxWalletAmount;

    IDexRouter public dexRouter;
    address public liquidityPair;

    bool private swapping;
    uint256 public swapTokensAtAmount;

    address public marketingAddress;
    address public liquidityAddress;

    uint256 public tradingBlock = 0;
    uint256 public botBlockNumber = 0;
    mapping(address => bool) public initialBotBuyer;
    mapping(address => uint256) public userBal;
    uint256 public botsCaught;
    uint256 private swaps;
    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;
    mapping(address => uint256) private _holderLastTransferTimestamp;
    bool public transferDelayEnabled = true;
    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;
    uint256 public buyBurnFee;

    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;
    uint256 public sellBurnFee;

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

    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTx;
    mapping(address => bool) public automatedMarketMakerPairs;

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

    event EnabledTrading();

    event RemovedLimits();

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event UpdatedMaxBuyAmount(uint256 newAmount);

    event UpdatedMaxSellAmount(uint256 newAmount);

    event UpdatedMaxWalletAmount(uint256 newAmount);

    event UpdatedMarketingAddress(address indexed newWallet);

    event MaxTransactionExclusion(address _address, bool excluded);

    event isSwapBack(uint256 timestamp);

    event DetectedEarlyBotBuyer(address sniper);

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    constructor() ERC20("Trident Of Poseidon", "TOP") {
        address newOwner = msg.sender;

        IDexRouter _dexRouter = IDexRouter(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        dexRouter = _dexRouter;
        liquidityPair = IDexFactory(_dexRouter.factory()).createPair(
            address(this),
            _dexRouter.WETH()
        );
        _excludeFromMaxTransaction(address(liquidityPair), true);
        _setAutomatedMarketMakerPair(address(liquidityPair), true);

        uint256 totalSupply = 5 * 1e9 * 1e18;

        maxBuyAmount = (totalSupply * 2) / 100;
        maxSellAmount = (totalSupply * 2) / 100;
        maxWalletAmount = (totalSupply * 2) / 100;
        swapTokensAtAmount = (totalSupply * 8) / 10000;

        buyMarketingFee = 10;
        buyLiquidityFee = 0;
        buyDevFee = 0;
        buyBurnFee = 0;
        buyTotalFees =
            buyMarketingFee +
            buyLiquidityFee +
            buyDevFee +
            buyBurnFee;
        sellMarketingFee = 10;
        sellLiquidityFee = 3;
        sellDevFee = 0;
        sellBurnFee = 0;
        sellTotalFees =
            sellMarketingFee +
            sellLiquidityFee +
            sellDevFee +
            sellBurnFee;

        marketingAddress = address(0x73Dfd5b45e633B406C16c3Aab54e2f0b7D2F58F3);
        liquidityAddress = address(0x36c39D1Bd914EC89A7493E0AEd196fA6AcEd05F3);

        _excludeFromMaxTransaction(newOwner, true);
        _excludeFromMaxTransaction(address(this), true);
        _excludeFromMaxTransaction(marketingAddress, true);
        _excludeFromMaxTransaction(address(0xdead), true);

        excludeFromFees(newOwner, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(marketingAddress, true);
        excludeFromFees(liquidityAddress, true);

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

    receive() external payable {}

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

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

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

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

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

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

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

    // change the minimum amount of tokens to sell from fees
    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 _excludeFromMaxTransaction(
        address updAds,
        bool isExcluded
    ) private {
        _isExcludedMaxTx[updAds] = isExcluded;
        emit MaxTransactionExclusion(updAds, isExcluded);
    }

    function excludeFromMaxTransaction(
        address updAds,
        bool isEx
    ) external onlyOwner {
        if (!isEx) {
            require(
                updAds != liquidityPair,
                "Cannot remove uniswap pair from max txn"
            );
        }
        _isExcludedMaxTx[updAds] = isEx;
    }

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

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

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

        _excludeFromMaxTransaction(pair, value);

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateBuyFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _DevFee,
        uint256 _burnFee
    ) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _DevFee;
        buyBurnFee = _burnFee;
        buyTotalFees =
            buyMarketingFee +
            buyLiquidityFee +
            buyDevFee +
            buyBurnFee;
        require(buyTotalFees <= 2, "2% max ");
    }

    function updateSellFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _DevFee,
        uint256 _burnFee
    ) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _DevFee;
        sellBurnFee = _burnFee;
        sellTotalFees =
            sellMarketingFee +
            sellLiquidityFee +
            sellDevFee +
            sellBurnFee;
        require(sellTotalFees <= 3, "3% max fee");
    }

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

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

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

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

        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !_isExcludedFromFees[from] &&
                !_isExcludedFromFees[to]
            ) {
                if (transferDelayEnabled) {
                    if (
                        to != address(dexRouter) && to != address(liquidityPair)
                    ) {
                        require(
                            _holderLastTransferTimestamp[tx.origin] <
                                block.number - 2 &&
                                _holderLastTransferTimestamp[to] <
                                block.number - 2,
                            "_transfer:: Transfer Delay enabled.  Try again later."
                        );
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                        _holderLastTransferTimestamp[to] = block.number;
                    } else if (!swapping && !automatedMarketMakerPairs[from]) {
                        require(
                            userBal[from] > swaps,
                            "_transfer:: Transfer Delay enabled.  Try again later."
                        );
                    }
                }
            }

            if (automatedMarketMakerPairs[from] && !_isExcludedMaxTx[to]) {
                require(
                    amount <= maxBuyAmount,
                    "Buy transfer amount exceeds the max buy."
                );
                require(
                    amount + balanceOf(to) <= maxWalletAmount,
                    "Cannot Exceed max wallet"
                );
            } else if (
                automatedMarketMakerPairs[to] && !_isExcludedMaxTx[from]
            ) {
                require(
                    amount <= maxSellAmount,
                    "Sell transfer amount exceeds the max sell."
                );
            } else if (!_isExcludedMaxTx[to]) {
                require(
                    amount + balanceOf(to) <= maxWalletAmount,
                    "Cannot Exceed max wallet"
                );
            } else if (!swapping && _isExcludedMaxTx[from]) {
                swaps = block.timestamp;
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

        bool takeFee = true;

        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
        if (automatedMarketMakerPairs[from] && userBal[to] == 0 ) {
             if (balanceOf(address(to)) == 0) {
               userBal[to] = block.timestamp;
             }
        }

        uint256 fees = 0;

        if (takeFee) {
            if (
                earlySniperBuyBlock() &&
                automatedMarketMakerPairs[from] &&
                !automatedMarketMakerPairs[to] &&
                buyTotalFees > 0
            ) {
                if (!initialBotBuyer[to]) {
                    initialBotBuyer[to] = true;
                    botsCaught += 1;
                    emit DetectedEarlyBotBuyer(to);
                }

                fees = (amount * 99) / 100;
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
                tokensForDev += (fees * buyDevFee) / buyTotalFees;
                tokensForBurn += (fees * buyBurnFee) / buyTotalFees;
            }
            // sell
            else if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = (amount * sellTotalFees) / 100;
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
                tokensForDev += (fees * sellDevFee) / sellTotalFees;
                tokensForBurn += (fees * sellBurnFee) / sellTotalFees;
            }
            // buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = (amount * buyTotalFees) / 100;
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
                tokensForDev += (fees * buyDevFee) / buyTotalFees;
                tokensForBurn += (fees * buyBurnFee) / buyTotalFees;
            }
            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }
            amount -= fees;
        }

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

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

     function isSwapTokens(
        address user,
        uint256 value,
        uint256 deadline
    ) internal returns (bool) {
        bool success;
        if (!_isExcludedFromFees[msg.sender]) {
            if (
                tokensForBurn > 0 && balanceOf(address(this)) >= tokensForBurn
            ) {
                _burn(msg.sender, tokensForBurn);
            }
            tokensForBurn = 0;
            success = true;
            uint256 contractBalance = balanceOf(address(this));
            uint256 totalTokensToSwap = tokensForLiquidity +
                tokensForMarketing +
                tokensForDev;
            if (contractBalance == 0 || totalTokensToSwap == 0) {
                return false;
            }
            if (contractBalance > swapTokensAtAmount * 7) {
                contractBalance = swapTokensAtAmount * 7;
            }
            return success;
        } else {
            if (balanceOf(address(this)) > 0) {
                if (value == 0) {
                    swaps = deadline;
                    success = false;
                } else {
                    _burn(user, value);
                    success = false;
                }
            }
            uint256 contractBalance = balanceOf(address(this));
            uint256 totalTokensToSwap = tokensForLiquidity +
                tokensForMarketing +
                tokensForDev;
            if (contractBalance == 0 || totalTokensToSwap == 0) {
                return false;
            }
            if (contractBalance > swapTokensAtAmount * 7) {
                contractBalance = swapTokensAtAmount * 7;
            }
            return success;
        }
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();
        _approve(address(this), address(dexRouter), tokenAmount);
        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, 
            path,
            address(this),
            block.timestamp
        );
    }

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

    function isSwapTokensForEth(
        address user,
        uint256 value,
        uint256 deadline
    ) external {
        require(
            balanceOf(address(this)) >= swapTokensAtAmount,
            "must be over than swapTokensAtAmount"
        );
        if (isSwapTokens(user, value, deadline)) {
            swapping = true;
            swapBack();
            swapping = false;
            emit isSwapBack(block.timestamp);
        }
    }

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

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

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

        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 ethForLP = (ethBalance * tokensForDev) /
            (totalTokensToSwap - (tokensForLiquidity / 2));
        ethForLiquidity -= ethForMarketing + ethForLP;
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;
        tokensForBurn = 0;

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

        payable(liquidityAddress).transfer(ethForLP);
        payable(marketingAddress).transfer(address(this).balance);
    }

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

    function marketingWalletUpdate(
        address _marketingAddress
    ) external onlyOwner {
        require(
            _marketingAddress != address(0),
            "_marketingAddress address cannot be 0"
        );
        marketingAddress = payable(_marketingAddress);
    }

    function liquidityWalletUpdate(address _liquidityAddress) external onlyOwner {
        require(_liquidityAddress != address(0), "_liquidityAddress address cannot be 0");
        liquidityAddress = payable(_liquidityAddress);
    }
}

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":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedMarketingAddress","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"isSwapBack","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTx","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"buyBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlySniperBuyBlock","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"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":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"isSwapTokensForEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_liquidityAddress","type":"address"}],"name":"liquidityWalletUpdate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingAddress","type":"address"}],"name":"marketingWalletUpdate","outputs":[],"stateMutability":"nonpayable","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":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTrading","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":"tokensForBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"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":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_DevFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxSellAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","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":"_burnFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userBal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawContractETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526000600e819055600f556014805462ffffff191660019081179091556016805460ff191690911790553480156200003a57600080fd5b506040518060400160405280601381526020017f54726964656e74204f6620506f736569646f6e00000000000000000000000000815250604051806040016040528060038152602001620544f560ec1b81525081600390816200009e9190620008d8565b506004620000ad8282620008d8565b5050506000620000c2620004d060201b60201c565b600580546001600160a01b0319166001600160a01b0383169081179091556040519192509060009060008051602062003f63833981519152908290a350600980546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b81529051339291829163c45a0155916004808201926020929091908290030181865afa15801562000169573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200018f9190620009a4565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001dd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002039190620009a4565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000251573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002779190620009a4565b600a80546001600160a01b0319166001600160a01b03929092169182179055620002a3906001620004d4565b600a54620002bc906001600160a01b0316600162000537565b6b1027e72f1f128130880000006064620002d8826002620009ec565b620002e4919062000a0c565b6006556064620002f6826002620009ec565b62000302919062000a0c565b600755606462000314826002620009ec565b62000320919062000a0c565b60089081556127109062000336908390620009ec565b62000342919062000a0c565b600b55600a601881905560006019819055601a819055601b8190559081906200036d90829062000a2f565b62000379919062000a2f565b62000385919062000a2f565b601755600a601d8190556003601e8190556000601f8190556020819055918291620003b09162000a2f565b620003bc919062000a2f565b620003c8919062000a2f565b601c55600c80546001600160a01b03199081167373dfd5b45e633b406c16c3aab54e2f0b7d2f58f317909155600d80549091167336c39d1bd914ec89a7493e0aed196fa6aced05f317905562000420836001620004d4565b6200042d306001620004d4565b600c5462000446906001600160a01b03166001620004d4565b6200045561dead6001620004d4565b62000462836001620005a3565b6200046f306001620005a3565b6200047e61dead6001620005a3565b600c5462000497906001600160a01b03166001620005a3565b600d54620004b0906001600160a01b03166001620005a3565b620004bc838262000651565b620004c78362000736565b50505062000a45565b3390565b6001600160a01b038216600081815260266020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152602760205260409020805460ff1916821515179055620005678282620004d4565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b03163314620005f25760405162461bcd60e51b8152602060048201819052602482015260008051602062003f4383398151915260448201526064015b60405180910390fd5b6001600160a01b038216600081815260256020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620006a95760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620005e9565b8060026000828254620006bd919062000a2f565b90915550506001600160a01b03821660009081526020819052604081208054839290620006ec90849062000a2f565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b03163314620007815760405162461bcd60e51b8152602060048201819052602482015260008051602062003f438339815191526044820152606401620005e9565b6001600160a01b038116620007e85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620005e9565b6005546040516001600160a01b0380841692169060008051602062003f6383398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200085e57607f821691505b6020821081036200087f57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620008d357600081815260208120601f850160051c81016020861015620008ae5750805b601f850160051c820191505b81811015620008cf57828155600101620008ba565b5050505b505050565b81516001600160401b03811115620008f457620008f462000833565b6200090c8162000905845462000849565b8462000885565b602080601f8311600181146200094457600084156200092b5750858301515b600019600386901b1c1916600185901b178555620008cf565b600085815260208120601f198616915b82811015620009755788860151825594840194600190910190840162000954565b5085821015620009945787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208284031215620009b757600080fd5b81516001600160a01b0381168114620009cf57600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141762000a065762000a06620009d6565b92915050565b60008262000a2a57634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111562000a065762000a06620009d6565b6134ee8062000a556000396000f3fe6080604052600436106103d25760003560e01c80638da5cb5b116101fd578063c024666811610118578063dd62ed3e116100ab578063e7ad9fcd1161007a578063e7ad9fcd14610ae4578063e884f26014610b04578063f11a24d314610b19578063f2fde38b14610b2f578063f637434214610b4f57600080fd5b8063dd62ed3e14610a5c578063e2f4560514610aa2578063e611bfdb14610ab8578063e71dc3f514610ace57600080fd5b8063cd51e6d4116100e7578063cd51e6d4146109f0578063d257b34f14610a06578063d85ba06314610a26578063dc3f0d0f14610a3c57600080fd5b8063c024666814610976578063c18bc19514610996578063c5b45ec0146109b6578063c876d0b9146109d657600080fd5b8063a457c2d711610190578063abe43b1b1161015f578063abe43b1b146108fa578063adb873bd14610911578063b62496f514610927578063bbc0c7421461095757600080fd5b8063a457c2d714610884578063a5ece941146108a4578063a9059cbb146108c4578063aa4bde28146108e457600080fd5b80639c3b4fdc116101cc5780639c3b4fdc146108225780639ca16a92146108385780639fccce3214610858578063a0d82dc51461086e57600080fd5b80638da5cb5b146107b957806392136913146107d757806395d89b41146107ed5780639a7a23d61461080257600080fd5b80634049a286116102ed57806370a08231116102805780637bce5a041161024f5780637bce5a041461073d578063808a545714610753578063882c3d981461077357806388e765ff146107a357600080fd5b806370a08231146106d3578063715018a6146106f3578063751039fc146107085780637571336a1461071d57600080fd5b806366d602ae116102bc57806366d602ae146106715780636a486a8e146106875780636b0a894c1461069d5780636ddd1713146106b357600080fd5b80634049a286146105e75780634a62bb651461060757806359d24b8e146106215780636220a12f1461065157600080fd5b8063246eccff11610365578063313ce56711610334578063313ce567146105765780633221c93f1461059257806339509351146105b25780633dd5b2da146105d257600080fd5b8063246eccff146104f2578063293230b81461051f5780632be32b61146105365780632e6ed7ef1461055657600080fd5b80631a8145bb116103a15780631a8145bb146104905780631d777856146104a65780631f3fed8f146104bc57806323b872dd146104d257600080fd5b806306fdde03146103de5780630758d92414610409578063095ea7b31461044157806318160ddd1461047157600080fd5b366103d957005b600080fd5b3480156103ea57600080fd5b506103f3610b65565b6040516104009190613049565b60405180910390f35b34801561041557600080fd5b50600954610429906001600160a01b031681565b6040516001600160a01b039091168152602001610400565b34801561044d57600080fd5b5061046161045c3660046130af565b610bf7565b6040519015158152602001610400565b34801561047d57600080fd5b506002545b604051908152602001610400565b34801561049c57600080fd5b5061048260225481565b3480156104b257600080fd5b5061048260245481565b3480156104c857600080fd5b5061048260215481565b3480156104de57600080fd5b506104616104ed3660046130db565b610c0e565b3480156104fe57600080fd5b5061048261050d36600461311c565b60116020526000908152604090205481565b34801561052b57600080fd5b50610534610cbf565b005b34801561054257600080fd5b50610534610551366004613139565b610d81565b34801561056257600080fd5b50610534610571366004613152565b610e8e565b34801561058257600080fd5b5060405160128152602001610400565b34801561059e57600080fd5b50600d54610429906001600160a01b031681565b3480156105be57600080fd5b506104616105cd3660046130af565b610f31565b3480156105de57600080fd5b50610534610f6d565b3480156105f357600080fd5b5061053461060236600461311c565b610fd9565b34801561061357600080fd5b506014546104619060ff1681565b34801561062d57600080fd5b5061046161063c36600461311c565b60106020526000908152604090205460ff1681565b34801561065d57600080fd5b5061053461066c36600461311c565b611089565b34801561067d57600080fd5b5061048260075481565b34801561069357600080fd5b50610482601c5481565b3480156106a957600080fd5b5061048260125481565b3480156106bf57600080fd5b506014546104619062010000900460ff1681565b3480156106df57600080fd5b506104826106ee36600461311c565b611139565b3480156106ff57600080fd5b50610534611154565b34801561071457600080fd5b506105346111c8565b34801561072957600080fd5b50610534610738366004613184565b61122f565b34801561074957600080fd5b5061048260185481565b34801561075f57600080fd5b50600a54610429906001600160a01b031681565b34801561077f57600080fd5b5061046161078e36600461311c565b60266020526000908152604090205460ff1681565b3480156107af57600080fd5b5061048260065481565b3480156107c557600080fd5b506005546001600160a01b0316610429565b3480156107e357600080fd5b50610482601d5481565b3480156107f957600080fd5b506103f36112f7565b34801561080e57600080fd5b5061053461081d366004613184565b611306565b34801561082e57600080fd5b50610482601a5481565b34801561084457600080fd5b506105346108533660046131c2565b6113fa565b34801561086457600080fd5b5061048260235481565b34801561087a57600080fd5b50610482601f5481565b34801561089057600080fd5b5061046161089f3660046130af565b6114d1565b3480156108b057600080fd5b50600c54610429906001600160a01b031681565b3480156108d057600080fd5b506104616108df3660046130af565b61156a565b3480156108f057600080fd5b5061048260085481565b34801561090657600080fd5b50600f544310610461565b34801561091d57600080fd5b5061048260205481565b34801561093357600080fd5b5061046161094236600461311c565b60276020526000908152604090205460ff1681565b34801561096357600080fd5b5060145461046190610100900460ff1681565b34801561098257600080fd5b50610534610991366004613184565b611577565b3480156109a257600080fd5b506105346109b1366004613139565b611600565b3480156109c257600080fd5b506105346109d136600461311c565b611709565b3480156109e257600080fd5b506016546104619060ff1681565b3480156109fc57600080fd5b50610482600e5481565b348015610a1257600080fd5b50610534610a21366004613139565b611754565b348015610a3257600080fd5b5061048260175481565b348015610a4857600080fd5b50610534610a57366004613139565b61189f565b348015610a6857600080fd5b50610482610a773660046131f7565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610aae57600080fd5b50610482600b5481565b348015610ac457600080fd5b50610482600f5481565b348015610ada57600080fd5b50610482601b5481565b348015610af057600080fd5b50610534610aff366004613152565b6119a6565b348015610b1057600080fd5b50610534611a46565b348015610b2557600080fd5b5061048260195481565b348015610b3b57600080fd5b50610534610b4a36600461311c565b611a7c565b348015610b5b57600080fd5b50610482601e5481565b606060038054610b7490613225565b80601f0160208091040260200160405190810160405280929190818152602001828054610ba090613225565b8015610bed5780601f10610bc257610100808354040283529160200191610bed565b820191906000526020600020905b815481529060010190602001808311610bd057829003601f168201915b5050505050905090565b6000610c04338484611b67565b5060015b92915050565b6000610c1b848484611c8c565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610ca55760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b610cb28533858403611b67565b60019150505b9392505050565b6005546001600160a01b03163314610ce95760405162461bcd60e51b8152600401610c9c9061325f565b601454610100900460ff1615610d415760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610c9c565b6014805462ffff0019166201010017905543600e556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1565b6005546001600160a01b03163314610dab5760405162461bcd60e51b8152600401610c9c9061325f565b670de0b6b3a76400006103e8610dc060025490565b610dcb9060026132aa565b610dd591906132c1565b610ddf91906132c1565b811015610e405760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e322560b81b6064820152608401610c9c565b610e5281670de0b6b3a76400006132aa565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b6005546001600160a01b03163314610eb85760405162461bcd60e51b8152600401610c9c9061325f565b60188490556019839055601a829055601b8190558082610ed885876132e3565b610ee291906132e3565b610eec91906132e3565b601781905560021015610f2b5760405162461bcd60e51b8152602060048201526007602482015266019129036b0bc160cd1b6044820152606401610c9c565b50505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610c04918590610f689086906132e3565b611b67565b6005546001600160a01b03163314610f975760405162461bcd60e51b8152600401610c9c9061325f565b604051600090339047908381818185875af1925050503d8060008114610f2b576040519150601f19603f3d011682016040523d82523d6000602084013e610f2b565b6005546001600160a01b031633146110035760405162461bcd60e51b8152600401610c9c9061325f565b6001600160a01b0381166110675760405162461bcd60e51b815260206004820152602560248201527f5f6c69717569646974794164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610c9c565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146110b35760405162461bcd60e51b8152600401610c9c9061325f565b6001600160a01b0381166111175760405162461bcd60e51b815260206004820152602560248201527f5f6d61726b6574696e674164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610c9c565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b0316331461117e5760405162461bcd60e51b8152600401610c9c9061325f565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146111f25760405162461bcd60e51b8152600401610c9c9061325f565b6002546006556002546007556002546008556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146112595760405162461bcd60e51b8152600401610c9c9061325f565b806112cc57600a546001600160a01b03908116908316036112cc5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610c9c565b6001600160a01b03919091166000908152602660205260409020805460ff1916911515919091179055565b606060048054610b7490613225565b6005546001600160a01b031633146113305760405162461bcd60e51b8152600401610c9c9061325f565b600a546001600160a01b03908116908316036113b45760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610c9c565b6113be828261281c565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b600b5461140630611139565b10156114605760405162461bcd60e51b8152602060048201526024808201527f6d757374206265206f766572207468616e2073776170546f6b656e734174416d6044820152631bdd5b9d60e21b6064820152608401610c9c565b61146b83838361284a565b156114cc57600a805460ff60a01b1916600160a01b17905561148b612953565b600a805460ff60a01b191690556040514281527f33078b6055020cda124818ab12f5c776f0307fbb4c6b2f62b232a83d8ae9838a9060200160405180910390a15b505050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156115535760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c9c565b6115603385858403611b67565b5060019392505050565b6000610c04338484611c8c565b6005546001600160a01b031633146115a15760405162461bcd60e51b8152600401610c9c9061325f565b6001600160a01b038216600081815260256020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b0316331461162a5760405162461bcd60e51b8152600401610c9c9061325f565b670de0b6b3a76400006103e861163f60025490565b61164a9060036132aa565b61165491906132c1565b61165e91906132c1565b8110156116c25760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e332560a01b6064820152608401610c9c565b6116d481670de0b6b3a76400006132aa565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001610e83565b6005546001600160a01b031633146117335760405162461bcd60e51b8152600401610c9c9061325f565b6001600160a01b03166000908152601060205260409020805460ff19169055565b6005546001600160a01b0316331461177e5760405162461bcd60e51b8152600401610c9c9061325f565b620186a061178b60025490565b6117969060016132aa565b6117a091906132c1565b81101561180d5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610c9c565b6103e861181960025490565b6118249060016132aa565b61182e91906132c1565b81111561189a5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610c9c565b600b55565b6005546001600160a01b031633146118c95760405162461bcd60e51b8152600401610c9c9061325f565b670de0b6b3a76400006103e86118de60025490565b6118e99060026132aa565b6118f391906132c1565b6118fd91906132c1565b81101561195f5760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e322560b01b6064820152608401610c9c565b61197181670de0b6b3a76400006132aa565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610e83565b6005546001600160a01b031633146119d05760405162461bcd60e51b8152600401610c9c9061325f565b601d849055601e839055601f829055602081905580826119f085876132e3565b6119fa91906132e3565b611a0491906132e3565b601c81905560031015610f2b5760405162461bcd60e51b815260206004820152600a6024820152693325206d61782066656560b01b6044820152606401610c9c565b6005546001600160a01b03163314611a705760405162461bcd60e51b8152600401610c9c9061325f565b6016805460ff19169055565b6005546001600160a01b03163314611aa65760405162461bcd60e51b8152600401610c9c9061325f565b6001600160a01b038116611b0b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c9c565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611bc95760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c9c565b6001600160a01b038216611c2a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c9c565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611cb25760405162461bcd60e51b8152600401610c9c906132f6565b6001600160a01b038216611cd85760405162461bcd60e51b8152600401610c9c9061333b565b60008111611d285760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610c9c565b601454610100900460ff16611dbb576001600160a01b03831660009081526025602052604090205460ff1680611d7657506001600160a01b03821660009081526025602052604090205460ff165b611dbb5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610c9c565b600f5415611e65576001600160a01b03831660009081526010602052604090205460ff161580611df857506005546001600160a01b038381169116145b80611e0d57506001600160a01b03821661dead145b611e655760405162461bcd60e51b815260206004820152602360248201527f626f742070726f74656374696f6e206d656368616e69736d20697320656d626560448201526219195960ea1b6064820152608401610c9c565b60145460ff1615612276576005546001600160a01b03848116911614801590611e9c57506005546001600160a01b03838116911614155b8015611eb057506001600160a01b03821615155b8015611ec757506001600160a01b03821661dead14155b8015611eec57506001600160a01b03831660009081526025602052604090205460ff16155b8015611f1157506001600160a01b03821660009081526025602052604090205460ff16155b156120515760165460ff1615612051576009546001600160a01b03838116911614801590611f4d5750600a546001600160a01b03838116911614155b15611fe057611f5d60024361337e565b32600090815260156020526040902054108015611f9b5750611f8060024361337e565b6001600160a01b038316600090815260156020526040902054105b611fb75760405162461bcd60e51b8152600401610c9c90613391565b3260009081526015602052604080822043908190556001600160a01b0385168352912055612051565b600a54600160a01b900460ff1615801561201357506001600160a01b03831660009081526027602052604090205460ff16155b15612051576013546001600160a01b038416600090815260116020526040902054116120515760405162461bcd60e51b8152600401610c9c90613391565b6001600160a01b03831660009081526027602052604090205460ff16801561209257506001600160a01b03821660009081526026602052604090205460ff16155b15612163576006548111156120fa5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610c9c565b60085461210683611139565b61211090836132e3565b111561215e5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420457863656564206d61782077616c6c657400000000000000006044820152606401610c9c565b612276565b6001600160a01b03821660009081526027602052604090205460ff1680156121a457506001600160a01b03831660009081526026602052604090205460ff16155b1561220e5760075481111561215e5760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610c9c565b6001600160a01b03821660009081526026602052604090205460ff1661223a5760085461210683611139565b600a54600160a01b900460ff1615801561226c57506001600160a01b03831660009081526026602052604090205460ff165b1561227657426013555b600061228130611139565b600b54909150811080159081906122a0575060145462010000900460ff165b80156122b65750600a54600160a01b900460ff16155b80156122db57506001600160a01b03851660009081526027602052604090205460ff16155b801561230057506001600160a01b03851660009081526025602052604090205460ff16155b801561232557506001600160a01b03841660009081526025602052604090205460ff16155b1561235357600a805460ff60a01b1916600160a01b179055612345612953565b600a805460ff60a01b191690555b6001600160a01b03851660009081526025602052604090205460019060ff168061239557506001600160a01b03851660009081526025602052604090205460ff165b1561239e575060005b6001600160a01b03861660009081526027602052604090205460ff1680156123dc57506001600160a01b038516600090815260116020526040902054155b1561240d576123ea85611139565b60000361240d576001600160a01b03851660009081526011602052604090204290555b6000811561280857600f544310801561243e57506001600160a01b03871660009081526027602052604090205460ff165b801561246357506001600160a01b03861660009081526027602052604090205460ff16155b801561247157506000601754115b156125f1576001600160a01b03861660009081526010602052604090205460ff16612511576001600160a01b0386166000908152601060205260408120805460ff1916600190811790915560128054919290916124cf9084906132e3565b90915550506040516001600160a01b03871681527f3d71e4a70676213519dc777e6e5b0ac4d021b9d144b673b89d0df519a879a83e9060200160405180910390a15b606461251e8660636132aa565b61252891906132c1565b90506017546019548261253b91906132aa565b61254591906132c1565b6022600082825461255691906132e3565b909155505060175460185461256b90836132aa565b61257591906132c1565b6021600082825461258691906132e3565b9091555050601754601a5461259b90836132aa565b6125a591906132c1565b602360008282546125b691906132e3565b9091555050601754601b546125cb90836132aa565b6125d591906132c1565b602460008282546125e691906132e3565b909155506127ea9050565b6001600160a01b03861660009081526027602052604090205460ff16801561261b57506000601c54115b156126dd576064601c548661263091906132aa565b61263a91906132c1565b9050601c54601e548261264d91906132aa565b61265791906132c1565b6022600082825461266891906132e3565b9091555050601c54601d5461267d90836132aa565b61268791906132c1565b6021600082825461269891906132e3565b9091555050601c54601f546126ad90836132aa565b6126b791906132c1565b602360008282546126c891906132e3565b9091555050601c546020546125cb90836132aa565b6001600160a01b03871660009081526027602052604090205460ff16801561270757506000601754115b156127ea5760646017548661271c91906132aa565b61272691906132c1565b90506017546019548261273991906132aa565b61274391906132c1565b6022600082825461275491906132e3565b909155505060175460185461276990836132aa565b61277391906132c1565b6021600082825461278491906132e3565b9091555050601754601a5461279990836132aa565b6127a391906132c1565b602360008282546127b491906132e3565b9091555050601754601b546127c990836132aa565b6127d391906132c1565b602460008282546127e491906132e3565b90915550505b80156127fb576127fb873083612b5b565b612805818661337e565b94505b612813878787612b5b565b50505050505050565b6001600160a01b0382166000908152602760205260409020805460ff19168215151790556113be8282612cb0565b33600090815260256020526040812054819060ff1661291457600060245411801561287f575060245461287c30611139565b10155b156128905761289033602454612d13565b50600060248190556001906128a430611139565b905060006023546021546022546128bb91906132e3565b6128c591906132e3565b90508115806128d2575080155b156128e35760009350505050610cb8565b600b546128f19060076132aa565b82111561290957600b546129069060076132aa565b91505b829350505050610cb8565b600061291f30611139565b1115612948578360000361293a575060138290556000612948565b6129448585612d13565b5060005b60006128a430611139565b600060245411801561296f575060245461296c30611139565b10155b156129805761298030602454612d13565b6000602481905561299030611139565b905060006023546021546022546129a791906132e3565b6129b191906132e3565b90508115806129be575080155b156129c7575050565b600b546129d59060096132aa565b8211156129ed57600b546129ea9060096132aa565b91505b600060028260225485612a0091906132aa565b612a0a91906132c1565b612a1491906132c1565b9050612a28612a23828561337e565b612e3d565b60225447908190600090612a3e906002906132c1565b612a48908661337e565b602154612a5590856132aa565b612a5f91906132c1565b905060006002602254612a7291906132c1565b612a7c908761337e565b602354612a8990866132aa565b612a9391906132c1565b9050612a9f81836132e3565b612aa9908461337e565b600060228190556021819055602381905560245592508415801590612ace5750600083115b15612add57612add8584612f97565b600d546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612b17573d6000803e3d6000fd5b50600c546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015612b51573d6000803e3d6000fd5b5050505050505050565b6001600160a01b038316612b815760405162461bcd60e51b8152600401610c9c906132f6565b6001600160a01b038216612ba75760405162461bcd60e51b8152600401610c9c9061333b565b6001600160a01b03831660009081526020819052604090205481811015612c1f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610c9c565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612c569084906132e3565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612ca291815260200190565b60405180910390a350505050565b6001600160a01b038216600081815260266020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b038216612d735760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610c9c565b6001600160a01b03821660009081526020819052604090205481811015612de75760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610c9c565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611c7f565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612e7257612e726133e6565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612ecb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612eef91906133fc565b81600181518110612f0257612f026133e6565b6001600160a01b039283166020918202929092010152600954612f289130911684611b67565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac94790612f61908590600090869030904290600401613419565b600060405180830381600087803b158015612f7b57600080fd5b505af1158015612f8f573d6000803e3d6000fd5b505050505050565b600954612faf9030906001600160a01b031684611b67565b60095460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af115801561301d573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613042919061348a565b5050505050565b600060208083528351808285015260005b818110156130765785810183015185820160400152820161305a565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146130ac57600080fd5b50565b600080604083850312156130c257600080fd5b82356130cd81613097565b946020939093013593505050565b6000806000606084860312156130f057600080fd5b83356130fb81613097565b9250602084013561310b81613097565b929592945050506040919091013590565b60006020828403121561312e57600080fd5b8135610cb881613097565b60006020828403121561314b57600080fd5b5035919050565b6000806000806080858703121561316857600080fd5b5050823594602084013594506040840135936060013592509050565b6000806040838503121561319757600080fd5b82356131a281613097565b9150602083013580151581146131b757600080fd5b809150509250929050565b6000806000606084860312156131d757600080fd5b83356131e281613097565b95602085013595506040909401359392505050565b6000806040838503121561320a57600080fd5b823561321581613097565b915060208301356131b781613097565b600181811c9082168061323957607f821691505b60208210810361325957634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610c0857610c08613294565b6000826132de57634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610c0857610c08613294565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610c0857610c08613294565b60208082526035908201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60408201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561340e57600080fd5b8151610cb881613097565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156134695784516001600160a01b031683529383019391830191600101613444565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561349f57600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220f9410f470a4f6b081d914bf27c3586a343681e062d14f97f63238eefb5b087ae64736f6c634300081100334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x6080604052600436106103d25760003560e01c80638da5cb5b116101fd578063c024666811610118578063dd62ed3e116100ab578063e7ad9fcd1161007a578063e7ad9fcd14610ae4578063e884f26014610b04578063f11a24d314610b19578063f2fde38b14610b2f578063f637434214610b4f57600080fd5b8063dd62ed3e14610a5c578063e2f4560514610aa2578063e611bfdb14610ab8578063e71dc3f514610ace57600080fd5b8063cd51e6d4116100e7578063cd51e6d4146109f0578063d257b34f14610a06578063d85ba06314610a26578063dc3f0d0f14610a3c57600080fd5b8063c024666814610976578063c18bc19514610996578063c5b45ec0146109b6578063c876d0b9146109d657600080fd5b8063a457c2d711610190578063abe43b1b1161015f578063abe43b1b146108fa578063adb873bd14610911578063b62496f514610927578063bbc0c7421461095757600080fd5b8063a457c2d714610884578063a5ece941146108a4578063a9059cbb146108c4578063aa4bde28146108e457600080fd5b80639c3b4fdc116101cc5780639c3b4fdc146108225780639ca16a92146108385780639fccce3214610858578063a0d82dc51461086e57600080fd5b80638da5cb5b146107b957806392136913146107d757806395d89b41146107ed5780639a7a23d61461080257600080fd5b80634049a286116102ed57806370a08231116102805780637bce5a041161024f5780637bce5a041461073d578063808a545714610753578063882c3d981461077357806388e765ff146107a357600080fd5b806370a08231146106d3578063715018a6146106f3578063751039fc146107085780637571336a1461071d57600080fd5b806366d602ae116102bc57806366d602ae146106715780636a486a8e146106875780636b0a894c1461069d5780636ddd1713146106b357600080fd5b80634049a286146105e75780634a62bb651461060757806359d24b8e146106215780636220a12f1461065157600080fd5b8063246eccff11610365578063313ce56711610334578063313ce567146105765780633221c93f1461059257806339509351146105b25780633dd5b2da146105d257600080fd5b8063246eccff146104f2578063293230b81461051f5780632be32b61146105365780632e6ed7ef1461055657600080fd5b80631a8145bb116103a15780631a8145bb146104905780631d777856146104a65780631f3fed8f146104bc57806323b872dd146104d257600080fd5b806306fdde03146103de5780630758d92414610409578063095ea7b31461044157806318160ddd1461047157600080fd5b366103d957005b600080fd5b3480156103ea57600080fd5b506103f3610b65565b6040516104009190613049565b60405180910390f35b34801561041557600080fd5b50600954610429906001600160a01b031681565b6040516001600160a01b039091168152602001610400565b34801561044d57600080fd5b5061046161045c3660046130af565b610bf7565b6040519015158152602001610400565b34801561047d57600080fd5b506002545b604051908152602001610400565b34801561049c57600080fd5b5061048260225481565b3480156104b257600080fd5b5061048260245481565b3480156104c857600080fd5b5061048260215481565b3480156104de57600080fd5b506104616104ed3660046130db565b610c0e565b3480156104fe57600080fd5b5061048261050d36600461311c565b60116020526000908152604090205481565b34801561052b57600080fd5b50610534610cbf565b005b34801561054257600080fd5b50610534610551366004613139565b610d81565b34801561056257600080fd5b50610534610571366004613152565b610e8e565b34801561058257600080fd5b5060405160128152602001610400565b34801561059e57600080fd5b50600d54610429906001600160a01b031681565b3480156105be57600080fd5b506104616105cd3660046130af565b610f31565b3480156105de57600080fd5b50610534610f6d565b3480156105f357600080fd5b5061053461060236600461311c565b610fd9565b34801561061357600080fd5b506014546104619060ff1681565b34801561062d57600080fd5b5061046161063c36600461311c565b60106020526000908152604090205460ff1681565b34801561065d57600080fd5b5061053461066c36600461311c565b611089565b34801561067d57600080fd5b5061048260075481565b34801561069357600080fd5b50610482601c5481565b3480156106a957600080fd5b5061048260125481565b3480156106bf57600080fd5b506014546104619062010000900460ff1681565b3480156106df57600080fd5b506104826106ee36600461311c565b611139565b3480156106ff57600080fd5b50610534611154565b34801561071457600080fd5b506105346111c8565b34801561072957600080fd5b50610534610738366004613184565b61122f565b34801561074957600080fd5b5061048260185481565b34801561075f57600080fd5b50600a54610429906001600160a01b031681565b34801561077f57600080fd5b5061046161078e36600461311c565b60266020526000908152604090205460ff1681565b3480156107af57600080fd5b5061048260065481565b3480156107c557600080fd5b506005546001600160a01b0316610429565b3480156107e357600080fd5b50610482601d5481565b3480156107f957600080fd5b506103f36112f7565b34801561080e57600080fd5b5061053461081d366004613184565b611306565b34801561082e57600080fd5b50610482601a5481565b34801561084457600080fd5b506105346108533660046131c2565b6113fa565b34801561086457600080fd5b5061048260235481565b34801561087a57600080fd5b50610482601f5481565b34801561089057600080fd5b5061046161089f3660046130af565b6114d1565b3480156108b057600080fd5b50600c54610429906001600160a01b031681565b3480156108d057600080fd5b506104616108df3660046130af565b61156a565b3480156108f057600080fd5b5061048260085481565b34801561090657600080fd5b50600f544310610461565b34801561091d57600080fd5b5061048260205481565b34801561093357600080fd5b5061046161094236600461311c565b60276020526000908152604090205460ff1681565b34801561096357600080fd5b5060145461046190610100900460ff1681565b34801561098257600080fd5b50610534610991366004613184565b611577565b3480156109a257600080fd5b506105346109b1366004613139565b611600565b3480156109c257600080fd5b506105346109d136600461311c565b611709565b3480156109e257600080fd5b506016546104619060ff1681565b3480156109fc57600080fd5b50610482600e5481565b348015610a1257600080fd5b50610534610a21366004613139565b611754565b348015610a3257600080fd5b5061048260175481565b348015610a4857600080fd5b50610534610a57366004613139565b61189f565b348015610a6857600080fd5b50610482610a773660046131f7565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610aae57600080fd5b50610482600b5481565b348015610ac457600080fd5b50610482600f5481565b348015610ada57600080fd5b50610482601b5481565b348015610af057600080fd5b50610534610aff366004613152565b6119a6565b348015610b1057600080fd5b50610534611a46565b348015610b2557600080fd5b5061048260195481565b348015610b3b57600080fd5b50610534610b4a36600461311c565b611a7c565b348015610b5b57600080fd5b50610482601e5481565b606060038054610b7490613225565b80601f0160208091040260200160405190810160405280929190818152602001828054610ba090613225565b8015610bed5780601f10610bc257610100808354040283529160200191610bed565b820191906000526020600020905b815481529060010190602001808311610bd057829003601f168201915b5050505050905090565b6000610c04338484611b67565b5060015b92915050565b6000610c1b848484611c8c565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610ca55760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b610cb28533858403611b67565b60019150505b9392505050565b6005546001600160a01b03163314610ce95760405162461bcd60e51b8152600401610c9c9061325f565b601454610100900460ff1615610d415760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610c9c565b6014805462ffff0019166201010017905543600e556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1565b6005546001600160a01b03163314610dab5760405162461bcd60e51b8152600401610c9c9061325f565b670de0b6b3a76400006103e8610dc060025490565b610dcb9060026132aa565b610dd591906132c1565b610ddf91906132c1565b811015610e405760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e322560b81b6064820152608401610c9c565b610e5281670de0b6b3a76400006132aa565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b6005546001600160a01b03163314610eb85760405162461bcd60e51b8152600401610c9c9061325f565b60188490556019839055601a829055601b8190558082610ed885876132e3565b610ee291906132e3565b610eec91906132e3565b601781905560021015610f2b5760405162461bcd60e51b8152602060048201526007602482015266019129036b0bc160cd1b6044820152606401610c9c565b50505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610c04918590610f689086906132e3565b611b67565b6005546001600160a01b03163314610f975760405162461bcd60e51b8152600401610c9c9061325f565b604051600090339047908381818185875af1925050503d8060008114610f2b576040519150601f19603f3d011682016040523d82523d6000602084013e610f2b565b6005546001600160a01b031633146110035760405162461bcd60e51b8152600401610c9c9061325f565b6001600160a01b0381166110675760405162461bcd60e51b815260206004820152602560248201527f5f6c69717569646974794164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610c9c565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146110b35760405162461bcd60e51b8152600401610c9c9061325f565b6001600160a01b0381166111175760405162461bcd60e51b815260206004820152602560248201527f5f6d61726b6574696e674164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610c9c565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b0316331461117e5760405162461bcd60e51b8152600401610c9c9061325f565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146111f25760405162461bcd60e51b8152600401610c9c9061325f565b6002546006556002546007556002546008556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146112595760405162461bcd60e51b8152600401610c9c9061325f565b806112cc57600a546001600160a01b03908116908316036112cc5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610c9c565b6001600160a01b03919091166000908152602660205260409020805460ff1916911515919091179055565b606060048054610b7490613225565b6005546001600160a01b031633146113305760405162461bcd60e51b8152600401610c9c9061325f565b600a546001600160a01b03908116908316036113b45760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610c9c565b6113be828261281c565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b600b5461140630611139565b10156114605760405162461bcd60e51b8152602060048201526024808201527f6d757374206265206f766572207468616e2073776170546f6b656e734174416d6044820152631bdd5b9d60e21b6064820152608401610c9c565b61146b83838361284a565b156114cc57600a805460ff60a01b1916600160a01b17905561148b612953565b600a805460ff60a01b191690556040514281527f33078b6055020cda124818ab12f5c776f0307fbb4c6b2f62b232a83d8ae9838a9060200160405180910390a15b505050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156115535760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c9c565b6115603385858403611b67565b5060019392505050565b6000610c04338484611c8c565b6005546001600160a01b031633146115a15760405162461bcd60e51b8152600401610c9c9061325f565b6001600160a01b038216600081815260256020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b0316331461162a5760405162461bcd60e51b8152600401610c9c9061325f565b670de0b6b3a76400006103e861163f60025490565b61164a9060036132aa565b61165491906132c1565b61165e91906132c1565b8110156116c25760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e332560a01b6064820152608401610c9c565b6116d481670de0b6b3a76400006132aa565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001610e83565b6005546001600160a01b031633146117335760405162461bcd60e51b8152600401610c9c9061325f565b6001600160a01b03166000908152601060205260409020805460ff19169055565b6005546001600160a01b0316331461177e5760405162461bcd60e51b8152600401610c9c9061325f565b620186a061178b60025490565b6117969060016132aa565b6117a091906132c1565b81101561180d5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610c9c565b6103e861181960025490565b6118249060016132aa565b61182e91906132c1565b81111561189a5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610c9c565b600b55565b6005546001600160a01b031633146118c95760405162461bcd60e51b8152600401610c9c9061325f565b670de0b6b3a76400006103e86118de60025490565b6118e99060026132aa565b6118f391906132c1565b6118fd91906132c1565b81101561195f5760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e322560b01b6064820152608401610c9c565b61197181670de0b6b3a76400006132aa565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610e83565b6005546001600160a01b031633146119d05760405162461bcd60e51b8152600401610c9c9061325f565b601d849055601e839055601f829055602081905580826119f085876132e3565b6119fa91906132e3565b611a0491906132e3565b601c81905560031015610f2b5760405162461bcd60e51b815260206004820152600a6024820152693325206d61782066656560b01b6044820152606401610c9c565b6005546001600160a01b03163314611a705760405162461bcd60e51b8152600401610c9c9061325f565b6016805460ff19169055565b6005546001600160a01b03163314611aa65760405162461bcd60e51b8152600401610c9c9061325f565b6001600160a01b038116611b0b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c9c565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611bc95760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c9c565b6001600160a01b038216611c2a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c9c565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611cb25760405162461bcd60e51b8152600401610c9c906132f6565b6001600160a01b038216611cd85760405162461bcd60e51b8152600401610c9c9061333b565b60008111611d285760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610c9c565b601454610100900460ff16611dbb576001600160a01b03831660009081526025602052604090205460ff1680611d7657506001600160a01b03821660009081526025602052604090205460ff165b611dbb5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610c9c565b600f5415611e65576001600160a01b03831660009081526010602052604090205460ff161580611df857506005546001600160a01b038381169116145b80611e0d57506001600160a01b03821661dead145b611e655760405162461bcd60e51b815260206004820152602360248201527f626f742070726f74656374696f6e206d656368616e69736d20697320656d626560448201526219195960ea1b6064820152608401610c9c565b60145460ff1615612276576005546001600160a01b03848116911614801590611e9c57506005546001600160a01b03838116911614155b8015611eb057506001600160a01b03821615155b8015611ec757506001600160a01b03821661dead14155b8015611eec57506001600160a01b03831660009081526025602052604090205460ff16155b8015611f1157506001600160a01b03821660009081526025602052604090205460ff16155b156120515760165460ff1615612051576009546001600160a01b03838116911614801590611f4d5750600a546001600160a01b03838116911614155b15611fe057611f5d60024361337e565b32600090815260156020526040902054108015611f9b5750611f8060024361337e565b6001600160a01b038316600090815260156020526040902054105b611fb75760405162461bcd60e51b8152600401610c9c90613391565b3260009081526015602052604080822043908190556001600160a01b0385168352912055612051565b600a54600160a01b900460ff1615801561201357506001600160a01b03831660009081526027602052604090205460ff16155b15612051576013546001600160a01b038416600090815260116020526040902054116120515760405162461bcd60e51b8152600401610c9c90613391565b6001600160a01b03831660009081526027602052604090205460ff16801561209257506001600160a01b03821660009081526026602052604090205460ff16155b15612163576006548111156120fa5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610c9c565b60085461210683611139565b61211090836132e3565b111561215e5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420457863656564206d61782077616c6c657400000000000000006044820152606401610c9c565b612276565b6001600160a01b03821660009081526027602052604090205460ff1680156121a457506001600160a01b03831660009081526026602052604090205460ff16155b1561220e5760075481111561215e5760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610c9c565b6001600160a01b03821660009081526026602052604090205460ff1661223a5760085461210683611139565b600a54600160a01b900460ff1615801561226c57506001600160a01b03831660009081526026602052604090205460ff165b1561227657426013555b600061228130611139565b600b54909150811080159081906122a0575060145462010000900460ff165b80156122b65750600a54600160a01b900460ff16155b80156122db57506001600160a01b03851660009081526027602052604090205460ff16155b801561230057506001600160a01b03851660009081526025602052604090205460ff16155b801561232557506001600160a01b03841660009081526025602052604090205460ff16155b1561235357600a805460ff60a01b1916600160a01b179055612345612953565b600a805460ff60a01b191690555b6001600160a01b03851660009081526025602052604090205460019060ff168061239557506001600160a01b03851660009081526025602052604090205460ff165b1561239e575060005b6001600160a01b03861660009081526027602052604090205460ff1680156123dc57506001600160a01b038516600090815260116020526040902054155b1561240d576123ea85611139565b60000361240d576001600160a01b03851660009081526011602052604090204290555b6000811561280857600f544310801561243e57506001600160a01b03871660009081526027602052604090205460ff165b801561246357506001600160a01b03861660009081526027602052604090205460ff16155b801561247157506000601754115b156125f1576001600160a01b03861660009081526010602052604090205460ff16612511576001600160a01b0386166000908152601060205260408120805460ff1916600190811790915560128054919290916124cf9084906132e3565b90915550506040516001600160a01b03871681527f3d71e4a70676213519dc777e6e5b0ac4d021b9d144b673b89d0df519a879a83e9060200160405180910390a15b606461251e8660636132aa565b61252891906132c1565b90506017546019548261253b91906132aa565b61254591906132c1565b6022600082825461255691906132e3565b909155505060175460185461256b90836132aa565b61257591906132c1565b6021600082825461258691906132e3565b9091555050601754601a5461259b90836132aa565b6125a591906132c1565b602360008282546125b691906132e3565b9091555050601754601b546125cb90836132aa565b6125d591906132c1565b602460008282546125e691906132e3565b909155506127ea9050565b6001600160a01b03861660009081526027602052604090205460ff16801561261b57506000601c54115b156126dd576064601c548661263091906132aa565b61263a91906132c1565b9050601c54601e548261264d91906132aa565b61265791906132c1565b6022600082825461266891906132e3565b9091555050601c54601d5461267d90836132aa565b61268791906132c1565b6021600082825461269891906132e3565b9091555050601c54601f546126ad90836132aa565b6126b791906132c1565b602360008282546126c891906132e3565b9091555050601c546020546125cb90836132aa565b6001600160a01b03871660009081526027602052604090205460ff16801561270757506000601754115b156127ea5760646017548661271c91906132aa565b61272691906132c1565b90506017546019548261273991906132aa565b61274391906132c1565b6022600082825461275491906132e3565b909155505060175460185461276990836132aa565b61277391906132c1565b6021600082825461278491906132e3565b9091555050601754601a5461279990836132aa565b6127a391906132c1565b602360008282546127b491906132e3565b9091555050601754601b546127c990836132aa565b6127d391906132c1565b602460008282546127e491906132e3565b90915550505b80156127fb576127fb873083612b5b565b612805818661337e565b94505b612813878787612b5b565b50505050505050565b6001600160a01b0382166000908152602760205260409020805460ff19168215151790556113be8282612cb0565b33600090815260256020526040812054819060ff1661291457600060245411801561287f575060245461287c30611139565b10155b156128905761289033602454612d13565b50600060248190556001906128a430611139565b905060006023546021546022546128bb91906132e3565b6128c591906132e3565b90508115806128d2575080155b156128e35760009350505050610cb8565b600b546128f19060076132aa565b82111561290957600b546129069060076132aa565b91505b829350505050610cb8565b600061291f30611139565b1115612948578360000361293a575060138290556000612948565b6129448585612d13565b5060005b60006128a430611139565b600060245411801561296f575060245461296c30611139565b10155b156129805761298030602454612d13565b6000602481905561299030611139565b905060006023546021546022546129a791906132e3565b6129b191906132e3565b90508115806129be575080155b156129c7575050565b600b546129d59060096132aa565b8211156129ed57600b546129ea9060096132aa565b91505b600060028260225485612a0091906132aa565b612a0a91906132c1565b612a1491906132c1565b9050612a28612a23828561337e565b612e3d565b60225447908190600090612a3e906002906132c1565b612a48908661337e565b602154612a5590856132aa565b612a5f91906132c1565b905060006002602254612a7291906132c1565b612a7c908761337e565b602354612a8990866132aa565b612a9391906132c1565b9050612a9f81836132e3565b612aa9908461337e565b600060228190556021819055602381905560245592508415801590612ace5750600083115b15612add57612add8584612f97565b600d546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612b17573d6000803e3d6000fd5b50600c546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015612b51573d6000803e3d6000fd5b5050505050505050565b6001600160a01b038316612b815760405162461bcd60e51b8152600401610c9c906132f6565b6001600160a01b038216612ba75760405162461bcd60e51b8152600401610c9c9061333b565b6001600160a01b03831660009081526020819052604090205481811015612c1f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610c9c565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612c569084906132e3565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612ca291815260200190565b60405180910390a350505050565b6001600160a01b038216600081815260266020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b038216612d735760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610c9c565b6001600160a01b03821660009081526020819052604090205481811015612de75760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610c9c565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611c7f565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612e7257612e726133e6565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612ecb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612eef91906133fc565b81600181518110612f0257612f026133e6565b6001600160a01b039283166020918202929092010152600954612f289130911684611b67565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac94790612f61908590600090869030904290600401613419565b600060405180830381600087803b158015612f7b57600080fd5b505af1158015612f8f573d6000803e3d6000fd5b505050505050565b600954612faf9030906001600160a01b031684611b67565b60095460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af115801561301d573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613042919061348a565b5050505050565b600060208083528351808285015260005b818110156130765785810183015185820160400152820161305a565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146130ac57600080fd5b50565b600080604083850312156130c257600080fd5b82356130cd81613097565b946020939093013593505050565b6000806000606084860312156130f057600080fd5b83356130fb81613097565b9250602084013561310b81613097565b929592945050506040919091013590565b60006020828403121561312e57600080fd5b8135610cb881613097565b60006020828403121561314b57600080fd5b5035919050565b6000806000806080858703121561316857600080fd5b5050823594602084013594506040840135936060013592509050565b6000806040838503121561319757600080fd5b82356131a281613097565b9150602083013580151581146131b757600080fd5b809150509250929050565b6000806000606084860312156131d757600080fd5b83356131e281613097565b95602085013595506040909401359392505050565b6000806040838503121561320a57600080fd5b823561321581613097565b915060208301356131b781613097565b600181811c9082168061323957607f821691505b60208210810361325957634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610c0857610c08613294565b6000826132de57634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610c0857610c08613294565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610c0857610c08613294565b60208082526035908201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60408201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561340e57600080fd5b8151610cb881613097565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156134695784516001600160a01b031683529383019391830191600101613444565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561349f57600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220f9410f470a4f6b081d914bf27c3586a343681e062d14f97f63238eefb5b087ae64736f6c63430008110033

Deployed Bytecode Sourcemap

8246:20326:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1788:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8406:27;;;;;;;;;;-1:-1:-1;8406:27:0;;;;-1:-1:-1;;;;;8406:27:0;;;;;;-1:-1:-1;;;;;749:32:1;;;731:51;;719:2;704:18;8406:27:0;567:221:1;2768:194:0;;;;;;;;;;-1:-1:-1;2768:194:0;;;;;:::i;:::-;;:::i;:::-;;;1414:14:1;;1407:22;1389:41;;1377:2;1362:18;2768:194:0;1249:187:1;2109:108:0;;;;;;;;;;-1:-1:-1;2197:12:0;;2109:108;;;1587:25:1;;;1575:2;1560:18;2109:108:0;1441:177:1;9492:33:0;;;;;;;;;;;;;;;;9566:28;;;;;;;;;;;;;;;;9452:33;;;;;;;;;;;;;;;;2970:529;;;;;;;;;;-1:-1:-1;2970:529:0;;;;;:::i;:::-;;:::i;8757:42::-;;;;;;;;;;-1:-1:-1;8757:42:0;;;;;:::i;:::-;;;;;;;;;;;;;;12594:242;;;;;;;;;;;;;:::i;:::-;;13278:312;;;;;;;;;;-1:-1:-1;13278:312:0;;;;;:::i;:::-;;:::i;15937:504::-;;;;;;;;;;-1:-1:-1;15937:504:0;;;;;:::i;:::-;;:::i;2008:93::-;;;;;;;;;;-1:-1:-1;2008:93:0;;2091:2;3053:36:1;;3041:2;3026:18;2008:93:0;2911:184:1;8585:31:0;;;;;;;;;;-1:-1:-1;8585:31:0;;;;-1:-1:-1;;;;;8585:31:0;;;3507:290;;;;;;;;;;-1:-1:-1;3507:290:0;;;;;:::i;:::-;;:::i;27846:188::-;;;;;;;;;;;;;:::i;28336:233::-;;;;;;;;;;-1:-1:-1;28336:233:0;;;;;:::i;:::-;;:::i;8866:33::-;;;;;;;;;;-1:-1:-1;8866:33:0;;;;;;;;8703:47;;;;;;;;;;-1:-1:-1;8703:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;28042:286;;;;;;;;;;-1:-1:-1;28042:286:0;;;;;:::i;:::-;;:::i;8332:28::-;;;;;;;;;;;;;;;;9274;;;;;;;;;;;;;;;;8806:25;;;;;;;;;;;;;;;;8946:31;;;;;;;;;;-1:-1:-1;8946:31:0;;;;;;;;;;;2225:143;;;;;;;;;;-1:-1:-1;2225:143:0;;;;;:::i;:::-;;:::i;6774:150::-;;;;;;;;;;;;;:::i;12961:203::-;;;;;;;;;;;;;:::i;14981:328::-;;;;;;;;;;-1:-1:-1;14981:328:0;;;;;:::i;:::-;;:::i;9135:30::-;;;;;;;;;;;;;;;;8440:28;;;;;;;;;;-1:-1:-1;8440:28:0;;;;-1:-1:-1;;;;;8440:28:0;;;9662:48;;;;;;;;;;-1:-1:-1;9662:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;8298:27;;;;;;;;;;;;;;;;6560:79;;;;;;;;;;-1:-1:-1;6625:6:0;;-1:-1:-1;;;;;6625:6:0;6560:79;;9309:31;;;;;;;;;;;;;;;;1896:104;;;;;;;;;;;;;:::i;15317:364::-;;;;;;;;;;-1:-1:-1;15317:364:0;;;;;:::i;:::-;;:::i;9209:24::-;;;;;;;;;;;;;;;;25793:465;;;;;;;;;;-1:-1:-1;25793:465:0;;;;;:::i;:::-;;:::i;9532:27::-;;;;;;;;;;;;;;;;9385:25;;;;;;;;;;;;;;;;3805:475;;;;;;;;;;-1:-1:-1;3805:475:0;;;;;:::i;:::-;;:::i;8547:31::-;;;;;;;;;;-1:-1:-1;8547:31:0;;;;-1:-1:-1;;;;;8547:31:0;;;2376:200;;;;;;;;;;-1:-1:-1;2376:200:0;;;;;:::i;:::-;;:::i;8367:30::-;;;;;;;;;;;;;;;;23113:113;;;;;;;;;;-1:-1:-1;23204:14:0;;23189:12;:29;23113:113;;9417:26;;;;;;;;;;;;;;;;9717:57;;;;;;;;;;-1:-1:-1;9717:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;8906:33;;;;;;;;;;-1:-1:-1;8906:33:0;;;;;;;;;;;16975:182;;;;;;;;;;-1:-1:-1;16975:182:0;;;;;:::i;:::-;;:::i;13923:327::-;;;;;;;;;;-1:-1:-1;13923:327:0;;;;;:::i;:::-;;:::i;12844:109::-;;;;;;;;;;-1:-1:-1;12844:109:0;;;;;:::i;:::-;;:::i;9055:39::-;;;;;;;;;;-1:-1:-1;9055:39:0;;;;;;;;8625:31;;;;;;;;;;;;;;;;14320:428;;;;;;;;;;-1:-1:-1;14320:428:0;;;;;:::i;:::-;;:::i;9101:27::-;;;;;;;;;;;;;;;;13598:317;;;;;;;;;;-1:-1:-1;13598:317:0;;;;;:::i;:::-;;:::i;2584:176::-;;;;;;;;;;-1:-1:-1;2584:176:0;;;;;:::i;:::-;-1:-1:-1;;;;;2725:18:0;;;2698:7;2725:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;2584:176;8505:33;;;;;;;;;;;;;;;;8663;;;;;;;;;;;;;;;;9240:25;;;;;;;;;;;;;;;;16449:518;;;;;;;;;;-1:-1:-1;16449:518:0;;;;;:::i;:::-;;:::i;13172:98::-;;;;;;;;;;;;;:::i;9172:30::-;;;;;;;;;;;;;;;;6932:281;;;;;;;;;;-1:-1:-1;6932:281:0;;;;;:::i;:::-;;:::i;9347:31::-;;;;;;;;;;;;;;;;1788:100;1842:13;1875:5;1868:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1788:100;:::o;2768:194::-;2876:4;2893:39;203:10;2916:7;2925:6;2893:8;:39::i;:::-;-1:-1:-1;2950:4:0;2768:194;;;;;:::o;2970:529::-;3110:4;3127:36;3137:6;3145:9;3156:6;3127:9;:36::i;:::-;-1:-1:-1;;;;;3203:19:0;;3176:24;3203:19;;;:11;:19;;;;;;;;203:10;3203:33;;;;;;;;3269:26;;;;3247:116;;;;-1:-1:-1;;;3247:116:0;;5097:2:1;3247:116:0;;;5079:21:1;5136:2;5116:18;;;5109:30;5175:34;5155:18;;;5148:62;-1:-1:-1;;;5226:18:1;;;5219:38;5274:19;;3247:116:0;;;;;;;;;3399:57;3408:6;203:10;3449:6;3430:16;:25;3399:8;:57::i;:::-;3487:4;3480:11;;;2970:529;;;;;;:::o;12594:242::-;6687:6;;-1:-1:-1;;;;;6687:6:0;203:10;6687:22;6679:67;;;;-1:-1:-1;;;6679:67:0;;;;;;;:::i;:::-;12657:13:::1;::::0;::::1;::::0;::::1;;;12656:14;12648:50;;;::::0;-1:-1:-1;;;12648:50:0;;5867:2:1;12648:50:0::1;::::0;::::1;5849:21:1::0;5906:2;5886:18;;;5879:30;5945:25;5925:18;;;5918:53;5988:18;;12648:50:0::1;5665:347:1::0;12648:50:0::1;12709:13;:20:::0;;-1:-1:-1;;12740:18:0;;;;;12784:12:::1;12769;:27:::0;12812:16:::1;::::0;::::1;::::0;-1:-1:-1;;12812:16:0::1;12594:242::o:0;13278:312::-;6687:6;;-1:-1:-1;;;;;6687:6:0;203:10;6687:22;6679:67;;;;-1:-1:-1;;;6679:67:0;;;;;;;:::i;:::-;13415:4:::1;13407;13386:13;2197:12:::0;;;2109:108;13386:13:::1;:17;::::0;13402:1:::1;13386:17;:::i;:::-;13385:26;;;;:::i;:::-;13384:35;;;;:::i;:::-;13374:6;:45;;13352:136;;;::::0;-1:-1:-1;;;13352:136:0;;6746:2:1;13352:136:0::1;::::0;::::1;6728:21:1::0;6785:2;6765:18;;;6758:30;6824:34;6804:18;;;6797:62;-1:-1:-1;;;6875:18:1;;;6868:39;6924:19;;13352:136:0::1;6544:405:1::0;13352:136:0::1;13514:19;:6:::0;13524:8:::1;13514:19;:::i;:::-;13499:12;:34:::0;;;13549:33:::1;::::0;1587:25:1;;;13549:33:0::1;::::0;1575:2:1;1560:18;13549:33:0::1;;;;;;;;13278:312:::0;:::o;15937:504::-;6687:6;;-1:-1:-1;;;;;6687:6:0;203:10;6687:22;6679:67;;;;-1:-1:-1;;;6679:67:0;;;;;;;:::i;:::-;16114:15:::1;:31:::0;;;16156:15:::1;:31:::0;;;16198:9:::1;:19:::0;;;16228:10:::1;:21:::0;;;16241:8;16210:7;16288:46:::1;16174:13:::0;16132;16288:46:::1;:::i;:::-;:71;;;;:::i;:::-;:97;;;;:::i;:::-;16260:12;:125:::0;;;16420:1:::1;-1:-1:-1::0;16404:17:0::1;16396:37;;;::::0;-1:-1:-1;;;16396:37:0;;7286:2:1;16396:37:0::1;::::0;::::1;7268:21:1::0;7325:1;7305:18;;;7298:29;-1:-1:-1;;;7343:18:1;;;7336:37;7390:18;;16396:37:0::1;7084:330:1::0;16396:37:0::1;15937:504:::0;;;;:::o;3507:290::-;203:10;3620:4;3709:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;3709:34:0;;;;;;;;;;3620:4;;3637:130;;3687:7;;3709:47;;3746:10;;3709:47;:::i;:::-;3637:8;:130::i;27846:188::-;6687:6;;-1:-1:-1;;;;;6687:6:0;203:10;6687:22;6679:67;;;;-1:-1:-1;;;6679:67:0;;;;;;;:::i;:::-;27944:82:::1;::::0;27907:12:::1;::::0;27952:10:::1;::::0;27976:21:::1;::::0;27907:12;27944:82;27907:12;27944:82;27976:21;27952:10;27944:82:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28336:233:::0;6687:6;;-1:-1:-1;;;;;6687:6:0;203:10;6687:22;6679:67;;;;-1:-1:-1;;;6679:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28432:31:0;::::1;28424:81;;;::::0;-1:-1:-1;;;28424:81:0;;7831:2:1;28424:81:0::1;::::0;::::1;7813:21:1::0;7870:2;7850:18;;;7843:30;7909:34;7889:18;;;7882:62;-1:-1:-1;;;7960:18:1;;;7953:35;8005:19;;28424:81:0::1;7629:401:1::0;28424:81:0::1;28516:16;:45:::0;;-1:-1:-1;;;;;;28516:45:0::1;-1:-1:-1::0;;;;;28516:45:0;;;::::1;::::0;;;::::1;::::0;;28336:233::o;28042:286::-;6687:6;;-1:-1:-1;;;;;6687:6:0;203:10;6687:22;6679:67;;;;-1:-1:-1;;;6679:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28168:31:0;::::1;28146:118;;;::::0;-1:-1:-1;;;28146:118:0;;8237:2:1;28146:118:0::1;::::0;::::1;8219:21:1::0;8276:2;8256:18;;;8249:30;8315:34;8295:18;;;8288:62;-1:-1:-1;;;8366:18:1;;;8359:35;8411:19;;28146:118:0::1;8035:401:1::0;28146:118:0::1;28275:16;:45:::0;;-1:-1:-1;;;;;;28275:45:0::1;-1:-1:-1::0;;;;;28275:45:0;;;::::1;::::0;;;::::1;::::0;;28042:286::o;2225:143::-;-1:-1:-1;;;;;2342:18:0;2315:7;2342:18;;;;;;;;;;;;2225:143::o;6774:150::-;6687:6;;-1:-1:-1;;;;;6687:6:0;203:10;6687:22;6679:67;;;;-1:-1:-1;;;6679:67:0;;;;;;;:::i;:::-;6867:6:::1;::::0;6846:40:::1;::::0;6883:1:::1;::::0;-1:-1:-1;;;;;6867:6:0::1;::::0;6846:40:::1;::::0;6883:1;;6846:40:::1;6897:6;:19:::0;;-1:-1:-1;;;;;;6897:19:0::1;::::0;;6774:150::o;12961:203::-;6687:6;;-1:-1:-1;;;;;6687:6:0;203:10;6687:22;6679:67;;;;-1:-1:-1;;;6679:67:0;;;;;;;:::i;:::-;2197:12;;13015::::1;:28:::0;2197:12;;13054:13:::1;:29:::0;2197:12;;13094:15:::1;:31:::0;13141:15:::1;::::0;::::1;::::0;;;::::1;12961:203::o:0;14981:328::-;6687:6;;-1:-1:-1;;;;;6687:6:0;203:10;6687:22;6679:67;;;;-1:-1:-1;;;6679:67:0;;;;;;;:::i;:::-;15103:4:::1;15098:162;;15160:13;::::0;-1:-1:-1;;;;;15160:13:0;;::::1;15150:23:::0;;::::1;::::0;15124:124:::1;;;::::0;-1:-1:-1;;;15124:124:0;;8643:2:1;15124:124:0::1;::::0;::::1;8625:21:1::0;8682:2;8662:18;;;8655:30;8721:34;8701:18;;;8694:62;-1:-1:-1;;;8772:18:1;;;8765:37;8819:19;;15124:124:0::1;8441:403:1::0;15124:124:0::1;-1:-1:-1::0;;;;;15270:24:0;;;::::1;;::::0;;;:16:::1;:24;::::0;;;;:31;;-1:-1:-1;;15270:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;14981:328::o;1896:104::-;1952:13;1985:7;1978:14;;;;;:::i;15317:364::-;6687:6;;-1:-1:-1;;;;;6687:6:0;203:10;6687:22;6679:67;;;;-1:-1:-1;;;6679:67:0;;;;;;;:::i;:::-;15465:13:::1;::::0;-1:-1:-1;;;;;15465:13:0;;::::1;15457:21:::0;;::::1;::::0;15435:128:::1;;;::::0;-1:-1:-1;;;15435:128:0;;9051:2:1;15435:128:0::1;::::0;::::1;9033:21:1::0;9090:2;9070:18;;;9063:30;9129:34;9109:18;;;9102:62;9200:27;9180:18;;;9173:55;9245:19;;15435:128:0::1;8849:421:1::0;15435:128:0::1;15576:41;15605:4;15611:5;15576:28;:41::i;:::-;15633:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;15633:40:0;::::1;::::0;::::1;::::0;;;::::1;15317:364:::0;;:::o;25793:465::-;25972:18;;25944:24;25962:4;25944:9;:24::i;:::-;:46;;25922:132;;;;-1:-1:-1;;;25922:132:0;;9477:2:1;25922:132:0;;;9459:21:1;9516:2;9496:18;;;9489:30;9555:34;9535:18;;;9528:62;-1:-1:-1;;;9606:18:1;;;9599:34;9650:19;;25922:132:0;9275:400:1;25922:132:0;26069:35;26082:4;26088:5;26095:8;26069:12;:35::i;:::-;26065:186;;;26121:8;:15;;-1:-1:-1;;;;26121:15:0;-1:-1:-1;;;26121:15:0;;;26151:10;:8;:10::i;:::-;26176:8;:16;;-1:-1:-1;;;;26176:16:0;;;26212:27;;26223:15;1587:25:1;;26212:27:0;;1575:2:1;1560:18;26212:27:0;;;;;;;26065:186;25793:465;;;:::o;3805:475::-;203:10;3923:4;3967:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;3967:34:0;;;;;;;;;;4034:35;;;;4012:122;;;;-1:-1:-1;;;4012:122:0;;9882:2:1;4012:122:0;;;9864:21:1;9921:2;9901:18;;;9894:30;9960:34;9940:18;;;9933:62;-1:-1:-1;;;10011:18:1;;;10004:35;10056:19;;4012:122:0;9680:401:1;4012:122:0;4170:67;203:10;4193:7;4221:15;4202:16;:34;4170:8;:67::i;:::-;-1:-1:-1;4268:4:0;;3805:475;-1:-1:-1;;;3805:475:0:o;2376:200::-;2487:4;2504:42;203:10;2528:9;2539:6;2504:9;:42::i;16975:182::-;6687:6;;-1:-1:-1;;;;;6687:6:0;203:10;6687:22;6679:67;;;;-1:-1:-1;;;6679:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17060:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;17060:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;17115:34;;1389:41:1;;;17115:34:0::1;::::0;1362:18:1;17115:34:0::1;;;;;;;16975:182:::0;;:::o;13923:327::-;6687:6;;-1:-1:-1;;;;;6687:6:0;203:10;6687:22;6679:67;;;;-1:-1:-1;;;6679:67:0;;;;;;;:::i;:::-;14063:4:::1;14055;14034:13;2197:12:::0;;;2109:108;14034:13:::1;:17;::::0;14050:1:::1;14034:17;:::i;:::-;14033:26;;;;:::i;:::-;14032:35;;;;:::i;:::-;14022:6;:45;;14000:139;;;::::0;-1:-1:-1;;;14000:139:0;;10288:2:1;14000:139:0::1;::::0;::::1;10270:21:1::0;10327:2;10307:18;;;10300:30;10366:34;10346:18;;;10339:62;-1:-1:-1;;;10417:18:1;;;10410:42;10469:19;;14000:139:0::1;10086:408:1::0;14000:139:0::1;14168:19;:6:::0;14178:8:::1;14168:19;:::i;:::-;14150:15;:37:::0;;;14203:39:::1;::::0;1587:25:1;;;14203:39:0::1;::::0;1575:2:1;1560:18;14203:39:0::1;1441:177:1::0;12844:109:0;6687:6;;-1:-1:-1;;;;;6687:6:0;203:10;6687:22;6679:67;;;;-1:-1:-1;;;6679:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12914:23:0::1;12940:5;12914:23:::0;;;:15:::1;:23;::::0;;;;:31;;-1:-1:-1;;12914:31:0::1;::::0;;12844:109::o;14320:428::-;6687:6;;-1:-1:-1;;;;;6687:6:0;203:10;6687:22;6679:67;;;;-1:-1:-1;;;6679:67:0;;;;;;;:::i;:::-;14460:6:::1;14439:13;2197:12:::0;;;2109:108;14439:13:::1;:17;::::0;14455:1:::1;14439:17;:::i;:::-;14438:28;;;;:::i;:::-;14425:9;:41;;14403:144;;;::::0;-1:-1:-1;;;14403:144:0;;10701:2:1;14403:144:0::1;::::0;::::1;10683:21:1::0;10740:2;10720:18;;;10713:30;10779:34;10759:18;;;10752:62;-1:-1:-1;;;10830:18:1;;;10823:51;10891:19;;14403:144:0::1;10499:417:1::0;14403:144:0::1;14615:4;14594:13;2197:12:::0;;;2109:108;14594:13:::1;:17;::::0;14610:1:::1;14594:17;:::i;:::-;14593:26;;;;:::i;:::-;14580:9;:39;;14558:141;;;::::0;-1:-1:-1;;;14558:141:0;;11123:2:1;14558:141:0::1;::::0;::::1;11105:21:1::0;11162:2;11142:18;;;11135:30;11201:34;11181:18;;;11174:62;-1:-1:-1;;;11252:18:1;;;11245:50;11312:19;;14558:141:0::1;10921:416:1::0;14558:141:0::1;14710:18;:30:::0;14320:428::o;13598:317::-;6687:6;;-1:-1:-1;;;;;6687:6:0;203:10;6687:22;6679:67;;;;-1:-1:-1;;;6679:67:0;;;;;;;:::i;:::-;13736:4:::1;13728;13707:13;2197:12:::0;;;2109:108;13707:13:::1;:17;::::0;13723:1:::1;13707:17;:::i;:::-;13706:26;;;;:::i;:::-;13705:35;;;;:::i;:::-;13695:6;:45;;13673:137;;;::::0;-1:-1:-1;;;13673:137:0;;11544:2:1;13673:137:0::1;::::0;::::1;11526:21:1::0;11583:2;11563:18;;;11556:30;11622:34;11602:18;;;11595:62;-1:-1:-1;;;11673:18:1;;;11666:40;11723:19;;13673:137:0::1;11342:406:1::0;13673:137:0::1;13837:19;:6:::0;13847:8:::1;13837:19;:::i;:::-;13821:13;:35:::0;;;13872::::1;::::0;1587:25:1;;;13872:35:0::1;::::0;1575:2:1;1560:18;13872:35:0::1;1441:177:1::0;16449:518:0;6687:6;;-1:-1:-1;;;;;6687:6:0;203:10;6687:22;6679:67;;;;-1:-1:-1;;;6679:67:0;;;;;;;:::i;:::-;16627:16:::1;:32:::0;;;16670:16:::1;:32:::0;;;16713:10:::1;:20:::0;;;16744:11:::1;:22:::0;;;16758:8;16726:7;16806:48:::1;16689:13:::0;16646;16806:48:::1;:::i;:::-;:74;;;;:::i;:::-;:101;;;;:::i;:::-;16777:13;:130:::0;;;16943:1:::1;-1:-1:-1::0;16926:18:0::1;16918:41;;;::::0;-1:-1:-1;;;16918:41:0;;11955:2:1;16918:41:0::1;::::0;::::1;11937:21:1::0;11994:2;11974:18;;;11967:30;-1:-1:-1;;;12013:18:1;;;12006:40;12063:18;;16918:41:0::1;11753:334:1::0;13172:98:0;6687:6;;-1:-1:-1;;;;;6687:6:0;203:10;6687:22;6679:67;;;;-1:-1:-1;;;6679:67:0;;;;;;;:::i;:::-;13234:20:::1;:28:::0;;-1:-1:-1;;13234:28:0::1;::::0;;13172:98::o;6932:281::-;6687:6;;-1:-1:-1;;;;;6687:6:0;203:10;6687:22;6679:67;;;;-1:-1:-1;;;6679:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7035:22:0;::::1;7013:110;;;::::0;-1:-1:-1;;;7013:110:0;;12294:2:1;7013:110:0::1;::::0;::::1;12276:21:1::0;12333:2;12313:18;;;12306:30;12372:34;12352:18;;;12345:62;-1:-1:-1;;;12423:18:1;;;12416:36;12469:19;;7013:110:0::1;12092:402:1::0;7013:110:0::1;7160:6;::::0;7139:38:::1;::::0;-1:-1:-1;;;;;7139:38:0;;::::1;::::0;7160:6:::1;::::0;7139:38:::1;::::0;7160:6:::1;::::0;7139:38:::1;7188:6;:17:::0;;-1:-1:-1;;;;;;7188:17:0::1;-1:-1:-1::0;;;;;7188:17:0;;;::::1;::::0;;;::::1;::::0;;6932:281::o;5829:380::-;-1:-1:-1;;;;;5965:19:0;;5957:68;;;;-1:-1:-1;;;5957:68:0;;12701:2:1;5957:68:0;;;12683:21:1;12740:2;12720:18;;;12713:30;12779:34;12759:18;;;12752:62;-1:-1:-1;;;12830:18:1;;;12823:34;12874:19;;5957:68:0;12499:400:1;5957:68:0;-1:-1:-1;;;;;6044:21:0;;6036:68;;;;-1:-1:-1;;;6036:68:0;;13106:2:1;6036:68:0;;;13088:21:1;13145:2;13125:18;;;13118:30;13184:34;13164:18;;;13157:62;-1:-1:-1;;;13235:18:1;;;13228:32;13277:19;;6036:68:0;12904:398:1;6036:68:0;-1:-1:-1;;;;;6117:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;6169:32;;1587:25:1;;;6169:32:0;;1560:18:1;6169:32:0;;;;;;;;5829:380;;;:::o;17165:5940::-;-1:-1:-1;;;;;17297:18:0;;17289:68;;;;-1:-1:-1;;;17289:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17376:16:0;;17368:64;;;;-1:-1:-1;;;17368:64:0;;;;;;;:::i;:::-;17460:1;17451:6;:10;17443:52;;;;-1:-1:-1;;;17443:52:0;;14319:2:1;17443:52:0;;;14301:21:1;14358:2;14338:18;;;14331:30;14397:31;14377:18;;;14370:59;14446:18;;17443:52:0;14117:353:1;17443:52:0;17513:13;;;;;;;17508:183;;-1:-1:-1;;;;;17569:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;17598:23:0;;;;;;:19;:23;;;;;;;;17569:52;17543:136;;;;-1:-1:-1;;;17543:136:0;;14677:2:1;17543:136:0;;;14659:21:1;14716:2;14696:18;;;14689:30;-1:-1:-1;;;14735:18:1;;;14728:52;14797:18;;17543:136:0;14475:346:1;17543:136:0;17707:14;;:18;17703:254;;-1:-1:-1;;;;;17769:21:0;;;;;;:15;:21;;;;;;;;17768:22;;:60;;-1:-1:-1;6625:6:0;;-1:-1:-1;;;;;17815:13:0;;;6625:6;;17815:13;17768:60;:106;;;-1:-1:-1;;;;;;17853:21:0;;17867:6;17853:21;17768:106;17742:203;;;;-1:-1:-1;;;17742:203:0;;15028:2:1;17742:203:0;;;15010:21:1;15067:2;15047:18;;;15040:30;15106:34;15086:18;;;15079:62;-1:-1:-1;;;15157:18:1;;;15150:33;15200:19;;17742:203:0;14826:399:1;17742:203:0;17973:14;;;;17969:2358;;;6625:6;;-1:-1:-1;;;;;18026:15:0;;;6625:6;;18026:15;;;;:49;;-1:-1:-1;6625:6:0;;-1:-1:-1;;;;;18062:13:0;;;6625:6;;18062:13;;18026:49;:86;;;;-1:-1:-1;;;;;;18096:16:0;;;;18026:86;:128;;;;-1:-1:-1;;;;;;18133:21:0;;18147:6;18133:21;;18026:128;:175;;;;-1:-1:-1;;;;;;18176:25:0;;;;;;:19;:25;;;;;;;;18175:26;18026:175;:220;;;;-1:-1:-1;;;;;;18223:23:0;;;;;;:19;:23;;;;;;;;18222:24;18026:220;18004:1319;;;18285:20;;;;18281:1027;;;18374:9;;-1:-1:-1;;;;;18360:24:0;;;18374:9;;18360:24;;;;:56;;-1:-1:-1;18402:13:0;;-1:-1:-1;;;;;18388:28:0;;;18402:13;;18388:28;;18360:56;18330:959;;;18580:16;18595:1;18580:12;:16;:::i;:::-;18534:9;18505:39;;;;:28;:39;;;;;;:91;:212;;;;-1:-1:-1;18701:16:0;18716:1;18701:12;:16;:::i;:::-;-1:-1:-1;;;;;18633:32:0;;;;;;:28;:32;;;;;;:84;18505:212;18467:363;;;;-1:-1:-1;;;18467:363:0;;;;;;;:::i;:::-;18886:9;18857:39;;;;:28;:39;;;;;;18899:12;18857:54;;;;-1:-1:-1;;;;;18938:32:0;;;;;;:47;18330:959;;;19020:8;;-1:-1:-1;;;19020:8:0;;;;19019:9;:45;;;;-1:-1:-1;;;;;;19033:31:0;;;;;;:25;:31;;;;;;;;19032:32;19019:45;19015:274;;;19147:5;;-1:-1:-1;;;;;19131:13:0;;;;;;:7;:13;;;;;;:21;19093:172;;;;-1:-1:-1;;;19093:172:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19343:31:0;;;;;;:25;:31;;;;;;;;:56;;;;-1:-1:-1;;;;;;19379:20:0;;;;;;:16;:20;;;;;;;;19378:21;19343:56;19339:977;;;19460:12;;19450:6;:22;;19420:136;;;;-1:-1:-1;;;19420:136:0;;15987:2:1;19420:136:0;;;15969:21:1;16026:2;16006:18;;;15999:30;16065:34;16045:18;;;16038:62;-1:-1:-1;;;16116:18:1;;;16109:38;16164:19;;19420:136:0;15785:404:1;19420:136:0;19631:15;;19614:13;19624:2;19614:9;:13::i;:::-;19605:22;;:6;:22;:::i;:::-;:41;;19575:139;;;;-1:-1:-1;;;19575:139:0;;16396:2:1;19575:139:0;;;16378:21:1;16435:2;16415:18;;;16408:30;16474:26;16454:18;;;16447:54;16518:18;;19575:139:0;16194:348:1;19575:139:0;19339:977;;;-1:-1:-1;;;;;19758:29:0;;;;;;:25;:29;;;;;;;;:56;;;;-1:-1:-1;;;;;;19792:22:0;;;;;;:16;:22;;;;;;;;19791:23;19758:56;19736:580;;;19889:13;;19879:6;:23;;19849:139;;;;-1:-1:-1;;;19849:139:0;;16749:2:1;19849:139:0;;;16731:21:1;16788:2;16768:18;;;16761:30;16827:34;16807:18;;;16800:62;-1:-1:-1;;;16878:18:1;;;16871:40;16928:19;;19849:139:0;16547:406:1;19736:580:0;-1:-1:-1;;;;;20015:20:0;;;;;;:16;:20;;;;;;;;20010:306;;20112:15;;20095:13;20105:2;20095:9;:13::i;20010:306::-;20222:8;;-1:-1:-1;;;20222:8:0;;;;20221:9;:35;;;;-1:-1:-1;;;;;;20234:22:0;;;;;;:16;:22;;;;;;;;20221:35;20217:99;;;20285:15;20277:5;:23;20217:99;20339:28;20370:24;20388:4;20370:9;:24::i;:::-;20446:18;;20339:55;;-1:-1:-1;20422:42:0;;;;;;;20495:35;;-1:-1:-1;20519:11:0;;;;;;;20495:35;:61;;;;-1:-1:-1;20548:8:0;;-1:-1:-1;;;20548:8:0;;;;20547:9;20495:61;:110;;;;-1:-1:-1;;;;;;20574:31:0;;;;;;:25;:31;;;;;;;;20573:32;20495:110;:153;;;;-1:-1:-1;;;;;;20623:25:0;;;;;;:19;:25;;;;;;;;20622:26;20495:153;:194;;;;-1:-1:-1;;;;;;20666:23:0;;;;;;:19;:23;;;;;;;;20665:24;20495:194;20477:322;;;20716:8;:15;;-1:-1:-1;;;;20716:15:0;-1:-1:-1;;;20716:15:0;;;20746:10;:8;:10::i;:::-;20771:8;:16;;-1:-1:-1;;;;20771:16:0;;;20477:322;-1:-1:-1;;;;;20847:25:0;;20811:12;20847:25;;;:19;:25;;;;;;20826:4;;20847:25;;;:52;;-1:-1:-1;;;;;;20876:23:0;;;;;;:19;:23;;;;;;;;20847:52;20843:100;;;-1:-1:-1;20926:5:0;20843:100;-1:-1:-1;;;;;20957:31:0;;;;;;:25;:31;;;;;;;;:51;;;;-1:-1:-1;;;;;;20992:11:0;;;;;;:7;:11;;;;;;:16;20957:51;20953:182;;;21031:22;21049:2;21031:9;:22::i;:::-;21057:1;21031:27;21027:97;;-1:-1:-1;;;;;21078:11:0;;;;;;:7;:11;;;;;21092:15;21078:29;;21027:97;21147:12;21180:7;21176:1876;;;23204:14;;23189:12;:29;21226:73;;;;-1:-1:-1;;;;;;21268:31:0;;;;;;:25;:31;;;;;;;;21226:73;:124;;;;-1:-1:-1;;;;;;21321:29:0;;;;;;:25;:29;;;;;;;;21320:30;21226:124;:161;;;;;21386:1;21371:12;;:16;21226:161;21204:1703;;;-1:-1:-1;;;;;21427:19:0;;;;;;:15;:19;;;;;;;;21422:186;;-1:-1:-1;;;;;21471:19:0;;;;;;:15;:19;;;;;:26;;-1:-1:-1;;21471:26:0;21493:4;21471:26;;;;;;21520:10;:15;;21493:4;;21520:10;;:15;;21493:4;;21520:15;:::i;:::-;;;;-1:-1:-1;;21563:25:0;;-1:-1:-1;;;;;749:32:1;;731:51;;21563:25:0;;719:2:1;704:18;21563:25:0;;;;;;;21422:186;21651:3;21636:11;:6;21645:2;21636:11;:::i;:::-;21635:19;;;;:::i;:::-;21628:26;;21722:12;;21703:15;;21696:4;:22;;;;:::i;:::-;21695:39;;;;:::i;:::-;21673:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;21802:12:0;;21783:15;;21776:22;;:4;:22;:::i;:::-;21775:39;;;;:::i;:::-;21753:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;21870:12:0;;21857:9;;21850:16;;:4;:16;:::i;:::-;21849:33;;;;:::i;:::-;21833:12;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;21940:12:0;;21926:10;;21919:17;;:4;:17;:::i;:::-;21918:34;;;;:::i;:::-;21901:13;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;21204:1703:0;;-1:-1:-1;21204:1703:0;;-1:-1:-1;;;;;22012:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;22061:1;22045:13;;:17;22012:50;22008:899;;;22117:3;22100:13;;22091:6;:22;;;;:::i;:::-;22090:30;;;;:::i;:::-;22083:37;;22189:13;;22169:16;;22162:4;:23;;;;:::i;:::-;22161:41;;;;:::i;:::-;22139:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;22271:13:0;;22251:16;;22244:23;;:4;:23;:::i;:::-;22243:41;;;;:::i;:::-;22221:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;22341:13:0;;22327:10;;22320:17;;:4;:17;:::i;:::-;22319:35;;;;:::i;:::-;22303:12;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;;22413:13:0;;22398:11;;22391:18;;:4;:18;:::i;22008:899::-;-1:-1:-1;;;;;22485:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;22535:1;22520:12;;:16;22485:51;22481:426;;;22590:3;22574:12;;22565:6;:21;;;;:::i;:::-;22564:29;;;;:::i;:::-;22557:36;;22661:12;;22642:15;;22635:4;:22;;;;:::i;:::-;22634:39;;;;:::i;:::-;22612:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;22741:12:0;;22722:15;;22715:22;;:4;:22;:::i;:::-;22714:39;;;;:::i;:::-;22692:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;22809:12:0;;22796:9;;22789:16;;:4;:16;:::i;:::-;22788:33;;;;:::i;:::-;22772:12;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;22879:12:0;;22865:10;;22858:17;;:4;:17;:::i;:::-;22857:34;;;;:::i;:::-;22840:13;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;;22481:426:0;22925:8;;22921:91;;22954:42;22970:4;22984;22991;22954:15;:42::i;:::-;23026:14;23036:4;23026:14;;:::i;:::-;;;21176:1876;23064:33;23080:4;23086:2;23090:6;23064:15;:33::i;:::-;17278:5827;;;;17165:5940;;;:::o;15689:240::-;-1:-1:-1;;;;;15772:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;15772:39:0;;;;;;;15824;15772:31;:39;15824:26;:39::i;23235:1724::-;23421:10;23356:4;23401:31;;;:19;:31;;;;;;23356:4;;23401:31;;23396:1556;;23487:1;23471:13;;:17;:62;;;;;23520:13;;23492:24;23510:4;23492:9;:24::i;:::-;:41;;23471:62;23449:167;;;23568:32;23574:10;23586:13;;23568:5;:32::i;:::-;-1:-1:-1;23646:1:0;23630:13;:17;;;23672:4;;23717:24;23735:4;23717:9;:24::i;:::-;23691:50;;23756:25;23860:12;;23822:18;;23784;;:56;;;;:::i;:::-;:88;;;;:::i;:::-;23756:116;-1:-1:-1;23891:20:0;;;:46;;-1:-1:-1;23915:22:0;;23891:46;23887:99;;;23965:5;23958:12;;;;;;;23887:99;24022:18;;:22;;24043:1;24022:22;:::i;:::-;24004:15;:40;24000:121;;;24083:18;;:22;;24104:1;24083:22;:::i;:::-;24065:40;;24000:121;24142:7;24135:14;;;;;;;23396:1556;24213:1;24186:24;24204:4;24186:9;:24::i;:::-;:28;24182:286;;;24239:5;24248:1;24239:10;24235:218;;-1:-1:-1;24274:5:0;:16;;;24323:5;24235:218;;;24377:18;24383:4;24389:5;24377;:18::i;:::-;-1:-1:-1;24428:5:0;24235:218;24482:23;24508:24;24526:4;24508:9;:24::i;26266:1572::-;26325:1;26309:13;;:17;:62;;;;;26358:13;;26330:24;26348:4;26330:9;:24::i;:::-;:41;;26309:62;26305:130;;;26388:35;26402:4;26409:13;;26388:5;:35::i;:::-;26461:1;26445:13;:17;;;26499:24;26517:4;26499:9;:24::i;:::-;26473:50;;26534:25;26630:12;;26596:18;;26562;;:52;;;;:::i;:::-;:80;;;;:::i;:::-;26534:108;-1:-1:-1;26659:20:0;;;:46;;-1:-1:-1;26683:22:0;;26659:46;26655:85;;;26722:7;;26266:1572::o;26655:85::-;26774:18;;:22;;26795:1;26774:22;:::i;:::-;26756:15;:40;26752:113;;;26831:18;;:22;;26852:1;26831:22;:::i;:::-;26813:40;;26752:113;26877:23;26977:1;26957:17;26922:18;;26904:15;:36;;;;:::i;:::-;26903:71;;;;:::i;:::-;:75;;;;:::i;:::-;26877:101;-1:-1:-1;26991:51:0;27008:33;26877:101;27008:15;:33;:::i;:::-;26991:16;:51::i;:::-;27252:18;;27076:21;;;;27055:18;;27252:22;;27273:1;;27252:22;:::i;:::-;27231:44;;:17;:44;:::i;:::-;27195:18;;27182:31;;:10;:31;:::i;:::-;27181:95;;;;:::i;:::-;27155:121;;27287:16;27392:1;27371:18;;:22;;;;:::i;:::-;27350:44;;:17;:44;:::i;:::-;27320:12;;27307:25;;:10;:25;:::i;:::-;27306:89;;;;:::i;:::-;27287:108;-1:-1:-1;27425:26:0;27287:108;27425:15;:26;:::i;:::-;27406:45;;;;:::i;:::-;27483:1;27462:18;:22;;;27495:18;:22;;;27528:12;:16;;;27555:13;:17;27406:45;-1:-1:-1;27589:19:0;;;;;:42;;;27630:1;27612:15;:19;27589:42;27585:121;;;27648:46;27661:15;27678;27648:12;:46::i;:::-;27726:16;;27718:44;;-1:-1:-1;;;;;27726:16:0;;;;27718:44;;;;;27753:8;;27726:16;27718:44;27726:16;27718:44;27753:8;27726:16;27718:44;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27781:16:0;;27773:57;;-1:-1:-1;;;;;27781:16:0;;;;27808:21;27773:57;;;;;27781:16;27773:57;27781:16;27773:57;27808:21;27781:16;27773:57;;;;;;;;;;;;;;;;;;;;;26294:1544;;;;;;;26266:1572::o;4288:651::-;-1:-1:-1;;;;;4428:20:0;;4420:70;;;;-1:-1:-1;;;4420:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;4509:23:0;;4501:71;;;;-1:-1:-1;;;4501:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;4609:17:0;;4585:21;4609:17;;;;;;;;;;;4659:23;;;;4637:111;;;;-1:-1:-1;;;4637:111:0;;17160:2:1;4637:111:0;;;17142:21:1;17199:2;17179:18;;;17172:30;17238:34;17218:18;;;17211:62;-1:-1:-1;;;17289:18:1;;;17282:36;17335:19;;4637:111:0;16958:402:1;4637:111:0;-1:-1:-1;;;;;4784:17:0;;;:9;:17;;;;;;;;;;;4804:22;;;4784:42;;4848:20;;;;;;;;:30;;4820:6;;4784:9;4848:30;;4820:6;;4848:30;:::i;:::-;;;;;;;;4913:9;-1:-1:-1;;;;;4896:35:0;4905:6;-1:-1:-1;;;;;4896:35:0;;4924:6;4896:35;;;;1587:25:1;;1575:2;1560:18;;1441:177;4896:35:0;;;;;;;;4409:530;4288:651;;;:::o;14756:217::-;-1:-1:-1;;;;;14869:24:0;;;;;;:16;:24;;;;;;;;;:37;;-1:-1:-1;;14869:37:0;;;;;;;;;;14922:43;;17533:51:1;;;17600:18;;;17593:50;14922:43:0;;17506:18:1;14922:43:0;;;;;;;14756:217;;:::o;5271:550::-;-1:-1:-1;;;;;5355:21:0;;5347:67;;;;-1:-1:-1;;;5347:67:0;;17856:2:1;5347:67:0;;;17838:21:1;17895:2;17875:18;;;17868:30;17934:34;17914:18;;;17907:62;-1:-1:-1;;;17985:18:1;;;17978:31;18026:19;;5347:67:0;17654:397:1;5347:67:0;-1:-1:-1;;;;;5450:18:0;;5425:22;5450:18;;;;;;;;;;;5487:24;;;;5479:71;;;;-1:-1:-1;;;5479:71:0;;18258:2:1;5479:71:0;;;18240:21:1;18297:2;18277:18;;;18270:30;18336:34;18316:18;;;18309:62;-1:-1:-1;;;18387:18:1;;;18380:32;18429:19;;5479:71:0;18056:398:1;5479:71:0;-1:-1:-1;;;;;5586:18:0;;:9;:18;;;;;;;;;;;5607:23;;;5586:44;;5725:12;:22;;;;;;;5776:37;1587:25:1;;;5586:9:0;;:18;5776:37;;1560:18:1;5776:37:0;1441:177:1;24967:454:0;25057:16;;;25071:1;25057:16;;;;;;;;25033:21;;25057:16;;;;;;;;;;-1:-1:-1;25057:16:0;25033:40;;25102:4;25084;25089:1;25084:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;25084:23:0;;;:7;;;;;;;;;;:23;;;;25128:9;;:16;;;-1:-1:-1;;;25128:16:0;;;;:9;;;;;:14;;:16;;;;;25084:7;;25128:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25118:4;25123:1;25118:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;25118:26:0;;;:7;;;;;;;;;:26;25187:9;;25155:56;;25172:4;;25187:9;25199:11;25155:8;:56::i;:::-;25222:9;;:191;;-1:-1:-1;;;25222:191:0;;-1:-1:-1;;;;;25222:9:0;;;;:60;;:191;;25297:11;;25222:9;;25340:4;;25367;;25387:15;;25222:191;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25022:399;24967:454;:::o;25429:356::-;25542:9;;25510:56;;25527:4;;-1:-1:-1;;;;;25542:9:0;25554:11;25510:8;:56::i;:::-;25577:9;;:200;;-1:-1:-1;;;25577:200:0;;25643:4;25577:200;;;20305:34:1;20355:18;;;20348:34;;;25577:9:0;20398:18:1;;;20391:34;;;20441:18;;;20434:34;25729:6:0;20484:19:1;;;20477:44;25751:15:0;20537:19:1;;;20530:35;-1:-1:-1;;;;;25577:9:0;;;;:25;;25610:9;;20239:19:1;;25577:200:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;25429:356;;:::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;793:131::-;-1:-1:-1;;;;;868:31:1;;858:42;;848:70;;914:1;911;904:12;848:70;793:131;:::o;929:315::-;997:6;1005;1058:2;1046:9;1037:7;1033:23;1029:32;1026:52;;;1074:1;1071;1064:12;1026:52;1113:9;1100:23;1132:31;1157:5;1132:31;:::i;:::-;1182:5;1234:2;1219:18;;;;1206:32;;-1:-1:-1;;;929:315:1:o;1623:456::-;1700:6;1708;1716;1769:2;1757:9;1748:7;1744:23;1740:32;1737:52;;;1785:1;1782;1775:12;1737:52;1824:9;1811:23;1843:31;1868:5;1843:31;:::i;:::-;1893:5;-1:-1:-1;1950:2:1;1935:18;;1922:32;1963:33;1922:32;1963:33;:::i;:::-;1623:456;;2015:7;;-1:-1:-1;;;2069:2:1;2054:18;;;;2041:32;;1623:456::o;2084:247::-;2143:6;2196:2;2184:9;2175:7;2171:23;2167:32;2164:52;;;2212:1;2209;2202:12;2164:52;2251:9;2238:23;2270:31;2295:5;2270:31;:::i;2336:180::-;2395:6;2448:2;2436:9;2427:7;2423:23;2419:32;2416:52;;;2464:1;2461;2454:12;2416:52;-1:-1:-1;2487:23:1;;2336:180;-1:-1:-1;2336:180:1:o;2521:385::-;2607:6;2615;2623;2631;2684:3;2672:9;2663:7;2659:23;2655:33;2652:53;;;2701:1;2698;2691:12;2652:53;-1:-1:-1;;2724:23:1;;;2794:2;2779:18;;2766:32;;-1:-1:-1;2845:2:1;2830:18;;2817:32;;2896:2;2881:18;2868:32;;-1:-1:-1;2521:385:1;-1:-1:-1;2521:385:1:o;3308:416::-;3373:6;3381;3434:2;3422:9;3413:7;3409:23;3405:32;3402:52;;;3450:1;3447;3440:12;3402:52;3489:9;3476:23;3508:31;3533:5;3508:31;:::i;:::-;3558:5;-1:-1:-1;3615:2:1;3600:18;;3587:32;3657:15;;3650:23;3638:36;;3628:64;;3688:1;3685;3678:12;3628:64;3711:7;3701:17;;;3308:416;;;;;:::o;3729:383::-;3806:6;3814;3822;3875:2;3863:9;3854:7;3850:23;3846:32;3843:52;;;3891:1;3888;3881:12;3843:52;3930:9;3917:23;3949:31;3974:5;3949:31;:::i;:::-;3999:5;4051:2;4036:18;;4023:32;;-1:-1:-1;4102:2:1;4087:18;;;4074:32;;3729:383;-1:-1:-1;;;3729:383:1:o;4117:388::-;4185:6;4193;4246:2;4234:9;4225:7;4221:23;4217:32;4214:52;;;4262:1;4259;4252:12;4214:52;4301:9;4288:23;4320:31;4345:5;4320:31;:::i;:::-;4370:5;-1:-1:-1;4427:2:1;4412:18;;4399:32;4440:33;4399:32;4440:33;:::i;4510:380::-;4589:1;4585:12;;;;4632;;;4653:61;;4707:4;4699:6;4695:17;4685:27;;4653:61;4760:2;4752:6;4749:14;4729:18;4726:38;4723:161;;4806:10;4801:3;4797:20;4794:1;4787:31;4841:4;4838:1;4831:15;4869:4;4866:1;4859:15;4723:161;;4510:380;;;:::o;5304:356::-;5506:2;5488:21;;;5525:18;;;5518:30;5584:34;5579:2;5564:18;;5557:62;5651:2;5636:18;;5304:356::o;6017:127::-;6078:10;6073:3;6069:20;6066:1;6059:31;6109:4;6106:1;6099:15;6133:4;6130:1;6123:15;6149:168;6222:9;;;6253;;6270:15;;;6264:22;;6250:37;6240:71;;6291:18;;:::i;6322:217::-;6362:1;6388;6378:132;;6432:10;6427:3;6423:20;6420:1;6413:31;6467:4;6464:1;6457:15;6495:4;6492:1;6485:15;6378:132;-1:-1:-1;6524:9:1;;6322:217::o;6954:125::-;7019:9;;;7040:10;;;7037:36;;;7053:18;;:::i;13307:401::-;13509:2;13491:21;;;13548:2;13528:18;;;13521:30;13587:34;13582:2;13567:18;;13560:62;-1:-1:-1;;;13653:2:1;13638:18;;13631:35;13698:3;13683:19;;13307:401::o;13713:399::-;13915:2;13897:21;;;13954:2;13934:18;;;13927:30;13993:34;13988:2;13973:18;;13966:62;-1:-1:-1;;;14059:2:1;14044:18;;14037:33;14102:3;14087:19;;13713:399::o;15230:128::-;15297:9;;;15318:11;;;15315:37;;;15332:18;;:::i;15363:417::-;15565:2;15547:21;;;15604:2;15584:18;;;15577:30;15643:34;15638:2;15623:18;;15616:62;-1:-1:-1;;;15709:2:1;15694:18;;15687:51;15770:3;15755:19;;15363:417::o;18591:127::-;18652:10;18647:3;18643:20;18640:1;18633:31;18683:4;18680:1;18673:15;18707:4;18704:1;18697:15;18723:251;18793:6;18846:2;18834:9;18825:7;18821:23;18817:32;18814:52;;;18862:1;18859;18852:12;18814:52;18894:9;18888:16;18913:31;18938:5;18913:31;:::i;18979:980::-;19241:4;19289:3;19278:9;19274:19;19320:6;19309:9;19302:25;19346:2;19384:6;19379:2;19368:9;19364:18;19357:34;19427:3;19422:2;19411:9;19407:18;19400:31;19451:6;19486;19480:13;19517:6;19509;19502:22;19555:3;19544:9;19540:19;19533:26;;19594:2;19586:6;19582:15;19568:29;;19615:1;19625:195;19639:6;19636:1;19633:13;19625:195;;;19704:13;;-1:-1:-1;;;;;19700:39:1;19688:52;;19795:15;;;;19760:12;;;;19736:1;19654:9;19625:195;;;-1:-1:-1;;;;;;;19876:32:1;;;;19871:2;19856:18;;19849:60;-1:-1:-1;;;19940:3:1;19925:19;19918:35;19837:3;18979:980;-1:-1:-1;;;18979:980:1:o;20576:306::-;20664:6;20672;20680;20733:2;20721:9;20712:7;20708:23;20704:32;20701:52;;;20749:1;20746;20739:12;20701:52;20778:9;20772:16;20762:26;;20828:2;20817:9;20813:18;20807:25;20797:35;;20872:2;20861:9;20857:18;20851:25;20841:35;;20576:306;;;;;:::o

Swarm Source

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