ETH Price: $3,874.15 (+1.02%)

Token

ERC-20: Mao (MAO)
 

Overview

Max Total Supply

1,000,000,000,000 MAO

Holders

177

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
MAO

Compiler Version
v0.8.26+commit.8a97fa7a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-11-13
*/

/**
 
MAO MAO

*/

//  SPDX-License-Identifier: MIT
pragma solidity >=0.8.19;

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

abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB)
        external
        view
        returns (address pair);

    function allPairs(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

    function createPair(address tokenA, address tokenB)
        external
        returns (address pair);

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

interface IUniswapV2Pair {
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 value);

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

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

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

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

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

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

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (
            uint112 reserve0,
            uint112 reserve1,
            uint32 blockTimestampLast
        );

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

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

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

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

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

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

    function WETH() external pure returns (address);

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

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

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

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

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

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

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

    bool private swapping;

    address public marketingWallet;
    address public devWallet;
    address public lpWallet;

    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

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

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

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

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

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

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

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping(address => bool) public automatedMarketMakerPairs;

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

    event LimitsRemoved();

    event ExcludeFromFees(address indexed account, bool isExcluded);

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

    event marketingWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event devWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event lpWalletUpdated(address indexed newWallet, address indexed oldWallet);

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

    constructor() ERC20("Mao", "MAO") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

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

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

        uint256 _buyMarketingFee = 40;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevFee = 0;

        uint256 _sellMarketingFee = 40;
        uint256 _sellLiquidityFee = 0;
        uint256 _sellDevFee = 0;

        uint256 totalSupply = 1000000000000 * 1e18;

        maxTransactionAmount = (totalSupply * 2) / 100;
        maxWallet = (totalSupply * 2) / 100;
        swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05% swap wallet

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

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

        marketingWallet = msg.sender;
        devWallet = msg.sender;
        lpWallet = msg.sender;

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(marketingWallet, true);

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        excludeFromMaxTransaction(marketingWallet, true);

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

    receive() external payable {}

    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
    }

    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        emit LimitsRemoved();
        return true;
    }

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

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

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

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

    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
    }

    function updateBuyFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _devFee
    ) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
    }

    function updateSellFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _devFee
    ) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
    }

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

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

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateMarketingWallet(address newMarketingWallet)
        external
        onlyOwner
    {
        emit marketingWalletUpdated(newMarketingWallet, marketingWallet);
        marketingWallet = newMarketingWallet;
    }

    function updateLPWallet(address newLPWallet) external onlyOwner {
        emit lpWalletUpdated(newLPWallet, lpWallet);
        lpWallet = newLPWallet;
    }

    function updateDevWallet(address newWallet) external onlyOwner {
        emit devWalletUpdated(newWallet, devWallet);
        devWallet = newWallet;
    }

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

    event BoughtEarly(address indexed sniper);

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

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

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

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

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

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

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

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

            amount -= fees;
        }

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

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

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

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

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

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

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

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

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

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

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

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

        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev;

        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;

        (success, ) = address(devWallet).call{value: ethForDev}("");

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

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

    function withdrawEth() external {
        require(address(this).balance > 0, "Token: no ETH in the contract");
        payable(marketingWallet).transfer(address(this).balance);
    }

    function tokenWithdraw() external {
        uint256 amount = balanceOf(address(this));
        _transfer(address(this), marketingWallet, amount);
    }
}

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":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","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":[],"name":"LimitsRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"lpWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"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":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"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":"tokenWithdraw","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newLPWallet","type":"address"}],"name":"updateLPWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","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"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600c5f6101000a81548160ff0219169083151502179055506001600c60016101000a81548160ff0219169083151502179055506001600c60026101000a81548160ff02191690831515021790555034801561005f575f80fd5b506040518060400160405280600381526020017f4d616f00000000000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f4d414f000000000000000000000000000000000000000000000000000000000081525081600390816100db9190610d0a565b5080600490816100eb9190610d0a565b50505061010a6100ff6105c560201b60201c565b6105cc60201b60201c565b5f737a250d5630b4cf539739df2c5dacb4c659f2488d905061013381600161068f60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101b0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101d49190610e37565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610239573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061025d9190610e37565b6040518363ffffffff1660e01b815260040161027a929190610e71565b6020604051808303815f875af1158015610296573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102ba9190610e37565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff168152505061030060a051600161068f60201b60201c565b61031360a051600161076f60201b60201c565b5f602890505f805f602890505f805f6c0c9f2c9cd04674edea40000000905060646002826103419190610ec5565b61034b9190610f33565b60098190555060646002826103609190610ec5565b61036a9190610f33565b600b819055506127106005826103809190610ec5565b61038a9190610f33565b600a8190555086600e8190555085600f8190555084601081905550601054600f54600e546103b89190610f63565b6103c29190610f63565b600d819055508360128190555082601381905550816014819055506014546013546012546103f09190610f63565b6103fa9190610f63565b6011819055503360065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503360075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503360085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506104de6104d161080d60201b60201c565b600161083560201b60201c565b6104ef30600161083560201b60201c565b61050261dead600161083560201b60201c565b61053460065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600161083560201b60201c565b61055261054561080d60201b60201c565b600161068f60201b60201c565b61056330600161068f60201b60201c565b61057661dead600161068f60201b60201c565b6105a860065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600161068f60201b60201c565b6105b8338261096360201b60201c565b50505050505050506110d1565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61069d6105c560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166106c161080d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614610717576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070e90610ff0565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6108436105c560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1661086761080d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146108bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b490610ff0565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516109579190611028565b60405180910390a25050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036109d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c89061108b565b60405180910390fd5b6109e25f8383610ac660201b60201c565b8060025f8282546109f39190610f63565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610a459190610f63565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610aa991906110b8565b60405180910390a3610ac25f8383610acb60201b60201c565b5050565b505050565b505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680610b4b57607f821691505b602082108103610b5e57610b5d610b07565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302610bc07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610b85565b610bca8683610b85565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f610c0e610c09610c0484610be2565b610beb565b610be2565b9050919050565b5f819050919050565b610c2783610bf4565b610c3b610c3382610c15565b848454610b91565b825550505050565b5f90565b610c4f610c43565b610c5a818484610c1e565b505050565b5b81811015610c7d57610c725f82610c47565b600181019050610c60565b5050565b601f821115610cc257610c9381610b64565b610c9c84610b76565b81016020851015610cab578190505b610cbf610cb785610b76565b830182610c5f565b50505b505050565b5f82821c905092915050565b5f610ce25f1984600802610cc7565b1980831691505092915050565b5f610cfa8383610cd3565b9150826002028217905092915050565b610d1382610ad0565b67ffffffffffffffff811115610d2c57610d2b610ada565b5b610d368254610b34565b610d41828285610c81565b5f60209050601f831160018114610d72575f8415610d60578287015190505b610d6a8582610cef565b865550610dd1565b601f198416610d8086610b64565b5f5b82811015610da757848901518255600182019150602085019450602081019050610d82565b86831015610dc45784890151610dc0601f891682610cd3565b8355505b6001600288020188555050505b505050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610e0682610ddd565b9050919050565b610e1681610dfc565b8114610e20575f80fd5b50565b5f81519050610e3181610e0d565b92915050565b5f60208284031215610e4c57610e4b610dd9565b5b5f610e5984828501610e23565b91505092915050565b610e6b81610dfc565b82525050565b5f604082019050610e845f830185610e62565b610e916020830184610e62565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610ecf82610be2565b9150610eda83610be2565b9250828202610ee881610be2565b91508282048414831517610eff57610efe610e98565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f610f3d82610be2565b9150610f4883610be2565b925082610f5857610f57610f06565b5b828204905092915050565b5f610f6d82610be2565b9150610f7883610be2565b9250828201905080821115610f9057610f8f610e98565b5b92915050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f610fda602083610f96565b9150610fe582610fa6565b602082019050919050565b5f6020820190508181035f83015261100781610fce565b9050919050565b5f8115159050919050565b6110228161100e565b82525050565b5f60208201905061103b5f830184611019565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f611075601f83610f96565b915061108082611041565b602082019050919050565b5f6020820190508181035f8301526110a281611069565b9050919050565b6110b281610be2565b82525050565b5f6020820190506110cb5f8301846110a9565b92915050565b60805160a051614d3861111c5f395f818161123701526118f601525f8181610dd301528181613789015281816138680152818161388f01528181613925015261394c0152614d385ff3fe60806040526004361061036e575f3560e01c80638da5cb5b116101c5578063bbc0c742116100f6578063dd62ed3e11610094578063f2fde38b1161006e578063f2fde38b14610c63578063f637434214610c8b578063f8b45b0514610cb5578063fbc10c5514610cdf57610375565b8063dd62ed3e14610bd3578063e2f4560514610c0f578063f11a24d314610c3957610375565b8063c18bc195116100d0578063c18bc19514610b1b578063c8c8ebe414610b43578063d257b34f14610b6d578063d85ba06314610ba957610375565b8063bbc0c74214610aa1578063c024666814610acb578063c17b5b8c14610af357610375565b80639fccce3211610163578063a457c2d71161013d578063a457c2d7146109c5578063a9059cbb14610a01578063aacebbe314610a3d578063b62496f514610a6557610375565b80639fccce321461095b578063a0d82dc514610985578063a0ef91df146109af57610375565b8063924de9b71161019f578063924de9b7146108b757806395d89b41146108df5780639a7a23d6146109095780639c3b4fdc1461093157610375565b80638da5cb5b146108395780638ea5220f14610863578063921369131461088d57610375565b806349bd5a5e1161029f578063715018a61161023d57806375f0a8741161021757806375f0a874146107a75780637bce5a04146107d15780638095d564146107fb5780638a8c523c1461082357610375565b8063715018a61461073f578063751039fc146107555780637571336a1461077f57610375565b80636303516c116102795780636303516c146106855780636a486a8e146106af5780636ddd1713146106d957806370a082311461070357610375565b806349bd5a5e146105f55780634a62bb651461061f5780634fbee1931461064957610375565b80631f3fed8f1161030c57806327c8f835116102e657806327c8f8351461054f57806330c74e0414610579578063313ce5671461058f57806339509351146105b957610375565b80631f3fed8f146104c1578063203e727e146104eb57806323b872dd1461051357610375565b80631694505e116103485780631694505e1461041b57806318160ddd146104455780631816467f1461046f5780631a8145bb1461049757610375565b806306fdde0314610379578063095ea7b3146103a357806310d5de53146103df57610375565b3661037557005b5f80fd5b348015610384575f80fd5b5061038d610d07565b60405161039a9190613a87565b60405180910390f35b3480156103ae575f80fd5b506103c960048036038101906103c49190613b38565b610d97565b6040516103d69190613b90565b60405180910390f35b3480156103ea575f80fd5b5061040560048036038101906104009190613ba9565b610db4565b6040516104129190613b90565b60405180910390f35b348015610426575f80fd5b5061042f610dd1565b60405161043c9190613c2f565b60405180910390f35b348015610450575f80fd5b50610459610df5565b6040516104669190613c57565b60405180910390f35b34801561047a575f80fd5b5061049560048036038101906104909190613ba9565b610dfe565b005b3480156104a2575f80fd5b506104ab610f38565b6040516104b89190613c57565b60405180910390f35b3480156104cc575f80fd5b506104d5610f3e565b6040516104e29190613c57565b60405180910390f35b3480156104f6575f80fd5b50610511600480360381019061050c9190613c70565b610f44565b005b34801561051e575f80fd5b5061053960048036038101906105349190613c9b565b611053565b6040516105469190613b90565b60405180910390f35b34801561055a575f80fd5b50610563611145565b6040516105709190613cfa565b60405180910390f35b348015610584575f80fd5b5061058d61114b565b005b34801561059a575f80fd5b506105a3611186565b6040516105b09190613d2e565b60405180910390f35b3480156105c4575f80fd5b506105df60048036038101906105da9190613b38565b61118e565b6040516105ec9190613b90565b60405180910390f35b348015610600575f80fd5b50610609611235565b6040516106169190613cfa565b60405180910390f35b34801561062a575f80fd5b50610633611259565b6040516106409190613b90565b60405180910390f35b348015610654575f80fd5b5061066f600480360381019061066a9190613ba9565b61126b565b60405161067c9190613b90565b60405180910390f35b348015610690575f80fd5b506106996112bd565b6040516106a69190613cfa565b60405180910390f35b3480156106ba575f80fd5b506106c36112e2565b6040516106d09190613c57565b60405180910390f35b3480156106e4575f80fd5b506106ed6112e8565b6040516106fa9190613b90565b60405180910390f35b34801561070e575f80fd5b5061072960048036038101906107249190613ba9565b6112fb565b6040516107369190613c57565b60405180910390f35b34801561074a575f80fd5b50610753611340565b005b348015610760575f80fd5b506107696113c7565b6040516107769190613b90565b60405180910390f35b34801561078a575f80fd5b506107a560048036038101906107a09190613d71565b611490565b005b3480156107b2575f80fd5b506107bb611564565b6040516107c89190613cfa565b60405180910390f35b3480156107dc575f80fd5b506107e5611589565b6040516107f29190613c57565b60405180910390f35b348015610806575f80fd5b50610821600480360381019061081c9190613daf565b61158f565b005b34801561082e575f80fd5b50610837611648565b005b348015610844575f80fd5b5061084d6116fc565b60405161085a9190613cfa565b60405180910390f35b34801561086e575f80fd5b50610877611724565b6040516108849190613cfa565b60405180910390f35b348015610898575f80fd5b506108a1611749565b6040516108ae9190613c57565b60405180910390f35b3480156108c2575f80fd5b506108dd60048036038101906108d89190613dff565b61174f565b005b3480156108ea575f80fd5b506108f36117e8565b6040516109009190613a87565b60405180910390f35b348015610914575f80fd5b5061092f600480360381019061092a9190613d71565b611878565b005b34801561093c575f80fd5b50610945611990565b6040516109529190613c57565b60405180910390f35b348015610966575f80fd5b5061096f611996565b60405161097c9190613c57565b60405180910390f35b348015610990575f80fd5b5061099961199c565b6040516109a69190613c57565b60405180910390f35b3480156109ba575f80fd5b506109c36119a2565b005b3480156109d0575f80fd5b506109eb60048036038101906109e69190613b38565b611a4b565b6040516109f89190613b90565b60405180910390f35b348015610a0c575f80fd5b50610a276004803603810190610a229190613b38565b611b31565b604051610a349190613b90565b60405180910390f35b348015610a48575f80fd5b50610a636004803603810190610a5e9190613ba9565b611b4e565b005b348015610a70575f80fd5b50610a8b6004803603810190610a869190613ba9565b611c88565b604051610a989190613b90565b60405180910390f35b348015610aac575f80fd5b50610ab5611ca5565b604051610ac29190613b90565b60405180910390f35b348015610ad6575f80fd5b50610af16004803603810190610aec9190613d71565b611cb8565b005b348015610afe575f80fd5b50610b196004803603810190610b149190613daf565b611dda565b005b348015610b26575f80fd5b50610b416004803603810190610b3c9190613c70565b611e93565b005b348015610b4e575f80fd5b50610b57611fa2565b604051610b649190613c57565b60405180910390f35b348015610b78575f80fd5b50610b936004803603810190610b8e9190613c70565b611fa8565b604051610ba09190613b90565b60405180910390f35b348015610bb4575f80fd5b50610bbd6120fc565b604051610bca9190613c57565b60405180910390f35b348015610bde575f80fd5b50610bf96004803603810190610bf49190613e2a565b612102565b604051610c069190613c57565b60405180910390f35b348015610c1a575f80fd5b50610c23612184565b604051610c309190613c57565b60405180910390f35b348015610c44575f80fd5b50610c4d61218a565b604051610c5a9190613c57565b60405180910390f35b348015610c6e575f80fd5b50610c896004803603810190610c849190613ba9565b612190565b005b348015610c96575f80fd5b50610c9f612286565b604051610cac9190613c57565b60405180910390f35b348015610cc0575f80fd5b50610cc961228c565b604051610cd69190613c57565b60405180910390f35b348015610cea575f80fd5b50610d056004803603810190610d009190613ba9565b612292565b005b606060038054610d1690613e95565b80601f0160208091040260200160405190810160405280929190818152602001828054610d4290613e95565b8015610d8d5780601f10610d6457610100808354040283529160200191610d8d565b820191905f5260205f20905b815481529060010190602001808311610d7057829003601f168201915b5050505050905090565b5f610daa610da36123cc565b84846123d3565b6001905092915050565b6019602052805f5260405f205f915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f600254905090565b610e066123cc565b73ffffffffffffffffffffffffffffffffffffffff16610e246116fc565b73ffffffffffffffffffffffffffffffffffffffff1614610e7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7190613f0f565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a38060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60165481565b60155481565b610f4c6123cc565b73ffffffffffffffffffffffffffffffffffffffff16610f6a6116fc565b73ffffffffffffffffffffffffffffffffffffffff1614610fc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb790613f0f565b60405180910390fd5b670de0b6b3a76400006103e86001610fd6610df5565b610fe09190613f5a565b610fea9190613fc8565b610ff49190613fc8565b811015611036576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102d90614068565b60405180910390fd5b670de0b6b3a76400008161104a9190613f5a565b60098190555050565b5f61105f848484612596565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6110a66123cc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611125576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111c906140f6565b60405180910390fd5b611139856111316123cc565b8584036123d3565b60019150509392505050565b61dead81565b5f611155306112fb565b90506111833060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612596565b50565b5f6012905090565b5f61122b61119a6123cc565b848460015f6111a76123cc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546112269190614114565b6123d3565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600c5f9054906101000a900460ff1681565b5f60185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b600c60029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6113486123cc565b73ffffffffffffffffffffffffffffffffffffffff166113666116fc565b73ffffffffffffffffffffffffffffffffffffffff16146113bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b390613f0f565b60405180910390fd5b6113c55f613026565b565b5f6113d06123cc565b73ffffffffffffffffffffffffffffffffffffffff166113ee6116fc565b73ffffffffffffffffffffffffffffffffffffffff1614611444576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143b90613f0f565b60405180910390fd5b5f600c5f6101000a81548160ff0219169083151502179055507f7bfa7bacf025baa75e5308bf15bcf2948f406c7ebe3eb1a8bb611862b9d647ef60405160405180910390a16001905090565b6114986123cc565b73ffffffffffffffffffffffffffffffffffffffff166114b66116fc565b73ffffffffffffffffffffffffffffffffffffffff161461150c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150390613f0f565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b6115976123cc565b73ffffffffffffffffffffffffffffffffffffffff166115b56116fc565b73ffffffffffffffffffffffffffffffffffffffff161461160b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160290613f0f565b60405180910390fd5b82600e8190555081600f8190555080601081905550601054600f54600e546116339190614114565b61163d9190614114565b600d81905550505050565b6116506123cc565b73ffffffffffffffffffffffffffffffffffffffff1661166e6116fc565b73ffffffffffffffffffffffffffffffffffffffff16146116c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116bb90613f0f565b60405180910390fd5b6001600c60016101000a81548160ff0219169083151502179055506001600c60026101000a81548160ff021916908315150217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60125481565b6117576123cc565b73ffffffffffffffffffffffffffffffffffffffff166117756116fc565b73ffffffffffffffffffffffffffffffffffffffff16146117cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c290613f0f565b60405180910390fd5b80600c60026101000a81548160ff02191690831515021790555050565b6060600480546117f790613e95565b80601f016020809104026020016040519081016040528092919081815260200182805461182390613e95565b801561186e5780601f106118455761010080835404028352916020019161186e565b820191905f5260205f20905b81548152906001019060200180831161185157829003601f168201915b5050505050905090565b6118806123cc565b73ffffffffffffffffffffffffffffffffffffffff1661189e6116fc565b73ffffffffffffffffffffffffffffffffffffffff16146118f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118eb90613f0f565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611982576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611979906141b7565b60405180910390fd5b61198c82826130e9565b5050565b60105481565b60175481565b60145481565b5f47116119e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119db9061421f565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f19350505050158015611a48573d5f803e3d5ffd5b50565b5f8060015f611a586123cc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611b12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b09906142ad565b60405180910390fd5b611b26611b1d6123cc565b858584036123d3565b600191505092915050565b5f611b44611b3d6123cc565b8484612596565b6001905092915050565b611b566123cc565b73ffffffffffffffffffffffffffffffffffffffff16611b746116fc565b73ffffffffffffffffffffffffffffffffffffffff1614611bca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc190613f0f565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a38060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601a602052805f5260405f205f915054906101000a900460ff1681565b600c60019054906101000a900460ff1681565b611cc06123cc565b73ffffffffffffffffffffffffffffffffffffffff16611cde6116fc565b73ffffffffffffffffffffffffffffffffffffffff1614611d34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2b90613f0f565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611dce9190613b90565b60405180910390a25050565b611de26123cc565b73ffffffffffffffffffffffffffffffffffffffff16611e006116fc565b73ffffffffffffffffffffffffffffffffffffffff1614611e56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4d90613f0f565b60405180910390fd5b826012819055508160138190555080601481905550601454601354601254611e7e9190614114565b611e889190614114565b601181905550505050565b611e9b6123cc565b73ffffffffffffffffffffffffffffffffffffffff16611eb96116fc565b73ffffffffffffffffffffffffffffffffffffffff1614611f0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0690613f0f565b60405180910390fd5b670de0b6b3a76400006103e86005611f25610df5565b611f2f9190613f5a565b611f399190613fc8565b611f439190613fc8565b811015611f85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7c9061433b565b60405180910390fd5b670de0b6b3a764000081611f999190613f5a565b600b8190555050565b60095481565b5f611fb16123cc565b73ffffffffffffffffffffffffffffffffffffffff16611fcf6116fc565b73ffffffffffffffffffffffffffffffffffffffff1614612025576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201c90613f0f565b60405180910390fd5b620186a06001612033610df5565b61203d9190613f5a565b6120479190613fc8565b821015612089576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612080906143c9565b60405180910390fd5b6103e86005612096610df5565b6120a09190613f5a565b6120aa9190613fc8565b8211156120ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e390614457565b60405180910390fd5b81600a8190555060019050919050565b600d5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600a5481565b600f5481565b6121986123cc565b73ffffffffffffffffffffffffffffffffffffffff166121b66116fc565b73ffffffffffffffffffffffffffffffffffffffff161461220c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220390613f0f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361227a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612271906144e5565b60405180910390fd5b61228381613026565b50565b60135481565b600b5481565b61229a6123cc565b73ffffffffffffffffffffffffffffffffffffffff166122b86116fc565b73ffffffffffffffffffffffffffffffffffffffff161461230e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230590613f0f565b60405180910390fd5b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8e4fb3162b55d3fcdb7507ecfed5ab4ea5d2bd7494d0bb621d698a52ea3f74b460405160405180910390a38060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612441576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243890614573565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036124af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a690614601565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516125899190613c57565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612604576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125fb9061468f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612672576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126699061471d565b60405180910390fd5b5f81036126895761268483835f613187565b613021565b600c5f9054906101000a900460ff1615612b6d576126a56116fc565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561271357506126e36116fc565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561274b57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612785575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561279e5750600560149054906101000a900460ff16155b15612b6c57600c60019054906101000a900460ff166128925760185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612852575060185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612891576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288890614785565b60405180910390fd5b5b601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561292f575060195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156129d657600954811115612979576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297090614813565b60405180910390fd5b600b54612985836112fb565b826129909190614114565b11156129d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c89061487b565b60405180910390fd5b612b6b565b601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612a73575060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612ac257600954811115612abd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab490614909565b60405180910390fd5b612b6a565b60195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612b6957600b54612b1c836112fb565b82612b279190614114565b1115612b68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5f9061487b565b60405180910390fd5b5b5b5b5b5b5f612b77306112fb565b90505f600a548210159050808015612b9b5750600c60029054906101000a900460ff165b8015612bb45750600560149054906101000a900460ff16155b8015612c075750601a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612c5a575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612cad575060185f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612cf0576001600560146101000a81548160ff021916908315150217905550612cd56133fc565b5f600560146101000a81548160ff0219169083151502179055505b5f600560149054906101000a900460ff1615905060185f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612d9f575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612da8575f90505b5f811561301157601a5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612e0657505f601154115b15612ed057612e336064612e25601154886136a390919063ffffffff16565b6136b890919063ffffffff16565b905060115460135482612e469190613f5a565b612e509190613fc8565b60165f828254612e609190614114565b9250508190555060115460145482612e789190613f5a565b612e829190613fc8565b60175f828254612e929190614114565b9250508190555060115460125482612eaa9190613f5a565b612eb49190613fc8565b60155f828254612ec49190614114565b92505081905550612fee565b601a5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612f2757505f600d54115b15612fed57612f546064612f46600d54886136a390919063ffffffff16565b6136b890919063ffffffff16565b9050600d54600f5482612f679190613f5a565b612f719190613fc8565b60165f828254612f819190614114565b92505081905550600d5460105482612f999190613f5a565b612fa39190613fc8565b60175f828254612fb39190614114565b92505081905550600d54600e5482612fcb9190613f5a565b612fd59190613fc8565b60155f828254612fe59190614114565b925050819055505b5b5f81111561300257613001873083613187565b5b808561300e9190614927565b94505b61301c878787613187565b505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036131f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131ec9061468f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613263576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161325a9061471d565b60405180910390fd5b61326e8383836136cd565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156132f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132e8906149ca565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461337f9190614114565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516133e39190613c57565b60405180910390a36133f68484846136d2565b50505050565b5f613406306112fb565b90505f60175460155460165461341c9190614114565b6134269190614114565b90505f8083148061343657505f82145b15613443575050506136a1565b5f600283601654866134559190613f5a565b61345f9190613fc8565b6134699190613fc8565b90505f61347f82866136d790919063ffffffff16565b90505f47905061348e826136ec565b5f6134a282476136d790919063ffffffff16565b90505f6134cc876134be601554856136a390919063ffffffff16565b6136b890919063ffffffff16565b90505f6134f6886134e8601754866136a390919063ffffffff16565b6136b890919063ffffffff16565b90505f8183856135069190614927565b6135109190614927565b90505f6016819055505f6015819055505f60178190555060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161356c90614a15565b5f6040518083038185875af1925050503d805f81146135a6576040519150601f19603f3d011682016040523d82523d5f602084013e6135ab565b606091505b5050809850505f871180156135bf57505f81115b1561360c576135ce878261391f565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561868260165460405161360393929190614a29565b60405180910390a15b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161365190614a15565b5f6040518083038185875af1925050503d805f811461368b576040519150601f19603f3d011682016040523d82523d5f602084013e613690565b606091505b505080985050505050505050505050505b565b5f81836136b09190613f5a565b905092915050565b5f81836136c59190613fc8565b905092915050565b505050565b505050565b5f81836136e49190614927565b905092915050565b5f600267ffffffffffffffff81111561370857613707614a5e565b5b6040519080825280602002602001820160405280156137365781602001602082028036833780820191505090505b50905030815f8151811061374d5761374c614a8b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156137f0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138149190614acc565b8160018151811061382857613827614a8b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061388d307f0000000000000000000000000000000000000000000000000000000000000000846123d3565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016138ee959493929190614be7565b5f604051808303815f87803b158015613905575f80fd5b505af1158015613917573d5f803e3d5ffd5b505050505050565b61394a307f0000000000000000000000000000000000000000000000000000000000000000846123d3565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016139cf96959493929190614c3f565b60606040518083038185885af11580156139eb573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190613a109190614cb2565b5050505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f613a5982613a17565b613a638185613a21565b9350613a73818560208601613a31565b613a7c81613a3f565b840191505092915050565b5f6020820190508181035f830152613a9f8184613a4f565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613ad482613aab565b9050919050565b613ae481613aca565b8114613aee575f80fd5b50565b5f81359050613aff81613adb565b92915050565b5f819050919050565b613b1781613b05565b8114613b21575f80fd5b50565b5f81359050613b3281613b0e565b92915050565b5f8060408385031215613b4e57613b4d613aa7565b5b5f613b5b85828601613af1565b9250506020613b6c85828601613b24565b9150509250929050565b5f8115159050919050565b613b8a81613b76565b82525050565b5f602082019050613ba35f830184613b81565b92915050565b5f60208284031215613bbe57613bbd613aa7565b5b5f613bcb84828501613af1565b91505092915050565b5f819050919050565b5f613bf7613bf2613bed84613aab565b613bd4565b613aab565b9050919050565b5f613c0882613bdd565b9050919050565b5f613c1982613bfe565b9050919050565b613c2981613c0f565b82525050565b5f602082019050613c425f830184613c20565b92915050565b613c5181613b05565b82525050565b5f602082019050613c6a5f830184613c48565b92915050565b5f60208284031215613c8557613c84613aa7565b5b5f613c9284828501613b24565b91505092915050565b5f805f60608486031215613cb257613cb1613aa7565b5b5f613cbf86828701613af1565b9350506020613cd086828701613af1565b9250506040613ce186828701613b24565b9150509250925092565b613cf481613aca565b82525050565b5f602082019050613d0d5f830184613ceb565b92915050565b5f60ff82169050919050565b613d2881613d13565b82525050565b5f602082019050613d415f830184613d1f565b92915050565b613d5081613b76565b8114613d5a575f80fd5b50565b5f81359050613d6b81613d47565b92915050565b5f8060408385031215613d8757613d86613aa7565b5b5f613d9485828601613af1565b9250506020613da585828601613d5d565b9150509250929050565b5f805f60608486031215613dc657613dc5613aa7565b5b5f613dd386828701613b24565b9350506020613de486828701613b24565b9250506040613df586828701613b24565b9150509250925092565b5f60208284031215613e1457613e13613aa7565b5b5f613e2184828501613d5d565b91505092915050565b5f8060408385031215613e4057613e3f613aa7565b5b5f613e4d85828601613af1565b9250506020613e5e85828601613af1565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613eac57607f821691505b602082108103613ebf57613ebe613e68565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613ef9602083613a21565b9150613f0482613ec5565b602082019050919050565b5f6020820190508181035f830152613f2681613eed565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613f6482613b05565b9150613f6f83613b05565b9250828202613f7d81613b05565b91508282048414831517613f9457613f93613f2d565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613fd282613b05565b9150613fdd83613b05565b925082613fed57613fec613f9b565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e74205f8201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b5f614052602f83613a21565b915061405d82613ff8565b604082019050919050565b5f6020820190508181035f83015261407f81614046565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f6140e0602883613a21565b91506140eb82614086565b604082019050919050565b5f6020820190508181035f83015261410d816140d4565b9050919050565b5f61411e82613b05565b915061412983613b05565b925082820190508082111561414157614140613f2d565b5b92915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f6141a1603983613a21565b91506141ac82614147565b604082019050919050565b5f6020820190508181035f8301526141ce81614195565b9050919050565b7f546f6b656e3a206e6f2045544820696e2074686520636f6e74726163740000005f82015250565b5f614209601d83613a21565b9150614214826141d5565b602082019050919050565b5f6020820190508181035f830152614236816141fd565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f614297602583613a21565b91506142a28261423d565b604082019050919050565b5f6020820190508181035f8301526142c48161428b565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b5f614325602483613a21565b9150614330826142cb565b604082019050919050565b5f6020820190508181035f83015261435281614319565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f6143b3603583613a21565b91506143be82614359565b604082019050919050565b5f6020820190508181035f8301526143e0816143a7565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f614441603483613a21565b915061444c826143e7565b604082019050919050565b5f6020820190508181035f83015261446e81614435565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6144cf602683613a21565b91506144da82614475565b604082019050919050565b5f6020820190508181035f8301526144fc816144c3565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f61455d602483613a21565b915061456882614503565b604082019050919050565b5f6020820190508181035f83015261458a81614551565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6145eb602283613a21565b91506145f682614591565b604082019050919050565b5f6020820190508181035f830152614618816145df565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f614679602583613a21565b91506146848261461f565b604082019050919050565b5f6020820190508181035f8301526146a68161466d565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f614707602383613a21565b9150614712826146ad565b604082019050919050565b5f6020820190508181035f830152614734816146fb565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f61476f601683613a21565b915061477a8261473b565b602082019050919050565b5f6020820190508181035f83015261479c81614763565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f6147fd603583613a21565b9150614808826147a3565b604082019050919050565b5f6020820190508181035f83015261482a816147f1565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f614865601383613a21565b915061487082614831565b602082019050919050565b5f6020820190508181035f83015261489281614859565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f6148f3603683613a21565b91506148fe82614899565b604082019050919050565b5f6020820190508181035f830152614920816148e7565b9050919050565b5f61493182613b05565b915061493c83613b05565b925082820390508181111561495457614953613f2d565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f6149b4602683613a21565b91506149bf8261495a565b604082019050919050565b5f6020820190508181035f8301526149e1816149a8565b9050919050565b5f81905092915050565b50565b5f614a005f836149e8565b9150614a0b826149f2565b5f82019050919050565b5f614a1f826149f5565b9150819050919050565b5f606082019050614a3c5f830186613c48565b614a496020830185613c48565b614a566040830184613c48565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050614ac681613adb565b92915050565b5f60208284031215614ae157614ae0613aa7565b5b5f614aee84828501614ab8565b91505092915050565b5f819050919050565b5f614b1a614b15614b1084614af7565b613bd4565b613b05565b9050919050565b614b2a81614b00565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b614b6281613aca565b82525050565b5f614b738383614b59565b60208301905092915050565b5f602082019050919050565b5f614b9582614b30565b614b9f8185614b3a565b9350614baa83614b4a565b805f5b83811015614bda578151614bc18882614b68565b9750614bcc83614b7f565b925050600181019050614bad565b5085935050505092915050565b5f60a082019050614bfa5f830188613c48565b614c076020830187614b21565b8181036040830152614c198186614b8b565b9050614c286060830185613ceb565b614c356080830184613c48565b9695505050505050565b5f60c082019050614c525f830189613ceb565b614c5f6020830188613c48565b614c6c6040830187614b21565b614c796060830186614b21565b614c866080830185613ceb565b614c9360a0830184613c48565b979650505050505050565b5f81519050614cac81613b0e565b92915050565b5f805f60608486031215614cc957614cc8613aa7565b5b5f614cd686828701614c9e565b9350506020614ce786828701614c9e565b9250506040614cf886828701614c9e565b915050925092509256fea2646970667358221220ac07fa06d4efba2a86000fecb61fabcd0b0c72affe25801cd729259bda5a75ad64736f6c634300081a0033

