Token PooChain

 

Overview ERC20

Price
$0.00 @ 0.000000 ETH
Fully Diluted Market Cap
Total Supply:
1,000,000,000 POOP

Holders:
35 addresses

Transfers:
-

Loading
[ Download CSV Export  ] 
Loading
[ Download CSV Export  ] 
Loading

OVERVIEW

PooChain is a community driven blockchain created on the BSC on May 31st, 2022. PooChain mainet went live in December 2022. Arbitrum is pairing since the blockchain was deployed.


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

Contract Source Code Verified (Exact Match)

Contract Name:
PooChain

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Arbiscan.io on 2023-03-12
*/

//  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 PooChain 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 = false;
    bool public swapEnabled = false;

    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("PooChain", "POOP") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506
        );

        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 = 1;
        uint256 _buyLiquidityFee = 4;
        uint256 _buyDevFee = 0;

        uint256 _sellMarketingFee = 1;
        uint256 _sellLiquidityFee = 4;
        uint256 _sellDevFee = 0;

        uint256 totalSupply = 1000000000 * 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 = address(0x13F32c1c3F13B6b6c8Fe230c4F915eB9607E1E0C); 
        devWallet = address(0x13F32c1c3F13B6b6c8Fe230c4F915eB9607E1E0C);
        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;
        require(buyTotalFees <= 11, "Must keep fees at 11% or less");
    }

    function updateSellFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _devFee
    ) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
        require(sellTotalFees <= 11, "Must keep fees at  11% or less");
    }

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

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

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

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

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

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

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

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

        uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(
            totalTokensToSwap
        );
        uint256 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
        }("");
    }
}

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":"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"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600c60006101000a81548160ff0219169083151502179055506000600c60016101000a81548160ff0219169083151502179055506000600c60026101000a81548160ff0219169083151502179055503480156200006257600080fd5b506040518060400160405280600881526020017f506f6f436861696e0000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f504f4f50000000000000000000000000000000000000000000000000000000008152508160039081620000e0919062000e06565b508060049081620000f2919062000e06565b50505062000115620001096200064d60201b60201c565b6200065560201b60201c565b6000731b02da8cb0d097eb8d57a175b88c7d8b479975069050620001418160016200071b60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001c1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e7919062000f57565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200024f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000275919062000f57565b6040518363ffffffff1660e01b81526004016200029492919062000f9a565b6020604051808303816000875af1158015620002b4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002da919062000f57565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200032260a05160016200071b60201b60201c565b6200033760a05160016200080560201b60201c565b600060019050600060049050600080600190506000600490506000806b033b2e3c9fd0803ce80000009050606460028262000373919062000ff6565b6200037f919062001070565b600981905550606460028262000396919062000ff6565b620003a2919062001070565b600b81905550612710600582620003ba919062000ff6565b620003c6919062001070565b600a8190555086600e8190555085600f8190555084601081905550601054600f54600e54620003f69190620010a8565b620004029190620010a8565b600d81905550836012819055508260138190555081601481905550601454601354601254620004329190620010a8565b6200043e9190620010a8565b6011819055507313f32c1c3f13b6b6c8fe230c4f915eb9607e1e0c600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507313f32c1c3f13b6b6c8fe230c4f915eb9607e1e0c600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200055162000543620008a660201b60201c565b6001620008d060201b60201c565b62000564306001620008d060201b60201c565b6200057961dead6001620008d060201b60201c565b620005ae600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620008d060201b60201c565b620005d0620005c2620008a660201b60201c565b60016200071b60201b60201c565b620005e33060016200071b60201b60201c565b620005f861dead60016200071b60201b60201c565b6200062d600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200071b60201b60201c565b6200063f338262000a0a60201b60201c565b505050505050505062001240565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200072b6200064d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000751620008a660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620007aa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007a19062001144565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620008e06200064d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000906620008a660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200095f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009569062001144565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620009fe919062001183565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000a7c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a7390620011f0565b60405180910390fd5b62000a906000838362000b8260201b60201c565b806002600082825462000aa49190620010a8565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000afb9190620010a8565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b62919062001223565b60405180910390a362000b7e6000838362000b8760201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000c0e57607f821691505b60208210810362000c245762000c2362000bc6565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000c8e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000c4f565b62000c9a868362000c4f565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000ce762000ce162000cdb8462000cb2565b62000cbc565b62000cb2565b9050919050565b6000819050919050565b62000d038362000cc6565b62000d1b62000d128262000cee565b84845462000c5c565b825550505050565b600090565b62000d3262000d23565b62000d3f81848462000cf8565b505050565b5b8181101562000d675762000d5b60008262000d28565b60018101905062000d45565b5050565b601f82111562000db65762000d808162000c2a565b62000d8b8462000c3f565b8101602085101562000d9b578190505b62000db362000daa8562000c3f565b83018262000d44565b50505b505050565b600082821c905092915050565b600062000ddb6000198460080262000dbb565b1980831691505092915050565b600062000df6838362000dc8565b9150826002028217905092915050565b62000e118262000b8c565b67ffffffffffffffff81111562000e2d5762000e2c62000b97565b5b62000e39825462000bf5565b62000e4682828562000d6b565b600060209050601f83116001811462000e7e576000841562000e69578287015190505b62000e75858262000de8565b86555062000ee5565b601f19841662000e8e8662000c2a565b60005b8281101562000eb85784890151825560018201915060208501945060208101905062000e91565b8683101562000ed8578489015162000ed4601f89168262000dc8565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000f1f8262000ef2565b9050919050565b62000f318162000f12565b811462000f3d57600080fd5b50565b60008151905062000f518162000f26565b92915050565b60006020828403121562000f705762000f6f62000eed565b5b600062000f808482850162000f40565b91505092915050565b62000f948162000f12565b82525050565b600060408201905062000fb1600083018562000f89565b62000fc0602083018462000f89565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620010038262000cb2565b9150620010108362000cb2565b9250828202620010208162000cb2565b915082820484148315176200103a576200103962000fc7565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006200107d8262000cb2565b91506200108a8362000cb2565b9250826200109d576200109c62001041565b5b828204905092915050565b6000620010b58262000cb2565b9150620010c28362000cb2565b9250828201905080821115620010dd57620010dc62000fc7565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200112c602083620010e3565b91506200113982620010f4565b602082019050919050565b600060208201905081810360008301526200115f816200111d565b9050919050565b60008115159050919050565b6200117d8162001166565b82525050565b60006020820190506200119a600083018462001172565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620011d8601f83620010e3565b9150620011e582620011a0565b602082019050919050565b600060208201905081810360008301526200120b81620011c9565b9050919050565b6200121d8162000cb2565b82525050565b60006020820190506200123a600083018462001212565b92915050565b60805160a051614ecf62001290600039600081816111e70152611902015260008181610daf015281816137e4015281816138c5015281816138ec0152818161398801526139af0152614ecf6000f3fe6080604052600436106103395760003560e01c80638da5cb5b116101ab578063bbc0c742116100f7578063dd62ed3e11610095578063f2fde38b1161006f578063f2fde38b14610c35578063f637434214610c5e578063f8b45b0514610c89578063fbc10c5514610cb457610340565b8063dd62ed3e14610ba2578063e2f4560514610bdf578063f11a24d314610c0a57610340565b8063c18bc195116100d1578063c18bc19514610ae6578063c8c8ebe414610b0f578063d257b34f14610b3a578063d85ba06314610b7757610340565b8063bbc0c74214610a69578063c024666814610a94578063c17b5b8c14610abd57610340565b80639c3b4fdc11610164578063a457c2d71161013e578063a457c2d714610989578063a9059cbb146109c6578063aacebbe314610a03578063b62496f514610a2c57610340565b80639c3b4fdc146109085780639fccce3214610933578063a0d82dc51461095e57610340565b80638da5cb5b1461080a5780638ea5220f146108355780639213691314610860578063924de9b71461088b57806395d89b41146108b45780639a7a23d6146108df57610340565b806349bd5a5e11610285578063715018a61161022357806375f0a874116101fd57806375f0a874146107745780637bce5a041461079f5780638095d564146107ca5780638a8c523c146107f357610340565b8063715018a614610709578063751039fc146107205780637571336a1461074b57610340565b80636303516c1161025f5780636303516c1461064b5780636a486a8e146106765780636ddd1713146106a157806370a08231146106cc57610340565b806349bd5a5e146105b85780634a62bb65146105e35780634fbee1931461060e57610340565b80631a8145bb116102f257806323b872dd116102cc57806323b872dd146104e857806327c8f83514610525578063313ce56714610550578063395093511461057b57610340565b80631a8145bb146104695780631f3fed8f14610494578063203e727e146104bf57610340565b806306fdde0314610345578063095ea7b31461037057806310d5de53146103ad5780631694505e146103ea57806318160ddd146104155780631816467f1461044057610340565b3661034057005b600080fd5b34801561035157600080fd5b5061035a610cdd565b6040516103679190613b0e565b60405180910390f35b34801561037c57600080fd5b5061039760048036038101906103929190613bc9565b610d6f565b6040516103a49190613c24565b60405180910390f35b3480156103b957600080fd5b506103d460048036038101906103cf9190613c3f565b610d8d565b6040516103e19190613c24565b60405180910390f35b3480156103f657600080fd5b506103ff610dad565b60405161040c9190613ccb565b60405180910390f35b34801561042157600080fd5b5061042a610dd1565b6040516104379190613cf5565b60405180910390f35b34801561044c57600080fd5b5061046760048036038101906104629190613c3f565b610ddb565b005b34801561047557600080fd5b5061047e610f17565b60405161048b9190613cf5565b60405180910390f35b3480156104a057600080fd5b506104a9610f1d565b6040516104b69190613cf5565b60405180910390f35b3480156104cb57600080fd5b506104e660048036038101906104e19190613d10565b610f23565b005b3480156104f457600080fd5b5061050f600480360381019061050a9190613d3d565b611032565b60405161051c9190613c24565b60405180910390f35b34801561053157600080fd5b5061053a61112a565b6040516105479190613d9f565b60405180910390f35b34801561055c57600080fd5b50610565611130565b6040516105729190613dd6565b60405180910390f35b34801561058757600080fd5b506105a2600480360381019061059d9190613bc9565b611139565b6040516105af9190613c24565b60405180910390f35b3480156105c457600080fd5b506105cd6111e5565b6040516105da9190613d9f565b60405180910390f35b3480156105ef57600080fd5b506105f8611209565b6040516106059190613c24565b60405180910390f35b34801561061a57600080fd5b5061063560048036038101906106309190613c3f565b61121c565b6040516106429190613c24565b60405180910390f35b34801561065757600080fd5b50610660611272565b60405161066d9190613d9f565b60405180910390f35b34801561068257600080fd5b5061068b611298565b6040516106989190613cf5565b60405180910390f35b3480156106ad57600080fd5b506106b661129e565b6040516106c39190613c24565b60405180910390f35b3480156106d857600080fd5b506106f360048036038101906106ee9190613c3f565b6112b1565b6040516107009190613cf5565b60405180910390f35b34801561071557600080fd5b5061071e6112f9565b005b34801561072c57600080fd5b50610735611381565b6040516107429190613c24565b60405180910390f35b34801561075757600080fd5b50610772600480360381019061076d9190613e1d565b61144d565b005b34801561078057600080fd5b50610789611524565b6040516107969190613d9f565b60405180910390f35b3480156107ab57600080fd5b506107b461154a565b6040516107c19190613cf5565b60405180910390f35b3480156107d657600080fd5b506107f160048036038101906107ec9190613e5d565b611550565b005b3480156107ff57600080fd5b5061080861164f565b005b34801561081657600080fd5b5061081f611703565b60405161082c9190613d9f565b60405180910390f35b34801561084157600080fd5b5061084a61172d565b6040516108579190613d9f565b60405180910390f35b34801561086c57600080fd5b50610875611753565b6040516108829190613cf5565b60405180910390f35b34801561089757600080fd5b506108b260048036038101906108ad9190613eb0565b611759565b005b3480156108c057600080fd5b506108c96117f2565b6040516108d69190613b0e565b60405180910390f35b3480156108eb57600080fd5b5061090660048036038101906109019190613e1d565b611884565b005b34801561091457600080fd5b5061091d61199c565b60405161092a9190613cf5565b60405180910390f35b34801561093f57600080fd5b506109486119a2565b6040516109559190613cf5565b60405180910390f35b34801561096a57600080fd5b506109736119a8565b6040516109809190613cf5565b60405180910390f35b34801561099557600080fd5b506109b060048036038101906109ab9190613bc9565b6119ae565b6040516109bd9190613c24565b60405180910390f35b3480156109d257600080fd5b506109ed60048036038101906109e89190613bc9565b611a99565b6040516109fa9190613c24565b60405180910390f35b348015610a0f57600080fd5b50610a2a6004803603810190610a259190613c3f565b611ab7565b005b348015610a3857600080fd5b50610a536004803603810190610a4e9190613c3f565b611bf3565b604051610a609190613c24565b60405180910390f35b348015610a7557600080fd5b50610a7e611c13565b604051610a8b9190613c24565b60405180910390f35b348015610aa057600080fd5b50610abb6004803603810190610ab69190613e1d565b611c26565b005b348015610ac957600080fd5b50610ae46004803603810190610adf9190613e5d565b611d4b565b005b348015610af257600080fd5b50610b0d6004803603810190610b089190613d10565b611e4a565b005b348015610b1b57600080fd5b50610b24611f59565b604051610b319190613cf5565b60405180910390f35b348015610b4657600080fd5b50610b616004803603810190610b5c9190613d10565b611f5f565b604051610b6e9190613c24565b60405180910390f35b348015610b8357600080fd5b50610b8c6120b4565b604051610b999190613cf5565b60405180910390f35b348015610bae57600080fd5b50610bc96004803603810190610bc49190613edd565b6120ba565b604051610bd69190613cf5565b60405180910390f35b348015610beb57600080fd5b50610bf4612141565b604051610c019190613cf5565b60405180910390f35b348015610c1657600080fd5b50610c1f612147565b604051610c2c9190613cf5565b60405180910390f35b348015610c4157600080fd5b50610c5c6004803603810190610c579190613c3f565b61214d565b005b348015610c6a57600080fd5b50610c73612244565b604051610c809190613cf5565b60405180910390f35b348015610c9557600080fd5b50610c9e61224a565b604051610cab9190613cf5565b60405180910390f35b348015610cc057600080fd5b50610cdb6004803603810190610cd69190613c3f565b612250565b005b606060038054610cec90613f4c565b80601f0160208091040260200160405190810160405280929190818152602001828054610d1890613f4c565b8015610d655780601f10610d3a57610100808354040283529160200191610d65565b820191906000526020600020905b815481529060010190602001808311610d4857829003601f168201915b5050505050905090565b6000610d83610d7c61238c565b8484612394565b6001905092915050565b60196020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610de361238c565b73ffffffffffffffffffffffffffffffffffffffff16610e01611703565b73ffffffffffffffffffffffffffffffffffffffff1614610e57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4e90613fc9565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60165481565b60155481565b610f2b61238c565b73ffffffffffffffffffffffffffffffffffffffff16610f49611703565b73ffffffffffffffffffffffffffffffffffffffff1614610f9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9690613fc9565b60405180910390fd5b670de0b6b3a76400006103e86001610fb5610dd1565b610fbf9190614018565b610fc99190614089565b610fd39190614089565b811015611015576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100c9061412c565b60405180910390fd5b670de0b6b3a7640000816110299190614018565b60098190555050565b600061103f84848461255d565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061108a61238c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561110a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611101906141be565b60405180910390fd5b61111e8561111661238c565b858403612394565b60019150509392505050565b61dead81565b60006012905090565b60006111db61114661238c565b84846001600061115461238c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111d691906141de565b612394565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600c60009054906101000a900460ff1681565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b600c60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61130161238c565b73ffffffffffffffffffffffffffffffffffffffff1661131f611703565b73ffffffffffffffffffffffffffffffffffffffff1614611375576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136c90613fc9565b60405180910390fd5b61137f600061302c565b565b600061138b61238c565b73ffffffffffffffffffffffffffffffffffffffff166113a9611703565b73ffffffffffffffffffffffffffffffffffffffff16146113ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f690613fc9565b60405180910390fd5b6000600c60006101000a81548160ff0219169083151502179055507f7bfa7bacf025baa75e5308bf15bcf2948f406c7ebe3eb1a8bb611862b9d647ef60405160405180910390a16001905090565b61145561238c565b73ffffffffffffffffffffffffffffffffffffffff16611473611703565b73ffffffffffffffffffffffffffffffffffffffff16146114c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c090613fc9565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b61155861238c565b73ffffffffffffffffffffffffffffffffffffffff16611576611703565b73ffffffffffffffffffffffffffffffffffffffff16146115cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c390613fc9565b60405180910390fd5b82600e8190555081600f8190555080601081905550601054600f54600e546115f491906141de565b6115fe91906141de565b600d81905550600b600d54111561164a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116419061425e565b60405180910390fd5b505050565b61165761238c565b73ffffffffffffffffffffffffffffffffffffffff16611675611703565b73ffffffffffffffffffffffffffffffffffffffff16146116cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c290613fc9565b60405180910390fd5b6001600c60016101000a81548160ff0219169083151502179055506001600c60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60125481565b61176161238c565b73ffffffffffffffffffffffffffffffffffffffff1661177f611703565b73ffffffffffffffffffffffffffffffffffffffff16146117d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117cc90613fc9565b60405180910390fd5b80600c60026101000a81548160ff02191690831515021790555050565b60606004805461180190613f4c565b80601f016020809104026020016040519081016040528092919081815260200182805461182d90613f4c565b801561187a5780601f1061184f5761010080835404028352916020019161187a565b820191906000526020600020905b81548152906001019060200180831161185d57829003601f168201915b5050505050905090565b61188c61238c565b73ffffffffffffffffffffffffffffffffffffffff166118aa611703565b73ffffffffffffffffffffffffffffffffffffffff1614611900576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f790613fc9565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361198e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611985906142f0565b60405180910390fd5b61199882826130f2565b5050565b60105481565b60175481565b60145481565b600080600160006119bd61238c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611a7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7190614382565b60405180910390fd5b611a8e611a8561238c565b85858403612394565b600191505092915050565b6000611aad611aa661238c565b848461255d565b6001905092915050565b611abf61238c565b73ffffffffffffffffffffffffffffffffffffffff16611add611703565b73ffffffffffffffffffffffffffffffffffffffff1614611b33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2a90613fc9565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601a6020528060005260406000206000915054906101000a900460ff1681565b600c60019054906101000a900460ff1681565b611c2e61238c565b73ffffffffffffffffffffffffffffffffffffffff16611c4c611703565b73ffffffffffffffffffffffffffffffffffffffff1614611ca2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9990613fc9565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611d3f9190613c24565b60405180910390a25050565b611d5361238c565b73ffffffffffffffffffffffffffffffffffffffff16611d71611703565b73ffffffffffffffffffffffffffffffffffffffff1614611dc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbe90613fc9565b60405180910390fd5b826012819055508160138190555080601481905550601454601354601254611def91906141de565b611df991906141de565b601181905550600b6011541115611e45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3c906143ee565b60405180910390fd5b505050565b611e5261238c565b73ffffffffffffffffffffffffffffffffffffffff16611e70611703565b73ffffffffffffffffffffffffffffffffffffffff1614611ec6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ebd90613fc9565b60405180910390fd5b670de0b6b3a76400006103e86005611edc610dd1565b611ee69190614018565b611ef09190614089565b611efa9190614089565b811015611f3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3390614480565b60405180910390fd5b670de0b6b3a764000081611f509190614018565b600b8190555050565b60095481565b6000611f6961238c565b73ffffffffffffffffffffffffffffffffffffffff16611f87611703565b73ffffffffffffffffffffffffffffffffffffffff1614611fdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd490613fc9565b60405180910390fd5b620186a06001611feb610dd1565b611ff59190614018565b611fff9190614089565b821015612041576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203890614512565b60405180910390fd5b6103e8600561204e610dd1565b6120589190614018565b6120629190614089565b8211156120a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209b906145a4565b60405180910390fd5b81600a8190555060019050919050565b600d5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b600f5481565b61215561238c565b73ffffffffffffffffffffffffffffffffffffffff16612173611703565b73ffffffffffffffffffffffffffffffffffffffff16146121c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c090613fc9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612238576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222f90614636565b60405180910390fd5b6122418161302c565b50565b60135481565b600b5481565b61225861238c565b73ffffffffffffffffffffffffffffffffffffffff16612276611703565b73ffffffffffffffffffffffffffffffffffffffff16146122cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c390613fc9565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8e4fb3162b55d3fcdb7507ecfed5ab4ea5d2bd7494d0bb621d698a52ea3f74b460405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612403576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123fa906146c8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612472576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124699061475a565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516125509190613cf5565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036125cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c3906147ec565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361263b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126329061487e565b60405180910390fd5b600081036126545761264f83836000613193565b613027565b600c60009054906101000a900460ff1615612b4f57612671611703565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156126df57506126af611703565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127185750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612752575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561276b5750600560149054906101000a900460ff16155b15612b4e57600c60019054906101000a900460ff1661286557601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806128255750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612864576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285b906148ea565b60405180910390fd5b5b601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156129085750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156129af57600954811115612952576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129499061497c565b60405180910390fd5b600b5461295e836112b1565b8261296991906141de565b11156129aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129a1906149e8565b60405180910390fd5b612b4d565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a525750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612aa157600954811115612a9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9390614a7a565b60405180910390fd5b612b4c565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612b4b57600b54612afe836112b1565b82612b0991906141de565b1115612b4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b41906149e8565b60405180910390fd5b5b5b5b5b5b6000612b5a306112b1565b90506000600a548210159050808015612b7f5750600c60029054906101000a900460ff165b8015612b985750600560149054906101000a900460ff16155b8015612bee5750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612c445750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612c9a5750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612cde576001600560146101000a81548160ff021916908315150217905550612cc2613412565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612d945750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612d9e57600090505b6000811561301757601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e0157506000601154115b15612ece57612e2e6064612e20601154886136f990919063ffffffff16565b61370f90919063ffffffff16565b905060115460135482612e419190614018565b612e4b9190614089565b60166000828254612e5c91906141de565b9250508190555060115460145482612e749190614018565b612e7e9190614089565b60176000828254612e8f91906141de565b9250508190555060115460125482612ea79190614018565b612eb19190614089565b60156000828254612ec291906141de565b92505081905550612ff3565b601a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612f2957506000600d54115b15612ff257612f566064612f48600d54886136f990919063ffffffff16565b61370f90919063ffffffff16565b9050600d54600f5482612f699190614018565b612f739190614089565b60166000828254612f8491906141de565b92505081905550600d5460105482612f9c9190614018565b612fa69190614089565b60176000828254612fb791906141de565b92505081905550600d54600e5482612fcf9190614018565b612fd99190614089565b60156000828254612fea91906141de565b925050819055505b5b600081111561300857613007873083613193565b5b80856130149190614a9a565b94505b613022878787613193565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613202576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131f9906147ec565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613271576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132689061487e565b60405180910390fd5b61327c838383613725565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613302576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132f990614b40565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461339591906141de565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516133f99190613cf5565b60405180910390a361340c84848461372a565b50505050565b600061341d306112b1565b9050600060175460155460165461343491906141de565b61343e91906141de565b90506000808314806134505750600082145b1561345d575050506136f7565b6014600a5461346c9190614018565b831115613485576014600a546134829190614018565b92505b6000600283601654866134989190614018565b6134a29190614089565b6134ac9190614089565b905060006134c3828661372f90919063ffffffff16565b905060004790506134d382613745565b60006134e8824761372f90919063ffffffff16565b9050600061351387613505601554856136f990919063ffffffff16565b61370f90919063ffffffff16565b9050600061353e88613530601754866136f990919063ffffffff16565b61370f90919063ffffffff16565b9050600081838561354f9190614a9a565b6135599190614a9a565b9050600060168190555060006015819055506000601781905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516135b990614b91565b60006040518083038185875af1925050503d80600081146135f6576040519150601f19603f3d011682016040523d82523d6000602084013e6135fb565b606091505b5050809850506000871180156136115750600081115b1561365e576136208782613982565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561868260165460405161365593929190614ba6565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516136a490614b91565b60006040518083038185875af1925050503d80600081146136e1576040519150601f19603f3d011682016040523d82523d6000602084013e6136e6565b606091505b505080985050505050505050505050505b565b600081836137079190614018565b905092915050565b6000818361371d9190614089565b905092915050565b505050565b505050565b6000818361373d9190614a9a565b905092915050565b6000600267ffffffffffffffff81111561376257613761614bdd565b5b6040519080825280602002602001820160405280156137905781602001602082028036833780820191505090505b50905030816000815181106137a8576137a7614c0c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561384d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138719190614c50565b8160018151811061388557613884614c0c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506138ea307f000000000000000000000000000000000000000000000000000000000000000084612394565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161394c959493929190614d76565b600060405180830381600087803b15801561396657600080fd5b505af115801561397a573d6000803e3d6000fd5b505050505050565b6139ad307f000000000000000000000000000000000000000000000000000000000000000084612394565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401613a3496959493929190614dd0565b60606040518083038185885af1158015613a52573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613a779190614e46565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613ab8578082015181840152602081019050613a9d565b60008484015250505050565b6000601f19601f8301169050919050565b6000613ae082613a7e565b613aea8185613a89565b9350613afa818560208601613a9a565b613b0381613ac4565b840191505092915050565b60006020820190508181036000830152613b288184613ad5565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613b6082613b35565b9050919050565b613b7081613b55565b8114613b7b57600080fd5b50565b600081359050613b8d81613b67565b92915050565b6000819050919050565b613ba681613b93565b8114613bb157600080fd5b50565b600081359050613bc381613b9d565b92915050565b60008060408385031215613be057613bdf613b30565b5b6000613bee85828601613b7e565b9250506020613bff85828601613bb4565b9150509250929050565b60008115159050919050565b613c1e81613c09565b82525050565b6000602082019050613c396000830184613c15565b92915050565b600060208284031215613c5557613c54613b30565b5b6000613c6384828501613b7e565b91505092915050565b6000819050919050565b6000613c91613c8c613c8784613b35565b613c6c565b613b35565b9050919050565b6000613ca382613c76565b9050919050565b6000613cb582613c98565b9050919050565b613cc581613caa565b82525050565b6000602082019050613ce06000830184613cbc565b92915050565b613cef81613b93565b82525050565b6000602082019050613d0a6000830184613ce6565b92915050565b600060208284031215613d2657613d25613b30565b5b6000613d3484828501613bb4565b91505092915050565b600080600060608486031215613d5657613d55613b30565b5b6000613d6486828701613b7e565b9350506020613d7586828701613b7e565b9250506040613d8686828701613bb4565b9150509250925092565b613d9981613b55565b82525050565b6000602082019050613db46000830184613d90565b92915050565b600060ff82169050919050565b613dd081613dba565b82525050565b6000602082019050613deb6000830184613dc7565b92915050565b613dfa81613c09565b8114613e0557600080fd5b50565b600081359050613e1781613df1565b92915050565b60008060408385031215613e3457613e33613b30565b5b6000613e4285828601613b7e565b9250506020613e5385828601613e08565b9150509250929050565b600080600060608486031215613e7657613e75613b30565b5b6000613e8486828701613bb4565b9350506020613e9586828701613bb4565b9250506040613ea686828701613bb4565b9150509250925092565b600060208284031215613ec657613ec5613b30565b5b6000613ed484828501613e08565b91505092915050565b60008060408385031215613ef457613ef3613b30565b5b6000613f0285828601613b7e565b9250506020613f1385828601613b7e565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613f6457607f821691505b602082108103613f7757613f76613f1d565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613fb3602083613a89565b9150613fbe82613f7d565b602082019050919050565b60006020820190508181036000830152613fe281613fa6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061402382613b93565b915061402e83613b93565b925082820261403c81613b93565b9150828204841483151761405357614052613fe9565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061409482613b93565b915061409f83613b93565b9250826140af576140ae61405a565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614116602f83613a89565b9150614121826140ba565b604082019050919050565b6000602082019050818103600083015261414581614109565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006141a8602883613a89565b91506141b38261414c565b604082019050919050565b600060208201905081810360008301526141d78161419b565b9050919050565b60006141e982613b93565b91506141f483613b93565b925082820190508082111561420c5761420b613fe9565b5b92915050565b7f4d757374206b656570206665657320617420313125206f72206c657373000000600082015250565b6000614248601d83613a89565b915061425382614212565b602082019050919050565b600060208201905081810360008301526142778161423b565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006142da603983613a89565b91506142e58261427e565b604082019050919050565b60006020820190508181036000830152614309816142cd565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061436c602583613a89565b915061437782614310565b604082019050919050565b6000602082019050818103600083015261439b8161435f565b9050919050565b7f4d757374206b65657020666565732061742020313125206f72206c6573730000600082015250565b60006143d8601e83613a89565b91506143e3826143a2565b602082019050919050565b60006020820190508181036000830152614407816143cb565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b600061446a602483613a89565b91506144758261440e565b604082019050919050565b600060208201905081810360008301526144998161445d565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006144fc603583613a89565b9150614507826144a0565b604082019050919050565b6000602082019050818103600083015261452b816144ef565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b600061458e603483613a89565b915061459982614532565b604082019050919050565b600060208201905081810360008301526145bd81614581565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614620602683613a89565b915061462b826145c4565b604082019050919050565b6000602082019050818103600083015261464f81614613565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006146b2602483613a89565b91506146bd82614656565b604082019050919050565b600060208201905081810360008301526146e1816146a5565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614744602283613a89565b915061474f826146e8565b604082019050919050565b6000602082019050818103600083015261477381614737565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006147d6602583613a89565b91506147e18261477a565b604082019050919050565b60006020820190508181036000830152614805816147c9565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614868602383613a89565b91506148738261480c565b604082019050919050565b600060208201905081810360008301526148978161485b565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006148d4601683613a89565b91506148df8261489e565b602082019050919050565b60006020820190508181036000830152614903816148c7565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614966603583613a89565b91506149718261490a565b604082019050919050565b6000602082019050818103600083015261499581614959565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006149d2601383613a89565b91506149dd8261499c565b602082019050919050565b60006020820190508181036000830152614a01816149c5565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614a64603683613a89565b9150614a6f82614a08565b604082019050919050565b60006020820190508181036000830152614a9381614a57565b9050919050565b6000614aa582613b93565b9150614ab083613b93565b9250828203905081811115614ac857614ac7613fe9565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614b2a602683613a89565b9150614b3582614ace565b604082019050919050565b60006020820190508181036000830152614b5981614b1d565b9050919050565b600081905092915050565b50565b6000614b7b600083614b60565b9150614b8682614b6b565b600082019050919050565b6000614b9c82614b6e565b9150819050919050565b6000606082019050614bbb6000830186613ce6565b614bc86020830185613ce6565b614bd56040830184613ce6565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614c4a81613b67565b92915050565b600060208284031215614c6657614c65613b30565b5b6000614c7484828501614c3b565b91505092915050565b6000819050919050565b6000614ca2614c9d614c9884614c7d565b613c6c565b613b93565b9050919050565b614cb281614c87565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614ced81613b55565b82525050565b6000614cff8383614ce4565b60208301905092915050565b6000602082019050919050565b6000614d2382614cb8565b614d2d8185614cc3565b9350614d3883614cd4565b8060005b83811015614d69578151614d508882614cf3565b9750614d5b83614d0b565b925050600181019050614d3c565b5085935050505092915050565b600060a082019050614d8b6000830188613ce6565b614d986020830187614ca9565b8181036040830152614daa8186614d18565b9050614db96060830185613d90565b614dc66080830184613ce6565b9695505050505050565b600060c082019050614de56000830189613d90565b614df26020830188613ce6565b614dff6040830187614ca9565b614e0c6060830186614ca9565b614e196080830185613d90565b614e2660a0830184613ce6565b979650505050505050565b600081519050614e4081613b9d565b92915050565b600080600060608486031215614e5f57614e5e613b30565b5b6000614e6d86828701614e31565b9350506020614e7e86828701614e31565b9250506040614e8f86828701614e31565b915050925092509256fea26469706673582212203841827d4766709540005915b3949b55a644b9445014fb6bb179618466ce42f664736f6c63430008130033

