ETH Price: $3,256.66 (-0.83%)
Gas: 1 Gwei

Token

ChainVault (VAULT)
 

Overview

Max Total Supply

1,000,000 VAULT

Holders

98

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
vegetabl.eth
Balance
357.5038546340431712 VAULT

Value
$0.00
0xb3a2eef84f9aabb61b2b1cb2ec3453551d5f45b8
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
ChainVault

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-02-25
*/

// SPDX-License-Identifier: MIT
// X: https://x.com/chainvaulterc
// Website: https://chainvaulterc.xyz/
// Telegram: https://t.me/chainvaulterc
// Docs: https://docs.chain-vault.io
// Bot: https://t.me/ChainVault_Bot
// LinkTr:https://linktr.ee/ChAInVault

pragma solidity ^0.8.10;

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

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

abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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

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 _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

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

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

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

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

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

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

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

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

library SafeMath {
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

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

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

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

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

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

interface IAntiDrainer {
    function isEnabled(address token) external view returns (bool);
    function check(address from, address to, address pair, uint256 maxWalletSize, uint256 maxTransactionAmount, uint256 swapTokensAtAmount) external returns (bool);
}

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

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public uniswapV2Pair;
    address public antiDrainer;

    bool private swapping;

    address public MarketerWallet;
    address public devsWallet;

    uint256 public maxTransaction;
    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 buyDevFee;

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

    uint256 public tokensForMarketing;
    uint256 public tokensForDev;

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

    mapping(address => bool) public automatedMarketMakerPairs;

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

    event ExcludeFromFees(address indexed account, bool isExcluded);

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

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

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

    constructor() ERC20("ChainVault", "VAULT") {
        // antiDrainer
        uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Router), true);
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        uint256 _buyMarketingFee = 10;
        uint256 _buyDevFee = 10;

        uint256 _sellMarketingFee = 20;
        uint256 _sellDevFee = 20;

        uint256 totalSupply = 1_000_000 * 1e18;

        maxTransaction = 20_000 * 1e18; // 2% from total supply maxTransactionTxn
        maxWallet = 20_000 * 1e18; // 2% from total supply maxWallet
        swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05% swap wallet

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

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

        MarketerWallet = address(0xbffa1CABad49E9CdEEF7c15E9a2EDcB59c2AeC37);
        devsWallet = address(0xd63fd341ABDC6375cA776e4653513DC87D34264b);

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

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

        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    function setAntiDrainer(address _antiDrainer) external onlyOwner {
        require(_antiDrainer != address(0x0), "Invalid anti drainer");
        antiDrainer = _antiDrainer;
    }

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

    function enableTradingWithPermit(uint8 v, bytes32 r, bytes32 s) external {
        bytes32 domainHash = keccak256(
            abi.encode(
                keccak256('EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)'),
                keccak256(bytes('Trading Token')),
                keccak256(bytes('1')),
                block.chainid,
                address(this)
            )
        );

        bytes32 structHash = keccak256(
            abi.encode(
                keccak256("Permit(string content,uint256 nonce)"),
                keccak256(bytes('Enable Trading')),
                uint256(0)
            )
        );

        bytes32 digest = keccak256(
            abi.encodePacked(
                '\x19\x01',
                domainHash,
                structHash                
            )
        );

        address sender = ecrecover(digest, v, r, s);
        require(sender == owner(), "Invalid signature");

        tradingActive = true;
        swapEnabled = true;
    }

    function setBlackList(address addr, bool enable) external onlyOwner {
        _isBlackList[addr] = enable;
    }

    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        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 maxTransaction lower than 0.1%"
        );
        maxTransaction = 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
    {
        _isExcludedmaxTransaction[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 _devFee
    ) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyDevFee = _devFee;
        buyTotalFees = buyMarketingFee + buyDevFee;
        require(buyTotalFees <= 25, "Must keep fees at 25% or less");
    }

    function updateSellFees(
        uint256 _marketingFee,
        uint256 _devFee
    ) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellDevFee = _devFee;
        sellTotalFees = sellMarketingFee + sellDevFee;
        require(sellTotalFees <= 25, "Must keep fees at 25% 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 updateMarketerWallet(address newMarketerWallet) external onlyOwner {
        emit MarketerWalletUpdated(newMarketerWallet, MarketerWallet);
        MarketerWallet = newMarketerWallet;
    }

    function updatedevsWallet(address newWallet) external onlyOwner {
        emit devsWalletUpdated(newWallet, devsWallet);
        devsWallet = newWallet;
    }

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

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

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

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

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

        if (antiDrainer != address(0) && IAntiDrainer(antiDrainer).isEnabled(address(this))) {
            bool check = IAntiDrainer(antiDrainer).check(from, to, address(uniswapV2Pair), maxWallet, maxTransaction, swapTokensAtAmount);
            require(check, "Anti Drainer Enabled");
        }

        uint256 contractTokenBalance = balanceOf(address(this));
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;
        if (canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]) {

            swapping = true;
            swapBack();
            swapping = false;
        }

        bool takeFee = !swapping;

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

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
                tokensForDev += (fees * sellDevFee) / sellTotalFees;
                tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                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 min(uint256 a, uint256 b) private pure returns (uint256) {
        return (a > b) ? b : a;
    }

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

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

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

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

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

        tokensForMarketing = 0;
        tokensForDev = 0;

        (success, ) = address(devsWallet).call{value: ethForDev}("");
        (success, ) = address(MarketerWallet).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":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"MarketerWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devsWalletUpdated","type":"event"},{"inputs":[],"name":"MarketerWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedmaxTransaction","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"antiDrainer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"devsWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"enableTradingWithPermit","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":"maxTransaction","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":"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":"_antiDrainer","type":"address"}],"name":"setAntiDrainer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"setBlackList","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":"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":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketerWallet","type":"address"}],"name":"updateMarketerWallet","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":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updatedevsWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526001600d60006101000a81548160ff0219169083151502179055506000600d60016101000a81548160ff0219169083151502179055506000600d60026101000a81548160ff0219169083151502179055503480156200006257600080fd5b506040518060400160405280600a81526020017f436861696e5661756c74000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f5641554c540000000000000000000000000000000000000000000000000000008152508160039080519060200190620000e792919062000ae7565b5080600490805190602001906200010092919062000ae7565b5050506200012362000117620005a760201b60201c565b620005af60201b60201c565b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505060805173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001b9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001df919062000c01565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060805173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000249573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200026f919062000c01565b6040518363ffffffff1660e01b81526004016200028e92919062000c44565b6020604051808303816000875af1158015620002ae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002d4919062000c01565b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200032960805160016200067560201b60201c565b6200035e600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200067560201b60201c565b62000393600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200075f60201b60201c565b6000600a90506000600a9050600060149050600060149050600069d3c21bcecceda1000000905069043c33c1937564800000600a8190555069043c33c1937564800000600c81905550612710600582620003ee919062000caa565b620003fa919062000d3a565b600b8190555084600f8190555083601081905550601054600f5462000420919062000d72565b600e81905550826012819055508160138190555060135460125462000446919062000d72565b60118190555073bffa1cabad49e9cdeef7c15e9a2edcb59c2aec37600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073d63fd341abdc6375ca776e4653513dc87d34264b600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005186200050a6200080060201b60201c565b60016200082a60201b60201c565b6200052b3060016200082a60201b60201c565b6200054061dead60016200082a60201b60201c565b62000562620005546200080060201b60201c565b60016200067560201b60201c565b620005753060016200067560201b60201c565b6200058a61dead60016200067560201b60201c565b6200059c33826200096460201b60201c565b505050505062000f91565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b62000685620005a760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620006ab6200080060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000704576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006fb9062000e30565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200083a620005a760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620008606200080060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620008b9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008b09062000e30565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000958919062000e6f565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620009d7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009ce9062000edc565b60405180910390fd5b620009eb6000838362000add60201b60201c565b8060026000828254620009ff919062000d72565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000a56919062000d72565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000abd919062000f0f565b60405180910390a362000ad96000838362000ae260201b60201c565b5050565b505050565b505050565b82805462000af59062000f5b565b90600052602060002090601f01602090048101928262000b19576000855562000b65565b82601f1062000b3457805160ff191683800117855562000b65565b8280016001018555821562000b65579182015b8281111562000b6457825182559160200191906001019062000b47565b5b50905062000b74919062000b78565b5090565b5b8082111562000b9357600081600090555060010162000b79565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000bc98262000b9c565b9050919050565b62000bdb8162000bbc565b811462000be757600080fd5b50565b60008151905062000bfb8162000bd0565b92915050565b60006020828403121562000c1a5762000c1962000b97565b5b600062000c2a8482850162000bea565b91505092915050565b62000c3e8162000bbc565b82525050565b600060408201905062000c5b600083018562000c33565b62000c6a602083018462000c33565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000cb78262000c71565b915062000cc48362000c71565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000d005762000cff62000c7b565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000d478262000c71565b915062000d548362000c71565b92508262000d675762000d6662000d0b565b5b828204905092915050565b600062000d7f8262000c71565b915062000d8c8362000c71565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000dc45762000dc362000c7b565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000e1860208362000dcf565b915062000e258262000de0565b602082019050919050565b6000602082019050818103600083015262000e4b8162000e09565b9050919050565b60008115159050919050565b62000e698162000e52565b82525050565b600060208201905062000e86600083018462000e5e565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000ec4601f8362000dcf565b915062000ed18262000e8c565b602082019050919050565b6000602082019050818103600083015262000ef78162000eb5565b9050919050565b62000f098162000c71565b82525050565b600060208201905062000f26600083018462000efe565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000f7457607f821691505b6020821081141562000f8b5762000f8a62000f2c565b5b50919050565b6080516155c862000fc260003960008181610de901528181613bfd01528181613cde0152613d0501526155c86000f3fe6080604052600436106103035760003560e01c80639213691311610190578063bbc0c742116100dc578063d36b29ad11610095578063e1bc33941161006f578063e1bc339414610b91578063e2f4560514610bce578063f2fde38b14610bf9578063f8b45b0514610c225761030a565b8063d36b29ad14610b00578063d85ba06314610b29578063dd62ed3e14610b545761030a565b8063bbc0c742146109f0578063bbf30f2d14610a1b578063c024666814610a46578063c18bc19514610a6f578063c3f70b5214610a98578063d257b34f14610ac35761030a565b8063a0d82dc511610149578063a90eab8c11610123578063a90eab8c14610938578063b62496f514610961578063b6f807a11461099e578063bae14e1d146109c75761030a565b8063a0d82dc514610893578063a457c2d7146108be578063a9059cbb146108fb5761030a565b80639213691314610795578063924de9b7146107c057806395d89b41146107e95780639a7a23d6146108145780639c3b4fdc1461083d5780639fccce32146108685761030a565b80634a62bb651161024f57806370a08231116102085780637571336a116101e25780637571336a146106ff5780637bce5a04146107285780638a8c523c146107535780638da5cb5b1461076a5761030a565b806370a0823114610680578063715018a6146106bd578063751039fc146106d45761030a565b80634a62bb65146105705780634fbee1931461059b57806366ca9b83146105d857806368092bd9146106015780636a486a8e1461062a5780636ddd1713146106555761030a565b8063203e727e116102bc57806337c2810f1161029657806337c2810f146104b257806339509351146104dd5780633d278f691461051a57806349bd5a5e146105455761030a565b8063203e727e1461042157806323b872dd1461044a578063313ce567146104875761030a565b806302dbd8f81461030f57806306fdde0314610338578063095ea7b3146103635780631694505e146103a057806318160ddd146103cb5780631f3fed8f146103f65761030a565b3661030a57005b600080fd5b34801561031b57600080fd5b5061033660048036038101906103319190613dec565b610c4d565b005b34801561034457600080fd5b5061034d610d37565b60405161035a9190613ec5565b60405180910390f35b34801561036f57600080fd5b5061038a60048036038101906103859190613f45565b610dc9565b6040516103979190613fa0565b60405180910390f35b3480156103ac57600080fd5b506103b5610de7565b6040516103c2919061401a565b60405180910390f35b3480156103d757600080fd5b506103e0610e0b565b6040516103ed9190614044565b60405180910390f35b34801561040257600080fd5b5061040b610e15565b6040516104189190614044565b60405180910390f35b34801561042d57600080fd5b506104486004803603810190610443919061405f565b610e1b565b005b34801561045657600080fd5b50610471600480360381019061046c919061408c565b610f2a565b60405161047e9190613fa0565b60405180910390f35b34801561049357600080fd5b5061049c611022565b6040516104a991906140fb565b60405180910390f35b3480156104be57600080fd5b506104c761102b565b6040516104d49190614125565b60405180910390f35b3480156104e957600080fd5b5061050460048036038101906104ff9190613f45565b611051565b6040516105119190613fa0565b60405180910390f35b34801561052657600080fd5b5061052f6110fd565b60405161053c9190614125565b60405180910390f35b34801561055157600080fd5b5061055a611123565b6040516105679190614125565b60405180910390f35b34801561057c57600080fd5b50610585611149565b6040516105929190613fa0565b60405180910390f35b3480156105a757600080fd5b506105c260048036038101906105bd9190614140565b61115c565b6040516105cf9190613fa0565b60405180910390f35b3480156105e457600080fd5b506105ff60048036038101906105fa9190613dec565b6111b2565b005b34801561060d57600080fd5b5061062860048036038101906106239190614199565b61129c565b005b34801561063657600080fd5b5061063f611373565b60405161064c9190614044565b60405180910390f35b34801561066157600080fd5b5061066a611379565b6040516106779190613fa0565b60405180910390f35b34801561068c57600080fd5b506106a760048036038101906106a29190614140565b61138c565b6040516106b49190614044565b60405180910390f35b3480156106c957600080fd5b506106d26113d4565b005b3480156106e057600080fd5b506106e961145c565b6040516106f69190613fa0565b60405180910390f35b34801561070b57600080fd5b5061072660048036038101906107219190614199565b6114fc565b005b34801561073457600080fd5b5061073d6115d3565b60405161074a9190614044565b60405180910390f35b34801561075f57600080fd5b506107686115d9565b005b34801561077657600080fd5b5061077f61168d565b60405161078c9190614125565b60405180910390f35b3480156107a157600080fd5b506107aa6116b7565b6040516107b79190614044565b60405180910390f35b3480156107cc57600080fd5b506107e760048036038101906107e291906141d9565b6116bd565b005b3480156107f557600080fd5b506107fe611756565b60405161080b9190613ec5565b60405180910390f35b34801561082057600080fd5b5061083b60048036038101906108369190614199565b6117e8565b005b34801561084957600080fd5b50610852611903565b60405161085f9190614044565b60405180910390f35b34801561087457600080fd5b5061087d611909565b60405161088a9190614044565b60405180910390f35b34801561089f57600080fd5b506108a861190f565b6040516108b59190614044565b60405180910390f35b3480156108ca57600080fd5b506108e560048036038101906108e09190613f45565b611915565b6040516108f29190613fa0565b60405180910390f35b34801561090757600080fd5b50610922600480360381019061091d9190613f45565b611a00565b60405161092f9190613fa0565b60405180910390f35b34801561094457600080fd5b5061095f600480360381019061095a9190614268565b611a1e565b005b34801561096d57600080fd5b5061098860048036038101906109839190614140565b611ca9565b6040516109959190613fa0565b60405180910390f35b3480156109aa57600080fd5b506109c560048036038101906109c09190614140565b611cc9565b005b3480156109d357600080fd5b506109ee60048036038101906109e99190614140565b611e05565b005b3480156109fc57600080fd5b50610a05611f35565b604051610a129190613fa0565b60405180910390f35b348015610a2757600080fd5b50610a30611f48565b604051610a3d9190614125565b60405180910390f35b348015610a5257600080fd5b50610a6d6004803603810190610a689190614199565b611f6e565b005b348015610a7b57600080fd5b50610a966004803603810190610a91919061405f565b612093565b005b348015610aa457600080fd5b50610aad6121a2565b604051610aba9190614044565b60405180910390f35b348015610acf57600080fd5b50610aea6004803603810190610ae5919061405f565b6121a8565b604051610af79190613fa0565b60405180910390f35b348015610b0c57600080fd5b50610b276004803603810190610b229190614140565b6122fd565b005b348015610b3557600080fd5b50610b3e612439565b604051610b4b9190614044565b60405180910390f35b348015610b6057600080fd5b50610b7b6004803603810190610b7691906142bb565b61243f565b604051610b889190614044565b60405180910390f35b348015610b9d57600080fd5b50610bb86004803603810190610bb39190614140565b6124c6565b604051610bc59190613fa0565b60405180910390f35b348015610bda57600080fd5b50610be36124e6565b604051610bf09190614044565b60405180910390f35b348015610c0557600080fd5b50610c206004803603810190610c1b9190614140565b6124ec565b005b348015610c2e57600080fd5b50610c376125e4565b604051610c449190614044565b60405180910390f35b610c556125ea565b73ffffffffffffffffffffffffffffffffffffffff16610c7361168d565b73ffffffffffffffffffffffffffffffffffffffff1614610cc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc090614347565b60405180910390fd5b8160128190555080601381905550601354601254610ce79190614396565b60118190555060196011541115610d33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2a90614438565b60405180910390fd5b5050565b606060038054610d4690614487565b80601f0160208091040260200160405190810160405280929190818152602001828054610d7290614487565b8015610dbf5780601f10610d9457610100808354040283529160200191610dbf565b820191906000526020600020905b815481529060010190602001808311610da257829003601f168201915b5050505050905090565b6000610ddd610dd66125ea565b84846125f2565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b60145481565b610e236125ea565b73ffffffffffffffffffffffffffffffffffffffff16610e4161168d565b73ffffffffffffffffffffffffffffffffffffffff1614610e97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8e90614347565b60405180910390fd5b670de0b6b3a76400006103e86001610ead610e0b565b610eb791906144b9565b610ec19190614542565b610ecb9190614542565b811015610f0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f04906145e5565b60405180910390fd5b670de0b6b3a764000081610f2191906144b9565b600a8190555050565b6000610f378484846127bd565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610f826125ea565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611002576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff990614677565b60405180910390fd5b6110168561100e6125ea565b8584036125f2565b60019150509392505050565b60006012905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006110f361105e6125ea565b84846001600061106c6125ea565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546110ee9190614396565b6125f2565b6001905092915050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d60009054906101000a900460ff1681565b6000601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6111ba6125ea565b73ffffffffffffffffffffffffffffffffffffffff166111d861168d565b73ffffffffffffffffffffffffffffffffffffffff161461122e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122590614347565b60405180910390fd5b81600f8190555080601081905550601054600f5461124c9190614396565b600e819055506019600e541115611298576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128f90614438565b60405180910390fd5b5050565b6112a46125ea565b73ffffffffffffffffffffffffffffffffffffffff166112c261168d565b73ffffffffffffffffffffffffffffffffffffffff1614611318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130f90614347565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60115481565b600d60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113dc6125ea565b73ffffffffffffffffffffffffffffffffffffffff166113fa61168d565b73ffffffffffffffffffffffffffffffffffffffff1614611450576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144790614347565b60405180910390fd5b61145a6000613555565b565b60006114666125ea565b73ffffffffffffffffffffffffffffffffffffffff1661148461168d565b73ffffffffffffffffffffffffffffffffffffffff16146114da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d190614347565b60405180910390fd5b6000600d60006101000a81548160ff0219169083151502179055506001905090565b6115046125ea565b73ffffffffffffffffffffffffffffffffffffffff1661152261168d565b73ffffffffffffffffffffffffffffffffffffffff1614611578576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156f90614347565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600f5481565b6115e16125ea565b73ffffffffffffffffffffffffffffffffffffffff166115ff61168d565b73ffffffffffffffffffffffffffffffffffffffff1614611655576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164c90614347565b60405180910390fd5b6001600d60016101000a81548160ff0219169083151502179055506001600d60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60125481565b6116c56125ea565b73ffffffffffffffffffffffffffffffffffffffff166116e361168d565b73ffffffffffffffffffffffffffffffffffffffff1614611739576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173090614347565b60405180910390fd5b80600d60026101000a81548160ff02191690831515021790555050565b60606004805461176590614487565b80601f016020809104026020016040519081016040528092919081815260200182805461179190614487565b80156117de5780601f106117b3576101008083540402835291602001916117de565b820191906000526020600020905b8154815290600101906020018083116117c157829003601f168201915b5050505050905090565b6117f06125ea565b73ffffffffffffffffffffffffffffffffffffffff1661180e61168d565b73ffffffffffffffffffffffffffffffffffffffff1614611864576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185b90614347565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ec90614709565b60405180910390fd5b6118ff828261361b565b5050565b60105481565b60155481565b60135481565b600080600160006119246125ea565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156119e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d89061479b565b60405180910390fd5b6119f56119ec6125ea565b858584036125f2565b600191505092915050565b6000611a14611a0d6125ea565b84846127bd565b6001905092915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6040518060400160405280600d81526020017f54726164696e6720546f6b656e00000000000000000000000000000000000000815250805190602001206040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250805190602001204630604051602001611ad19594939291906147ca565b60405160208183030381529060405280519060200120905060007f7dfdbf06c6260804b81338506aa4a709bd9f04b68ca0d2d054b8627926c90ae46040518060400160405280600e81526020017f456e61626c652054726164696e67000000000000000000000000000000000000815250805190602001206000604051602001611b5d9392919061481d565b60405160208183030381529060405280519060200120905060008282604051602001611b8a9291906148cc565b604051602081830303815290604052805190602001209050600060018288888860405160008152602001604052604051611bc79493929190614903565b6020604051602081039080840390855afa158015611be9573d6000803e3d6000fd5b505050602060405103519050611bfd61168d565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611c6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6190614994565b60405180910390fd5b6001600d60016101000a81548160ff0219169083151502179055506001600d60026101000a81548160ff02191690831515021790555050505050505050565b60196020528060005260406000206000915054906101000a900460ff1681565b611cd16125ea565b73ffffffffffffffffffffffffffffffffffffffff16611cef61168d565b73ffffffffffffffffffffffffffffffffffffffff1614611d45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3c90614347565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167ff333166df72feccd0c64d291d00a7afdb4ee8ef820fc1096dc367083bf184a3260405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611e0d6125ea565b73ffffffffffffffffffffffffffffffffffffffff16611e2b61168d565b73ffffffffffffffffffffffffffffffffffffffff1614611e81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7890614347565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ef1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee890614a00565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600d60019054906101000a900460ff1681565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611f766125ea565b73ffffffffffffffffffffffffffffffffffffffff16611f9461168d565b73ffffffffffffffffffffffffffffffffffffffff1614611fea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe190614347565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516120879190613fa0565b60405180910390a25050565b61209b6125ea565b73ffffffffffffffffffffffffffffffffffffffff166120b961168d565b73ffffffffffffffffffffffffffffffffffffffff161461210f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210690614347565b60405180910390fd5b670de0b6b3a76400006103e86005612125610e0b565b61212f91906144b9565b6121399190614542565b6121439190614542565b811015612185576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217c90614a92565b60405180910390fd5b670de0b6b3a76400008161219991906144b9565b600c8190555050565b600a5481565b60006121b26125ea565b73ffffffffffffffffffffffffffffffffffffffff166121d061168d565b73ffffffffffffffffffffffffffffffffffffffff1614612226576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221d90614347565b60405180910390fd5b620186a06001612234610e0b565b61223e91906144b9565b6122489190614542565b82101561228a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228190614b24565b60405180910390fd5b6103e86005612297610e0b565b6122a191906144b9565b6122ab9190614542565b8211156122ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e490614bb6565b60405180910390fd5b81600b8190555060019050919050565b6123056125ea565b73ffffffffffffffffffffffffffffffffffffffff1661232361168d565b73ffffffffffffffffffffffffffffffffffffffff1614612379576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237090614347565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f052f4cc182c3c9fee35d3b9c9bd0cf1cb80fcda5eda46df87ddea146e707335560405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600e5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60186020528060005260406000206000915054906101000a900460ff1681565b600b5481565b6124f46125ea565b73ffffffffffffffffffffffffffffffffffffffff1661251261168d565b73ffffffffffffffffffffffffffffffffffffffff1614612568576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255f90614347565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156125d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125cf90614c48565b60405180910390fd5b6125e181613555565b50565b600c5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612662576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265990614cda565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156126d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c990614d6c565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516127b09190614044565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561282d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282490614dfe565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561289d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289490614e90565b60405180910390fd5b601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561292a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292190614efc565b60405180910390fd5b601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156129b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ae90614f68565b60405180910390fd5b60008114156129d1576129cc838360006136bc565b613550565b600d60009054906101000a900460ff1615612ecc576129ee61168d565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612a5c5750612a2c61168d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a955750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612acf575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612ae85750600760149054906101000a900460ff16155b15612ecb57600d60019054906101000a900460ff16612be257601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612ba25750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612be1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd890614fd4565b60405180910390fd5b5b601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612c855750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d2c57600a54811115612ccf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cc690615066565b60405180910390fd5b600c54612cdb8361138c565b82612ce69190614396565b1115612d27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1e906150d2565b60405180910390fd5b612eca565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612dcf5750601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e1e57600a54811115612e19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1090615164565b60405180910390fd5b612ec9565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612ec857600c54612e7b8361138c565b82612e869190614396565b1115612ec7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ebe906150d2565b60405180910390fd5b5b5b5b5b5b600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614158015612fc35750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639015d371306040518263ffffffff1660e01b8152600401612f819190614125565b602060405180830381865afa158015612f9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fc29190615199565b5b156130de576000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a20527fc8585600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600c54600a54600b546040518763ffffffff1660e01b8152600401613057969594939291906151c6565b6020604051808303816000875af1158015613076573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061309a9190615199565b9050806130dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130d390615273565b60405180910390fd5b505b60006130e93061138c565b90506000600b54821015905080801561310e5750600d60029054906101000a900460ff165b80156131275750600760149054906101000a900460ff16155b801561317d5750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156131d35750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156132295750601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561326d576001600760146101000a81548160ff02191690831515021790555061325161393d565b6000600760146101000a81548160ff0219169083151502179055505b6000600760149054906101000a900460ff16159050601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806133235750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561332d57600090505b6000811561354057601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561339057506000601154115b1561342a576133bd60646133af60115488613b2890919063ffffffff16565b613b3e90919063ffffffff16565b9050601154601354826133d091906144b9565b6133da9190614542565b601560008282546133eb9190614396565b925050819055506011546012548261340391906144b9565b61340d9190614542565b6014600082825461341e9190614396565b9250508190555061351c565b601960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561348557506000600e54115b1561351b576134b260646134a4600e5488613b2890919063ffffffff16565b613b3e90919063ffffffff16565b9050600e54601054826134c591906144b9565b6134cf9190614542565b601560008282546134e09190614396565b92505081905550600e54600f54826134f891906144b9565b6135029190614542565b601460008282546135139190614396565b925050819055505b5b6000811115613531576135308730836136bc565b5b808561353d9190615293565b94505b61354b8787876136bc565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561372c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161372390614dfe565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561379c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161379390614e90565b60405180910390fd5b6137a7838383613b54565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561382d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161382490615339565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546138c09190614396565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516139249190614044565b60405180910390a3613937848484613b59565b50505050565b60006139483061138c565b9050600060155460145461395c9190614396565b905060008083148061396e5750600082145b1561397b57505050613b26565b6014600b5461398a91906144b9565b8311156139a3576014600b546139a091906144b9565b92505b60004790506139b184613b5e565b60006139c68247613d9b90919063ffffffff16565b905060006139f1856139e360155485613b2890919063ffffffff16565b613b3e90919063ffffffff16565b905060006014819055506000601581905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051613a499061538a565b60006040518083038185875af1925050503d8060008114613a86576040519150601f19603f3d011682016040523d82523d6000602084013e613a8b565b606091505b505080945050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613ad79061538a565b60006040518083038185875af1925050503d8060008114613b14576040519150601f19603f3d011682016040523d82523d6000602084013e613b19565b606091505b5050809450505050505050505b565b60008183613b3691906144b9565b905092915050565b60008183613b4c9190614542565b905092915050565b505050565b505050565b6000600267ffffffffffffffff811115613b7b57613b7a61539f565b5b604051908082528060200260200182016040528015613ba95781602001602082028036833780820191505090505b5090503081600081518110613bc157613bc06153ce565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613c66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c8a9190615412565b81600181518110613c9e57613c9d6153ce565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613d03307f0000000000000000000000000000000000000000000000000000000000000000846125f2565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613d65959493929190615538565b600060405180830381600087803b158015613d7f57600080fd5b505af1158015613d93573d6000803e3d6000fd5b505050505050565b60008183613da99190615293565b905092915050565b600080fd5b6000819050919050565b613dc981613db6565b8114613dd457600080fd5b50565b600081359050613de681613dc0565b92915050565b60008060408385031215613e0357613e02613db1565b5b6000613e1185828601613dd7565b9250506020613e2285828601613dd7565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613e66578082015181840152602081019050613e4b565b83811115613e75576000848401525b50505050565b6000601f19601f8301169050919050565b6000613e9782613e2c565b613ea18185613e37565b9350613eb1818560208601613e48565b613eba81613e7b565b840191505092915050565b60006020820190508181036000830152613edf8184613e8c565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613f1282613ee7565b9050919050565b613f2281613f07565b8114613f2d57600080fd5b50565b600081359050613f3f81613f19565b92915050565b60008060408385031215613f5c57613f5b613db1565b5b6000613f6a85828601613f30565b9250506020613f7b85828601613dd7565b9150509250929050565b60008115159050919050565b613f9a81613f85565b82525050565b6000602082019050613fb56000830184613f91565b92915050565b6000819050919050565b6000613fe0613fdb613fd684613ee7565b613fbb565b613ee7565b9050919050565b6000613ff282613fc5565b9050919050565b600061400482613fe7565b9050919050565b61401481613ff9565b82525050565b600060208201905061402f600083018461400b565b92915050565b61403e81613db6565b82525050565b60006020820190506140596000830184614035565b92915050565b60006020828403121561407557614074613db1565b5b600061408384828501613dd7565b91505092915050565b6000806000606084860312156140a5576140a4613db1565b5b60006140b386828701613f30565b93505060206140c486828701613f30565b92505060406140d586828701613dd7565b9150509250925092565b600060ff82169050919050565b6140f5816140df565b82525050565b600060208201905061411060008301846140ec565b92915050565b61411f81613f07565b82525050565b600060208201905061413a6000830184614116565b92915050565b60006020828403121561415657614155613db1565b5b600061416484828501613f30565b91505092915050565b61417681613f85565b811461418157600080fd5b50565b6000813590506141938161416d565b92915050565b600080604083850312156141b0576141af613db1565b5b60006141be85828601613f30565b92505060206141cf85828601614184565b9150509250929050565b6000602082840312156141ef576141ee613db1565b5b60006141fd84828501614184565b91505092915050565b61420f816140df565b811461421a57600080fd5b50565b60008135905061422c81614206565b92915050565b6000819050919050565b61424581614232565b811461425057600080fd5b50565b6000813590506142628161423c565b92915050565b60008060006060848603121561428157614280613db1565b5b600061428f8682870161421d565b93505060206142a086828701614253565b92505060406142b186828701614253565b9150509250925092565b600080604083850312156142d2576142d1613db1565b5b60006142e085828601613f30565b92505060206142f185828601613f30565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614331602083613e37565b915061433c826142fb565b602082019050919050565b6000602082019050818103600083015261436081614324565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006143a182613db6565b91506143ac83613db6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156143e1576143e0614367565b5b828201905092915050565b7f4d757374206b656570206665657320617420323525206f72206c657373000000600082015250565b6000614422601d83613e37565b915061442d826143ec565b602082019050919050565b6000602082019050818103600083015261445181614415565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061449f57607f821691505b602082108114156144b3576144b2614458565b5b50919050565b60006144c482613db6565b91506144cf83613db6565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561450857614507614367565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061454d82613db6565b915061455883613db6565b92508261456857614567614513565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e206c6f7765722060008201527f7468616e20302e31250000000000000000000000000000000000000000000000602082015250565b60006145cf602983613e37565b91506145da82614573565b604082019050919050565b600060208201905081810360008301526145fe816145c2565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000614661602883613e37565b915061466c82614605565b604082019050919050565b6000602082019050818103600083015261469081614654565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006146f3603983613e37565b91506146fe82614697565b604082019050919050565b60006020820190508181036000830152614722816146e6565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614785602583613e37565b915061479082614729565b604082019050919050565b600060208201905081810360008301526147b481614778565b9050919050565b6147c481614232565b82525050565b600060a0820190506147df60008301886147bb565b6147ec60208301876147bb565b6147f960408301866147bb565b6148066060830185614035565b6148136080830184614116565b9695505050505050565b600060608201905061483260008301866147bb565b61483f60208301856147bb565b61484c6040830184614035565b949350505050565b600081905092915050565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b6000614895600283614854565b91506148a08261485f565b600282019050919050565b6000819050919050565b6148c66148c182614232565b6148ab565b82525050565b60006148d782614888565b91506148e382856148b5565b6020820191506148f382846148b5565b6020820191508190509392505050565b600060808201905061491860008301876147bb565b61492560208301866140ec565b61493260408301856147bb565b61493f60608301846147bb565b95945050505050565b7f496e76616c6964207369676e6174757265000000000000000000000000000000600082015250565b600061497e601183613e37565b915061498982614948565b602082019050919050565b600060208201905081810360008301526149ad81614971565b9050919050565b7f496e76616c696420616e746920647261696e6572000000000000000000000000600082015250565b60006149ea601483613e37565b91506149f5826149b4565b602082019050919050565b60006020820190508181036000830152614a19816149dd565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614a7c602483613e37565b9150614a8782614a20565b604082019050919050565b60006020820190508181036000830152614aab81614a6f565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614b0e603583613e37565b9150614b1982614ab2565b604082019050919050565b60006020820190508181036000830152614b3d81614b01565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614ba0603483613e37565b9150614bab82614b44565b604082019050919050565b60006020820190508181036000830152614bcf81614b93565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614c32602683613e37565b9150614c3d82614bd6565b604082019050919050565b60006020820190508181036000830152614c6181614c25565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614cc4602483613e37565b9150614ccf82614c68565b604082019050919050565b60006020820190508181036000830152614cf381614cb7565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614d56602283613e37565b9150614d6182614cfa565b604082019050919050565b60006020820190508181036000830152614d8581614d49565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614de8602583613e37565b9150614df382614d8c565b604082019050919050565b60006020820190508181036000830152614e1781614ddb565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614e7a602383613e37565b9150614e8582614e1e565b604082019050919050565b60006020820190508181036000830152614ea981614e6d565b9050919050565b7f5b66726f6d5d20626c61636b206c697374000000000000000000000000000000600082015250565b6000614ee6601183613e37565b9150614ef182614eb0565b602082019050919050565b60006020820190508181036000830152614f1581614ed9565b9050919050565b7f5b746f5d20626c61636b206c6973740000000000000000000000000000000000600082015250565b6000614f52600f83613e37565b9150614f5d82614f1c565b602082019050919050565b60006020820190508181036000830152614f8181614f45565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614fbe601683613e37565b9150614fc982614f88565b602082019050919050565b60006020820190508181036000830152614fed81614fb1565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e2e0000000000000000000000000000000000602082015250565b6000615050602f83613e37565b915061505b82614ff4565b604082019050919050565b6000602082019050818103600083015261507f81615043565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006150bc601383613e37565b91506150c782615086565b602082019050919050565b600060208201905081810360008301526150eb816150af565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e2e00000000000000000000000000000000602082015250565b600061514e603083613e37565b9150615159826150f2565b604082019050919050565b6000602082019050818103600083015261517d81615141565b9050919050565b6000815190506151938161416d565b92915050565b6000602082840312156151af576151ae613db1565b5b60006151bd84828501615184565b91505092915050565b600060c0820190506151db6000830189614116565b6151e86020830188614116565b6151f56040830187614116565b6152026060830186614035565b61520f6080830185614035565b61521c60a0830184614035565b979650505050505050565b7f416e746920447261696e657220456e61626c6564000000000000000000000000600082015250565b600061525d601483613e37565b915061526882615227565b602082019050919050565b6000602082019050818103600083015261528c81615250565b9050919050565b600061529e82613db6565b91506152a983613db6565b9250828210156152bc576152bb614367565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000615323602683613e37565b915061532e826152c7565b604082019050919050565b6000602082019050818103600083015261535281615316565b9050919050565b600081905092915050565b50565b6000615374600083615359565b915061537f82615364565b600082019050919050565b600061539582615367565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061540c81613f19565b92915050565b60006020828403121561542857615427613db1565b5b6000615436848285016153fd565b91505092915050565b6000819050919050565b600061546461545f61545a8461543f565b613fbb565b613db6565b9050919050565b61547481615449565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6154af81613f07565b82525050565b60006154c183836154a6565b60208301905092915050565b6000602082019050919050565b60006154e58261547a565b6154ef8185615485565b93506154fa83615496565b8060005b8381101561552b57815161551288826154b5565b975061551d836154cd565b9250506001810190506154fe565b5085935050505092915050565b600060a08201905061554d6000830188614035565b61555a602083018761546b565b818103604083015261556c81866154da565b905061557b6060830185614116565b6155886080830184614035565b969550505050505056fea2646970667358221220ef1d6f61e6a73821c166f5839c47525ac2e86c4a9dd0a3e0129af1ff0c5603eb64736f6c634300080a0033