Deployed Bytecode

0x60806040526004361061036e575f3560e01c80638da5cb5b116101c5578063bbc0c742116100f6578063dd62ed3e11610094578063f2fde38b1161006e578063f2fde38b14610c63578063f637434214610c8b578063f8b45b0514610cb5578063fbc10c5514610cdf57610375565b8063dd62ed3e14610bd3578063e2f4560514610c0f578063f11a24d314610c3957610375565b8063c18bc195116100d0578063c18bc19514610b1b578063c8c8ebe414610b43578063d257b34f14610b6d578063d85ba06314610ba957610375565b8063bbc0c74214610aa1578063c024666814610acb578063c17b5b8c14610af357610375565b80639fccce3211610163578063a457c2d71161013d578063a457c2d7146109c5578063a9059cbb14610a01578063aacebbe314610a3d578063b62496f514610a6557610375565b80639fccce321461095b578063a0d82dc514610985578063a0ef91df146109af57610375565b8063924de9b71161019f578063924de9b7146108b757806395d89b41146108df5780639a7a23d6146109095780639c3b4fdc1461093157610375565b80638da5cb5b146108395780638ea5220f14610863578063921369131461088d57610375565b806349bd5a5e1161029f578063715018a61161023d57806375f0a8741161021757806375f0a874146107a75780637bce5a04146107d15780638095d564146107fb5780638a8c523c1461082357610375565b8063715018a61461073f578063751039fc146107555780637571336a1461077f57610375565b80636303516c116102795780636303516c146106855780636a486a8e146106af5780636ddd1713146106d957806370a082311461070357610375565b806349bd5a5e146105f55780634a62bb651461061f5780634fbee1931461064957610375565b80631f3fed8f1161030c57806327c8f835116102e657806327c8f8351461054f57806330c74e0414610579578063313ce5671461058f57806339509351146105b957610375565b80631f3fed8f146104c1578063203e727e146104eb57806323b872dd1461051357610375565b80631694505e116103485780631694505e1461041b57806318160ddd146104455780631816467f1461046f5780631a8145bb1461049757610375565b806306fdde0314610379578063095ea7b3146103a357806310d5de53146103df57610375565b3661037557005b5f80fd5b348015610384575f80fd5b5061038d610d07565b60405161039a9190613a87565b60405180910390f35b3480156103ae575f80fd5b506103c960048036038101906103c49190613b38565b610d97565b6040516103d69190613b90565b60405180910390f35b3480156103ea575f80fd5b5061040560048036038101906104009190613ba9565b610db4565b6040516104129190613b90565b60405180910390f35b348015610426575f80fd5b5061042f610dd1565b60405161043c9190613c2f565b60405180910390f35b348015610450575f80fd5b50610459610df5565b6040516104669190613c57565b60405180910390f35b34801561047a575f80fd5b5061049560048036038101906104909190613ba9565b610dfe565b005b3480156104a2575f80fd5b506104ab610f38565b6040516104b89190613c57565b60405180910390f35b3480156104cc575f80fd5b506104d5610f3e565b6040516104e29190613c57565b60405180910390f35b3480156104f6575f80fd5b50610511600480360381019061050c9190613c70565b610f44565b005b34801561051e575f80fd5b5061053960048036038101906105349190613c9b565b611053565b6040516105469190613b90565b60405180910390f35b34801561055a575f80fd5b50610563611145565b6040516105709190613cfa565b60405180910390f35b348015610584575f80fd5b5061058d61114b565b005b34801561059a575f80fd5b506105a3611186565b6040516105b09190613d2e565b60405180910390f35b3480156105c4575f80fd5b506105df60048036038101906105da9190613b38565b61118e565b6040516105ec9190613b90565b60405180910390f35b348015610600575f80fd5b50610609611235565b6040516106169190613cfa565b60405180910390f35b34801561062a575f80fd5b50610633611259565b6040516106409190613b90565b60405180910390f35b348015610654575f80fd5b5061066f600480360381019061066a9190613ba9565b61126b565b60405161067c9190613b90565b60405180910390f35b348015610690575f80fd5b506106996112bd565b6040516106a69190613cfa565b60405180910390f35b3480156106ba575f80fd5b506106c36112e2565b6040516106d09190613c57565b60405180910390f35b3480156106e4575f80fd5b506106ed6112e8565b6040516106fa9190613b90565b60405180910390f35b34801561070e575f80fd5b5061072960048036038101906107249190613ba9565b6112fb565b6040516107369190613c57565b60405180910390f35b34801561074a575f80fd5b50610753611340565b005b348015610760575f80fd5b506107696113c7565b6040516107769190613b90565b60405180910390f35b34801561078a575f80fd5b506107a560048036038101906107a09190613d71565b611490565b005b3480156107b2575f80fd5b506107bb611564565b6040516107c89190613cfa565b60405180910390f35b3480156107dc575f80fd5b506107e5611589565b6040516107f29190613c57565b60405180910390f35b348015610806575f80fd5b50610821600480360381019061081c9190613daf565b61158f565b005b34801561082e575f80fd5b50610837611648565b005b348015610844575f80fd5b5061084d6116fc565b60405161085a9190613cfa565b60405180910390f35b34801561086e575f80fd5b50610877611724565b6040516108849190613cfa565b60405180910390f35b348015610898575f80fd5b506108a1611749565b6040516108ae9190613c57565b60405180910390f35b3480156108c2575f80fd5b506108dd60048036038101906108d89190613dff565b61174f565b005b3480156108ea575f80fd5b506108f36117e8565b6040516109009190613a87565b60405180910390f35b348015610914575f80fd5b5061092f600480360381019061092a9190613d71565b611878565b005b34801561093c575f80fd5b50610945611990565b6040516109529190613c57565b60405180910390f35b348015610966575f80fd5b5061096f611996565b60405161097c9190613c57565b60405180910390f35b348015610990575f80fd5b5061099961199c565b6040516109a69190613c57565b60405180910390f35b3480156109ba575f80fd5b506109c36119a2565b005b3480156109d0575f80fd5b506109eb60048036038101906109e69190613b38565b611a4b565b6040516109f89190613b90565b60405180910390f35b348015610a0c575f80fd5b50610a276004803603810190610a229190613b38565b611b31565b604051610a349190613b90565b60405180910390f35b348015610a48575f80fd5b50610a636004803603810190610a5e9190613ba9565b611b4e565b005b348015610a70575f80fd5b50610a8b6004803603810190610a869190613ba9565b611c88565b604051610a989190613b90565b60405180910390f35b348015610aac575f80fd5b50610ab5611ca5565b604051610ac29190613b90565b60405180910390f35b348015610ad6575f80fd5b50610af16004803603810190610aec9190613d71565b611cb8565b005b348015610afe575f80fd5b50610b196004803603810190610b149190613daf565b611dda565b005b348015610b26575f80fd5b50610b416004803603810190610b3c9190613c70565b611e93565b005b348015610b4e575f80fd5b50610b57611fa2565b604051610b649190613c57565b60405180910390f35b348015610b78575f80fd5b50610b936004803603810190610b8e9190613c70565b611fa8565b604051610ba09190613b90565b60405180910390f35b348015610bb4575f80fd5b50610bbd6120fc565b604051610bca9190613c57565b60405180910390f35b348015610bde575f80fd5b50610bf96004803603810190610bf49190613e2a565b612102565b604051610c069190613c57565b60405180910390f35b348015610c1a575f80fd5b50610c23612184565b604051610c309190613c57565b60405180910390f35b348015610c44575f80fd5b50610c4d61218a565b604051610c5a9190613c57565b60405180910390f35b348015610c6e575f80fd5b50610c896004803603810190610c849190613ba9565b612190565b005b348015610c96575f80fd5b50610c9f612286565b604051610cac9190613c57565b60405180910390f35b348015610cc0575f80fd5b50610cc961228c565b604051610cd69190613c57565b60405180910390f35b348015610cea575f80fd5b50610d056004803603810190610d009190613ba9565b612292565b005b606060038054610d1690613e95565b80601f0160208091040260200160405190810160405280929190818152602001828054610d4290613e95565b8015610d8d5780601f10610d6457610100808354040283529160200191610d8d565b820191905f5260205f20905b815481529060010190602001808311610d7057829003601f168201915b5050505050905090565b5f610daa610da36123cc565b84846123d3565b6001905092915050565b6019602052805f5260405f205f915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f600254905090565b610e066123cc565b73ffffffffffffffffffffffffffffffffffffffff16610e246116fc565b73ffffffffffffffffffffffffffffffffffffffff1614610e7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7190613f0f565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a38060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60165481565b60155481565b610f4c6123cc565b73ffffffffffffffffffffffffffffffffffffffff16610f6a6116fc565b73ffffffffffffffffffffffffffffffffffffffff1614610fc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb790613f0f565b60405180910390fd5b670de0b6b3a76400006103e86001610fd6610df5565b610fe09190613f5a565b610fea9190613fc8565b610ff49190613fc8565b811015611036576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102d90614068565b60405180910390fd5b670de0b6b3a76400008161104a9190613f5a565b60098190555050565b5f61105f848484612596565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6110a66123cc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611125576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111c906140f6565b60405180910390fd5b611139856111316123cc565b8584036123d3565b60019150509392505050565b61dead81565b5f611155306112fb565b90506111833060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612596565b50565b5f6012905090565b5f61122b61119a6123cc565b848460015f6111a76123cc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546112269190614114565b6123d3565b6001905092915050565b7f00000000000000000000000057049a8003251542ca63dcbb3555c60c5e2df7f081565b600c5f9054906101000a900460ff1681565b5f60185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b600c60029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6113486123cc565b73ffffffffffffffffffffffffffffffffffffffff166113666116fc565b73ffffffffffffffffffffffffffffffffffffffff16146113bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b390613f0f565b60405180910390fd5b6113c55f613026565b565b5f6113d06123cc565b73ffffffffffffffffffffffffffffffffffffffff166113ee6116fc565b73ffffffffffffffffffffffffffffffffffffffff1614611444576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143b90613f0f565b60405180910390fd5b5f600c5f6101000a81548160ff0219169083151502179055507f7bfa7bacf025baa75e5308bf15bcf2948f406c7ebe3eb1a8bb611862b9d647ef60405160405180910390a16001905090565b6114986123cc565b73ffffffffffffffffffffffffffffffffffffffff166114b66116fc565b73ffffffffffffffffffffffffffffffffffffffff161461150c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150390613f0f565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b6115976123cc565b73ffffffffffffffffffffffffffffffffffffffff166115b56116fc565b73ffffffffffffffffffffffffffffffffffffffff161461160b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160290613f0f565b60405180910390fd5b82600e8190555081600f8190555080601081905550601054600f54600e546116339190614114565b61163d9190614114565b600d81905550505050565b6116506123cc565b73ffffffffffffffffffffffffffffffffffffffff1661166e6116fc565b73ffffffffffffffffffffffffffffffffffffffff16146116c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116bb90613f0f565b60405180910390fd5b6001600c60016101000a81548160ff0219169083151502179055506001600c60026101000a81548160ff021916908315150217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60125481565b6117576123cc565b73ffffffffffffffffffffffffffffffffffffffff166117756116fc565b73ffffffffffffffffffffffffffffffffffffffff16146117cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c290613f0f565b60405180910390fd5b80600c60026101000a81548160ff02191690831515021790555050565b6060600480546117f790613e95565b80601f016020809104026020016040519081016040528092919081815260200182805461182390613e95565b801561186e5780601f106118455761010080835404028352916020019161186e565b820191905f5260205f20905b81548152906001019060200180831161185157829003601f168201915b5050505050905090565b6118806123cc565b73ffffffffffffffffffffffffffffffffffffffff1661189e6116fc565b73ffffffffffffffffffffffffffffffffffffffff16146118f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118eb90613f0f565b60405180910390fd5b7f00000000000000000000000057049a8003251542ca63dcbb3555c60c5e2df7f073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611982576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611979906141b7565b60405180910390fd5b61198c82826130e9565b5050565b60105481565b60175481565b60145481565b5f47116119e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119db9061421f565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f19350505050158015611a48573d5f803e3d5ffd5b50565b5f8060015f611a586123cc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611b12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b09906142ad565b60405180910390fd5b611b26611b1d6123cc565b858584036123d3565b600191505092915050565b5f611b44611b3d6123cc565b8484612596565b6001905092915050565b611b566123cc565b73ffffffffffffffffffffffffffffffffffffffff16611b746116fc565b73ffffffffffffffffffffffffffffffffffffffff1614611bca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc190613f0f565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a38060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601a602052805f5260405f205f915054906101000a900460ff1681565b600c60019054906101000a900460ff1681565b611cc06123cc565b73ffffffffffffffffffffffffffffffffffffffff16611cde6116fc565b73ffffffffffffffffffffffffffffffffffffffff1614611d34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2b90613f0f565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611dce9190613b90565b60405180910390a25050565b611de26123cc565b73ffffffffffffffffffffffffffffffffffffffff16611e006116fc565b73ffffffffffffffffffffffffffffffffffffffff1614611e56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4d90613f0f565b60405180910390fd5b826012819055508160138190555080601481905550601454601354601254611e7e9190614114565b611e889190614114565b601181905550505050565b611e9b6123cc565b73ffffffffffffffffffffffffffffffffffffffff16611eb96116fc565b73ffffffffffffffffffffffffffffffffffffffff1614611f0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0690613f0f565b60405180910390fd5b670de0b6b3a76400006103e86005611f25610df5565b611f2f9190613f5a565b611f399190613fc8565b611f439190613fc8565b811015611f85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7c9061433b565b60405180910390fd5b670de0b6b3a764000081611f999190613f5a565b600b8190555050565b60095481565b5f611fb16123cc565b73ffffffffffffffffffffffffffffffffffffffff16611fcf6116fc565b73ffffffffffffffffffffffffffffffffffffffff1614612025576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201c90613f0f565b60405180910390fd5b620186a06001612033610df5565b61203d9190613f5a565b6120479190613fc8565b821015612089576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612080906143c9565b60405180910390fd5b6103e86005612096610df5565b6120a09190613f5a565b6120aa9190613fc8565b8211156120ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e390614457565b60405180910390fd5b81600a8190555060019050919050565b600d5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600a5481565b600f5481565b6121986123cc565b73ffffffffffffffffffffffffffffffffffffffff166121b66116fc565b73ffffffffffffffffffffffffffffffffffffffff161461220c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220390613f0f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361227a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612271906144e5565b60405180910390fd5b61228381613026565b50565b60135481565b600b5481565b61229a6123cc565b73ffffffffffffffffffffffffffffffffffffffff166122b86116fc565b73ffffffffffffffffffffffffffffffffffffffff161461230e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230590613f0f565b60405180910390fd5b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8e4fb3162b55d3fcdb7507ecfed5ab4ea5d2bd7494d0bb621d698a52ea3f74b460405160405180910390a38060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612441576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243890614573565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036124af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a690614601565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516125899190613c57565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612604576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125fb9061468f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612672576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126699061471d565b60405180910390fd5b5f81036126895761268483835f613187565b613021565b600c5f9054906101000a900460ff1615612b6d576126a56116fc565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561271357506126e36116fc565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561274b57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612785575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561279e5750600560149054906101000a900460ff16155b15612b6c57600c60019054906101000a900460ff166128925760185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612852575060185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612891576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288890614785565b60405180910390fd5b5b601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561292f575060195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156129d657600954811115612979576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297090614813565b60405180910390fd5b600b54612985836112fb565b826129909190614114565b11156129d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c89061487b565b60405180910390fd5b612b6b565b601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612a73575060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612ac257600954811115612abd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab490614909565b60405180910390fd5b612b6a565b60195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612b6957600b54612b1c836112fb565b82612b279190614114565b1115612b68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5f9061487b565b60405180910390fd5b5b5b5b5b5b5f612b77306112fb565b90505f600a548210159050808015612b9b5750600c60029054906101000a900460ff165b8015612bb45750600560149054906101000a900460ff16155b8015612c075750601a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612c5a575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612cad575060185f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612cf0576001600560146101000a81548160ff021916908315150217905550612cd56133fc565b5f600560146101000a81548160ff0219169083151502179055505b5f600560149054906101000a900460ff1615905060185f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612d9f575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612da8575f90505b5f811561301157601a5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612e0657505f601154115b15612ed057612e336064612e25601154886136a390919063ffffffff16565b6136b890919063ffffffff16565b905060115460135482612e469190613f5a565b612e509190613fc8565b60165f828254612e609190614114565b9250508190555060115460145482612e789190613f5a565b612e829190613fc8565b60175f828254612e929190614114565b9250508190555060115460125482612eaa9190613f5a565b612eb49190613fc8565b60155f828254612ec49190614114565b92505081905550612fee565b601a5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612f2757505f600d54115b15612fed57612f546064612f46600d54886136a390919063ffffffff16565b6136b890919063ffffffff16565b9050600d54600f5482612f679190613f5a565b612f719190613fc8565b60165f828254612f819190614114565b92505081905550600d5460105482612f999190613f5a565b612fa39190613fc8565b60175f828254612fb39190614114565b92505081905550600d54600e5482612fcb9190613f5a565b612fd59190613fc8565b60155f828254612fe59190614114565b925050819055505b5b5f81111561300257613001873083613187565b5b808561300e9190614927565b94505b61301c878787613187565b505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036131f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131ec9061468f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613263576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161325a9061471d565b60405180910390fd5b61326e8383836136cd565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156132f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132e8906149ca565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461337f9190614114565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516133e39190613c57565b60405180910390a36133f68484846136d2565b50505050565b5f613406306112fb565b90505f60175460155460165461341c9190614114565b6134269190614114565b90505f8083148061343657505f82145b15613443575050506136a1565b5f600283601654866134559190613f5a565b61345f9190613fc8565b6134699190613fc8565b90505f61347f82866136d790919063ffffffff16565b90505f47905061348e826136ec565b5f6134a282476136d790919063ffffffff16565b90505f6134cc876134be601554856136a390919063ffffffff16565b6136b890919063ffffffff16565b90505f6134f6886134e8601754866136a390919063ffffffff16565b6136b890919063ffffffff16565b90505f8183856135069190614927565b6135109190614927565b90505f6016819055505f6015819055505f60178190555060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161356c90614a15565b5f6040518083038185875af1925050503d805f81146135a6576040519150601f19603f3d011682016040523d82523d5f602084013e6135ab565b606091505b5050809850505f871180156135bf57505f81115b1561360c576135ce878261391f565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561868260165460405161360393929190614a29565b60405180910390a15b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161365190614a15565b5f6040518083038185875af1925050503d805f811461368b576040519150601f19603f3d011682016040523d82523d5f602084013e613690565b606091505b505080985050505050505050505050505b565b5f81836136b09190613f5a565b905092915050565b5f81836136c59190613fc8565b905092915050565b505050565b505050565b5f81836136e49190614927565b905092915050565b5f600267ffffffffffffffff81111561370857613707614a5e565b5b6040519080825280602002602001820160405280156137365781602001602082028036833780820191505090505b50905030815f8151811061374d5761374c614a8b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156137f0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138149190614acc565b8160018151811061382857613827614a8b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061388d307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846123d3565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016138ee959493929190614be7565b5f604051808303815f87803b158015613905575f80fd5b505af1158015613917573d5f803e3d5ffd5b505050505050565b61394a307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846123d3565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016139cf96959493929190614c3f565b60606040518083038185885af11580156139eb573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190613a109190614cb2565b5050505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f613a5982613a17565b613a638185613a21565b9350613a73818560208601613a31565b613a7c81613a3f565b840191505092915050565b5f6020820190508181035f830152613a9f8184613a4f565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613ad482613aab565b9050919050565b613ae481613aca565b8114613aee575f80fd5b50565b5f81359050613aff81613adb565b92915050565b5f819050919050565b613b1781613b05565b8114613b21575f80fd5b50565b5f81359050613b3281613b0e565b92915050565b5f8060408385031215613b4e57613b4d613aa7565b5b5f613b5b85828601613af1565b9250506020613b6c85828601613b24565b9150509250929050565b5f8115159050919050565b613b8a81613b76565b82525050565b5f602082019050613ba35f830184613b81565b92915050565b5f60208284031215613bbe57613bbd613aa7565b5b5f613bcb84828501613af1565b91505092915050565b5f819050919050565b5f613bf7613bf2613bed84613aab565b613bd4565b613aab565b9050919050565b5f613c0882613bdd565b9050919050565b5f613c1982613bfe565b9050919050565b613c2981613c0f565b82525050565b5f602082019050613c425f830184613c20565b92915050565b613c5181613b05565b82525050565b5f602082019050613c6a5f830184613c48565b92915050565b5f60208284031215613c8557613c84613aa7565b5b5f613c9284828501613b24565b91505092915050565b5f805f60608486031215613cb257613cb1613aa7565b5b5f613cbf86828701613af1565b9350506020613cd086828701613af1565b9250506040613ce186828701613b24565b9150509250925092565b613cf481613aca565b82525050565b5f602082019050613d0d5f830184613ceb565b92915050565b5f60ff82169050919050565b613d2881613d13565b82525050565b5f602082019050613d415f830184613d1f565b92915050565b613d5081613b76565b8114613d5a575f80fd5b50565b5f81359050613d6b81613d47565b92915050565b5f8060408385031215613d8757613d86613aa7565b5b5f613d9485828601613af1565b9250506020613da585828601613d5d565b9150509250929050565b5f805f60608486031215613dc657613dc5613aa7565b5b5f613dd386828701613b24565b9350506020613de486828701613b24565b9250506040613df586828701613b24565b9150509250925092565b5f60208284031215613e1457613e13613aa7565b5b5f613e2184828501613d5d565b91505092915050565b5f8060408385031215613e4057613e3f613aa7565b5b5f613e4d85828601613af1565b9250506020613e5e85828601613af1565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613eac57607f821691505b602082108103613ebf57613ebe613e68565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613ef9602083613a21565b9150613f0482613ec5565b602082019050919050565b5f6020820190508181035f830152613f2681613eed565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613f6482613b05565b9150613f6f83613b05565b9250828202613f7d81613b05565b91508282048414831517613f9457613f93613f2d565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613fd282613b05565b9150613fdd83613b05565b925082613fed57613fec613f9b565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e74205f8201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b5f614052602f83613a21565b915061405d82613ff8565b604082019050919050565b5f6020820190508181035f83015261407f81614046565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f6140e0602883613a21565b91506140eb82614086565b604082019050919050565b5f6020820190508181035f83015261410d816140d4565b9050919050565b5f61411e82613b05565b915061412983613b05565b925082820190508082111561414157614140613f2d565b5b92915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f6141a1603983613a21565b91506141ac82614147565b604082019050919050565b5f6020820190508181035f8301526141ce81614195565b9050919050565b7f546f6b656e3a206e6f2045544820696e2074686520636f6e74726163740000005f82015250565b5f614209601d83613a21565b9150614214826141d5565b602082019050919050565b5f6020820190508181035f830152614236816141fd565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f614297602583613a21565b91506142a28261423d565b604082019050919050565b5f6020820190508181035f8301526142c48161428b565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b5f614325602483613a21565b9150614330826142cb565b604082019050919050565b5f6020820190508181035f83015261435281614319565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f6143b3603583613a21565b91506143be82614359565b604082019050919050565b5f6020820190508181035f8301526143e0816143a7565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f614441603483613a21565b915061444c826143e7565b604082019050919050565b5f6020820190508181035f83015261446e81614435565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6144cf602683613a21565b91506144da82614475565b604082019050919050565b5f6020820190508181035f8301526144fc816144c3565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f61455d602483613a21565b915061456882614503565b604082019050919050565b5f6020820190508181035f83015261458a81614551565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6145eb602283613a21565b91506145f682614591565b604082019050919050565b5f6020820190508181035f830152614618816145df565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f614679602583613a21565b91506146848261461f565b604082019050919050565b5f6020820190508181035f8301526146a68161466d565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f614707602383613a21565b9150614712826146ad565b604082019050919050565b5f6020820190508181035f830152614734816146fb565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f61476f601683613a21565b915061477a8261473b565b602082019050919050565b5f6020820190508181035f83015261479c81614763565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f6147fd603583613a21565b9150614808826147a3565b604082019050919050565b5f6020820190508181035f83015261482a816147f1565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f614865601383613a21565b915061487082614831565b602082019050919050565b5f6020820190508181035f83015261489281614859565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f6148f3603683613a21565b91506148fe82614899565b604082019050919050565b5f6020820190508181035f830152614920816148e7565b9050919050565b5f61493182613b05565b915061493c83613b05565b925082820390508181111561495457614953613f2d565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f6149b4602683613a21565b91506149bf8261495a565b604082019050919050565b5f6020820190508181035f8301526149e1816149a8565b9050919050565b5f81905092915050565b50565b5f614a005f836149e8565b9150614a0b826149f2565b5f82019050919050565b5f614a1f826149f5565b9150819050919050565b5f606082019050614a3c5f830186613c48565b614a496020830185613c48565b614a566040830184613c48565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050614ac681613adb565b92915050565b5f60208284031215614ae157614ae0613aa7565b5b5f614aee84828501614ab8565b91505092915050565b5f819050919050565b5f614b1a614b15614b1084614af7565b613bd4565b613b05565b9050919050565b614b2a81614b00565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b614b6281613aca565b82525050565b5f614b738383614b59565b60208301905092915050565b5f602082019050919050565b5f614b9582614b30565b614b9f8185614b3a565b9350614baa83614b4a565b805f5b83811015614bda578151614bc18882614b68565b9750614bcc83614b7f565b925050600181019050614bad565b5085935050505092915050565b5f60a082019050614bfa5f830188613c48565b614c076020830187614b21565b8181036040830152614c198186614b8b565b9050614c286060830185613ceb565b614c356080830184613c48565b9695505050505050565b5f60c082019050614c525f830189613ceb565b614c5f6020830188613c48565b614c6c6040830187614b21565b614c796060830186614b21565b614c866080830185613ceb565b614c9360a0830184613c48565b979650505050505050565b5f81519050614cac81613b0e565b92915050565b5f805f60608486031215614cc957614cc8613aa7565b5b5f614cd686828701614c9e565b9350506020614ce786828701614c9e565b9250506040614cf886828701614c9e565b915050925092509256fea2646970667358221220ac07fa06d4efba2a86000fecb61fabcd0b0c72affe25801cd729259bda5a75ad64736f6c634300081a0033

