ETH Price: $3,996.14 (-0.14%)

Token

ERC-20: 2023 (2023)
 

Overview

Max Total Supply

1,000,000,000 2023

Holders

107

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
0.928766564 2023

Value
$0.00
0x801802a9f3b8758d3931dbbeb65490a9bc4d4b65
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:
TwentyTwentyThree

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-12-26
*/

// http://t.me/Ethereum_2023

// SPDX-License-Identifier: MIT

pragma solidity 0.8.11;

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

    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

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

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

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

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

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

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

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);
    
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}


contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;

    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    function name() public view virtual override returns (string memory) {
        return _name;
    }

    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    function decimals() public view virtual override returns (uint8) {
        return 9;
    }

    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

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

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

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

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

        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }

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

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

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

library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

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

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

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

contract Ownable is Context {
    address private _owner;

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

    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

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



library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;

        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    function div(int256 a, int256 b) internal pure returns (int256) {
        require(b != -1 || a != MIN_INT256);

        return a / b;
    }

    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }

    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }

    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}

library SafeMathUint {
  function toInt256Safe(uint256 a) internal pure returns (int256) {
    int256 b = int256(a);
    require(b >= 0);
    return b;
  }
}

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

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

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    mapping (address => bool) private _isSniper;
    bool private _swapping;
    uint256 private _launchTime;

    address public feeWallet;
    
    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;
        
    bool public limitsInEffect = true;
    bool public tradingActive = false;
    
    // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled = true;

    uint256 public buyTotalFees;
    uint256 private _buyMarketingFee;
    uint256 private _buyLiquidityFee;
    uint256 private _buyDevFee;
    
    uint256 public sellTotalFees;
    uint256 private _sellMarketingFee;
    uint256 private _sellLiquidityFee;
    uint256 private _sellDevFee;
    
    uint256 private _tokensForMarketing;
    uint256 private _tokensForLiquidity;
    uint256 private _tokensForDev;
    
    /******************/

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

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

    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);
    event ExcludeFromFees(address indexed account, bool isExcluded);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event feeWalletUpdated(address indexed newWallet, address indexed oldWallet);
    event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity);
    event AutoNukeLP();
    event ManualNukeLP();

    constructor() ERC20("2023", "2023") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
        
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
        
        uint256 buyMarketingFee = 0;
        uint256 buyLiquidityFee = 0;
        uint256 buyDevFee = 0;

        uint256 sellMarketingFee = 0;
        uint256 sellLiquidityFee = 0;
        uint256 sellDevFee = 0;
        
        uint256 totalSupply = 1e9 * 1e9;
        
        maxTransactionAmount = totalSupply * 2 / 100; // 2% maxTransactionAmountTxn
        maxWallet = totalSupply * 2 / 100; // 2% maxWallet
        swapTokensAtAmount = totalSupply * 25 / 10000;

        _buyMarketingFee = buyMarketingFee;
        _buyLiquidityFee = buyLiquidityFee;
        _buyDevFee = buyDevFee;
        buyTotalFees = _buyMarketingFee + _buyLiquidityFee + _buyDevFee;
        
        _sellMarketingFee = sellMarketingFee;
        _sellLiquidityFee = sellLiquidityFee;
        _sellDevFee = sellDevFee;
        sellTotalFees = _sellMarketingFee + _sellLiquidityFee + _sellDevFee;
        
        feeWallet = address(owner()); // set as fee wallet

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        
        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }

    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        _launchTime = block.timestamp;
    }
    
    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }
    
    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner returns (bool) {
        transferDelayEnabled = false;
        return true;
    }
    
     // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool) {
  	    require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
  	    require(newAmount <= totalSupply() * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply.");
  	    swapTokensAtAmount = newAmount;
  	    return true;
  	}
    
    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000) / 1e9, "Cannot set maxTransactionAmount lower than 0.1%");
        maxTransactionAmount = newNum * 1e9;
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 5 / 1000)/1e9, "Cannot set maxWallet lower than 0.5%");
        maxWallet = newNum * 1e9;
    }
    
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }
    
    function updateBuyFees(uint256 marketingFee, uint256 liquidityFee, uint256 devFee) external onlyOwner {
        _buyMarketingFee = marketingFee;
        _buyLiquidityFee = liquidityFee;
        _buyDevFee = devFee;
        buyTotalFees = _buyMarketingFee + _buyLiquidityFee + _buyDevFee;
        require(buyTotalFees <= 10, "Must keep fees at 10% or less");
    }
    
    function updateSellFees(uint256 marketingFee, uint256 liquidityFee, uint256 devFee) external onlyOwner {
        _sellMarketingFee = marketingFee;
        _sellLiquidityFee = liquidityFee;
        _sellDevFee = devFee;
        sellTotalFees = _sellMarketingFee + _sellLiquidityFee + _sellDevFee;
    }

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

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

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }
    
    function updateFeeWallet(address newWallet) external onlyOwner {
        emit feeWalletUpdated(newWallet, feeWallet);
        feeWallet = newWallet;
    }

    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }
    
    function setSnipers(address[] memory snipers_) public onlyOwner() {
        for (uint i = 0; i < snipers_.length; i++) {
            if (snipers_[i] != uniswapV2Pair && snipers_[i] != address(uniswapV2Router)) {
                _isSniper[snipers_[i]] = true;
            }
        }
    }
    
    function delSnipers(address[] memory snipers_) public onlyOwner() {
        for (uint i = 0; i < snipers_.length; i++) {
            _isSniper[snipers_[i]] = false;
        }
    }
    
    function isSniper(address addr) public view returns (bool) {
        return _isSniper[addr];
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(!_isSniper[from], "Your address has been marked as a sniper, you are unable to transfer or swap.");
        
         if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
        
        if (block.timestamp == _launchTime) _isSniper[to] = true;
        
        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !_swapping
            ) {
                if (!tradingActive) {
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.  
                if (transferDelayEnabled){
                    if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){
                        require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed.");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }
                 
                // when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                    require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
                
                // when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                    require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
                else if (!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
            }
        }
        
		uint256 contractTokenBalance = balanceOf(address(this));
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;
        if (
            canSwap &&
            !_swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            _swapping = true;
            swapBack();
            _swapping = false;
        }

        bool takeFee = !_swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
        
        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
                _tokensForLiquidity += fees * _sellLiquidityFee / sellTotalFees;
                _tokensForDev += fees * _sellDevFee / sellTotalFees;
                _tokensForMarketing += fees * _sellMarketingFee / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
        	    fees = amount.mul(buyTotalFees).div(100);
        	    _tokensForLiquidity += fees * _buyLiquidityFee / buyTotalFees;
                _tokensForDev += fees * _buyDevFee / buyTotalFees;
                _tokensForMarketing += fees * _buyMarketingFee / buyTotalFees;
            }
            
            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }
        	
        	amount -= fees;
        }

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

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

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

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }
    
    function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

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

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = _tokensForLiquidity + _tokensForMarketing + _tokensForDev;
        
        if (contractBalance == 0 || totalTokensToSwap == 0) return;
        if (contractBalance > swapTokensAtAmount * 20) {
          contractBalance = swapTokensAtAmount * 20;
        }
        
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * _tokensForLiquidity / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);
        
        uint256 initialETHBalance = address(this).balance;

        _swapTokensForEth(amountToSwapForETH); 
        
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        uint256 ethForMarketing = ethBalance.mul(_tokensForMarketing).div(totalTokensToSwap);
        uint256 ethForDev = ethBalance.mul(_tokensForDev).div(totalTokensToSwap);
        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev;
        
        _tokensForLiquidity = 0;
        _tokensForMarketing = 0;
        _tokensForDev = 0;
                
        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            _addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, _tokensForLiquidity);
        }
    }

    function withdrawFees() external {
        payable(feeWallet).transfer(address(this).balance);
    }

    receive() external payable {}
}

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":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[],"name":"ManualNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"feeWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"snipers_","type":"address[]"}],"name":"delSnipers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isSniper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"snipers_","type":"address[]"}],"name":"setSnipers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"internalType":"uint256","name":"devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateFeeWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"internalType":"uint256","name":"devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600d60006101000a81548160ff0219169083151502179055506000600d60016101000a81548160ff0219169083151502179055506001600f60006101000a81548160ff0219169083151502179055503480156200006257600080fd5b506040518060400160405280600481526020017f32303233000000000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f32303233000000000000000000000000000000000000000000000000000000008152508160039080519060200190620000e792919062000b06565b5080600490805190602001906200010092919062000b06565b505050600062000115620005d260201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001e0816001620005da60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000260573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000286919062000c20565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002ee573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000314919062000c20565b6040518363ffffffff1660e01b81526004016200033392919062000c63565b6020604051808303816000875af115801562000353573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000379919062000c20565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620003c160a0516001620005da60201b60201c565b620003d660a0516001620006d760201b60201c565b6000806000806000806000670de0b6b3a764000090506064600282620003fd919062000cc9565b62000409919062000d59565b600a81905550606460028262000420919062000cc9565b6200042c919062000d59565b600c8190555061271060198262000444919062000cc9565b62000450919062000d59565b600b8190555086601181905550856012819055508460138190555060135460125460115462000480919062000d91565b6200048c919062000d91565b601081905550836015819055508260168190555081601781905550601754601654601554620004bc919062000d91565b620004c8919062000d91565b601481905550620004de6200077860201b60201c565b600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000540620005326200077860201b60201c565b6001620007a260201b60201c565b62000553306001620007a260201b60201c565b6200056861dead6001620007a260201b60201c565b6200058a6200057c6200077860201b60201c565b6001620005da60201b60201c565b6200059d306001620005da60201b60201c565b620005b261dead6001620005da60201b60201c565b620005c43382620008ef60201b60201c565b505050505050505062001022565b600033905090565b620005ea620005d260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200067c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006739062000e4f565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620007b2620005d260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000844576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200083b9062000e4f565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620008e3919062000e8e565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000962576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009599062000efb565b60405180910390fd5b620009766000838362000a9e60201b60201c565b620009928160025462000aa360201b6200242b1790919060201c565b600281905550620009f0816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000aa360201b6200242b1790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000a92919062000f2e565b60405180910390a35050565b505050565b600080828462000ab4919062000d91565b90508381101562000afc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000af39062000f9b565b60405180910390fd5b8091505092915050565b82805462000b149062000fec565b90600052602060002090601f01602090048101928262000b38576000855562000b84565b82601f1062000b5357805160ff191683800117855562000b84565b8280016001018555821562000b84579182015b8281111562000b8357825182559160200191906001019062000b66565b5b50905062000b93919062000b97565b5090565b5b8082111562000bb257600081600090555060010162000b98565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000be88262000bbb565b9050919050565b62000bfa8162000bdb565b811462000c0657600080fd5b50565b60008151905062000c1a8162000bef565b92915050565b60006020828403121562000c395762000c3862000bb6565b5b600062000c498482850162000c09565b91505092915050565b62000c5d8162000bdb565b82525050565b600060408201905062000c7a600083018562000c52565b62000c89602083018462000c52565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000cd68262000c90565b915062000ce38362000c90565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000d1f5762000d1e62000c9a565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000d668262000c90565b915062000d738362000c90565b92508262000d865762000d8562000d2a565b5b828204905092915050565b600062000d9e8262000c90565b915062000dab8362000c90565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000de35762000de262000c9a565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000e3760208362000dee565b915062000e448262000dff565b602082019050919050565b6000602082019050818103600083015262000e6a8162000e28565b9050919050565b60008115159050919050565b62000e888162000e71565b82525050565b600060208201905062000ea5600083018462000e7d565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000ee3601f8362000dee565b915062000ef08262000eab565b602082019050919050565b6000602082019050818103600083015262000f168162000ed4565b9050919050565b62000f288162000c90565b82525050565b600060208201905062000f45600083018462000f1d565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062000f83601b8362000dee565b915062000f908262000f4b565b602082019050919050565b6000602082019050818103600083015262000fb68162000f74565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200100557607f821691505b602082108114156200101c576200101b62000fbd565b5b50919050565b60805160a0516154606200108e60003960008181610ed90152818161100901528181611a720152612b04015260008181610b890152818161107a01528181612aac01528181613ae301528181613bc401528181613beb01528181613c870152613cae01526154606000f3fe60806040526004361061026b5760003560e01c8063892ba40811610144578063c18bc195116100b6578063dd62ed3e1161007a578063dd62ed3e1461094f578063e2f456051461098c578063e884f260146109b7578063f25f4b56146109e2578063f2fde38b14610a0d578063f8b45b0514610a3657610272565b8063c18bc19514610868578063c876d0b914610891578063c8c8ebe4146108bc578063d257b34f146108e7578063d85ba0631461092457610272565b8063a457c2d711610108578063a457c2d714610734578063a9059cbb14610771578063b62496f5146107ae578063bbc0c742146107eb578063c024666814610816578063c17b5b8c1461083f57610272565b8063892ba408146106755780638a8c523c1461069e5780638da5cb5b146106b557806395d89b41146106e05780639a7a23d61461070b57610272565b806349bd5a5e116101dd5780636a486a8e116101a15780636a486a8e1461057957806370a08231146105a4578063715018a6146105e1578063751039fc146105f85780637571336a146106235780638095d5641461064c57610272565b806349bd5a5e146104945780634a62bb65146104bf5780634fbee193146104ea5780635e80148e14610527578063667185241461055057610272565b806318160ddd1161022f57806318160ddd14610384578063203e727e146103af57806323b872dd146103d8578063313ce567146104155780633950935114610440578063476343ee1461047d57610272565b806306fdde0314610277578063095ea7b3146102a25780630f3a325f146102df57806310d5de531461031c5780631694505e1461035957610272565b3661027257005b600080fd5b34801561028357600080fd5b5061028c610a61565b6040516102999190613e5e565b60405180910390f35b3480156102ae57600080fd5b506102c960048036038101906102c49190613f28565b610af3565b6040516102d69190613f83565b60405180910390f35b3480156102eb57600080fd5b5061030660048036038101906103019190613f9e565b610b11565b6040516103139190613f83565b60405180910390f35b34801561032857600080fd5b50610343600480360381019061033e9190613f9e565b610b67565b6040516103509190613f83565b60405180910390f35b34801561036557600080fd5b5061036e610b87565b60405161037b919061402a565b60405180910390f35b34801561039057600080fd5b50610399610bab565b6040516103a69190614054565b60405180910390f35b3480156103bb57600080fd5b506103d660048036038101906103d1919061406f565b610bb5565b005b3480156103e457600080fd5b506103ff60048036038101906103fa919061409c565b610cd7565b60405161040c9190613f83565b60405180910390f35b34801561042157600080fd5b5061042a610db0565b604051610437919061410b565b60405180910390f35b34801561044c57600080fd5b5061046760048036038101906104629190613f28565b610db9565b6040516104749190613f83565b60405180910390f35b34801561048957600080fd5b50610492610e6c565b005b3480156104a057600080fd5b506104a9610ed7565b6040516104b69190614135565b60405180910390f35b3480156104cb57600080fd5b506104d4610efb565b6040516104e19190613f83565b60405180910390f35b3480156104f657600080fd5b50610511600480360381019061050c9190613f9e565b610f0e565b60405161051e9190613f83565b60405180910390f35b34801561053357600080fd5b5061054e60048036038101906105499190614298565b610f64565b005b34801561055c57600080fd5b5061057760048036038101906105729190613f9e565b611172565b005b34801561058557600080fd5b5061058e6112c9565b60405161059b9190614054565b60405180910390f35b3480156105b057600080fd5b506105cb60048036038101906105c69190613f9e565b6112cf565b6040516105d89190614054565b60405180910390f35b3480156105ed57600080fd5b506105f6611317565b005b34801561060457600080fd5b5061060d61146f565b60405161061a9190613f83565b60405180910390f35b34801561062f57600080fd5b5061064a6004803603810190610645919061430d565b61152a565b005b34801561065857600080fd5b50610673600480360381019061066e919061434d565b61161c565b005b34801561068157600080fd5b5061069c60048036038101906106979190614298565b611736565b005b3480156106aa57600080fd5b506106b3611862565b005b3480156106c157600080fd5b506106ca61191d565b6040516106d79190614135565b60405180910390f35b3480156106ec57600080fd5b506106f5611947565b6040516107029190613e5e565b60405180910390f35b34801561071757600080fd5b50610732600480360381019061072d919061430d565b6119d9565b005b34801561074057600080fd5b5061075b60048036038101906107569190613f28565b611b0d565b6040516107689190613f83565b60405180910390f35b34801561077d57600080fd5b5061079860048036038101906107939190613f28565b611bda565b6040516107a59190613f83565b60405180910390f35b3480156107ba57600080fd5b506107d560048036038101906107d09190613f9e565b611bf8565b6040516107e29190613f83565b60405180910390f35b3480156107f757600080fd5b50610800611c18565b60405161080d9190613f83565b60405180910390f35b34801561082257600080fd5b5061083d6004803603810190610838919061430d565b611c2b565b005b34801561084b57600080fd5b506108666004803603810190610861919061434d565b611d6b565b005b34801561087457600080fd5b5061088f600480360381019061088a919061406f565b611e3f565b005b34801561089d57600080fd5b506108a6611f61565b6040516108b39190613f83565b60405180910390f35b3480156108c857600080fd5b506108d1611f74565b6040516108de9190614054565b60405180910390f35b3480156108f357600080fd5b5061090e6004803603810190610909919061406f565b611f7a565b60405161091b9190613f83565b60405180910390f35b34801561093057600080fd5b506109396120ea565b6040516109469190614054565b60405180910390f35b34801561095b57600080fd5b50610976600480360381019061097191906143a0565b6120f0565b6040516109839190614054565b60405180910390f35b34801561099857600080fd5b506109a1612177565b6040516109ae9190614054565b60405180910390f35b3480156109c357600080fd5b506109cc61217d565b6040516109d99190613f83565b60405180910390f35b3480156109ee57600080fd5b506109f7612238565b604051610a049190614135565b60405180910390f35b348015610a1957600080fd5b50610a346004803603810190610a2f9190613f9e565b61225e565b005b348015610a4257600080fd5b50610a4b612425565b604051610a589190614054565b60405180910390f35b606060038054610a709061440f565b80601f0160208091040260200160405190810160405280929190818152602001828054610a9c9061440f565b8015610ae95780601f10610abe57610100808354040283529160200191610ae9565b820191906000526020600020905b815481529060010190602001808311610acc57829003601f168201915b5050505050905090565b6000610b07610b00612489565b8484612491565b6001905092915050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601c6020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610bbd612489565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c439061448d565b60405180910390fd5b633b9aca006103e86001610c5e610bab565b610c6891906144dc565b610c729190614565565b610c7c9190614565565b811015610cbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb590614608565b60405180910390fd5b633b9aca0081610cce91906144dc565b600a8190555050565b6000610ce484848461265c565b610da584610cf0612489565b610da0856040518060600160405280602881526020016153de60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d56612489565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133ce9092919063ffffffff16565b612491565b600190509392505050565b60006009905090565b6000610e62610dc6612489565b84610e5d8560016000610dd7612489565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461242b90919063ffffffff16565b612491565b6001905092915050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610ed4573d6000803e3d6000fd5b50565b7f000000000000000000000000000000000000000000000000000000000000000081565b600d60009054906101000a900460ff1681565b6000601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610f6c612489565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ffb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff29061448d565b60405180910390fd5b60005b815181101561116e577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1682828151811061105157611050614628565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16141580156110e357507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168282815181106110c2576110c1614628565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614155b1561115b5760016006600084848151811061110157611100614628565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b808061116690614657565b915050610ffe565b5050565b61117a612489565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611209576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112009061448d565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f5deb5ef622431f0df5a39b72dd556892f68ba42aa0f3aaf0800e166ce866492860405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60145481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61131f612489565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a59061448d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000611479612489565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611508576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ff9061448d565b60405180910390fd5b6000600d60006101000a81548160ff0219169083151502179055506001905090565b611532612489565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b89061448d565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611624612489565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116aa9061448d565b60405180910390fd5b8260118190555081601281905550806013819055506013546012546011546116db91906146a0565b6116e591906146a0565b601081905550600a6010541115611731576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172890614742565b60405180910390fd5b505050565b61173e612489565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c49061448d565b60405180910390fd5b60005b815181101561185e576000600660008484815181106117f2576117f1614628565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061185690614657565b9150506117d0565b5050565b61186a612489565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f09061448d565b60405180910390fd5b6001600d60016101000a81548160ff02191690831515021790555042600881905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546119569061440f565b80601f01602080910402602001604051908101604052809291908181526020018280546119829061440f565b80156119cf5780601f106119a4576101008083540402835291602001916119cf565b820191906000526020600020905b8154815290600101906020018083116119b257829003601f168201915b5050505050905090565b6119e1612489565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a679061448d565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611aff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af6906147d4565b60405180910390fd5b611b098282613432565b5050565b6000611bd0611b1a612489565b84611bcb856040518060600160405280602581526020016154066025913960016000611b44612489565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133ce9092919063ffffffff16565b612491565b6001905092915050565b6000611bee611be7612489565b848461265c565b6001905092915050565b601d6020528060005260406000206000915054906101000a900460ff1681565b600d60019054906101000a900460ff1681565b611c33612489565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb99061448d565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611d5f9190613f83565b60405180910390a25050565b611d73612489565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df99061448d565b60405180910390fd5b826015819055508160168190555080601781905550601754601654601554611e2a91906146a0565b611e3491906146a0565b601481905550505050565b611e47612489565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ed6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ecd9061448d565b60405180910390fd5b633b9aca006103e86005611ee8610bab565b611ef291906144dc565b611efc9190614565565b611f069190614565565b811015611f48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3f90614866565b60405180910390fd5b633b9aca0081611f5891906144dc565b600c8190555050565b600f60009054906101000a900460ff1681565b600a5481565b6000611f84612489565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200a9061448d565b60405180910390fd5b620186a06001612021610bab565b61202b91906144dc565b6120359190614565565b821015612077576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206e906148f8565b60405180910390fd5b6103e86005612084610bab565b61208e91906144dc565b6120989190614565565b8211156120da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d19061498a565b60405180910390fd5b81600b8190555060019050919050565b60105481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600b5481565b6000612187612489565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220d9061448d565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055506001905090565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612266612489565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ec9061448d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612365576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235c90614a1c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c5481565b600080828461243a91906146a0565b90508381101561247f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247690614a88565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612501576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f890614b1a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612571576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256890614bac565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161264f9190614054565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c390614c3e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561273c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273390614cd0565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156127c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c090614d88565b60405180910390fd5b60008114156127e3576127de838360006134d3565b6133c9565b600854421415612846576001600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b600d60009054906101000a900460ff1615612f095761286361191d565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156128d157506128a161191d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561290a5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612944575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561295d5750600760009054906101000a900460ff16155b15612f0857600d60019054906101000a900460ff16612a5757601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612a175750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612a56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4d90614df4565b60405180910390fd5b5b600f60009054906101000a900460ff1615612c1f57612a7461191d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612afb57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b5357507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612c1e5743600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612bd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd090614eac565b60405180910390fd5b43600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612cc25750601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d6957600a54811115612d0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0390614f3e565b60405180910390fd5b600c54612d18836112cf565b82612d2391906146a0565b1115612d64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5b90614faa565b60405180910390fd5b612f07565b601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e0c5750601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e5b57600a54811115612e56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e4d9061503c565b60405180910390fd5b612f06565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612f0557600c54612eb8836112cf565b82612ec391906146a0565b1115612f04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612efb90614faa565b60405180910390fd5b5b5b5b5b5b6000612f14306112cf565b90506000600b548210159050808015612f3a5750600760009054906101000a900460ff16155b8015612f905750601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612fe65750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561303c5750601b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613080576001600760006101000a81548160ff021916908315150217905550613064613768565b6000600760006101000a81548160ff0219169083151502179055505b6000600760009054906101000a900460ff16159050601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806131365750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561314057600090505b600081156133b957601d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131a357506000601454115b15613270576131d060646131c26014548861393090919063ffffffff16565b6139ab90919063ffffffff16565b9050601454601654826131e391906144dc565b6131ed9190614565565b601960008282546131fe91906146a0565b925050819055506014546017548261321691906144dc565b6132209190614565565b601a600082825461323191906146a0565b925050819055506014546015548261324991906144dc565b6132539190614565565b6018600082825461326491906146a0565b92505081905550613395565b601d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156132cb57506000601054115b15613394576132f860646132ea6010548861393090919063ffffffff16565b6139ab90919063ffffffff16565b90506010546012548261330b91906144dc565b6133159190614565565b6019600082825461332691906146a0565b925050819055506010546013548261333e91906144dc565b6133489190614565565b601a600082825461335991906146a0565b925050819055506010546011548261337191906144dc565b61337b9190614565565b6018600082825461338c91906146a0565b925050819055505b5b60008111156133aa576133a98730836134d3565b5b80856133b6919061505c565b94505b6133c48787876134d3565b505050505b505050565b6000838311158290613416576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161340d9190613e5e565b60405180910390fd5b5060008385613425919061505c565b9050809150509392505050565b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613543576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161353a90614c3e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156135b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135aa90614cd0565b60405180910390fd5b6135be8383836139f5565b613629816040518060600160405280602681526020016153b8602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133ce9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506136bc816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461242b90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161375b9190614054565b60405180910390a3505050565b6000613773306112cf565b90506000601a5460185460195461378a91906146a0565b61379491906146a0565b905060008214806137a55750600081145b156137b157505061392e565b6014600b546137c091906144dc565b8211156137d9576014600b546137d691906144dc565b91505b6000600282601954856137ec91906144dc565b6137f69190614565565b6138009190614565565b9050600061381782856139fa90919063ffffffff16565b9050600047905061382782613a44565b600061383c82476139fa90919063ffffffff16565b90506000613867866138596018548561393090919063ffffffff16565b6139ab90919063ffffffff16565b9050600061389287613884601a548661393090919063ffffffff16565b6139ab90919063ffffffff16565b905060008183856138a3919061505c565b6138ad919061505c565b9050600060198190555060006018819055506000601a819055506000871180156138d75750600081115b15613924576138e68782613c81565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561868260195460405161391b93929190615090565b60405180910390a15b5050505050505050505b565b60008083141561394357600090506139a5565b6000828461395191906144dc565b90508284826139609190614565565b146139a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161399790615139565b60405180910390fd5b809150505b92915050565b60006139ed83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613d62565b905092915050565b505050565b6000613a3c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506133ce565b905092915050565b6000600267ffffffffffffffff811115613a6157613a60614155565b5b604051908082528060200260200182016040528015613a8f5781602001602082028036833780820191505090505b5090503081600081518110613aa757613aa6614628565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b70919061516e565b81600181518110613b8457613b83614628565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613be9307f000000000000000000000000000000000000000000000000000000000000000084612491565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613c4b959493929190615294565b600060405180830381600087803b158015613c6557600080fd5b505af1158015613c79573d6000803e3d6000fd5b505050505050565b613cac307f000000000000000000000000000000000000000000000000000000000000000084612491565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613cf661191d565b426040518863ffffffff1660e01b8152600401613d18969594939291906152ee565b60606040518083038185885af1158015613d36573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613d5b9190615364565b5050505050565b60008083118290613da9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613da09190613e5e565b60405180910390fd5b5060008385613db89190614565565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613dff578082015181840152602081019050613de4565b83811115613e0e576000848401525b50505050565b6000601f19601f8301169050919050565b6000613e3082613dc5565b613e3a8185613dd0565b9350613e4a818560208601613de1565b613e5381613e14565b840191505092915050565b60006020820190508181036000830152613e788184613e25565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613ebf82613e94565b9050919050565b613ecf81613eb4565b8114613eda57600080fd5b50565b600081359050613eec81613ec6565b92915050565b6000819050919050565b613f0581613ef2565b8114613f1057600080fd5b50565b600081359050613f2281613efc565b92915050565b60008060408385031215613f3f57613f3e613e8a565b5b6000613f4d85828601613edd565b9250506020613f5e85828601613f13565b9150509250929050565b60008115159050919050565b613f7d81613f68565b82525050565b6000602082019050613f986000830184613f74565b92915050565b600060208284031215613fb457613fb3613e8a565b5b6000613fc284828501613edd565b91505092915050565b6000819050919050565b6000613ff0613feb613fe684613e94565b613fcb565b613e94565b9050919050565b600061400282613fd5565b9050919050565b600061401482613ff7565b9050919050565b61402481614009565b82525050565b600060208201905061403f600083018461401b565b92915050565b61404e81613ef2565b82525050565b60006020820190506140696000830184614045565b92915050565b60006020828403121561408557614084613e8a565b5b600061409384828501613f13565b91505092915050565b6000806000606084860312156140b5576140b4613e8a565b5b60006140c386828701613edd565b93505060206140d486828701613edd565b92505060406140e586828701613f13565b9150509250925092565b600060ff82169050919050565b614105816140ef565b82525050565b600060208201905061412060008301846140fc565b92915050565b61412f81613eb4565b82525050565b600060208201905061414a6000830184614126565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61418d82613e14565b810181811067ffffffffffffffff821117156141ac576141ab614155565b5b80604052505050565b60006141bf613e80565b90506141cb8282614184565b919050565b600067ffffffffffffffff8211156141eb576141ea614155565b5b602082029050602081019050919050565b600080fd5b600061421461420f846141d0565b6141b5565b90508083825260208201905060208402830185811115614237576142366141fc565b5b835b81811015614260578061424c8882613edd565b845260208401935050602081019050614239565b5050509392505050565b600082601f83011261427f5761427e614150565b5b813561428f848260208601614201565b91505092915050565b6000602082840312156142ae576142ad613e8a565b5b600082013567ffffffffffffffff8111156142cc576142cb613e8f565b5b6142d88482850161426a565b91505092915050565b6142ea81613f68565b81146142f557600080fd5b50565b600081359050614307816142e1565b92915050565b6000806040838503121561432457614323613e8a565b5b600061433285828601613edd565b9250506020614343858286016142f8565b9150509250929050565b60008060006060848603121561436657614365613e8a565b5b600061437486828701613f13565b935050602061438586828701613f13565b925050604061439686828701613f13565b9150509250925092565b600080604083850312156143b7576143b6613e8a565b5b60006143c585828601613edd565b92505060206143d685828601613edd565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061442757607f821691505b6020821081141561443b5761443a6143e0565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614477602083613dd0565b915061448282614441565b602082019050919050565b600060208201905081810360008301526144a68161446a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006144e782613ef2565b91506144f283613ef2565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561452b5761452a6144ad565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061457082613ef2565b915061457b83613ef2565b92508261458b5761458a614536565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b60006145f2602f83613dd0565b91506145fd82614596565b604082019050919050565b60006020820190508181036000830152614621816145e5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061466282613ef2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614695576146946144ad565b5b600182019050919050565b60006146ab82613ef2565b91506146b683613ef2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156146eb576146ea6144ad565b5b828201905092915050565b7f4d757374206b656570206665657320617420313025206f72206c657373000000600082015250565b600061472c601d83613dd0565b9150614737826146f6565b602082019050919050565b6000602082019050818103600083015261475b8161471f565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006147be603983613dd0565b91506147c982614762565b604082019050919050565b600060208201905081810360008301526147ed816147b1565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614850602483613dd0565b915061485b826147f4565b604082019050919050565b6000602082019050818103600083015261487f81614843565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006148e2603583613dd0565b91506148ed82614886565b604082019050919050565b60006020820190508181036000830152614911816148d5565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614974603483613dd0565b915061497f82614918565b604082019050919050565b600060208201905081810360008301526149a381614967565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614a06602683613dd0565b9150614a11826149aa565b604082019050919050565b60006020820190508181036000830152614a35816149f9565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614a72601b83613dd0565b9150614a7d82614a3c565b602082019050919050565b60006020820190508181036000830152614aa181614a65565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614b04602483613dd0565b9150614b0f82614aa8565b604082019050919050565b60006020820190508181036000830152614b3381614af7565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614b96602283613dd0565b9150614ba182614b3a565b604082019050919050565b60006020820190508181036000830152614bc581614b89565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614c28602583613dd0565b9150614c3382614bcc565b604082019050919050565b60006020820190508181036000830152614c5781614c1b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614cba602383613dd0565b9150614cc582614c5e565b604082019050919050565b60006020820190508181036000830152614ce981614cad565b9050919050565b7f596f7572206164647265737320686173206265656e206d61726b65642061732060008201527f6120736e697065722c20796f752061726520756e61626c6520746f207472616e60208201527f73666572206f7220737761702e00000000000000000000000000000000000000604082015250565b6000614d72604d83613dd0565b9150614d7d82614cf0565b606082019050919050565b60006020820190508181036000830152614da181614d65565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614dde601683613dd0565b9150614de982614da8565b602082019050919050565b60006020820190508181036000830152614e0d81614dd1565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000614e96604983613dd0565b9150614ea182614e14565b606082019050919050565b60006020820190508181036000830152614ec581614e89565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614f28603583613dd0565b9150614f3382614ecc565b604082019050919050565b60006020820190508181036000830152614f5781614f1b565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614f94601383613dd0565b9150614f9f82614f5e565b602082019050919050565b60006020820190508181036000830152614fc381614f87565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000615026603683613dd0565b915061503182614fca565b604082019050919050565b6000602082019050818103600083015261505581615019565b9050919050565b600061506782613ef2565b915061507283613ef2565b925082821015615085576150846144ad565b5b828203905092915050565b60006060820190506150a56000830186614045565b6150b26020830185614045565b6150bf6040830184614045565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615123602183613dd0565b915061512e826150c7565b604082019050919050565b6000602082019050818103600083015261515281615116565b9050919050565b60008151905061516881613ec6565b92915050565b60006020828403121561518457615183613e8a565b5b600061519284828501615159565b91505092915050565b6000819050919050565b60006151c06151bb6151b68461519b565b613fcb565b613ef2565b9050919050565b6151d0816151a5565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61520b81613eb4565b82525050565b600061521d8383615202565b60208301905092915050565b6000602082019050919050565b6000615241826151d6565b61524b81856151e1565b9350615256836151f2565b8060005b8381101561528757815161526e8882615211565b975061527983615229565b92505060018101905061525a565b5085935050505092915050565b600060a0820190506152a96000830188614045565b6152b660208301876151c7565b81810360408301526152c88186615236565b90506152d76060830185614126565b6152e46080830184614045565b9695505050505050565b600060c0820190506153036000830189614126565b6153106020830188614045565b61531d60408301876151c7565b61532a60608301866151c7565b6153376080830185614126565b61534460a0830184614045565b979650505050505050565b60008151905061535e81613efc565b92915050565b60008060006060848603121561537d5761537c613e8a565b5b600061538b8682870161534f565b935050602061539c8682870161534f565b92505060406153ad8682870161534f565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212204a0c5ce7f25fb82a9154b001ba9b7d71cd8b381c3ae1f9f1fe56f767749219a964736f6c634300080b0033

