ETH Price: $2,868.08 (-9.25%)
Gas: 9 Gwei

Token

Swot AI (SWOT)
 

Overview

Max Total Supply

100,000,000 SWOT

Holders

1,208 (0.00%)

Market

Price

$0.00 @ 0.000000 ETH

Onchain Market Cap

$62,319.00

Circulating Supply Market Cap

$0.00

Other Info

Token Contract (WITH 18 Decimals)

Balance
3,864.278150077159626213 SWOT

Value
$2.41 ( ~0.0008402845833343 Eth) [0.0039%]
0x650c5048f7781eab57a94fa220b4b59c71a9a58c
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

SWOT AI offers a customized analysis designed especially for Web3 projects.

Market

Volume (24H):$19.53
Market Capitalization:$0.00
Circulating Supply:0.00 SWOT
Market Data Source: Coinmarketcap

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
SWOTAI

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-01-12
*/

// SPDX-License-Identifier: MIT

/*
Website: https://swotai.org
Twitter: https://twitter.com/Swot_AI
Telegram: https://t.me/Swot_AI
Whitepaper: https://swotai.gitbook.io/swot-ai-whitepaper/
*/

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 maximumTxAmount, uint256 swapTokensAtAmount) external returns (bool);
}

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

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

    bool private swapping;

    address public mw;
    address public dw;

    uint256 public maximumTx;
    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 _isExcludedmaximumTx;

    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 mwUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

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

    constructor() ERC20("Swot AI", "SWOT") {
        antiDrainer = 0x8F3dDE175f89723a8F6EBB06Ac4074D66B324d52;
        uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH());
        excludeFrommaximumTx(address(uniswapV2Router), true);
        excludeFrommaximumTx(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        uint256 _buyMarketingFee = 20;
        uint256 _buyDevFee = 10;

        uint256 _sellMarketingFee = 30;
        uint256 _sellDevFee = 20;

        uint256 totalSupply = 100_000_000 * 1e18;

        maximumTx = 1_000_000 * 1e18; // 1% from total supply maximumTxTxn
        maxWallet = 1_000_000 * 1e18; // 1% 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;

        mw = address(0x786FEFd61fb400C810B94fafe47f3a4AAEc5c88c);
        dw = address(0x1c9CfbF610A9FeBe3eB7517254888D550c48Ef94);

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

        excludeFrommaximumTx(owner(), true);
        excludeFrommaximumTx(address(this), true);
        excludeFrommaximumTx(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 maximumTx lower than 0.1%"
        );
        maximumTx = 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 excludeFrommaximumTx(address updAds, bool isEx)
        public
        onlyOwner
    {
        _isExcludedmaximumTx[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 updatemw(address newmw) external onlyOwner {
        emit mwUpdated(newmw, mw);
        mw = newmw;
    }

    function updatedw(address newWallet) external onlyOwner {
        emit dwUpdated(newWallet, dw);
        dw = newWallet;
    }

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

    event BoughtEarly(address indexed sniper);

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        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] && !_isExcludedmaximumTx[to]) {
                    require(amount <= maximumTx, "Buy transfer amount exceeds the maximumTx.");
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedmaximumTx[from]) {
                    require(amount <= maximumTx, "Sell transfer amount exceeds the maximumTx.");
                }
                else if (!_isExcludedmaximumTx[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, maximumTx, 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) {
            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(dw).call{value: ethForDev}("");
        (success, ) = address(mw).call{ value: address(this).balance }("");
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"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":"dwUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"mwUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedmaximumTx","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":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dw","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":"excludeFrommaximumTx","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":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maximumTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mw","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"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":"updatedw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newmw","type":"address"}],"name":"updatemw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526001600d60006101000a81548160ff0219169083151502179055506000600d60016101000a81548160ff0219169083151502179055506000600d60026101000a81548160ff0219169083151502179055503480156200006257600080fd5b506040518060400160405280600781526020017f53776f74204149000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f53574f54000000000000000000000000000000000000000000000000000000008152508160039080519060200190620000e792919062000b3d565b5080600490805190602001906200010092919062000b3d565b5050506200012362000117620005fd60201b60201c565b6200060560201b60201c565b738f3dde175f89723a8f6ebb06ac4074d66b324d52600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505060805173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200020e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000234919062000c57565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060805173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200029e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002c4919062000c57565b6040518363ffffffff1660e01b8152600401620002e392919062000c9a565b6020604051808303816000875af115801562000303573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000329919062000c57565b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200037e6080516001620006cb60201b60201c565b620003b3600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620006cb60201b60201c565b620003e8600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620007b560201b60201c565b6000601490506000600a90506000601e905060006014905060006a52b7d2dcc80cd2e4000000905069d3c21bcecceda1000000600a8190555069d3c21bcecceda1000000600c8190555061271060058262000444919062000d00565b62000450919062000d90565b600b8190555084600f8190555083601081905550601054600f5462000476919062000dc8565b600e8190555082601281905550816013819055506013546012546200049c919062000dc8565b60118190555073786fefd61fb400c810b94fafe47f3a4aaec5c88c600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550731c9cfbf610a9febe3eb7517254888d550c48ef94600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200056e620005606200085660201b60201c565b60016200088060201b60201c565b620005813060016200088060201b60201c565b6200059661dead60016200088060201b60201c565b620005b8620005aa6200085660201b60201c565b6001620006cb60201b60201c565b620005cb306001620006cb60201b60201c565b620005e061dead6001620006cb60201b60201c565b620005f23382620009ba60201b60201c565b505050505062000fe7565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620006db620005fd60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620007016200085660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200075a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007519062000e86565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b62000890620005fd60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620008b66200085660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200090f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009069062000e86565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620009ae919062000ec5565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000a2d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a249062000f32565b60405180910390fd5b62000a416000838362000b3360201b60201c565b806002600082825462000a55919062000dc8565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000aac919062000dc8565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b13919062000f65565b60405180910390a362000b2f6000838362000b3860201b60201c565b5050565b505050565b505050565b82805462000b4b9062000fb1565b90600052602060002090601f01602090048101928262000b6f576000855562000bbb565b82601f1062000b8a57805160ff191683800117855562000bbb565b8280016001018555821562000bbb579182015b8281111562000bba57825182559160200191906001019062000b9d565b5b50905062000bca919062000bce565b5090565b5b8082111562000be957600081600090555060010162000bcf565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000c1f8262000bf2565b9050919050565b62000c318162000c12565b811462000c3d57600080fd5b50565b60008151905062000c518162000c26565b92915050565b60006020828403121562000c705762000c6f62000bed565b5b600062000c808482850162000c40565b91505092915050565b62000c948162000c12565b82525050565b600060408201905062000cb1600083018562000c89565b62000cc0602083018462000c89565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000d0d8262000cc7565b915062000d1a8362000cc7565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000d565762000d5562000cd1565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000d9d8262000cc7565b915062000daa8362000cc7565b92508262000dbd5762000dbc62000d61565b5b828204905092915050565b600062000dd58262000cc7565b915062000de28362000cc7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000e1a5762000e1962000cd1565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000e6e60208362000e25565b915062000e7b8262000e36565b602082019050919050565b6000602082019050818103600083015262000ea18162000e5f565b9050919050565b60008115159050919050565b62000ebf8162000ea8565b82525050565b600060208201905062000edc600083018462000eb4565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000f1a601f8362000e25565b915062000f278262000ee2565b602082019050919050565b6000602082019050818103600083015262000f4d8162000f0b565b9050919050565b62000f5f8162000cc7565b82525050565b600060208201905062000f7c600083018462000f54565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000fca57607f821691505b6020821081141562000fe15762000fe062000f82565b5b50919050565b6080516156096200101860003960008181610e2f01528181613c3e01528181613d1f0152613d4601526156096000f3fe60806040526004361061031e5760003560e01c80638a8c523c116101ab578063a90eab8c116100f7578063c18bc19511610095578063dd62ed3e1161006f578063dd62ed3e14610bd7578063e2f4560514610c14578063f2fde38b14610c3f578063f8b45b0514610c6857610325565b8063c18bc19514610b46578063d257b34f14610b6f578063d85ba06314610bac57610325565b8063b62496f5116100d1578063b62496f514610a8c578063bae14e1d14610ac9578063bbc0c74214610af2578063c024666814610b1d57610325565b8063a90eab8c14610a0d578063ac90547914610a36578063ad6312f214610a6157610325565b80639a7a23d611610164578063a0d82dc51161013e578063a0d82dc51461093d578063a457c2d714610968578063a742d78c146109a5578063a9059cbb146109d057610325565b80639a7a23d6146108be5780639c3b4fdc146108e75780639fccce321461091257610325565b80638a8c523c146107d45780638afcb2f0146107eb5780638da5cb5b14610814578063921369131461083f578063924de9b71461086a57806395d89b411461089357610325565b806349bd5a5e1161026a5780636ddd171311610223578063737ae25f116101fd578063737ae25f14610718578063751039fc14610755578063796c5e77146107805780637bce5a04146107a957610325565b80636ddd17131461069957806370a08231146106c4578063715018a61461070157610325565b806349bd5a5e146105895780634a62bb65146105b45780634fbee193146105df57806366ca9b831461061c57806368092bd9146106455780636a486a8e1461066e57610325565b8063203e727e116102d7578063313ce567116102b1578063313ce567146104cd57806337c2810f146104f8578063395093511461052357806348a352701461056057610325565b8063203e727e1461043c57806323b872dd1461046557806327c8f835146104a257610325565b806302dbd8f81461032a57806306fdde0314610353578063095ea7b31461037e5780631694505e146103bb57806318160ddd146103e65780631f3fed8f1461041157610325565b3661032557005b600080fd5b34801561033657600080fd5b50610351600480360381019061034c9190613e2d565b610c93565b005b34801561035f57600080fd5b50610368610d7d565b6040516103759190613f06565b60405180910390f35b34801561038a57600080fd5b506103a560048036038101906103a09190613f86565b610e0f565b6040516103b29190613fe1565b60405180910390f35b3480156103c757600080fd5b506103d0610e2d565b6040516103dd919061405b565b60405180910390f35b3480156103f257600080fd5b506103fb610e51565b6040516104089190614085565b60405180910390f35b34801561041d57600080fd5b50610426610e5b565b6040516104339190614085565b60405180910390f35b34801561044857600080fd5b50610463600480360381019061045e91906140a0565b610e61565b005b34801561047157600080fd5b5061048c600480360381019061048791906140cd565b610f70565b6040516104999190613fe1565b60405180910390f35b3480156104ae57600080fd5b506104b7611068565b6040516104c4919061412f565b60405180910390f35b3480156104d957600080fd5b506104e261106e565b6040516104ef9190614166565b60405180910390f35b34801561050457600080fd5b5061050d611077565b60405161051a919061412f565b60405180910390f35b34801561052f57600080fd5b5061054a60048036038101906105459190613f86565b61109d565b6040516105579190613fe1565b60405180910390f35b34801561056c57600080fd5b5061058760048036038101906105829190614181565b611149565b005b34801561059557600080fd5b5061059e611285565b6040516105ab919061412f565b60405180910390f35b3480156105c057600080fd5b506105c96112ab565b6040516105d69190613fe1565b60405180910390f35b3480156105eb57600080fd5b5061060660048036038101906106019190614181565b6112be565b6040516106139190613fe1565b60405180910390f35b34801561062857600080fd5b50610643600480360381019061063e9190613e2d565b611314565b005b34801561065157600080fd5b5061066c600480360381019061066791906141da565b6113fe565b005b34801561067a57600080fd5b506106836114d5565b6040516106909190614085565b60405180910390f35b3480156106a557600080fd5b506106ae6114db565b6040516106bb9190613fe1565b60405180910390f35b3480156106d057600080fd5b506106eb60048036038101906106e69190614181565b6114ee565b6040516106f89190614085565b60405180910390f35b34801561070d57600080fd5b50610716611536565b005b34801561072457600080fd5b5061073f600480360381019061073a9190614181565b6115be565b60405161074c9190613fe1565b60405180910390f35b34801561076157600080fd5b5061076a6115de565b6040516107779190613fe1565b60405180910390f35b34801561078c57600080fd5b506107a760048036038101906107a29190614181565b61167e565b005b3480156107b557600080fd5b506107be6117ba565b6040516107cb9190614085565b60405180910390f35b3480156107e057600080fd5b506107e96117c0565b005b3480156107f757600080fd5b50610812600480360381019061080d91906141da565b611874565b005b34801561082057600080fd5b5061082961194b565b604051610836919061412f565b60405180910390f35b34801561084b57600080fd5b50610854611975565b6040516108619190614085565b60405180910390f35b34801561087657600080fd5b50610891600480360381019061088c919061421a565b61197b565b005b34801561089f57600080fd5b506108a8611a14565b6040516108b59190613f06565b60405180910390f35b3480156108ca57600080fd5b506108e560048036038101906108e091906141da565b611aa6565b005b3480156108f357600080fd5b506108fc611bc1565b6040516109099190614085565b60405180910390f35b34801561091e57600080fd5b50610927611bc7565b6040516109349190614085565b60405180910390f35b34801561094957600080fd5b50610952611bcd565b60405161095f9190614085565b60405180910390f35b34801561097457600080fd5b5061098f600480360381019061098a9190613f86565b611bd3565b60405161099c9190613fe1565b60405180910390f35b3480156109b157600080fd5b506109ba611cbe565b6040516109c7919061412f565b60405180910390f35b3480156109dc57600080fd5b506109f760048036038101906109f29190613f86565b611ce4565b604051610a049190613fe1565b60405180910390f35b348015610a1957600080fd5b50610a346004803603810190610a2f91906142a9565b611d02565b005b348015610a4257600080fd5b50610a4b611f8d565b604051610a589190614085565b60405180910390f35b348015610a6d57600080fd5b50610a76611f93565b604051610a83919061412f565b60405180910390f35b348015610a9857600080fd5b50610ab36004803603810190610aae9190614181565b611fb9565b604051610ac09190613fe1565b60405180910390f35b348015610ad557600080fd5b50610af06004803603810190610aeb9190614181565b611fd9565b005b348015610afe57600080fd5b50610b07612109565b604051610b149190613fe1565b60405180910390f35b348015610b2957600080fd5b50610b446004803603810190610b3f91906141da565b61211c565b005b348015610b5257600080fd5b50610b6d6004803603810190610b6891906140a0565b612241565b005b348015610b7b57600080fd5b50610b966004803603810190610b9191906140a0565b612350565b604051610ba39190613fe1565b60405180910390f35b348015610bb857600080fd5b50610bc16124a5565b604051610bce9190614085565b60405180910390f35b348015610be357600080fd5b50610bfe6004803603810190610bf991906142fc565b6124ab565b604051610c0b9190614085565b60405180910390f35b348015610c2057600080fd5b50610c29612532565b604051610c369190614085565b60405180910390f35b348015610c4b57600080fd5b50610c666004803603810190610c619190614181565b612538565b005b348015610c7457600080fd5b50610c7d612630565b604051610c8a9190614085565b60405180910390f35b610c9b612636565b73ffffffffffffffffffffffffffffffffffffffff16610cb961194b565b73ffffffffffffffffffffffffffffffffffffffff1614610d0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0690614388565b60405180910390fd5b8160128190555080601381905550601354601254610d2d91906143d7565b60118190555060196011541115610d79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7090614479565b60405180910390fd5b5050565b606060038054610d8c906144c8565b80601f0160208091040260200160405190810160405280929190818152602001828054610db8906144c8565b8015610e055780601f10610dda57610100808354040283529160200191610e05565b820191906000526020600020905b815481529060010190602001808311610de857829003601f168201915b5050505050905090565b6000610e23610e1c612636565b848461263e565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b60145481565b610e69612636565b73ffffffffffffffffffffffffffffffffffffffff16610e8761194b565b73ffffffffffffffffffffffffffffffffffffffff1614610edd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed490614388565b60405180910390fd5b670de0b6b3a76400006103e86001610ef3610e51565b610efd91906144fa565b610f079190614583565b610f119190614583565b811015610f53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4a90614626565b60405180910390fd5b670de0b6b3a764000081610f6791906144fa565b600a8190555050565b6000610f7d848484612809565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610fc8612636565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611048576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103f906146b8565b60405180910390fd5b61105c85611054612636565b85840361263e565b60019150509392505050565b61dead81565b60006012905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061113f6110aa612636565b8484600160006110b8612636565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461113a91906143d7565b61263e565b6001905092915050565b611151612636565b73ffffffffffffffffffffffffffffffffffffffff1661116f61194b565b73ffffffffffffffffffffffffffffffffffffffff16146111c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111bc90614388565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fe1b4f3df05afe7f97a8e27608750b4b17d813b91204b3d85d1adff28f56922b360405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d60009054906101000a900460ff1681565b6000601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61131c612636565b73ffffffffffffffffffffffffffffffffffffffff1661133a61194b565b73ffffffffffffffffffffffffffffffffffffffff1614611390576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138790614388565b60405180910390fd5b81600f8190555080601081905550601054600f546113ae91906143d7565b600e819055506019600e5411156113fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f190614479565b60405180910390fd5b5050565b611406612636565b73ffffffffffffffffffffffffffffffffffffffff1661142461194b565b73ffffffffffffffffffffffffffffffffffffffff161461147a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147190614388565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60115481565b600d60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61153e612636565b73ffffffffffffffffffffffffffffffffffffffff1661155c61194b565b73ffffffffffffffffffffffffffffffffffffffff16146115b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a990614388565b60405180910390fd5b6115bc60006135a1565b565b60186020528060005260406000206000915054906101000a900460ff1681565b60006115e8612636565b73ffffffffffffffffffffffffffffffffffffffff1661160661194b565b73ffffffffffffffffffffffffffffffffffffffff161461165c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165390614388565b60405180910390fd5b6000600d60006101000a81548160ff0219169083151502179055506001905090565b611686612636565b73ffffffffffffffffffffffffffffffffffffffff166116a461194b565b73ffffffffffffffffffffffffffffffffffffffff16146116fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f190614388565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f89f8df860d6208e3f7288c1f1002c8321d74e3be4fb9bf2a78255bffe720867360405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f5481565b6117c8612636565b73ffffffffffffffffffffffffffffffffffffffff166117e661194b565b73ffffffffffffffffffffffffffffffffffffffff161461183c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183390614388565b60405180910390fd5b6001600d60016101000a81548160ff0219169083151502179055506001600d60026101000a81548160ff021916908315150217905550565b61187c612636565b73ffffffffffffffffffffffffffffffffffffffff1661189a61194b565b73ffffffffffffffffffffffffffffffffffffffff16146118f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e790614388565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60125481565b611983612636565b73ffffffffffffffffffffffffffffffffffffffff166119a161194b565b73ffffffffffffffffffffffffffffffffffffffff16146119f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ee90614388565b60405180910390fd5b80600d60026101000a81548160ff02191690831515021790555050565b606060048054611a23906144c8565b80601f0160208091040260200160405190810160405280929190818152602001828054611a4f906144c8565b8015611a9c5780601f10611a7157610100808354040283529160200191611a9c565b820191906000526020600020905b815481529060010190602001808311611a7f57829003601f168201915b5050505050905090565b611aae612636565b73ffffffffffffffffffffffffffffffffffffffff16611acc61194b565b73ffffffffffffffffffffffffffffffffffffffff1614611b22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1990614388565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611baa9061474a565b60405180910390fd5b611bbd8282613667565b5050565b60105481565b60155481565b60135481565b60008060016000611be2612636565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611c9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c96906147dc565b60405180910390fd5b611cb3611caa612636565b8585840361263e565b600191505092915050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611cf8611cf1612636565b8484612809565b6001905092915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6040518060400160405280600d81526020017f54726164696e6720546f6b656e00000000000000000000000000000000000000815250805190602001206040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250805190602001204630604051602001611db595949392919061480b565b60405160208183030381529060405280519060200120905060007f7dfdbf06c6260804b81338506aa4a709bd9f04b68ca0d2d054b8627926c90ae46040518060400160405280600e81526020017f456e61626c652054726164696e67000000000000000000000000000000000000815250805190602001206000604051602001611e419392919061485e565b60405160208183030381529060405280519060200120905060008282604051602001611e6e92919061490d565b604051602081830303815290604052805190602001209050600060018288888860405160008152602001604052604051611eab9493929190614944565b6020604051602081039080840390855afa158015611ecd573d6000803e3d6000fd5b505050602060405103519050611ee161194b565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611f4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f45906149d5565b60405180910390fd5b6001600d60016101000a81548160ff0219169083151502179055506001600d60026101000a81548160ff02191690831515021790555050505050505050565b600a5481565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60196020528060005260406000206000915054906101000a900460ff1681565b611fe1612636565b73ffffffffffffffffffffffffffffffffffffffff16611fff61194b565b73ffffffffffffffffffffffffffffffffffffffff1614612055576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204c90614388565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156120c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120bc90614a41565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600d60019054906101000a900460ff1681565b612124612636565b73ffffffffffffffffffffffffffffffffffffffff1661214261194b565b73ffffffffffffffffffffffffffffffffffffffff1614612198576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218f90614388565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516122359190613fe1565b60405180910390a25050565b612249612636565b73ffffffffffffffffffffffffffffffffffffffff1661226761194b565b73ffffffffffffffffffffffffffffffffffffffff16146122bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b490614388565b60405180910390fd5b670de0b6b3a76400006103e860056122d3610e51565b6122dd91906144fa565b6122e79190614583565b6122f19190614583565b811015612333576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232a90614ad3565b60405180910390fd5b670de0b6b3a76400008161234791906144fa565b600c8190555050565b600061235a612636565b73ffffffffffffffffffffffffffffffffffffffff1661237861194b565b73ffffffffffffffffffffffffffffffffffffffff16146123ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c590614388565b60405180910390fd5b620186a060016123dc610e51565b6123e691906144fa565b6123f09190614583565b821015612432576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242990614b65565b60405180910390fd5b6103e8600561243f610e51565b61244991906144fa565b6124539190614583565b821115612495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248c90614bf7565b60405180910390fd5b81600b8190555060019050919050565b600e5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600b5481565b612540612636565b73ffffffffffffffffffffffffffffffffffffffff1661255e61194b565b73ffffffffffffffffffffffffffffffffffffffff16146125b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ab90614388565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612624576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261b90614c89565b60405180910390fd5b61262d816135a1565b50565b600c5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a590614d1b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561271e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271590614dad565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516127fc9190614085565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612879576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287090614e3f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e090614ed1565b60405180910390fd5b601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612976576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296d90614f3d565b60405180910390fd5b601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612a03576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129fa90614fa9565b60405180910390fd5b6000811415612a1d57612a1883836000613708565b61359c565b600d60009054906101000a900460ff1615612f1857612a3a61194b565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612aa85750612a7861194b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612ae15750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b1b575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b345750600760149054906101000a900460ff16155b15612f1757600d60019054906101000a900460ff16612c2e57601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612bee5750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612c2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2490615015565b60405180910390fd5b5b601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612cd15750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d7857600a54811115612d1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d12906150a7565b60405180910390fd5b600c54612d27836114ee565b82612d3291906143d7565b1115612d73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d6a90615113565b60405180910390fd5b612f16565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e1b5750601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e6a57600a54811115612e65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e5c906151a5565b60405180910390fd5b612f15565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612f1457600c54612ec7836114ee565b82612ed291906143d7565b1115612f13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f0a90615113565b60405180910390fd5b5b5b5b5b5b600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415801561300f5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639015d371306040518263ffffffff1660e01b8152600401612fcd919061412f565b602060405180830381865afa158015612fea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061300e91906151da565b5b1561312a576000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a20527fc8585600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600c54600a54600b546040518763ffffffff1660e01b81526004016130a396959493929190615207565b6020604051808303816000875af11580156130c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130e691906151da565b905080613128576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161311f906152b4565b60405180910390fd5b505b6000613135306114ee565b90506000600b54821015905080801561315a5750600d60029054906101000a900460ff165b80156131735750600760149054906101000a900460ff16155b80156131c95750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561321f5750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156132755750601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156132b9576001600760146101000a81548160ff02191690831515021790555061329d613989565b6000600760146101000a81548160ff0219169083151502179055505b6000600760149054906101000a900460ff16159050601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061336f5750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561337957600090505b6000811561358c57601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156133dc57506000601154115b156134765761340960646133fb60115488613b6990919063ffffffff16565b613b7f90919063ffffffff16565b90506011546013548261341c91906144fa565b6134269190614583565b6015600082825461343791906143d7565b925050819055506011546012548261344f91906144fa565b6134599190614583565b6014600082825461346a91906143d7565b92505081905550613568565b601960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156134d157506000600e54115b15613567576134fe60646134f0600e5488613b6990919063ffffffff16565b613b7f90919063ffffffff16565b9050600e546010548261351191906144fa565b61351b9190614583565b6015600082825461352c91906143d7565b92505081905550600e54600f548261354491906144fa565b61354e9190614583565b6014600082825461355f91906143d7565b925050819055505b5b600081111561357d5761357c873083613708565b5b808561358991906152d4565b94505b613597878787613708565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613778576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161376f90614e3f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156137e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137df90614ed1565b60405180910390fd5b6137f3838383613b95565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613879576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138709061537a565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461390c91906143d7565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516139709190614085565b60405180910390a3613983848484613b9a565b50505050565b6000613994306114ee565b905060006015546014546139a891906143d7565b90506000808314156139bc57505050613b67565b6014600b546139cb91906144fa565b8311156139e4576014600b546139e191906144fa565b92505b60004790506139f284613b9f565b6000613a078247613ddc90919063ffffffff16565b90506000613a3285613a2460155485613b6990919063ffffffff16565b613b7f90919063ffffffff16565b905060006014819055506000601581905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051613a8a906153cb565b60006040518083038185875af1925050503d8060008114613ac7576040519150601f19603f3d011682016040523d82523d6000602084013e613acc565b606091505b505080945050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613b18906153cb565b60006040518083038185875af1925050503d8060008114613b55576040519150601f19603f3d011682016040523d82523d6000602084013e613b5a565b606091505b5050809450505050505050505b565b60008183613b7791906144fa565b905092915050565b60008183613b8d9190614583565b905092915050565b505050565b505050565b6000600267ffffffffffffffff811115613bbc57613bbb6153e0565b5b604051908082528060200260200182016040528015613bea5781602001602082028036833780820191505090505b5090503081600081518110613c0257613c0161540f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613ca7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ccb9190615453565b81600181518110613cdf57613cde61540f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613d44307f00000000000000000000000000000000000000000000000000000000000000008461263e565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613da6959493929190615579565b600060405180830381600087803b158015613dc057600080fd5b505af1158015613dd4573d6000803e3d6000fd5b505050505050565b60008183613dea91906152d4565b905092915050565b600080fd5b6000819050919050565b613e0a81613df7565b8114613e1557600080fd5b50565b600081359050613e2781613e01565b92915050565b60008060408385031215613e4457613e43613df2565b5b6000613e5285828601613e18565b9250506020613e6385828601613e18565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613ea7578082015181840152602081019050613e8c565b83811115613eb6576000848401525b50505050565b6000601f19601f8301169050919050565b6000613ed882613e6d565b613ee28185613e78565b9350613ef2818560208601613e89565b613efb81613ebc565b840191505092915050565b60006020820190508181036000830152613f208184613ecd565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613f5382613f28565b9050919050565b613f6381613f48565b8114613f6e57600080fd5b50565b600081359050613f8081613f5a565b92915050565b60008060408385031215613f9d57613f9c613df2565b5b6000613fab85828601613f71565b9250506020613fbc85828601613e18565b9150509250929050565b60008115159050919050565b613fdb81613fc6565b82525050565b6000602082019050613ff66000830184613fd2565b92915050565b6000819050919050565b600061402161401c61401784613f28565b613ffc565b613f28565b9050919050565b600061403382614006565b9050919050565b600061404582614028565b9050919050565b6140558161403a565b82525050565b6000602082019050614070600083018461404c565b92915050565b61407f81613df7565b82525050565b600060208201905061409a6000830184614076565b92915050565b6000602082840312156140b6576140b5613df2565b5b60006140c484828501613e18565b91505092915050565b6000806000606084860312156140e6576140e5613df2565b5b60006140f486828701613f71565b935050602061410586828701613f71565b925050604061411686828701613e18565b9150509250925092565b61412981613f48565b82525050565b60006020820190506141446000830184614120565b92915050565b600060ff82169050919050565b6141608161414a565b82525050565b600060208201905061417b6000830184614157565b92915050565b60006020828403121561419757614196613df2565b5b60006141a584828501613f71565b91505092915050565b6141b781613fc6565b81146141c257600080fd5b50565b6000813590506141d4816141ae565b92915050565b600080604083850312156141f1576141f0613df2565b5b60006141ff85828601613f71565b9250506020614210858286016141c5565b9150509250929050565b6000602082840312156142305761422f613df2565b5b600061423e848285016141c5565b91505092915050565b6142508161414a565b811461425b57600080fd5b50565b60008135905061426d81614247565b92915050565b6000819050919050565b61428681614273565b811461429157600080fd5b50565b6000813590506142a38161427d565b92915050565b6000806000606084860312156142c2576142c1613df2565b5b60006142d08682870161425e565b93505060206142e186828701614294565b92505060406142f286828701614294565b9150509250925092565b6000806040838503121561431357614312613df2565b5b600061432185828601613f71565b925050602061433285828601613f71565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614372602083613e78565b915061437d8261433c565b602082019050919050565b600060208201905081810360008301526143a181614365565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006143e282613df7565b91506143ed83613df7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614422576144216143a8565b5b828201905092915050565b7f4d757374206b656570206665657320617420323525206f72206c657373000000600082015250565b6000614463601d83613e78565b915061446e8261442d565b602082019050919050565b6000602082019050818103600083015261449281614456565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806144e057607f821691505b602082108114156144f4576144f3614499565b5b50919050565b600061450582613df7565b915061451083613df7565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614549576145486143a8565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061458e82613df7565b915061459983613df7565b9250826145a9576145a8614554565b5b828204905092915050565b7f43616e6e6f7420736574206d6178696d756d5478206c6f776572207468616e2060008201527f302e312500000000000000000000000000000000000000000000000000000000602082015250565b6000614610602483613e78565b915061461b826145b4565b604082019050919050565b6000602082019050818103600083015261463f81614603565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006146a2602883613e78565b91506146ad82614646565b604082019050919050565b600060208201905081810360008301526146d181614695565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614734603983613e78565b915061473f826146d8565b604082019050919050565b6000602082019050818103600083015261476381614727565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006147c6602583613e78565b91506147d18261476a565b604082019050919050565b600060208201905081810360008301526147f5816147b9565b9050919050565b61480581614273565b82525050565b600060a08201905061482060008301886147fc565b61482d60208301876147fc565b61483a60408301866147fc565b6148476060830185614076565b6148546080830184614120565b9695505050505050565b600060608201905061487360008301866147fc565b61488060208301856147fc565b61488d6040830184614076565b949350505050565b600081905092915050565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b60006148d6600283614895565b91506148e1826148a0565b600282019050919050565b6000819050919050565b61490761490282614273565b6148ec565b82525050565b6000614918826148c9565b915061492482856148f6565b60208201915061493482846148f6565b6020820191508190509392505050565b600060808201905061495960008301876147fc565b6149666020830186614157565b61497360408301856147fc565b61498060608301846147fc565b95945050505050565b7f496e76616c6964207369676e6174757265000000000000000000000000000000600082015250565b60006149bf601183613e78565b91506149ca82614989565b602082019050919050565b600060208201905081810360008301526149ee816149b2565b9050919050565b7f496e76616c696420616e746920647261696e6572000000000000000000000000600082015250565b6000614a2b601483613e78565b9150614a36826149f5565b602082019050919050565b60006020820190508181036000830152614a5a81614a1e565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614abd602483613e78565b9150614ac882614a61565b604082019050919050565b60006020820190508181036000830152614aec81614ab0565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614b4f603583613e78565b9150614b5a82614af3565b604082019050919050565b60006020820190508181036000830152614b7e81614b42565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614be1603483613e78565b9150614bec82614b85565b604082019050919050565b60006020820190508181036000830152614c1081614bd4565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614c73602683613e78565b9150614c7e82614c17565b604082019050919050565b60006020820190508181036000830152614ca281614c66565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614d05602483613e78565b9150614d1082614ca9565b604082019050919050565b60006020820190508181036000830152614d3481614cf8565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614d97602283613e78565b9150614da282614d3b565b604082019050919050565b60006020820190508181036000830152614dc681614d8a565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614e29602583613e78565b9150614e3482614dcd565b604082019050919050565b60006020820190508181036000830152614e5881614e1c565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614ebb602383613e78565b9150614ec682614e5f565b604082019050919050565b60006020820190508181036000830152614eea81614eae565b9050919050565b7f5b66726f6d5d20626c61636b206c697374000000000000000000000000000000600082015250565b6000614f27601183613e78565b9150614f3282614ef1565b602082019050919050565b60006020820190508181036000830152614f5681614f1a565b9050919050565b7f5b746f5d20626c61636b206c6973740000000000000000000000000000000000600082015250565b6000614f93600f83613e78565b9150614f9e82614f5d565b602082019050919050565b60006020820190508181036000830152614fc281614f86565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614fff601683613e78565b915061500a82614fc9565b602082019050919050565b6000602082019050818103600083015261502e81614ff2565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d6178696d756d54782e00000000000000000000000000000000000000000000602082015250565b6000615091602a83613e78565b915061509c82615035565b604082019050919050565b600060208201905081810360008301526150c081615084565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006150fd601383613e78565b9150615108826150c7565b602082019050919050565b6000602082019050818103600083015261512c816150f0565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d6178696d756d54782e000000000000000000000000000000000000000000602082015250565b600061518f602b83613e78565b915061519a82615133565b604082019050919050565b600060208201905081810360008301526151be81615182565b9050919050565b6000815190506151d4816141ae565b92915050565b6000602082840312156151f0576151ef613df2565b5b60006151fe848285016151c5565b91505092915050565b600060c08201905061521c6000830189614120565b6152296020830188614120565b6152366040830187614120565b6152436060830186614076565b6152506080830185614076565b61525d60a0830184614076565b979650505050505050565b7f416e746920447261696e657220456e61626c6564000000000000000000000000600082015250565b600061529e601483613e78565b91506152a982615268565b602082019050919050565b600060208201905081810360008301526152cd81615291565b9050919050565b60006152df82613df7565b91506152ea83613df7565b9250828210156152fd576152fc6143a8565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000615364602683613e78565b915061536f82615308565b604082019050919050565b6000602082019050818103600083015261539381615357565b9050919050565b600081905092915050565b50565b60006153b560008361539a565b91506153c0826153a5565b600082019050919050565b60006153d6826153a8565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061544d81613f5a565b92915050565b60006020828403121561546957615468613df2565b5b60006154778482850161543e565b91505092915050565b6000819050919050565b60006154a56154a061549b84615480565b613ffc565b613df7565b9050919050565b6154b58161548a565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6154f081613f48565b82525050565b600061550283836154e7565b60208301905092915050565b6000602082019050919050565b6000615526826154bb565b61553081856154c6565b935061553b836154d7565b8060005b8381101561556c57815161555388826154f6565b975061555e8361550e565b92505060018101905061553f565b5085935050505092915050565b600060a08201905061558e6000830188614076565b61559b60208301876154ac565b81810360408301526155ad818661551b565b90506155bc6060830185614120565b6155c96080830184614076565b969550505050505056fea2646970667358221220fb1195dda1f8d30883745452545d69f3e089a074e1849ba963fe7a27d0228f6764736f6c634300080a0033

Deployed Bytecode

0x60806040526004361061031e5760003560e01c80638a8c523c116101ab578063a90eab8c116100f7578063c18bc19511610095578063dd62ed3e1161006f578063dd62ed3e14610bd7578063e2f4560514610c14578063f2fde38b14610c3f578063f8b45b0514610c6857610325565b8063c18bc19514610b46578063d257b34f14610b6f578063d85ba06314610bac57610325565b8063b62496f5116100d1578063b62496f514610a8c578063bae14e1d14610ac9578063bbc0c74214610af2578063c024666814610b1d57610325565b8063a90eab8c14610a0d578063ac90547914610a36578063ad6312f214610a6157610325565b80639a7a23d611610164578063a0d82dc51161013e578063a0d82dc51461093d578063a457c2d714610968578063a742d78c146109a5578063a9059cbb146109d057610325565b80639a7a23d6146108be5780639c3b4fdc146108e75780639fccce321461091257610325565b80638a8c523c146107d45780638afcb2f0146107eb5780638da5cb5b14610814578063921369131461083f578063924de9b71461086a57806395d89b411461089357610325565b806349bd5a5e1161026a5780636ddd171311610223578063737ae25f116101fd578063737ae25f14610718578063751039fc14610755578063796c5e77146107805780637bce5a04146107a957610325565b80636ddd17131461069957806370a08231146106c4578063715018a61461070157610325565b806349bd5a5e146105895780634a62bb65146105b45780634fbee193146105df57806366ca9b831461061c57806368092bd9146106455780636a486a8e1461066e57610325565b8063203e727e116102d7578063313ce567116102b1578063313ce567146104cd57806337c2810f146104f8578063395093511461052357806348a352701461056057610325565b8063203e727e1461043c57806323b872dd1461046557806327c8f835146104a257610325565b806302dbd8f81461032a57806306fdde0314610353578063095ea7b31461037e5780631694505e146103bb57806318160ddd146103e65780631f3fed8f1461041157610325565b3661032557005b600080fd5b34801561033657600080fd5b50610351600480360381019061034c9190613e2d565b610c93565b005b34801561035f57600080fd5b50610368610d7d565b6040516103759190613f06565b60405180910390f35b34801561038a57600080fd5b506103a560048036038101906103a09190613f86565b610e0f565b6040516103b29190613fe1565b60405180910390f35b3480156103c757600080fd5b506103d0610e2d565b6040516103dd919061405b565b60405180910390f35b3480156103f257600080fd5b506103fb610e51565b6040516104089190614085565b60405180910390f35b34801561041d57600080fd5b50610426610e5b565b6040516104339190614085565b60405180910390f35b34801561044857600080fd5b50610463600480360381019061045e91906140a0565b610e61565b005b34801561047157600080fd5b5061048c600480360381019061048791906140cd565b610f70565b6040516104999190613fe1565b60405180910390f35b3480156104ae57600080fd5b506104b7611068565b6040516104c4919061412f565b60405180910390f35b3480156104d957600080fd5b506104e261106e565b6040516104ef9190614166565b60405180910390f35b34801561050457600080fd5b5061050d611077565b60405161051a919061412f565b60405180910390f35b34801561052f57600080fd5b5061054a60048036038101906105459190613f86565b61109d565b6040516105579190613fe1565b60405180910390f35b34801561056c57600080fd5b5061058760048036038101906105829190614181565b611149565b005b34801561059557600080fd5b5061059e611285565b6040516105ab919061412f565b60405180910390f35b3480156105c057600080fd5b506105c96112ab565b6040516105d69190613fe1565b60405180910390f35b3480156105eb57600080fd5b5061060660048036038101906106019190614181565b6112be565b6040516106139190613fe1565b60405180910390f35b34801561062857600080fd5b50610643600480360381019061063e9190613e2d565b611314565b005b34801561065157600080fd5b5061066c600480360381019061066791906141da565b6113fe565b005b34801561067a57600080fd5b506106836114d5565b6040516106909190614085565b60405180910390f35b3480156106a557600080fd5b506106ae6114db565b6040516106bb9190613fe1565b60405180910390f35b3480156106d057600080fd5b506106eb60048036038101906106e69190614181565b6114ee565b6040516106f89190614085565b60405180910390f35b34801561070d57600080fd5b50610716611536565b005b34801561072457600080fd5b5061073f600480360381019061073a9190614181565b6115be565b60405161074c9190613fe1565b60405180910390f35b34801561076157600080fd5b5061076a6115de565b6040516107779190613fe1565b60405180910390f35b34801561078c57600080fd5b506107a760048036038101906107a29190614181565b61167e565b005b3480156107b557600080fd5b506107be6117ba565b6040516107cb9190614085565b60405180910390f35b3480156107e057600080fd5b506107e96117c0565b005b3480156107f757600080fd5b50610812600480360381019061080d91906141da565b611874565b005b34801561082057600080fd5b5061082961194b565b604051610836919061412f565b60405180910390f35b34801561084b57600080fd5b50610854611975565b6040516108619190614085565b60405180910390f35b34801561087657600080fd5b50610891600480360381019061088c919061421a565b61197b565b005b34801561089f57600080fd5b506108a8611a14565b6040516108b59190613f06565b60405180910390f35b3480156108ca57600080fd5b506108e560048036038101906108e091906141da565b611aa6565b005b3480156108f357600080fd5b506108fc611bc1565b6040516109099190614085565b60405180910390f35b34801561091e57600080fd5b50610927611bc7565b6040516109349190614085565b60405180910390f35b34801561094957600080fd5b50610952611bcd565b60405161095f9190614085565b60405180910390f35b34801561097457600080fd5b5061098f600480360381019061098a9190613f86565b611bd3565b60405161099c9190613fe1565b60405180910390f35b3480156109b157600080fd5b506109ba611cbe565b6040516109c7919061412f565b60405180910390f35b3480156109dc57600080fd5b506109f760048036038101906109f29190613f86565b611ce4565b604051610a049190613fe1565b60405180910390f35b348015610a1957600080fd5b50610a346004803603810190610a2f91906142a9565b611d02565b005b348015610a4257600080fd5b50610a4b611f8d565b604051610a589190614085565b60405180910390f35b348015610a6d57600080fd5b50610a76611f93565b604051610a83919061412f565b60405180910390f35b348015610a9857600080fd5b50610ab36004803603810190610aae9190614181565b611fb9565b604051610ac09190613fe1565b60405180910390f35b348015610ad557600080fd5b50610af06004803603810190610aeb9190614181565b611fd9565b005b348015610afe57600080fd5b50610b07612109565b604051610b149190613fe1565b60405180910390f35b348015610b2957600080fd5b50610b446004803603810190610b3f91906141da565b61211c565b005b348015610b5257600080fd5b50610b6d6004803603810190610b6891906140a0565b612241565b005b348015610b7b57600080fd5b50610b966004803603810190610b9191906140a0565b612350565b604051610ba39190613fe1565b60405180910390f35b348015610bb857600080fd5b50610bc16124a5565b604051610bce9190614085565b60405180910390f35b348015610be357600080fd5b50610bfe6004803603810190610bf991906142fc565b6124ab565b604051610c0b9190614085565b60405180910390f35b348015610c2057600080fd5b50610c29612532565b604051610c369190614085565b60405180910390f35b348015610c4b57600080fd5b50610c666004803603810190610c619190614181565b612538565b005b348015610c7457600080fd5b50610c7d612630565b604051610c8a9190614085565b60405180910390f35b610c9b612636565b73ffffffffffffffffffffffffffffffffffffffff16610cb961194b565b73ffffffffffffffffffffffffffffffffffffffff1614610d0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0690614388565b60405180910390fd5b8160128190555080601381905550601354601254610d2d91906143d7565b60118190555060196011541115610d79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7090614479565b60405180910390fd5b5050565b606060038054610d8c906144c8565b80601f0160208091040260200160405190810160405280929190818152602001828054610db8906144c8565b8015610e055780601f10610dda57610100808354040283529160200191610e05565b820191906000526020600020905b815481529060010190602001808311610de857829003601f168201915b5050505050905090565b6000610e23610e1c612636565b848461263e565b6001905092915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b60145481565b610e69612636565b73ffffffffffffffffffffffffffffffffffffffff16610e8761194b565b73ffffffffffffffffffffffffffffffffffffffff1614610edd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed490614388565b60405180910390fd5b670de0b6b3a76400006103e86001610ef3610e51565b610efd91906144fa565b610f079190614583565b610f119190614583565b811015610f53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4a90614626565b60405180910390fd5b670de0b6b3a764000081610f6791906144fa565b600a8190555050565b6000610f7d848484612809565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610fc8612636565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611048576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103f906146b8565b60405180910390fd5b61105c85611054612636565b85840361263e565b60019150509392505050565b61dead81565b60006012905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061113f6110aa612636565b8484600160006110b8612636565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461113a91906143d7565b61263e565b6001905092915050565b611151612636565b73ffffffffffffffffffffffffffffffffffffffff1661116f61194b565b73ffffffffffffffffffffffffffffffffffffffff16146111c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111bc90614388565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fe1b4f3df05afe7f97a8e27608750b4b17d813b91204b3d85d1adff28f56922b360405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d60009054906101000a900460ff1681565b6000601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61131c612636565b73ffffffffffffffffffffffffffffffffffffffff1661133a61194b565b73ffffffffffffffffffffffffffffffffffffffff1614611390576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138790614388565b60405180910390fd5b81600f8190555080601081905550601054600f546113ae91906143d7565b600e819055506019600e5411156113fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f190614479565b60405180910390fd5b5050565b611406612636565b73ffffffffffffffffffffffffffffffffffffffff1661142461194b565b73ffffffffffffffffffffffffffffffffffffffff161461147a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147190614388565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60115481565b600d60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61153e612636565b73ffffffffffffffffffffffffffffffffffffffff1661155c61194b565b73ffffffffffffffffffffffffffffffffffffffff16146115b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a990614388565b60405180910390fd5b6115bc60006135a1565b565b60186020528060005260406000206000915054906101000a900460ff1681565b60006115e8612636565b73ffffffffffffffffffffffffffffffffffffffff1661160661194b565b73ffffffffffffffffffffffffffffffffffffffff161461165c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165390614388565b60405180910390fd5b6000600d60006101000a81548160ff0219169083151502179055506001905090565b611686612636565b73ffffffffffffffffffffffffffffffffffffffff166116a461194b565b73ffffffffffffffffffffffffffffffffffffffff16146116fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f190614388565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f89f8df860d6208e3f7288c1f1002c8321d74e3be4fb9bf2a78255bffe720867360405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f5481565b6117c8612636565b73ffffffffffffffffffffffffffffffffffffffff166117e661194b565b73ffffffffffffffffffffffffffffffffffffffff161461183c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183390614388565b60405180910390fd5b6001600d60016101000a81548160ff0219169083151502179055506001600d60026101000a81548160ff021916908315150217905550565b61187c612636565b73ffffffffffffffffffffffffffffffffffffffff1661189a61194b565b73ffffffffffffffffffffffffffffffffffffffff16146118f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e790614388565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60125481565b611983612636565b73ffffffffffffffffffffffffffffffffffffffff166119a161194b565b73ffffffffffffffffffffffffffffffffffffffff16146119f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ee90614388565b60405180910390fd5b80600d60026101000a81548160ff02191690831515021790555050565b606060048054611a23906144c8565b80601f0160208091040260200160405190810160405280929190818152602001828054611a4f906144c8565b8015611a9c5780601f10611a7157610100808354040283529160200191611a9c565b820191906000526020600020905b815481529060010190602001808311611a7f57829003601f168201915b5050505050905090565b611aae612636565b73ffffffffffffffffffffffffffffffffffffffff16611acc61194b565b73ffffffffffffffffffffffffffffffffffffffff1614611b22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1990614388565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611baa9061474a565b60405180910390fd5b611bbd8282613667565b5050565b60105481565b60155481565b60135481565b60008060016000611be2612636565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611c9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c96906147dc565b60405180910390fd5b611cb3611caa612636565b8585840361263e565b600191505092915050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611cf8611cf1612636565b8484612809565b6001905092915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6040518060400160405280600d81526020017f54726164696e6720546f6b656e00000000000000000000000000000000000000815250805190602001206040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250805190602001204630604051602001611db595949392919061480b565b60405160208183030381529060405280519060200120905060007f7dfdbf06c6260804b81338506aa4a709bd9f04b68ca0d2d054b8627926c90ae46040518060400160405280600e81526020017f456e61626c652054726164696e67000000000000000000000000000000000000815250805190602001206000604051602001611e419392919061485e565b60405160208183030381529060405280519060200120905060008282604051602001611e6e92919061490d565b604051602081830303815290604052805190602001209050600060018288888860405160008152602001604052604051611eab9493929190614944565b6020604051602081039080840390855afa158015611ecd573d6000803e3d6000fd5b505050602060405103519050611ee161194b565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611f4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f45906149d5565b60405180910390fd5b6001600d60016101000a81548160ff0219169083151502179055506001600d60026101000a81548160ff02191690831515021790555050505050505050565b600a5481565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60196020528060005260406000206000915054906101000a900460ff1681565b611fe1612636565b73ffffffffffffffffffffffffffffffffffffffff16611fff61194b565b73ffffffffffffffffffffffffffffffffffffffff1614612055576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204c90614388565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156120c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120bc90614a41565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600d60019054906101000a900460ff1681565b612124612636565b73ffffffffffffffffffffffffffffffffffffffff1661214261194b565b73ffffffffffffffffffffffffffffffffffffffff1614612198576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218f90614388565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516122359190613fe1565b60405180910390a25050565b612249612636565b73ffffffffffffffffffffffffffffffffffffffff1661226761194b565b73ffffffffffffffffffffffffffffffffffffffff16146122bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b490614388565b60405180910390fd5b670de0b6b3a76400006103e860056122d3610e51565b6122dd91906144fa565b6122e79190614583565b6122f19190614583565b811015612333576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232a90614ad3565b60405180910390fd5b670de0b6b3a76400008161234791906144fa565b600c8190555050565b600061235a612636565b73ffffffffffffffffffffffffffffffffffffffff1661237861194b565b73ffffffffffffffffffffffffffffffffffffffff16146123ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c590614388565b60405180910390fd5b620186a060016123dc610e51565b6123e691906144fa565b6123f09190614583565b821015612432576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242990614b65565b60405180910390fd5b6103e8600561243f610e51565b61244991906144fa565b6124539190614583565b821115612495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248c90614bf7565b60405180910390fd5b81600b8190555060019050919050565b600e5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600b5481565b612540612636565b73ffffffffffffffffffffffffffffffffffffffff1661255e61194b565b73ffffffffffffffffffffffffffffffffffffffff16146125b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ab90614388565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612624576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261b90614c89565b60405180910390fd5b61262d816135a1565b50565b600c5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a590614d1b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561271e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271590614dad565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516127fc9190614085565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612879576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287090614e3f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e090614ed1565b60405180910390fd5b601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612976576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296d90614f3d565b60405180910390fd5b601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612a03576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129fa90614fa9565b60405180910390fd5b6000811415612a1d57612a1883836000613708565b61359c565b600d60009054906101000a900460ff1615612f1857612a3a61194b565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612aa85750612a7861194b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612ae15750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b1b575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b345750600760149054906101000a900460ff16155b15612f1757600d60019054906101000a900460ff16612c2e57601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612bee5750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612c2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2490615015565b60405180910390fd5b5b601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612cd15750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d7857600a54811115612d1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d12906150a7565b60405180910390fd5b600c54612d27836114ee565b82612d3291906143d7565b1115612d73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d6a90615113565b60405180910390fd5b612f16565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e1b5750601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e6a57600a54811115612e65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e5c906151a5565b60405180910390fd5b612f15565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612f1457600c54612ec7836114ee565b82612ed291906143d7565b1115612f13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f0a90615113565b60405180910390fd5b5b5b5b5b5b600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415801561300f5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639015d371306040518263ffffffff1660e01b8152600401612fcd919061412f565b602060405180830381865afa158015612fea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061300e91906151da565b5b1561312a576000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a20527fc8585600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600c54600a54600b546040518763ffffffff1660e01b81526004016130a396959493929190615207565b6020604051808303816000875af11580156130c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130e691906151da565b905080613128576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161311f906152b4565b60405180910390fd5b505b6000613135306114ee565b90506000600b54821015905080801561315a5750600d60029054906101000a900460ff165b80156131735750600760149054906101000a900460ff16155b80156131c95750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561321f5750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156132755750601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156132b9576001600760146101000a81548160ff02191690831515021790555061329d613989565b6000600760146101000a81548160ff0219169083151502179055505b6000600760149054906101000a900460ff16159050601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061336f5750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561337957600090505b6000811561358c57601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156133dc57506000601154115b156134765761340960646133fb60115488613b6990919063ffffffff16565b613b7f90919063ffffffff16565b90506011546013548261341c91906144fa565b6134269190614583565b6015600082825461343791906143d7565b925050819055506011546012548261344f91906144fa565b6134599190614583565b6014600082825461346a91906143d7565b92505081905550613568565b601960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156134d157506000600e54115b15613567576134fe60646134f0600e5488613b6990919063ffffffff16565b613b7f90919063ffffffff16565b9050600e546010548261351191906144fa565b61351b9190614583565b6015600082825461352c91906143d7565b92505081905550600e54600f548261354491906144fa565b61354e9190614583565b6014600082825461355f91906143d7565b925050819055505b5b600081111561357d5761357c873083613708565b5b808561358991906152d4565b94505b613597878787613708565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613778576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161376f90614e3f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156137e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137df90614ed1565b60405180910390fd5b6137f3838383613b95565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613879576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138709061537a565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461390c91906143d7565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516139709190614085565b60405180910390a3613983848484613b9a565b50505050565b6000613994306114ee565b905060006015546014546139a891906143d7565b90506000808314156139bc57505050613b67565b6014600b546139cb91906144fa565b8311156139e4576014600b546139e191906144fa565b92505b60004790506139f284613b9f565b6000613a078247613ddc90919063ffffffff16565b90506000613a3285613a2460155485613b6990919063ffffffff16565b613b7f90919063ffffffff16565b905060006014819055506000601581905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051613a8a906153cb565b60006040518083038185875af1925050503d8060008114613ac7576040519150601f19603f3d011682016040523d82523d6000602084013e613acc565b606091505b505080945050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613b18906153cb565b60006040518083038185875af1925050503d8060008114613b55576040519150601f19603f3d011682016040523d82523d6000602084013e613b5a565b606091505b5050809450505050505050505b565b60008183613b7791906144fa565b905092915050565b60008183613b8d9190614583565b905092915050565b505050565b505050565b6000600267ffffffffffffffff811115613bbc57613bbb6153e0565b5b604051908082528060200260200182016040528015613bea5781602001602082028036833780820191505090505b5090503081600081518110613c0257613c0161540f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613ca7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ccb9190615453565b81600181518110613cdf57613cde61540f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613d44307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461263e565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613da6959493929190615579565b600060405180830381600087803b158015613dc057600080fd5b505af1158015613dd4573d6000803e3d6000fd5b505050505050565b60008183613dea91906152d4565b905092915050565b600080fd5b6000819050919050565b613e0a81613df7565b8114613e1557600080fd5b50565b600081359050613e2781613e01565b92915050565b60008060408385031215613e4457613e43613df2565b5b6000613e5285828601613e18565b9250506020613e6385828601613e18565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613ea7578082015181840152602081019050613e8c565b83811115613eb6576000848401525b50505050565b6000601f19601f8301169050919050565b6000613ed882613e6d565b613ee28185613e78565b9350613ef2818560208601613e89565b613efb81613ebc565b840191505092915050565b60006020820190508181036000830152613f208184613ecd565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613f5382613f28565b9050919050565b613f6381613f48565b8114613f6e57600080fd5b50565b600081359050613f8081613f5a565b92915050565b60008060408385031215613f9d57613f9c613df2565b5b6000613fab85828601613f71565b9250506020613fbc85828601613e18565b9150509250929050565b60008115159050919050565b613fdb81613fc6565b82525050565b6000602082019050613ff66000830184613fd2565b92915050565b6000819050919050565b600061402161401c61401784613f28565b613ffc565b613f28565b9050919050565b600061403382614006565b9050919050565b600061404582614028565b9050919050565b6140558161403a565b82525050565b6000602082019050614070600083018461404c565b92915050565b61407f81613df7565b82525050565b600060208201905061409a6000830184614076565b92915050565b6000602082840312156140b6576140b5613df2565b5b60006140c484828501613e18565b91505092915050565b6000806000606084860312156140e6576140e5613df2565b5b60006140f486828701613f71565b935050602061410586828701613f71565b925050604061411686828701613e18565b9150509250925092565b61412981613f48565b82525050565b60006020820190506141446000830184614120565b92915050565b600060ff82169050919050565b6141608161414a565b82525050565b600060208201905061417b6000830184614157565b92915050565b60006020828403121561419757614196613df2565b5b60006141a584828501613f71565b91505092915050565b6141b781613fc6565b81146141c257600080fd5b50565b6000813590506141d4816141ae565b92915050565b600080604083850312156141f1576141f0613df2565b5b60006141ff85828601613f71565b9250506020614210858286016141c5565b9150509250929050565b6000602082840312156142305761422f613df2565b5b600061423e848285016141c5565b91505092915050565b6142508161414a565b811461425b57600080fd5b50565b60008135905061426d81614247565b92915050565b6000819050919050565b61428681614273565b811461429157600080fd5b50565b6000813590506142a38161427d565b92915050565b6000806000606084860312156142c2576142c1613df2565b5b60006142d08682870161425e565b93505060206142e186828701614294565b92505060406142f286828701614294565b9150509250925092565b6000806040838503121561431357614312613df2565b5b600061432185828601613f71565b925050602061433285828601613f71565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614372602083613e78565b915061437d8261433c565b602082019050919050565b600060208201905081810360008301526143a181614365565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006143e282613df7565b91506143ed83613df7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614422576144216143a8565b5b828201905092915050565b7f4d757374206b656570206665657320617420323525206f72206c657373000000600082015250565b6000614463601d83613e78565b915061446e8261442d565b602082019050919050565b6000602082019050818103600083015261449281614456565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806144e057607f821691505b602082108114156144f4576144f3614499565b5b50919050565b600061450582613df7565b915061451083613df7565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614549576145486143a8565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061458e82613df7565b915061459983613df7565b9250826145a9576145a8614554565b5b828204905092915050565b7f43616e6e6f7420736574206d6178696d756d5478206c6f776572207468616e2060008201527f302e312500000000000000000000000000000000000000000000000000000000602082015250565b6000614610602483613e78565b915061461b826145b4565b604082019050919050565b6000602082019050818103600083015261463f81614603565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006146a2602883613e78565b91506146ad82614646565b604082019050919050565b600060208201905081810360008301526146d181614695565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614734603983613e78565b915061473f826146d8565b604082019050919050565b6000602082019050818103600083015261476381614727565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006147c6602583613e78565b91506147d18261476a565b604082019050919050565b600060208201905081810360008301526147f5816147b9565b9050919050565b61480581614273565b82525050565b600060a08201905061482060008301886147fc565b61482d60208301876147fc565b61483a60408301866147fc565b6148476060830185614076565b6148546080830184614120565b9695505050505050565b600060608201905061487360008301866147fc565b61488060208301856147fc565b61488d6040830184614076565b949350505050565b600081905092915050565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b60006148d6600283614895565b91506148e1826148a0565b600282019050919050565b6000819050919050565b61490761490282614273565b6148ec565b82525050565b6000614918826148c9565b915061492482856148f6565b60208201915061493482846148f6565b6020820191508190509392505050565b600060808201905061495960008301876147fc565b6149666020830186614157565b61497360408301856147fc565b61498060608301846147fc565b95945050505050565b7f496e76616c6964207369676e6174757265000000000000000000000000000000600082015250565b60006149bf601183613e78565b91506149ca82614989565b602082019050919050565b600060208201905081810360008301526149ee816149b2565b9050919050565b7f496e76616c696420616e746920647261696e6572000000000000000000000000600082015250565b6000614a2b601483613e78565b9150614a36826149f5565b602082019050919050565b60006020820190508181036000830152614a5a81614a1e565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614abd602483613e78565b9150614ac882614a61565b604082019050919050565b60006020820190508181036000830152614aec81614ab0565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614b4f603583613e78565b9150614b5a82614af3565b604082019050919050565b60006020820190508181036000830152614b7e81614b42565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614be1603483613e78565b9150614bec82614b85565b604082019050919050565b60006020820190508181036000830152614c1081614bd4565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614c73602683613e78565b9150614c7e82614c17565b604082019050919050565b60006020820190508181036000830152614ca281614c66565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614d05602483613e78565b9150614d1082614ca9565b604082019050919050565b60006020820190508181036000830152614d3481614cf8565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614d97602283613e78565b9150614da282614d3b565b604082019050919050565b60006020820190508181036000830152614dc681614d8a565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614e29602583613e78565b9150614e3482614dcd565b604082019050919050565b60006020820190508181036000830152614e5881614e1c565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614ebb602383613e78565b9150614ec682614e5f565b604082019050919050565b60006020820190508181036000830152614eea81614eae565b9050919050565b7f5b66726f6d5d20626c61636b206c697374000000000000000000000000000000600082015250565b6000614f27601183613e78565b9150614f3282614ef1565b602082019050919050565b60006020820190508181036000830152614f5681614f1a565b9050919050565b7f5b746f5d20626c61636b206c6973740000000000000000000000000000000000600082015250565b6000614f93600f83613e78565b9150614f9e82614f5d565b602082019050919050565b60006020820190508181036000830152614fc281614f86565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614fff601683613e78565b915061500a82614fc9565b602082019050919050565b6000602082019050818103600083015261502e81614ff2565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d6178696d756d54782e00000000000000000000000000000000000000000000602082015250565b6000615091602a83613e78565b915061509c82615035565b604082019050919050565b600060208201905081810360008301526150c081615084565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006150fd601383613e78565b9150615108826150c7565b602082019050919050565b6000602082019050818103600083015261512c816150f0565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d6178696d756d54782e000000000000000000000000000000000000000000602082015250565b600061518f602b83613e78565b915061519a82615133565b604082019050919050565b600060208201905081810360008301526151be81615182565b9050919050565b6000815190506151d4816141ae565b92915050565b6000602082840312156151f0576151ef613df2565b5b60006151fe848285016151c5565b91505092915050565b600060c08201905061521c6000830189614120565b6152296020830188614120565b6152366040830187614120565b6152436060830186614076565b6152506080830185614076565b61525d60a0830184614076565b979650505050505050565b7f416e746920447261696e657220456e61626c6564000000000000000000000000600082015250565b600061529e601483613e78565b91506152a982615268565b602082019050919050565b600060208201905081810360008301526152cd81615291565b9050919050565b60006152df82613df7565b91506152ea83613df7565b9250828210156152fd576152fc6143a8565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000615364602683613e78565b915061536f82615308565b604082019050919050565b6000602082019050818103600083015261539381615357565b9050919050565b600081905092915050565b50565b60006153b560008361539a565b91506153c0826153a5565b600082019050919050565b60006153d6826153a8565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061544d81613f5a565b92915050565b60006020828403121561546957615468613df2565b5b60006154778482850161543e565b91505092915050565b6000819050919050565b60006154a56154a061549b84615480565b613ffc565b613df7565b9050919050565b6154b58161548a565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6154f081613f48565b82525050565b600061550283836154e7565b60208301905092915050565b6000602082019050919050565b6000615526826154bb565b61553081856154c6565b935061553b836154d7565b8060005b8381101561556c57815161555388826154f6565b975061555e8361550e565b92505060018101905061553f565b5085935050505092915050565b600060a08201905061558e6000830188614076565b61559b60208301876154ac565b81810360408301526155ad818661551b565b90506155bc6060830185614120565b6155c96080830184614076565b969550505050505056fea2646970667358221220fb1195dda1f8d30883745452545d69f3e089a074e1849ba963fe7a27d0228f6764736f6c634300080a0033

Deployed Bytecode Sourcemap

15383:13447:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22211:318;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2819:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3733:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15459:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3140:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16162:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21012:253;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3910:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15552:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3039:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15612:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4410:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23360:129;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15517:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15831:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23497:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21892:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20150:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16055:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15911:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3256:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;941:103;;;;;;;;;;;;;:::i;:::-;;16349:52;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20316:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23235:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15985:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18960:112;;;;;;;;;;;;;:::i;:::-;;21537:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;718:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16090:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21784:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2927:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22727:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16022:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16202:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16128:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4633:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15677:17;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3391:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19080:1062;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15727:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15701:17;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16410:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18770:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15871:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22537:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21273:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20507:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15951:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3574:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15758:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1052:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15798:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22211:318;864:12;:10;:12::i;:::-;853:23;;:7;:5;:7::i;:::-;:23;;;845:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22349:13:::1;22330:16;:32;;;;22386:7;22373:10;:20;;;;22439:10;;22420:16;;:29;;;;:::i;:::-;22404:13;:45;;;;22485:2;22468:13;;:19;;22460:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;22211:318:::0;;:::o;2819:100::-;2873:13;2906:5;2899:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2819:100;:::o;3733:169::-;3816:4;3833:39;3842:12;:10;:12::i;:::-;3856:7;3865:6;3833:8;:39::i;:::-;3890:4;3883:11;;3733:169;;;;:::o;15459:51::-;;;:::o;3140:108::-;3201:7;3228:12;;3221:19;;3140:108;:::o;16162:33::-;;;;:::o;21012:253::-;864:12;:10;:12::i;:::-;853:23;;:7;:5;:7::i;:::-;:23;;;845:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21149:4:::1;21141;21136:1;21120:13;:11;:13::i;:::-;:17;;;;:::i;:::-;21119:26;;;;:::i;:::-;21118:35;;;;:::i;:::-;21108:6;:45;;21086:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;21250:6;21240;:17;;;;:::i;:::-;21228:9;:29;;;;21012:253:::0;:::o;3910:492::-;4050:4;4067:36;4077:6;4085:9;4096:6;4067:9;:36::i;:::-;4116:24;4143:11;:19;4155:6;4143:19;;;;;;;;;;;;;;;:33;4163:12;:10;:12::i;:::-;4143:33;;;;;;;;;;;;;;;;4116:60;;4215:6;4195:16;:26;;4187:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;4302:57;4311:6;4319:12;:10;:12::i;:::-;4352:6;4333:16;:25;4302:8;:57::i;:::-;4390:4;4383:11;;;3910:492;;;;;:::o;15552:53::-;15598:6;15552:53;:::o;3039:93::-;3097:5;3122:2;3115:9;;3039:93;:::o;15612:26::-;;;;;;;;;;;;;:::o;4410:215::-;4498:4;4515:80;4524:12;:10;:12::i;:::-;4538:7;4584:10;4547:11;:25;4559:12;:10;:12::i;:::-;4547:25;;;;;;;;;;;;;;;:34;4573:7;4547:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;4515:8;:80::i;:::-;4613:4;4606:11;;4410:215;;;;:::o;23360:129::-;864:12;:10;:12::i;:::-;853:23;;:7;:5;:7::i;:::-;:23;;;845:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23453:2:::1;;;;;;;;;;;23432:24;;23442:9;23432:24;;;;;;;;;;;;23472:9;23467:2;;:14;;;;;;;;;;;;;;;;;;23360:129:::0;:::o;15517:28::-;;;;;;;;;;;;;:::o;15831:33::-;;;;;;;;;;;;;:::o;23497:126::-;23563:4;23587:19;:28;23607:7;23587:28;;;;;;;;;;;;;;;;;;;;;;;;;23580:35;;23497:126;;;:::o;21892:311::-;864:12;:10;:12::i;:::-;853:23;;:7;:5;:7::i;:::-;:23;;;845:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22028:13:::1;22010:15;:31;;;;22064:7;22052:9;:19;;;;22115:9;;22097:15;;:27;;;;:::i;:::-;22082:12;:42;;;;22159:2;22143:12;;:18;;22135:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;21892:311:::0;;:::o;20150:114::-;864:12;:10;:12::i;:::-;853:23;;:7;:5;:7::i;:::-;:23;;;845:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20250:6:::1;20229:12;:18;20242:4;20229:18;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;20150:114:::0;;:::o;16055:28::-;;;;:::o;15911:31::-;;;;;;;;;;;;;:::o;3256:127::-;3330:7;3357:9;:18;3367:7;3357:18;;;;;;;;;;;;;;;;3350:25;;3256:127;;;:::o;941:103::-;864:12;:10;:12::i;:::-;853:23;;:7;:5;:7::i;:::-;:23;;;845:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1006:30:::1;1033:1;1006:18;:30::i;:::-;941:103::o:0;16349:52::-;;;;;;;;;;;;;;;;;;;;;;:::o;20316:121::-;20368:4;864:12;:10;:12::i;:::-;853:23;;:7;:5;:7::i;:::-;:23;;;845:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20402:5:::1;20385:14;;:22;;;;;;;;;;;;;;;;;;20425:4;20418:11;;20316:121:::0;:::o;23235:117::-;864:12;:10;:12::i;:::-;853:23;;:7;:5;:7::i;:::-;:23;;;845:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23320:2:::1;;;;;;;;;;;23303:20;;23313:5;23303:20;;;;;;;;;;;;23339:5;23334:2;;:10;;;;;;;;;;;;;;;;;;23235:117:::0;:::o;15985:30::-;;;;:::o;18960:112::-;864:12;:10;:12::i;:::-;853:23;;:7;:5;:7::i;:::-;:23;;;845:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19031:4:::1;19015:13;;:20;;;;;;;;;;;;;;;;;;19060:4;19046:11;;:18;;;;;;;;;;;;;;;;;;18960:112::o:0;21537:151::-;864:12;:10;:12::i;:::-;853:23;;:7;:5;:7::i;:::-;:23;;;845:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21676:4:::1;21645:20;:28;21666:6;21645:28;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;21537:151:::0;;:::o;718:87::-;764:7;791:6;;;;;;;;;;;784:13;;718:87;:::o;16090:31::-;;;;:::o;21784:100::-;864:12;:10;:12::i;:::-;853:23;;:7;:5;:7::i;:::-;:23;;;845:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21869:7:::1;21855:11;;:21;;;;;;;;;;;;;;;;;;21784:100:::0;:::o;2927:104::-;2983:13;3016:7;3009:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2927:104;:::o;22727:304::-;864:12;:10;:12::i;:::-;853:23;;:7;:5;:7::i;:::-;:23;;;845:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22871:13:::1;;;;;;;;;;;22863:21;;:4;:21;;;;22841:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;22982:41;23011:4;23017:5;22982:28;:41::i;:::-;22727:304:::0;;:::o;16022:24::-;;;;:::o;16202:27::-;;;;:::o;16128:25::-;;;;:::o;4633:413::-;4726:4;4743:24;4770:11;:25;4782:12;:10;:12::i;:::-;4770:25;;;;;;;;;;;;;;;:34;4796:7;4770:34;;;;;;;;;;;;;;;;4743:61;;4843:15;4823:16;:35;;4815:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;4936:67;4945:12;:10;:12::i;:::-;4959:7;4987:15;4968:16;:34;4936:8;:67::i;:::-;5034:4;5027:11;;;4633:413;;;;:::o;15677:17::-;;;;;;;;;;;;;:::o;3391:175::-;3477:4;3494:42;3504:12;:10;:12::i;:::-;3518:9;3529:6;3494:9;:42::i;:::-;3554:4;3547:11;;3391:175;;;;:::o;19080:1062::-;19164:18;19238:95;19362:22;;;;;;;;;;;;;;;;;19352:33;;;;;;19414:10;;;;;;;;;;;;;;;;;19404:21;;;;;;19444:13;19484:4;19209:295;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;19185:330;;;;;;19164:351;;19528:18;19602:49;19680:23;;;;;;;;;;;;;;;;;19670:34;;;;;;19731:1;19573:175;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;19549:210;;;;;;19528:231;;19772:14;19877:10;19906;19813:134;;;;;;;;;:::i;:::-;;;;;;;;;;;;;19789:169;;;;;;19772:186;;19971:14;19988:26;19998:6;20006:1;20009;20012;19988:26;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19971:43;;20043:7;:5;:7::i;:::-;20033:17;;:6;:17;;;20025:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;20101:4;20085:13;;:20;;;;;;;;;;;;;;;;;;20130:4;20116:11;;:18;;;;;;;;;;;;;;;;;;19153:989;;;;19080:1062;;;:::o;15727:24::-;;;;:::o;15701:17::-;;;;;;;;;;;;;:::o;16410:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;18770:182::-;864:12;:10;:12::i;:::-;853:23;;:7;:5;:7::i;:::-;:23;;;845:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18878:3:::1;18854:28;;:12;:28;;;;18846:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;18932:12;18918:11;;:26;;;;;;;;;;;;;;;;;;18770:182:::0;:::o;15871:33::-;;;;;;;;;;;;;:::o;22537:182::-;864:12;:10;:12::i;:::-;853:23;;:7;:5;:7::i;:::-;:23;;;845:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22653:8:::1;22622:19;:28;22642:7;22622:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;22693:7;22677:34;;;22702:8;22677:34;;;;;;:::i;:::-;;;;;;;;22537:182:::0;;:::o;21273:256::-;864:12;:10;:12::i;:::-;853:23;;:7;:5;:7::i;:::-;:23;;;845:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21413:4:::1;21405;21400:1;21384:13;:11;:13::i;:::-;:17;;;;:::i;:::-;21383:26;;;;:::i;:::-;21382:35;;;;:::i;:::-;21372:6;:45;;21350:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;21514:6;21504;:17;;;;:::i;:::-;21492:9;:29;;;;21273:256:::0;:::o;20507:497::-;20615:4;864:12;:10;:12::i;:::-;853:23;;:7;:5;:7::i;:::-;:23;;;845:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20694:6:::1;20689:1;20673:13;:11;:13::i;:::-;:17;;;;:::i;:::-;20672:28;;;;:::i;:::-;20659:9;:41;;20637:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;20849:4;20844:1;20828:13;:11;:13::i;:::-;:17;;;;:::i;:::-;20827:26;;;;:::i;:::-;20814:9;:39;;20792:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;20965:9;20944:18;:30;;;;20992:4;20985:11;;20507:497:::0;;;:::o;15951:27::-;;;;:::o;3574:151::-;3663:7;3690:11;:18;3702:5;3690:18;;;;;;;;;;;;;;;:27;3709:7;3690:27;;;;;;;;;;;;;;;;3683:34;;3574:151;;;;:::o;15758:33::-;;;;:::o;1052:201::-;864:12;:10;:12::i;:::-;853:23;;:7;:5;:7::i;:::-;:23;;;845:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1161:1:::1;1141:22;;:8;:22;;;;1133:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;1217:28;1236:8;1217:18;:28::i;:::-;1052:201:::0;:::o;15798:24::-;;;;:::o;264:98::-;317:7;344:10;337:17;;264:98;:::o;6801:380::-;6954:1;6937:19;;:5;:19;;;;6929:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7035:1;7016:21;;:7;:21;;;;7008:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7119:6;7089:11;:18;7101:5;7089:18;;;;;;;;;;;;;;;:27;7108:7;7089:27;;;;;;;;;;;;;;;:36;;;;7157:7;7141:32;;7150:5;7141:32;;;7166:6;7141:32;;;;;;:::i;:::-;;;;;;;;6801:380;;;:::o;23681:3566::-;23829:1;23813:18;;:4;:18;;;;23805:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23906:1;23892:16;;:2;:16;;;;23884:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;23968:12;:18;23981:4;23968:18;;;;;;;;;;;;;;;;;;;;;;;;;23967:19;23959:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;24028:12;:16;24041:2;24028:16;;;;;;;;;;;;;;;;;;;;;;;;;24027:17;24019:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;24091:1;24081:6;:11;24077:93;;;24109:28;24125:4;24131:2;24135:1;24109:15;:28::i;:::-;24152:7;;24077:93;24186:14;;;;;;;;;;;24182:1115;;;24229:7;:5;:7::i;:::-;24221:15;;:4;:15;;;;:49;;;;;24263:7;:5;:7::i;:::-;24257:13;;:2;:13;;;;24221:49;:86;;;;;24305:1;24291:16;;:2;:16;;;;24221:86;:128;;;;;24342:6;24328:21;;:2;:21;;;;24221:128;:158;;;;;24371:8;;;;;;;;;;;24370:9;24221:158;24217:1069;;;24405:13;;;;;;;;;;;24400:150;;24451:19;:25;24471:4;24451:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;24480:19;:23;24500:2;24480:23;;;;;;;;;;;;;;;;;;;;;;;;;24451:52;24443:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;24400:150;24602:25;:31;24628:4;24602:31;;;;;;;;;;;;;;;;;;;;;;;;;:60;;;;;24638:20;:24;24659:2;24638:24;;;;;;;;;;;;;;;;;;;;;;;;;24637:25;24602:60;24598:673;;;24705:9;;24695:6;:19;;24687:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;24818:9;;24801:13;24811:2;24801:9;:13::i;:::-;24792:6;:22;;;;:::i;:::-;:35;;24784:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24598:673;;;24927:25;:29;24953:2;24927:29;;;;;;;;;;;;;;;;;;;;;;;;;:60;;;;;24961:20;:26;24982:4;24961:26;;;;;;;;;;;;;;;;;;;;;;;;;24960:27;24927:60;24923:348;;;25030:9;;25020:6;:19;;25012:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;24923:348;;;25135:20;:24;25156:2;25135:24;;;;;;;;;;;;;;;;;;;;;;;;;25130:141;;25218:9;;25201:13;25211:2;25201:9;:13::i;:::-;25192:6;:22;;;;:::i;:::-;:35;;25184:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25130:141;24923:348;24598:673;24217:1069;24182:1115;25336:1;25313:25;;:11;;;;;;;;;;;:25;;;;:79;;;;;25355:11;;;;;;;;;;;25342:35;;;25386:4;25342:50;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25313:79;25309:285;;;25409:10;25435:11;;;;;;;;;;;25422:31;;;25454:4;25460:2;25472:13;;;;;;;;;;;25488:9;;25499;;25510:18;;25422:107;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25409:120;;25552:5;25544:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;25394:200;25309:285;25606:28;25637:24;25655:4;25637:9;:24::i;:::-;25606:55;;25672:12;25711:18;;25687:20;:42;;25672:57;;25744:7;:35;;;;;25768:11;;;;;;;;;;;25744:35;:61;;;;;25797:8;;;;;;;;;;;25796:9;25744:61;:110;;;;;25823:25;:31;25849:4;25823:31;;;;;;;;;;;;;;;;;;;;;;;;;25822:32;25744:110;:153;;;;;25872:19;:25;25892:4;25872:25;;;;;;;;;;;;;;;;;;;;;;;;;25871:26;25744:153;:194;;;;;25915:19;:23;25935:2;25915:23;;;;;;;;;;;;;;;;;;;;;;;;;25914:24;25744:194;25740:300;;;25968:4;25957:8;;:15;;;;;;;;;;;;;;;;;;25987:10;:8;:10::i;:::-;26023:5;26012:8;;:16;;;;;;;;;;;;;;;;;;25740:300;26052:12;26068:8;;;;;;;;;;;26067:9;26052:24;;26178:19;:25;26198:4;26178:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;26207:19;:23;26227:2;26207:23;;;;;;;;;;;;;;;;;;;;;;;;;26178:52;26174:100;;;26257:5;26247:15;;26174:100;26286:12;26391:7;26387:807;;;26443:25;:29;26469:2;26443:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;26492:1;26476:13;;:17;26443:50;26439:606;;;26521:34;26551:3;26521:25;26532:13;;26521:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;26514:41;;26612:13;;26598:10;;26591:4;:17;;;;:::i;:::-;26590:35;;;;:::i;:::-;26574:12;;:51;;;;;;;:::i;:::-;;;;;;;;26694:13;;26674:16;;26667:4;:23;;;;:::i;:::-;26666:41;;;;:::i;:::-;26644:18;;:63;;;;;;;:::i;:::-;;;;;;;;26439:606;;;26769:25;:31;26795:4;26769:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;26819:1;26804:12;;:16;26769:51;26765:280;;;26848:33;26877:3;26848:24;26859:12;;26848:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;26841:40;;26937:12;;26924:9;;26917:4;:16;;;;:::i;:::-;26916:33;;;;:::i;:::-;26900:12;;:49;;;;;;;:::i;:::-;;;;;;;;27017:12;;26998:15;;26991:4;:22;;;;:::i;:::-;26990:39;;;;:::i;:::-;26968:18;;:61;;;;;;;:::i;:::-;;;;;;;;26765:280;26439:606;27072:1;27065:4;:8;27061:91;;;27094:42;27110:4;27124;27131;27094:15;:42::i;:::-;27061:91;27178:4;27168:14;;;;;:::i;:::-;;;26387:807;27206:33;27222:4;27228:2;27232:6;27206:15;:33::i;:::-;23794:3453;;;;23681:3566;;;;:::o;1261:191::-;1335:16;1354:6;;;;;;;;;;;1335:25;;1380:8;1371:6;;:17;;;;;;;;;;;;;;;;;;1435:8;1404:40;;1425:8;1404:40;;;;;;;;;;;;1324:128;1261:191;:::o;23039:188::-;23156:5;23122:25;:31;23148:4;23122:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;23213:5;23179:40;;23207:4;23179:40;;;;;;;;;;;;23039:188;;:::o;5054:733::-;5212:1;5194:20;;:6;:20;;;;5186:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;5296:1;5275:23;;:9;:23;;;;5267:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;5351:47;5372:6;5380:9;5391:6;5351:20;:47::i;:::-;5411:21;5435:9;:17;5445:6;5435:17;;;;;;;;;;;;;;;;5411:41;;5488:6;5471:13;:23;;5463:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;5609:6;5593:13;:22;5573:9;:17;5583:6;5573:17;;;;;;;;;;;;;;;:42;;;;5661:6;5637:9;:20;5647:9;5637:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;5702:9;5685:35;;5694:6;5685:35;;;5713:6;5685:35;;;;;;:::i;:::-;;;;;;;;5733:46;5753:6;5761:9;5772:6;5733:19;:46::i;:::-;5175:612;5054:733;;;:::o;27967:860::-;28006:23;28032:24;28050:4;28032:9;:24::i;:::-;28006:50;;28067:25;28116:12;;28095:18;;:33;;;;:::i;:::-;28067:61;;28139:12;28187:1;28168:15;:20;28164:59;;;28205:7;;;;;28164:59;28278:2;28257:18;;:23;;;;:::i;:::-;28239:15;:41;28235:115;;;28336:2;28315:18;;:23;;;;:::i;:::-;28297:41;;28235:115;28362:25;28390:21;28362:49;;28422:33;28439:15;28422:16;:33::i;:::-;28468:18;28489:44;28515:17;28489:21;:25;;:44;;;;:::i;:::-;28468:65;;28544:17;28564:51;28597:17;28564:28;28579:12;;28564:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;28544:71;;28649:1;28628:18;:22;;;;28676:1;28661:12;:16;;;;28712:2;;;;;;;;;;;28704:16;;28728:9;28704:38;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28690:52;;;;;28775:2;;;;;;;;;;;28767:16;;28792:21;28767:52;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28753:66;;;;;27995:832;;;;;;27967:860;:::o;8807:98::-;8865:7;8896:1;8892;:5;;;;:::i;:::-;8885:12;;8807:98;;;;:::o;8913:::-;8971:7;9002:1;8998;:5;;;;:::i;:::-;8991:12;;8913:98;;;;:::o;7189:125::-;;;;:::o;7322:124::-;;;;:::o;27370:589::-;27496:21;27534:1;27520:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27496:40;;27565:4;27547;27552:1;27547:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;27591:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27581:4;27586:1;27581:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;27626:62;27643:4;27658:15;27676:11;27626:8;:62::i;:::-;27727:15;:66;;;27808:11;27834:1;27878:4;27905;27925:15;27727:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27425:534;27370:589;:::o;8701:98::-;8759:7;8790:1;8786;:5;;;;:::i;:::-;8779:12;;8701: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:118::-;6351:24;6369:5;6351:24;:::i;:::-;6346:3;6339:37;6264:118;;:::o;6388:222::-;6481:4;6519:2;6508:9;6504:18;6496:26;;6532:71;6600:1;6589:9;6585:17;6576:6;6532:71;:::i;:::-;6388:222;;;;:::o;6616:86::-;6651:7;6691:4;6684:5;6680:16;6669:27;;6616:86;;;:::o;6708:112::-;6791:22;6807:5;6791:22;:::i;:::-;6786:3;6779:35;6708:112;;:::o;6826:214::-;6915:4;6953:2;6942:9;6938:18;6930:26;;6966:67;7030:1;7019:9;7015:17;7006:6;6966:67;:::i;:::-;6826:214;;;;:::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:223::-;14014:34;14010:1;14002:6;13998:14;13991:58;14083:6;14078:2;14070:6;14066:15;14059:31;13874:223;:::o;14103:366::-;14245:3;14266:67;14330:2;14325:3;14266:67;:::i;:::-;14259:74;;14342:93;14431:3;14342:93;:::i;:::-;14460:2;14455:3;14451:12;14444:19;;14103:366;;;:::o;14475:419::-;14641:4;14679:2;14668:9;14664:18;14656:26;;14728:9;14722:4;14718:20;14714:1;14703:9;14699:17;14692:47;14756:131;14882:4;14756:131;:::i;:::-;14748:139;;14475:419;;;:::o;14900:227::-;15040:34;15036:1;15028:6;15024:14;15017:58;15109:10;15104:2;15096:6;15092:15;15085:35;14900:227;:::o;15133:366::-;15275:3;15296:67;15360:2;15355:3;15296:67;:::i;:::-;15289:74;;15372:93;15461:3;15372:93;:::i;:::-;15490:2;15485:3;15481:12;15474:19;;15133:366;;;:::o;15505:419::-;15671:4;15709:2;15698:9;15694:18;15686:26;;15758:9;15752:4;15748:20;15744:1;15733:9;15729:17;15722:47;15786:131;15912:4;15786:131;:::i;:::-;15778:139;;15505:419;;;:::o;15930:244::-;16070:34;16066:1;16058:6;16054:14;16047:58;16139:27;16134:2;16126:6;16122:15;16115:52;15930:244;:::o;16180:366::-;16322:3;16343:67;16407:2;16402:3;16343:67;:::i;:::-;16336:74;;16419:93;16508:3;16419:93;:::i;:::-;16537:2;16532:3;16528:12;16521:19;;16180:366;;;:::o;16552:419::-;16718:4;16756:2;16745:9;16741:18;16733:26;;16805:9;16799:4;16795:20;16791:1;16780:9;16776:17;16769:47;16833:131;16959:4;16833:131;:::i;:::-;16825:139;;16552:419;;;:::o;16977:224::-;17117:34;17113:1;17105:6;17101:14;17094:58;17186:7;17181:2;17173:6;17169:15;17162:32;16977:224;:::o;17207:366::-;17349:3;17370:67;17434:2;17429:3;17370:67;:::i;:::-;17363:74;;17446:93;17535:3;17446:93;:::i;:::-;17564:2;17559:3;17555:12;17548:19;;17207:366;;;:::o;17579:419::-;17745:4;17783:2;17772:9;17768:18;17760:26;;17832:9;17826:4;17822:20;17818:1;17807:9;17803:17;17796:47;17860:131;17986:4;17860:131;:::i;:::-;17852:139;;17579:419;;;:::o;18004:118::-;18091:24;18109:5;18091:24;:::i;:::-;18086:3;18079:37;18004:118;;:::o;18128:664::-;18333:4;18371:3;18360:9;18356:19;18348:27;;18385:71;18453:1;18442:9;18438:17;18429:6;18385:71;:::i;:::-;18466:72;18534:2;18523:9;18519:18;18510:6;18466:72;:::i;:::-;18548;18616:2;18605:9;18601:18;18592:6;18548:72;:::i;:::-;18630;18698:2;18687:9;18683:18;18674:6;18630:72;:::i;:::-;18712:73;18780:3;18769:9;18765:19;18756:6;18712:73;:::i;:::-;18128:664;;;;;;;;:::o;18798:442::-;18947:4;18985:2;18974:9;18970:18;18962:26;;18998:71;19066:1;19055:9;19051:17;19042:6;18998:71;:::i;:::-;19079:72;19147:2;19136:9;19132:18;19123:6;19079:72;:::i;:::-;19161;19229:2;19218:9;19214:18;19205:6;19161:72;:::i;:::-;18798:442;;;;;;:::o;19246:148::-;19348:11;19385:3;19370:18;;19246:148;;;;:::o;19400:214::-;19540:66;19536:1;19528:6;19524:14;19517:90;19400:214;:::o;19620:400::-;19780:3;19801:84;19883:1;19878:3;19801:84;:::i;:::-;19794:91;;19894:93;19983:3;19894:93;:::i;:::-;20012:1;20007:3;20003:11;19996:18;;19620:400;;;:::o;20026:79::-;20065:7;20094:5;20083:16;;20026:79;;;:::o;20111:157::-;20216:45;20236:24;20254:5;20236:24;:::i;:::-;20216:45;:::i;:::-;20211:3;20204:58;20111:157;;:::o;20274:663::-;20515:3;20537:148;20681:3;20537:148;:::i;:::-;20530:155;;20695:75;20766:3;20757:6;20695:75;:::i;:::-;20795:2;20790:3;20786:12;20779:19;;20808:75;20879:3;20870:6;20808:75;:::i;:::-;20908:2;20903:3;20899:12;20892:19;;20928:3;20921:10;;20274:663;;;;;:::o;20943:545::-;21116:4;21154:3;21143:9;21139:19;21131:27;;21168:71;21236:1;21225:9;21221:17;21212:6;21168:71;:::i;:::-;21249:68;21313:2;21302:9;21298:18;21289:6;21249:68;:::i;:::-;21327:72;21395:2;21384:9;21380:18;21371:6;21327:72;:::i;:::-;21409;21477:2;21466:9;21462:18;21453:6;21409:72;:::i;:::-;20943:545;;;;;;;:::o;21494:167::-;21634:19;21630:1;21622:6;21618:14;21611:43;21494:167;:::o;21667:366::-;21809:3;21830:67;21894:2;21889:3;21830:67;:::i;:::-;21823:74;;21906:93;21995:3;21906:93;:::i;:::-;22024:2;22019:3;22015:12;22008:19;;21667:366;;;:::o;22039:419::-;22205:4;22243:2;22232:9;22228:18;22220:26;;22292:9;22286:4;22282:20;22278:1;22267:9;22263:17;22256:47;22320:131;22446:4;22320:131;:::i;:::-;22312:139;;22039:419;;;:::o;22464:170::-;22604:22;22600:1;22592:6;22588:14;22581:46;22464:170;:::o;22640:366::-;22782:3;22803:67;22867:2;22862:3;22803:67;:::i;:::-;22796:74;;22879:93;22968:3;22879:93;:::i;:::-;22997:2;22992:3;22988:12;22981:19;;22640:366;;;:::o;23012:419::-;23178:4;23216:2;23205:9;23201:18;23193:26;;23265:9;23259:4;23255:20;23251:1;23240:9;23236:17;23229:47;23293:131;23419:4;23293:131;:::i;:::-;23285:139;;23012:419;;;:::o;23437:223::-;23577:34;23573:1;23565:6;23561:14;23554:58;23646:6;23641:2;23633:6;23629:15;23622:31;23437:223;:::o;23666:366::-;23808:3;23829:67;23893:2;23888:3;23829:67;:::i;:::-;23822:74;;23905:93;23994:3;23905:93;:::i;:::-;24023:2;24018:3;24014:12;24007:19;;23666:366;;;:::o;24038:419::-;24204:4;24242:2;24231:9;24227:18;24219:26;;24291:9;24285:4;24281:20;24277:1;24266:9;24262:17;24255:47;24319:131;24445:4;24319:131;:::i;:::-;24311:139;;24038:419;;;:::o;24463:240::-;24603:34;24599:1;24591:6;24587:14;24580:58;24672:23;24667:2;24659:6;24655:15;24648:48;24463:240;:::o;24709:366::-;24851:3;24872:67;24936:2;24931:3;24872:67;:::i;:::-;24865:74;;24948:93;25037:3;24948:93;:::i;:::-;25066:2;25061:3;25057:12;25050:19;;24709:366;;;:::o;25081:419::-;25247:4;25285:2;25274:9;25270:18;25262:26;;25334:9;25328:4;25324:20;25320:1;25309:9;25305:17;25298:47;25362:131;25488:4;25362:131;:::i;:::-;25354:139;;25081:419;;;:::o;25506:239::-;25646:34;25642:1;25634:6;25630:14;25623:58;25715:22;25710:2;25702:6;25698:15;25691:47;25506:239;:::o;25751:366::-;25893:3;25914:67;25978:2;25973:3;25914:67;:::i;:::-;25907:74;;25990:93;26079:3;25990:93;:::i;:::-;26108:2;26103:3;26099:12;26092:19;;25751:366;;;:::o;26123:419::-;26289:4;26327:2;26316:9;26312:18;26304:26;;26376:9;26370:4;26366:20;26362:1;26351:9;26347:17;26340:47;26404:131;26530:4;26404:131;:::i;:::-;26396:139;;26123:419;;;:::o;26548:225::-;26688:34;26684:1;26676:6;26672:14;26665:58;26757:8;26752:2;26744:6;26740:15;26733:33;26548:225;:::o;26779:366::-;26921:3;26942:67;27006:2;27001:3;26942:67;:::i;:::-;26935:74;;27018:93;27107:3;27018:93;:::i;:::-;27136:2;27131:3;27127:12;27120:19;;26779:366;;;:::o;27151:419::-;27317:4;27355:2;27344:9;27340:18;27332:26;;27404:9;27398:4;27394:20;27390:1;27379:9;27375:17;27368:47;27432:131;27558:4;27432:131;:::i;:::-;27424:139;;27151:419;;;:::o;27576:223::-;27716:34;27712:1;27704:6;27700:14;27693:58;27785:6;27780:2;27772:6;27768:15;27761:31;27576:223;:::o;27805:366::-;27947:3;27968:67;28032:2;28027:3;27968:67;:::i;:::-;27961:74;;28044:93;28133:3;28044:93;:::i;:::-;28162:2;28157:3;28153:12;28146:19;;27805:366;;;:::o;28177:419::-;28343:4;28381:2;28370:9;28366:18;28358:26;;28430:9;28424:4;28420:20;28416:1;28405:9;28401:17;28394:47;28458:131;28584:4;28458:131;:::i;:::-;28450:139;;28177:419;;;:::o;28602:221::-;28742:34;28738:1;28730:6;28726:14;28719:58;28811:4;28806:2;28798:6;28794:15;28787:29;28602:221;:::o;28829:366::-;28971:3;28992:67;29056:2;29051:3;28992:67;:::i;:::-;28985:74;;29068:93;29157:3;29068:93;:::i;:::-;29186:2;29181:3;29177:12;29170:19;;28829:366;;;:::o;29201:419::-;29367:4;29405:2;29394:9;29390:18;29382:26;;29454:9;29448:4;29444:20;29440:1;29429:9;29425:17;29418:47;29482:131;29608:4;29482:131;:::i;:::-;29474:139;;29201:419;;;:::o;29626:224::-;29766:34;29762:1;29754:6;29750:14;29743:58;29835:7;29830:2;29822:6;29818:15;29811:32;29626:224;:::o;29856:366::-;29998:3;30019:67;30083:2;30078:3;30019:67;:::i;:::-;30012:74;;30095:93;30184:3;30095:93;:::i;:::-;30213:2;30208:3;30204:12;30197:19;;29856:366;;;:::o;30228:419::-;30394:4;30432:2;30421:9;30417:18;30409:26;;30481:9;30475:4;30471:20;30467:1;30456:9;30452:17;30445:47;30509:131;30635:4;30509:131;:::i;:::-;30501:139;;30228:419;;;:::o;30653:222::-;30793:34;30789:1;30781:6;30777:14;30770:58;30862:5;30857:2;30849:6;30845:15;30838:30;30653:222;:::o;30881:366::-;31023:3;31044:67;31108:2;31103:3;31044:67;:::i;:::-;31037:74;;31120:93;31209:3;31120:93;:::i;:::-;31238:2;31233:3;31229:12;31222:19;;30881:366;;;:::o;31253:419::-;31419:4;31457:2;31446:9;31442:18;31434:26;;31506:9;31500:4;31496:20;31492:1;31481:9;31477:17;31470:47;31534:131;31660:4;31534:131;:::i;:::-;31526:139;;31253:419;;;:::o;31678:167::-;31818:19;31814:1;31806:6;31802:14;31795:43;31678:167;:::o;31851:366::-;31993:3;32014:67;32078:2;32073:3;32014:67;:::i;:::-;32007:74;;32090:93;32179:3;32090:93;:::i;:::-;32208:2;32203:3;32199:12;32192:19;;31851:366;;;:::o;32223:419::-;32389:4;32427:2;32416:9;32412:18;32404:26;;32476:9;32470:4;32466:20;32462:1;32451:9;32447:17;32440:47;32504:131;32630:4;32504:131;:::i;:::-;32496:139;;32223:419;;;:::o;32648:165::-;32788:17;32784:1;32776:6;32772:14;32765:41;32648:165;:::o;32819:366::-;32961:3;32982:67;33046:2;33041:3;32982:67;:::i;:::-;32975:74;;33058:93;33147:3;33058:93;:::i;:::-;33176:2;33171:3;33167:12;33160:19;;32819:366;;;:::o;33191:419::-;33357:4;33395:2;33384:9;33380:18;33372:26;;33444:9;33438:4;33434:20;33430:1;33419:9;33415:17;33408:47;33472:131;33598:4;33472:131;:::i;:::-;33464:139;;33191:419;;;:::o;33616:172::-;33756:24;33752:1;33744:6;33740:14;33733:48;33616:172;:::o;33794:366::-;33936:3;33957:67;34021:2;34016:3;33957:67;:::i;:::-;33950:74;;34033:93;34122:3;34033:93;:::i;:::-;34151:2;34146:3;34142:12;34135:19;;33794:366;;;:::o;34166:419::-;34332:4;34370:2;34359:9;34355:18;34347:26;;34419:9;34413:4;34409:20;34405:1;34394:9;34390:17;34383:47;34447:131;34573:4;34447:131;:::i;:::-;34439:139;;34166:419;;;:::o;34591:229::-;34731:34;34727:1;34719:6;34715:14;34708:58;34800:12;34795:2;34787:6;34783:15;34776:37;34591:229;:::o;34826:366::-;34968:3;34989:67;35053:2;35048:3;34989:67;:::i;:::-;34982:74;;35065:93;35154:3;35065:93;:::i;:::-;35183:2;35178:3;35174:12;35167:19;;34826:366;;;:::o;35198:419::-;35364:4;35402:2;35391:9;35387:18;35379:26;;35451:9;35445:4;35441:20;35437:1;35426:9;35422:17;35415:47;35479:131;35605:4;35479:131;:::i;:::-;35471:139;;35198:419;;;:::o;35623:169::-;35763:21;35759:1;35751:6;35747:14;35740:45;35623:169;:::o;35798:366::-;35940:3;35961:67;36025:2;36020:3;35961:67;:::i;:::-;35954:74;;36037:93;36126:3;36037:93;:::i;:::-;36155:2;36150:3;36146:12;36139:19;;35798:366;;;:::o;36170:419::-;36336:4;36374:2;36363:9;36359:18;36351:26;;36423:9;36417:4;36413:20;36409:1;36398:9;36394:17;36387:47;36451:131;36577:4;36451:131;:::i;:::-;36443:139;;36170:419;;;:::o;36595:230::-;36735:34;36731:1;36723:6;36719:14;36712:58;36804:13;36799:2;36791:6;36787:15;36780:38;36595:230;:::o;36831:366::-;36973:3;36994:67;37058:2;37053:3;36994:67;:::i;:::-;36987:74;;37070:93;37159:3;37070:93;:::i;:::-;37188:2;37183:3;37179:12;37172:19;;36831:366;;;:::o;37203:419::-;37369:4;37407:2;37396:9;37392:18;37384:26;;37456:9;37450:4;37446:20;37442:1;37431:9;37427:17;37420:47;37484:131;37610:4;37484:131;:::i;:::-;37476:139;;37203:419;;;:::o;37628:137::-;37682:5;37713:6;37707:13;37698:22;;37729:30;37753:5;37729:30;:::i;:::-;37628:137;;;;:::o;37771:345::-;37838:6;37887:2;37875:9;37866:7;37862:23;37858:32;37855:119;;;37893:79;;:::i;:::-;37855:119;38013:1;38038:61;38091:7;38082:6;38071:9;38067:22;38038:61;:::i;:::-;38028:71;;37984:125;37771:345;;;;:::o;38122:775::-;38355:4;38393:3;38382:9;38378:19;38370:27;;38407:71;38475:1;38464:9;38460:17;38451:6;38407:71;:::i;:::-;38488:72;38556:2;38545:9;38541:18;38532:6;38488:72;:::i;:::-;38570;38638:2;38627:9;38623:18;38614:6;38570:72;:::i;:::-;38652;38720:2;38709:9;38705:18;38696:6;38652:72;:::i;:::-;38734:73;38802:3;38791:9;38787:19;38778:6;38734:73;:::i;:::-;38817;38885:3;38874:9;38870:19;38861:6;38817:73;:::i;:::-;38122:775;;;;;;;;;:::o;38903:170::-;39043:22;39039:1;39031:6;39027:14;39020:46;38903:170;:::o;39079:366::-;39221:3;39242:67;39306:2;39301:3;39242:67;:::i;:::-;39235:74;;39318:93;39407:3;39318:93;:::i;:::-;39436:2;39431:3;39427:12;39420:19;;39079:366;;;:::o;39451:419::-;39617:4;39655:2;39644:9;39640:18;39632:26;;39704:9;39698:4;39694:20;39690:1;39679:9;39675:17;39668:47;39732:131;39858:4;39732:131;:::i;:::-;39724:139;;39451:419;;;:::o;39876:191::-;39916:4;39936:20;39954:1;39936:20;:::i;:::-;39931:25;;39970:20;39988:1;39970:20;:::i;:::-;39965:25;;40009:1;40006;40003:8;40000:34;;;40014:18;;:::i;:::-;40000:34;40059:1;40056;40052:9;40044:17;;39876:191;;;;:::o;40073:225::-;40213:34;40209:1;40201:6;40197:14;40190:58;40282:8;40277:2;40269:6;40265:15;40258:33;40073:225;:::o;40304:366::-;40446:3;40467:67;40531:2;40526:3;40467:67;:::i;:::-;40460:74;;40543:93;40632:3;40543:93;:::i;:::-;40661:2;40656:3;40652:12;40645:19;;40304:366;;;:::o;40676:419::-;40842:4;40880:2;40869:9;40865:18;40857:26;;40929:9;40923:4;40919:20;40915:1;40904:9;40900:17;40893:47;40957:131;41083:4;40957:131;:::i;:::-;40949:139;;40676:419;;;:::o;41101:147::-;41202:11;41239:3;41224:18;;41101:147;;;;:::o;41254:114::-;;:::o;41374:398::-;41533:3;41554:83;41635:1;41630:3;41554:83;:::i;:::-;41547:90;;41646:93;41735:3;41646:93;:::i;:::-;41764:1;41759:3;41755:11;41748:18;;41374:398;;;:::o;41778:379::-;41962:3;41984:147;42127:3;41984:147;:::i;:::-;41977:154;;42148:3;42141:10;;41778:379;;;:::o;42163:180::-;42211:77;42208:1;42201:88;42308:4;42305:1;42298:15;42332:4;42329:1;42322:15;42349:180;42397:77;42394:1;42387:88;42494:4;42491:1;42484:15;42518:4;42515:1;42508:15;42535:143;42592:5;42623:6;42617:13;42608:22;;42639:33;42666:5;42639:33;:::i;:::-;42535:143;;;;:::o;42684:351::-;42754:6;42803:2;42791:9;42782:7;42778:23;42774:32;42771:119;;;42809:79;;:::i;:::-;42771:119;42929:1;42954:64;43010:7;43001:6;42990:9;42986:22;42954:64;:::i;:::-;42944:74;;42900:128;42684:351;;;;:::o;43041:85::-;43086:7;43115:5;43104:16;;43041:85;;;:::o;43132:158::-;43190:9;43223:61;43241:42;43250:32;43276:5;43250:32;:::i;:::-;43241:42;:::i;:::-;43223:61;:::i;:::-;43210:74;;43132:158;;;:::o;43296:147::-;43391:45;43430:5;43391:45;:::i;:::-;43386:3;43379:58;43296:147;;:::o;43449:114::-;43516:6;43550:5;43544:12;43534:22;;43449:114;;;:::o;43569:184::-;43668:11;43702:6;43697:3;43690:19;43742:4;43737:3;43733:14;43718:29;;43569:184;;;;:::o;43759:132::-;43826:4;43849:3;43841:11;;43879:4;43874:3;43870:14;43862:22;;43759:132;;;:::o;43897:108::-;43974:24;43992:5;43974:24;:::i;:::-;43969:3;43962:37;43897:108;;:::o;44011:179::-;44080:10;44101:46;44143:3;44135:6;44101:46;:::i;:::-;44179:4;44174:3;44170:14;44156:28;;44011:179;;;;:::o;44196:113::-;44266:4;44298;44293:3;44289:14;44281:22;;44196:113;;;:::o;44345:732::-;44464:3;44493:54;44541:5;44493:54;:::i;:::-;44563:86;44642:6;44637:3;44563:86;:::i;:::-;44556:93;;44673:56;44723:5;44673:56;:::i;:::-;44752:7;44783:1;44768:284;44793:6;44790:1;44787:13;44768:284;;;44869:6;44863:13;44896:63;44955:3;44940:13;44896:63;:::i;:::-;44889:70;;44982:60;45035:6;44982:60;:::i;:::-;44972:70;;44828:224;44815:1;44812;44808:9;44803:14;;44768:284;;;44772:14;45068:3;45061:10;;44469:608;;;44345:732;;;;:::o;45083:831::-;45346:4;45384:3;45373:9;45369:19;45361:27;;45398:71;45466:1;45455:9;45451:17;45442:6;45398:71;:::i;:::-;45479:80;45555:2;45544:9;45540:18;45531:6;45479:80;:::i;:::-;45606:9;45600:4;45596:20;45591:2;45580:9;45576:18;45569:48;45634:108;45737:4;45728:6;45634:108;:::i;:::-;45626:116;;45752:72;45820:2;45809:9;45805:18;45796:6;45752:72;:::i;:::-;45834:73;45902:3;45891:9;45887:19;45878:6;45834:73;:::i;:::-;45083:831;;;;;;;;:::o

Swarm Source

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