Deployed Bytecode

0x6080604052600436106103035760003560e01c80639213691311610190578063bbc0c742116100dc578063d36b29ad11610095578063e1bc33941161006f578063e1bc339414610b91578063e2f4560514610bce578063f2fde38b14610bf9578063f8b45b0514610c225761030a565b8063d36b29ad14610b00578063d85ba06314610b29578063dd62ed3e14610b545761030a565b8063bbc0c742146109f0578063bbf30f2d14610a1b578063c024666814610a46578063c18bc19514610a6f578063c3f70b5214610a98578063d257b34f14610ac35761030a565b8063a0d82dc511610149578063a90eab8c11610123578063a90eab8c14610938578063b62496f514610961578063b6f807a11461099e578063bae14e1d146109c75761030a565b8063a0d82dc514610893578063a457c2d7146108be578063a9059cbb146108fb5761030a565b80639213691314610795578063924de9b7146107c057806395d89b41146107e95780639a7a23d6146108145780639c3b4fdc1461083d5780639fccce32146108685761030a565b80634a62bb651161024f57806370a08231116102085780637571336a116101e25780637571336a146106ff5780637bce5a04146107285780638a8c523c146107535780638da5cb5b1461076a5761030a565b806370a0823114610680578063715018a6146106bd578063751039fc146106d45761030a565b80634a62bb65146105705780634fbee1931461059b57806366ca9b83146105d857806368092bd9146106015780636a486a8e1461062a5780636ddd1713146106555761030a565b8063203e727e116102bc57806337c2810f1161029657806337c2810f146104b257806339509351146104dd5780633d278f691461051a57806349bd5a5e146105455761030a565b8063203e727e1461042157806323b872dd1461044a578063313ce567146104875761030a565b806302dbd8f81461030f57806306fdde0314610338578063095ea7b3146103635780631694505e146103a057806318160ddd146103cb5780631f3fed8f146103f65761030a565b3661030a57005b600080fd5b34801561031b57600080fd5b5061033660048036038101906103319190613dec565b610c4d565b005b34801561034457600080fd5b5061034d610d37565b60405161035a9190613ec5565b60405180910390f35b34801561036f57600080fd5b5061038a60048036038101906103859190613f45565b610dc9565b6040516103979190613fa0565b60405180910390f35b3480156103ac57600080fd5b506103b5610de7565b6040516103c2919061401a565b60405180910390f35b3480156103d757600080fd5b506103e0610e0b565b6040516103ed9190614044565b60405180910390f35b34801561040257600080fd5b5061040b610e15565b6040516104189190614044565b60405180910390f35b34801561042d57600080fd5b506104486004803603810190610443919061405f565b610e1b565b005b34801561045657600080fd5b50610471600480360381019061046c919061408c565b610f2a565b60405161047e9190613fa0565b60405180910390f35b34801561049357600080fd5b5061049c611022565b6040516104a991906140fb565b60405180910390f35b3480156104be57600080fd5b506104c761102b565b6040516104d49190614125565b60405180910390f35b3480156104e957600080fd5b5061050460048036038101906104ff9190613f45565b611051565b6040516105119190613fa0565b60405180910390f35b34801561052657600080fd5b5061052f6110fd565b60405161053c9190614125565b60405180910390f35b34801561055157600080fd5b5061055a611123565b6040516105679190614125565b60405180910390f35b34801561057c57600080fd5b50610585611149565b6040516105929190613fa0565b60405180910390f35b3480156105a757600080fd5b506105c260048036038101906105bd9190614140565b61115c565b6040516105cf9190613fa0565b60405180910390f35b3480156105e457600080fd5b506105ff60048036038101906105fa9190613dec565b6111b2565b005b34801561060d57600080fd5b5061062860048036038101906106239190614199565b61129c565b005b34801561063657600080fd5b5061063f611373565b60405161064c9190614044565b60405180910390f35b34801561066157600080fd5b5061066a611379565b6040516106779190613fa0565b60405180910390f35b34801561068c57600080fd5b506106a760048036038101906106a29190614140565b61138c565b6040516106b49190614044565b60405180910390f35b3480156106c957600080fd5b506106d26113d4565b005b3480156106e057600080fd5b506106e961145c565b6040516106f69190613fa0565b60405180910390f35b34801561070b57600080fd5b5061072660048036038101906107219190614199565b6114fc565b005b34801561073457600080fd5b5061073d6115d3565b60405161074a9190614044565b60405180910390f35b34801561075f57600080fd5b506107686115d9565b005b34801561077657600080fd5b5061077f61168d565b60405161078c9190614125565b60405180910390f35b3480156107a157600080fd5b506107aa6116b7565b6040516107b79190614044565b60405180910390f35b3480156107cc57600080fd5b506107e760048036038101906107e291906141d9565b6116bd565b005b3480156107f557600080fd5b506107fe611756565b60405161080b9190613ec5565b60405180910390f35b34801561082057600080fd5b5061083b60048036038101906108369190614199565b6117e8565b005b34801561084957600080fd5b50610852611903565b60405161085f9190614044565b60405180910390f35b34801561087457600080fd5b5061087d611909565b60405161088a9190614044565b60405180910390f35b34801561089f57600080fd5b506108a861190f565b6040516108b59190614044565b60405180910390f35b3480156108ca57600080fd5b506108e560048036038101906108e09190613f45565b611915565b6040516108f29190613fa0565b60405180910390f35b34801561090757600080fd5b50610922600480360381019061091d9190613f45565b611a00565b60405161092f9190613fa0565b60405180910390f35b34801561094457600080fd5b5061095f600480360381019061095a9190614268565b611a1e565b005b34801561096d57600080fd5b5061098860048036038101906109839190614140565b611ca9565b6040516109959190613fa0565b60405180910390f35b3480156109aa57600080fd5b506109c560048036038101906109c09190614140565b611cc9565b005b3480156109d357600080fd5b506109ee60048036038101906109e99190614140565b611e05565b005b3480156109fc57600080fd5b50610a05611f35565b604051610a129190613fa0565b60405180910390f35b348015610a2757600080fd5b50610a30611f48565b604051610a3d9190614125565b60405180910390f35b348015610a5257600080fd5b50610a6d6004803603810190610a689190614199565b611f6e565b005b348015610a7b57600080fd5b50610a966004803603810190610a91919061405f565b612093565b005b348015610aa457600080fd5b50610aad6121a2565b604051610aba9190614044565b60405180910390f35b348015610acf57600080fd5b50610aea6004803603810190610ae5919061405f565b6121a8565b604051610af79190613fa0565b60405180910390f35b348015610b0c57600080fd5b50610b276004803603810190610b229190614140565b6122fd565b005b348015610b3557600080fd5b50610b3e612439565b604051610b4b9190614044565b60405180910390f35b348015610b6057600080fd5b50610b7b6004803603810190610b7691906142bb565b61243f565b604051610b889190614044565b60405180910390f35b348015610b9d57600080fd5b50610bb86004803603810190610bb39190614140565b6124c6565b604051610bc59190613fa0565b60405180910390f35b348015610bda57600080fd5b50610be36124e6565b604051610bf09190614044565b60405180910390f35b348015610c0557600080fd5b50610c206004803603810190610c1b9190614140565b6124ec565b005b348015610c2e57600080fd5b50610c376125e4565b604051610c449190614044565b60405180910390f35b610c556125ea565b73ffffffffffffffffffffffffffffffffffffffff16610c7361168d565b73ffffffffffffffffffffffffffffffffffffffff1614610cc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc090614347565b60405180910390fd5b8160128190555080601381905550601354601254610ce79190614396565b60118190555060196011541115610d33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2a90614438565b60405180910390fd5b5050565b606060038054610d4690614487565b80601f0160208091040260200160405190810160405280929190818152602001828054610d7290614487565b8015610dbf5780601f10610d9457610100808354040283529160200191610dbf565b820191906000526020600020905b815481529060010190602001808311610da257829003601f168201915b5050505050905090565b6000610ddd610dd66125ea565b84846125f2565b6001905092915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b60145481565b610e236125ea565b73ffffffffffffffffffffffffffffffffffffffff16610e4161168d565b73ffffffffffffffffffffffffffffffffffffffff1614610e97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8e90614347565b60405180910390fd5b670de0b6b3a76400006103e86001610ead610e0b565b610eb791906144b9565b610ec19190614542565b610ecb9190614542565b811015610f0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f04906145e5565b60405180910390fd5b670de0b6b3a764000081610f2191906144b9565b600a8190555050565b6000610f378484846127bd565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610f826125ea565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611002576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff990614677565b60405180910390fd5b6110168561100e6125ea565b8584036125f2565b60019150509392505050565b60006012905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006110f361105e6125ea565b84846001600061106c6125ea565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546110ee9190614396565b6125f2565b6001905092915050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d60009054906101000a900460ff1681565b6000601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6111ba6125ea565b73ffffffffffffffffffffffffffffffffffffffff166111d861168d565b73ffffffffffffffffffffffffffffffffffffffff161461122e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122590614347565b60405180910390fd5b81600f8190555080601081905550601054600f5461124c9190614396565b600e819055506019600e541115611298576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128f90614438565b60405180910390fd5b5050565b6112a46125ea565b73ffffffffffffffffffffffffffffffffffffffff166112c261168d565b73ffffffffffffffffffffffffffffffffffffffff1614611318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130f90614347565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60115481565b600d60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113dc6125ea565b73ffffffffffffffffffffffffffffffffffffffff166113fa61168d565b73ffffffffffffffffffffffffffffffffffffffff1614611450576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144790614347565b60405180910390fd5b61145a6000613555565b565b60006114666125ea565b73ffffffffffffffffffffffffffffffffffffffff1661148461168d565b73ffffffffffffffffffffffffffffffffffffffff16146114da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d190614347565b60405180910390fd5b6000600d60006101000a81548160ff0219169083151502179055506001905090565b6115046125ea565b73ffffffffffffffffffffffffffffffffffffffff1661152261168d565b73ffffffffffffffffffffffffffffffffffffffff1614611578576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156f90614347565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600f5481565b6115e16125ea565b73ffffffffffffffffffffffffffffffffffffffff166115ff61168d565b73ffffffffffffffffffffffffffffffffffffffff1614611655576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164c90614347565b60405180910390fd5b6001600d60016101000a81548160ff0219169083151502179055506001600d60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60125481565b6116c56125ea565b73ffffffffffffffffffffffffffffffffffffffff166116e361168d565b73ffffffffffffffffffffffffffffffffffffffff1614611739576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173090614347565b60405180910390fd5b80600d60026101000a81548160ff02191690831515021790555050565b60606004805461176590614487565b80601f016020809104026020016040519081016040528092919081815260200182805461179190614487565b80156117de5780601f106117b3576101008083540402835291602001916117de565b820191906000526020600020905b8154815290600101906020018083116117c157829003601f168201915b5050505050905090565b6117f06125ea565b73ffffffffffffffffffffffffffffffffffffffff1661180e61168d565b73ffffffffffffffffffffffffffffffffffffffff1614611864576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185b90614347565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ec90614709565b60405180910390fd5b6118ff828261361b565b5050565b60105481565b60155481565b60135481565b600080600160006119246125ea565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156119e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d89061479b565b60405180910390fd5b6119f56119ec6125ea565b858584036125f2565b600191505092915050565b6000611a14611a0d6125ea565b84846127bd565b6001905092915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6040518060400160405280600d81526020017f54726164696e6720546f6b656e00000000000000000000000000000000000000815250805190602001206040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250805190602001204630604051602001611ad19594939291906147ca565b60405160208183030381529060405280519060200120905060007f7dfdbf06c6260804b81338506aa4a709bd9f04b68ca0d2d054b8627926c90ae46040518060400160405280600e81526020017f456e61626c652054726164696e67000000000000000000000000000000000000815250805190602001206000604051602001611b5d9392919061481d565b60405160208183030381529060405280519060200120905060008282604051602001611b8a9291906148cc565b604051602081830303815290604052805190602001209050600060018288888860405160008152602001604052604051611bc79493929190614903565b6020604051602081039080840390855afa158015611be9573d6000803e3d6000fd5b505050602060405103519050611bfd61168d565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611c6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6190614994565b60405180910390fd5b6001600d60016101000a81548160ff0219169083151502179055506001600d60026101000a81548160ff02191690831515021790555050505050505050565b60196020528060005260406000206000915054906101000a900460ff1681565b611cd16125ea565b73ffffffffffffffffffffffffffffffffffffffff16611cef61168d565b73ffffffffffffffffffffffffffffffffffffffff1614611d45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3c90614347565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167ff333166df72feccd0c64d291d00a7afdb4ee8ef820fc1096dc367083bf184a3260405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611e0d6125ea565b73ffffffffffffffffffffffffffffffffffffffff16611e2b61168d565b73ffffffffffffffffffffffffffffffffffffffff1614611e81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7890614347565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ef1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee890614a00565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600d60019054906101000a900460ff1681565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611f766125ea565b73ffffffffffffffffffffffffffffffffffffffff16611f9461168d565b73ffffffffffffffffffffffffffffffffffffffff1614611fea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe190614347565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516120879190613fa0565b60405180910390a25050565b61209b6125ea565b73ffffffffffffffffffffffffffffffffffffffff166120b961168d565b73ffffffffffffffffffffffffffffffffffffffff161461210f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210690614347565b60405180910390fd5b670de0b6b3a76400006103e86005612125610e0b565b61212f91906144b9565b6121399190614542565b6121439190614542565b811015612185576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217c90614a92565b60405180910390fd5b670de0b6b3a76400008161219991906144b9565b600c8190555050565b600a5481565b60006121b26125ea565b73ffffffffffffffffffffffffffffffffffffffff166121d061168d565b73ffffffffffffffffffffffffffffffffffffffff1614612226576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221d90614347565b60405180910390fd5b620186a06001612234610e0b565b61223e91906144b9565b6122489190614542565b82101561228a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228190614b24565b60405180910390fd5b6103e86005612297610e0b565b6122a191906144b9565b6122ab9190614542565b8211156122ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e490614bb6565b60405180910390fd5b81600b8190555060019050919050565b6123056125ea565b73ffffffffffffffffffffffffffffffffffffffff1661232361168d565b73ffffffffffffffffffffffffffffffffffffffff1614612379576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237090614347565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f052f4cc182c3c9fee35d3b9c9bd0cf1cb80fcda5eda46df87ddea146e707335560405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600e5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60186020528060005260406000206000915054906101000a900460ff1681565b600b5481565b6124f46125ea565b73ffffffffffffffffffffffffffffffffffffffff1661251261168d565b73ffffffffffffffffffffffffffffffffffffffff1614612568576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255f90614347565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156125d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125cf90614c48565b60405180910390fd5b6125e181613555565b50565b600c5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612662576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265990614cda565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156126d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c990614d6c565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516127b09190614044565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561282d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282490614dfe565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561289d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289490614e90565b60405180910390fd5b601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561292a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292190614efc565b60405180910390fd5b601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156129b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ae90614f68565b60405180910390fd5b60008114156129d1576129cc838360006136bc565b613550565b600d60009054906101000a900460ff1615612ecc576129ee61168d565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612a5c5750612a2c61168d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a955750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612acf575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612ae85750600760149054906101000a900460ff16155b15612ecb57600d60019054906101000a900460ff16612be257601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612ba25750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612be1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd890614fd4565b60405180910390fd5b5b601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612c855750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d2c57600a54811115612ccf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cc690615066565b60405180910390fd5b600c54612cdb8361138c565b82612ce69190614396565b1115612d27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1e906150d2565b60405180910390fd5b612eca565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612dcf5750601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e1e57600a54811115612e19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1090615164565b60405180910390fd5b612ec9565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612ec857600c54612e7b8361138c565b82612e869190614396565b1115612ec7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ebe906150d2565b60405180910390fd5b5b5b5b5b5b600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614158015612fc35750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639015d371306040518263ffffffff1660e01b8152600401612f819190614125565b602060405180830381865afa158015612f9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fc29190615199565b5b156130de576000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a20527fc8585600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600c54600a54600b546040518763ffffffff1660e01b8152600401613057969594939291906151c6565b6020604051808303816000875af1158015613076573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061309a9190615199565b9050806130dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130d390615273565b60405180910390fd5b505b60006130e93061138c565b90506000600b54821015905080801561310e5750600d60029054906101000a900460ff165b80156131275750600760149054906101000a900460ff16155b801561317d5750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156131d35750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156132295750601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561326d576001600760146101000a81548160ff02191690831515021790555061325161393d565b6000600760146101000a81548160ff0219169083151502179055505b6000600760149054906101000a900460ff16159050601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806133235750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561332d57600090505b6000811561354057601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561339057506000601154115b1561342a576133bd60646133af60115488613b2890919063ffffffff16565b613b3e90919063ffffffff16565b9050601154601354826133d091906144b9565b6133da9190614542565b601560008282546133eb9190614396565b925050819055506011546012548261340391906144b9565b61340d9190614542565b6014600082825461341e9190614396565b9250508190555061351c565b601960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561348557506000600e54115b1561351b576134b260646134a4600e5488613b2890919063ffffffff16565b613b3e90919063ffffffff16565b9050600e54601054826134c591906144b9565b6134cf9190614542565b601560008282546134e09190614396565b92505081905550600e54600f54826134f891906144b9565b6135029190614542565b601460008282546135139190614396565b925050819055505b5b6000811115613531576135308730836136bc565b5b808561353d9190615293565b94505b61354b8787876136bc565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561372c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161372390614dfe565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561379c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161379390614e90565b60405180910390fd5b6137a7838383613b54565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561382d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161382490615339565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546138c09190614396565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516139249190614044565b60405180910390a3613937848484613b59565b50505050565b60006139483061138c565b9050600060155460145461395c9190614396565b905060008083148061396e5750600082145b1561397b57505050613b26565b6014600b5461398a91906144b9565b8311156139a3576014600b546139a091906144b9565b92505b60004790506139b184613b5e565b60006139c68247613d9b90919063ffffffff16565b905060006139f1856139e360155485613b2890919063ffffffff16565b613b3e90919063ffffffff16565b905060006014819055506000601581905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051613a499061538a565b60006040518083038185875af1925050503d8060008114613a86576040519150601f19603f3d011682016040523d82523d6000602084013e613a8b565b606091505b505080945050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613ad79061538a565b60006040518083038185875af1925050503d8060008114613b14576040519150601f19603f3d011682016040523d82523d6000602084013e613b19565b606091505b5050809450505050505050505b565b60008183613b3691906144b9565b905092915050565b60008183613b4c9190614542565b905092915050565b505050565b505050565b6000600267ffffffffffffffff811115613b7b57613b7a61539f565b5b604051908082528060200260200182016040528015613ba95781602001602082028036833780820191505090505b5090503081600081518110613bc157613bc06153ce565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613c66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c8a9190615412565b81600181518110613c9e57613c9d6153ce565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613d03307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846125f2565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613d65959493929190615538565b600060405180830381600087803b158015613d7f57600080fd5b505af1158015613d93573d6000803e3d6000fd5b505050505050565b60008183613da99190615293565b905092915050565b600080fd5b6000819050919050565b613dc981613db6565b8114613dd457600080fd5b50565b600081359050613de681613dc0565b92915050565b60008060408385031215613e0357613e02613db1565b5b6000613e1185828601613dd7565b9250506020613e2285828601613dd7565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613e66578082015181840152602081019050613e4b565b83811115613e75576000848401525b50505050565b6000601f19601f8301169050919050565b6000613e9782613e2c565b613ea18185613e37565b9350613eb1818560208601613e48565b613eba81613e7b565b840191505092915050565b60006020820190508181036000830152613edf8184613e8c565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613f1282613ee7565b9050919050565b613f2281613f07565b8114613f2d57600080fd5b50565b600081359050613f3f81613f19565b92915050565b60008060408385031215613f5c57613f5b613db1565b5b6000613f6a85828601613f30565b9250506020613f7b85828601613dd7565b9150509250929050565b60008115159050919050565b613f9a81613f85565b82525050565b6000602082019050613fb56000830184613f91565b92915050565b6000819050919050565b6000613fe0613fdb613fd684613ee7565b613fbb565b613ee7565b9050919050565b6000613ff282613fc5565b9050919050565b600061400482613fe7565b9050919050565b61401481613ff9565b82525050565b600060208201905061402f600083018461400b565b92915050565b61403e81613db6565b82525050565b60006020820190506140596000830184614035565b92915050565b60006020828403121561407557614074613db1565b5b600061408384828501613dd7565b91505092915050565b6000806000606084860312156140a5576140a4613db1565b5b60006140b386828701613f30565b93505060206140c486828701613f30565b92505060406140d586828701613dd7565b9150509250925092565b600060ff82169050919050565b6140f5816140df565b82525050565b600060208201905061411060008301846140ec565b92915050565b61411f81613f07565b82525050565b600060208201905061413a6000830184614116565b92915050565b60006020828403121561415657614155613db1565b5b600061416484828501613f30565b91505092915050565b61417681613f85565b811461418157600080fd5b50565b6000813590506141938161416d565b92915050565b600080604083850312156141b0576141af613db1565b5b60006141be85828601613f30565b92505060206141cf85828601614184565b9150509250929050565b6000602082840312156141ef576141ee613db1565b5b60006141fd84828501614184565b91505092915050565b61420f816140df565b811461421a57600080fd5b50565b60008135905061422c81614206565b92915050565b6000819050919050565b61424581614232565b811461425057600080fd5b50565b6000813590506142628161423c565b92915050565b60008060006060848603121561428157614280613db1565b5b600061428f8682870161421d565b93505060206142a086828701614253565b92505060406142b186828701614253565b9150509250925092565b600080604083850312156142d2576142d1613db1565b5b60006142e085828601613f30565b92505060206142f185828601613f30565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614331602083613e37565b915061433c826142fb565b602082019050919050565b6000602082019050818103600083015261436081614324565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006143a182613db6565b91506143ac83613db6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156143e1576143e0614367565b5b828201905092915050565b7f4d757374206b656570206665657320617420323525206f72206c657373000000600082015250565b6000614422601d83613e37565b915061442d826143ec565b602082019050919050565b6000602082019050818103600083015261445181614415565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061449f57607f821691505b602082108114156144b3576144b2614458565b5b50919050565b60006144c482613db6565b91506144cf83613db6565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561450857614507614367565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061454d82613db6565b915061455883613db6565b92508261456857614567614513565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e206c6f7765722060008201527f7468616e20302e31250000000000000000000000000000000000000000000000602082015250565b60006145cf602983613e37565b91506145da82614573565b604082019050919050565b600060208201905081810360008301526145fe816145c2565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000614661602883613e37565b915061466c82614605565b604082019050919050565b6000602082019050818103600083015261469081614654565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006146f3603983613e37565b91506146fe82614697565b604082019050919050565b60006020820190508181036000830152614722816146e6565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614785602583613e37565b915061479082614729565b604082019050919050565b600060208201905081810360008301526147b481614778565b9050919050565b6147c481614232565b82525050565b600060a0820190506147df60008301886147bb565b6147ec60208301876147bb565b6147f960408301866147bb565b6148066060830185614035565b6148136080830184614116565b9695505050505050565b600060608201905061483260008301866147bb565b61483f60208301856147bb565b61484c6040830184614035565b949350505050565b600081905092915050565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b6000614895600283614854565b91506148a08261485f565b600282019050919050565b6000819050919050565b6148c66148c182614232565b6148ab565b82525050565b60006148d782614888565b91506148e382856148b5565b6020820191506148f382846148b5565b6020820191508190509392505050565b600060808201905061491860008301876147bb565b61492560208301866140ec565b61493260408301856147bb565b61493f60608301846147bb565b95945050505050565b7f496e76616c6964207369676e6174757265000000000000000000000000000000600082015250565b600061497e601183613e37565b915061498982614948565b602082019050919050565b600060208201905081810360008301526149ad81614971565b9050919050565b7f496e76616c696420616e746920647261696e6572000000000000000000000000600082015250565b60006149ea601483613e37565b91506149f5826149b4565b602082019050919050565b60006020820190508181036000830152614a19816149dd565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614a7c602483613e37565b9150614a8782614a20565b604082019050919050565b60006020820190508181036000830152614aab81614a6f565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614b0e603583613e37565b9150614b1982614ab2565b604082019050919050565b60006020820190508181036000830152614b3d81614b01565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614ba0603483613e37565b9150614bab82614b44565b604082019050919050565b60006020820190508181036000830152614bcf81614b93565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614c32602683613e37565b9150614c3d82614bd6565b604082019050919050565b60006020820190508181036000830152614c6181614c25565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614cc4602483613e37565b9150614ccf82614c68565b604082019050919050565b60006020820190508181036000830152614cf381614cb7565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614d56602283613e37565b9150614d6182614cfa565b604082019050919050565b60006020820190508181036000830152614d8581614d49565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614de8602583613e37565b9150614df382614d8c565b604082019050919050565b60006020820190508181036000830152614e1781614ddb565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614e7a602383613e37565b9150614e8582614e1e565b604082019050919050565b60006020820190508181036000830152614ea981614e6d565b9050919050565b7f5b66726f6d5d20626c61636b206c697374000000000000000000000000000000600082015250565b6000614ee6601183613e37565b9150614ef182614eb0565b602082019050919050565b60006020820190508181036000830152614f1581614ed9565b9050919050565b7f5b746f5d20626c61636b206c6973740000000000000000000000000000000000600082015250565b6000614f52600f83613e37565b9150614f5d82614f1c565b602082019050919050565b60006020820190508181036000830152614f8181614f45565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614fbe601683613e37565b9150614fc982614f88565b602082019050919050565b60006020820190508181036000830152614fed81614fb1565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e2e0000000000000000000000000000000000602082015250565b6000615050602f83613e37565b915061505b82614ff4565b604082019050919050565b6000602082019050818103600083015261507f81615043565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006150bc601383613e37565b91506150c782615086565b602082019050919050565b600060208201905081810360008301526150eb816150af565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e2e00000000000000000000000000000000602082015250565b600061514e603083613e37565b9150615159826150f2565b604082019050919050565b6000602082019050818103600083015261517d81615141565b9050919050565b6000815190506151938161416d565b92915050565b6000602082840312156151af576151ae613db1565b5b60006151bd84828501615184565b91505092915050565b600060c0820190506151db6000830189614116565b6151e86020830188614116565b6151f56040830187614116565b6152026060830186614035565b61520f6080830185614035565b61521c60a0830184614035565b979650505050505050565b7f416e746920447261696e657220456e61626c6564000000000000000000000000600082015250565b600061525d601483613e37565b915061526882615227565b602082019050919050565b6000602082019050818103600083015261528c81615250565b9050919050565b600061529e82613db6565b91506152a983613db6565b9250828210156152bc576152bb614367565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000615323602683613e37565b915061532e826152c7565b604082019050919050565b6000602082019050818103600083015261535281615316565b9050919050565b600081905092915050565b50565b6000615374600083615359565b915061537f82615364565b600082019050919050565b600061539582615367565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061540c81613f19565b92915050565b60006020828403121561542857615427613db1565b5b6000615436848285016153fd565b91505092915050565b6000819050919050565b600061546461545f61545a8461543f565b613fbb565b613db6565b9050919050565b61547481615449565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6154af81613f07565b82525050565b60006154c183836154a6565b60208301905092915050565b6000602082019050919050565b60006154e58261547a565b6154ef8185615485565b93506154fa83615496565b8060005b8381101561552b57815161551288826154b5565b975061551d836154cd565b9250506001810190506154fe565b5085935050505092915050565b600060a08201905061554d6000830188614035565b61555a602083018761546b565b818103604083015261556c81866154da565b905061557b6060830185614116565b6155886080830184614035565b969550505050505056fea2646970667358221220ef1d6f61e6a73821c166f5839c47525ac2e86c4a9dd0a3e0129af1ff0c5603eb64736f6c634300080a0033