Deployed Bytecode

0x6080604052600436106103395760003560e01c80638da5cb5b116101ab578063bbc0c742116100f7578063dd62ed3e11610095578063f2fde38b1161006f578063f2fde38b14610c35578063f637434214610c5e578063f8b45b0514610c89578063fbc10c5514610cb457610340565b8063dd62ed3e14610ba2578063e2f4560514610bdf578063f11a24d314610c0a57610340565b8063c18bc195116100d1578063c18bc19514610ae6578063c8c8ebe414610b0f578063d257b34f14610b3a578063d85ba06314610b7757610340565b8063bbc0c74214610a69578063c024666814610a94578063c17b5b8c14610abd57610340565b80639c3b4fdc11610164578063a457c2d71161013e578063a457c2d714610989578063a9059cbb146109c6578063aacebbe314610a03578063b62496f514610a2c57610340565b80639c3b4fdc146109085780639fccce3214610933578063a0d82dc51461095e57610340565b80638da5cb5b1461080a5780638ea5220f146108355780639213691314610860578063924de9b71461088b57806395d89b41146108b45780639a7a23d6146108df57610340565b806349bd5a5e11610285578063715018a61161022357806375f0a874116101fd57806375f0a874146107745780637bce5a041461079f5780638095d564146107ca5780638a8c523c146107f357610340565b8063715018a614610709578063751039fc146107205780637571336a1461074b57610340565b80636303516c1161025f5780636303516c1461064b5780636a486a8e146106765780636ddd1713146106a157806370a08231146106cc57610340565b806349bd5a5e146105b85780634a62bb65146105e35780634fbee1931461060e57610340565b80631a8145bb116102f257806323b872dd116102cc57806323b872dd146104e857806327c8f83514610525578063313ce56714610550578063395093511461057b57610340565b80631a8145bb146104695780631f3fed8f14610494578063203e727e146104bf57610340565b806306fdde0314610345578063095ea7b31461037057806310d5de53146103ad5780631694505e146103ea57806318160ddd146104155780631816467f1461044057610340565b3661034057005b600080fd5b34801561035157600080fd5b5061035a610cdd565b6040516103679190613b0e565b60405180910390f35b34801561037c57600080fd5b5061039760048036038101906103929190613bc9565b610d6f565b6040516103a49190613c24565b60405180910390f35b3480156103b957600080fd5b506103d460048036038101906103cf9190613c3f565b610d8d565b6040516103e19190613c24565b60405180910390f35b3480156103f657600080fd5b506103ff610dad565b60405161040c9190613ccb565b60405180910390f35b34801561042157600080fd5b5061042a610dd1565b6040516104379190613cf5565b60405180910390f35b34801561044c57600080fd5b5061046760048036038101906104629190613c3f565b610ddb565b005b34801561047557600080fd5b5061047e610f17565b60405161048b9190613cf5565b60405180910390f35b3480156104a057600080fd5b506104a9610f1d565b6040516104b69190613cf5565b60405180910390f35b3480156104cb57600080fd5b506104e660048036038101906104e19190613d10565b610f23565b005b3480156104f457600080fd5b5061050f600480360381019061050a9190613d3d565b611032565b60405161051c9190613c24565b60405180910390f35b34801561053157600080fd5b5061053a61112a565b6040516105479190613d9f565b60405180910390f35b34801561055c57600080fd5b50610565611130565b6040516105729190613dd6565b60405180910390f35b34801561058757600080fd5b506105a2600480360381019061059d9190613bc9565b611139565b6040516105af9190613c24565b60405180910390f35b3480156105c457600080fd5b506105cd6111e5565b6040516105da9190613d9f565b60405180910390f35b3480156105ef57600080fd5b506105f8611209565b6040516106059190613c24565b60405180910390f35b34801561061a57600080fd5b5061063560048036038101906106309190613c3f565b61121c565b6040516106429190613c24565b60405180910390f35b34801561065757600080fd5b50610660611272565b60405161066d9190613d9f565b60405180910390f35b34801561068257600080fd5b5061068b611298565b6040516106989190613cf5565b60405180910390f35b3480156106ad57600080fd5b506106b661129e565b6040516106c39190613c24565b60405180910390f35b3480156106d857600080fd5b506106f360048036038101906106ee9190613c3f565b6112b1565b6040516107009190613cf5565b60405180910390f35b34801561071557600080fd5b5061071e6112f9565b005b34801561072c57600080fd5b50610735611381565b6040516107429190613c24565b60405180910390f35b34801561075757600080fd5b50610772600480360381019061076d9190613e1d565b61144d565b005b34801561078057600080fd5b50610789611524565b6040516107969190613d9f565b60405180910390f35b3480156107ab57600080fd5b506107b461154a565b6040516107c19190613cf5565b60405180910390f35b3480156107d657600080fd5b506107f160048036038101906107ec9190613e5d565b611550565b005b3480156107ff57600080fd5b5061080861164f565b005b34801561081657600080fd5b5061081f611703565b60405161082c9190613d9f565b60405180910390f35b34801561084157600080fd5b5061084a61172d565b6040516108579190613d9f565b60405180910390f35b34801561086c57600080fd5b50610875611753565b6040516108829190613cf5565b60405180910390f35b34801561089757600080fd5b506108b260048036038101906108ad9190613eb0565b611759565b005b3480156108c057600080fd5b506108c96117f2565b6040516108d69190613b0e565b60405180910390f35b3480156108eb57600080fd5b5061090660048036038101906109019190613e1d565b611884565b005b34801561091457600080fd5b5061091d61199c565b60405161092a9190613cf5565b60405180910390f35b34801561093f57600080fd5b506109486119a2565b6040516109559190613cf5565b60405180910390f35b34801561096a57600080fd5b506109736119a8565b6040516109809190613cf5565b60405180910390f35b34801561099557600080fd5b506109b060048036038101906109ab9190613bc9565b6119ae565b6040516109bd9190613c24565b60405180910390f35b3480156109d257600080fd5b506109ed60048036038101906109e89190613bc9565b611a99565b6040516109fa9190613c24565b60405180910390f35b348015610a0f57600080fd5b50610a2a6004803603810190610a259190613c3f565b611ab7565b005b348015610a3857600080fd5b50610a536004803603810190610a4e9190613c3f565b611bf3565b604051610a609190613c24565b60405180910390f35b348015610a7557600080fd5b50610a7e611c13565b604051610a8b9190613c24565b60405180910390f35b348015610aa057600080fd5b50610abb6004803603810190610ab69190613e1d565b611c26565b005b348015610ac957600080fd5b50610ae46004803603810190610adf9190613e5d565b611d4b565b005b348015610af257600080fd5b50610b0d6004803603810190610b089190613d10565b611e4a565b005b348015610b1b57600080fd5b50610b24611f59565b604051610b319190613cf5565b60405180910390f35b348015610b4657600080fd5b50610b616004803603810190610b5c9190613d10565b611f5f565b604051610b6e9190613c24565b60405180910390f35b348015610b8357600080fd5b50610b8c6120b4565b604051610b999190613cf5565b60405180910390f35b348015610bae57600080fd5b50610bc96004803603810190610bc49190613edd565b6120ba565b604051610bd69190613cf5565b60405180910390f35b348015610beb57600080fd5b50610bf4612141565b604051610c019190613cf5565b60405180910390f35b348015610c1657600080fd5b50610c1f612147565b604051610c2c9190613cf5565b60405180910390f35b348015610c4157600080fd5b50610c5c6004803603810190610c579190613c3f565b61214d565b005b348015610c6a57600080fd5b50610c73612244565b604051610c809190613cf5565b60405180910390f35b348015610c9557600080fd5b50610c9e61224a565b604051610cab9190613cf5565b60405180910390f35b348015610cc057600080fd5b50610cdb6004803603810190610cd69190613c3f565b612250565b005b606060038054610cec90613f4c565b80601f0160208091040260200160405190810160405280929190818152602001828054610d1890613f4c565b8015610d655780601f10610d3a57610100808354040283529160200191610d65565b820191906000526020600020905b815481529060010190602001808311610d4857829003601f168201915b5050505050905090565b6000610d83610d7c61238c565b8484612394565b6001905092915050565b60196020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000001b02da8cb0d097eb8d57a175b88c7d8b4799750681565b6000600254905090565b610de361238c565b73ffffffffffffffffffffffffffffffffffffffff16610e01611703565b73ffffffffffffffffffffffffffffffffffffffff1614610e57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4e90613fc9565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60165481565b60155481565b610f2b61238c565b73ffffffffffffffffffffffffffffffffffffffff16610f49611703565b73ffffffffffffffffffffffffffffffffffffffff1614610f9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9690613fc9565b60405180910390fd5b670de0b6b3a76400006103e86001610fb5610dd1565b610fbf9190614018565b610fc99190614089565b610fd39190614089565b811015611015576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100c9061412c565b60405180910390fd5b670de0b6b3a7640000816110299190614018565b60098190555050565b600061103f84848461255d565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061108a61238c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561110a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611101906141be565b60405180910390fd5b61111e8561111661238c565b858403612394565b60019150509392505050565b61dead81565b60006012905090565b60006111db61114661238c565b84846001600061115461238c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111d691906141de565b612394565b6001905092915050565b7f0000000000000000000000006e25fabcacd6af4dced41c7af6adfdf9a45b1b2381565b600c60009054906101000a900460ff1681565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b600c60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61130161238c565b73ffffffffffffffffffffffffffffffffffffffff1661131f611703565b73ffffffffffffffffffffffffffffffffffffffff1614611375576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136c90613fc9565b60405180910390fd5b61137f600061302c565b565b600061138b61238c565b73ffffffffffffffffffffffffffffffffffffffff166113a9611703565b73ffffffffffffffffffffffffffffffffffffffff16146113ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f690613fc9565b60405180910390fd5b6000600c60006101000a81548160ff0219169083151502179055507f7bfa7bacf025baa75e5308bf15bcf2948f406c7ebe3eb1a8bb611862b9d647ef60405160405180910390a16001905090565b61145561238c565b73ffffffffffffffffffffffffffffffffffffffff16611473611703565b73ffffffffffffffffffffffffffffffffffffffff16146114c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c090613fc9565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b61155861238c565b73ffffffffffffffffffffffffffffffffffffffff16611576611703565b73ffffffffffffffffffffffffffffffffffffffff16146115cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c390613fc9565b60405180910390fd5b82600e8190555081600f8190555080601081905550601054600f54600e546115f491906141de565b6115fe91906141de565b600d81905550600b600d54111561164a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116419061425e565b60405180910390fd5b505050565b61165761238c565b73ffffffffffffffffffffffffffffffffffffffff16611675611703565b73ffffffffffffffffffffffffffffffffffffffff16146116cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c290613fc9565b60405180910390fd5b6001600c60016101000a81548160ff0219169083151502179055506001600c60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60125481565b61176161238c565b73ffffffffffffffffffffffffffffffffffffffff1661177f611703565b73ffffffffffffffffffffffffffffffffffffffff16146117d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117cc90613fc9565b60405180910390fd5b80600c60026101000a81548160ff02191690831515021790555050565b60606004805461180190613f4c565b80601f016020809104026020016040519081016040528092919081815260200182805461182d90613f4c565b801561187a5780601f1061184f5761010080835404028352916020019161187a565b820191906000526020600020905b81548152906001019060200180831161185d57829003601f168201915b5050505050905090565b61188c61238c565b73ffffffffffffffffffffffffffffffffffffffff166118aa611703565b73ffffffffffffffffffffffffffffffffffffffff1614611900576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f790613fc9565b60405180910390fd5b7f0000000000000000000000006e25fabcacd6af4dced41c7af6adfdf9a45b1b2373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361198e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611985906142f0565b60405180910390fd5b61199882826130f2565b5050565b60105481565b60175481565b60145481565b600080600160006119bd61238c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611a7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7190614382565b60405180910390fd5b611a8e611a8561238c565b85858403612394565b600191505092915050565b6000611aad611aa661238c565b848461255d565b6001905092915050565b611abf61238c565b73ffffffffffffffffffffffffffffffffffffffff16611add611703565b73ffffffffffffffffffffffffffffffffffffffff1614611b33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2a90613fc9565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601a6020528060005260406000206000915054906101000a900460ff1681565b600c60019054906101000a900460ff1681565b611c2e61238c565b73ffffffffffffffffffffffffffffffffffffffff16611c4c611703565b73ffffffffffffffffffffffffffffffffffffffff1614611ca2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9990613fc9565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611d3f9190613c24565b60405180910390a25050565b611d5361238c565b73ffffffffffffffffffffffffffffffffffffffff16611d71611703565b73ffffffffffffffffffffffffffffffffffffffff1614611dc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbe90613fc9565b60405180910390fd5b826012819055508160138190555080601481905550601454601354601254611def91906141de565b611df991906141de565b601181905550600b6011541115611e45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3c906143ee565b60405180910390fd5b505050565b611e5261238c565b73ffffffffffffffffffffffffffffffffffffffff16611e70611703565b73ffffffffffffffffffffffffffffffffffffffff1614611ec6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ebd90613fc9565b60405180910390fd5b670de0b6b3a76400006103e86005611edc610dd1565b611ee69190614018565b611ef09190614089565b611efa9190614089565b811015611f3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3390614480565b60405180910390fd5b670de0b6b3a764000081611f509190614018565b600b8190555050565b60095481565b6000611f6961238c565b73ffffffffffffffffffffffffffffffffffffffff16611f87611703565b73ffffffffffffffffffffffffffffffffffffffff1614611fdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd490613fc9565b60405180910390fd5b620186a06001611feb610dd1565b611ff59190614018565b611fff9190614089565b821015612041576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203890614512565b60405180910390fd5b6103e8600561204e610dd1565b6120589190614018565b6120629190614089565b8211156120a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209b906145a4565b60405180910390fd5b81600a8190555060019050919050565b600d5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b600f5481565b61215561238c565b73ffffffffffffffffffffffffffffffffffffffff16612173611703565b73ffffffffffffffffffffffffffffffffffffffff16146121c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c090613fc9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612238576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222f90614636565b60405180910390fd5b6122418161302c565b50565b60135481565b600b5481565b61225861238c565b73ffffffffffffffffffffffffffffffffffffffff16612276611703565b73ffffffffffffffffffffffffffffffffffffffff16146122cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c390613fc9565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8e4fb3162b55d3fcdb7507ecfed5ab4ea5d2bd7494d0bb621d698a52ea3f74b460405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612403576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123fa906146c8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612472576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124699061475a565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516125509190613cf5565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036125cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c3906147ec565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361263b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126329061487e565b60405180910390fd5b600081036126545761264f83836000613193565b613027565b600c60009054906101000a900460ff1615612b4f57612671611703565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156126df57506126af611703565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127185750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612752575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561276b5750600560149054906101000a900460ff16155b15612b4e57600c60019054906101000a900460ff1661286557601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806128255750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612864576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285b906148ea565b60405180910390fd5b5b601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156129085750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156129af57600954811115612952576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129499061497c565b60405180910390fd5b600b5461295e836112b1565b8261296991906141de565b11156129aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129a1906149e8565b60405180910390fd5b612b4d565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a525750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612aa157600954811115612a9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9390614a7a565b60405180910390fd5b612b4c565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612b4b57600b54612afe836112b1565b82612b0991906141de565b1115612b4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b41906149e8565b60405180910390fd5b5b5b5b5b5b6000612b5a306112b1565b90506000600a548210159050808015612b7f5750600c60029054906101000a900460ff165b8015612b985750600560149054906101000a900460ff16155b8015612bee5750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612c445750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612c9a5750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612cde576001600560146101000a81548160ff021916908315150217905550612cc2613412565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612d945750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612d9e57600090505b6000811561301757601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e0157506000601154115b15612ece57612e2e6064612e20601154886136f990919063ffffffff16565b61370f90919063ffffffff16565b905060115460135482612e419190614018565b612e4b9190614089565b60166000828254612e5c91906141de565b9250508190555060115460145482612e749190614018565b612e7e9190614089565b60176000828254612e8f91906141de565b9250508190555060115460125482612ea79190614018565b612eb19190614089565b60156000828254612ec291906141de565b92505081905550612ff3565b601a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612f2957506000600d54115b15612ff257612f566064612f48600d54886136f990919063ffffffff16565b61370f90919063ffffffff16565b9050600d54600f5482612f699190614018565b612f739190614089565b60166000828254612f8491906141de565b92505081905550600d5460105482612f9c9190614018565b612fa69190614089565b60176000828254612fb791906141de565b92505081905550600d54600e5482612fcf9190614018565b612fd99190614089565b60156000828254612fea91906141de565b925050819055505b5b600081111561300857613007873083613193565b5b80856130149190614a9a565b94505b613022878787613193565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613202576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131f9906147ec565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613271576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132689061487e565b60405180910390fd5b61327c838383613725565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613302576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132f990614b40565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461339591906141de565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516133f99190613cf5565b60405180910390a361340c84848461372a565b50505050565b600061341d306112b1565b9050600060175460155460165461343491906141de565b61343e91906141de565b90506000808314806134505750600082145b1561345d575050506136f7565b6014600a5461346c9190614018565b831115613485576014600a546134829190614018565b92505b6000600283601654866134989190614018565b6134a29190614089565b6134ac9190614089565b905060006134c3828661372f90919063ffffffff16565b905060004790506134d382613745565b60006134e8824761372f90919063ffffffff16565b9050600061351387613505601554856136f990919063ffffffff16565b61370f90919063ffffffff16565b9050600061353e88613530601754866136f990919063ffffffff16565b61370f90919063ffffffff16565b9050600081838561354f9190614a9a565b6135599190614a9a565b9050600060168190555060006015819055506000601781905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516135b990614b91565b60006040518083038185875af1925050503d80600081146135f6576040519150601f19603f3d011682016040523d82523d6000602084013e6135fb565b606091505b5050809850506000871180156136115750600081115b1561365e576136208782613982565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561868260165460405161365593929190614ba6565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516136a490614b91565b60006040518083038185875af1925050503d80600081146136e1576040519150601f19603f3d011682016040523d82523d6000602084013e6136e6565b606091505b505080985050505050505050505050505b565b600081836137079190614018565b905092915050565b6000818361371d9190614089565b905092915050565b505050565b505050565b6000818361373d9190614a9a565b905092915050565b6000600267ffffffffffffffff81111561376257613761614bdd565b5b6040519080825280602002602001820160405280156137905781602001602082028036833780820191505090505b50905030816000815181106137a8576137a7614c0c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000001b02da8cb0d097eb8d57a175b88c7d8b4799750673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561384d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138719190614c50565b8160018151811061388557613884614c0c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506138ea307f0000000000000000000000001b02da8cb0d097eb8d57a175b88c7d8b4799750684612394565b7f0000000000000000000000001b02da8cb0d097eb8d57a175b88c7d8b4799750673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161394c959493929190614d76565b600060405180830381600087803b15801561396657600080fd5b505af115801561397a573d6000803e3d6000fd5b505050505050565b6139ad307f0000000000000000000000001b02da8cb0d097eb8d57a175b88c7d8b4799750684612394565b7f0000000000000000000000001b02da8cb0d097eb8d57a175b88c7d8b4799750673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401613a3496959493929190614dd0565b60606040518083038185885af1158015613a52573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613a779190614e46565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613ab8578082015181840152602081019050613a9d565b60008484015250505050565b6000601f19601f8301169050919050565b6000613ae082613a7e565b613aea8185613a89565b9350613afa818560208601613a9a565b613b0381613ac4565b840191505092915050565b60006020820190508181036000830152613b288184613ad5565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613b6082613b35565b9050919050565b613b7081613b55565b8114613b7b57600080fd5b50565b600081359050613b8d81613b67565b92915050565b6000819050919050565b613ba681613b93565b8114613bb157600080fd5b50565b600081359050613bc381613b9d565b92915050565b60008060408385031215613be057613bdf613b30565b5b6000613bee85828601613b7e565b9250506020613bff85828601613bb4565b9150509250929050565b60008115159050919050565b613c1e81613c09565b82525050565b6000602082019050613c396000830184613c15565b92915050565b600060208284031215613c5557613c54613b30565b5b6000613c6384828501613b7e565b91505092915050565b6000819050919050565b6000613c91613c8c613c8784613b35565b613c6c565b613b35565b9050919050565b6000613ca382613c76565b9050919050565b6000613cb582613c98565b9050919050565b613cc581613caa565b82525050565b6000602082019050613ce06000830184613cbc565b92915050565b613cef81613b93565b82525050565b6000602082019050613d0a6000830184613ce6565b92915050565b600060208284031215613d2657613d25613b30565b5b6000613d3484828501613bb4565b91505092915050565b600080600060608486031215613d5657613d55613b30565b5b6000613d6486828701613b7e565b9350506020613d7586828701613b7e565b9250506040613d8686828701613bb4565b9150509250925092565b613d9981613b55565b82525050565b6000602082019050613db46000830184613d90565b92915050565b600060ff82169050919050565b613dd081613dba565b82525050565b6000602082019050613deb6000830184613dc7565b92915050565b613dfa81613c09565b8114613e0557600080fd5b50565b600081359050613e1781613df1565b92915050565b60008060408385031215613e3457613e33613b30565b5b6000613e4285828601613b7e565b9250506020613e5385828601613e08565b9150509250929050565b600080600060608486031215613e7657613e75613b30565b5b6000613e8486828701613bb4565b9350506020613e9586828701613bb4565b9250506040613ea686828701613bb4565b9150509250925092565b600060208284031215613ec657613ec5613b30565b5b6000613ed484828501613e08565b91505092915050565b60008060408385031215613ef457613ef3613b30565b5b6000613f0285828601613b7e565b9250506020613f1385828601613b7e565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613f6457607f821691505b602082108103613f7757613f76613f1d565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613fb3602083613a89565b9150613fbe82613f7d565b602082019050919050565b60006020820190508181036000830152613fe281613fa6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061402382613b93565b915061402e83613b93565b925082820261403c81613b93565b9150828204841483151761405357614052613fe9565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061409482613b93565b915061409f83613b93565b9250826140af576140ae61405a565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614116602f83613a89565b9150614121826140ba565b604082019050919050565b6000602082019050818103600083015261414581614109565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006141a8602883613a89565b91506141b38261414c565b604082019050919050565b600060208201905081810360008301526141d78161419b565b9050919050565b60006141e982613b93565b91506141f483613b93565b925082820190508082111561420c5761420b613fe9565b5b92915050565b7f4d757374206b656570206665657320617420313125206f72206c657373000000600082015250565b6000614248601d83613a89565b915061425382614212565b602082019050919050565b600060208201905081810360008301526142778161423b565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006142da603983613a89565b91506142e58261427e565b604082019050919050565b60006020820190508181036000830152614309816142cd565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061436c602583613a89565b915061437782614310565b604082019050919050565b6000602082019050818103600083015261439b8161435f565b9050919050565b7f4d757374206b65657020666565732061742020313125206f72206c6573730000600082015250565b60006143d8601e83613a89565b91506143e3826143a2565b602082019050919050565b60006020820190508181036000830152614407816143cb565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b600061446a602483613a89565b91506144758261440e565b604082019050919050565b600060208201905081810360008301526144998161445d565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006144fc603583613a89565b9150614507826144a0565b604082019050919050565b6000602082019050818103600083015261452b816144ef565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b600061458e603483613a89565b915061459982614532565b604082019050919050565b600060208201905081810360008301526145bd81614581565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614620602683613a89565b915061462b826145c4565b604082019050919050565b6000602082019050818103600083015261464f81614613565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006146b2602483613a89565b91506146bd82614656565b604082019050919050565b600060208201905081810360008301526146e1816146a5565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614744602283613a89565b915061474f826146e8565b604082019050919050565b6000602082019050818103600083015261477381614737565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006147d6602583613a89565b91506147e18261477a565b604082019050919050565b60006020820190508181036000830152614805816147c9565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614868602383613a89565b91506148738261480c565b604082019050919050565b600060208201905081810360008301526148978161485b565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006148d4601683613a89565b91506148df8261489e565b602082019050919050565b60006020820190508181036000830152614903816148c7565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614966603583613a89565b91506149718261490a565b604082019050919050565b6000602082019050818103600083015261499581614959565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006149d2601383613a89565b91506149dd8261499c565b602082019050919050565b60006020820190508181036000830152614a01816149c5565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614a64603683613a89565b9150614a6f82614a08565b604082019050919050565b60006020820190508181036000830152614a9381614a57565b9050919050565b6000614aa582613b93565b9150614ab083613b93565b9250828203905081811115614ac857614ac7613fe9565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614b2a602683613a89565b9150614b3582614ace565b604082019050919050565b60006020820190508181036000830152614b5981614b1d565b9050919050565b600081905092915050565b50565b6000614b7b600083614b60565b9150614b8682614b6b565b600082019050919050565b6000614b9c82614b6e565b9150819050919050565b6000606082019050614bbb6000830186613ce6565b614bc86020830185613ce6565b614bd56040830184613ce6565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614c4a81613b67565b92915050565b600060208284031215614c6657614c65613b30565b5b6000614c7484828501614c3b565b91505092915050565b6000819050919050565b6000614ca2614c9d614c9884614c7d565b613c6c565b613b93565b9050919050565b614cb281614c87565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614ced81613b55565b82525050565b6000614cff8383614ce4565b60208301905092915050565b6000602082019050919050565b6000614d2382614cb8565b614d2d8185614cc3565b9350614d3883614cd4565b8060005b83811015614d69578151614d508882614cf3565b9750614d5b83614d0b565b925050600181019050614d3c565b5085935050505092915050565b600060a082019050614d8b6000830188613ce6565b614d986020830187614ca9565b8181036040830152614daa8186614d18565b9050614db96060830185613d90565b614dc66080830184613ce6565b9695505050505050565b600060c082019050614de56000830189613d90565b614df26020830188613ce6565b614dff6040830187614ca9565b614e0c6060830186614ca9565b614e196080830185613d90565b614e2660a0830184613ce6565b979650505050505050565b600081519050614e4081613b9d565b92915050565b600080600060608486031215614e5f57614e5e613b30565b5b6000614e6d86828701614e31565b9350506020614e7e86828701614e31565b9250506040614e8f86828701614e31565b915050925092509256fea26469706673582212203841827d4766709540005915b3949b55a644b9445014fb6bb179618466ce42f664736f6c63430008130033