Deployed Bytecode Sourcemap

12743:15482:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2704:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3759:210;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13886:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12816:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3025:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20838:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13670:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13630;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18128:275;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3977:529;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12919:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28068:154;;;;;;;;;;;;;:::i;:::-;;2924:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4514:297;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12874:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13226:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21003:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13079:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13485:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13305:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3141:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;714:103;;;;;;;;;;;;;:::i;:::-;;17401:152;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18675:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13011:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13378;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19046:332;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17237:112;;;;;;;;;;;;;:::i;:::-;;491:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13048:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13520:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18938:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2812:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19924:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13452:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13710:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13596:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27875:185;;;;;;;;;;;;;:::i;:::-;;4819:482;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3326:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20432:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14107:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13266:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19734:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19386:340;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18411:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13111:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17623:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13344:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3550:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13153:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13415:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;825:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13558:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13193:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20671:159;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2704:100;2758:13;2791:5;2784:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2704:100;:::o;3759:210::-;3878:4;3900:39;3909:12;:10;:12::i;:::-;3923:7;3932:6;3900:8;:39::i;:::-;3957:4;3950:11;;3759:210;;;;:::o;13886:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;12816:51::-;;;:::o;3025:108::-;3086:7;3113:12;;3106:19;;3025:108;:::o;20838:157::-;637:12;:10;:12::i;:::-;626:23;;:7;:5;:7::i;:::-;:23;;;618:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20945:9:::1;;;;;;;;;;;20917:38;;20934:9;20917:38;;;;;;;;;;;;20978:9;20966;;:21;;;;;;;;;;;;;;;;;;20838:157:::0;:::o;13670:33::-;;;;:::o;13630:::-;;;;:::o;18128:275::-;637:12;:10;:12::i;:::-;626:23;;:7;:5;:7::i;:::-;:23;;;618:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18265:4:::1;18257;18252:1;18236:13;:11;:13::i;:::-;:17;;;;:::i;:::-;18235:26;;;;:::i;:::-;18234:35;;;;:::i;:::-;18224:6;:45;;18202:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;18388:6;18378;:17;;;;:::i;:::-;18355:20;:40;;;;18128:275:::0;:::o;3977:529::-;4117:4;4134:36;4144:6;4152:9;4163:6;4134:9;:36::i;:::-;4183:24;4210:11;:19;4222:6;4210:19;;;;;;;;;;;;;;;:33;4230:12;:10;:12::i;:::-;4210:33;;;;;;;;;;;;;;;;4183:60;;4296:6;4276:16;:26;;4254:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;4406:57;4415:6;4423:12;:10;:12::i;:::-;4456:6;4437:16;:25;4406:8;:57::i;:::-;4494:4;4487:11;;;3977:529;;;;;:::o;12919:53::-;12965:6;12919:53;:::o;28068:154::-;28113:14;28130:24;28148:4;28130:9;:24::i;:::-;28113:41;;28165:49;28183:4;28190:15;;;;;;;;;;;28207:6;28165:9;:49::i;:::-;28102:120;28068:154::o;2924:93::-;2982:5;3007:2;3000:9;;2924:93;:::o;4514:297::-;4629:4;4651:130;4674:12;:10;:12::i;:::-;4701:7;4760:10;4723:11;:25;4735:12;:10;:12::i;:::-;4723:25;;;;;;;;;;;;;;;:34;4749:7;4723:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;4651:8;:130::i;:::-;4799:4;4792:11;;4514:297;;;;:::o;12874:38::-;;;:::o;13226:33::-;;;;;;;;;;;;;:::o;21003:126::-;21069:4;21093:19;:28;21113:7;21093:28;;;;;;;;;;;;;;;;;;;;;;;;;21086:35;;21003:126;;;:::o;13079:23::-;;;;;;;;;;;;;:::o;13485:28::-;;;;:::o;13305:30::-;;;;;;;;;;;;;:::o;3141:177::-;3260:7;3292:9;:18;3302:7;3292:18;;;;;;;;;;;;;;;;3285:25;;3141:177;;;:::o;714:103::-;637:12;:10;:12::i;:::-;626:23;;:7;:5;:7::i;:::-;:23;;;618:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;779:30:::1;806:1;779:18;:30::i;:::-;714:103::o:0;17401:152::-;17453:4;637:12;:10;:12::i;:::-;626:23;;:7;:5;:7::i;:::-;:23;;;618:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17487:5:::1;17470:14;;:22;;;;;;;;;;;;;;;;;;17508:15;;;;;;;;;;17541:4;17534:11;;17401:152:::0;:::o;18675:167::-;637:12;:10;:12::i;:::-;626:23;;:7;:5;:7::i;:::-;:23;;;618:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18830:4:::1;18788:31;:39;18820:6;18788:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;18675:167:::0;;:::o;13011:30::-;;;;;;;;;;;;;:::o;13378:::-;;;;:::o;19046:332::-;637:12;:10;:12::i;:::-;626:23;;:7;:5;:7::i;:::-;:23;;;618:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19214:13:::1;19196:15;:31;;;;19256:13;19238:15;:31;;;;19292:7;19280:9;:19;;;;19361:9;;19343:15;;19325;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;19310:12;:60;;;;19046:332:::0;;;:::o;17237:112::-;637:12;:10;:12::i;:::-;626:23;;:7;:5;:7::i;:::-;:23;;;618:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17308:4:::1;17292:13;;:20;;;;;;;;;;;;;;;;;;17337:4;17323:11;;:18;;;;;;;;;;;;;;;;;;17237:112::o:0;491:87::-;537:7;564:6;;;;;;;;;;;557:13;;491:87;:::o;13048:24::-;;;;;;;;;;;;;:::o;13520:31::-;;;;:::o;18938:100::-;637:12;:10;:12::i;:::-;626:23;;:7;:5;:7::i;:::-;:23;;;618:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19023:7:::1;19009:11;;:21;;;;;;;;;;;;;;;;;;18938:100:::0;:::o;2812:104::-;2868:13;2901:7;2894:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2812:104;:::o;19924:304::-;637:12;:10;:12::i;:::-;626:23;;:7;:5;:7::i;:::-;:23;;;618:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20068:13:::1;20060:21;;:4;:21;;::::0;20038:128:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;20179:41;20208:4;20214:5;20179:28;:41::i;:::-;19924:304:::0;;:::o;13452:24::-;;;;:::o;13710:27::-;;;;:::o;13596:25::-;;;;:::o;27875:185::-;27950:1;27926:21;:25;27918:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28004:15;;;;;;;;;;;27996:33;;:56;28030:21;27996:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27875:185::o;4819:482::-;4939:4;4961:24;4988:11;:25;5000:12;:10;:12::i;:::-;4988:25;;;;;;;;;;;;;;;:34;5014:7;4988:34;;;;;;;;;;;;;;;;4961:61;;5075:15;5055:16;:35;;5033:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;5191:67;5200:12;:10;:12::i;:::-;5214:7;5242:15;5223:16;:34;5191:8;:67::i;:::-;5289:4;5282:11;;;4819:482;;;;:::o;3326:216::-;3448:4;3470:42;3480:12;:10;:12::i;:::-;3494:9;3505:6;3470:9;:42::i;:::-;3530:4;3523:11;;3326:216;;;;:::o;20432:231::-;637:12;:10;:12::i;:::-;626:23;;:7;:5;:7::i;:::-;:23;;;618:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20592:15:::1;;;;;;;;;;;20549:59;;20572:18;20549:59;;;;;;;;;;;;20637:18;20619:15;;:36;;;;;;;;;;;;;;;;;;20432:231:::0;:::o;14107:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;13266:32::-;;;;;;;;;;;;;:::o;19734:182::-;637:12;:10;:12::i;:::-;626:23;;:7;:5;:7::i;:::-;:23;;;618:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19850:8:::1;19819:19;:28;19839:7;19819:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;19890:7;19874:34;;;19899:8;19874:34;;;;;;:::i;:::-;;;;;;;;19734:182:::0;;:::o;19386:340::-;637:12;:10;:12::i;:::-;626:23;;:7;:5;:7::i;:::-;:23;;;618:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19556:13:::1;19537:16;:32;;;;19599:13;19580:16;:32;;;;19636:7;19623:10;:20;;;;19708:10;;19689:16;;19670;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;19654:13;:64;;;;19386:340:::0;;;:::o;18411:256::-;637:12;:10;:12::i;:::-;626:23;;:7;:5;:7::i;:::-;:23;;;618:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18551:4:::1;18543;18538:1;18522:13;:11;:13::i;:::-;:17;;;;:::i;:::-;18521:26;;;;:::i;:::-;18520:35;;;;:::i;:::-;18510:6;:45;;18488:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;18652:6;18642;:17;;;;:::i;:::-;18630:9;:29;;;;18411:256:::0;:::o;13111:35::-;;;;:::o;17623:497::-;17731:4;637:12;:10;:12::i;:::-;626:23;;:7;:5;:7::i;:::-;:23;;;618:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17810:6:::1;17805:1;17789:13;:11;:13::i;:::-;:17;;;;:::i;:::-;17788:28;;;;:::i;:::-;17775:9;:41;;17753:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;17965:4;17960:1;17944:13;:11;:13::i;:::-;:17;;;;:::i;:::-;17943:26;;;;:::i;:::-;17930:9;:39;;17908:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;18081:9;18060:18;:30;;;;18108:4;18101:11;;17623:497:::0;;;:::o;13344:27::-;;;;:::o;3550:201::-;3684:7;3716:11;:18;3728:5;3716:18;;;;;;;;;;;;;;;:27;3735:7;3716:27;;;;;;;;;;;;;;;;3709:34;;3550:201;;;;:::o;13153:33::-;;;;:::o;13415:30::-;;;;:::o;825:238::-;637:12;:10;:12::i;:::-;626:23;;:7;:5;:7::i;:::-;:23;;;618:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;948:1:::1;928:22;;:8;:22;;::::0;906:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;1027:28;1046:8;1027:18;:28::i;:::-;825:238:::0;:::o;13558:31::-;;;;:::o;13193:24::-;;;;:::o;20671:159::-;637:12;:10;:12::i;:::-;626:23;;:7;:5;:7::i;:::-;:23;;;618:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20780:8:::1;;;;;;;;;;;20751:38;;20767:11;20751:38;;;;;;;;;;;;20811:11;20800:8;;:22;;;;;;;;;;;;;;;;;;20671:159:::0;:::o;121:98::-;174:7;201:10;194:17;;121:98;:::o;6494:380::-;6647:1;6630:19;;:5;:19;;;6622:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6728:1;6709:21;;:7;:21;;;6701:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6812:6;6782:11;:18;6794:5;6782:18;;;;;;;;;;;;;;;:27;6801:7;6782:27;;;;;;;;;;;;;;;:36;;;;6850:7;6834:32;;6843:5;6834:32;;;6859:6;6834:32;;;;;;:::i;:::-;;;;;;;;6494:380;;;:::o;21187:3924::-;21335:1;21319:18;;:4;:18;;;21311:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21412:1;21398:16;;:2;:16;;;21390:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;21481:1;21471:6;:11;21467:93;;21499:28;21515:4;21521:2;21525:1;21499:15;:28::i;:::-;21542:7;;21467:93;21576:14;;;;;;;;;;;21572:1694;;;21637:7;:5;:7::i;:::-;21629:15;;:4;:15;;;;:49;;;;;21671:7;:5;:7::i;:::-;21665:13;;:2;:13;;;;21629:49;:86;;;;;21713:1;21699:16;;:2;:16;;;;21629:86;:128;;;;;21750:6;21736:21;;:2;:21;;;;21629:128;:158;;;;;21779:8;;;;;;;;;;;21778:9;21629:158;21607:1648;;;21827:13;;;;;;;;;;;21822:223;;21899:19;:25;21919:4;21899:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;21928:19;:23;21948:2;21928:23;;;;;;;;;;;;;;;;;;;;;;;;;21899:52;21865:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;21822:223;22119:25;:31;22145:4;22119:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;22176:31;:35;22208:2;22176:35;;;;;;;;;;;;;;;;;;;;;;;;;22175:36;22119:92;22093:1147;;;22298:20;;22288:6;:30;;22254:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;22506:9;;22489:13;22499:2;22489:9;:13::i;:::-;22480:6;:22;;;;:::i;:::-;:35;;22446:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;22093:1147;;;22684:25;:29;22710:2;22684:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;22739:31;:37;22771:4;22739:37;;;;;;;;;;;;;;;;;;;;;;;;;22738:38;22684:92;22658:582;;;22863:20;;22853:6;:30;;22819:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;22658:582;;;23020:31;:35;23052:2;23020:35;;;;;;;;;;;;;;;;;;;;;;;;;23015:225;;23140:9;;23123:13;23133:2;23123:9;:13::i;:::-;23114:6;:22;;;;:::i;:::-;:35;;23080:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;23015:225;22658:582;22093:1147;21607:1648;21572:1694;23278:28;23309:24;23327:4;23309:9;:24::i;:::-;23278:55;;23346:12;23385:18;;23361:20;:42;;23346:57;;23434:7;:35;;;;;23458:11;;;;;;;;;;;23434:35;:61;;;;;23487:8;;;;;;;;;;;23486:9;23434:61;:110;;;;;23513:25;:31;23539:4;23513:31;;;;;;;;;;;;;;;;;;;;;;;;;23512:32;23434:110;:153;;;;;23562:19;:25;23582:4;23562:25;;;;;;;;;;;;;;;;;;;;;;;;;23561:26;23434:153;:194;;;;;23605:19;:23;23625:2;23605:23;;;;;;;;;;;;;;;;;;;;;;;;;23604:24;23434:194;23416:326;;;23666:4;23655:8;;:15;;;;;;;;;;;;;;;;;;23687:10;:8;:10::i;:::-;23725:5;23714:8;;:16;;;;;;;;;;;;;;;;;;23416:326;23754:12;23770:8;;;;;;;;;;;23769:9;23754:24;;23880:19;:25;23900:4;23880:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;23909:19;:23;23929:2;23909:23;;;;;;;;;;;;;;;;;;;;;;;;;23880:52;23876:100;;;23959:5;23949:15;;23876:100;23988:12;24093:7;24089:969;;;24145:25;:29;24171:2;24145:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;24194:1;24178:13;;:17;24145:50;24141:768;;;24223:34;24253:3;24223:25;24234:13;;24223:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;24216:41;;24326:13;;24306:16;;24299:4;:23;;;;:::i;:::-;24298:41;;;;:::i;:::-;24276:18;;:63;;;;;;;:::i;:::-;;;;;;;;24396:13;;24382:10;;24375:4;:17;;;;:::i;:::-;24374:35;;;;:::i;:::-;24358:12;;:51;;;;;;;:::i;:::-;;;;;;;;24478:13;;24458:16;;24451:4;:23;;;;:::i;:::-;24450:41;;;;:::i;:::-;24428:18;;:63;;;;;;;:::i;:::-;;;;;;;;24141:768;;;24553:25;:31;24579:4;24553:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;24603:1;24588:12;;:16;24553:51;24549:360;;;24632:33;24661:3;24632:24;24643:12;;24632:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;24625:40;;24733:12;;24714:15;;24707:4;:22;;;;:::i;:::-;24706:39;;;;:::i;:::-;24684:18;;:61;;;;;;;:::i;:::-;;;;;;;;24801:12;;24788:9;;24781:4;:16;;;;:::i;:::-;24780:33;;;;:::i;:::-;24764:12;;:49;;;;;;;:::i;:::-;;;;;;;;24881:12;;24862:15;;24855:4;:22;;;;:::i;:::-;24854:39;;;;:::i;:::-;24832:18;;:61;;;;;;;:::i;:::-;;;;;;;;24549:360;24141:768;24936:1;24929:4;:8;24925:91;;;24958:42;24974:4;24988;24995;24958:15;:42::i;:::-;24925:91;25042:4;25032:14;;;;;:::i;:::-;;;24089:969;25070:33;25086:4;25092:2;25096:6;25070:15;:33::i;:::-;21300:3811;;;;21187:3924;;;;:::o;1071:191::-;1145:16;1164:6;;;;;;;;;;;1145:25;;1190:8;1181:6;;:17;;;;;;;;;;;;;;;;;;1245:8;1214:40;;1235:8;1214:40;;;;;;;;;;;;1134:128;1071:191;:::o;20236:188::-;20353:5;20319:25;:31;20345:4;20319:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;20410:5;20376:40;;20404:4;20376:40;;;;;;;;;;;;20236:188;;:::o;5309:770::-;5467:1;5449:20;;:6;:20;;;5441:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;5551:1;5530:23;;:9;:23;;;5522:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;5606:47;5627:6;5635:9;5646:6;5606:20;:47::i;:::-;5666:21;5690:9;:17;5700:6;5690:17;;;;;;;;;;;;;;;;5666:41;;5757:6;5740:13;:23;;5718:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;5901:6;5885:13;:22;5865:9;:17;5875:6;5865:17;;;;;;;;;;;;;;;:42;;;;5953:6;5929:9;:20;5939:9;5929:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;5994:9;5977:35;;5986:6;5977:35;;;6005:6;5977:35;;;;;;:::i;:::-;;;;;;;;6025:46;6045:6;6053:9;6064:6;6025:19;:46::i;:::-;5430:649;5309:770;;;:::o;26238:1629::-;26277:23;26303:24;26321:4;26303:9;:24::i;:::-;26277:50;;26338:25;26434:12;;26400:18;;26366;;:52;;;;:::i;:::-;:80;;;;:::i;:::-;26338:108;;26457:12;26505:1;26486:15;:20;:46;;;;26531:1;26510:17;:22;26486:46;26482:85;;;26549:7;;;;;26482:85;26628:23;26741:1;26708:17;26673:18;;26655:15;:36;;;;:::i;:::-;26654:71;;;;:::i;:::-;:88;;;;:::i;:::-;26628:114;;26753:26;26782:36;26802:15;26782;:19;;:36;;;;:::i;:::-;26753:65;;26831:25;26859:21;26831:49;;26893:36;26910:18;26893:16;:36::i;:::-;26942:18;26963:44;26989:17;26963:21;:25;;:44;;;;:::i;:::-;26942:65;;27020:23;27046:81;27099:17;27046:34;27061:18;;27046:10;:14;;:34;;;;:::i;:::-;:38;;:81;;;;:::i;:::-;27020:107;;27138:17;27158:51;27191:17;27158:28;27173:12;;27158:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;27138:71;;27222:23;27279:9;27261:15;27248:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;27222:66;;27322:1;27301:18;:22;;;;27355:1;27334:18;:22;;;;27382:1;27367:12;:16;;;;27418:9;;;;;;;;;;;27410:23;;27441:9;27410:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27396:59;;;;;27490:1;27472:15;:19;:42;;;;;27513:1;27495:15;:19;27472:42;27468:278;;;27531:46;27544:15;27561;27531:12;:46::i;:::-;27597:137;27630:18;27667:15;27701:18;;27597:137;;;;;;;;:::i;:::-;;;;;;;;27468:278;27780:15;;;;;;;;;;;27772:29;;27823:21;27772:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27758:101;;;;;26266:1601;;;;;;;;;;26238:1629;:::o;7276:98::-;7334:7;7365:1;7361;:5;;;;:::i;:::-;7354:12;;7276:98;;;;:::o;7382:::-;7440:7;7471:1;7467;:5;;;;:::i;:::-;7460:12;;7382:98;;;;:::o;6882:125::-;;;;:::o;7015:124::-;;;;:::o;7170:98::-;7228:7;7259:1;7255;:5;;;;:::i;:::-;7248:12;;7170:98;;;;:::o;25119:589::-;25245:21;25283:1;25269:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25245:40;;25314:4;25296;25301:1;25296:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;25340:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25330:4;25335:1;25330:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;25375:62;25392:4;25407:15;25425:11;25375:8;:62::i;:::-;25476:15;:66;;;25557:11;25583:1;25627:4;25654;25674:15;25476:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25174:534;25119:589;:::o;25716:514::-;25864:62;25881:4;25896:15;25914:11;25864:8;:62::i;:::-;25969:15;:31;;;26008:9;26041:4;26061:11;26087:1;26130;26173:8;;;;;;;;;;;26196:15;25969:253;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;25716:514;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:139::-;376:6;371:3;366;360:23;417:1;408:6;403:3;399:16;392:27;287:139;;;:::o;432:102::-;473:6;524:2;520:7;515:2;508:5;504:14;500:28;490:38;;432:102;;;:::o;540:377::-;628:3;656:39;689:5;656:39;:::i;:::-;711:71;775:6;770:3;711:71;:::i;:::-;704:78;;791:65;849:6;844:3;837:4;830:5;826:16;791:65;:::i;:::-;881:29;903:6;881:29;:::i;:::-;876:3;872:39;865:46;;632:285;540:377;;;;:::o;923:313::-;1036:4;1074:2;1063:9;1059:18;1051:26;;1123:9;1117:4;1113:20;1109:1;1098:9;1094:17;1087:47;1151:78;1224:4;1215:6;1151:78;:::i;:::-;1143:86;;923:313;;;;:::o;1323:117::-;1432:1;1429;1422:12;1569:126;1606:7;1646:42;1639:5;1635:54;1624:65;;1569:126;;;:::o;1701:96::-;1738:7;1767:24;1785:5;1767:24;:::i;:::-;1756:35;;1701:96;;;:::o;1803:122::-;1876:24;1894:5;1876:24;:::i;:::-;1869:5;1866:35;1856:63;;1915:1;1912;1905:12;1856:63;1803:122;:::o;1931:139::-;1977:5;2015:6;2002:20;1993:29;;2031:33;2058:5;2031:33;:::i;:::-;1931:139;;;;:::o;2076:77::-;2113:7;2142:5;2131:16;;2076:77;;;:::o;2159:122::-;2232:24;2250:5;2232:24;:::i;:::-;2225:5;2222:35;2212:63;;2271:1;2268;2261:12;2212:63;2159:122;:::o;2287:139::-;2333:5;2371:6;2358:20;2349:29;;2387:33;2414:5;2387:33;:::i;:::-;2287:139;;;;:::o;2432:474::-;2500:6;2508;2557:2;2545:9;2536:7;2532:23;2528:32;2525:119;;;2563:79;;:::i;:::-;2525:119;2683:1;2708:53;2753:7;2744:6;2733:9;2729:22;2708:53;:::i;:::-;2698:63;;2654:117;2810:2;2836:53;2881:7;2872:6;2861:9;2857:22;2836:53;:::i;:::-;2826:63;;2781:118;2432:474;;;;;:::o;2912:90::-;2946:7;2989:5;2982:13;2975:21;2964:32;;2912:90;;;:::o;3008:109::-;3089:21;3104:5;3089:21;:::i;:::-;3084:3;3077:34;3008:109;;:::o;3123:210::-;3210:4;3248:2;3237:9;3233:18;3225:26;;3261:65;3323:1;3312:9;3308:17;3299:6;3261:65;:::i;:::-;3123:210;;;;:::o;3339:329::-;3398:6;3447:2;3435:9;3426:7;3422:23;3418:32;3415:119;;;3453:79;;:::i;:::-;3415:119;3573:1;3598:53;3643:7;3634:6;3623:9;3619:22;3598:53;:::i;:::-;3588:63;;3544:117;3339:329;;;;:::o;3674:60::-;3702:3;3723:5;3716:12;;3674:60;;;:::o;3740:142::-;3790:9;3823:53;3841:34;3850:24;3868:5;3850:24;:::i;:::-;3841:34;:::i;:::-;3823:53;:::i;:::-;3810:66;;3740:142;;;:::o;3888:126::-;3938:9;3971:37;4002:5;3971:37;:::i;:::-;3958:50;;3888:126;;;:::o;4020:153::-;4097:9;4130:37;4161:5;4130:37;:::i;:::-;4117:50;;4020:153;;;:::o;4179:185::-;4293:64;4351:5;4293:64;:::i;:::-;4288:3;4281:77;4179:185;;:::o;4370:276::-;4490:4;4528:2;4517:9;4513:18;4505:26;;4541:98;4636:1;4625:9;4621:17;4612:6;4541:98;:::i;:::-;4370:276;;;;:::o;4652:118::-;4739:24;4757:5;4739:24;:::i;:::-;4734:3;4727:37;4652:118;;:::o;4776:222::-;4869:4;4907:2;4896:9;4892:18;4884:26;;4920:71;4988:1;4977:9;4973:17;4964:6;4920:71;:::i;:::-;4776:222;;;;:::o;5004:329::-;5063:6;5112:2;5100:9;5091:7;5087:23;5083:32;5080:119;;;5118:79;;:::i;:::-;5080:119;5238:1;5263:53;5308:7;5299:6;5288:9;5284:22;5263:53;:::i;:::-;5253:63;;5209:117;5004:329;;;;:::o;5339:619::-;5416:6;5424;5432;5481:2;5469:9;5460:7;5456:23;5452:32;5449:119;;;5487:79;;:::i;:::-;5449:119;5607:1;5632:53;5677:7;5668:6;5657:9;5653:22;5632:53;:::i;:::-;5622:63;;5578:117;5734:2;5760:53;5805:7;5796:6;5785:9;5781:22;5760:53;:::i;:::-;5750:63;;5705:118;5862:2;5888:53;5933:7;5924:6;5913:9;5909:22;5888:53;:::i;:::-;5878:63;;5833:118;5339:619;;;;;:::o;5964:118::-;6051:24;6069:5;6051:24;:::i;:::-;6046:3;6039:37;5964:118;;:::o;6088:222::-;6181:4;6219:2;6208:9;6204:18;6196:26;;6232:71;6300:1;6289:9;6285:17;6276:6;6232:71;:::i;:::-;6088:222;;;;:::o;6316:86::-;6351:7;6391:4;6384:5;6380:16;6369:27;;6316:86;;;:::o;6408:112::-;6491:22;6507:5;6491:22;:::i;:::-;6486:3;6479:35;6408:112;;:::o;6526:214::-;6615:4;6653:2;6642:9;6638:18;6630:26;;6666:67;6730:1;6719:9;6715:17;6706:6;6666:67;:::i;:::-;6526:214;;;;:::o;6746:116::-;6816:21;6831:5;6816:21;:::i;:::-;6809:5;6806:32;6796:60;;6852:1;6849;6842:12;6796:60;6746:116;:::o;6868:133::-;6911:5;6949:6;6936:20;6927:29;;6965:30;6989:5;6965:30;:::i;:::-;6868:133;;;;:::o;7007:468::-;7072:6;7080;7129:2;7117:9;7108:7;7104:23;7100:32;7097:119;;;7135:79;;:::i;:::-;7097:119;7255:1;7280:53;7325:7;7316:6;7305:9;7301:22;7280:53;:::i;:::-;7270:63;;7226:117;7382:2;7408:50;7450:7;7441:6;7430:9;7426:22;7408:50;:::i;:::-;7398:60;;7353:115;7007:468;;;;;:::o;7481:619::-;7558:6;7566;7574;7623:2;7611:9;7602:7;7598:23;7594:32;7591:119;;;7629:79;;:::i;:::-;7591:119;7749:1;7774:53;7819:7;7810:6;7799:9;7795:22;7774:53;:::i;:::-;7764:63;;7720:117;7876:2;7902:53;7947:7;7938:6;7927:9;7923:22;7902:53;:::i;:::-;7892:63;;7847:118;8004:2;8030:53;8075:7;8066:6;8055:9;8051:22;8030:53;:::i;:::-;8020:63;;7975:118;7481:619;;;;;:::o;8106:323::-;8162:6;8211:2;8199:9;8190:7;8186:23;8182:32;8179:119;;;8217:79;;:::i;:::-;8179:119;8337:1;8362:50;8404:7;8395:6;8384:9;8380:22;8362:50;:::i;:::-;8352:60;;8308:114;8106:323;;;;:::o;8435:474::-;8503:6;8511;8560:2;8548:9;8539:7;8535:23;8531:32;8528:119;;;8566:79;;:::i;:::-;8528:119;8686:1;8711:53;8756:7;8747:6;8736:9;8732:22;8711:53;:::i;:::-;8701:63;;8657:117;8813:2;8839:53;8884:7;8875:6;8864:9;8860:22;8839:53;:::i;:::-;8829:63;;8784:118;8435:474;;;;;:::o;8915:180::-;8963:77;8960:1;8953:88;9060:4;9057:1;9050:15;9084:4;9081:1;9074:15;9101:320;9145:6;9182:1;9176:4;9172:12;9162:22;;9229:1;9223:4;9219:12;9250:18;9240:81;;9306:4;9298:6;9294:17;9284:27;;9240:81;9368:2;9360:6;9357:14;9337:18;9334:38;9331:84;;9387:18;;:::i;:::-;9331:84;9152:269;9101:320;;;:::o;9427:182::-;9567:34;9563:1;9555:6;9551:14;9544:58;9427:182;:::o;9615:366::-;9757:3;9778:67;9842:2;9837:3;9778:67;:::i;:::-;9771:74;;9854:93;9943:3;9854:93;:::i;:::-;9972:2;9967:3;9963:12;9956:19;;9615:366;;;:::o;9987:419::-;10153:4;10191:2;10180:9;10176:18;10168:26;;10240:9;10234:4;10230:20;10226:1;10215:9;10211:17;10204:47;10268:131;10394:4;10268:131;:::i;:::-;10260:139;;9987:419;;;:::o;10412:180::-;10460:77;10457:1;10450:88;10557:4;10554:1;10547:15;10581:4;10578:1;10571:15;10598:410;10638:7;10661:20;10679:1;10661:20;:::i;:::-;10656:25;;10695:20;10713:1;10695:20;:::i;:::-;10690:25;;10750:1;10747;10743:9;10772:30;10790:11;10772:30;:::i;:::-;10761:41;;10951:1;10942:7;10938:15;10935:1;10932:22;10912:1;10905:9;10885:83;10862:139;;10981:18;;:::i;:::-;10862:139;10646:362;10598:410;;;;:::o;11014:180::-;11062:77;11059:1;11052:88;11159:4;11156:1;11149:15;11183:4;11180:1;11173:15;11200:185;11240:1;11257:20;11275:1;11257:20;:::i;:::-;11252:25;;11291:20;11309:1;11291:20;:::i;:::-;11286:25;;11330:1;11320:35;;11335:18;;:::i;:::-;11320:35;11377:1;11374;11370:9;11365:14;;11200:185;;;;:::o;11391:234::-;11531:34;11527:1;11519:6;11515:14;11508:58;11600:17;11595:2;11587:6;11583:15;11576:42;11391:234;:::o;11631:366::-;11773:3;11794:67;11858:2;11853:3;11794:67;:::i;:::-;11787:74;;11870:93;11959:3;11870:93;:::i;:::-;11988:2;11983:3;11979:12;11972:19;;11631:366;;;:::o;12003:419::-;12169:4;12207:2;12196:9;12192:18;12184:26;;12256:9;12250:4;12246:20;12242:1;12231:9;12227:17;12220:47;12284:131;12410:4;12284:131;:::i;:::-;12276:139;;12003:419;;;:::o;12428:227::-;12568:34;12564:1;12556:6;12552:14;12545:58;12637:10;12632:2;12624:6;12620:15;12613:35;12428:227;:::o;12661:366::-;12803:3;12824:67;12888:2;12883:3;12824:67;:::i;:::-;12817:74;;12900:93;12989:3;12900:93;:::i;:::-;13018:2;13013:3;13009:12;13002:19;;12661:366;;;:::o;13033:419::-;13199:4;13237:2;13226:9;13222:18;13214:26;;13286:9;13280:4;13276:20;13272:1;13261:9;13257:17;13250:47;13314:131;13440:4;13314:131;:::i;:::-;13306:139;;13033:419;;;:::o;13458:191::-;13498:3;13517:20;13535:1;13517:20;:::i;:::-;13512:25;;13551:20;13569:1;13551:20;:::i;:::-;13546:25;;13594:1;13591;13587:9;13580:16;;13615:3;13612:1;13609:10;13606:36;;;13622:18;;:::i;:::-;13606:36;13458:191;;;;:::o;13655:244::-;13795:34;13791:1;13783:6;13779:14;13772:58;13864:27;13859:2;13851:6;13847:15;13840:52;13655:244;:::o;13905:366::-;14047:3;14068:67;14132:2;14127:3;14068:67;:::i;:::-;14061:74;;14144:93;14233:3;14144:93;:::i;:::-;14262:2;14257:3;14253:12;14246:19;;13905:366;;;:::o;14277:419::-;14443:4;14481:2;14470:9;14466:18;14458:26;;14530:9;14524:4;14520:20;14516:1;14505:9;14501:17;14494:47;14558:131;14684:4;14558:131;:::i;:::-;14550:139;;14277:419;;;:::o;14702:179::-;14842:31;14838:1;14830:6;14826:14;14819:55;14702:179;:::o;14887:366::-;15029:3;15050:67;15114:2;15109:3;15050:67;:::i;:::-;15043:74;;15126:93;15215:3;15126:93;:::i;:::-;15244:2;15239:3;15235:12;15228:19;;14887:366;;;:::o;15259:419::-;15425:4;15463:2;15452:9;15448:18;15440:26;;15512:9;15506:4;15502:20;15498:1;15487:9;15483:17;15476:47;15540:131;15666:4;15540:131;:::i;:::-;15532:139;;15259:419;;;:::o;15684:224::-;15824:34;15820:1;15812:6;15808:14;15801:58;15893:7;15888:2;15880:6;15876:15;15869:32;15684:224;:::o;15914:366::-;16056:3;16077:67;16141:2;16136:3;16077:67;:::i;:::-;16070:74;;16153:93;16242:3;16153:93;:::i;:::-;16271:2;16266:3;16262:12;16255:19;;15914:366;;;:::o;16286:419::-;16452:4;16490:2;16479:9;16475:18;16467:26;;16539:9;16533:4;16529:20;16525:1;16514:9;16510:17;16503:47;16567:131;16693:4;16567:131;:::i;:::-;16559:139;;16286:419;;;:::o;16711:223::-;16851:34;16847:1;16839:6;16835:14;16828:58;16920:6;16915:2;16907:6;16903:15;16896:31;16711:223;:::o;16940:366::-;17082:3;17103:67;17167:2;17162:3;17103:67;:::i;:::-;17096:74;;17179:93;17268:3;17179:93;:::i;:::-;17297:2;17292:3;17288:12;17281:19;;16940:366;;;:::o;17312:419::-;17478:4;17516:2;17505:9;17501:18;17493:26;;17565:9;17559:4;17555:20;17551:1;17540:9;17536:17;17529:47;17593:131;17719:4;17593:131;:::i;:::-;17585:139;;17312:419;;;:::o;17737:240::-;17877:34;17873:1;17865:6;17861:14;17854:58;17946:23;17941:2;17933:6;17929:15;17922:48;17737:240;:::o;17983:366::-;18125:3;18146:67;18210:2;18205:3;18146:67;:::i;:::-;18139:74;;18222:93;18311:3;18222:93;:::i;:::-;18340:2;18335:3;18331:12;18324:19;;17983:366;;;:::o;18355:419::-;18521:4;18559:2;18548:9;18544:18;18536:26;;18608:9;18602:4;18598:20;18594:1;18583:9;18579:17;18572:47;18636:131;18762:4;18636:131;:::i;:::-;18628:139;;18355:419;;;:::o;18780:239::-;18920:34;18916:1;18908:6;18904:14;18897:58;18989:22;18984:2;18976:6;18972:15;18965:47;18780:239;:::o;19025:366::-;19167:3;19188:67;19252:2;19247:3;19188:67;:::i;:::-;19181:74;;19264:93;19353:3;19264:93;:::i;:::-;19382:2;19377:3;19373:12;19366:19;;19025:366;;;:::o;19397:419::-;19563:4;19601:2;19590:9;19586:18;19578:26;;19650:9;19644:4;19640:20;19636:1;19625:9;19621:17;19614:47;19678:131;19804:4;19678:131;:::i;:::-;19670:139;;19397:419;;;:::o;19822:225::-;19962:34;19958:1;19950:6;19946:14;19939:58;20031:8;20026:2;20018:6;20014:15;20007:33;19822:225;:::o;20053:366::-;20195:3;20216:67;20280:2;20275:3;20216:67;:::i;:::-;20209:74;;20292:93;20381:3;20292:93;:::i;:::-;20410:2;20405:3;20401:12;20394:19;;20053:366;;;:::o;20425:419::-;20591:4;20629:2;20618:9;20614:18;20606:26;;20678:9;20672:4;20668:20;20664:1;20653:9;20649:17;20642:47;20706:131;20832:4;20706:131;:::i;:::-;20698:139;;20425:419;;;:::o;20850:223::-;20990:34;20986:1;20978:6;20974:14;20967:58;21059:6;21054:2;21046:6;21042:15;21035:31;20850:223;:::o;21079:366::-;21221:3;21242:67;21306:2;21301:3;21242:67;:::i;:::-;21235:74;;21318:93;21407:3;21318:93;:::i;:::-;21436:2;21431:3;21427:12;21420:19;;21079:366;;;:::o;21451:419::-;21617:4;21655:2;21644:9;21640:18;21632:26;;21704:9;21698:4;21694:20;21690:1;21679:9;21675:17;21668:47;21732:131;21858:4;21732:131;:::i;:::-;21724:139;;21451:419;;;:::o;21876:221::-;22016:34;22012:1;22004:6;22000:14;21993:58;22085:4;22080:2;22072:6;22068:15;22061:29;21876:221;:::o;22103:366::-;22245:3;22266:67;22330:2;22325:3;22266:67;:::i;:::-;22259:74;;22342:93;22431:3;22342:93;:::i;:::-;22460:2;22455:3;22451:12;22444:19;;22103:366;;;:::o;22475:419::-;22641:4;22679:2;22668:9;22664:18;22656:26;;22728:9;22722:4;22718:20;22714:1;22703:9;22699:17;22692:47;22756:131;22882:4;22756:131;:::i;:::-;22748:139;;22475:419;;;:::o;22900:224::-;23040:34;23036:1;23028:6;23024:14;23017:58;23109:7;23104:2;23096:6;23092:15;23085:32;22900:224;:::o;23130:366::-;23272:3;23293:67;23357:2;23352:3;23293:67;:::i;:::-;23286:74;;23369:93;23458:3;23369:93;:::i;:::-;23487:2;23482:3;23478:12;23471:19;;23130:366;;;:::o;23502:419::-;23668:4;23706:2;23695:9;23691:18;23683:26;;23755:9;23749:4;23745:20;23741:1;23730:9;23726:17;23719:47;23783:131;23909:4;23783:131;:::i;:::-;23775:139;;23502:419;;;:::o;23927:222::-;24067:34;24063:1;24055:6;24051:14;24044:58;24136:5;24131:2;24123:6;24119:15;24112:30;23927:222;:::o;24155:366::-;24297:3;24318:67;24382:2;24377:3;24318:67;:::i;:::-;24311:74;;24394:93;24483:3;24394:93;:::i;:::-;24512:2;24507:3;24503:12;24496:19;;24155:366;;;:::o;24527:419::-;24693:4;24731:2;24720:9;24716:18;24708:26;;24780:9;24774:4;24770:20;24766:1;24755:9;24751:17;24744:47;24808:131;24934:4;24808:131;:::i;:::-;24800:139;;24527:419;;;:::o;24952:172::-;25092:24;25088:1;25080:6;25076:14;25069:48;24952:172;:::o;25130:366::-;25272:3;25293:67;25357:2;25352:3;25293:67;:::i;:::-;25286:74;;25369:93;25458:3;25369:93;:::i;:::-;25487:2;25482:3;25478:12;25471:19;;25130:366;;;:::o;25502:419::-;25668:4;25706:2;25695:9;25691:18;25683:26;;25755:9;25749:4;25745:20;25741:1;25730:9;25726:17;25719:47;25783:131;25909:4;25783:131;:::i;:::-;25775:139;;25502:419;;;:::o;25927:240::-;26067:34;26063:1;26055:6;26051:14;26044:58;26136:23;26131:2;26123:6;26119:15;26112:48;25927:240;:::o;26173:366::-;26315:3;26336:67;26400:2;26395:3;26336:67;:::i;:::-;26329:74;;26412:93;26501:3;26412:93;:::i;:::-;26530:2;26525:3;26521:12;26514:19;;26173:366;;;:::o;26545:419::-;26711:4;26749:2;26738:9;26734:18;26726:26;;26798:9;26792:4;26788:20;26784:1;26773:9;26769:17;26762:47;26826:131;26952:4;26826:131;:::i;:::-;26818:139;;26545:419;;;:::o;26970:169::-;27110:21;27106:1;27098:6;27094:14;27087:45;26970:169;:::o;27145:366::-;27287:3;27308:67;27372:2;27367:3;27308:67;:::i;:::-;27301:74;;27384:93;27473:3;27384:93;:::i;:::-;27502:2;27497:3;27493:12;27486:19;;27145:366;;;:::o;27517:419::-;27683:4;27721:2;27710:9;27706:18;27698:26;;27770:9;27764:4;27760:20;27756:1;27745:9;27741:17;27734:47;27798:131;27924:4;27798:131;:::i;:::-;27790:139;;27517:419;;;:::o;27942:241::-;28082:34;28078:1;28070:6;28066:14;28059:58;28151:24;28146:2;28138:6;28134:15;28127:49;27942:241;:::o;28189:366::-;28331:3;28352:67;28416:2;28411:3;28352:67;:::i;:::-;28345:74;;28428:93;28517:3;28428:93;:::i;:::-;28546:2;28541:3;28537:12;28530:19;;28189:366;;;:::o;28561:419::-;28727:4;28765:2;28754:9;28750:18;28742:26;;28814:9;28808:4;28804:20;28800:1;28789:9;28785:17;28778:47;28842:131;28968:4;28842:131;:::i;:::-;28834:139;;28561:419;;;:::o;28986:194::-;29026:4;29046:20;29064:1;29046:20;:::i;:::-;29041:25;;29080:20;29098:1;29080:20;:::i;:::-;29075:25;;29124:1;29121;29117:9;29109:17;;29148:1;29142:4;29139:11;29136:37;;;29153:18;;:::i;:::-;29136:37;28986:194;;;;:::o;29186:225::-;29326:34;29322:1;29314:6;29310:14;29303:58;29395:8;29390:2;29382:6;29378:15;29371:33;29186:225;:::o;29417:366::-;29559:3;29580:67;29644:2;29639:3;29580:67;:::i;:::-;29573:74;;29656:93;29745:3;29656:93;:::i;:::-;29774:2;29769:3;29765:12;29758:19;;29417:366;;;:::o;29789:419::-;29955:4;29993:2;29982:9;29978:18;29970:26;;30042:9;30036:4;30032:20;30028:1;30017:9;30013:17;30006:47;30070:131;30196:4;30070:131;:::i;:::-;30062:139;;29789:419;;;:::o;30214:147::-;30315:11;30352:3;30337:18;;30214:147;;;;:::o;30367:114::-;;:::o;30487:398::-;30646:3;30667:83;30748:1;30743:3;30667:83;:::i;:::-;30660:90;;30759:93;30848:3;30759:93;:::i;:::-;30877:1;30872:3;30868:11;30861:18;;30487:398;;;:::o;30891:379::-;31075:3;31097:147;31240:3;31097:147;:::i;:::-;31090:154;;31261:3;31254:10;;30891:379;;;:::o;31276:442::-;31425:4;31463:2;31452:9;31448:18;31440:26;;31476:71;31544:1;31533:9;31529:17;31520:6;31476:71;:::i;:::-;31557:72;31625:2;31614:9;31610:18;31601:6;31557:72;:::i;:::-;31639;31707:2;31696:9;31692:18;31683:6;31639:72;:::i;:::-;31276:442;;;;;;:::o;31724:180::-;31772:77;31769:1;31762:88;31869:4;31866:1;31859:15;31893:4;31890:1;31883:15;31910:180;31958:77;31955:1;31948:88;32055:4;32052:1;32045:15;32079:4;32076:1;32069:15;32096:143;32153:5;32184:6;32178:13;32169:22;;32200:33;32227:5;32200:33;:::i;:::-;32096:143;;;;:::o;32245:351::-;32315:6;32364:2;32352:9;32343:7;32339:23;32335:32;32332:119;;;32370:79;;:::i;:::-;32332:119;32490:1;32515:64;32571:7;32562:6;32551:9;32547:22;32515:64;:::i;:::-;32505:74;;32461:128;32245:351;;;;:::o;32602:85::-;32647:7;32676:5;32665:16;;32602:85;;;:::o;32693:158::-;32751:9;32784:61;32802:42;32811:32;32837:5;32811:32;:::i;:::-;32802:42;:::i;:::-;32784:61;:::i;:::-;32771:74;;32693:158;;;:::o;32857:147::-;32952:45;32991:5;32952:45;:::i;:::-;32947:3;32940:58;32857:147;;:::o;33010:114::-;33077:6;33111:5;33105:12;33095:22;;33010:114;;;:::o;33130:184::-;33229:11;33263:6;33258:3;33251:19;33303:4;33298:3;33294:14;33279:29;;33130:184;;;;:::o;33320:132::-;33387:4;33410:3;33402:11;;33440:4;33435:3;33431:14;33423:22;;33320:132;;;:::o;33458:108::-;33535:24;33553:5;33535:24;:::i;:::-;33530:3;33523:37;33458:108;;:::o;33572:179::-;33641:10;33662:46;33704:3;33696:6;33662:46;:::i;:::-;33740:4;33735:3;33731:14;33717:28;;33572:179;;;;:::o;33757:113::-;33827:4;33859;33854:3;33850:14;33842:22;;33757:113;;;:::o;33906:732::-;34025:3;34054:54;34102:5;34054:54;:::i;:::-;34124:86;34203:6;34198:3;34124:86;:::i;:::-;34117:93;;34234:56;34284:5;34234:56;:::i;:::-;34313:7;34344:1;34329:284;34354:6;34351:1;34348:13;34329:284;;;34430:6;34424:13;34457:63;34516:3;34501:13;34457:63;:::i;:::-;34450:70;;34543:60;34596:6;34543:60;:::i;:::-;34533:70;;34389:224;34376:1;34373;34369:9;34364:14;;34329:284;;;34333:14;34629:3;34622:10;;34030:608;;;33906:732;;;;:::o;34644:831::-;34907:4;34945:3;34934:9;34930:19;34922:27;;34959:71;35027:1;35016:9;35012:17;35003:6;34959:71;:::i;:::-;35040:80;35116:2;35105:9;35101:18;35092:6;35040:80;:::i;:::-;35167:9;35161:4;35157:20;35152:2;35141:9;35137:18;35130:48;35195:108;35298:4;35289:6;35195:108;:::i;:::-;35187:116;;35313:72;35381:2;35370:9;35366:18;35357:6;35313:72;:::i;:::-;35395:73;35463:3;35452:9;35448:19;35439:6;35395:73;:::i;:::-;34644:831;;;;;;;;:::o;35481:807::-;35730:4;35768:3;35757:9;35753:19;35745:27;;35782:71;35850:1;35839:9;35835:17;35826:6;35782:71;:::i;:::-;35863:72;35931:2;35920:9;35916:18;35907:6;35863:72;:::i;:::-;35945:80;36021:2;36010:9;36006:18;35997:6;35945:80;:::i;:::-;36035;36111:2;36100:9;36096:18;36087:6;36035:80;:::i;:::-;36125:73;36193:3;36182:9;36178:19;36169:6;36125:73;:::i;:::-;36208;36276:3;36265:9;36261:19;36252:6;36208:73;:::i;:::-;35481:807;;;;;;;;;:::o;36294:143::-;36351:5;36382:6;36376:13;36367:22;;36398:33;36425:5;36398:33;:::i;:::-;36294:143;;;;:::o;36443:663::-;36531:6;36539;36547;36596:2;36584:9;36575:7;36571:23;36567:32;36564:119;;;36602:79;;:::i;:::-;36564:119;36722:1;36747:64;36803:7;36794:6;36783:9;36779:22;36747:64;:::i;:::-;36737:74;;36693:128;36860:2;36886:64;36942:7;36933:6;36922:9;36918:22;36886:64;:::i;:::-;36876:74;;36831:129;36999:2;37025:64;37081:7;37072:6;37061:9;37057:22;37025:64;:::i;:::-;37015:74;;36970:129;36443:663;;;;;:::o

Swarm Source

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