Deployed Bytecode Sourcemap

15423:13619:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22273:318;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2856:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3770:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15503:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3177:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16171:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21054:263;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3947:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3076:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15596:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4447:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15661:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15561:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15840:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23673:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21954:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20192:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16064:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15920:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3293:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1004:103;;;;;;;;;;;;;:::i;:::-;;20358:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21589:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15994:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19002:112;;;;;;;;;;;;;:::i;:::-;;781:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16099:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21846:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2964:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22789:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16031:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16211:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16137:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4670:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3428:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19122:1062;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16424:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23295:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18812:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15880:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15697:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22599:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21325:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15731:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20549:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23504:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15960:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3611:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16358:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15767:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1115:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15807:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22273:318;927:12;:10;:12::i;:::-;916:23;;:7;:5;:7::i;:::-;:23;;;908:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22411:13:::1;22392:16;:32;;;;22448:7;22435:10;:20;;;;22501:10;;22482:16;;:29;;;;:::i;:::-;22466:13;:45;;;;22547:2;22530:13;;:19;;22522:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;22273:318:::0;;:::o;2856:100::-;2910:13;2943:5;2936:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2856:100;:::o;3770:169::-;3853:4;3870:39;3879:12;:10;:12::i;:::-;3893:7;3902:6;3870:8;:39::i;:::-;3927:4;3920:11;;3770:169;;;;:::o;15503:51::-;;;:::o;3177:108::-;3238:7;3265:12;;3258:19;;3177:108;:::o;16171:33::-;;;;:::o;21054:263::-;927:12;:10;:12::i;:::-;916:23;;:7;:5;:7::i;:::-;:23;;;908:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21191:4:::1;21183;21178:1;21162:13;:11;:13::i;:::-;:17;;;;:::i;:::-;21161:26;;;;:::i;:::-;21160:35;;;;:::i;:::-;21150:6;:45;;21128:136;;;;;;;;;;;;:::i;:::-;;;;;;;;;21302:6;21292;:17;;;;:::i;:::-;21275:14;:34;;;;21054:263:::0;:::o;3947:492::-;4087:4;4104:36;4114:6;4122:9;4133:6;4104:9;:36::i;:::-;4153:24;4180:11;:19;4192:6;4180:19;;;;;;;;;;;;;;;:33;4200:12;:10;:12::i;:::-;4180:33;;;;;;;;;;;;;;;;4153:60;;4252:6;4232:16;:26;;4224:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;4339:57;4348:6;4356:12;:10;:12::i;:::-;4389:6;4370:16;:25;4339:8;:57::i;:::-;4427:4;4420:11;;;3947:492;;;;;:::o;3076:93::-;3134:5;3159:2;3152:9;;3076:93;:::o;15596:26::-;;;;;;;;;;;;;:::o;4447:215::-;4535:4;4552:80;4561:12;:10;:12::i;:::-;4575:7;4621:10;4584:11;:25;4596:12;:10;:12::i;:::-;4584:25;;;;;;;;;;;;;;;:34;4610:7;4584:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;4552:8;:80::i;:::-;4650:4;4643:11;;4447:215;;;;:::o;15661:29::-;;;;;;;;;;;;;:::o;15561:28::-;;;;;;;;;;;;;:::o;15840:33::-;;;;;;;;;;;;;:::o;23673:126::-;23739:4;23763:19;:28;23783:7;23763:28;;;;;;;;;;;;;;;;;;;;;;;;;23756:35;;23673:126;;;:::o;21954:311::-;927:12;:10;:12::i;:::-;916:23;;:7;:5;:7::i;:::-;:23;;;908:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22090:13:::1;22072:15;:31;;;;22126:7;22114:9;:19;;;;22177:9;;22159:15;;:27;;;;:::i;:::-;22144:12;:42;;;;22221:2;22205:12;;:18;;22197:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;21954:311:::0;;:::o;20192:114::-;927:12;:10;:12::i;:::-;916:23;;:7;:5;:7::i;:::-;:23;;;908:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20292:6:::1;20271:12;:18;20284:4;20271:18;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;20192:114:::0;;:::o;16064:28::-;;;;:::o;15920:31::-;;;;;;;;;;;;;:::o;3293:127::-;3367:7;3394:9;:18;3404:7;3394:18;;;;;;;;;;;;;;;;3387:25;;3293:127;;;:::o;1004:103::-;927:12;:10;:12::i;:::-;916:23;;:7;:5;:7::i;:::-;:23;;;908:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1069:30:::1;1096:1;1069:18;:30::i;:::-;1004:103::o:0;20358:121::-;20410:4;927:12;:10;:12::i;:::-;916:23;;:7;:5;:7::i;:::-;:23;;;908:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20444:5:::1;20427:14;;:22;;;;;;;;;;;;;;;;;;20467:4;20460:11;;20358:121:::0;:::o;21589:161::-;927:12;:10;:12::i;:::-;916:23;;:7;:5;:7::i;:::-;:23;;;908:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21738:4:::1;21702:25;:33;21728:6;21702:33;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;21589:161:::0;;:::o;15994:30::-;;;;:::o;19002:112::-;927:12;:10;:12::i;:::-;916:23;;:7;:5;:7::i;:::-;:23;;;908:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19073:4:::1;19057:13;;:20;;;;;;;;;;;;;;;;;;19102:4;19088:11;;:18;;;;;;;;;;;;;;;;;;19002:112::o:0;781:87::-;827:7;854:6;;;;;;;;;;;847:13;;781:87;:::o;16099:31::-;;;;:::o;21846:100::-;927:12;:10;:12::i;:::-;916:23;;:7;:5;:7::i;:::-;:23;;;908:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21931:7:::1;21917:11;;:21;;;;;;;;;;;;;;;;;;21846:100:::0;:::o;2964:104::-;3020:13;3053:7;3046:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2964:104;:::o;22789:304::-;927:12;:10;:12::i;:::-;916:23;;:7;:5;:7::i;:::-;:23;;;908:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22933:13:::1;;;;;;;;;;;22925:21;;:4;:21;;;;22903:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;23044:41;23073:4;23079:5;23044:28;:41::i;:::-;22789:304:::0;;:::o;16031:24::-;;;;:::o;16211:27::-;;;;:::o;16137:25::-;;;;:::o;4670:413::-;4763:4;4780:24;4807:11;:25;4819:12;:10;:12::i;:::-;4807:25;;;;;;;;;;;;;;;:34;4833:7;4807:34;;;;;;;;;;;;;;;;4780:61;;4880:15;4860:16;:35;;4852:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;4973:67;4982:12;:10;:12::i;:::-;4996:7;5024:15;5005:16;:34;4973:8;:67::i;:::-;5071:4;5064:11;;;4670:413;;;;:::o;3428:175::-;3514:4;3531:42;3541:12;:10;:12::i;:::-;3555:9;3566:6;3531:9;:42::i;:::-;3591:4;3584:11;;3428:175;;;;:::o;19122:1062::-;19206:18;19280:95;19404:22;;;;;;;;;;;;;;;;;19394:33;;;;;;19456:10;;;;;;;;;;;;;;;;;19446:21;;;;;;19486:13;19526:4;19251:295;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;19227:330;;;;;;19206:351;;19570:18;19644:49;19722:23;;;;;;;;;;;;;;;;;19712:34;;;;;;19773:1;19615:175;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;19591:210;;;;;;19570:231;;19814:14;19919:10;19948;19855:134;;;;;;;;;:::i;:::-;;;;;;;;;;;;;19831:169;;;;;;19814:186;;20013:14;20030:26;20040:6;20048:1;20051;20054;20030:26;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20013:43;;20085:7;:5;:7::i;:::-;20075:17;;:6;:17;;;20067:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;20143:4;20127:13;;:20;;;;;;;;;;;;;;;;;;20172:4;20158:11;;:18;;;;;;;;;;;;;;;;;;19195:989;;;;19122:1062;;;:::o;16424:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;23295:201::-;927:12;:10;:12::i;:::-;916:23;;:7;:5;:7::i;:::-;:23;;;908:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23428:14:::1;;;;;;;;;;;23387:56;;23409:17;23387:56;;;;;;;;;;;;23471:17;23454:14;;:34;;;;;;;;;;;;;;;;;;23295:201:::0;:::o;18812:182::-;927:12;:10;:12::i;:::-;916:23;;:7;:5;:7::i;:::-;:23;;;908:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18920:3:::1;18896:28;;:12;:28;;;;18888:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;18974:12;18960:11;;:26;;;;;;;;;;;;;;;;;;18812:182:::0;:::o;15880:33::-;;;;;;;;;;;;;:::o;15697:25::-;;;;;;;;;;;;;:::o;22599:182::-;927:12;:10;:12::i;:::-;916:23;;:7;:5;:7::i;:::-;:23;;;908:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22715:8:::1;22684:19;:28;22704:7;22684:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;22755:7;22739:34;;;22764:8;22739:34;;;;;;:::i;:::-;;;;;;;;22599:182:::0;;:::o;21325:256::-;927:12;:10;:12::i;:::-;916:23;;:7;:5;:7::i;:::-;:23;;;908:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21465:4:::1;21457;21452:1;21436:13;:11;:13::i;:::-;:17;;;;:::i;:::-;21435:26;;;;:::i;:::-;21434:35;;;;:::i;:::-;21424:6;:45;;21402:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;21566:6;21556;:17;;;;:::i;:::-;21544:9;:29;;;;21325:256:::0;:::o;15731:29::-;;;;:::o;20549:497::-;20657:4;927:12;:10;:12::i;:::-;916:23;;:7;:5;:7::i;:::-;:23;;;908:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20736:6:::1;20731:1;20715:13;:11;:13::i;:::-;:17;;;;:::i;:::-;20714:28;;;;:::i;:::-;20701:9;:41;;20679:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;20891:4;20886:1;20870:13;:11;:13::i;:::-;:17;;;;:::i;:::-;20869:26;;;;:::i;:::-;20856:9;:39;;20834:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;21007:9;20986:18;:30;;;;21034:4;21027:11;;20549:497:::0;;;:::o;23504:161::-;927:12;:10;:12::i;:::-;916:23;;:7;:5;:7::i;:::-;:23;;;908:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23613:10:::1;;;;;;;;;;;23584:40;;23602:9;23584:40;;;;;;;;;;;;23648:9;23635:10;;:22;;;;;;;;;;;;;;;;;;23504:161:::0;:::o;15960:27::-;;;;:::o;3611:151::-;3700:7;3727:11;:18;3739:5;3727:18;;;;;;;;;;;;;;;:27;3746:7;3727:27;;;;;;;;;;;;;;;;3720:34;;3611:151;;;;:::o;16358:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;15767:33::-;;;;:::o;1115:201::-;927:12;:10;:12::i;:::-;916:23;;:7;:5;:7::i;:::-;:23;;;908:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1224:1:::1;1204:22;;:8;:22;;;;1196:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;1280:28;1299:8;1280:18;:28::i;:::-;1115:201:::0;:::o;15807:24::-;;;;:::o;327:98::-;380:7;407:10;400:17;;327:98;:::o;6838:380::-;6991:1;6974:19;;:5;:19;;;;6966:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7072:1;7053:21;;:7;:21;;;;7045:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7156:6;7126:11;:18;7138:5;7126:18;;;;;;;;;;;;;;;:27;7145:7;7126:27;;;;;;;;;;;;;;;:36;;;;7194:7;7178:32;;7187:5;7178:32;;;7203:6;7178:32;;;;;;:::i;:::-;;;;;;;;6838:380;;;:::o;23807:3606::-;23955:1;23939:18;;:4;:18;;;;23931:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24032:1;24018:16;;:2;:16;;;;24010:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;24094:12;:18;24107:4;24094:18;;;;;;;;;;;;;;;;;;;;;;;;;24093:19;24085:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;24154:12;:16;24167:2;24154:16;;;;;;;;;;;;;;;;;;;;;;;;;24153:17;24145:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;24217:1;24207:6;:11;24203:93;;;24235:28;24251:4;24257:2;24261:1;24235:15;:28::i;:::-;24278:7;;24203:93;24312:14;;;;;;;;;;;24308:1150;;;24355:7;:5;:7::i;:::-;24347:15;;:4;:15;;;;:49;;;;;24389:7;:5;:7::i;:::-;24383:13;;:2;:13;;;;24347:49;:86;;;;;24431:1;24417:16;;:2;:16;;;;24347:86;:128;;;;;24468:6;24454:21;;:2;:21;;;;24347:128;:158;;;;;24497:8;;;;;;;;;;;24496:9;24347:158;24343:1104;;;24531:13;;;;;;;;;;;24526:150;;24577:19;:25;24597:4;24577:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;24606:19;:23;24626:2;24606:23;;;;;;;;;;;;;;;;;;;;;;;;;24577:52;24569:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;24526:150;24728:25;:31;24754:4;24728:31;;;;;;;;;;;;;;;;;;;;;;;;;:65;;;;;24764:25;:29;24790:2;24764:29;;;;;;;;;;;;;;;;;;;;;;;;;24763:30;24728:65;24724:708;;;24836:14;;24826:6;:24;;24818:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;24959:9;;24942:13;24952:2;24942:9;:13::i;:::-;24933:6;:22;;;;:::i;:::-;:35;;24925:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24724:708;;;25068:25;:29;25094:2;25068:29;;;;;;;;;;;;;;;;;;;;;;;;;:65;;;;;25102:25;:31;25128:4;25102:31;;;;;;;;;;;;;;;;;;;;;;;;;25101:32;25068:65;25064:368;;;25176:14;;25166:6;:24;;25158:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;25064:368;;;25291:25;:29;25317:2;25291:29;;;;;;;;;;;;;;;;;;;;;;;;;25286:146;;25379:9;;25362:13;25372:2;25362:9;:13::i;:::-;25353:6;:22;;;;:::i;:::-;:35;;25345:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25286:146;25064:368;24724:708;24343:1104;24308:1150;25497:1;25474:25;;:11;;;;;;;;;;;:25;;;;:79;;;;;25516:11;;;;;;;;;;;25503:35;;;25547:4;25503:50;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25474:79;25470:290;;;25570:10;25596:11;;;;;;;;;;;25583:31;;;25615:4;25621:2;25633:13;;;;;;;;;;;25649:9;;25660:14;;25676:18;;25583:112;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25570:125;;25718:5;25710:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;25555:205;25470:290;25772:28;25803:24;25821:4;25803:9;:24::i;:::-;25772:55;;25838:12;25877:18;;25853:20;:42;;25838:57;;25910:7;:35;;;;;25934:11;;;;;;;;;;;25910:35;:61;;;;;25963:8;;;;;;;;;;;25962:9;25910:61;:110;;;;;25989:25;:31;26015:4;25989:31;;;;;;;;;;;;;;;;;;;;;;;;;25988:32;25910:110;:153;;;;;26038:19;:25;26058:4;26038:25;;;;;;;;;;;;;;;;;;;;;;;;;26037:26;25910:153;:194;;;;;26081:19;:23;26101:2;26081:23;;;;;;;;;;;;;;;;;;;;;;;;;26080:24;25910:194;25906:300;;;26134:4;26123:8;;:15;;;;;;;;;;;;;;;;;;26153:10;:8;:10::i;:::-;26189:5;26178:8;;:16;;;;;;;;;;;;;;;;;;25906:300;26218:12;26234:8;;;;;;;;;;;26233:9;26218:24;;26344:19;:25;26364:4;26344:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;26373:19;:23;26393:2;26373:23;;;;;;;;;;;;;;;;;;;;;;;;;26344:52;26340:100;;;26423:5;26413:15;;26340:100;26452:12;26557:7;26553:807;;;26609:25;:29;26635:2;26609:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;26658:1;26642:13;;:17;26609:50;26605:606;;;26687:34;26717:3;26687:25;26698:13;;26687:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;26680:41;;26778:13;;26764:10;;26757:4;:17;;;;:::i;:::-;26756:35;;;;:::i;:::-;26740:12;;:51;;;;;;;:::i;:::-;;;;;;;;26860:13;;26840:16;;26833:4;:23;;;;:::i;:::-;26832:41;;;;:::i;:::-;26810:18;;:63;;;;;;;:::i;:::-;;;;;;;;26605:606;;;26935:25;:31;26961:4;26935:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;26985:1;26970:12;;:16;26935:51;26931:280;;;27014:33;27043:3;27014:24;27025:12;;27014:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;27007:40;;27103:12;;27090:9;;27083:4;:16;;;;:::i;:::-;27082:33;;;;:::i;:::-;27066:12;;:49;;;;;;;:::i;:::-;;;;;;;;27183:12;;27164:15;;27157:4;:22;;;;:::i;:::-;27156:39;;;;:::i;:::-;27134:18;;:61;;;;;;;:::i;:::-;;;;;;;;26931:280;26605:606;27238:1;27231:4;:8;27227:91;;;27260:42;27276:4;27290;27297;27260:15;:42::i;:::-;27227:91;27344:4;27334:14;;;;;:::i;:::-;;;26553:807;27372:33;27388:4;27394:2;27398:6;27372:15;:33::i;:::-;23920:3493;;;;23807:3606;;;;:::o;1324:191::-;1398:16;1417:6;;;;;;;;;;;1398:25;;1443:8;1434:6;;:17;;;;;;;;;;;;;;;;;;1498:8;1467:40;;1488:8;1467:40;;;;;;;;;;;;1387:128;1324:191;:::o;23101:186::-;23218:5;23184:25;:31;23210:4;23184:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;23273:5;23239:40;;23267:4;23239:40;;;;;;;;;;;;23101:186;;:::o;5091:733::-;5249:1;5231:20;;:6;:20;;;;5223:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;5333:1;5312:23;;:9;:23;;;;5304:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;5388:47;5409:6;5417:9;5428:6;5388:20;:47::i;:::-;5448:21;5472:9;:17;5482:6;5472:17;;;;;;;;;;;;;;;;5448:41;;5525:6;5508:13;:23;;5500:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;5646:6;5630:13;:22;5610:9;:17;5620:6;5610:17;;;;;;;;;;;;;;;:42;;;;5698:6;5674:9;:20;5684:9;5674:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;5739:9;5722:35;;5731:6;5722:35;;;5750:6;5722:35;;;;;;:::i;:::-;;;;;;;;5770:46;5790:6;5798:9;5809:6;5770:19;:46::i;:::-;5212:612;5091:733;;;:::o;28133:906::-;28172:23;28198:24;28216:4;28198:9;:24::i;:::-;28172:50;;28233:25;28282:12;;28261:18;;:33;;;;:::i;:::-;28233:61;;28305:12;28353:1;28334:15;:20;:46;;;;28379:1;28358:17;:22;28334:46;28330:85;;;28397:7;;;;;28330:85;28470:2;28449:18;;:23;;;;:::i;:::-;28431:15;:41;28427:115;;;28528:2;28507:18;;:23;;;;:::i;:::-;28489:41;;28427:115;28554:25;28582:21;28554:49;;28614:33;28631:15;28614:16;:33::i;:::-;28660:18;28681:44;28707:17;28681:21;:25;;:44;;;;:::i;:::-;28660:65;;28736:17;28756:51;28789:17;28756:28;28771:12;;28756:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;28736:71;;28841:1;28820:18;:22;;;;28868:1;28853:12;:16;;;;28904:10;;;;;;;;;;;28896:24;;28928:9;28896:46;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28882:60;;;;;28975:14;;;;;;;;;;;28967:28;;29004:21;28967:64;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28953:78;;;;;28161:878;;;;;;28133:906;:::o;8842:98::-;8900:7;8931:1;8927;:5;;;;:::i;:::-;8920:12;;8842:98;;;;:::o;8948:::-;9006:7;9037:1;9033;:5;;;;:::i;:::-;9026:12;;8948:98;;;;:::o;7226:125::-;;;;:::o;7359:124::-;;;;:::o;27536:589::-;27662:21;27700:1;27686:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27662:40;;27731:4;27713;27718:1;27713:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;27757:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27747:4;27752:1;27747:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;27792:62;27809:4;27824:15;27842:11;27792:8;:62::i;:::-;27893:15;:66;;;27974:11;28000:1;28044:4;28071;28091:15;27893:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27591:534;27536:589;:::o;8736:98::-;8794:7;8825:1;8821;:5;;;;:::i;:::-;8814:12;;8736:98;;;;:::o;88:117:1:-;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:99::-;1222:6;1256:5;1250:12;1240:22;;1170:99;;;:::o;1275:169::-;1359:11;1393:6;1388:3;1381:19;1433:4;1428:3;1424:14;1409:29;;1275:169;;;;:::o;1450:307::-;1518:1;1528:113;1542:6;1539:1;1536:13;1528:113;;;1627:1;1622:3;1618:11;1612:18;1608:1;1603:3;1599:11;1592:39;1564:2;1561:1;1557:10;1552:15;;1528:113;;;1659:6;1656:1;1653:13;1650:101;;;1739:1;1730:6;1725:3;1721:16;1714:27;1650:101;1499:258;1450:307;;;:::o;1763:102::-;1804:6;1855:2;1851:7;1846:2;1839:5;1835:14;1831:28;1821:38;;1763:102;;;:::o;1871:364::-;1959:3;1987:39;2020:5;1987:39;:::i;:::-;2042:71;2106:6;2101:3;2042:71;:::i;:::-;2035:78;;2122:52;2167:6;2162:3;2155:4;2148:5;2144:16;2122:52;:::i;:::-;2199:29;2221:6;2199:29;:::i;:::-;2194:3;2190:39;2183:46;;1963:272;1871:364;;;;:::o;2241:313::-;2354:4;2392:2;2381:9;2377:18;2369:26;;2441:9;2435:4;2431:20;2427:1;2416:9;2412:17;2405:47;2469:78;2542:4;2533:6;2469:78;:::i;:::-;2461:86;;2241:313;;;;:::o;2560:126::-;2597:7;2637:42;2630:5;2626:54;2615:65;;2560:126;;;:::o;2692:96::-;2729:7;2758:24;2776:5;2758:24;:::i;:::-;2747:35;;2692:96;;;:::o;2794:122::-;2867:24;2885:5;2867:24;:::i;:::-;2860:5;2857:35;2847:63;;2906:1;2903;2896:12;2847:63;2794:122;:::o;2922:139::-;2968:5;3006:6;2993:20;2984:29;;3022:33;3049:5;3022:33;:::i;:::-;2922:139;;;;:::o;3067:474::-;3135:6;3143;3192:2;3180:9;3171:7;3167:23;3163:32;3160:119;;;3198:79;;:::i;:::-;3160:119;3318:1;3343:53;3388:7;3379:6;3368:9;3364:22;3343:53;:::i;:::-;3333:63;;3289:117;3445:2;3471:53;3516:7;3507:6;3496:9;3492:22;3471:53;:::i;:::-;3461:63;;3416:118;3067:474;;;;;:::o;3547:90::-;3581:7;3624:5;3617:13;3610:21;3599:32;;3547:90;;;:::o;3643:109::-;3724:21;3739:5;3724:21;:::i;:::-;3719:3;3712:34;3643:109;;:::o;3758:210::-;3845:4;3883:2;3872:9;3868:18;3860:26;;3896:65;3958:1;3947:9;3943:17;3934:6;3896:65;:::i;:::-;3758:210;;;;:::o;3974:60::-;4002:3;4023:5;4016:12;;3974:60;;;:::o;4040:142::-;4090:9;4123:53;4141:34;4150:24;4168:5;4150:24;:::i;:::-;4141:34;:::i;:::-;4123:53;:::i;:::-;4110:66;;4040:142;;;:::o;4188:126::-;4238:9;4271:37;4302:5;4271:37;:::i;:::-;4258:50;;4188:126;;;:::o;4320:153::-;4397:9;4430:37;4461:5;4430:37;:::i;:::-;4417:50;;4320:153;;;:::o;4479:185::-;4593:64;4651:5;4593:64;:::i;:::-;4588:3;4581:77;4479:185;;:::o;4670:276::-;4790:4;4828:2;4817:9;4813:18;4805:26;;4841:98;4936:1;4925:9;4921:17;4912:6;4841:98;:::i;:::-;4670:276;;;;:::o;4952:118::-;5039:24;5057:5;5039:24;:::i;:::-;5034:3;5027:37;4952:118;;:::o;5076:222::-;5169:4;5207:2;5196:9;5192:18;5184:26;;5220:71;5288:1;5277:9;5273:17;5264:6;5220:71;:::i;:::-;5076:222;;;;:::o;5304:329::-;5363:6;5412:2;5400:9;5391:7;5387:23;5383:32;5380:119;;;5418:79;;:::i;:::-;5380:119;5538:1;5563:53;5608:7;5599:6;5588:9;5584:22;5563:53;:::i;:::-;5553:63;;5509:117;5304:329;;;;:::o;5639:619::-;5716:6;5724;5732;5781:2;5769:9;5760:7;5756:23;5752:32;5749:119;;;5787:79;;:::i;:::-;5749:119;5907:1;5932:53;5977:7;5968:6;5957:9;5953:22;5932:53;:::i;:::-;5922:63;;5878:117;6034:2;6060:53;6105:7;6096:6;6085:9;6081:22;6060:53;:::i;:::-;6050:63;;6005:118;6162:2;6188:53;6233:7;6224:6;6213:9;6209:22;6188:53;:::i;:::-;6178:63;;6133:118;5639:619;;;;;:::o;6264:86::-;6299:7;6339:4;6332:5;6328:16;6317:27;;6264:86;;;:::o;6356:112::-;6439:22;6455:5;6439:22;:::i;:::-;6434:3;6427:35;6356:112;;:::o;6474:214::-;6563:4;6601:2;6590:9;6586:18;6578:26;;6614:67;6678:1;6667:9;6663:17;6654:6;6614:67;:::i;:::-;6474:214;;;;:::o;6694:118::-;6781:24;6799:5;6781:24;:::i;:::-;6776:3;6769:37;6694:118;;:::o;6818:222::-;6911:4;6949:2;6938:9;6934:18;6926:26;;6962:71;7030:1;7019:9;7015:17;7006:6;6962:71;:::i;:::-;6818:222;;;;:::o;7046:329::-;7105:6;7154:2;7142:9;7133:7;7129:23;7125:32;7122:119;;;7160:79;;:::i;:::-;7122:119;7280:1;7305:53;7350:7;7341:6;7330:9;7326:22;7305:53;:::i;:::-;7295:63;;7251:117;7046:329;;;;:::o;7381:116::-;7451:21;7466:5;7451:21;:::i;:::-;7444:5;7441:32;7431:60;;7487:1;7484;7477:12;7431:60;7381:116;:::o;7503:133::-;7546:5;7584:6;7571:20;7562:29;;7600:30;7624:5;7600:30;:::i;:::-;7503:133;;;;:::o;7642:468::-;7707:6;7715;7764:2;7752:9;7743:7;7739:23;7735:32;7732:119;;;7770:79;;:::i;:::-;7732:119;7890:1;7915:53;7960:7;7951:6;7940:9;7936:22;7915:53;:::i;:::-;7905:63;;7861:117;8017:2;8043:50;8085:7;8076:6;8065:9;8061:22;8043:50;:::i;:::-;8033:60;;7988:115;7642:468;;;;;:::o;8116:323::-;8172:6;8221:2;8209:9;8200:7;8196:23;8192:32;8189:119;;;8227:79;;:::i;:::-;8189:119;8347:1;8372:50;8414:7;8405:6;8394:9;8390:22;8372:50;:::i;:::-;8362:60;;8318:114;8116:323;;;;:::o;8445:118::-;8516:22;8532:5;8516:22;:::i;:::-;8509:5;8506:33;8496:61;;8553:1;8550;8543:12;8496:61;8445:118;:::o;8569:135::-;8613:5;8651:6;8638:20;8629:29;;8667:31;8692:5;8667:31;:::i;:::-;8569:135;;;;:::o;8710:77::-;8747:7;8776:5;8765:16;;8710:77;;;:::o;8793:122::-;8866:24;8884:5;8866:24;:::i;:::-;8859:5;8856:35;8846:63;;8905:1;8902;8895:12;8846:63;8793:122;:::o;8921:139::-;8967:5;9005:6;8992:20;8983:29;;9021:33;9048:5;9021:33;:::i;:::-;8921:139;;;;:::o;9066:615::-;9141:6;9149;9157;9206:2;9194:9;9185:7;9181:23;9177:32;9174:119;;;9212:79;;:::i;:::-;9174:119;9332:1;9357:51;9400:7;9391:6;9380:9;9376:22;9357:51;:::i;:::-;9347:61;;9303:115;9457:2;9483:53;9528:7;9519:6;9508:9;9504:22;9483:53;:::i;:::-;9473:63;;9428:118;9585:2;9611:53;9656:7;9647:6;9636:9;9632:22;9611:53;:::i;:::-;9601:63;;9556:118;9066:615;;;;;:::o;9687:474::-;9755:6;9763;9812:2;9800:9;9791:7;9787:23;9783:32;9780:119;;;9818:79;;:::i;:::-;9780:119;9938:1;9963:53;10008:7;9999:6;9988:9;9984:22;9963:53;:::i;:::-;9953:63;;9909:117;10065:2;10091:53;10136:7;10127:6;10116:9;10112:22;10091:53;:::i;:::-;10081:63;;10036:118;9687:474;;;;;:::o;10167:182::-;10307:34;10303:1;10295:6;10291:14;10284:58;10167:182;:::o;10355:366::-;10497:3;10518:67;10582:2;10577:3;10518:67;:::i;:::-;10511:74;;10594:93;10683:3;10594:93;:::i;:::-;10712:2;10707:3;10703:12;10696:19;;10355:366;;;:::o;10727:419::-;10893:4;10931:2;10920:9;10916:18;10908:26;;10980:9;10974:4;10970:20;10966:1;10955:9;10951:17;10944:47;11008:131;11134:4;11008:131;:::i;:::-;11000:139;;10727:419;;;:::o;11152:180::-;11200:77;11197:1;11190:88;11297:4;11294:1;11287:15;11321:4;11318:1;11311:15;11338:305;11378:3;11397:20;11415:1;11397:20;:::i;:::-;11392:25;;11431:20;11449:1;11431:20;:::i;:::-;11426:25;;11585:1;11517:66;11513:74;11510:1;11507:81;11504:107;;;11591:18;;:::i;:::-;11504:107;11635:1;11632;11628:9;11621:16;;11338:305;;;;:::o;11649:179::-;11789:31;11785:1;11777:6;11773:14;11766:55;11649:179;:::o;11834:366::-;11976:3;11997:67;12061:2;12056:3;11997:67;:::i;:::-;11990:74;;12073:93;12162:3;12073:93;:::i;:::-;12191:2;12186:3;12182:12;12175:19;;11834:366;;;:::o;12206:419::-;12372:4;12410:2;12399:9;12395:18;12387:26;;12459:9;12453:4;12449:20;12445:1;12434:9;12430:17;12423:47;12487:131;12613:4;12487:131;:::i;:::-;12479:139;;12206:419;;;:::o;12631:180::-;12679:77;12676:1;12669:88;12776:4;12773:1;12766:15;12800:4;12797:1;12790:15;12817:320;12861:6;12898:1;12892:4;12888:12;12878:22;;12945:1;12939:4;12935:12;12966:18;12956:81;;13022:4;13014:6;13010:17;13000:27;;12956:81;13084:2;13076:6;13073:14;13053:18;13050:38;13047:84;;;13103:18;;:::i;:::-;13047:84;12868:269;12817:320;;;:::o;13143:348::-;13183:7;13206:20;13224:1;13206:20;:::i;:::-;13201:25;;13240:20;13258:1;13240:20;:::i;:::-;13235:25;;13428:1;13360:66;13356:74;13353:1;13350:81;13345:1;13338:9;13331:17;13327:105;13324:131;;;13435:18;;:::i;:::-;13324:131;13483:1;13480;13476:9;13465:20;;13143:348;;;;:::o;13497:180::-;13545:77;13542:1;13535:88;13642:4;13639:1;13632:15;13666:4;13663:1;13656:15;13683:185;13723:1;13740:20;13758:1;13740:20;:::i;:::-;13735:25;;13774:20;13792:1;13774:20;:::i;:::-;13769:25;;13813:1;13803:35;;13818:18;;:::i;:::-;13803:35;13860:1;13857;13853:9;13848:14;;13683:185;;;;:::o;13874:228::-;14014:34;14010:1;14002:6;13998:14;13991:58;14083:11;14078:2;14070:6;14066:15;14059:36;13874:228;:::o;14108:366::-;14250:3;14271:67;14335:2;14330:3;14271:67;:::i;:::-;14264:74;;14347:93;14436:3;14347:93;:::i;:::-;14465:2;14460:3;14456:12;14449:19;;14108:366;;;:::o;14480:419::-;14646:4;14684:2;14673:9;14669:18;14661:26;;14733:9;14727:4;14723:20;14719:1;14708:9;14704:17;14697:47;14761:131;14887:4;14761:131;:::i;:::-;14753:139;;14480:419;;;:::o;14905:227::-;15045:34;15041:1;15033:6;15029:14;15022:58;15114:10;15109:2;15101:6;15097:15;15090:35;14905:227;:::o;15138:366::-;15280:3;15301:67;15365:2;15360:3;15301:67;:::i;:::-;15294:74;;15377:93;15466:3;15377:93;:::i;:::-;15495:2;15490:3;15486:12;15479:19;;15138:366;;;:::o;15510:419::-;15676:4;15714:2;15703:9;15699:18;15691:26;;15763:9;15757:4;15753:20;15749:1;15738:9;15734:17;15727:47;15791:131;15917:4;15791:131;:::i;:::-;15783:139;;15510:419;;;:::o;15935:244::-;16075:34;16071:1;16063:6;16059:14;16052:58;16144:27;16139:2;16131:6;16127:15;16120:52;15935:244;:::o;16185:366::-;16327:3;16348:67;16412:2;16407:3;16348:67;:::i;:::-;16341:74;;16424:93;16513:3;16424:93;:::i;:::-;16542:2;16537:3;16533:12;16526:19;;16185:366;;;:::o;16557:419::-;16723:4;16761:2;16750:9;16746:18;16738:26;;16810:9;16804:4;16800:20;16796:1;16785:9;16781:17;16774:47;16838:131;16964:4;16838:131;:::i;:::-;16830:139;;16557:419;;;:::o;16982:224::-;17122:34;17118:1;17110:6;17106:14;17099:58;17191:7;17186:2;17178:6;17174:15;17167:32;16982:224;:::o;17212:366::-;17354:3;17375:67;17439:2;17434:3;17375:67;:::i;:::-;17368:74;;17451:93;17540:3;17451:93;:::i;:::-;17569:2;17564:3;17560:12;17553:19;;17212:366;;;:::o;17584:419::-;17750:4;17788:2;17777:9;17773:18;17765:26;;17837:9;17831:4;17827:20;17823:1;17812:9;17808:17;17801:47;17865:131;17991:4;17865:131;:::i;:::-;17857:139;;17584:419;;;:::o;18009:118::-;18096:24;18114:5;18096:24;:::i;:::-;18091:3;18084:37;18009:118;;:::o;18133:664::-;18338:4;18376:3;18365:9;18361:19;18353:27;;18390:71;18458:1;18447:9;18443:17;18434:6;18390:71;:::i;:::-;18471:72;18539:2;18528:9;18524:18;18515:6;18471:72;:::i;:::-;18553;18621:2;18610:9;18606:18;18597:6;18553:72;:::i;:::-;18635;18703:2;18692:9;18688:18;18679:6;18635:72;:::i;:::-;18717:73;18785:3;18774:9;18770:19;18761:6;18717:73;:::i;:::-;18133:664;;;;;;;;:::o;18803:442::-;18952:4;18990:2;18979:9;18975:18;18967:26;;19003:71;19071:1;19060:9;19056:17;19047:6;19003:71;:::i;:::-;19084:72;19152:2;19141:9;19137:18;19128:6;19084:72;:::i;:::-;19166;19234:2;19223:9;19219:18;19210:6;19166:72;:::i;:::-;18803:442;;;;;;:::o;19251:148::-;19353:11;19390:3;19375:18;;19251:148;;;;:::o;19405:214::-;19545:66;19541:1;19533:6;19529:14;19522:90;19405:214;:::o;19625:400::-;19785:3;19806:84;19888:1;19883:3;19806:84;:::i;:::-;19799:91;;19899:93;19988:3;19899:93;:::i;:::-;20017:1;20012:3;20008:11;20001:18;;19625:400;;;:::o;20031:79::-;20070:7;20099:5;20088:16;;20031:79;;;:::o;20116:157::-;20221:45;20241:24;20259:5;20241:24;:::i;:::-;20221:45;:::i;:::-;20216:3;20209:58;20116:157;;:::o;20279:663::-;20520:3;20542:148;20686:3;20542:148;:::i;:::-;20535:155;;20700:75;20771:3;20762:6;20700:75;:::i;:::-;20800:2;20795:3;20791:12;20784:19;;20813:75;20884:3;20875:6;20813:75;:::i;:::-;20913:2;20908:3;20904:12;20897:19;;20933:3;20926:10;;20279:663;;;;;:::o;20948:545::-;21121:4;21159:3;21148:9;21144:19;21136:27;;21173:71;21241:1;21230:9;21226:17;21217:6;21173:71;:::i;:::-;21254:68;21318:2;21307:9;21303:18;21294:6;21254:68;:::i;:::-;21332:72;21400:2;21389:9;21385:18;21376:6;21332:72;:::i;:::-;21414;21482:2;21471:9;21467:18;21458:6;21414:72;:::i;:::-;20948:545;;;;;;;:::o;21499:167::-;21639:19;21635:1;21627:6;21623:14;21616:43;21499:167;:::o;21672:366::-;21814:3;21835:67;21899:2;21894:3;21835:67;:::i;:::-;21828:74;;21911:93;22000:3;21911:93;:::i;:::-;22029:2;22024:3;22020:12;22013:19;;21672:366;;;:::o;22044:419::-;22210:4;22248:2;22237:9;22233:18;22225:26;;22297:9;22291:4;22287:20;22283:1;22272:9;22268:17;22261:47;22325:131;22451:4;22325:131;:::i;:::-;22317:139;;22044:419;;;:::o;22469:170::-;22609:22;22605:1;22597:6;22593:14;22586:46;22469:170;:::o;22645:366::-;22787:3;22808:67;22872:2;22867:3;22808:67;:::i;:::-;22801:74;;22884:93;22973:3;22884:93;:::i;:::-;23002:2;22997:3;22993:12;22986:19;;22645:366;;;:::o;23017:419::-;23183:4;23221:2;23210:9;23206:18;23198:26;;23270:9;23264:4;23260:20;23256:1;23245:9;23241:17;23234:47;23298:131;23424:4;23298:131;:::i;:::-;23290:139;;23017:419;;;:::o;23442:223::-;23582:34;23578:1;23570:6;23566:14;23559:58;23651:6;23646:2;23638:6;23634:15;23627:31;23442:223;:::o;23671:366::-;23813:3;23834:67;23898:2;23893:3;23834:67;:::i;:::-;23827:74;;23910:93;23999:3;23910:93;:::i;:::-;24028:2;24023:3;24019:12;24012:19;;23671:366;;;:::o;24043:419::-;24209:4;24247:2;24236:9;24232:18;24224:26;;24296:9;24290:4;24286:20;24282:1;24271:9;24267:17;24260:47;24324:131;24450:4;24324:131;:::i;:::-;24316:139;;24043:419;;;:::o;24468:240::-;24608:34;24604:1;24596:6;24592:14;24585:58;24677:23;24672:2;24664:6;24660:15;24653:48;24468:240;:::o;24714:366::-;24856:3;24877:67;24941:2;24936:3;24877:67;:::i;:::-;24870:74;;24953:93;25042:3;24953:93;:::i;:::-;25071:2;25066:3;25062:12;25055:19;;24714:366;;;:::o;25086:419::-;25252:4;25290:2;25279:9;25275:18;25267:26;;25339:9;25333:4;25329:20;25325:1;25314:9;25310:17;25303:47;25367:131;25493:4;25367:131;:::i;:::-;25359:139;;25086:419;;;:::o;25511:239::-;25651:34;25647:1;25639:6;25635:14;25628:58;25720:22;25715:2;25707:6;25703:15;25696:47;25511:239;:::o;25756:366::-;25898:3;25919:67;25983:2;25978:3;25919:67;:::i;:::-;25912:74;;25995:93;26084:3;25995:93;:::i;:::-;26113:2;26108:3;26104:12;26097:19;;25756:366;;;:::o;26128:419::-;26294:4;26332:2;26321:9;26317:18;26309:26;;26381:9;26375:4;26371:20;26367:1;26356:9;26352:17;26345:47;26409:131;26535:4;26409:131;:::i;:::-;26401:139;;26128:419;;;:::o;26553:225::-;26693:34;26689:1;26681:6;26677:14;26670:58;26762:8;26757:2;26749:6;26745:15;26738:33;26553:225;:::o;26784:366::-;26926:3;26947:67;27011:2;27006:3;26947:67;:::i;:::-;26940:74;;27023:93;27112:3;27023:93;:::i;:::-;27141:2;27136:3;27132:12;27125:19;;26784:366;;;:::o;27156:419::-;27322:4;27360:2;27349:9;27345:18;27337:26;;27409:9;27403:4;27399:20;27395:1;27384:9;27380:17;27373:47;27437:131;27563:4;27437:131;:::i;:::-;27429:139;;27156:419;;;:::o;27581:223::-;27721:34;27717:1;27709:6;27705:14;27698:58;27790:6;27785:2;27777:6;27773:15;27766:31;27581:223;:::o;27810:366::-;27952:3;27973:67;28037:2;28032:3;27973:67;:::i;:::-;27966:74;;28049:93;28138:3;28049:93;:::i;:::-;28167:2;28162:3;28158:12;28151:19;;27810:366;;;:::o;28182:419::-;28348:4;28386:2;28375:9;28371:18;28363:26;;28435:9;28429:4;28425:20;28421:1;28410:9;28406:17;28399:47;28463:131;28589:4;28463:131;:::i;:::-;28455:139;;28182:419;;;:::o;28607:221::-;28747:34;28743:1;28735:6;28731:14;28724:58;28816:4;28811:2;28803:6;28799:15;28792:29;28607:221;:::o;28834:366::-;28976:3;28997:67;29061:2;29056:3;28997:67;:::i;:::-;28990:74;;29073:93;29162:3;29073:93;:::i;:::-;29191:2;29186:3;29182:12;29175:19;;28834:366;;;:::o;29206:419::-;29372:4;29410:2;29399:9;29395:18;29387:26;;29459:9;29453:4;29449:20;29445:1;29434:9;29430:17;29423:47;29487:131;29613:4;29487:131;:::i;:::-;29479:139;;29206:419;;;:::o;29631:224::-;29771:34;29767:1;29759:6;29755:14;29748:58;29840:7;29835:2;29827:6;29823:15;29816:32;29631:224;:::o;29861:366::-;30003:3;30024:67;30088:2;30083:3;30024:67;:::i;:::-;30017:74;;30100:93;30189:3;30100:93;:::i;:::-;30218:2;30213:3;30209:12;30202:19;;29861:366;;;:::o;30233:419::-;30399:4;30437:2;30426:9;30422:18;30414:26;;30486:9;30480:4;30476:20;30472:1;30461:9;30457:17;30450:47;30514:131;30640:4;30514:131;:::i;:::-;30506:139;;30233:419;;;:::o;30658:222::-;30798:34;30794:1;30786:6;30782:14;30775:58;30867:5;30862:2;30854:6;30850:15;30843:30;30658:222;:::o;30886:366::-;31028:3;31049:67;31113:2;31108:3;31049:67;:::i;:::-;31042:74;;31125:93;31214:3;31125:93;:::i;:::-;31243:2;31238:3;31234:12;31227:19;;30886:366;;;:::o;31258:419::-;31424:4;31462:2;31451:9;31447:18;31439:26;;31511:9;31505:4;31501:20;31497:1;31486:9;31482:17;31475:47;31539:131;31665:4;31539:131;:::i;:::-;31531:139;;31258:419;;;:::o;31683:167::-;31823:19;31819:1;31811:6;31807:14;31800:43;31683:167;:::o;31856:366::-;31998:3;32019:67;32083:2;32078:3;32019:67;:::i;:::-;32012:74;;32095:93;32184:3;32095:93;:::i;:::-;32213:2;32208:3;32204:12;32197:19;;31856:366;;;:::o;32228:419::-;32394:4;32432:2;32421:9;32417:18;32409:26;;32481:9;32475:4;32471:20;32467:1;32456:9;32452:17;32445:47;32509:131;32635:4;32509:131;:::i;:::-;32501:139;;32228:419;;;:::o;32653:165::-;32793:17;32789:1;32781:6;32777:14;32770:41;32653:165;:::o;32824:366::-;32966:3;32987:67;33051:2;33046:3;32987:67;:::i;:::-;32980:74;;33063:93;33152:3;33063:93;:::i;:::-;33181:2;33176:3;33172:12;33165:19;;32824:366;;;:::o;33196:419::-;33362:4;33400:2;33389:9;33385:18;33377:26;;33449:9;33443:4;33439:20;33435:1;33424:9;33420:17;33413:47;33477:131;33603:4;33477:131;:::i;:::-;33469:139;;33196:419;;;:::o;33621:172::-;33761:24;33757:1;33749:6;33745:14;33738:48;33621:172;:::o;33799:366::-;33941:3;33962:67;34026:2;34021:3;33962:67;:::i;:::-;33955:74;;34038:93;34127:3;34038:93;:::i;:::-;34156:2;34151:3;34147:12;34140:19;;33799:366;;;:::o;34171:419::-;34337:4;34375:2;34364:9;34360:18;34352:26;;34424:9;34418:4;34414:20;34410:1;34399:9;34395:17;34388:47;34452:131;34578:4;34452:131;:::i;:::-;34444:139;;34171:419;;;:::o;34596:234::-;34736:34;34732:1;34724:6;34720:14;34713:58;34805:17;34800:2;34792:6;34788:15;34781:42;34596:234;:::o;34836:366::-;34978:3;34999:67;35063:2;35058:3;34999:67;:::i;:::-;34992:74;;35075:93;35164:3;35075:93;:::i;:::-;35193:2;35188:3;35184:12;35177:19;;34836:366;;;:::o;35208:419::-;35374:4;35412:2;35401:9;35397:18;35389:26;;35461:9;35455:4;35451:20;35447:1;35436:9;35432:17;35425:47;35489:131;35615:4;35489:131;:::i;:::-;35481:139;;35208:419;;;:::o;35633:169::-;35773:21;35769:1;35761:6;35757:14;35750:45;35633:169;:::o;35808:366::-;35950:3;35971:67;36035:2;36030:3;35971:67;:::i;:::-;35964:74;;36047:93;36136:3;36047:93;:::i;:::-;36165:2;36160:3;36156:12;36149:19;;35808:366;;;:::o;36180:419::-;36346:4;36384:2;36373:9;36369:18;36361:26;;36433:9;36427:4;36423:20;36419:1;36408:9;36404:17;36397:47;36461:131;36587:4;36461:131;:::i;:::-;36453:139;;36180:419;;;:::o;36605:235::-;36745:34;36741:1;36733:6;36729:14;36722:58;36814:18;36809:2;36801:6;36797:15;36790:43;36605:235;:::o;36846:366::-;36988:3;37009:67;37073:2;37068:3;37009:67;:::i;:::-;37002:74;;37085:93;37174:3;37085:93;:::i;:::-;37203:2;37198:3;37194:12;37187:19;;36846:366;;;:::o;37218:419::-;37384:4;37422:2;37411:9;37407:18;37399:26;;37471:9;37465:4;37461:20;37457:1;37446:9;37442:17;37435:47;37499:131;37625:4;37499:131;:::i;:::-;37491:139;;37218:419;;;:::o;37643:137::-;37697:5;37728:6;37722:13;37713:22;;37744:30;37768:5;37744:30;:::i;:::-;37643:137;;;;:::o;37786:345::-;37853:6;37902:2;37890:9;37881:7;37877:23;37873:32;37870:119;;;37908:79;;:::i;:::-;37870:119;38028:1;38053:61;38106:7;38097:6;38086:9;38082:22;38053:61;:::i;:::-;38043:71;;37999:125;37786:345;;;;:::o;38137:775::-;38370:4;38408:3;38397:9;38393:19;38385:27;;38422:71;38490:1;38479:9;38475:17;38466:6;38422:71;:::i;:::-;38503:72;38571:2;38560:9;38556:18;38547:6;38503:72;:::i;:::-;38585;38653:2;38642:9;38638:18;38629:6;38585:72;:::i;:::-;38667;38735:2;38724:9;38720:18;38711:6;38667:72;:::i;:::-;38749:73;38817:3;38806:9;38802:19;38793:6;38749:73;:::i;:::-;38832;38900:3;38889:9;38885:19;38876:6;38832:73;:::i;:::-;38137:775;;;;;;;;;:::o;38918:170::-;39058:22;39054:1;39046:6;39042:14;39035:46;38918:170;:::o;39094:366::-;39236:3;39257:67;39321:2;39316:3;39257:67;:::i;:::-;39250:74;;39333:93;39422:3;39333:93;:::i;:::-;39451:2;39446:3;39442:12;39435:19;;39094:366;;;:::o;39466:419::-;39632:4;39670:2;39659:9;39655:18;39647:26;;39719:9;39713:4;39709:20;39705:1;39694:9;39690:17;39683:47;39747:131;39873:4;39747:131;:::i;:::-;39739:139;;39466:419;;;:::o;39891:191::-;39931:4;39951:20;39969:1;39951:20;:::i;:::-;39946:25;;39985:20;40003:1;39985:20;:::i;:::-;39980:25;;40024:1;40021;40018:8;40015:34;;;40029:18;;:::i;:::-;40015:34;40074:1;40071;40067:9;40059:17;;39891:191;;;;:::o;40088:225::-;40228:34;40224:1;40216:6;40212:14;40205:58;40297:8;40292:2;40284:6;40280:15;40273:33;40088:225;:::o;40319:366::-;40461:3;40482:67;40546:2;40541:3;40482:67;:::i;:::-;40475:74;;40558:93;40647:3;40558:93;:::i;:::-;40676:2;40671:3;40667:12;40660:19;;40319:366;;;:::o;40691:419::-;40857:4;40895:2;40884:9;40880:18;40872:26;;40944:9;40938:4;40934:20;40930:1;40919:9;40915:17;40908:47;40972:131;41098:4;40972:131;:::i;:::-;40964:139;;40691:419;;;:::o;41116:147::-;41217:11;41254:3;41239:18;;41116:147;;;;:::o;41269:114::-;;:::o;41389:398::-;41548:3;41569:83;41650:1;41645:3;41569:83;:::i;:::-;41562:90;;41661:93;41750:3;41661:93;:::i;:::-;41779:1;41774:3;41770:11;41763:18;;41389:398;;;:::o;41793:379::-;41977:3;41999:147;42142:3;41999:147;:::i;:::-;41992:154;;42163:3;42156:10;;41793:379;;;:::o;42178:180::-;42226:77;42223:1;42216:88;42323:4;42320:1;42313:15;42347:4;42344:1;42337:15;42364:180;42412:77;42409:1;42402:88;42509:4;42506:1;42499:15;42533:4;42530:1;42523:15;42550:143;42607:5;42638:6;42632:13;42623:22;;42654:33;42681:5;42654:33;:::i;:::-;42550:143;;;;:::o;42699:351::-;42769:6;42818:2;42806:9;42797:7;42793:23;42789:32;42786:119;;;42824:79;;:::i;:::-;42786:119;42944:1;42969:64;43025:7;43016:6;43005:9;43001:22;42969:64;:::i;:::-;42959:74;;42915:128;42699:351;;;;:::o;43056:85::-;43101:7;43130:5;43119:16;;43056:85;;;:::o;43147:158::-;43205:9;43238:61;43256:42;43265:32;43291:5;43265:32;:::i;:::-;43256:42;:::i;:::-;43238:61;:::i;:::-;43225:74;;43147:158;;;:::o;43311:147::-;43406:45;43445:5;43406:45;:::i;:::-;43401:3;43394:58;43311:147;;:::o;43464:114::-;43531:6;43565:5;43559:12;43549:22;;43464:114;;;:::o;43584:184::-;43683:11;43717:6;43712:3;43705:19;43757:4;43752:3;43748:14;43733:29;;43584:184;;;;:::o;43774:132::-;43841:4;43864:3;43856:11;;43894:4;43889:3;43885:14;43877:22;;43774:132;;;:::o;43912:108::-;43989:24;44007:5;43989:24;:::i;:::-;43984:3;43977:37;43912:108;;:::o;44026:179::-;44095:10;44116:46;44158:3;44150:6;44116:46;:::i;:::-;44194:4;44189:3;44185:14;44171:28;;44026:179;;;;:::o;44211:113::-;44281:4;44313;44308:3;44304:14;44296:22;;44211:113;;;:::o;44360:732::-;44479:3;44508:54;44556:5;44508:54;:::i;:::-;44578:86;44657:6;44652:3;44578:86;:::i;:::-;44571:93;;44688:56;44738:5;44688:56;:::i;:::-;44767:7;44798:1;44783:284;44808:6;44805:1;44802:13;44783:284;;;44884:6;44878:13;44911:63;44970:3;44955:13;44911:63;:::i;:::-;44904:70;;44997:60;45050:6;44997:60;:::i;:::-;44987:70;;44843:224;44830:1;44827;44823:9;44818:14;;44783:284;;;44787:14;45083:3;45076:10;;44484:608;;;44360:732;;;;:::o;45098:831::-;45361:4;45399:3;45388:9;45384:19;45376:27;;45413:71;45481:1;45470:9;45466:17;45457:6;45413:71;:::i;:::-;45494:80;45570:2;45559:9;45555:18;45546:6;45494:80;:::i;:::-;45621:9;45615:4;45611:20;45606:2;45595:9;45591:18;45584:48;45649:108;45752:4;45743:6;45649:108;:::i;:::-;45641:116;;45767:72;45835:2;45824:9;45820:18;45811:6;45767:72;:::i;:::-;45849:73;45917:3;45906:9;45902:19;45893:6;45849:73;:::i;:::-;45098:831;;;;;;;;:::o

Swarm Source

ipfs://ef1d6f61e6a73821c166f5839c47525ac2e86c4a9dd0a3e0129af1ff0c5603eb
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.