Deployed ByteCode Sourcemap

12179:15537:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2544:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3458:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13329:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12257:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2865:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20557:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13113:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13073;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17680:275;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3635:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12360:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2764:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4135:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12315:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12667:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20722:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12520:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12928:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12747:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2981:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;666:103;;;;;;;;;;;;;:::i;:::-;;16953:152;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18227:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12452:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12821;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18598:403;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16789:112;;;;;;;;;;;;;:::i;:::-;;443:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12489:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12963:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18490:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2652:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19620:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12895:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13153:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13039:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4358:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3116:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20128:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13550:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12707:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19430:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19009:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17963:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12552:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17175:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12787:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3299:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12594:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12858:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;777:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13001:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12634:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20367:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2544:100;2598:13;2631:5;2624:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2544:100;:::o;3458:169::-;3541:4;3558:39;3567:12;:10;:12::i;:::-;3581:7;3590:6;3558:8;:39::i;:::-;3615:4;3608:11;;3458:169;;;;:::o;13329:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;12257:51::-;;;:::o;2865:108::-;2926:7;2953:12;;2946:19;;2865:108;:::o;20557:157::-;589:12;:10;:12::i;:::-;578:23;;:7;:5;:7::i;:::-;:23;;;570:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20664:9:::1;;;;;;;;;;;20636:38;;20653:9;20636:38;;;;;;;;;;;;20697:9;20685;;:21;;;;;;;;;;;;;;;;;;20557:157:::0;:::o;13113:33::-;;;;:::o;13073:::-;;;;:::o;17680:275::-;589:12;:10;:12::i;:::-;578:23;;:7;:5;:7::i;:::-;:23;;;570:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17817:4:::1;17809;17804:1;17788:13;:11;:13::i;:::-;:17;;;;:::i;:::-;17787:26;;;;:::i;:::-;17786:35;;;;:::i;:::-;17776:6;:45;;17754:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;17940:6;17930;:17;;;;:::i;:::-;17907:20;:40;;;;17680:275:::0;:::o;3635:492::-;3775:4;3792:36;3802:6;3810:9;3821:6;3792:9;:36::i;:::-;3841:24;3868:11;:19;3880:6;3868:19;;;;;;;;;;;;;;;:33;3888:12;:10;:12::i;:::-;3868:33;;;;;;;;;;;;;;;;3841:60;;3940:6;3920:16;:26;;3912:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;4027:57;4036:6;4044:12;:10;:12::i;:::-;4077:6;4058:16;:25;4027:8;:57::i;:::-;4115:4;4108:11;;;3635:492;;;;;:::o;12360:53::-;12406:6;12360:53;:::o;2764:93::-;2822:5;2847:2;2840:9;;2764:93;:::o;4135:215::-;4223:4;4240:80;4249:12;:10;:12::i;:::-;4263:7;4309:10;4272:11;:25;4284:12;:10;:12::i;:::-;4272:25;;;;;;;;;;;;;;;:34;4298:7;4272:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;4240:8;:80::i;:::-;4338:4;4331:11;;4135:215;;;;:::o;12315:38::-;;;:::o;12667:33::-;;;;;;;;;;;;;:::o;20722:126::-;20788:4;20812:19;:28;20832:7;20812:28;;;;;;;;;;;;;;;;;;;;;;;;;20805:35;;20722:126;;;:::o;12520:23::-;;;;;;;;;;;;;:::o;12928:28::-;;;;:::o;12747:31::-;;;;;;;;;;;;;:::o;2981:127::-;3055:7;3082:9;:18;3092:7;3082:18;;;;;;;;;;;;;;;;3075:25;;2981:127;;;:::o;666:103::-;589:12;:10;:12::i;:::-;578:23;;:7;:5;:7::i;:::-;:23;;;570:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;731:30:::1;758:1;731:18;:30::i;:::-;666:103::o:0;16953:152::-;17005:4;589:12;:10;:12::i;:::-;578:23;;:7;:5;:7::i;:::-;:23;;;570:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17039:5:::1;17022:14;;:22;;;;;;;;;;;;;;;;;;17060:15;;;;;;;;;;17093:4;17086:11;;16953:152:::0;:::o;18227:167::-;589:12;:10;:12::i;:::-;578:23;;:7;:5;:7::i;:::-;:23;;;570:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18382:4:::1;18340:31;:39;18372:6;18340:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;18227:167:::0;;:::o;12452:30::-;;;;;;;;;;;;;:::o;12821:::-;;;;:::o;18598:403::-;589:12;:10;:12::i;:::-;578:23;;:7;:5;:7::i;:::-;:23;;;570:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18766:13:::1;18748:15;:31;;;;18808:13;18790:15;:31;;;;18844:7;18832:9;:19;;;;18913:9;;18895:15;;18877;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;18862:12;:60;;;;18957:2;18941:12;;:18;;18933:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;18598:403:::0;;;:::o;16789:112::-;589:12;:10;:12::i;:::-;578:23;;:7;:5;:7::i;:::-;:23;;;570:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16860:4:::1;16844:13;;:20;;;;;;;;;;;;;;;;;;16889:4;16875:11;;:18;;;;;;;;;;;;;;;;;;16789:112::o:0;443:87::-;489:7;516:6;;;;;;;;;;;509:13;;443:87;:::o;12489:24::-;;;;;;;;;;;;;:::o;12963:31::-;;;;:::o;18490:100::-;589:12;:10;:12::i;:::-;578:23;;:7;:5;:7::i;:::-;:23;;;570:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18575:7:::1;18561:11;;:21;;;;;;;;;;;;;;;;;;18490:100:::0;:::o;2652:104::-;2708:13;2741:7;2734:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2652:104;:::o;19620:304::-;589:12;:10;:12::i;:::-;578:23;;:7;:5;:7::i;:::-;:23;;;570:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19764:13:::1;19756:21;;:4;:21;;::::0;19734:128:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;19875:41;19904:4;19910:5;19875:28;:41::i;:::-;19620:304:::0;;:::o;12895:24::-;;;;:::o;13153:27::-;;;;:::o;13039:25::-;;;;:::o;4358:413::-;4451:4;4468:24;4495:11;:25;4507:12;:10;:12::i;:::-;4495:25;;;;;;;;;;;;;;;:34;4521:7;4495:34;;;;;;;;;;;;;;;;4468:61;;4568:15;4548:16;:35;;4540:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;4661:67;4670:12;:10;:12::i;:::-;4684:7;4712:15;4693:16;:34;4661:8;:67::i;:::-;4759:4;4752:11;;;4358:413;;;;:::o;3116:175::-;3202:4;3219:42;3229:12;:10;:12::i;:::-;3243:9;3254:6;3219:9;:42::i;:::-;3279:4;3272:11;;3116:175;;;;:::o;20128:231::-;589:12;:10;:12::i;:::-;578:23;;:7;:5;:7::i;:::-;:23;;;570:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20288:15:::1;;;;;;;;;;;20245:59;;20268:18;20245:59;;;;;;;;;;;;20333:18;20315:15;;:36;;;;;;;;;;;;;;;;;;20128:231:::0;:::o;13550:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;12707:33::-;;;;;;;;;;;;;:::o;19430:182::-;589:12;:10;:12::i;:::-;578:23;;:7;:5;:7::i;:::-;:23;;;570:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19546:8:::1;19515:19;:28;19535:7;19515:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;19586:7;19570:34;;;19595:8;19570:34;;;;;;:::i;:::-;;;;;;;;19430:182:::0;;:::o;19009:413::-;589:12;:10;:12::i;:::-;578:23;;:7;:5;:7::i;:::-;:23;;;570:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19179:13:::1;19160:16;:32;;;;19222:13;19203:16;:32;;;;19259:7;19246:10;:20;;;;19331:10;;19312:16;;19293;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;19277:13;:64;;;;19377:2;19360:13;;:19;;19352:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;19009:413:::0;;;:::o;17963:256::-;589:12;:10;:12::i;:::-;578:23;;:7;:5;:7::i;:::-;:23;;;570:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18103:4:::1;18095;18090:1;18074:13;:11;:13::i;:::-;:17;;;;:::i;:::-;18073:26;;;;:::i;:::-;18072:35;;;;:::i;:::-;18062:6;:45;;18040:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;18204:6;18194;:17;;;;:::i;:::-;18182:9;:29;;;;17963:256:::0;:::o;12552:35::-;;;;:::o;17175:497::-;17283:4;589:12;:10;:12::i;:::-;578:23;;:7;:5;:7::i;:::-;:23;;;570:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17362:6:::1;17357:1;17341:13;:11;:13::i;:::-;:17;;;;:::i;:::-;17340:28;;;;:::i;:::-;17327:9;:41;;17305:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;17517:4;17512:1;17496:13;:11;:13::i;:::-;:17;;;;:::i;:::-;17495:26;;;;:::i;:::-;17482:9;:39;;17460:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;17633:9;17612:18;:30;;;;17660:4;17653:11;;17175:497:::0;;;:::o;12787:27::-;;;;:::o;3299:151::-;3388:7;3415:11;:18;3427:5;3415:18;;;;;;;;;;;;;;;:27;3434:7;3415:27;;;;;;;;;;;;;;;;3408:34;;3299:151;;;;:::o;12594:33::-;;;;:::o;12858:30::-;;;;:::o;777:201::-;589:12;:10;:12::i;:::-;578:23;;:7;:5;:7::i;:::-;:23;;;570:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;886:1:::1;866:22;;:8;:22;;::::0;858:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;942:28;961:8;942:18;:28::i;:::-;777:201:::0;:::o;13001:31::-;;;;:::o;12634:24::-;;;;:::o;20367:182::-;589:12;:10;:12::i;:::-;578:23;;:7;:5;:7::i;:::-;:23;;;570:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20499:8:::1;;;;;;;;;;;20470:38;;20486:11;20470:38;;;;;;;;;;;;20530:11;20519:8;;:22;;;;;;;;;;;;;;;;;;20367:182:::0;:::o;96:98::-;149:7;176:10;169:17;;96:98;:::o;5927:380::-;6080:1;6063:19;;:5;:19;;;6055:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6161:1;6142:21;;:7;:21;;;6134:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6245:6;6215:11;:18;6227:5;6215:18;;;;;;;;;;;;;;;:27;6234:7;6215:27;;;;;;;;;;;;;;;:36;;;;6283:7;6267:32;;6276:5;6267:32;;;6292:6;6267:32;;;;;;:::i;:::-;;;;;;;;5927:380;;;:::o;20906:3924::-;21054:1;21038:18;;:4;:18;;;21030:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21131:1;21117:16;;:2;:16;;;21109:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;21200:1;21190:6;:11;21186:93;;21218:28;21234:4;21240:2;21244:1;21218:15;:28::i;:::-;21261:7;;21186:93;21295:14;;;;;;;;;;;21291:1694;;;21356:7;:5;:7::i;:::-;21348:15;;:4;:15;;;;:49;;;;;21390:7;:5;:7::i;:::-;21384:13;;:2;:13;;;;21348:49;:86;;;;;21432:1;21418:16;;:2;:16;;;;21348:86;:128;;;;;21469:6;21455:21;;:2;:21;;;;21348:128;:158;;;;;21498:8;;;;;;;;;;;21497:9;21348:158;21326:1648;;;21546:13;;;;;;;;;;;21541:223;;21618:19;:25;21638:4;21618:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;21647:19;:23;21667:2;21647:23;;;;;;;;;;;;;;;;;;;;;;;;;21618:52;21584:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;21541:223;21838:25;:31;21864:4;21838:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;21895:31;:35;21927:2;21895:35;;;;;;;;;;;;;;;;;;;;;;;;;21894:36;21838:92;21812:1147;;;22017:20;;22007:6;:30;;21973:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;22225:9;;22208:13;22218:2;22208:9;:13::i;:::-;22199:6;:22;;;;:::i;:::-;:35;;22165:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;21812:1147;;;22403:25;:29;22429:2;22403:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;22458:31;:37;22490:4;22458:37;;;;;;;;;;;;;;;;;;;;;;;;;22457:38;22403:92;22377:582;;;22582:20;;22572:6;:30;;22538:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;22377:582;;;22739:31;:35;22771:2;22739:35;;;;;;;;;;;;;;;;;;;;;;;;;22734:225;;22859:9;;22842:13;22852:2;22842:9;:13::i;:::-;22833:6;:22;;;;:::i;:::-;:35;;22799:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;22734:225;22377:582;21812:1147;21326:1648;21291:1694;22997:28;23028:24;23046:4;23028:9;:24::i;:::-;22997:55;;23065:12;23104:18;;23080:20;:42;;23065:57;;23153:7;:35;;;;;23177:11;;;;;;;;;;;23153:35;:61;;;;;23206:8;;;;;;;;;;;23205:9;23153:61;:110;;;;;23232:25;:31;23258:4;23232:31;;;;;;;;;;;;;;;;;;;;;;;;;23231:32;23153:110;:153;;;;;23281:19;:25;23301:4;23281:25;;;;;;;;;;;;;;;;;;;;;;;;;23280:26;23153:153;:194;;;;;23324:19;:23;23344:2;23324:23;;;;;;;;;;;;;;;;;;;;;;;;;23323:24;23153:194;23135:326;;;23385:4;23374:8;;:15;;;;;;;;;;;;;;;;;;23406:10;:8;:10::i;:::-;23444:5;23433:8;;:16;;;;;;;;;;;;;;;;;;23135:326;23473:12;23489:8;;;;;;;;;;;23488:9;23473:24;;23599:19;:25;23619:4;23599:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;23628:19;:23;23648:2;23628:23;;;;;;;;;;;;;;;;;;;;;;;;;23599:52;23595:100;;;23678:5;23668:15;;23595:100;23707:12;23812:7;23808:969;;;23864:25;:29;23890:2;23864:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;23913:1;23897:13;;:17;23864:50;23860:768;;;23942:34;23972:3;23942:25;23953:13;;23942:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;23935:41;;24045:13;;24025:16;;24018:4;:23;;;;:::i;:::-;24017:41;;;;:::i;:::-;23995:18;;:63;;;;;;;:::i;:::-;;;;;;;;24115:13;;24101:10;;24094:4;:17;;;;:::i;:::-;24093:35;;;;:::i;:::-;24077:12;;:51;;;;;;;:::i;:::-;;;;;;;;24197:13;;24177:16;;24170:4;:23;;;;:::i;:::-;24169:41;;;;:::i;:::-;24147:18;;:63;;;;;;;:::i;:::-;;;;;;;;23860:768;;;24272:25;:31;24298:4;24272:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;24322:1;24307:12;;:16;24272:51;24268:360;;;24351:33;24380:3;24351:24;24362:12;;24351:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;24344:40;;24452:12;;24433:15;;24426:4;:22;;;;:::i;:::-;24425:39;;;;:::i;:::-;24403:18;;:61;;;;;;;:::i;:::-;;;;;;;;24520:12;;24507:9;;24500:4;:16;;;;:::i;:::-;24499:33;;;;:::i;:::-;24483:12;;:49;;;;;;;:::i;:::-;;;;;;;;24600:12;;24581:15;;24574:4;:22;;;;:::i;:::-;24573:39;;;;:::i;:::-;24551:18;;:61;;;;;;;:::i;:::-;;;;;;;;24268:360;23860:768;24655:1;24648:4;:8;24644:91;;;24677:42;24693:4;24707;24714;24677:15;:42::i;:::-;24644:91;24761:4;24751:14;;;;;:::i;:::-;;;23808:969;24789:33;24805:4;24811:2;24815:6;24789:15;:33::i;:::-;21019:3811;;;;20906:3924;;;;:::o;986:191::-;1060:16;1079:6;;;;;;;;;;;1060:25;;1105:8;1096:6;;:17;;;;;;;;;;;;;;;;;;1160:8;1129:40;;1150:8;1129:40;;;;;;;;;;;;1049:128;986:191;:::o;19932:188::-;20049:5;20015:25;:31;20041:4;20015:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;20106:5;20072:40;;20100:4;20072:40;;;;;;;;;;;;19932:188;;:::o;4779:733::-;4937:1;4919:20;;:6;:20;;;4911:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;5021:1;5000:23;;:9;:23;;;4992:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;5076:47;5097:6;5105:9;5116:6;5076:20;:47::i;:::-;5136:21;5160:9;:17;5170:6;5160:17;;;;;;;;;;;;;;;;5136:41;;5213:6;5196:13;:23;;5188:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;5334:6;5318:13;:22;5298:9;:17;5308:6;5298:17;;;;;;;;;;;;;;;:42;;;;5386:6;5362:9;:20;5372:9;5362:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;5427:9;5410:35;;5419:6;5410:35;;;5438:6;5410:35;;;;;;:::i;:::-;;;;;;;;5458:46;5478:6;5486:9;5497:6;5458:19;:46::i;:::-;4900:612;4779:733;;;:::o;25957:1756::-;25996:23;26022:24;26040:4;26022:9;:24::i;:::-;25996:50;;26057:25;26153:12;;26119:18;;26085;;:52;;;;:::i;:::-;:80;;;;:::i;:::-;26057:108;;26176:12;26224:1;26205:15;:20;:46;;;;26250:1;26229:17;:22;26205:46;26201:85;;;26268:7;;;;;26201:85;26341:2;26320:18;;:23;;;;:::i;:::-;26302:15;:41;26298:115;;;26399:2;26378:18;;:23;;;;:::i;:::-;26360:41;;26298:115;26474:23;26587:1;26554:17;26519:18;;26501:15;:36;;;;:::i;:::-;26500:71;;;;:::i;:::-;:88;;;;:::i;:::-;26474:114;;26599:26;26628:36;26648:15;26628;:19;;:36;;;;:::i;:::-;26599:65;;26677:25;26705:21;26677:49;;26739:36;26756:18;26739:16;:36::i;:::-;26788:18;26809:44;26835:17;26809:21;:25;;:44;;;;:::i;:::-;26788:65;;26866:23;26892:81;26945:17;26892:34;26907:18;;26892:10;:14;;:34;;;;:::i;:::-;:38;;:81;;;;:::i;:::-;26866:107;;26984:17;27004:51;27037:17;27004:28;27019:12;;27004:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;26984:71;;27068:23;27125:9;27107:15;27094:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;27068:66;;27168:1;27147:18;:22;;;;27201:1;27180:18;:22;;;;27228:1;27213:12;:16;;;;27264:9;;;;;;;;;;;27256:23;;27287:9;27256:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27242:59;;;;;27336:1;27318:15;:19;:42;;;;;27359:1;27341:15;:19;27318:42;27314:278;;;27377:46;27390:15;27407;27377:12;:46::i;:::-;27443:137;27476:18;27513:15;27547:18;;27443:137;;;;;;;;:::i;:::-;;;;;;;;27314:278;27626:15;;;;;;;;;;;27618:29;;27669:21;27618:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27604:101;;;;;25985:1728;;;;;;;;;;25957:1756;:::o;6711:98::-;6769:7;6800:1;6796;:5;;;;:::i;:::-;6789:12;;6711:98;;;;:::o;6817:::-;6875:7;6906:1;6902;:5;;;;:::i;:::-;6895:12;;6817:98;;;;:::o;6315:125::-;;;;:::o;6448:124::-;;;;:::o;6605:98::-;6663:7;6694:1;6690;:5;;;;:::i;:::-;6683:12;;6605:98;;;;:::o;24838:589::-;24964:21;25002:1;24988:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24964:40;;25033:4;25015;25020:1;25015:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;25059:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25049:4;25054:1;25049:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;25094:62;25111:4;25126:15;25144:11;25094:8;:62::i;:::-;25195:15;:66;;;25276:11;25302:1;25346:4;25373;25393:15;25195:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24893:534;24838:589;:::o;25435:514::-;25583:62;25600:4;25615:15;25633:11;25583:8;:62::i;:::-;25688:15;:31;;;25727:9;25760:4;25780:11;25806:1;25849;25892:8;;;;;;;;;;;25915:15;25688:253;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;25435: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:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:60::-;3809:3;3830:5;3823:12;;3781:60;;;:::o;3847:142::-;3897:9;3930:53;3948:34;3957:24;3975:5;3957:24;:::i;:::-;3948:34;:::i;:::-;3930:53;:::i;:::-;3917:66;;3847:142;;;:::o;3995:126::-;4045:9;4078:37;4109:5;4078:37;:::i;:::-;4065:50;;3995:126;;;:::o;4127:153::-;4204:9;4237:37;4268:5;4237:37;:::i;:::-;4224:50;;4127:153;;;:::o;4286:185::-;4400:64;4458:5;4400:64;:::i;:::-;4395:3;4388:77;4286:185;;:::o;4477:276::-;4597:4;4635:2;4624:9;4620:18;4612:26;;4648:98;4743:1;4732:9;4728:17;4719:6;4648:98;:::i;:::-;4477:276;;;;:::o;4759:118::-;4846:24;4864:5;4846:24;:::i;:::-;4841:3;4834:37;4759:118;;:::o;4883:222::-;4976:4;5014:2;5003:9;4999:18;4991:26;;5027:71;5095:1;5084:9;5080:17;5071:6;5027:71;:::i;:::-;4883:222;;;;:::o;5111:329::-;5170:6;5219:2;5207:9;5198:7;5194:23;5190:32;5187:119;;;5225:79;;:::i;:::-;5187:119;5345:1;5370:53;5415:7;5406:6;5395:9;5391:22;5370:53;:::i;:::-;5360:63;;5316:117;5111:329;;;;:::o;5446:619::-;5523:6;5531;5539;5588:2;5576:9;5567:7;5563:23;5559:32;5556:119;;;5594:79;;:::i;:::-;5556:119;5714:1;5739:53;5784:7;5775:6;5764:9;5760:22;5739:53;:::i;:::-;5729:63;;5685:117;5841:2;5867:53;5912:7;5903:6;5892:9;5888:22;5867:53;:::i;:::-;5857:63;;5812:118;5969:2;5995:53;6040:7;6031:6;6020:9;6016:22;5995:53;:::i;:::-;5985:63;;5940:118;5446:619;;;;;:::o;6071:118::-;6158:24;6176:5;6158:24;:::i;:::-;6153:3;6146:37;6071:118;;:::o;6195:222::-;6288:4;6326:2;6315:9;6311:18;6303:26;;6339:71;6407:1;6396:9;6392:17;6383:6;6339:71;:::i;:::-;6195:222;;;;:::o;6423:86::-;6458:7;6498:4;6491:5;6487:16;6476:27;;6423:86;;;:::o;6515:112::-;6598:22;6614:5;6598:22;:::i;:::-;6593:3;6586:35;6515:112;;:::o;6633:214::-;6722:4;6760:2;6749:9;6745:18;6737:26;;6773:67;6837:1;6826:9;6822:17;6813:6;6773:67;:::i;:::-;6633:214;;;;:::o;6853:116::-;6923:21;6938:5;6923:21;:::i;:::-;6916:5;6913:32;6903:60;;6959:1;6956;6949:12;6903:60;6853:116;:::o;6975:133::-;7018:5;7056:6;7043:20;7034:29;;7072:30;7096:5;7072:30;:::i;:::-;6975:133;;;;:::o;7114:468::-;7179:6;7187;7236:2;7224:9;7215:7;7211:23;7207:32;7204:119;;;7242:79;;:::i;:::-;7204:119;7362:1;7387:53;7432:7;7423:6;7412:9;7408:22;7387:53;:::i;:::-;7377:63;;7333:117;7489:2;7515:50;7557:7;7548:6;7537:9;7533:22;7515:50;:::i;:::-;7505:60;;7460:115;7114:468;;;;;:::o;7588:619::-;7665:6;7673;7681;7730:2;7718:9;7709:7;7705:23;7701:32;7698:119;;;7736:79;;:::i;:::-;7698:119;7856:1;7881:53;7926:7;7917:6;7906:9;7902:22;7881:53;:::i;:::-;7871:63;;7827:117;7983:2;8009:53;8054:7;8045:6;8034:9;8030:22;8009:53;:::i;:::-;7999:63;;7954:118;8111:2;8137:53;8182:7;8173:6;8162:9;8158:22;8137:53;:::i;:::-;8127:63;;8082:118;7588:619;;;;;:::o;8213:323::-;8269:6;8318:2;8306:9;8297:7;8293:23;8289:32;8286:119;;;8324:79;;:::i;:::-;8286:119;8444:1;8469:50;8511:7;8502:6;8491:9;8487:22;8469:50;:::i;:::-;8459:60;;8415:114;8213:323;;;;:::o;8542:474::-;8610:6;8618;8667:2;8655:9;8646:7;8642:23;8638:32;8635:119;;;8673:79;;:::i;:::-;8635:119;8793:1;8818:53;8863:7;8854:6;8843:9;8839:22;8818:53;:::i;:::-;8808:63;;8764:117;8920:2;8946:53;8991:7;8982:6;8971:9;8967:22;8946:53;:::i;:::-;8936:63;;8891:118;8542:474;;;;;:::o;9022:180::-;9070:77;9067:1;9060:88;9167:4;9164:1;9157:15;9191:4;9188:1;9181:15;9208:320;9252:6;9289:1;9283:4;9279:12;9269:22;;9336:1;9330:4;9326:12;9357:18;9347:81;;9413:4;9405:6;9401:17;9391:27;;9347:81;9475:2;9467:6;9464:14;9444:18;9441:38;9438:84;;9494:18;;:::i;:::-;9438:84;9259:269;9208:320;;;:::o;9534:182::-;9674:34;9670:1;9662:6;9658:14;9651:58;9534:182;:::o;9722:366::-;9864:3;9885:67;9949:2;9944:3;9885:67;:::i;:::-;9878:74;;9961:93;10050:3;9961:93;:::i;:::-;10079:2;10074:3;10070:12;10063:19;;9722:366;;;:::o;10094:419::-;10260:4;10298:2;10287:9;10283:18;10275:26;;10347:9;10341:4;10337:20;10333:1;10322:9;10318:17;10311:47;10375:131;10501:4;10375:131;:::i;:::-;10367:139;;10094:419;;;:::o;10519:180::-;10567:77;10564:1;10557:88;10664:4;10661:1;10654:15;10688:4;10685:1;10678:15;10705:410;10745:7;10768:20;10786:1;10768:20;:::i;:::-;10763:25;;10802:20;10820:1;10802:20;:::i;:::-;10797:25;;10857:1;10854;10850:9;10879:30;10897:11;10879:30;:::i;:::-;10868:41;;11058:1;11049:7;11045:15;11042:1;11039:22;11019:1;11012:9;10992:83;10969:139;;11088:18;;:::i;:::-;10969:139;10753:362;10705:410;;;;:::o;11121:180::-;11169:77;11166:1;11159:88;11266:4;11263:1;11256:15;11290:4;11287:1;11280:15;11307:185;11347:1;11364:20;11382:1;11364:20;:::i;:::-;11359:25;;11398:20;11416:1;11398:20;:::i;:::-;11393:25;;11437:1;11427:35;;11442:18;;:::i;:::-;11427:35;11484:1;11481;11477:9;11472:14;;11307:185;;;;:::o;11498:234::-;11638:34;11634:1;11626:6;11622:14;11615:58;11707:17;11702:2;11694:6;11690:15;11683:42;11498:234;:::o;11738:366::-;11880:3;11901:67;11965:2;11960:3;11901:67;:::i;:::-;11894:74;;11977:93;12066:3;11977:93;:::i;:::-;12095:2;12090:3;12086:12;12079:19;;11738:366;;;:::o;12110:419::-;12276:4;12314:2;12303:9;12299:18;12291:26;;12363:9;12357:4;12353:20;12349:1;12338:9;12334:17;12327:47;12391:131;12517:4;12391:131;:::i;:::-;12383:139;;12110:419;;;:::o;12535:227::-;12675:34;12671:1;12663:6;12659:14;12652:58;12744:10;12739:2;12731:6;12727:15;12720:35;12535:227;:::o;12768:366::-;12910:3;12931:67;12995:2;12990:3;12931:67;:::i;:::-;12924:74;;13007:93;13096:3;13007:93;:::i;:::-;13125:2;13120:3;13116:12;13109:19;;12768:366;;;:::o;13140:419::-;13306:4;13344:2;13333:9;13329:18;13321:26;;13393:9;13387:4;13383:20;13379:1;13368:9;13364:17;13357:47;13421:131;13547:4;13421:131;:::i;:::-;13413:139;;13140:419;;;:::o;13565:191::-;13605:3;13624:20;13642:1;13624:20;:::i;:::-;13619:25;;13658:20;13676:1;13658:20;:::i;:::-;13653:25;;13701:1;13698;13694:9;13687:16;;13722:3;13719:1;13716:10;13713:36;;;13729:18;;:::i;:::-;13713:36;13565:191;;;;:::o;13762:179::-;13902:31;13898:1;13890:6;13886:14;13879:55;13762:179;:::o;13947:366::-;14089:3;14110:67;14174:2;14169:3;14110:67;:::i;:::-;14103:74;;14186:93;14275:3;14186:93;:::i;:::-;14304:2;14299:3;14295:12;14288:19;;13947:366;;;:::o;14319:419::-;14485:4;14523:2;14512:9;14508:18;14500:26;;14572:9;14566:4;14562:20;14558:1;14547:9;14543:17;14536:47;14600:131;14726:4;14600:131;:::i;:::-;14592:139;;14319:419;;;:::o;14744:244::-;14884:34;14880:1;14872:6;14868:14;14861:58;14953:27;14948:2;14940:6;14936:15;14929:52;14744:244;:::o;14994:366::-;15136:3;15157:67;15221:2;15216:3;15157:67;:::i;:::-;15150:74;;15233:93;15322:3;15233:93;:::i;:::-;15351:2;15346:3;15342:12;15335:19;;14994:366;;;:::o;15366:419::-;15532:4;15570:2;15559:9;15555:18;15547:26;;15619:9;15613:4;15609:20;15605:1;15594:9;15590:17;15583:47;15647:131;15773:4;15647:131;:::i;:::-;15639:139;;15366:419;;;:::o;15791:224::-;15931:34;15927:1;15919:6;15915:14;15908:58;16000:7;15995:2;15987:6;15983:15;15976:32;15791:224;:::o;16021:366::-;16163:3;16184:67;16248:2;16243:3;16184:67;:::i;:::-;16177:74;;16260:93;16349:3;16260:93;:::i;:::-;16378:2;16373:3;16369:12;16362:19;;16021:366;;;:::o;16393:419::-;16559:4;16597:2;16586:9;16582:18;16574:26;;16646:9;16640:4;16636:20;16632:1;16621:9;16617:17;16610:47;16674:131;16800:4;16674:131;:::i;:::-;16666:139;;16393:419;;;:::o;16818:180::-;16958:32;16954:1;16946:6;16942:14;16935:56;16818:180;:::o;17004:366::-;17146:3;17167:67;17231:2;17226:3;17167:67;:::i;:::-;17160:74;;17243:93;17332:3;17243:93;:::i;:::-;17361:2;17356:3;17352:12;17345:19;;17004:366;;;:::o;17376:419::-;17542:4;17580:2;17569:9;17565:18;17557:26;;17629:9;17623:4;17619:20;17615:1;17604:9;17600:17;17593:47;17657:131;17783:4;17657:131;:::i;:::-;17649:139;;17376:419;;;:::o;17801:223::-;17941:34;17937:1;17929:6;17925:14;17918:58;18010:6;18005:2;17997:6;17993:15;17986:31;17801:223;:::o;18030:366::-;18172:3;18193:67;18257:2;18252:3;18193:67;:::i;:::-;18186:74;;18269:93;18358:3;18269:93;:::i;:::-;18387:2;18382:3;18378:12;18371:19;;18030:366;;;:::o;18402:419::-;18568:4;18606:2;18595:9;18591:18;18583:26;;18655:9;18649:4;18645:20;18641:1;18630:9;18626:17;18619:47;18683:131;18809:4;18683:131;:::i;:::-;18675:139;;18402:419;;;:::o;18827:240::-;18967:34;18963:1;18955:6;18951:14;18944:58;19036:23;19031:2;19023:6;19019:15;19012:48;18827:240;:::o;19073:366::-;19215:3;19236:67;19300:2;19295:3;19236:67;:::i;:::-;19229:74;;19312:93;19401:3;19312:93;:::i;:::-;19430:2;19425:3;19421:12;19414:19;;19073:366;;;:::o;19445:419::-;19611:4;19649:2;19638:9;19634:18;19626:26;;19698:9;19692:4;19688:20;19684:1;19673:9;19669:17;19662:47;19726:131;19852:4;19726:131;:::i;:::-;19718:139;;19445:419;;;:::o;19870:239::-;20010:34;20006:1;19998:6;19994:14;19987:58;20079:22;20074:2;20066:6;20062:15;20055:47;19870:239;:::o;20115:366::-;20257:3;20278:67;20342:2;20337:3;20278:67;:::i;:::-;20271:74;;20354:93;20443:3;20354:93;:::i;:::-;20472:2;20467:3;20463:12;20456:19;;20115:366;;;:::o;20487:419::-;20653:4;20691:2;20680:9;20676:18;20668:26;;20740:9;20734:4;20730:20;20726:1;20715:9;20711:17;20704:47;20768:131;20894:4;20768:131;:::i;:::-;20760:139;;20487:419;;;:::o;20912:225::-;21052:34;21048:1;21040:6;21036:14;21029:58;21121:8;21116:2;21108:6;21104:15;21097:33;20912:225;:::o;21143:366::-;21285:3;21306:67;21370:2;21365:3;21306:67;:::i;:::-;21299:74;;21382:93;21471:3;21382:93;:::i;:::-;21500:2;21495:3;21491:12;21484:19;;21143:366;;;:::o;21515:419::-;21681:4;21719:2;21708:9;21704:18;21696:26;;21768:9;21762:4;21758:20;21754:1;21743:9;21739:17;21732:47;21796:131;21922:4;21796:131;:::i;:::-;21788:139;;21515:419;;;:::o;21940:223::-;22080:34;22076:1;22068:6;22064:14;22057:58;22149:6;22144:2;22136:6;22132:15;22125:31;21940:223;:::o;22169:366::-;22311:3;22332:67;22396:2;22391:3;22332:67;:::i;:::-;22325:74;;22408:93;22497:3;22408:93;:::i;:::-;22526:2;22521:3;22517:12;22510:19;;22169:366;;;:::o;22541:419::-;22707:4;22745:2;22734:9;22730:18;22722:26;;22794:9;22788:4;22784:20;22780:1;22769:9;22765:17;22758:47;22822:131;22948:4;22822:131;:::i;:::-;22814:139;;22541:419;;;:::o;22966:221::-;23106:34;23102:1;23094:6;23090:14;23083:58;23175:4;23170:2;23162:6;23158:15;23151:29;22966:221;:::o;23193:366::-;23335:3;23356:67;23420:2;23415:3;23356:67;:::i;:::-;23349:74;;23432:93;23521:3;23432:93;:::i;:::-;23550:2;23545:3;23541:12;23534:19;;23193:366;;;:::o;23565:419::-;23731:4;23769:2;23758:9;23754:18;23746:26;;23818:9;23812:4;23808:20;23804:1;23793:9;23789:17;23782:47;23846:131;23972:4;23846:131;:::i;:::-;23838:139;;23565:419;;;:::o;23990:224::-;24130:34;24126:1;24118:6;24114:14;24107:58;24199:7;24194:2;24186:6;24182:15;24175:32;23990:224;:::o;24220:366::-;24362:3;24383:67;24447:2;24442:3;24383:67;:::i;:::-;24376:74;;24459:93;24548:3;24459:93;:::i;:::-;24577:2;24572:3;24568:12;24561:19;;24220:366;;;:::o;24592:419::-;24758:4;24796:2;24785:9;24781:18;24773:26;;24845:9;24839:4;24835:20;24831:1;24820:9;24816:17;24809:47;24873:131;24999:4;24873:131;:::i;:::-;24865:139;;24592:419;;;:::o;25017:222::-;25157:34;25153:1;25145:6;25141:14;25134:58;25226:5;25221:2;25213:6;25209:15;25202:30;25017:222;:::o;25245:366::-;25387:3;25408:67;25472:2;25467:3;25408:67;:::i;:::-;25401:74;;25484:93;25573:3;25484:93;:::i;:::-;25602:2;25597:3;25593:12;25586:19;;25245:366;;;:::o;25617:419::-;25783:4;25821:2;25810:9;25806:18;25798:26;;25870:9;25864:4;25860:20;25856:1;25845:9;25841:17;25834:47;25898:131;26024:4;25898:131;:::i;:::-;25890:139;;25617:419;;;:::o;26042:172::-;26182:24;26178:1;26170:6;26166:14;26159:48;26042:172;:::o;26220:366::-;26362:3;26383:67;26447:2;26442:3;26383:67;:::i;:::-;26376:74;;26459:93;26548:3;26459:93;:::i;:::-;26577:2;26572:3;26568:12;26561:19;;26220:366;;;:::o;26592:419::-;26758:4;26796:2;26785:9;26781:18;26773:26;;26845:9;26839:4;26835:20;26831:1;26820:9;26816:17;26809:47;26873:131;26999:4;26873:131;:::i;:::-;26865:139;;26592:419;;;:::o;27017:240::-;27157:34;27153:1;27145:6;27141:14;27134:58;27226:23;27221:2;27213:6;27209:15;27202:48;27017:240;:::o;27263:366::-;27405:3;27426:67;27490:2;27485:3;27426:67;:::i;:::-;27419:74;;27502:93;27591:3;27502:93;:::i;:::-;27620:2;27615:3;27611:12;27604:19;;27263:366;;;:::o;27635:419::-;27801:4;27839:2;27828:9;27824:18;27816:26;;27888:9;27882:4;27878:20;27874:1;27863:9;27859:17;27852:47;27916:131;28042:4;27916:131;:::i;:::-;27908:139;;27635:419;;;:::o;28060:169::-;28200:21;28196:1;28188:6;28184:14;28177:45;28060:169;:::o;28235:366::-;28377:3;28398:67;28462:2;28457:3;28398:67;:::i;:::-;28391:74;;28474:93;28563:3;28474:93;:::i;:::-;28592:2;28587:3;28583:12;28576:19;;28235:366;;;:::o;28607:419::-;28773:4;28811:2;28800:9;28796:18;28788:26;;28860:9;28854:4;28850:20;28846:1;28835:9;28831:17;28824:47;28888:131;29014:4;28888:131;:::i;:::-;28880:139;;28607:419;;;:::o;29032:241::-;29172:34;29168:1;29160:6;29156:14;29149:58;29241:24;29236:2;29228:6;29224:15;29217:49;29032:241;:::o;29279:366::-;29421:3;29442:67;29506:2;29501:3;29442:67;:::i;:::-;29435:74;;29518:93;29607:3;29518:93;:::i;:::-;29636:2;29631:3;29627:12;29620:19;;29279:366;;;:::o;29651:419::-;29817:4;29855:2;29844:9;29840:18;29832:26;;29904:9;29898:4;29894:20;29890:1;29879:9;29875:17;29868:47;29932:131;30058:4;29932:131;:::i;:::-;29924:139;;29651:419;;;:::o;30076:194::-;30116:4;30136:20;30154:1;30136:20;:::i;:::-;30131:25;;30170:20;30188:1;30170:20;:::i;:::-;30165:25;;30214:1;30211;30207:9;30199:17;;30238:1;30232:4;30229:11;30226:37;;;30243:18;;:::i;:::-;30226:37;30076:194;;;;:::o;30276:225::-;30416:34;30412:1;30404:6;30400:14;30393:58;30485:8;30480:2;30472:6;30468:15;30461:33;30276:225;:::o;30507:366::-;30649:3;30670:67;30734:2;30729:3;30670:67;:::i;:::-;30663:74;;30746:93;30835:3;30746:93;:::i;:::-;30864:2;30859:3;30855:12;30848:19;;30507:366;;;:::o;30879:419::-;31045:4;31083:2;31072:9;31068:18;31060:26;;31132:9;31126:4;31122:20;31118:1;31107:9;31103:17;31096:47;31160:131;31286:4;31160:131;:::i;:::-;31152:139;;30879:419;;;:::o;31304:147::-;31405:11;31442:3;31427:18;;31304:147;;;;:::o;31457:114::-;;:::o;31577:398::-;31736:3;31757:83;31838:1;31833:3;31757:83;:::i;:::-;31750:90;;31849:93;31938:3;31849:93;:::i;:::-;31967:1;31962:3;31958:11;31951:18;;31577:398;;;:::o;31981:379::-;32165:3;32187:147;32330:3;32187:147;:::i;:::-;32180:154;;32351:3;32344:10;;31981:379;;;:::o;32366:442::-;32515:4;32553:2;32542:9;32538:18;32530:26;;32566:71;32634:1;32623:9;32619:17;32610:6;32566:71;:::i;:::-;32647:72;32715:2;32704:9;32700:18;32691:6;32647:72;:::i;:::-;32729;32797:2;32786:9;32782:18;32773:6;32729:72;:::i;:::-;32366:442;;;;;;:::o;32814:180::-;32862:77;32859:1;32852:88;32959:4;32956:1;32949:15;32983:4;32980:1;32973:15;33000:180;33048:77;33045:1;33038:88;33145:4;33142:1;33135:15;33169:4;33166:1;33159:15;33186:143;33243:5;33274:6;33268:13;33259:22;;33290:33;33317:5;33290:33;:::i;:::-;33186:143;;;;:::o;33335:351::-;33405:6;33454:2;33442:9;33433:7;33429:23;33425:32;33422:119;;;33460:79;;:::i;:::-;33422:119;33580:1;33605:64;33661:7;33652:6;33641:9;33637:22;33605:64;:::i;:::-;33595:74;;33551:128;33335:351;;;;:::o;33692:85::-;33737:7;33766:5;33755:16;;33692:85;;;:::o;33783:158::-;33841:9;33874:61;33892:42;33901:32;33927:5;33901:32;:::i;:::-;33892:42;:::i;:::-;33874:61;:::i;:::-;33861:74;;33783:158;;;:::o;33947:147::-;34042:45;34081:5;34042:45;:::i;:::-;34037:3;34030:58;33947:147;;:::o;34100:114::-;34167:6;34201:5;34195:12;34185:22;;34100:114;;;:::o;34220:184::-;34319:11;34353:6;34348:3;34341:19;34393:4;34388:3;34384:14;34369:29;;34220:184;;;;:::o;34410:132::-;34477:4;34500:3;34492:11;;34530:4;34525:3;34521:14;34513:22;;34410:132;;;:::o;34548:108::-;34625:24;34643:5;34625:24;:::i;:::-;34620:3;34613:37;34548:108;;:::o;34662:179::-;34731:10;34752:46;34794:3;34786:6;34752:46;:::i;:::-;34830:4;34825:3;34821:14;34807:28;;34662:179;;;;:::o;34847:113::-;34917:4;34949;34944:3;34940:14;34932:22;;34847:113;;;:::o;34996:732::-;35115:3;35144:54;35192:5;35144:54;:::i;:::-;35214:86;35293:6;35288:3;35214:86;:::i;:::-;35207:93;;35324:56;35374:5;35324:56;:::i;:::-;35403:7;35434:1;35419:284;35444:6;35441:1;35438:13;35419:284;;;35520:6;35514:13;35547:63;35606:3;35591:13;35547:63;:::i;:::-;35540:70;;35633:60;35686:6;35633:60;:::i;:::-;35623:70;;35479:224;35466:1;35463;35459:9;35454:14;;35419:284;;;35423:14;35719:3;35712:10;;35120:608;;;34996:732;;;;:::o;35734:831::-;35997:4;36035:3;36024:9;36020:19;36012:27;;36049:71;36117:1;36106:9;36102:17;36093:6;36049:71;:::i;:::-;36130:80;36206:2;36195:9;36191:18;36182:6;36130:80;:::i;:::-;36257:9;36251:4;36247:20;36242:2;36231:9;36227:18;36220:48;36285:108;36388:4;36379:6;36285:108;:::i;:::-;36277:116;;36403:72;36471:2;36460:9;36456:18;36447:6;36403:72;:::i;:::-;36485:73;36553:3;36542:9;36538:19;36529:6;36485:73;:::i;:::-;35734:831;;;;;;;;:::o;36571:807::-;36820:4;36858:3;36847:9;36843:19;36835:27;;36872:71;36940:1;36929:9;36925:17;36916:6;36872:71;:::i;:::-;36953:72;37021:2;37010:9;37006:18;36997:6;36953:72;:::i;:::-;37035:80;37111:2;37100:9;37096:18;37087:6;37035:80;:::i;:::-;37125;37201:2;37190:9;37186:18;37177:6;37125:80;:::i;:::-;37215:73;37283:3;37272:9;37268:19;37259:6;37215:73;:::i;:::-;37298;37366:3;37355:9;37351:19;37342:6;37298:73;:::i;:::-;36571:807;;;;;;;;;:::o;37384:143::-;37441:5;37472:6;37466:13;37457:22;;37488:33;37515:5;37488:33;:::i;:::-;37384:143;;;;:::o;37533:663::-;37621:6;37629;37637;37686:2;37674:9;37665:7;37661:23;37657:32;37654:119;;;37692:79;;:::i;:::-;37654:119;37812:1;37837:64;37893:7;37884:6;37873:9;37869:22;37837:64;:::i;:::-;37827:74;;37783:128;37950:2;37976:64;38032:7;38023:6;38012:9;38008:22;37976:64;:::i;:::-;37966:74;;37921:129;38089:2;38115:64;38171:7;38162:6;38151:9;38147:22;38115:64;:::i;:::-;38105:74;;38060:129;37533:663;;;;;:::o

Metadata Hash

ipfs://3841827d4766709540005915b3949b55a644b9445014fb6bb179618466ce42f6
Loading