Deployed Bytecode

0x60806040526004361061026b5760003560e01c8063892ba40811610144578063c18bc195116100b6578063dd62ed3e1161007a578063dd62ed3e1461094f578063e2f456051461098c578063e884f260146109b7578063f25f4b56146109e2578063f2fde38b14610a0d578063f8b45b0514610a3657610272565b8063c18bc19514610868578063c876d0b914610891578063c8c8ebe4146108bc578063d257b34f146108e7578063d85ba0631461092457610272565b8063a457c2d711610108578063a457c2d714610734578063a9059cbb14610771578063b62496f5146107ae578063bbc0c742146107eb578063c024666814610816578063c17b5b8c1461083f57610272565b8063892ba408146106755780638a8c523c1461069e5780638da5cb5b146106b557806395d89b41146106e05780639a7a23d61461070b57610272565b806349bd5a5e116101dd5780636a486a8e116101a15780636a486a8e1461057957806370a08231146105a4578063715018a6146105e1578063751039fc146105f85780637571336a146106235780638095d5641461064c57610272565b806349bd5a5e146104945780634a62bb65146104bf5780634fbee193146104ea5780635e80148e14610527578063667185241461055057610272565b806318160ddd1161022f57806318160ddd14610384578063203e727e146103af57806323b872dd146103d8578063313ce567146104155780633950935114610440578063476343ee1461047d57610272565b806306fdde0314610277578063095ea7b3146102a25780630f3a325f146102df57806310d5de531461031c5780631694505e1461035957610272565b3661027257005b600080fd5b34801561028357600080fd5b5061028c610a61565b6040516102999190613e5e565b60405180910390f35b3480156102ae57600080fd5b506102c960048036038101906102c49190613f28565b610af3565b6040516102d69190613f83565b60405180910390f35b3480156102eb57600080fd5b5061030660048036038101906103019190613f9e565b610b11565b6040516103139190613f83565b60405180910390f35b34801561032857600080fd5b50610343600480360381019061033e9190613f9e565b610b67565b6040516103509190613f83565b60405180910390f35b34801561036557600080fd5b5061036e610b87565b60405161037b919061402a565b60405180910390f35b34801561039057600080fd5b50610399610bab565b6040516103a69190614054565b60405180910390f35b3480156103bb57600080fd5b506103d660048036038101906103d1919061406f565b610bb5565b005b3480156103e457600080fd5b506103ff60048036038101906103fa919061409c565b610cd7565b60405161040c9190613f83565b60405180910390f35b34801561042157600080fd5b5061042a610db0565b604051610437919061410b565b60405180910390f35b34801561044c57600080fd5b5061046760048036038101906104629190613f28565b610db9565b6040516104749190613f83565b60405180910390f35b34801561048957600080fd5b50610492610e6c565b005b3480156104a057600080fd5b506104a9610ed7565b6040516104b69190614135565b60405180910390f35b3480156104cb57600080fd5b506104d4610efb565b6040516104e19190613f83565b60405180910390f35b3480156104f657600080fd5b50610511600480360381019061050c9190613f9e565b610f0e565b60405161051e9190613f83565b60405180910390f35b34801561053357600080fd5b5061054e60048036038101906105499190614298565b610f64565b005b34801561055c57600080fd5b5061057760048036038101906105729190613f9e565b611172565b005b34801561058557600080fd5b5061058e6112c9565b60405161059b9190614054565b60405180910390f35b3480156105b057600080fd5b506105cb60048036038101906105c69190613f9e565b6112cf565b6040516105d89190614054565b60405180910390f35b3480156105ed57600080fd5b506105f6611317565b005b34801561060457600080fd5b5061060d61146f565b60405161061a9190613f83565b60405180910390f35b34801561062f57600080fd5b5061064a6004803603810190610645919061430d565b61152a565b005b34801561065857600080fd5b50610673600480360381019061066e919061434d565b61161c565b005b34801561068157600080fd5b5061069c60048036038101906106979190614298565b611736565b005b3480156106aa57600080fd5b506106b3611862565b005b3480156106c157600080fd5b506106ca61191d565b6040516106d79190614135565b60405180910390f35b3480156106ec57600080fd5b506106f5611947565b6040516107029190613e5e565b60405180910390f35b34801561071757600080fd5b50610732600480360381019061072d919061430d565b6119d9565b005b34801561074057600080fd5b5061075b60048036038101906107569190613f28565b611b0d565b6040516107689190613f83565b60405180910390f35b34801561077d57600080fd5b5061079860048036038101906107939190613f28565b611bda565b6040516107a59190613f83565b60405180910390f35b3480156107ba57600080fd5b506107d560048036038101906107d09190613f9e565b611bf8565b6040516107e29190613f83565b60405180910390f35b3480156107f757600080fd5b50610800611c18565b60405161080d9190613f83565b60405180910390f35b34801561082257600080fd5b5061083d6004803603810190610838919061430d565b611c2b565b005b34801561084b57600080fd5b506108666004803603810190610861919061434d565b611d6b565b005b34801561087457600080fd5b5061088f600480360381019061088a919061406f565b611e3f565b005b34801561089d57600080fd5b506108a6611f61565b6040516108b39190613f83565b60405180910390f35b3480156108c857600080fd5b506108d1611f74565b6040516108de9190614054565b60405180910390f35b3480156108f357600080fd5b5061090e6004803603810190610909919061406f565b611f7a565b60405161091b9190613f83565b60405180910390f35b34801561093057600080fd5b506109396120ea565b6040516109469190614054565b60405180910390f35b34801561095b57600080fd5b50610976600480360381019061097191906143a0565b6120f0565b6040516109839190614054565b60405180910390f35b34801561099857600080fd5b506109a1612177565b6040516109ae9190614054565b60405180910390f35b3480156109c357600080fd5b506109cc61217d565b6040516109d99190613f83565b60405180910390f35b3480156109ee57600080fd5b506109f7612238565b604051610a049190614135565b60405180910390f35b348015610a1957600080fd5b50610a346004803603810190610a2f9190613f9e565b61225e565b005b348015610a4257600080fd5b50610a4b612425565b604051610a589190614054565b60405180910390f35b606060038054610a709061440f565b80601f0160208091040260200160405190810160405280929190818152602001828054610a9c9061440f565b8015610ae95780601f10610abe57610100808354040283529160200191610ae9565b820191906000526020600020905b815481529060010190602001808311610acc57829003601f168201915b5050505050905090565b6000610b07610b00612489565b8484612491565b6001905092915050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601c6020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610bbd612489565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c439061448d565b60405180910390fd5b633b9aca006103e86001610c5e610bab565b610c6891906144dc565b610c729190614565565b610c7c9190614565565b811015610cbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb590614608565b60405180910390fd5b633b9aca0081610cce91906144dc565b600a8190555050565b6000610ce484848461265c565b610da584610cf0612489565b610da0856040518060600160405280602881526020016153de60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d56612489565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133ce9092919063ffffffff16565b612491565b600190509392505050565b60006009905090565b6000610e62610dc6612489565b84610e5d8560016000610dd7612489565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461242b90919063ffffffff16565b612491565b6001905092915050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610ed4573d6000803e3d6000fd5b50565b7f0000000000000000000000009470fe31404ce44d8ec66c5c028c55cf790259e381565b600d60009054906101000a900460ff1681565b6000601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610f6c612489565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ffb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff29061448d565b60405180910390fd5b60005b815181101561116e577f0000000000000000000000009470fe31404ce44d8ec66c5c028c55cf790259e373ffffffffffffffffffffffffffffffffffffffff1682828151811061105157611050614628565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16141580156110e357507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168282815181106110c2576110c1614628565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614155b1561115b5760016006600084848151811061110157611100614628565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b808061116690614657565b915050610ffe565b5050565b61117a612489565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611209576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112009061448d565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f5deb5ef622431f0df5a39b72dd556892f68ba42aa0f3aaf0800e166ce866492860405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60145481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61131f612489565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a59061448d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000611479612489565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611508576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ff9061448d565b60405180910390fd5b6000600d60006101000a81548160ff0219169083151502179055506001905090565b611532612489565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b89061448d565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611624612489565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116aa9061448d565b60405180910390fd5b8260118190555081601281905550806013819055506013546012546011546116db91906146a0565b6116e591906146a0565b601081905550600a6010541115611731576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172890614742565b60405180910390fd5b505050565b61173e612489565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c49061448d565b60405180910390fd5b60005b815181101561185e576000600660008484815181106117f2576117f1614628565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061185690614657565b9150506117d0565b5050565b61186a612489565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f09061448d565b60405180910390fd5b6001600d60016101000a81548160ff02191690831515021790555042600881905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546119569061440f565b80601f01602080910402602001604051908101604052809291908181526020018280546119829061440f565b80156119cf5780601f106119a4576101008083540402835291602001916119cf565b820191906000526020600020905b8154815290600101906020018083116119b257829003601f168201915b5050505050905090565b6119e1612489565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a679061448d565b60405180910390fd5b7f0000000000000000000000009470fe31404ce44d8ec66c5c028c55cf790259e373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611aff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af6906147d4565b60405180910390fd5b611b098282613432565b5050565b6000611bd0611b1a612489565b84611bcb856040518060600160405280602581526020016154066025913960016000611b44612489565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133ce9092919063ffffffff16565b612491565b6001905092915050565b6000611bee611be7612489565b848461265c565b6001905092915050565b601d6020528060005260406000206000915054906101000a900460ff1681565b600d60019054906101000a900460ff1681565b611c33612489565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb99061448d565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611d5f9190613f83565b60405180910390a25050565b611d73612489565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df99061448d565b60405180910390fd5b826015819055508160168190555080601781905550601754601654601554611e2a91906146a0565b611e3491906146a0565b601481905550505050565b611e47612489565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ed6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ecd9061448d565b60405180910390fd5b633b9aca006103e86005611ee8610bab565b611ef291906144dc565b611efc9190614565565b611f069190614565565b811015611f48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3f90614866565b60405180910390fd5b633b9aca0081611f5891906144dc565b600c8190555050565b600f60009054906101000a900460ff1681565b600a5481565b6000611f84612489565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200a9061448d565b60405180910390fd5b620186a06001612021610bab565b61202b91906144dc565b6120359190614565565b821015612077576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206e906148f8565b60405180910390fd5b6103e86005612084610bab565b61208e91906144dc565b6120989190614565565b8211156120da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d19061498a565b60405180910390fd5b81600b8190555060019050919050565b60105481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600b5481565b6000612187612489565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220d9061448d565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055506001905090565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612266612489565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ec9061448d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612365576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235c90614a1c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c5481565b600080828461243a91906146a0565b90508381101561247f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247690614a88565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612501576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f890614b1a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612571576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256890614bac565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161264f9190614054565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c390614c3e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561273c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273390614cd0565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156127c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c090614d88565b60405180910390fd5b60008114156127e3576127de838360006134d3565b6133c9565b600854421415612846576001600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b600d60009054906101000a900460ff1615612f095761286361191d565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156128d157506128a161191d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561290a5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612944575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561295d5750600760009054906101000a900460ff16155b15612f0857600d60019054906101000a900460ff16612a5757601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612a175750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612a56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4d90614df4565b60405180910390fd5b5b600f60009054906101000a900460ff1615612c1f57612a7461191d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612afb57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b5357507f0000000000000000000000009470fe31404ce44d8ec66c5c028c55cf790259e373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612c1e5743600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612bd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd090614eac565b60405180910390fd5b43600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612cc25750601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d6957600a54811115612d0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0390614f3e565b60405180910390fd5b600c54612d18836112cf565b82612d2391906146a0565b1115612d64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5b90614faa565b60405180910390fd5b612f07565b601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e0c5750601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e5b57600a54811115612e56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e4d9061503c565b60405180910390fd5b612f06565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612f0557600c54612eb8836112cf565b82612ec391906146a0565b1115612f04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612efb90614faa565b60405180910390fd5b5b5b5b5b5b6000612f14306112cf565b90506000600b548210159050808015612f3a5750600760009054906101000a900460ff16155b8015612f905750601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612fe65750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561303c5750601b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613080576001600760006101000a81548160ff021916908315150217905550613064613768565b6000600760006101000a81548160ff0219169083151502179055505b6000600760009054906101000a900460ff16159050601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806131365750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561314057600090505b600081156133b957601d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131a357506000601454115b15613270576131d060646131c26014548861393090919063ffffffff16565b6139ab90919063ffffffff16565b9050601454601654826131e391906144dc565b6131ed9190614565565b601960008282546131fe91906146a0565b925050819055506014546017548261321691906144dc565b6132209190614565565b601a600082825461323191906146a0565b925050819055506014546015548261324991906144dc565b6132539190614565565b6018600082825461326491906146a0565b92505081905550613395565b601d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156132cb57506000601054115b15613394576132f860646132ea6010548861393090919063ffffffff16565b6139ab90919063ffffffff16565b90506010546012548261330b91906144dc565b6133159190614565565b6019600082825461332691906146a0565b925050819055506010546013548261333e91906144dc565b6133489190614565565b601a600082825461335991906146a0565b925050819055506010546011548261337191906144dc565b61337b9190614565565b6018600082825461338c91906146a0565b925050819055505b5b60008111156133aa576133a98730836134d3565b5b80856133b6919061505c565b94505b6133c48787876134d3565b505050505b505050565b6000838311158290613416576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161340d9190613e5e565b60405180910390fd5b5060008385613425919061505c565b9050809150509392505050565b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613543576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161353a90614c3e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156135b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135aa90614cd0565b60405180910390fd5b6135be8383836139f5565b613629816040518060600160405280602681526020016153b8602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133ce9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506136bc816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461242b90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161375b9190614054565b60405180910390a3505050565b6000613773306112cf565b90506000601a5460185460195461378a91906146a0565b61379491906146a0565b905060008214806137a55750600081145b156137b157505061392e565b6014600b546137c091906144dc565b8211156137d9576014600b546137d691906144dc565b91505b6000600282601954856137ec91906144dc565b6137f69190614565565b6138009190614565565b9050600061381782856139fa90919063ffffffff16565b9050600047905061382782613a44565b600061383c82476139fa90919063ffffffff16565b90506000613867866138596018548561393090919063ffffffff16565b6139ab90919063ffffffff16565b9050600061389287613884601a548661393090919063ffffffff16565b6139ab90919063ffffffff16565b905060008183856138a3919061505c565b6138ad919061505c565b9050600060198190555060006018819055506000601a819055506000871180156138d75750600081115b15613924576138e68782613c81565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561868260195460405161391b93929190615090565b60405180910390a15b5050505050505050505b565b60008083141561394357600090506139a5565b6000828461395191906144dc565b90508284826139609190614565565b146139a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161399790615139565b60405180910390fd5b809150505b92915050565b60006139ed83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613d62565b905092915050565b505050565b6000613a3c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506133ce565b905092915050565b6000600267ffffffffffffffff811115613a6157613a60614155565b5b604051908082528060200260200182016040528015613a8f5781602001602082028036833780820191505090505b5090503081600081518110613aa757613aa6614628565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b70919061516e565b81600181518110613b8457613b83614628565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613be9307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612491565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613c4b959493929190615294565b600060405180830381600087803b158015613c6557600080fd5b505af1158015613c79573d6000803e3d6000fd5b505050505050565b613cac307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612491565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613cf661191d565b426040518863ffffffff1660e01b8152600401613d18969594939291906152ee565b60606040518083038185885af1158015613d36573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613d5b9190615364565b5050505050565b60008083118290613da9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613da09190613e5e565b60405180910390fd5b5060008385613db89190614565565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613dff578082015181840152602081019050613de4565b83811115613e0e576000848401525b50505050565b6000601f19601f8301169050919050565b6000613e3082613dc5565b613e3a8185613dd0565b9350613e4a818560208601613de1565b613e5381613e14565b840191505092915050565b60006020820190508181036000830152613e788184613e25565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613ebf82613e94565b9050919050565b613ecf81613eb4565b8114613eda57600080fd5b50565b600081359050613eec81613ec6565b92915050565b6000819050919050565b613f0581613ef2565b8114613f1057600080fd5b50565b600081359050613f2281613efc565b92915050565b60008060408385031215613f3f57613f3e613e8a565b5b6000613f4d85828601613edd565b9250506020613f5e85828601613f13565b9150509250929050565b60008115159050919050565b613f7d81613f68565b82525050565b6000602082019050613f986000830184613f74565b92915050565b600060208284031215613fb457613fb3613e8a565b5b6000613fc284828501613edd565b91505092915050565b6000819050919050565b6000613ff0613feb613fe684613e94565b613fcb565b613e94565b9050919050565b600061400282613fd5565b9050919050565b600061401482613ff7565b9050919050565b61402481614009565b82525050565b600060208201905061403f600083018461401b565b92915050565b61404e81613ef2565b82525050565b60006020820190506140696000830184614045565b92915050565b60006020828403121561408557614084613e8a565b5b600061409384828501613f13565b91505092915050565b6000806000606084860312156140b5576140b4613e8a565b5b60006140c386828701613edd565b93505060206140d486828701613edd565b92505060406140e586828701613f13565b9150509250925092565b600060ff82169050919050565b614105816140ef565b82525050565b600060208201905061412060008301846140fc565b92915050565b61412f81613eb4565b82525050565b600060208201905061414a6000830184614126565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61418d82613e14565b810181811067ffffffffffffffff821117156141ac576141ab614155565b5b80604052505050565b60006141bf613e80565b90506141cb8282614184565b919050565b600067ffffffffffffffff8211156141eb576141ea614155565b5b602082029050602081019050919050565b600080fd5b600061421461420f846141d0565b6141b5565b90508083825260208201905060208402830185811115614237576142366141fc565b5b835b81811015614260578061424c8882613edd565b845260208401935050602081019050614239565b5050509392505050565b600082601f83011261427f5761427e614150565b5b813561428f848260208601614201565b91505092915050565b6000602082840312156142ae576142ad613e8a565b5b600082013567ffffffffffffffff8111156142cc576142cb613e8f565b5b6142d88482850161426a565b91505092915050565b6142ea81613f68565b81146142f557600080fd5b50565b600081359050614307816142e1565b92915050565b6000806040838503121561432457614323613e8a565b5b600061433285828601613edd565b9250506020614343858286016142f8565b9150509250929050565b60008060006060848603121561436657614365613e8a565b5b600061437486828701613f13565b935050602061438586828701613f13565b925050604061439686828701613f13565b9150509250925092565b600080604083850312156143b7576143b6613e8a565b5b60006143c585828601613edd565b92505060206143d685828601613edd565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061442757607f821691505b6020821081141561443b5761443a6143e0565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614477602083613dd0565b915061448282614441565b602082019050919050565b600060208201905081810360008301526144a68161446a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006144e782613ef2565b91506144f283613ef2565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561452b5761452a6144ad565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061457082613ef2565b915061457b83613ef2565b92508261458b5761458a614536565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b60006145f2602f83613dd0565b91506145fd82614596565b604082019050919050565b60006020820190508181036000830152614621816145e5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061466282613ef2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614695576146946144ad565b5b600182019050919050565b60006146ab82613ef2565b91506146b683613ef2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156146eb576146ea6144ad565b5b828201905092915050565b7f4d757374206b656570206665657320617420313025206f72206c657373000000600082015250565b600061472c601d83613dd0565b9150614737826146f6565b602082019050919050565b6000602082019050818103600083015261475b8161471f565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006147be603983613dd0565b91506147c982614762565b604082019050919050565b600060208201905081810360008301526147ed816147b1565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614850602483613dd0565b915061485b826147f4565b604082019050919050565b6000602082019050818103600083015261487f81614843565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006148e2603583613dd0565b91506148ed82614886565b604082019050919050565b60006020820190508181036000830152614911816148d5565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614974603483613dd0565b915061497f82614918565b604082019050919050565b600060208201905081810360008301526149a381614967565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614a06602683613dd0565b9150614a11826149aa565b604082019050919050565b60006020820190508181036000830152614a35816149f9565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614a72601b83613dd0565b9150614a7d82614a3c565b602082019050919050565b60006020820190508181036000830152614aa181614a65565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614b04602483613dd0565b9150614b0f82614aa8565b604082019050919050565b60006020820190508181036000830152614b3381614af7565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614b96602283613dd0565b9150614ba182614b3a565b604082019050919050565b60006020820190508181036000830152614bc581614b89565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614c28602583613dd0565b9150614c3382614bcc565b604082019050919050565b60006020820190508181036000830152614c5781614c1b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614cba602383613dd0565b9150614cc582614c5e565b604082019050919050565b60006020820190508181036000830152614ce981614cad565b9050919050565b7f596f7572206164647265737320686173206265656e206d61726b65642061732060008201527f6120736e697065722c20796f752061726520756e61626c6520746f207472616e60208201527f73666572206f7220737761702e00000000000000000000000000000000000000604082015250565b6000614d72604d83613dd0565b9150614d7d82614cf0565b606082019050919050565b60006020820190508181036000830152614da181614d65565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614dde601683613dd0565b9150614de982614da8565b602082019050919050565b60006020820190508181036000830152614e0d81614dd1565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000614e96604983613dd0565b9150614ea182614e14565b606082019050919050565b60006020820190508181036000830152614ec581614e89565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614f28603583613dd0565b9150614f3382614ecc565b604082019050919050565b60006020820190508181036000830152614f5781614f1b565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614f94601383613dd0565b9150614f9f82614f5e565b602082019050919050565b60006020820190508181036000830152614fc381614f87565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000615026603683613dd0565b915061503182614fca565b604082019050919050565b6000602082019050818103600083015261505581615019565b9050919050565b600061506782613ef2565b915061507283613ef2565b925082821015615085576150846144ad565b5b828203905092915050565b60006060820190506150a56000830186614045565b6150b26020830185614045565b6150bf6040830184614045565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615123602183613dd0565b915061512e826150c7565b604082019050919050565b6000602082019050818103600083015261515281615116565b9050919050565b60008151905061516881613ec6565b92915050565b60006020828403121561518457615183613e8a565b5b600061519284828501615159565b91505092915050565b6000819050919050565b60006151c06151bb6151b68461519b565b613fcb565b613ef2565b9050919050565b6151d0816151a5565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61520b81613eb4565b82525050565b600061521d8383615202565b60208301905092915050565b6000602082019050919050565b6000615241826151d6565b61524b81856151e1565b9350615256836151f2565b8060005b8381101561528757815161526e8882615211565b975061527983615229565b92505060018101905061525a565b5085935050505092915050565b600060a0820190506152a96000830188614045565b6152b660208301876151c7565b81810360408301526152c88186615236565b90506152d76060830185614126565b6152e46080830184614045565b9695505050505050565b600060c0820190506153036000830189614126565b6153106020830188614045565b61531d60408301876151c7565b61532a60608301866151c7565b6153376080830185614126565b61534460a0830184614045565b979650505050505050565b60008151905061535e81613efc565b92915050565b60008060006060848603121561537d5761537c613e8a565b5b600061538b8682870161534f565b935050602061539c8682870161534f565b92505060406153ad8682870161534f565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212204a0c5ce7f25fb82a9154b001ba9b7d71cd8b381c3ae1f9f1fe56f767749219a964736f6c634300080b0033

Deployed Bytecode Sourcemap

17539:15111:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4958:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5871:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25553:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18891:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17626:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5278:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22797:230;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6048:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5178:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6411:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32508:102;;;;;;;;;;;;;:::i;:::-;;17684:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18006:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24914:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25051:294;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24749:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18469:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5394:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10913:148;;;;;;;;;;;;;:::i;:::-;;22007:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23256:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23412:369;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25357:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21828:123;;;;;;;;;;;;;:::i;:::-;;10699:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5066:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24297:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6637:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5529:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19113:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18046:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24107:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23793:306;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23035:209;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18270:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17883:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22403:382;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18318:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5712:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17925:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22193:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17846:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11069:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17965:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4958:100;5012:13;5045:5;5038:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4958:100;:::o;5871:169::-;5954:4;5971:39;5980:12;:10;:12::i;:::-;5994:7;6003:6;5971:8;:39::i;:::-;6028:4;6021:11;;5871:169;;;;:::o;25553:100::-;25606:4;25630:9;:15;25640:4;25630:15;;;;;;;;;;;;;;;;;;;;;;;;;25623:22;;25553:100;;;:::o;18891:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;17626:51::-;;;:::o;5278:108::-;5339:7;5366:12;;5359:19;;5278:108;:::o;22797:230::-;10836:12;:10;:12::i;:::-;10826:22;;:6;;;;;;;;;;;:22;;;10818:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22918:3:::1;22910:4;22906:1;22890:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;22889:32;;;;:::i;:::-;22879:6;:42;;22871:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;23016:3;23007:6;:12;;;;:::i;:::-;22984:20;:35;;;;22797:230:::0;:::o;6048:355::-;6188:4;6205:36;6215:6;6223:9;6234:6;6205:9;:36::i;:::-;6252:121;6261:6;6269:12;:10;:12::i;:::-;6283:89;6321:6;6283:89;;;;;;;;;;;;;;;;;:11;:19;6295:6;6283:19;;;;;;;;;;;;;;;:33;6303:12;:10;:12::i;:::-;6283:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;6252:8;:121::i;:::-;6391:4;6384:11;;6048:355;;;;;:::o;5178:92::-;5236:5;5261:1;5254:8;;5178:92;:::o;6411:218::-;6499:4;6516:83;6525:12;:10;:12::i;:::-;6539:7;6548:50;6587:10;6548:11;:25;6560:12;:10;:12::i;:::-;6548:25;;;;;;;;;;;;;;;:34;6574:7;6548:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;6516:8;:83::i;:::-;6617:4;6610:11;;6411:218;;;;:::o;32508:102::-;32560:9;;;;;;;;;;;32552:27;;:50;32580:21;32552:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32508:102::o;17684:38::-;;;:::o;18006:33::-;;;;;;;;;;;;;:::o;24914:125::-;24979:4;25003:19;:28;25023:7;25003:28;;;;;;;;;;;;;;;;;;;;;;;;;24996:35;;24914:125;;;:::o;25051:294::-;10836:12;:10;:12::i;:::-;10826:22;;:6;;;;;;;;;;;:22;;;10818:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25133:6:::1;25128:210;25149:8;:15;25145:1;:19;25128:210;;;25205:13;25190:28;;:8;25199:1;25190:11;;;;;;;;:::i;:::-;;;;;;;;:28;;;;:71;;;;;25245:15;25222:39;;:8;25231:1;25222:11;;;;;;;;:::i;:::-;;;;;;;;:39;;;;25190:71;25186:141;;;25307:4;25282:9;:22;25292:8;25301:1;25292:11;;;;;;;;:::i;:::-;;;;;;;;25282:22;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;25186:141;25166:3;;;;;:::i;:::-;;;;25128:210;;;;25051:294:::0;:::o;24749:157::-;10836:12;:10;:12::i;:::-;10826:22;;:6;;;;;;;;;;;:22;;;10818:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24856:9:::1;;;;;;;;;;;24828:38;;24845:9;24828:38;;;;;;;;;;;;24889:9;24877;;:21;;;;;;;;;;;;;;;;;;24749:157:::0;:::o;18469:28::-;;;;:::o;5394:127::-;5468:7;5495:9;:18;5505:7;5495:18;;;;;;;;;;;;;;;;5488:25;;5394:127;;;:::o;10913:148::-;10836:12;:10;:12::i;:::-;10826:22;;:6;;;;;;;;;;;:22;;;10818:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;11020:1:::1;10983:40;;11004:6;;;;;;;;;;;10983:40;;;;;;;;;;;;11051:1;11034:6;;:19;;;;;;;;;;;;;;;;;;10913:148::o:0;22007:121::-;22059:4;10836:12;:10;:12::i;:::-;10826:22;;:6;;;;;;;;;;;:22;;;10818:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22093:5:::1;22076:14;;:22;;;;;;;;;;;;;;;;;;22116:4;22109:11;;22007:121:::0;:::o;23256:144::-;10836:12;:10;:12::i;:::-;10826:22;;:6;;;;;;;;;;;:22;;;10818:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23388:4:::1;23346:31;:39;23378:6;23346:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;23256:144:::0;;:::o;23412:369::-;10836:12;:10;:12::i;:::-;10826:22;;:6;;;;;;;;;;;:22;;;10818:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23544:12:::1;23525:16;:31;;;;23586:12;23567:16;:31;;;;23622:6;23609:10;:19;;;;23692:10;;23673:16;;23654;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;23639:12;:63;;;;23737:2;23721:12;;:18;;23713:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;23412:369:::0;;;:::o;25357:184::-;10836:12;:10;:12::i;:::-;10826:22;;:6;;;;;;;;;;;:22;;;10818:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25439:6:::1;25434:100;25455:8;:15;25451:1;:19;25434:100;;;25517:5;25492:9;:22;25502:8;25511:1;25502:11;;;;;;;;:::i;:::-;;;;;;;;25492:22;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;25472:3;;;;;:::i;:::-;;;;25434:100;;;;25357:184:::0;:::o;21828:123::-;10836:12;:10;:12::i;:::-;10826:22;;:6;;;;;;;;;;;:22;;;10818:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21899:4:::1;21883:13;;:20;;;;;;;;;;;;;;;;;;21928:15;21914:11;:29;;;;21828:123::o:0;10699:79::-;10737:7;10764:6;;;;;;;;;;;10757:13;;10699:79;:::o;5066:104::-;5122:13;5155:7;5148:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5066:104;:::o;24297:244::-;10836:12;:10;:12::i;:::-;10826:22;;:6;;;;;;;;;;;:22;;;10818:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24404:13:::1;24396:21;;:4;:21;;;;24388:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;24492:41;24521:4;24527:5;24492:28;:41::i;:::-;24297:244:::0;;:::o;6637:269::-;6730:4;6747:129;6756:12;:10;:12::i;:::-;6770:7;6779:96;6818:15;6779:96;;;;;;;;;;;;;;;;;:11;:25;6791:12;:10;:12::i;:::-;6779:25;;;;;;;;;;;;;;;:34;6805:7;6779:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;6747:8;:129::i;:::-;6894:4;6887:11;;6637:269;;;;:::o;5529:175::-;5615:4;5632:42;5642:12;:10;:12::i;:::-;5656:9;5667:6;5632:9;:42::i;:::-;5692:4;5685:11;;5529:175;;;;:::o;19113:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;18046:33::-;;;;;;;;;;;;;:::o;24107:182::-;10836:12;:10;:12::i;:::-;10826:22;;:6;;;;;;;;;;;:22;;;10818:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24223:8:::1;24192:19;:28;24212:7;24192:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;24263:7;24247:34;;;24272:8;24247:34;;;;;;:::i;:::-;;;;;;;;24107:182:::0;;:::o;23793:306::-;10836:12;:10;:12::i;:::-;10826:22;;:6;;;;;;;;;;;:22;;;10818:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23927:12:::1;23907:17;:32;;;;23970:12;23950:17;:32;;;;24007:6;23993:11;:20;;;;24080:11;;24060:17;;24040;;:37;;;;:::i;:::-;:51;;;;:::i;:::-;24024:13;:67;;;;23793:306:::0;;;:::o;23035:209::-;10836:12;:10;:12::i;:::-;10826:22;;:6;;;;;;;;;;;:22;;;10818:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23157:3:::1;23151:4;23147:1;23131:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;23130:30;;;;:::i;:::-;23120:6;:40;;23112:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;23233:3;23224:6;:12;;;;:::i;:::-;23212:9;:24;;;;23035:209:::0;:::o;18270:39::-;;;;;;;;;;;;;:::o;17883:35::-;;;;:::o;22403:382::-;22484:4;10836:12;:10;:12::i;:::-;10826:22;;:6;;;;;;;;;;;:22;;;10818:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22541:6:::1;22537:1;22521:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;22508:9;:39;;22500:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;22656:4;22652:1;22636:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;22623:9;:37;;22615:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;22748:9;22727:18;:30;;;;22774:4;22767:11;;22403:382:::0;;;:::o;18318:27::-;;;;:::o;5712:151::-;5801:7;5828:11;:18;5840:5;5828:18;;;;;;;;;;;;;;;:27;5847:7;5828:27;;;;;;;;;;;;;;;;5821:34;;5712:151;;;;:::o;17925:33::-;;;;:::o;22193:135::-;22253:4;10836:12;:10;:12::i;:::-;10826:22;;:6;;;;;;;;;;;:22;;;10818:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22293:5:::1;22270:20;;:28;;;;;;;;;;;;;;;;;;22316:4;22309:11;;22193:135:::0;:::o;17846:24::-;;;;;;;;;;;;;:::o;11069:244::-;10836:12;:10;:12::i;:::-;10826:22;;:6;;;;;;;;;;;:22;;;10818:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;11178:1:::1;11158:22;;:8;:22;;;;11150:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;11268:8;11239:38;;11260:6;;;;;;;;;;;11239:38;;;;;;;;;;;;11297:8;11288:6;;:17;;;;;;;;;;;;;;;;;;11069:244:::0;:::o;17965:24::-;;;;:::o;8851:181::-;8909:7;8929:9;8945:1;8941;:5;;;;:::i;:::-;8929:17;;8970:1;8965;:6;;8957:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;9023:1;9016:8;;;8851:181;;;;:::o;127:98::-;180:7;207:10;200:17;;127:98;:::o;8307:380::-;8460:1;8443:19;;:5;:19;;;;8435:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8541:1;8522:21;;:7;:21;;;;8514:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8625:6;8595:11;:18;8607:5;8595:18;;;;;;;;;;;;;;;:27;8614:7;8595:27;;;;;;;;;;;;;;;:36;;;;8663:7;8647:32;;8656:5;8647:32;;;8672:6;8647:32;;;;;;:::i;:::-;;;;;;;;8307:380;;;:::o;25661:4269::-;25809:1;25793:18;;:4;:18;;;;25785:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25886:1;25872:16;;:2;:16;;;;25864:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;25948:9;:15;25958:4;25948:15;;;;;;;;;;;;;;;;;;;;;;;;;25947:16;25939:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;26081:1;26071:6;:11;26067:93;;;26099:28;26115:4;26121:2;26125:1;26099:15;:28::i;:::-;26142:7;;26067:93;26203:11;;26184:15;:30;26180:56;;;26232:4;26216:9;:13;26226:2;26216:13;;;;;;;;;;;;;;;;:20;;;;;;;;;;;;;;;;;;26180:56;26261:14;;;;;;;;;;;26257:1838;;;26322:7;:5;:7::i;:::-;26314:15;;:4;:15;;;;:49;;;;;26356:7;:5;:7::i;:::-;26350:13;;:2;:13;;;;26314:49;:86;;;;;26398:1;26384:16;;:2;:16;;;;26314:86;:128;;;;;26435:6;26421:21;;:2;:21;;;;26314:128;:159;;;;;26464:9;;;;;;;;;;;26463:10;26314:159;26292:1792;;;26513:13;;;;;;;;;;;26508:150;;26559:19;:25;26579:4;26559:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;26588:19;:23;26608:2;26588:23;;;;;;;;;;;;;;;;;;;;;;;;;26559:52;26551:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;26508:150;26816:20;;;;;;;;;;;26812:423;;;26870:7;:5;:7::i;:::-;26864:13;;:2;:13;;;;:47;;;;;26895:15;26881:30;;:2;:30;;;;26864:47;:79;;;;;26929:13;26915:28;;:2;:28;;;;26864:79;26860:356;;;27021:12;26979:28;:39;27008:9;26979:39;;;;;;;;;;;;;;;;:54;26971:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;27180:12;27138:28;:39;27167:9;27138:39;;;;;;;;;;;;;;;:54;;;;26860:356;26812:423;27305:25;:31;27331:4;27305:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;27341:31;:35;27373:2;27341:35;;;;;;;;;;;;;;;;;;;;;;;;;27340:36;27305:71;27301:768;;;27419:20;;27409:6;:30;;27401:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;27554:9;;27537:13;27547:2;27537:9;:13::i;:::-;27528:6;:22;;;;:::i;:::-;:35;;27520:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27301:768;;;27682:25;:29;27708:2;27682:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;27716:31;:37;27748:4;27716:37;;;;;;;;;;;;;;;;;;;;;;;;;27715:38;27682:71;27678:391;;;27796:20;;27786:6;:30;;27778:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;27678:391;;;27923:31;:35;27955:2;27923:35;;;;;;;;;;;;;;;;;;;;;;;;;27918:151;;28016:9;;27999:13;28009:2;27999:9;:13::i;:::-;27990:6;:22;;;;:::i;:::-;:35;;27982:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27918:151;27678:391;27301:768;26292:1792;26257:1838;28109:28;28140:24;28158:4;28140:9;:24::i;:::-;28109:55;;28175:12;28214:18;;28190:20;:42;;28175:57;;28261:7;:34;;;;;28286:9;;;;;;;;;;;28285:10;28261:34;:83;;;;;28313:25;:31;28339:4;28313:31;;;;;;;;;;;;;;;;;;;;;;;;;28312:32;28261:83;:126;;;;;28362:19;:25;28382:4;28362:25;;;;;;;;;;;;;;;;;;;;;;;;;28361:26;28261:126;:167;;;;;28405:19;:23;28425:2;28405:23;;;;;;;;;;;;;;;;;;;;;;;;;28404:24;28261:167;28243:297;;;28467:4;28455:9;;:16;;;;;;;;;;;;;;;;;;28486:10;:8;:10::i;:::-;28523:5;28511:9;;:17;;;;;;;;;;;;;;;;;;28243:297;28552:12;28568:9;;;;;;;;;;;28567:10;28552:25;;28679:19;:25;28699:4;28679:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;28708:19;:23;28728:2;28708:23;;;;;;;;;;;;;;;;;;;;;;;;;28679:52;28675:100;;;28758:5;28748:15;;28675:100;28795:12;28900:7;28896:981;;;28952:25;:29;28978:2;28952:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;29001:1;28985:13;;:17;28952:50;28948:762;;;29030:34;29060:3;29030:25;29041:13;;29030:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;29023:41;;29133:13;;29113:17;;29106:4;:24;;;;:::i;:::-;:40;;;;:::i;:::-;29083:19;;:63;;;;;;;:::i;:::-;;;;;;;;29203:13;;29189:11;;29182:4;:18;;;;:::i;:::-;:34;;;;:::i;:::-;29165:13;;:51;;;;;;;:::i;:::-;;;;;;;;29285:13;;29265:17;;29258:4;:24;;;;:::i;:::-;:40;;;;:::i;:::-;29235:19;;:63;;;;;;;:::i;:::-;;;;;;;;28948:762;;;29360:25;:31;29386:4;29360:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;29410:1;29395:12;;:16;29360:51;29356:354;;;29436:33;29465:3;29436:24;29447:12;;29436:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;29429:40;;29534:12;;29515:16;;29508:4;:23;;;;:::i;:::-;:38;;;;:::i;:::-;29485:19;;:61;;;;;;;:::i;:::-;;;;;;;;29602:12;;29589:10;;29582:4;:17;;;;:::i;:::-;:32;;;;:::i;:::-;29565:13;;:49;;;;;;;:::i;:::-;;;;;;;;29682:12;;29663:16;;29656:4;:23;;;;:::i;:::-;:38;;;;:::i;:::-;29633:19;;:61;;;;;;;:::i;:::-;;;;;;;;29356:354;28948:762;29749:1;29742:4;:8;29738:91;;;29771:42;29787:4;29801;29808;29771:15;:42::i;:::-;29738:91;29861:4;29851:14;;;;;:::i;:::-;;;28896:981;29889:33;29905:4;29911:2;29915:6;29889:15;:33::i;:::-;25774:4156;;;;25661:4269;;;;:::o;9184:192::-;9270:7;9303:1;9298;:6;;9306:12;9290:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9330:9;9346:1;9342;:5;;;;:::i;:::-;9330:17;;9367:1;9360:8;;;9184:192;;;;;:::o;24549:188::-;24666:5;24632:25;:31;24658:4;24632:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;24723:5;24689:40;;24717:4;24689:40;;;;;;;;;;;;24549:188;;:::o;6914:573::-;7072:1;7054:20;;:6;:20;;;;7046:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;7156:1;7135:23;;:9;:23;;;;7127:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;7211:47;7232:6;7240:9;7251:6;7211:20;:47::i;:::-;7291:71;7313:6;7291:71;;;;;;;;;;;;;;;;;:9;:17;7301:6;7291:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;7271:9;:17;7281:6;7271:17;;;;;;;;;;;;;;;:91;;;;7396:32;7421:6;7396:9;:20;7406:9;7396:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;7373:9;:20;7383:9;7373:20;;;;;;;;;;;;;;;:55;;;;7461:9;7444:35;;7453:6;7444:35;;;7472:6;7444:35;;;;;;:::i;:::-;;;;;;;;6914:573;;;:::o;31062:1438::-;31101:23;31127:24;31145:4;31127:9;:24::i;:::-;31101:50;;31162:25;31234:13;;31212:19;;31190;;:41;;;;:::i;:::-;:57;;;;:::i;:::-;31162:85;;31291:1;31272:15;:20;:46;;;;31317:1;31296:17;:22;31272:46;31268:59;;;31320:7;;;;31268:59;31380:2;31359:18;;:23;;;;:::i;:::-;31341:15;:41;31337:113;;;31436:2;31415:18;;:23;;;;:::i;:::-;31397:41;;31337:113;31519:23;31605:1;31585:17;31563:19;;31545:15;:37;;;;:::i;:::-;:57;;;;:::i;:::-;:61;;;;:::i;:::-;31519:87;;31617:26;31646:36;31666:15;31646;:19;;:36;;;;:::i;:::-;31617:65;;31703:25;31731:21;31703:49;;31765:37;31783:18;31765:17;:37::i;:::-;31824:18;31845:44;31871:17;31845:21;:25;;:44;;;;:::i;:::-;31824:65;;31900:23;31926:58;31966:17;31926:35;31941:19;;31926:10;:14;;:35;;;;:::i;:::-;:39;;:58;;;;:::i;:::-;31900:84;;31995:17;32015:52;32049:17;32015:29;32030:13;;32015:10;:14;;:29;;;;:::i;:::-;:33;;:52;;;;:::i;:::-;31995:72;;32078:23;32135:9;32117:15;32104:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;32078:66;;32187:1;32165:19;:23;;;;32221:1;32199:19;:23;;;;32249:1;32233:13;:17;;;;32301:1;32283:15;:19;:42;;;;;32324:1;32306:15;:19;32283:42;32279:214;;;32342:47;32356:15;32373;32342:13;:47::i;:::-;32409:72;32424:18;32444:15;32461:19;;32409:72;;;;;;;;:::i;:::-;;;;;;;;32279:214;31090:1410;;;;;;;;;31062:1438;:::o;9384:250::-;9442:7;9471:1;9466;:6;9462:47;;;9496:1;9489:8;;;;9462:47;9521:9;9537:1;9533;:5;;;;:::i;:::-;9521:17;;9566:1;9561;9557;:5;;;;:::i;:::-;:10;9549:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;9625:1;9618:8;;;9384:250;;;;;:::o;9642:132::-;9700:7;9727:39;9731:1;9734;9727:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;9720:46;;9642:132;;;;:::o;8695:125::-;;;;:::o;9040:136::-;9098:7;9125:43;9129:1;9132;9125:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;9118:50;;9040:136;;;;:::o;29938:590::-;30065:21;30103:1;30089:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30065:40;;30134:4;30116;30121:1;30116:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;30160:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30150:4;30155:1;30150:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;30195:62;30212:4;30227:15;30245:11;30195:8;:62::i;:::-;30296:15;:66;;;30377:11;30403:1;30447:4;30474;30494:15;30296:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29994:534;29938:590;:::o;30540:514::-;30689:62;30706:4;30721:15;30739:11;30689:8;:62::i;:::-;30794:15;:31;;;30833:9;30866:4;30886:11;30912:1;30955;30998:7;:5;:7::i;:::-;31020:15;30794:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;30540:514;;:::o;9782:278::-;9868:7;9900:1;9896;:5;9903:12;9888:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9927:9;9943:1;9939;:5;;;;:::i;:::-;9927:17;;10051:1;10044:8;;;9782:278;;;;;:::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:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1397:75::-;1430:6;1463:2;1457:9;1447:19;;1397:75;:::o;1478:117::-;1587:1;1584;1577:12;1601:117;1710:1;1707;1700:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:329::-;3553:6;3602:2;3590:9;3581:7;3577:23;3573:32;3570:119;;;3608:79;;:::i;:::-;3570:119;3728:1;3753:53;3798:7;3789:6;3778:9;3774:22;3753:53;:::i;:::-;3743:63;;3699:117;3494:329;;;;:::o;3829:60::-;3857:3;3878:5;3871:12;;3829:60;;;:::o;3895:142::-;3945:9;3978:53;3996:34;4005:24;4023:5;4005:24;:::i;:::-;3996:34;:::i;:::-;3978:53;:::i;:::-;3965:66;;3895:142;;;:::o;4043:126::-;4093:9;4126:37;4157:5;4126:37;:::i;:::-;4113:50;;4043:126;;;:::o;4175:153::-;4252:9;4285:37;4316:5;4285:37;:::i;:::-;4272:50;;4175:153;;;:::o;4334:185::-;4448:64;4506:5;4448:64;:::i;:::-;4443:3;4436:77;4334:185;;:::o;4525:276::-;4645:4;4683:2;4672:9;4668:18;4660:26;;4696:98;4791:1;4780:9;4776:17;4767:6;4696:98;:::i;:::-;4525:276;;;;:::o;4807:118::-;4894:24;4912:5;4894:24;:::i;:::-;4889:3;4882:37;4807:118;;:::o;4931:222::-;5024:4;5062:2;5051:9;5047:18;5039:26;;5075:71;5143:1;5132:9;5128:17;5119:6;5075:71;:::i;:::-;4931:222;;;;:::o;5159:329::-;5218:6;5267:2;5255:9;5246:7;5242:23;5238:32;5235:119;;;5273:79;;:::i;:::-;5235:119;5393:1;5418:53;5463:7;5454:6;5443:9;5439:22;5418:53;:::i;:::-;5408:63;;5364:117;5159:329;;;;:::o;5494:619::-;5571:6;5579;5587;5636:2;5624:9;5615:7;5611:23;5607:32;5604:119;;;5642:79;;:::i;:::-;5604:119;5762:1;5787:53;5832:7;5823:6;5812:9;5808:22;5787:53;:::i;:::-;5777:63;;5733:117;5889:2;5915:53;5960:7;5951:6;5940:9;5936:22;5915:53;:::i;:::-;5905:63;;5860:118;6017:2;6043:53;6088:7;6079:6;6068:9;6064:22;6043:53;:::i;:::-;6033:63;;5988:118;5494:619;;;;;:::o;6119:86::-;6154:7;6194:4;6187:5;6183:16;6172:27;;6119:86;;;:::o;6211:112::-;6294:22;6310:5;6294:22;:::i;:::-;6289:3;6282:35;6211:112;;:::o;6329:214::-;6418:4;6456:2;6445:9;6441:18;6433:26;;6469:67;6533:1;6522:9;6518:17;6509:6;6469:67;:::i;:::-;6329:214;;;;:::o;6549:118::-;6636:24;6654:5;6636:24;:::i;:::-;6631:3;6624:37;6549:118;;:::o;6673:222::-;6766:4;6804:2;6793:9;6789:18;6781:26;;6817:71;6885:1;6874:9;6870:17;6861:6;6817:71;:::i;:::-;6673:222;;;;:::o;6901:117::-;7010:1;7007;7000:12;7024:180;7072:77;7069:1;7062:88;7169:4;7166:1;7159:15;7193:4;7190:1;7183:15;7210:281;7293:27;7315:4;7293:27;:::i;:::-;7285:6;7281:40;7423:6;7411:10;7408:22;7387:18;7375:10;7372:34;7369:62;7366:88;;;7434:18;;:::i;:::-;7366:88;7474:10;7470:2;7463:22;7253:238;7210:281;;:::o;7497:129::-;7531:6;7558:20;;:::i;:::-;7548:30;;7587:33;7615:4;7607:6;7587:33;:::i;:::-;7497:129;;;:::o;7632:311::-;7709:4;7799:18;7791:6;7788:30;7785:56;;;7821:18;;:::i;:::-;7785:56;7871:4;7863:6;7859:17;7851:25;;7931:4;7925;7921:15;7913:23;;7632:311;;;:::o;7949:117::-;8058:1;8055;8048:12;8089:710;8185:5;8210:81;8226:64;8283:6;8226:64;:::i;:::-;8210:81;:::i;:::-;8201:90;;8311:5;8340:6;8333:5;8326:21;8374:4;8367:5;8363:16;8356:23;;8427:4;8419:6;8415:17;8407:6;8403:30;8456:3;8448:6;8445:15;8442:122;;;8475:79;;:::i;:::-;8442:122;8590:6;8573:220;8607:6;8602:3;8599:15;8573:220;;;8682:3;8711:37;8744:3;8732:10;8711:37;:::i;:::-;8706:3;8699:50;8778:4;8773:3;8769:14;8762:21;;8649:144;8633:4;8628:3;8624:14;8617:21;;8573:220;;;8577:21;8191:608;;8089:710;;;;;:::o;8822:370::-;8893:5;8942:3;8935:4;8927:6;8923:17;8919:27;8909:122;;8950:79;;:::i;:::-;8909:122;9067:6;9054:20;9092:94;9182:3;9174:6;9167:4;9159:6;9155:17;9092:94;:::i;:::-;9083:103;;8899:293;8822:370;;;;:::o;9198:539::-;9282:6;9331:2;9319:9;9310:7;9306:23;9302:32;9299:119;;;9337:79;;:::i;:::-;9299:119;9485:1;9474:9;9470:17;9457:31;9515:18;9507:6;9504:30;9501:117;;;9537:79;;:::i;:::-;9501:117;9642:78;9712:7;9703:6;9692:9;9688:22;9642:78;:::i;:::-;9632:88;;9428:302;9198:539;;;;:::o;9743:116::-;9813:21;9828:5;9813:21;:::i;:::-;9806:5;9803:32;9793:60;;9849:1;9846;9839:12;9793:60;9743:116;:::o;9865:133::-;9908:5;9946:6;9933:20;9924:29;;9962:30;9986:5;9962:30;:::i;:::-;9865:133;;;;:::o;10004:468::-;10069:6;10077;10126:2;10114:9;10105:7;10101:23;10097:32;10094:119;;;10132:79;;:::i;:::-;10094:119;10252:1;10277:53;10322:7;10313:6;10302:9;10298:22;10277:53;:::i;:::-;10267:63;;10223:117;10379:2;10405:50;10447:7;10438:6;10427:9;10423:22;10405:50;:::i;:::-;10395:60;;10350:115;10004:468;;;;;:::o;10478:619::-;10555:6;10563;10571;10620:2;10608:9;10599:7;10595:23;10591:32;10588:119;;;10626:79;;:::i;:::-;10588:119;10746:1;10771:53;10816:7;10807:6;10796:9;10792:22;10771:53;:::i;:::-;10761:63;;10717:117;10873:2;10899:53;10944:7;10935:6;10924:9;10920:22;10899:53;:::i;:::-;10889:63;;10844:118;11001:2;11027:53;11072:7;11063:6;11052:9;11048:22;11027:53;:::i;:::-;11017:63;;10972:118;10478:619;;;;;:::o;11103:474::-;11171:6;11179;11228:2;11216:9;11207:7;11203:23;11199:32;11196:119;;;11234:79;;:::i;:::-;11196:119;11354:1;11379:53;11424:7;11415:6;11404:9;11400:22;11379:53;:::i;:::-;11369:63;;11325:117;11481:2;11507:53;11552:7;11543:6;11532:9;11528:22;11507:53;:::i;:::-;11497:63;;11452:118;11103:474;;;;;:::o;11583:180::-;11631:77;11628:1;11621:88;11728:4;11725:1;11718:15;11752:4;11749:1;11742:15;11769:320;11813:6;11850:1;11844:4;11840:12;11830:22;;11897:1;11891:4;11887:12;11918:18;11908:81;;11974:4;11966:6;11962:17;11952:27;;11908:81;12036:2;12028:6;12025:14;12005:18;12002:38;11999:84;;;12055:18;;:::i;:::-;11999:84;11820:269;11769:320;;;:::o;12095:182::-;12235:34;12231:1;12223:6;12219:14;12212:58;12095:182;:::o;12283:366::-;12425:3;12446:67;12510:2;12505:3;12446:67;:::i;:::-;12439:74;;12522:93;12611:3;12522:93;:::i;:::-;12640:2;12635:3;12631:12;12624:19;;12283:366;;;:::o;12655:419::-;12821:4;12859:2;12848:9;12844:18;12836:26;;12908:9;12902:4;12898:20;12894:1;12883:9;12879:17;12872:47;12936:131;13062:4;12936:131;:::i;:::-;12928:139;;12655:419;;;:::o;13080:180::-;13128:77;13125:1;13118:88;13225:4;13222:1;13215:15;13249:4;13246:1;13239:15;13266:348;13306:7;13329:20;13347:1;13329:20;:::i;:::-;13324:25;;13363:20;13381:1;13363:20;:::i;:::-;13358:25;;13551:1;13483:66;13479:74;13476:1;13473:81;13468:1;13461:9;13454:17;13450:105;13447:131;;;13558:18;;:::i;:::-;13447:131;13606:1;13603;13599:9;13588:20;;13266:348;;;;:::o;13620:180::-;13668:77;13665:1;13658:88;13765:4;13762:1;13755:15;13789:4;13786:1;13779:15;13806:185;13846:1;13863:20;13881:1;13863:20;:::i;:::-;13858:25;;13897:20;13915:1;13897:20;:::i;:::-;13892:25;;13936:1;13926:35;;13941:18;;:::i;:::-;13926:35;13983:1;13980;13976:9;13971:14;;13806:185;;;;:::o;13997:234::-;14137:34;14133:1;14125:6;14121:14;14114:58;14206:17;14201:2;14193:6;14189:15;14182:42;13997:234;:::o;14237:366::-;14379:3;14400:67;14464:2;14459:3;14400:67;:::i;:::-;14393:74;;14476:93;14565:3;14476:93;:::i;:::-;14594:2;14589:3;14585:12;14578:19;;14237:366;;;:::o;14609:419::-;14775:4;14813:2;14802:9;14798:18;14790:26;;14862:9;14856:4;14852:20;14848:1;14837:9;14833:17;14826:47;14890:131;15016:4;14890:131;:::i;:::-;14882:139;;14609:419;;;:::o;15034:180::-;15082:77;15079:1;15072:88;15179:4;15176:1;15169:15;15203:4;15200:1;15193:15;15220:233;15259:3;15282:24;15300:5;15282:24;:::i;:::-;15273:33;;15328:66;15321:5;15318:77;15315:103;;;15398:18;;:::i;:::-;15315:103;15445:1;15438:5;15434:13;15427:20;;15220:233;;;:::o;15459:305::-;15499:3;15518:20;15536:1;15518:20;:::i;:::-;15513:25;;15552:20;15570:1;15552:20;:::i;:::-;15547:25;;15706:1;15638:66;15634:74;15631:1;15628:81;15625:107;;;15712:18;;:::i;:::-;15625:107;15756:1;15753;15749:9;15742:16;;15459:305;;;;:::o;15770:179::-;15910:31;15906:1;15898:6;15894:14;15887:55;15770:179;:::o;15955:366::-;16097:3;16118:67;16182:2;16177:3;16118:67;:::i;:::-;16111:74;;16194:93;16283:3;16194:93;:::i;:::-;16312:2;16307:3;16303:12;16296:19;;15955:366;;;:::o;16327:419::-;16493:4;16531:2;16520:9;16516:18;16508:26;;16580:9;16574:4;16570:20;16566:1;16555:9;16551:17;16544:47;16608:131;16734:4;16608:131;:::i;:::-;16600:139;;16327:419;;;:::o;16752:244::-;16892:34;16888:1;16880:6;16876:14;16869:58;16961:27;16956:2;16948:6;16944:15;16937:52;16752:244;:::o;17002:366::-;17144:3;17165:67;17229:2;17224:3;17165:67;:::i;:::-;17158:74;;17241:93;17330:3;17241:93;:::i;:::-;17359:2;17354:3;17350:12;17343:19;;17002:366;;;:::o;17374:419::-;17540:4;17578:2;17567:9;17563:18;17555:26;;17627:9;17621:4;17617:20;17613:1;17602:9;17598:17;17591:47;17655:131;17781:4;17655:131;:::i;:::-;17647:139;;17374:419;;;:::o;17799:223::-;17939:34;17935:1;17927:6;17923:14;17916:58;18008:6;18003:2;17995:6;17991:15;17984:31;17799:223;:::o;18028:366::-;18170:3;18191:67;18255:2;18250:3;18191:67;:::i;:::-;18184:74;;18267:93;18356:3;18267:93;:::i;:::-;18385:2;18380:3;18376:12;18369:19;;18028:366;;;:::o;18400:419::-;18566:4;18604:2;18593:9;18589:18;18581:26;;18653:9;18647:4;18643:20;18639:1;18628:9;18624:17;18617:47;18681:131;18807:4;18681:131;:::i;:::-;18673:139;;18400:419;;;:::o;18825:240::-;18965:34;18961:1;18953:6;18949:14;18942:58;19034:23;19029:2;19021:6;19017:15;19010:48;18825:240;:::o;19071:366::-;19213:3;19234:67;19298:2;19293:3;19234:67;:::i;:::-;19227:74;;19310:93;19399:3;19310:93;:::i;:::-;19428:2;19423:3;19419:12;19412:19;;19071:366;;;:::o;19443:419::-;19609:4;19647:2;19636:9;19632:18;19624:26;;19696:9;19690:4;19686:20;19682:1;19671:9;19667:17;19660:47;19724:131;19850:4;19724:131;:::i;:::-;19716:139;;19443:419;;;:::o;19868:239::-;20008:34;20004:1;19996:6;19992:14;19985:58;20077:22;20072:2;20064:6;20060:15;20053:47;19868:239;:::o;20113:366::-;20255:3;20276:67;20340:2;20335:3;20276:67;:::i;:::-;20269:74;;20352:93;20441:3;20352:93;:::i;:::-;20470:2;20465:3;20461:12;20454:19;;20113:366;;;:::o;20485:419::-;20651:4;20689:2;20678:9;20674:18;20666:26;;20738:9;20732:4;20728:20;20724:1;20713:9;20709:17;20702:47;20766:131;20892:4;20766:131;:::i;:::-;20758:139;;20485:419;;;:::o;20910:225::-;21050:34;21046:1;21038:6;21034:14;21027:58;21119:8;21114:2;21106:6;21102:15;21095:33;20910:225;:::o;21141:366::-;21283:3;21304:67;21368:2;21363:3;21304:67;:::i;:::-;21297:74;;21380:93;21469:3;21380:93;:::i;:::-;21498:2;21493:3;21489:12;21482:19;;21141:366;;;:::o;21513:419::-;21679:4;21717:2;21706:9;21702:18;21694:26;;21766:9;21760:4;21756:20;21752:1;21741:9;21737:17;21730:47;21794:131;21920:4;21794:131;:::i;:::-;21786:139;;21513:419;;;:::o;21938:177::-;22078:29;22074:1;22066:6;22062:14;22055:53;21938:177;:::o;22121:366::-;22263:3;22284:67;22348:2;22343:3;22284:67;:::i;:::-;22277:74;;22360:93;22449:3;22360:93;:::i;:::-;22478:2;22473:3;22469:12;22462:19;;22121:366;;;:::o;22493:419::-;22659:4;22697:2;22686:9;22682:18;22674:26;;22746:9;22740:4;22736:20;22732:1;22721:9;22717:17;22710:47;22774:131;22900:4;22774:131;:::i;:::-;22766:139;;22493:419;;;:::o;22918:223::-;23058:34;23054:1;23046:6;23042:14;23035:58;23127:6;23122:2;23114:6;23110:15;23103:31;22918:223;:::o;23147:366::-;23289:3;23310:67;23374:2;23369:3;23310:67;:::i;:::-;23303:74;;23386:93;23475:3;23386:93;:::i;:::-;23504:2;23499:3;23495:12;23488:19;;23147:366;;;:::o;23519:419::-;23685:4;23723:2;23712:9;23708:18;23700:26;;23772:9;23766:4;23762:20;23758:1;23747:9;23743:17;23736:47;23800:131;23926:4;23800:131;:::i;:::-;23792:139;;23519:419;;;:::o;23944:221::-;24084:34;24080:1;24072:6;24068:14;24061:58;24153:4;24148:2;24140:6;24136:15;24129:29;23944:221;:::o;24171:366::-;24313:3;24334:67;24398:2;24393:3;24334:67;:::i;:::-;24327:74;;24410:93;24499:3;24410:93;:::i;:::-;24528:2;24523:3;24519:12;24512:19;;24171:366;;;:::o;24543:419::-;24709:4;24747:2;24736:9;24732:18;24724:26;;24796:9;24790:4;24786:20;24782:1;24771:9;24767:17;24760:47;24824:131;24950:4;24824:131;:::i;:::-;24816:139;;24543:419;;;:::o;24968:224::-;25108:34;25104:1;25096:6;25092:14;25085:58;25177:7;25172:2;25164:6;25160:15;25153:32;24968:224;:::o;25198:366::-;25340:3;25361:67;25425:2;25420:3;25361:67;:::i;:::-;25354:74;;25437:93;25526:3;25437:93;:::i;:::-;25555:2;25550:3;25546:12;25539:19;;25198:366;;;:::o;25570:419::-;25736:4;25774:2;25763:9;25759:18;25751:26;;25823:9;25817:4;25813:20;25809:1;25798:9;25794:17;25787:47;25851:131;25977:4;25851:131;:::i;:::-;25843:139;;25570:419;;;:::o;25995:222::-;26135:34;26131:1;26123:6;26119:14;26112:58;26204:5;26199:2;26191:6;26187:15;26180:30;25995:222;:::o;26223:366::-;26365:3;26386:67;26450:2;26445:3;26386:67;:::i;:::-;26379:74;;26462:93;26551:3;26462:93;:::i;:::-;26580:2;26575:3;26571:12;26564:19;;26223:366;;;:::o;26595:419::-;26761:4;26799:2;26788:9;26784:18;26776:26;;26848:9;26842:4;26838:20;26834:1;26823:9;26819:17;26812:47;26876:131;27002:4;26876:131;:::i;:::-;26868:139;;26595:419;;;:::o;27020:301::-;27160:34;27156:1;27148:6;27144:14;27137:58;27229:34;27224:2;27216:6;27212:15;27205:59;27298:15;27293:2;27285:6;27281:15;27274:40;27020:301;:::o;27327:366::-;27469:3;27490:67;27554:2;27549:3;27490:67;:::i;:::-;27483:74;;27566:93;27655:3;27566:93;:::i;:::-;27684:2;27679:3;27675:12;27668:19;;27327:366;;;:::o;27699:419::-;27865:4;27903:2;27892:9;27888:18;27880:26;;27952:9;27946:4;27942:20;27938:1;27927:9;27923:17;27916:47;27980:131;28106:4;27980:131;:::i;:::-;27972:139;;27699:419;;;:::o;28124:172::-;28264:24;28260:1;28252:6;28248:14;28241:48;28124:172;:::o;28302:366::-;28444:3;28465:67;28529:2;28524:3;28465:67;:::i;:::-;28458:74;;28541:93;28630:3;28541:93;:::i;:::-;28659:2;28654:3;28650:12;28643:19;;28302:366;;;:::o;28674:419::-;28840:4;28878:2;28867:9;28863:18;28855:26;;28927:9;28921:4;28917:20;28913:1;28902:9;28898:17;28891:47;28955:131;29081:4;28955:131;:::i;:::-;28947:139;;28674:419;;;:::o;29099:297::-;29239:34;29235:1;29227:6;29223:14;29216:58;29308:34;29303:2;29295:6;29291:15;29284:59;29377:11;29372:2;29364:6;29360:15;29353:36;29099:297;:::o;29402:366::-;29544:3;29565:67;29629:2;29624:3;29565:67;:::i;:::-;29558:74;;29641:93;29730:3;29641:93;:::i;:::-;29759:2;29754:3;29750:12;29743:19;;29402:366;;;:::o;29774:419::-;29940:4;29978:2;29967:9;29963:18;29955:26;;30027:9;30021:4;30017:20;30013:1;30002:9;29998:17;29991:47;30055:131;30181:4;30055:131;:::i;:::-;30047:139;;29774:419;;;:::o;30199:240::-;30339:34;30335:1;30327:6;30323:14;30316:58;30408:23;30403:2;30395:6;30391:15;30384:48;30199:240;:::o;30445:366::-;30587:3;30608:67;30672:2;30667:3;30608:67;:::i;:::-;30601:74;;30684:93;30773:3;30684:93;:::i;:::-;30802:2;30797:3;30793:12;30786:19;;30445:366;;;:::o;30817:419::-;30983:4;31021:2;31010:9;31006:18;30998:26;;31070:9;31064:4;31060:20;31056:1;31045:9;31041:17;31034:47;31098:131;31224:4;31098:131;:::i;:::-;31090:139;;30817:419;;;:::o;31242:169::-;31382:21;31378:1;31370:6;31366:14;31359:45;31242:169;:::o;31417:366::-;31559:3;31580:67;31644:2;31639:3;31580:67;:::i;:::-;31573:74;;31656:93;31745:3;31656:93;:::i;:::-;31774:2;31769:3;31765:12;31758:19;;31417:366;;;:::o;31789:419::-;31955:4;31993:2;31982:9;31978:18;31970:26;;32042:9;32036:4;32032:20;32028:1;32017:9;32013:17;32006:47;32070:131;32196:4;32070:131;:::i;:::-;32062:139;;31789:419;;;:::o;32214:241::-;32354:34;32350:1;32342:6;32338:14;32331:58;32423:24;32418:2;32410:6;32406:15;32399:49;32214:241;:::o;32461:366::-;32603:3;32624:67;32688:2;32683:3;32624:67;:::i;:::-;32617:74;;32700:93;32789:3;32700:93;:::i;:::-;32818:2;32813:3;32809:12;32802:19;;32461:366;;;:::o;32833:419::-;32999:4;33037:2;33026:9;33022:18;33014:26;;33086:9;33080:4;33076:20;33072:1;33061:9;33057:17;33050:47;33114:131;33240:4;33114:131;:::i;:::-;33106:139;;32833:419;;;:::o;33258:191::-;33298:4;33318:20;33336:1;33318:20;:::i;:::-;33313:25;;33352:20;33370:1;33352:20;:::i;:::-;33347:25;;33391:1;33388;33385:8;33382:34;;;33396:18;;:::i;:::-;33382:34;33441:1;33438;33434:9;33426:17;;33258:191;;;;:::o;33455:442::-;33604:4;33642:2;33631:9;33627:18;33619:26;;33655:71;33723:1;33712:9;33708:17;33699:6;33655:71;:::i;:::-;33736:72;33804:2;33793:9;33789:18;33780:6;33736:72;:::i;:::-;33818;33886:2;33875:9;33871:18;33862:6;33818:72;:::i;:::-;33455:442;;;;;;:::o;33903:220::-;34043:34;34039:1;34031:6;34027:14;34020:58;34112:3;34107:2;34099:6;34095:15;34088:28;33903:220;:::o;34129:366::-;34271:3;34292:67;34356:2;34351:3;34292:67;:::i;:::-;34285:74;;34368:93;34457:3;34368:93;:::i;:::-;34486:2;34481:3;34477:12;34470:19;;34129:366;;;:::o;34501:419::-;34667:4;34705:2;34694:9;34690:18;34682:26;;34754:9;34748:4;34744:20;34740:1;34729:9;34725:17;34718:47;34782:131;34908:4;34782:131;:::i;:::-;34774:139;;34501:419;;;:::o;34926:143::-;34983:5;35014:6;35008:13;34999:22;;35030:33;35057:5;35030:33;:::i;:::-;34926:143;;;;:::o;35075:351::-;35145:6;35194:2;35182:9;35173:7;35169:23;35165:32;35162:119;;;35200:79;;:::i;:::-;35162:119;35320:1;35345:64;35401:7;35392:6;35381:9;35377:22;35345:64;:::i;:::-;35335:74;;35291:128;35075:351;;;;:::o;35432:85::-;35477:7;35506:5;35495:16;;35432:85;;;:::o;35523:158::-;35581:9;35614:61;35632:42;35641:32;35667:5;35641:32;:::i;:::-;35632:42;:::i;:::-;35614:61;:::i;:::-;35601:74;;35523:158;;;:::o;35687:147::-;35782:45;35821:5;35782:45;:::i;:::-;35777:3;35770:58;35687:147;;:::o;35840:114::-;35907:6;35941:5;35935:12;35925:22;;35840:114;;;:::o;35960:184::-;36059:11;36093:6;36088:3;36081:19;36133:4;36128:3;36124:14;36109:29;;35960:184;;;;:::o;36150:132::-;36217:4;36240:3;36232:11;;36270:4;36265:3;36261:14;36253:22;;36150:132;;;:::o;36288:108::-;36365:24;36383:5;36365:24;:::i;:::-;36360:3;36353:37;36288:108;;:::o;36402:179::-;36471:10;36492:46;36534:3;36526:6;36492:46;:::i;:::-;36570:4;36565:3;36561:14;36547:28;;36402:179;;;;:::o;36587:113::-;36657:4;36689;36684:3;36680:14;36672:22;;36587:113;;;:::o;36736:732::-;36855:3;36884:54;36932:5;36884:54;:::i;:::-;36954:86;37033:6;37028:3;36954:86;:::i;:::-;36947:93;;37064:56;37114:5;37064:56;:::i;:::-;37143:7;37174:1;37159:284;37184:6;37181:1;37178:13;37159:284;;;37260:6;37254:13;37287:63;37346:3;37331:13;37287:63;:::i;:::-;37280:70;;37373:60;37426:6;37373:60;:::i;:::-;37363:70;;37219:224;37206:1;37203;37199:9;37194:14;;37159:284;;;37163:14;37459:3;37452:10;;36860:608;;;36736:732;;;;:::o;37474:831::-;37737:4;37775:3;37764:9;37760:19;37752:27;;37789:71;37857:1;37846:9;37842:17;37833:6;37789:71;:::i;:::-;37870:80;37946:2;37935:9;37931:18;37922:6;37870:80;:::i;:::-;37997:9;37991:4;37987:20;37982:2;37971:9;37967:18;37960:48;38025:108;38128:4;38119:6;38025:108;:::i;:::-;38017:116;;38143:72;38211:2;38200:9;38196:18;38187:6;38143:72;:::i;:::-;38225:73;38293:3;38282:9;38278:19;38269:6;38225:73;:::i;:::-;37474:831;;;;;;;;:::o;38311:807::-;38560:4;38598:3;38587:9;38583:19;38575:27;;38612:71;38680:1;38669:9;38665:17;38656:6;38612:71;:::i;:::-;38693:72;38761:2;38750:9;38746:18;38737:6;38693:72;:::i;:::-;38775:80;38851:2;38840:9;38836:18;38827:6;38775:80;:::i;:::-;38865;38941:2;38930:9;38926:18;38917:6;38865:80;:::i;:::-;38955:73;39023:3;39012:9;39008:19;38999:6;38955:73;:::i;:::-;39038;39106:3;39095:9;39091:19;39082:6;39038:73;:::i;:::-;38311:807;;;;;;;;;:::o;39124:143::-;39181:5;39212:6;39206:13;39197:22;;39228:33;39255:5;39228:33;:::i;:::-;39124:143;;;;:::o;39273:663::-;39361:6;39369;39377;39426:2;39414:9;39405:7;39401:23;39397:32;39394:119;;;39432:79;;:::i;:::-;39394:119;39552:1;39577:64;39633:7;39624:6;39613:9;39609:22;39577:64;:::i;:::-;39567:74;;39523:128;39690:2;39716:64;39772:7;39763:6;39752:9;39748:22;39716:64;:::i;:::-;39706:74;;39661:129;39829:2;39855:64;39911:7;39902:6;39891:9;39887:22;39855:64;:::i;:::-;39845:74;;39800:129;39273:663;;;;;:::o

Swarm Source

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