ETH Price: $2,649.29 (+0.49%)

Token

Burn DinoLFG (BINO)
 

Overview

Max Total Supply

333,333,333 BINO

Holders

32

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
6,330,618.177177880859375 BINO

Value
$0.00
0x51035ec7dbbd4f9b92929e341edbfea0535d9327
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:
BurnDinoLFG

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-11-19
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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


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

library Address {

    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }


    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}


abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _setOwner(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _setOwner(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}




contract BurnDinoLFG is Context,IERC20, Ownable{
    using Address for address;

    string private _name = "Burn DinoLFG";
    string private _symbol = "BINO";
    uint8 private _decimals = 18;
    uint256 totalFeeFortx = 0;
    uint256 maxWalletTreshold = 3;
    uint256 maxTxTreshold = 2;
    uint256 private swapTreshold =2;

    uint256 private currentThreshold = 20; //Once the token value goes up this number can be decreased (To reduce price impact on asset)
    uint256 private _totalSupply = 333_333_333 * 10**_decimals; 
    uint256 public requiredTokensToSwap = _totalSupply * swapTreshold /1000;
    mapping (address => uint256) private _balances;
    mapping (address => bool) private _excludedFromFees;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) public automatedMarketMakerPairs;
    address _owner;
    address payable public marketingAddress = payable(0xD14a3b37Aa14bd848D9B612EAB89Fa1752d65Fc4);
    address public NOS =  (0x49642110B712C1FD7261Bc074105E9E44676c68F);
    uint256 maxWalletAmount = _totalSupply*maxWalletTreshold/100; 
    uint256 maxTxAmount = _totalSupply*maxTxTreshold/100;
    mapping (address => bool) botWallets;
    bool botTradeEnabled = false;
    bool checkWalletSize = true;
    mapping (address => bool) private _liquidityHolders;
    mapping (address => bool) private presaleAddresses;
    uint256 private buyliqFee = 1; 
    uint256 private buyprevLiqFee = 2;
    uint256 private buymktFee = 2;
    uint256 private buyPrevmktFee = 2;
    uint256 private buyNOS = 2;
    uint256 private buyprevNOS = 2;
    
    bool private tradeEnabled = false;   
    uint256 private sellliqFee = 1;
    uint256 private sellprevLiqFee = 1;
    uint256 private sellmktFee = 2;
    uint256 private sellPrevmktFee = 2;
    uint256 private sellNOS = 2;
    uint256 private sellprevNOS = 2;


    bool public inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    address public immutable deadAddress = 0x000000000000000000000000000000000000dEaD;
    uint256 private mktTokens = 0;
    uint256 private NOSTokens = 0;
    uint256 private liqTokens = 0;

    
    event SwapAndLiquify(uint256 tokensSwapped,
		uint256 ethReceived,
		uint256 tokensIntoLiquidity
	);
    event tokensSwappedDuringTokenomics(uint256 amount);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    
    // 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
    IUniswapV2Router02 _router;
    address public uniswapV2Pair;

    //Balances tracker

    modifier lockTheSwap{
		inSwapAndLiquify = true;
		_;
		inSwapAndLiquify = false;
	}
    

    constructor(){
        _balances[_msgSender()] = _totalSupply;
        //0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D mainnet and all networks
        IUniswapV2Router02 _uniRouter = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Pair = IUniswapV2Factory(_uniRouter.factory())
            .createPair(address(this), _uniRouter.WETH());
        _excludedFromFees[owner()] = true;         
        _excludedFromFees[address(this)] = true;// exclude owner and contract instance from fees
        _router = _uniRouter;
        _liquidityHolders[address(_router)] = true;
        _liquidityHolders[owner()] = true;
        _liquidityHolders[address(this)] = true;
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
        emit Transfer(address(0),_msgSender(),_totalSupply);
    }
    receive() external payable{}
    //general token data and tracking of balances to be swapped.
    function getOwner()external view returns(address){
            return owner();
    }
    function currentmktTokens() external view returns (uint256){
            return mktTokens;
     }
     function currentPZTokens() external view returns (uint256){
            return NOSTokens;
     }
     function currentLiqTokens() external view returns (uint256){
            return liqTokens;
     }

     function totalSupply() external view override returns (uint256){
            return _totalSupply;
     }
   
    function balanceOf(address account) public view override returns (uint256){
        return _balances[account];
    }
   
    function transfer(address recipient, uint256 amount) external override returns (bool){
            _transfer(_msgSender(),recipient,amount);
            return true;

    }
   
    function allowance(address owner, address spender) external view override returns (uint256){
            return _allowances[owner][spender];
    }
 
    function approve(address spender, uint256 amount) external override returns (bool){
            _approve(_msgSender(),spender,amount);
            return true;
    }

    function decimals()external view returns(uint256){
        return _decimals;
    }
    function name() external view returns (string memory) {
		return _name;
	}
    function symbol() external view returns (string memory){
        return _symbol;
    }
        function updateMaxTxTreshold(uint256 newVal) public onlyOwner{
        maxTxTreshold = newVal;
        maxTxAmount = _totalSupply*maxTxTreshold/100;// 1%

    }
     function updateMaxWalletTreshold(uint256 newVal) public onlyOwner{
        maxWalletTreshold = newVal;
        maxWalletAmount = _totalSupply*maxWalletTreshold/100;

    }
    

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

    function addBotWallet (address payable detectedBot, bool isBot) public onlyOwner{
        botWallets[detectedBot] = isBot;
    }
    function currentbuyliqFee() public view returns (uint256){
            return buyliqFee;
    }
    function currentbuymktfee() public view returns (uint256){
            return buymktFee;
    }
    function currentbuyNOSfee() public view returns (uint256){
            return buyNOS;
    }

      function currentsellLiqFee() public view returns (uint256){
            return sellliqFee;
    }
    function currentsellmktfee() public view returns (uint256){
            return sellmktFee;
    }
    function currentsellyNOSfee() public view returns (uint256){
            return sellNOS;
    }
    function currentThresholdInt()public view returns (uint256){
        return currentThreshold;
    }
    function isExcluded(address toCheck)public view returns (bool){
            return _excludedFromFees[toCheck];
    }

    function _transfer(address from, address to, uint256 amount) internal{
        
        require(from != address(0), "ERC20: transfer from the zero address");
		require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0,"ERC20: transfered amount must be greater than zero");
        uint256 senderBalance = _balances[from];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        if(tradeEnabled == false){
            require(_liquidityHolders[to] || _liquidityHolders[from],"Cant trade, trade is disabled");
        }
        if(_liquidityHolders[to]==false && _liquidityHolders[from]==false){
        require(amount <= maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
        }
        uint256 inContractBalance = balanceOf(address(this));
        if(inContractBalance >=requiredTokensToSwap && 
			!inSwapAndLiquify && 
			from != uniswapV2Pair && 
			swapAndLiquifyEnabled){
                if(inContractBalance >= requiredTokensToSwap ){
                    inContractBalance = requiredTokensToSwap;
                    swapForTokenomics(inContractBalance);
                }
            }

            bool takeFees = true;
            
            
            if(_excludedFromFees[from] || _excludedFromFees[to]) {
                totalFeeFortx = 0;
                takeFees = false;
               

            }
            uint256 mktAmount = 0;
            uint256 NOSAmount = 0; // Amount to be added to prize pool.
		    uint256 liqAmount = 0;  // Amount to be added to liquidity.

            if(takeFees){
                
                //bot fees
                if(botWallets[from] == true||botWallets[to]==true){
                    revert("No bots allowed to trade");
                }
                //Selling fees
                if (automatedMarketMakerPairs[to] && to != address(_router) ){
                        totalFeeFortx = 0;
                        mktAmount = amount * sellmktFee/100;
                        liqAmount = amount * sellliqFee/100;
                        NOSAmount = amount * sellNOS/100;
                        totalFeeFortx = mktAmount + liqAmount + NOSAmount;
                }
                //Buy Fees
                else if(automatedMarketMakerPairs[from] && from != address(_router)) {
                
                    totalFeeFortx = 0;
                    mktAmount = amount * buymktFee/100;
                    liqAmount = amount * buyliqFee/100;
                    NOSAmount = amount * buyNOS/100;
                    totalFeeFortx = mktAmount + liqAmount + NOSAmount;
                }

                
            }

            _balances[from] = senderBalance - amount;
            _balances[to] += amount - mktAmount - NOSAmount - liqAmount;

          if(liqAmount != 0) {
			_balances[address(this)] += totalFeeFortx;
			//tLiqTotal += liqAmount;
            liqTokens += liqAmount;
            NOSTokens += NOSAmount;
            mktTokens += mktAmount;
			emit Transfer(from, address(this), totalFeeFortx);
            
		    }
            emit Transfer(from, to,amount-totalFeeFortx);
            
        
    }
    function swapForTokenomics(uint256 balanceToswap) private lockTheSwap{
        swapAndLiquify(liqTokens);
        swapTokensForETHmkt(mktTokens);
        SwapForNOS(NOSTokens);
        uint256 remainingETHBalance = address(this).balance;
        processNOS(remainingETHBalance,NOS);
        emit tokensSwappedDuringTokenomics(balanceToswap);
        mktTokens = 0;
        NOSTokens = 0;
        liqTokens = 0;
    }
     function addLimitExempt(address newAddress)external onlyOwner{
        _liquidityHolders[newAddress] = true;
     
    }
    function swapTokensForETHmkt(uint256 amount)private {
        address[] memory path = new address[](2);
		path[0] = address(this);
		path[1] = _router.WETH();
		_approve(address(this), address(_router), amount);

		
		_router.swapExactTokensForETHSupportingFeeOnTransferTokens(
			amount,
			0, // Accept any amount of ETH.
			path,
			marketingAddress,
			block.timestamp
		);

    }
      function SwapForNOS(uint256 amount)private {
        address[] memory path = new address[](2);
		path[0] = address(this);
		path[1] = _router.WETH();
		_approve(address(this), address(_router), amount);

		
		_router.swapExactTokensForETHSupportingFeeOnTransferTokens(
			amount,
			0, // Accept any amount of ETH.
			path,
			address(this),
			block.timestamp
		);
        

    }
    function updateNOS(address newToken) public onlyOwner{
        NOS = newToken;
    }
    function processNOS(uint256 ethAmount, address rewardToken) internal {
        // generate the uniswap pair path of weth -> eth
        address[] memory path = new address[](2);
        path[0] = _router.WETH();
        path[1] = rewardToken;

        // make the swap
        _router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: ethAmount}(
            0, // accept any amount of Ethereum
            path,
            address(this),
            block.timestamp
        );
    }

    function unstuckTokens (IERC20 tokenToClear, address payable destination, uint256 amount) public onlyOwner{
        //uint256 contractBalance = tokenToClear.balanceOf(address(this));
        tokenToClear.transfer(destination, amount);
    }

    function unstuckETH(address payable destination) public onlyOwner{
        uint256 ethBalance = address(this).balance;
        payable(destination).transfer(ethBalance);
    }

    function tradeStatus(bool status) public onlyOwner{
        tradeEnabled = status;
    }

    function swapAndLiquify(uint256 liqTokensPassed) private {
		uint256 half = liqTokensPassed / 2;
		uint256 otherHalf = liqTokensPassed - half;
		uint256 initialBalance = address(this).balance;

		swapTokensForETH(half);
		uint256 newBalance = address(this).balance - (initialBalance); 

		addLiquidity(otherHalf, newBalance);
		emit SwapAndLiquify(half,newBalance,otherHalf);
	}

    function swapTokensForETH(uint256 tokenAmount) private{
		address[] memory path = new address[](2);
		path[0] = address(this);
		path[1] = _router.WETH();
		_approve(address(this), address(_router), tokenAmount);

		
		_router.swapExactTokensForETHSupportingFeeOnTransferTokens(
			tokenAmount,
			0, // Accept any amount of ETH.
			path,
			address(this),
			block.timestamp
		);
	}
    
    function addLiquidity(uint256 tokenAmount,uint256 ethAmount) private{
		_approve(address(this), address(_router), tokenAmount);

		_router.addLiquidityETH{value:ethAmount}(
			address(this),
			tokenAmount,
			0,
			0,
			deadAddress,// tr
			block.timestamp
		);
	}

    function _approve(address owner,address spender, uint256 amount) internal{
        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);
    }
    //Fees related functions

    function addToExcluded(address toExclude) public onlyOwner{  
        _excludedFromFees[toExclude] = true;
    }

    function removeFromExcluded(address toRemove) public onlyOwner{
        _excludedFromFees[toRemove] = false;
    }
      function excludePresaleAddresses(address router, address presale) external onlyOwner {
        _liquidityHolders[address(router)] = true;
        _liquidityHolders[presale] = true;
        presaleAddresses[address(router)] = true;
        presaleAddresses[presale] = true;
       
    }
    function updateThreshold(uint newThreshold) public onlyOwner{
        currentThreshold = newThreshold;
    }
    function setSwapAndLiquify(bool _enabled) public onlyOwner{
            swapAndLiquifyEnabled = _enabled;
    }
    //Marketing related 

    function setMktAddress(address newAddress) external onlyOwner{
        marketingAddress = payable(newAddress);
    }
    function transferAssetsETH(address payable to, uint256 amount) internal{
            to.transfer(amount);
    }
   
    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 updatecurrentbuyliqFee(uint256 newAmount) public onlyOwner{
            buyliqFee = newAmount;
    }
    function updatecurrentbuymktfee(uint256 newAmount) public onlyOwner{
             buymktFee= newAmount;
    }
    function updatecurrentbuyNOSfee(uint256 newAmount) public onlyOwner{
             buyNOS= newAmount;
    }

      function updatecurrentsellLiqFee(uint256 newAmount) public onlyOwner{
             sellliqFee= newAmount;
    }
    function updatecurrentsellmktfee(uint256 newAmount)public onlyOwner{
             sellmktFee= newAmount;
    }
    function updatecurrentsellyNOSfee(uint256 newAmount) public onlyOwner{
             sellNOS= newAmount;
    }
    function currentMaxWallet() public view returns(uint256){
        return maxWalletAmount;
    }
    function currentMaxTx() public view returns(uint256){
        return maxTxAmount;
    }
    function updateSwapTreshold(uint256 newVal) public onlyOwner{
        swapTreshold = newVal;
        requiredTokensToSwap = _totalSupply*swapTreshold/1000;
    }
    function currentTradeStatus() public view returns (bool){
        return tradeEnabled;   
    }
    function currentSwapTreshold() public view returns(uint256){
        return swapTreshold;
    }
    function currentTokensToSwap() public view returns(uint256){
        return requiredTokensToSwap;
    }
}


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 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 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 Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"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":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"tokensSwappedDuringTokenomics","type":"event"},{"inputs":[],"name":"NOS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"detectedBot","type":"address"},{"internalType":"bool","name":"isBot","type":"bool"}],"name":"addBotWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"addLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"toExclude","type":"address"}],"name":"addToExcluded","outputs":[],"stateMutability":"nonpayable","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":"currentLiqTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentMaxTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentMaxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentPZTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentSwapTreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentThresholdInt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentTokensToSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentTradeStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentbuyNOSfee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentbuyliqFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentbuymktfee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentmktTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentsellLiqFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentsellmktfee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentsellyNOSfee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"presale","type":"address"}],"name":"excludePresaleAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"inSwapAndLiquify","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"toCheck","type":"address"}],"name":"isExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"toRemove","type":"address"}],"name":"removeFromExcluded","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"requiredTokensToSwap","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":"newAddress","type":"address"}],"name":"setMktAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquify","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[{"internalType":"bool","name":"status","type":"bool"}],"name":"tradeStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"destination","type":"address"}],"name":"unstuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenToClear","type":"address"},{"internalType":"address payable","name":"destination","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"unstuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newVal","type":"uint256"}],"name":"updateMaxTxTreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newVal","type":"uint256"}],"name":"updateMaxWalletTreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newToken","type":"address"}],"name":"updateNOS","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newVal","type":"uint256"}],"name":"updateSwapTreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newThreshold","type":"uint256"}],"name":"updateThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updatecurrentbuyNOSfee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updatecurrentbuyliqFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updatecurrentbuymktfee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updatecurrentsellLiqFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updatecurrentsellmktfee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updatecurrentsellyNOSfee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526040518060400160405280600c81526020017f4275726e2044696e6f4c464700000000000000000000000000000000000000008152506001908051906020019062000051929190620009cc565b506040518060400160405280600481526020017f42494e4f00000000000000000000000000000000000000000000000000000000815250600290805190602001906200009f929190620009cc565b506012600360006101000a81548160ff021916908360ff16021790555060006004556003600555600260065560026007556014600855600360009054906101000a900460ff16600a620000f3919062000c16565b6313de435562000104919062000c67565b6009556103e86007546009546200011c919062000c67565b62000128919062000cf7565b600a5573d14a3b37aa14bd848d9b612eab89fa1752d65fc4601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507349642110b712c1fd7261bc074105e9e44676c68f601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506064600554600954620001e9919062000c67565b620001f5919062000cf7565b60125560646006546009546200020c919062000c67565b62000218919062000cf7565b6013556000601560006101000a81548160ff0219169083151502179055506001601560016101000a81548160ff021916908315150217905550600160185560026019556002601a556002601b556002601c556002601d556000601e60006101000a81548160ff0219169083151502179055506001601f55600160205560026021556002602255600260235560026024556001602560016101000a81548160ff02191690831515021790555061dead73ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff168152506000602655600060275560006028553480156200031457600080fd5b5062000335620003296200083660201b60201c565b6200083e60201b60201c565b600954600b60006200034c6200083660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003ef573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000415919062000d99565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200047d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004a3919062000d99565b6040518363ffffffff1660e01b8152600401620004c292919062000ddc565b6020604051808303816000875af1158015620004e2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000508919062000d99565b602a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600c60006200055e6200090260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080602960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160166000602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160166000620006d86200090260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620007b6602a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200092b60201b60201c565b620007c66200083660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60095460405162000827919062000e1a565b60405180910390a35062000e9b565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b828054620009da9062000e66565b90600052602060002090601f016020900481019282620009fe576000855562000a4a565b82601f1062000a1957805160ff191683800117855562000a4a565b8280016001018555821562000a4a579182015b8281111562000a4957825182559160200191906001019062000a2c565b5b50905062000a59919062000a5d565b5090565b5b8082111562000a7857600081600090555060010162000a5e565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000b0a5780860481111562000ae25762000ae162000a7c565b5b600185161562000af25780820291505b808102905062000b028562000aab565b945062000ac2565b94509492505050565b60008262000b25576001905062000bf8565b8162000b35576000905062000bf8565b816001811462000b4e576002811462000b595762000b8f565b600191505062000bf8565b60ff84111562000b6e5762000b6d62000a7c565b5b8360020a91508482111562000b885762000b8762000a7c565b5b5062000bf8565b5060208310610133831016604e8410600b841016171562000bc95782820a90508381111562000bc35762000bc262000a7c565b5b62000bf8565b62000bd8848484600162000ab8565b9250905081840481111562000bf25762000bf162000a7c565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b600062000c238262000bff565b915062000c308362000c09565b925062000c5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000b13565b905092915050565b600062000c748262000bff565b915062000c818362000bff565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000cbd5762000cbc62000a7c565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000d048262000bff565b915062000d118362000bff565b92508262000d245762000d2362000cc8565b5b828204905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000d618262000d34565b9050919050565b62000d738162000d54565b811462000d7f57600080fd5b50565b60008151905062000d938162000d68565b92915050565b60006020828403121562000db25762000db162000d2f565b5b600062000dc28482850162000d82565b91505092915050565b62000dd68162000d54565b82525050565b600060408201905062000df3600083018562000dcb565b62000e02602083018462000dcb565b9392505050565b62000e148162000bff565b82525050565b600060208201905062000e31600083018462000e09565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000e7f57607f821691505b60208210810362000e955762000e9462000e37565b5b50919050565b60805161515b62000ebe600039600081816112880152613e62015261515b6000f3fe6080604052600436106103905760003560e01c8063893d20e8116101dc578063b682428e11610102578063d15bcf0f116100a0578063e1370dd31161006f578063e1370dd314610d1b578063edcf19b214610d46578063f2fde38b14610d6f578063f7da678514610d9857610397565b8063d15bcf0f14610c5f578063d7d7442f14610c8a578063dd62ed3e14610cb3578063ddcf9b9814610cf057610397565b8063bf9eb540116100dc578063bf9eb54014610ba7578063cb66453414610bd0578063cba0e99614610bf9578063d1294d4c14610c3657610397565b8063b682428e14610b28578063b934f33b14610b51578063bf9b015914610b7c57610397565b80639b136da41161017a578063a7a0745211610149578063a7a0745214610a5c578063a9059cbb14610a85578063b4d95a9314610ac2578063b62496f514610aeb57610397565b80639b136da4146109b2578063a04bdc81146109dd578063a5ece94114610a08578063a6c38f5914610a3357610397565b806390f50283116101b657806390f502831461090a57806395d89b41146109355780639878665f146109605780639a7a23d61461098957610397565b8063893d20e81461088b5780638cd0260c146108b65780638da5cb5b146108df57610397565b80634a0e963c116102c15780636df3333a1161025f5780637a94d54b1161022e5780637a94d54b146107e55780637ffb40331461080e578063801527ce146108395780638628c23f1461086257610397565b80636df3333a1461073b57806370a0823114610766578063715018a6146107a357806377bc419e146107ba57610397565b80635297defd1161029b5780635297defd146106935780635be76f11146106be57806364c16163146106e75780636573c4df1461071257610397565b80634a0e963c146106145780634a74bb021461063d5780634bd7ace51461066857610397565b806322788f861161032e5780632d03420b116103085780632d03420b1461056a578063313ce56714610593578063487a6905146105be57806349bd5a5e146105e957610397565b806322788f86146104d757806323b872dd1461050257806327c8f8351461053f57610397565b806313b4a7f41161036a57806313b4a7f41461042d57806314c0eaf91461045657806318160ddd14610481578063220f6696146104ac57610397565b806306fdde031461039c5780630882a863146103c7578063095ea7b3146103f057610397565b3661039757005b600080fd5b3480156103a857600080fd5b506103b1610dc1565b6040516103be9190613f86565b60405180910390f35b3480156103d357600080fd5b506103ee60048036038101906103e99190613fe3565b610e53565b005b3480156103fc57600080fd5b506104176004803603810190610412919061406e565b610ed9565b60405161042491906140c9565b60405180910390f35b34801561043957600080fd5b50610454600480360381019061044f91906140e4565b610ef7565b005b34801561046257600080fd5b5061046b6110d7565b6040516104789190614133565b60405180910390f35b34801561048d57600080fd5b506104966110e1565b6040516104a39190614133565b60405180910390f35b3480156104b857600080fd5b506104c16110eb565b6040516104ce91906140c9565b60405180910390f35b3480156104e357600080fd5b506104ec6110fe565b6040516104f99190614133565b60405180910390f35b34801561050e57600080fd5b506105296004803603810190610524919061414e565b611108565b60405161053691906140c9565b60405180910390f35b34801561054b57600080fd5b50610554611286565b60405161056191906141b0565b60405180910390f35b34801561057657600080fd5b50610591600480360381019061058c91906141f7565b6112aa565b005b34801561059f57600080fd5b506105a8611343565b6040516105b59190614133565b60405180910390f35b3480156105ca57600080fd5b506105d361135d565b6040516105e09190614133565b60405180910390f35b3480156105f557600080fd5b506105fe611367565b60405161060b91906141b0565b60405180910390f35b34801561062057600080fd5b5061063b60048036038101906106369190614224565b61138d565b005b34801561064957600080fd5b50610652611464565b60405161065f91906140c9565b60405180910390f35b34801561067457600080fd5b5061067d611477565b60405161068a9190614133565b60405180910390f35b34801561069f57600080fd5b506106a8611481565b6040516106b59190614133565b60405180910390f35b3480156106ca57600080fd5b506106e560048036038101906106e0919061428f565b61148b565b005b3480156106f357600080fd5b506106fc611557565b6040516107099190614133565b60405180910390f35b34801561071e57600080fd5b5061073960048036038101906107349190613fe3565b611561565b005b34801561074757600080fd5b50610750611609565b60405161075d9190614133565b60405180910390f35b34801561077257600080fd5b5061078d60048036038101906107889190614224565b611613565b60405161079a9190614133565b60405180910390f35b3480156107af57600080fd5b506107b861165c565b005b3480156107c657600080fd5b506107cf6116e4565b6040516107dc9190614133565b60405180910390f35b3480156107f157600080fd5b5061080c60048036038101906108079190613fe3565b6116ee565b005b34801561081a57600080fd5b50610823611774565b6040516108309190614133565b60405180910390f35b34801561084557600080fd5b50610860600480360381019061085b91906141f7565b61177e565b005b34801561086e57600080fd5b5061088960048036038101906108849190613fe3565b611817565b005b34801561089757600080fd5b506108a061189d565b6040516108ad91906141b0565b60405180910390f35b3480156108c257600080fd5b506108dd60048036038101906108d89190613fe3565b6118ac565b005b3480156108eb57600080fd5b506108f4611932565b60405161090191906141b0565b60405180910390f35b34801561091657600080fd5b5061091f61195b565b60405161092c9190614133565b60405180910390f35b34801561094157600080fd5b5061094a611965565b6040516109579190613f86565b60405180910390f35b34801561096c57600080fd5b5061098760048036038101906109829190613fe3565b6119f7565b005b34801561099557600080fd5b506109b060048036038101906109ab91906142bc565b611a7d565b005b3480156109be57600080fd5b506109c7611b97565b6040516109d49190614133565b60405180910390f35b3480156109e957600080fd5b506109f2611ba1565b6040516109ff9190614133565b60405180910390f35b348015610a1457600080fd5b50610a1d611ba7565b604051610a2a919061430b565b60405180910390f35b348015610a3f57600080fd5b50610a5a6004803603810190610a559190614326565b611bcd565b005b348015610a6857600080fd5b50610a836004803603810190610a7e9190613fe3565b611ca4565b005b348015610a9157600080fd5b50610aac6004803603810190610aa7919061406e565b611d4c565b604051610ab991906140c9565b60405180910390f35b348015610ace57600080fd5b50610ae96004803603810190610ae49190614224565b611d6a565b005b348015610af757600080fd5b50610b126004803603810190610b0d9190614224565b611e41565b604051610b1f91906140c9565b60405180910390f35b348015610b3457600080fd5b50610b4f6004803603810190610b4a9190614224565b611e61565b005b348015610b5d57600080fd5b50610b66611f21565b604051610b7391906141b0565b60405180910390f35b348015610b8857600080fd5b50610b91611f47565b604051610b9e9190614133565b60405180910390f35b348015610bb357600080fd5b50610bce6004803603810190610bc99190614224565b611f51565b005b348015610bdc57600080fd5b50610bf76004803603810190610bf29190614224565b612011565b005b348015610c0557600080fd5b50610c206004803603810190610c1b9190614224565b6120e8565b604051610c2d91906140c9565b60405180910390f35b348015610c4257600080fd5b50610c5d6004803603810190610c589190613fe3565b61213e565b005b348015610c6b57600080fd5b50610c746121e7565b604051610c8191906140c9565b60405180910390f35b348015610c9657600080fd5b50610cb16004803603810190610cac9190613fe3565b6121fe565b005b348015610cbf57600080fd5b50610cda6004803603810190610cd591906140e4565b612284565b604051610ce79190614133565b60405180910390f35b348015610cfc57600080fd5b50610d0561230b565b604051610d129190614133565b60405180910390f35b348015610d2757600080fd5b50610d30612315565b604051610d3d9190614133565b60405180910390f35b348015610d5257600080fd5b50610d6d6004803603810190610d689190613fe3565b61231f565b005b348015610d7b57600080fd5b50610d966004803603810190610d919190614224565b6123a5565b005b348015610da457600080fd5b50610dbf6004803603810190610dba91906143a4565b61249c565b005b606060018054610dd090614426565b80601f0160208091040260200160405190810160405280929190818152602001828054610dfc90614426565b8015610e495780601f10610e1e57610100808354040283529160200191610e49565b820191906000526020600020905b815481529060010190602001808311610e2c57829003601f168201915b5050505050905090565b610e5b61259c565b73ffffffffffffffffffffffffffffffffffffffff16610e79611932565b73ffffffffffffffffffffffffffffffffffffffff1614610ecf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec6906144a3565b60405180910390fd5b8060188190555050565b6000610eed610ee661259c565b84846125a4565b6001905092915050565b610eff61259c565b73ffffffffffffffffffffffffffffffffffffffff16610f1d611932565b73ffffffffffffffffffffffffffffffffffffffff1614610f73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6a906144a3565b60405180910390fd5b6001601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000602754905090565b6000600954905090565b602560009054906101000a900460ff1681565b6000600854905090565b6000600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061115361259c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211156111d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c790614535565b60405180910390fd5b6111db84848461276d565b61127b846111e761259c565b84600d60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061123161259c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546112769190614584565b6125a4565b600190509392505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6112b261259c565b73ffffffffffffffffffffffffffffffffffffffff166112d0611932565b73ffffffffffffffffffffffffffffffffffffffff1614611326576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131d906144a3565b60405180910390fd5b80601e60006101000a81548160ff02191690831515021790555050565b6000600360009054906101000a900460ff1660ff16905090565b6000600a54905090565b602a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61139561259c565b73ffffffffffffffffffffffffffffffffffffffff166113b3611932565b73ffffffffffffffffffffffffffffffffffffffff1614611409576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611400906144a3565b60405180910390fd5b6001600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b602560019054906101000a900460ff1681565b6000601854905090565b6000602154905090565b61149361259c565b73ffffffffffffffffffffffffffffffffffffffff166114b1611932565b73ffffffffffffffffffffffffffffffffffffffff1614611507576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fe906144a3565b60405180910390fd5b60004790508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611552573d6000803e3d6000fd5b505050565b6000602854905090565b61156961259c565b73ffffffffffffffffffffffffffffffffffffffff16611587611932565b73ffffffffffffffffffffffffffffffffffffffff16146115dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d4906144a3565b60405180910390fd5b8060058190555060646005546009546115f691906145b8565b6116009190614641565b60128190555050565b6000600754905090565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61166461259c565b73ffffffffffffffffffffffffffffffffffffffff16611682611932565b73ffffffffffffffffffffffffffffffffffffffff16146116d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116cf906144a3565b60405180910390fd5b6116e26000613223565b565b6000602354905090565b6116f661259c565b73ffffffffffffffffffffffffffffffffffffffff16611714611932565b73ffffffffffffffffffffffffffffffffffffffff161461176a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611761906144a3565b60405180910390fd5b80601c8190555050565b6000601c54905090565b61178661259c565b73ffffffffffffffffffffffffffffffffffffffff166117a4611932565b73ffffffffffffffffffffffffffffffffffffffff16146117fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f1906144a3565b60405180910390fd5b80602560016101000a81548160ff02191690831515021790555050565b61181f61259c565b73ffffffffffffffffffffffffffffffffffffffff1661183d611932565b73ffffffffffffffffffffffffffffffffffffffff1614611893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188a906144a3565b60405180910390fd5b8060218190555050565b60006118a7611932565b905090565b6118b461259c565b73ffffffffffffffffffffffffffffffffffffffff166118d2611932565b73ffffffffffffffffffffffffffffffffffffffff1614611928576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191f906144a3565b60405180910390fd5b80601f8190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000601f54905090565b60606002805461197490614426565b80601f01602080910402602001604051908101604052809291908181526020018280546119a090614426565b80156119ed5780601f106119c2576101008083540402835291602001916119ed565b820191906000526020600020905b8154815290600101906020018083116119d057829003601f168201915b5050505050905090565b6119ff61259c565b73ffffffffffffffffffffffffffffffffffffffff16611a1d611932565b73ffffffffffffffffffffffffffffffffffffffff1614611a73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6a906144a3565b60405180910390fd5b8060238190555050565b611a8561259c565b73ffffffffffffffffffffffffffffffffffffffff16611aa3611932565b73ffffffffffffffffffffffffffffffffffffffff1614611af9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af0906144a3565b60405180910390fd5b602a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b80906146e4565b60405180910390fd5b611b9382826132e7565b5050565b6000601a54905090565b600a5481565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611bd561259c565b73ffffffffffffffffffffffffffffffffffffffff16611bf3611932565b73ffffffffffffffffffffffffffffffffffffffff1614611c49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c40906144a3565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611cac61259c565b73ffffffffffffffffffffffffffffffffffffffff16611cca611932565b73ffffffffffffffffffffffffffffffffffffffff1614611d20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d17906144a3565b60405180910390fd5b806006819055506064600654600954611d3991906145b8565b611d439190614641565b60138190555050565b6000611d60611d5961259c565b848461276d565b6001905092915050565b611d7261259c565b73ffffffffffffffffffffffffffffffffffffffff16611d90611932565b73ffffffffffffffffffffffffffffffffffffffff1614611de6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ddd906144a3565b60405180910390fd5b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600e6020528060005260406000206000915054906101000a900460ff1681565b611e6961259c565b73ffffffffffffffffffffffffffffffffffffffff16611e87611932565b73ffffffffffffffffffffffffffffffffffffffff1614611edd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed4906144a3565b60405180910390fd5b80601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601354905090565b611f5961259c565b73ffffffffffffffffffffffffffffffffffffffff16611f77611932565b73ffffffffffffffffffffffffffffffffffffffff1614611fcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc4906144a3565b60405180910390fd5b80601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61201961259c565b73ffffffffffffffffffffffffffffffffffffffff16612037611932565b73ffffffffffffffffffffffffffffffffffffffff161461208d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612084906144a3565b60405180910390fd5b6001601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61214661259c565b73ffffffffffffffffffffffffffffffffffffffff16612164611932565b73ffffffffffffffffffffffffffffffffffffffff16146121ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b1906144a3565b60405180910390fd5b806007819055506103e86007546009546121d491906145b8565b6121de9190614641565b600a8190555050565b6000601e60009054906101000a900460ff16905090565b61220661259c565b73ffffffffffffffffffffffffffffffffffffffff16612224611932565b73ffffffffffffffffffffffffffffffffffffffff161461227a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612271906144a3565b60405180910390fd5b8060088190555050565b6000600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000602654905090565b6000601254905090565b61232761259c565b73ffffffffffffffffffffffffffffffffffffffff16612345611932565b73ffffffffffffffffffffffffffffffffffffffff161461239b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612392906144a3565b60405180910390fd5b80601a8190555050565b6123ad61259c565b73ffffffffffffffffffffffffffffffffffffffff166123cb611932565b73ffffffffffffffffffffffffffffffffffffffff1614612421576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612418906144a3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612490576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248790614776565b60405180910390fd5b61249981613223565b50565b6124a461259c565b73ffffffffffffffffffffffffffffffffffffffff166124c2611932565b73ffffffffffffffffffffffffffffffffffffffff1614612518576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250f906144a3565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b81526004016125539291906147f5565b6020604051808303816000875af1158015612572573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125969190614833565b50505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612613576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260a906148d2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612682576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267990614964565b60405180910390fd5b80600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516127609190614133565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036127dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d3906149f6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361284b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284290614a88565b60405180910390fd5b6000811161288e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288590614b1a565b60405180910390fd5b6000600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612915576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290c90614bac565b60405180910390fd5b60001515601e60009054906101000a900460ff16151503612a1157601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806129d15750601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612a10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0790614c18565b60405180910390fd5b5b60001515601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515148015612ac1575060001515601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b15612b0c57601354821115612b0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0290614caa565b60405180910390fd5b5b6000612b1730611613565b9050600a548110158015612b385750602560009054906101000a900460ff16155b8015612b925750602a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612baa5750602560019054906101000a900460ff165b15612bc857600a548110612bc757600a549050612bc681613388565b5b5b600060019050600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612c6f5750600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612c81576000600481905550600090505b60008060008315612fcd5760011515601460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151480612d3b575060011515601460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b15612d7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7290614d16565b60405180910390fd5b600e60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e225750602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614155b15612ea5576000600481905550606460215488612e3f91906145b8565b612e499190614641565b92506064601f5488612e5b91906145b8565b612e659190614641565b9050606460235488612e7791906145b8565b612e819190614641565b9150818184612e909190614d36565b612e9a9190614d36565b600481905550612fcc565b600e60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612f4c5750602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614155b15612fcb5760006004819055506064601a5488612f6991906145b8565b612f739190614641565b9250606460185488612f8591906145b8565b612f8f9190614641565b90506064601c5488612fa191906145b8565b612fab9190614641565b9150818184612fba9190614d36565b612fc49190614d36565b6004819055505b5b5b8686612fd99190614584565b600b60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508082848961302a9190614584565b6130349190614584565b61303e9190614584565b600b60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461308c9190614d36565b92505081905550600081146131a657600454600b60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130ec9190614d36565b9250508190555080602860008282546131059190614d36565b92505081905550816027600082825461311e9190614d36565b9250508190555082602660008282546131379190614d36565b925050819055503073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60045460405161319d9190614133565b60405180910390a35b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6004548a6132039190614584565b6040516132109190614133565b60405180910390a3505050505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6001602560006101000a81548160ff0219169083151502179055506133ae602854613463565b6133b96026546134ee565b6133c4602754613753565b60004790506133f581601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613996565b7f4596ef7337c1c88bb740707471cfc0ec6d0212036b05ab1bdbb09cf3e3f01904826040516134249190614133565b60405180910390a1600060268190555060006027819055506000602881905550506000602560006101000a81548160ff02191690831515021790555050565b60006002826134729190614641565b9050600081836134829190614584565b9050600047905061349283613bac565b600081476134a09190614584565b90506134ac8382613def565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618482856040516134df93929190614d8c565b60405180910390a15050505050565b6000600267ffffffffffffffff81111561350b5761350a614dc3565b5b6040519080825280602002602001820160405280156135395781602001602082028036833780820191505090505b509050308160008151811061355157613550614df2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156135f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061361c9190614e36565b816001815181106136305761362f614df2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061369730602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846125a4565b602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac94783600084601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b815260040161371d959493929190614f5c565b600060405180830381600087803b15801561373757600080fd5b505af115801561374b573d6000803e3d6000fd5b505050505050565b6000600267ffffffffffffffff8111156137705761376f614dc3565b5b60405190808252806020026020018201604052801561379e5781602001602082028036833780820191505090505b50905030816000815181106137b6576137b5614df2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561385d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138819190614e36565b8160018151811061389557613894614df2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506138fc30602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846125a4565b602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613960959493929190614fb6565b600060405180830381600087803b15801561397a57600080fd5b505af115801561398e573d6000803e3d6000fd5b505050505050565b6000600267ffffffffffffffff8111156139b3576139b2614dc3565b5b6040519080825280602002602001820160405280156139e15781602001602082028036833780820191505090505b509050602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613a51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a759190614e36565b81600081518110613a8957613a88614df2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508181600181518110613ad857613ad7614df2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de958460008430426040518663ffffffff1660e01b8152600401613b759493929190615010565b6000604051808303818588803b158015613b8e57600080fd5b505af1158015613ba2573d6000803e3d6000fd5b5050505050505050565b6000600267ffffffffffffffff811115613bc957613bc8614dc3565b5b604051908082528060200260200182016040528015613bf75781602001602082028036833780820191505090505b5090503081600081518110613c0f57613c0e614df2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613cb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cda9190614e36565b81600181518110613cee57613ced614df2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613d5530602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846125a4565b602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613db9959493929190614fb6565b600060405180830381600087803b158015613dd357600080fd5b505af1158015613de7573d6000803e3d6000fd5b505050505050565b613e1c30602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846125a4565b602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000807f0000000000000000000000000000000000000000000000000000000000000000426040518863ffffffff1660e01b8152600401613ea39695949392919061505c565b60606040518083038185885af1158015613ec1573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613ee691906150d2565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613f27578082015181840152602081019050613f0c565b83811115613f36576000848401525b50505050565b6000601f19601f8301169050919050565b6000613f5882613eed565b613f628185613ef8565b9350613f72818560208601613f09565b613f7b81613f3c565b840191505092915050565b60006020820190508181036000830152613fa08184613f4d565b905092915050565b600080fd5b6000819050919050565b613fc081613fad565b8114613fcb57600080fd5b50565b600081359050613fdd81613fb7565b92915050565b600060208284031215613ff957613ff8613fa8565b5b600061400784828501613fce565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061403b82614010565b9050919050565b61404b81614030565b811461405657600080fd5b50565b60008135905061406881614042565b92915050565b6000806040838503121561408557614084613fa8565b5b600061409385828601614059565b92505060206140a485828601613fce565b9150509250929050565b60008115159050919050565b6140c3816140ae565b82525050565b60006020820190506140de60008301846140ba565b92915050565b600080604083850312156140fb576140fa613fa8565b5b600061410985828601614059565b925050602061411a85828601614059565b9150509250929050565b61412d81613fad565b82525050565b60006020820190506141486000830184614124565b92915050565b60008060006060848603121561416757614166613fa8565b5b600061417586828701614059565b935050602061418686828701614059565b925050604061419786828701613fce565b9150509250925092565b6141aa81614030565b82525050565b60006020820190506141c560008301846141a1565b92915050565b6141d4816140ae565b81146141df57600080fd5b50565b6000813590506141f1816141cb565b92915050565b60006020828403121561420d5761420c613fa8565b5b600061421b848285016141e2565b91505092915050565b60006020828403121561423a57614239613fa8565b5b600061424884828501614059565b91505092915050565b600061425c82614010565b9050919050565b61426c81614251565b811461427757600080fd5b50565b60008135905061428981614263565b92915050565b6000602082840312156142a5576142a4613fa8565b5b60006142b38482850161427a565b91505092915050565b600080604083850312156142d3576142d2613fa8565b5b60006142e185828601614059565b92505060206142f2858286016141e2565b9150509250929050565b61430581614251565b82525050565b600060208201905061432060008301846142fc565b92915050565b6000806040838503121561433d5761433c613fa8565b5b600061434b8582860161427a565b925050602061435c858286016141e2565b9150509250929050565b600061437182614030565b9050919050565b61438181614366565b811461438c57600080fd5b50565b60008135905061439e81614378565b92915050565b6000806000606084860312156143bd576143bc613fa8565b5b60006143cb8682870161438f565b93505060206143dc8682870161427a565b92505060406143ed86828701613fce565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061443e57607f821691505b602082108103614451576144506143f7565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061448d602083613ef8565b915061449882614457565b602082019050919050565b600060208201905081810360008301526144bc81614480565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b600061451f602883613ef8565b915061452a826144c3565b604082019050919050565b6000602082019050818103600083015261454e81614512565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061458f82613fad565b915061459a83613fad565b9250828210156145ad576145ac614555565b5b828203905092915050565b60006145c382613fad565b91506145ce83613fad565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561460757614606614555565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061464c82613fad565b915061465783613fad565b92508261466757614666614612565b5b828204905092915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006146ce603983613ef8565b91506146d982614672565b604082019050919050565b600060208201905081810360008301526146fd816146c1565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614760602683613ef8565b915061476b82614704565b604082019050919050565b6000602082019050818103600083015261478f81614753565b9050919050565b6000819050919050565b60006147bb6147b66147b184614010565b614796565b614010565b9050919050565b60006147cd826147a0565b9050919050565b60006147df826147c2565b9050919050565b6147ef816147d4565b82525050565b600060408201905061480a60008301856147e6565b6148176020830184614124565b9392505050565b60008151905061482d816141cb565b92915050565b60006020828403121561484957614848613fa8565b5b60006148578482850161481e565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006148bc602483613ef8565b91506148c782614860565b604082019050919050565b600060208201905081810360008301526148eb816148af565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061494e602283613ef8565b9150614959826148f2565b604082019050919050565b6000602082019050818103600083015261497d81614941565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006149e0602583613ef8565b91506149eb82614984565b604082019050919050565b60006020820190508181036000830152614a0f816149d3565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614a72602383613ef8565b9150614a7d82614a16565b604082019050919050565b60006020820190508181036000830152614aa181614a65565b9050919050565b7f45524332303a207472616e73666572656420616d6f756e74206d75737420626560008201527f2067726561746572207468616e207a65726f0000000000000000000000000000602082015250565b6000614b04603283613ef8565b9150614b0f82614aa8565b604082019050919050565b60006020820190508181036000830152614b3381614af7565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614b96602683613ef8565b9150614ba182614b3a565b604082019050919050565b60006020820190508181036000830152614bc581614b89565b9050919050565b7f43616e742074726164652c2074726164652069732064697361626c6564000000600082015250565b6000614c02601d83613ef8565b9150614c0d82614bcc565b602082019050919050565b60006020820190508181036000830152614c3181614bf5565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b6000614c94602883613ef8565b9150614c9f82614c38565b604082019050919050565b60006020820190508181036000830152614cc381614c87565b9050919050565b7f4e6f20626f747320616c6c6f77656420746f2074726164650000000000000000600082015250565b6000614d00601883613ef8565b9150614d0b82614cca565b602082019050919050565b60006020820190508181036000830152614d2f81614cf3565b9050919050565b6000614d4182613fad565b9150614d4c83613fad565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614d8157614d80614555565b5b828201905092915050565b6000606082019050614da16000830186614124565b614dae6020830185614124565b614dbb6040830184614124565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614e3081614042565b92915050565b600060208284031215614e4c57614e4b613fa8565b5b6000614e5a84828501614e21565b91505092915050565b6000819050919050565b6000614e88614e83614e7e84614e63565b614796565b613fad565b9050919050565b614e9881614e6d565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614ed381614030565b82525050565b6000614ee58383614eca565b60208301905092915050565b6000602082019050919050565b6000614f0982614e9e565b614f138185614ea9565b9350614f1e83614eba565b8060005b83811015614f4f578151614f368882614ed9565b9750614f4183614ef1565b925050600181019050614f22565b5085935050505092915050565b600060a082019050614f716000830188614124565b614f7e6020830187614e8f565b8181036040830152614f908186614efe565b9050614f9f60608301856147e6565b614fac6080830184614124565b9695505050505050565b600060a082019050614fcb6000830188614124565b614fd86020830187614e8f565b8181036040830152614fea8186614efe565b9050614ff960608301856141a1565b6150066080830184614124565b9695505050505050565b60006080820190506150256000830187614e8f565b81810360208301526150378186614efe565b905061504660408301856141a1565b6150536060830184614124565b95945050505050565b600060c08201905061507160008301896141a1565b61507e6020830188614124565b61508b6040830187614e8f565b6150986060830186614e8f565b6150a560808301856141a1565b6150b260a0830184614124565b979650505050505050565b6000815190506150cc81613fb7565b92915050565b6000806000606084860312156150eb576150ea613fa8565b5b60006150f9868287016150bd565b935050602061510a868287016150bd565b925050604061511b868287016150bd565b915050925092509256fea26469706673582212201b73035c6e5833984f1b0b362d487a512dbe0150d7ae252e0003e2a39ed367c964736f6c634300080d0033

Deployed Bytecode

0x6080604052600436106103905760003560e01c8063893d20e8116101dc578063b682428e11610102578063d15bcf0f116100a0578063e1370dd31161006f578063e1370dd314610d1b578063edcf19b214610d46578063f2fde38b14610d6f578063f7da678514610d9857610397565b8063d15bcf0f14610c5f578063d7d7442f14610c8a578063dd62ed3e14610cb3578063ddcf9b9814610cf057610397565b8063bf9eb540116100dc578063bf9eb54014610ba7578063cb66453414610bd0578063cba0e99614610bf9578063d1294d4c14610c3657610397565b8063b682428e14610b28578063b934f33b14610b51578063bf9b015914610b7c57610397565b80639b136da41161017a578063a7a0745211610149578063a7a0745214610a5c578063a9059cbb14610a85578063b4d95a9314610ac2578063b62496f514610aeb57610397565b80639b136da4146109b2578063a04bdc81146109dd578063a5ece94114610a08578063a6c38f5914610a3357610397565b806390f50283116101b657806390f502831461090a57806395d89b41146109355780639878665f146109605780639a7a23d61461098957610397565b8063893d20e81461088b5780638cd0260c146108b65780638da5cb5b146108df57610397565b80634a0e963c116102c15780636df3333a1161025f5780637a94d54b1161022e5780637a94d54b146107e55780637ffb40331461080e578063801527ce146108395780638628c23f1461086257610397565b80636df3333a1461073b57806370a0823114610766578063715018a6146107a357806377bc419e146107ba57610397565b80635297defd1161029b5780635297defd146106935780635be76f11146106be57806364c16163146106e75780636573c4df1461071257610397565b80634a0e963c146106145780634a74bb021461063d5780634bd7ace51461066857610397565b806322788f861161032e5780632d03420b116103085780632d03420b1461056a578063313ce56714610593578063487a6905146105be57806349bd5a5e146105e957610397565b806322788f86146104d757806323b872dd1461050257806327c8f8351461053f57610397565b806313b4a7f41161036a57806313b4a7f41461042d57806314c0eaf91461045657806318160ddd14610481578063220f6696146104ac57610397565b806306fdde031461039c5780630882a863146103c7578063095ea7b3146103f057610397565b3661039757005b600080fd5b3480156103a857600080fd5b506103b1610dc1565b6040516103be9190613f86565b60405180910390f35b3480156103d357600080fd5b506103ee60048036038101906103e99190613fe3565b610e53565b005b3480156103fc57600080fd5b506104176004803603810190610412919061406e565b610ed9565b60405161042491906140c9565b60405180910390f35b34801561043957600080fd5b50610454600480360381019061044f91906140e4565b610ef7565b005b34801561046257600080fd5b5061046b6110d7565b6040516104789190614133565b60405180910390f35b34801561048d57600080fd5b506104966110e1565b6040516104a39190614133565b60405180910390f35b3480156104b857600080fd5b506104c16110eb565b6040516104ce91906140c9565b60405180910390f35b3480156104e357600080fd5b506104ec6110fe565b6040516104f99190614133565b60405180910390f35b34801561050e57600080fd5b506105296004803603810190610524919061414e565b611108565b60405161053691906140c9565b60405180910390f35b34801561054b57600080fd5b50610554611286565b60405161056191906141b0565b60405180910390f35b34801561057657600080fd5b50610591600480360381019061058c91906141f7565b6112aa565b005b34801561059f57600080fd5b506105a8611343565b6040516105b59190614133565b60405180910390f35b3480156105ca57600080fd5b506105d361135d565b6040516105e09190614133565b60405180910390f35b3480156105f557600080fd5b506105fe611367565b60405161060b91906141b0565b60405180910390f35b34801561062057600080fd5b5061063b60048036038101906106369190614224565b61138d565b005b34801561064957600080fd5b50610652611464565b60405161065f91906140c9565b60405180910390f35b34801561067457600080fd5b5061067d611477565b60405161068a9190614133565b60405180910390f35b34801561069f57600080fd5b506106a8611481565b6040516106b59190614133565b60405180910390f35b3480156106ca57600080fd5b506106e560048036038101906106e0919061428f565b61148b565b005b3480156106f357600080fd5b506106fc611557565b6040516107099190614133565b60405180910390f35b34801561071e57600080fd5b5061073960048036038101906107349190613fe3565b611561565b005b34801561074757600080fd5b50610750611609565b60405161075d9190614133565b60405180910390f35b34801561077257600080fd5b5061078d60048036038101906107889190614224565b611613565b60405161079a9190614133565b60405180910390f35b3480156107af57600080fd5b506107b861165c565b005b3480156107c657600080fd5b506107cf6116e4565b6040516107dc9190614133565b60405180910390f35b3480156107f157600080fd5b5061080c60048036038101906108079190613fe3565b6116ee565b005b34801561081a57600080fd5b50610823611774565b6040516108309190614133565b60405180910390f35b34801561084557600080fd5b50610860600480360381019061085b91906141f7565b61177e565b005b34801561086e57600080fd5b5061088960048036038101906108849190613fe3565b611817565b005b34801561089757600080fd5b506108a061189d565b6040516108ad91906141b0565b60405180910390f35b3480156108c257600080fd5b506108dd60048036038101906108d89190613fe3565b6118ac565b005b3480156108eb57600080fd5b506108f4611932565b60405161090191906141b0565b60405180910390f35b34801561091657600080fd5b5061091f61195b565b60405161092c9190614133565b60405180910390f35b34801561094157600080fd5b5061094a611965565b6040516109579190613f86565b60405180910390f35b34801561096c57600080fd5b5061098760048036038101906109829190613fe3565b6119f7565b005b34801561099557600080fd5b506109b060048036038101906109ab91906142bc565b611a7d565b005b3480156109be57600080fd5b506109c7611b97565b6040516109d49190614133565b60405180910390f35b3480156109e957600080fd5b506109f2611ba1565b6040516109ff9190614133565b60405180910390f35b348015610a1457600080fd5b50610a1d611ba7565b604051610a2a919061430b565b60405180910390f35b348015610a3f57600080fd5b50610a5a6004803603810190610a559190614326565b611bcd565b005b348015610a6857600080fd5b50610a836004803603810190610a7e9190613fe3565b611ca4565b005b348015610a9157600080fd5b50610aac6004803603810190610aa7919061406e565b611d4c565b604051610ab991906140c9565b60405180910390f35b348015610ace57600080fd5b50610ae96004803603810190610ae49190614224565b611d6a565b005b348015610af757600080fd5b50610b126004803603810190610b0d9190614224565b611e41565b604051610b1f91906140c9565b60405180910390f35b348015610b3457600080fd5b50610b4f6004803603810190610b4a9190614224565b611e61565b005b348015610b5d57600080fd5b50610b66611f21565b604051610b7391906141b0565b60405180910390f35b348015610b8857600080fd5b50610b91611f47565b604051610b9e9190614133565b60405180910390f35b348015610bb357600080fd5b50610bce6004803603810190610bc99190614224565b611f51565b005b348015610bdc57600080fd5b50610bf76004803603810190610bf29190614224565b612011565b005b348015610c0557600080fd5b50610c206004803603810190610c1b9190614224565b6120e8565b604051610c2d91906140c9565b60405180910390f35b348015610c4257600080fd5b50610c5d6004803603810190610c589190613fe3565b61213e565b005b348015610c6b57600080fd5b50610c746121e7565b604051610c8191906140c9565b60405180910390f35b348015610c9657600080fd5b50610cb16004803603810190610cac9190613fe3565b6121fe565b005b348015610cbf57600080fd5b50610cda6004803603810190610cd591906140e4565b612284565b604051610ce79190614133565b60405180910390f35b348015610cfc57600080fd5b50610d0561230b565b604051610d129190614133565b60405180910390f35b348015610d2757600080fd5b50610d30612315565b604051610d3d9190614133565b60405180910390f35b348015610d5257600080fd5b50610d6d6004803603810190610d689190613fe3565b61231f565b005b348015610d7b57600080fd5b50610d966004803603810190610d919190614224565b6123a5565b005b348015610da457600080fd5b50610dbf6004803603810190610dba91906143a4565b61249c565b005b606060018054610dd090614426565b80601f0160208091040260200160405190810160405280929190818152602001828054610dfc90614426565b8015610e495780601f10610e1e57610100808354040283529160200191610e49565b820191906000526020600020905b815481529060010190602001808311610e2c57829003601f168201915b5050505050905090565b610e5b61259c565b73ffffffffffffffffffffffffffffffffffffffff16610e79611932565b73ffffffffffffffffffffffffffffffffffffffff1614610ecf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec6906144a3565b60405180910390fd5b8060188190555050565b6000610eed610ee661259c565b84846125a4565b6001905092915050565b610eff61259c565b73ffffffffffffffffffffffffffffffffffffffff16610f1d611932565b73ffffffffffffffffffffffffffffffffffffffff1614610f73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6a906144a3565b60405180910390fd5b6001601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000602754905090565b6000600954905090565b602560009054906101000a900460ff1681565b6000600854905090565b6000600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061115361259c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211156111d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c790614535565b60405180910390fd5b6111db84848461276d565b61127b846111e761259c565b84600d60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061123161259c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546112769190614584565b6125a4565b600190509392505050565b7f000000000000000000000000000000000000000000000000000000000000dead81565b6112b261259c565b73ffffffffffffffffffffffffffffffffffffffff166112d0611932565b73ffffffffffffffffffffffffffffffffffffffff1614611326576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131d906144a3565b60405180910390fd5b80601e60006101000a81548160ff02191690831515021790555050565b6000600360009054906101000a900460ff1660ff16905090565b6000600a54905090565b602a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61139561259c565b73ffffffffffffffffffffffffffffffffffffffff166113b3611932565b73ffffffffffffffffffffffffffffffffffffffff1614611409576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611400906144a3565b60405180910390fd5b6001600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b602560019054906101000a900460ff1681565b6000601854905090565b6000602154905090565b61149361259c565b73ffffffffffffffffffffffffffffffffffffffff166114b1611932565b73ffffffffffffffffffffffffffffffffffffffff1614611507576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fe906144a3565b60405180910390fd5b60004790508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611552573d6000803e3d6000fd5b505050565b6000602854905090565b61156961259c565b73ffffffffffffffffffffffffffffffffffffffff16611587611932565b73ffffffffffffffffffffffffffffffffffffffff16146115dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d4906144a3565b60405180910390fd5b8060058190555060646005546009546115f691906145b8565b6116009190614641565b60128190555050565b6000600754905090565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61166461259c565b73ffffffffffffffffffffffffffffffffffffffff16611682611932565b73ffffffffffffffffffffffffffffffffffffffff16146116d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116cf906144a3565b60405180910390fd5b6116e26000613223565b565b6000602354905090565b6116f661259c565b73ffffffffffffffffffffffffffffffffffffffff16611714611932565b73ffffffffffffffffffffffffffffffffffffffff161461176a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611761906144a3565b60405180910390fd5b80601c8190555050565b6000601c54905090565b61178661259c565b73ffffffffffffffffffffffffffffffffffffffff166117a4611932565b73ffffffffffffffffffffffffffffffffffffffff16146117fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f1906144a3565b60405180910390fd5b80602560016101000a81548160ff02191690831515021790555050565b61181f61259c565b73ffffffffffffffffffffffffffffffffffffffff1661183d611932565b73ffffffffffffffffffffffffffffffffffffffff1614611893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188a906144a3565b60405180910390fd5b8060218190555050565b60006118a7611932565b905090565b6118b461259c565b73ffffffffffffffffffffffffffffffffffffffff166118d2611932565b73ffffffffffffffffffffffffffffffffffffffff1614611928576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191f906144a3565b60405180910390fd5b80601f8190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000601f54905090565b60606002805461197490614426565b80601f01602080910402602001604051908101604052809291908181526020018280546119a090614426565b80156119ed5780601f106119c2576101008083540402835291602001916119ed565b820191906000526020600020905b8154815290600101906020018083116119d057829003601f168201915b5050505050905090565b6119ff61259c565b73ffffffffffffffffffffffffffffffffffffffff16611a1d611932565b73ffffffffffffffffffffffffffffffffffffffff1614611a73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6a906144a3565b60405180910390fd5b8060238190555050565b611a8561259c565b73ffffffffffffffffffffffffffffffffffffffff16611aa3611932565b73ffffffffffffffffffffffffffffffffffffffff1614611af9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af0906144a3565b60405180910390fd5b602a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b80906146e4565b60405180910390fd5b611b9382826132e7565b5050565b6000601a54905090565b600a5481565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611bd561259c565b73ffffffffffffffffffffffffffffffffffffffff16611bf3611932565b73ffffffffffffffffffffffffffffffffffffffff1614611c49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c40906144a3565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611cac61259c565b73ffffffffffffffffffffffffffffffffffffffff16611cca611932565b73ffffffffffffffffffffffffffffffffffffffff1614611d20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d17906144a3565b60405180910390fd5b806006819055506064600654600954611d3991906145b8565b611d439190614641565b60138190555050565b6000611d60611d5961259c565b848461276d565b6001905092915050565b611d7261259c565b73ffffffffffffffffffffffffffffffffffffffff16611d90611932565b73ffffffffffffffffffffffffffffffffffffffff1614611de6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ddd906144a3565b60405180910390fd5b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600e6020528060005260406000206000915054906101000a900460ff1681565b611e6961259c565b73ffffffffffffffffffffffffffffffffffffffff16611e87611932565b73ffffffffffffffffffffffffffffffffffffffff1614611edd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed4906144a3565b60405180910390fd5b80601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601354905090565b611f5961259c565b73ffffffffffffffffffffffffffffffffffffffff16611f77611932565b73ffffffffffffffffffffffffffffffffffffffff1614611fcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc4906144a3565b60405180910390fd5b80601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61201961259c565b73ffffffffffffffffffffffffffffffffffffffff16612037611932565b73ffffffffffffffffffffffffffffffffffffffff161461208d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612084906144a3565b60405180910390fd5b6001601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61214661259c565b73ffffffffffffffffffffffffffffffffffffffff16612164611932565b73ffffffffffffffffffffffffffffffffffffffff16146121ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b1906144a3565b60405180910390fd5b806007819055506103e86007546009546121d491906145b8565b6121de9190614641565b600a8190555050565b6000601e60009054906101000a900460ff16905090565b61220661259c565b73ffffffffffffffffffffffffffffffffffffffff16612224611932565b73ffffffffffffffffffffffffffffffffffffffff161461227a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612271906144a3565b60405180910390fd5b8060088190555050565b6000600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000602654905090565b6000601254905090565b61232761259c565b73ffffffffffffffffffffffffffffffffffffffff16612345611932565b73ffffffffffffffffffffffffffffffffffffffff161461239b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612392906144a3565b60405180910390fd5b80601a8190555050565b6123ad61259c565b73ffffffffffffffffffffffffffffffffffffffff166123cb611932565b73ffffffffffffffffffffffffffffffffffffffff1614612421576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612418906144a3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612490576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248790614776565b60405180910390fd5b61249981613223565b50565b6124a461259c565b73ffffffffffffffffffffffffffffffffffffffff166124c2611932565b73ffffffffffffffffffffffffffffffffffffffff1614612518576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250f906144a3565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b81526004016125539291906147f5565b6020604051808303816000875af1158015612572573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125969190614833565b50505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612613576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260a906148d2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612682576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267990614964565b60405180910390fd5b80600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516127609190614133565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036127dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d3906149f6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361284b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284290614a88565b60405180910390fd5b6000811161288e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288590614b1a565b60405180910390fd5b6000600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612915576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290c90614bac565b60405180910390fd5b60001515601e60009054906101000a900460ff16151503612a1157601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806129d15750601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612a10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0790614c18565b60405180910390fd5b5b60001515601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515148015612ac1575060001515601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b15612b0c57601354821115612b0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0290614caa565b60405180910390fd5b5b6000612b1730611613565b9050600a548110158015612b385750602560009054906101000a900460ff16155b8015612b925750602a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612baa5750602560019054906101000a900460ff165b15612bc857600a548110612bc757600a549050612bc681613388565b5b5b600060019050600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612c6f5750600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612c81576000600481905550600090505b60008060008315612fcd5760011515601460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151480612d3b575060011515601460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b15612d7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7290614d16565b60405180910390fd5b600e60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e225750602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614155b15612ea5576000600481905550606460215488612e3f91906145b8565b612e499190614641565b92506064601f5488612e5b91906145b8565b612e659190614641565b9050606460235488612e7791906145b8565b612e819190614641565b9150818184612e909190614d36565b612e9a9190614d36565b600481905550612fcc565b600e60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612f4c5750602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614155b15612fcb5760006004819055506064601a5488612f6991906145b8565b612f739190614641565b9250606460185488612f8591906145b8565b612f8f9190614641565b90506064601c5488612fa191906145b8565b612fab9190614641565b9150818184612fba9190614d36565b612fc49190614d36565b6004819055505b5b5b8686612fd99190614584565b600b60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508082848961302a9190614584565b6130349190614584565b61303e9190614584565b600b60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461308c9190614d36565b92505081905550600081146131a657600454600b60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130ec9190614d36565b9250508190555080602860008282546131059190614d36565b92505081905550816027600082825461311e9190614d36565b9250508190555082602660008282546131379190614d36565b925050819055503073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60045460405161319d9190614133565b60405180910390a35b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6004548a6132039190614584565b6040516132109190614133565b60405180910390a3505050505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6001602560006101000a81548160ff0219169083151502179055506133ae602854613463565b6133b96026546134ee565b6133c4602754613753565b60004790506133f581601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613996565b7f4596ef7337c1c88bb740707471cfc0ec6d0212036b05ab1bdbb09cf3e3f01904826040516134249190614133565b60405180910390a1600060268190555060006027819055506000602881905550506000602560006101000a81548160ff02191690831515021790555050565b60006002826134729190614641565b9050600081836134829190614584565b9050600047905061349283613bac565b600081476134a09190614584565b90506134ac8382613def565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618482856040516134df93929190614d8c565b60405180910390a15050505050565b6000600267ffffffffffffffff81111561350b5761350a614dc3565b5b6040519080825280602002602001820160405280156135395781602001602082028036833780820191505090505b509050308160008151811061355157613550614df2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156135f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061361c9190614e36565b816001815181106136305761362f614df2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061369730602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846125a4565b602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac94783600084601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b815260040161371d959493929190614f5c565b600060405180830381600087803b15801561373757600080fd5b505af115801561374b573d6000803e3d6000fd5b505050505050565b6000600267ffffffffffffffff8111156137705761376f614dc3565b5b60405190808252806020026020018201604052801561379e5781602001602082028036833780820191505090505b50905030816000815181106137b6576137b5614df2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561385d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138819190614e36565b8160018151811061389557613894614df2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506138fc30602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846125a4565b602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613960959493929190614fb6565b600060405180830381600087803b15801561397a57600080fd5b505af115801561398e573d6000803e3d6000fd5b505050505050565b6000600267ffffffffffffffff8111156139b3576139b2614dc3565b5b6040519080825280602002602001820160405280156139e15781602001602082028036833780820191505090505b509050602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613a51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a759190614e36565b81600081518110613a8957613a88614df2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508181600181518110613ad857613ad7614df2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de958460008430426040518663ffffffff1660e01b8152600401613b759493929190615010565b6000604051808303818588803b158015613b8e57600080fd5b505af1158015613ba2573d6000803e3d6000fd5b5050505050505050565b6000600267ffffffffffffffff811115613bc957613bc8614dc3565b5b604051908082528060200260200182016040528015613bf75781602001602082028036833780820191505090505b5090503081600081518110613c0f57613c0e614df2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613cb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cda9190614e36565b81600181518110613cee57613ced614df2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613d5530602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846125a4565b602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613db9959493929190614fb6565b600060405180830381600087803b158015613dd357600080fd5b505af1158015613de7573d6000803e3d6000fd5b505050505050565b613e1c30602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846125a4565b602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000807f000000000000000000000000000000000000000000000000000000000000dead426040518863ffffffff1660e01b8152600401613ea39695949392919061505c565b60606040518083038185885af1158015613ec1573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613ee691906150d2565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613f27578082015181840152602081019050613f0c565b83811115613f36576000848401525b50505050565b6000601f19601f8301169050919050565b6000613f5882613eed565b613f628185613ef8565b9350613f72818560208601613f09565b613f7b81613f3c565b840191505092915050565b60006020820190508181036000830152613fa08184613f4d565b905092915050565b600080fd5b6000819050919050565b613fc081613fad565b8114613fcb57600080fd5b50565b600081359050613fdd81613fb7565b92915050565b600060208284031215613ff957613ff8613fa8565b5b600061400784828501613fce565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061403b82614010565b9050919050565b61404b81614030565b811461405657600080fd5b50565b60008135905061406881614042565b92915050565b6000806040838503121561408557614084613fa8565b5b600061409385828601614059565b92505060206140a485828601613fce565b9150509250929050565b60008115159050919050565b6140c3816140ae565b82525050565b60006020820190506140de60008301846140ba565b92915050565b600080604083850312156140fb576140fa613fa8565b5b600061410985828601614059565b925050602061411a85828601614059565b9150509250929050565b61412d81613fad565b82525050565b60006020820190506141486000830184614124565b92915050565b60008060006060848603121561416757614166613fa8565b5b600061417586828701614059565b935050602061418686828701614059565b925050604061419786828701613fce565b9150509250925092565b6141aa81614030565b82525050565b60006020820190506141c560008301846141a1565b92915050565b6141d4816140ae565b81146141df57600080fd5b50565b6000813590506141f1816141cb565b92915050565b60006020828403121561420d5761420c613fa8565b5b600061421b848285016141e2565b91505092915050565b60006020828403121561423a57614239613fa8565b5b600061424884828501614059565b91505092915050565b600061425c82614010565b9050919050565b61426c81614251565b811461427757600080fd5b50565b60008135905061428981614263565b92915050565b6000602082840312156142a5576142a4613fa8565b5b60006142b38482850161427a565b91505092915050565b600080604083850312156142d3576142d2613fa8565b5b60006142e185828601614059565b92505060206142f2858286016141e2565b9150509250929050565b61430581614251565b82525050565b600060208201905061432060008301846142fc565b92915050565b6000806040838503121561433d5761433c613fa8565b5b600061434b8582860161427a565b925050602061435c858286016141e2565b9150509250929050565b600061437182614030565b9050919050565b61438181614366565b811461438c57600080fd5b50565b60008135905061439e81614378565b92915050565b6000806000606084860312156143bd576143bc613fa8565b5b60006143cb8682870161438f565b93505060206143dc8682870161427a565b92505060406143ed86828701613fce565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061443e57607f821691505b602082108103614451576144506143f7565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061448d602083613ef8565b915061449882614457565b602082019050919050565b600060208201905081810360008301526144bc81614480565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b600061451f602883613ef8565b915061452a826144c3565b604082019050919050565b6000602082019050818103600083015261454e81614512565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061458f82613fad565b915061459a83613fad565b9250828210156145ad576145ac614555565b5b828203905092915050565b60006145c382613fad565b91506145ce83613fad565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561460757614606614555565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061464c82613fad565b915061465783613fad565b92508261466757614666614612565b5b828204905092915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006146ce603983613ef8565b91506146d982614672565b604082019050919050565b600060208201905081810360008301526146fd816146c1565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614760602683613ef8565b915061476b82614704565b604082019050919050565b6000602082019050818103600083015261478f81614753565b9050919050565b6000819050919050565b60006147bb6147b66147b184614010565b614796565b614010565b9050919050565b60006147cd826147a0565b9050919050565b60006147df826147c2565b9050919050565b6147ef816147d4565b82525050565b600060408201905061480a60008301856147e6565b6148176020830184614124565b9392505050565b60008151905061482d816141cb565b92915050565b60006020828403121561484957614848613fa8565b5b60006148578482850161481e565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006148bc602483613ef8565b91506148c782614860565b604082019050919050565b600060208201905081810360008301526148eb816148af565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061494e602283613ef8565b9150614959826148f2565b604082019050919050565b6000602082019050818103600083015261497d81614941565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006149e0602583613ef8565b91506149eb82614984565b604082019050919050565b60006020820190508181036000830152614a0f816149d3565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614a72602383613ef8565b9150614a7d82614a16565b604082019050919050565b60006020820190508181036000830152614aa181614a65565b9050919050565b7f45524332303a207472616e73666572656420616d6f756e74206d75737420626560008201527f2067726561746572207468616e207a65726f0000000000000000000000000000602082015250565b6000614b04603283613ef8565b9150614b0f82614aa8565b604082019050919050565b60006020820190508181036000830152614b3381614af7565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614b96602683613ef8565b9150614ba182614b3a565b604082019050919050565b60006020820190508181036000830152614bc581614b89565b9050919050565b7f43616e742074726164652c2074726164652069732064697361626c6564000000600082015250565b6000614c02601d83613ef8565b9150614c0d82614bcc565b602082019050919050565b60006020820190508181036000830152614c3181614bf5565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b6000614c94602883613ef8565b9150614c9f82614c38565b604082019050919050565b60006020820190508181036000830152614cc381614c87565b9050919050565b7f4e6f20626f747320616c6c6f77656420746f2074726164650000000000000000600082015250565b6000614d00601883613ef8565b9150614d0b82614cca565b602082019050919050565b60006020820190508181036000830152614d2f81614cf3565b9050919050565b6000614d4182613fad565b9150614d4c83613fad565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614d8157614d80614555565b5b828201905092915050565b6000606082019050614da16000830186614124565b614dae6020830185614124565b614dbb6040830184614124565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614e3081614042565b92915050565b600060208284031215614e4c57614e4b613fa8565b5b6000614e5a84828501614e21565b91505092915050565b6000819050919050565b6000614e88614e83614e7e84614e63565b614796565b613fad565b9050919050565b614e9881614e6d565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614ed381614030565b82525050565b6000614ee58383614eca565b60208301905092915050565b6000602082019050919050565b6000614f0982614e9e565b614f138185614ea9565b9350614f1e83614eba565b8060005b83811015614f4f578151614f368882614ed9565b9750614f4183614ef1565b925050600181019050614f22565b5085935050505092915050565b600060a082019050614f716000830188614124565b614f7e6020830187614e8f565b8181036040830152614f908186614efe565b9050614f9f60608301856147e6565b614fac6080830184614124565b9695505050505050565b600060a082019050614fcb6000830188614124565b614fd86020830187614e8f565b8181036040830152614fea8186614efe565b9050614ff960608301856141a1565b6150066080830184614124565b9695505050505050565b60006080820190506150256000830187614e8f565b81810360208301526150378186614efe565b905061504660408301856141a1565b6150536060830184614124565b95945050505050565b600060c08201905061507160008301896141a1565b61507e6020830188614124565b61508b6040830187614e8f565b6150986060830186614e8f565b6150a560808301856141a1565b6150b260a0830184614124565b979650505050505050565b6000815190506150cc81613fb7565b92915050565b6000806000606084860312156150eb576150ea613fa8565b5b60006150f9868287016150bd565b935050602061510a868287016150bd565b925050604061511b868287016150bd565b915050925092509256fea26469706673582212201b73035c6e5833984f1b0b362d487a512dbe0150d7ae252e0003e2a39ed367c964736f6c634300080d0033

Deployed Bytecode Sourcemap

5417:16954:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10350:76;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20983:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10084:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19732:292;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9281:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9494:106;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7348:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12039:101;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10890:388;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7430:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17944:90;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10260:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22263:105;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7973:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19486:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7383:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11422:96;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11833:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17758:178;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9386:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10701:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22160:97;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9611:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4782:94;;;;;;;;;;;;;:::i;:::-;;11937:96;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21217:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11626:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20146:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21454:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9083:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21335:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4131:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11729:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10432:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21572:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20541:242;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11524:96;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5966:71;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6317:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11286:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10530:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9740:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19608:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6231:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16902:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6417:66;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21792:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20293:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15963:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12146:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21887:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22057:97;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20030:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9927:148;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9175:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21689:97;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21100:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5031:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17507:243;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10350:76;10389:13;10416:5;10409:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10350:76;:::o;20983:111::-;4362:12;:10;:12::i;:::-;4351:23;;:7;:5;:7::i;:::-;:23;;;4343:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21077:9:::1;21065;:21;;;;20983:111:::0;:::o;10084:168::-;10161:4;10181:37;10190:12;:10;:12::i;:::-;10203:7;10211:6;10181:8;:37::i;:::-;10240:4;10233:11;;10084:168;;;;:::o;19732:292::-;4362:12;:10;:12::i;:::-;4351:23;;:7;:5;:7::i;:::-;:23;;;4343:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19865:4:::1;19828:17;:34;19854:6;19828:34;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;19909:4;19880:17;:26;19898:7;19880:26;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;19960:4;19924:16;:33;19949:6;19924:33;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;20003:4;19975:16;:25;19992:7;19975:25;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;19732:292:::0;;:::o;9281:98::-;9331:7;9361:9;;9354:16;;9281:98;:::o;9494:106::-;9549:7;9579:12;;9572:19;;9494:106;:::o;7348:28::-;;;;;;;;;;;;;:::o;12039:101::-;12090:7;12116:16;;12109:23;;12039:101;:::o;10890:388::-;11022:4;11056:11;:19;11068:6;11056:19;;;;;;;;;;;;;;;:33;11076:12;:10;:12::i;:::-;11056:33;;;;;;;;;;;;;;;;11046:6;:43;;11038:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;11139:36;11149:6;11157:9;11168:6;11139:9;:36::i;:::-;11180:74;11189:6;11197:12;:10;:12::i;:::-;11247:6;11211:11;:19;11223:6;11211:19;;;;;;;;;;;;;;;:33;11231:12;:10;:12::i;:::-;11211:33;;;;;;;;;;;;;;;;:42;;;;:::i;:::-;11180:8;:74::i;:::-;11266:4;11259:11;;10890:388;;;;;:::o;7430:81::-;;;:::o;17944:90::-;4362:12;:10;:12::i;:::-;4351:23;;:7;:5;:7::i;:::-;:23;;;4343:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18020:6:::1;18005:12;;:21;;;;;;;;;;;;;;;;;;17944:90:::0;:::o;10260:84::-;10301:7;10327:9;;;;;;;;;;;10320:16;;;;10260:84;:::o;22263:105::-;22314:7;22340:20;;22333:27;;22263:105;:::o;7973:28::-;;;;;;;;;;;;;:::o;19486:114::-;4362:12;:10;:12::i;:::-;4351:23;;:7;:5;:7::i;:::-;:23;;;4343:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19588:4:::1;19557:17;:28;19575:9;19557:28;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;19486:114:::0;:::o;7383:40::-;;;;;;;;;;;;;:::o;11422:96::-;11471:7;11501:9;;11494:16;;11422:96;:::o;11833:98::-;11883:7;11913:10;;11906:17;;11833:98;:::o;17758:178::-;4362:12;:10;:12::i;:::-;4351:23;;:7;:5;:7::i;:::-;:23;;;4343:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17834:18:::1;17855:21;17834:42;;17895:11;17887:29;;:41;17917:10;17887:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;17823:113;17758:178:::0;:::o;9386:99::-;9437:7;9467:9;;9460:16;;9386:99;:::o;10701:175::-;4362:12;:10;:12::i;:::-;4351:23;;:7;:5;:7::i;:::-;:23;;;4343:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10797:6:::1;10777:17;:26;;;;10863:3;10845:17;;10832:12;;:30;;;;:::i;:::-;:34;;;;:::i;:::-;10814:15;:52;;;;10701:175:::0;:::o;22160:97::-;22211:7;22237:12;;22230:19;;22160:97;:::o;9611:118::-;9677:7;9703:9;:18;9713:7;9703:18;;;;;;;;;;;;;;;;9696:25;;9611:118;;;:::o;4782:94::-;4362:12;:10;:12::i;:::-;4351:23;;:7;:5;:7::i;:::-;:23;;;4343:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4847:21:::1;4865:1;4847:9;:21::i;:::-;4782:94::o:0;11937:96::-;11988:7;12018;;12011:14;;11937:96;:::o;21217:108::-;4362:12;:10;:12::i;:::-;4351:23;;:7;:5;:7::i;:::-;:23;;;4343:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21308:9:::1;21300:6;:17;;;;21217:108:::0;:::o;11626:93::-;11675:7;11705:6;;11698:13;;11626:93;:::o;20146:113::-;4362:12;:10;:12::i;:::-;4351:23;;:7;:5;:7::i;:::-;:23;;;4343:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20243:8:::1;20219:21;;:32;;;;;;;;;;;;;;;;;;20146:113:::0;:::o;21454:112::-;4362:12;:10;:12::i;:::-;4351:23;;:7;:5;:7::i;:::-;:23;;;4343:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21549:9:::1;21537:10;:21;;;;21454:112:::0;:::o;9083:86::-;9124:7;9154;:5;:7::i;:::-;9147:14;;9083:86;:::o;21335:113::-;4362:12;:10;:12::i;:::-;4351:23;;:7;:5;:7::i;:::-;:23;;;4343:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21431:9:::1;21419:10;:21;;;;21335:113:::0;:::o;4131:87::-;4177:7;4204:6;;;;;;;;;;;4197:13;;4131:87;:::o;11729:98::-;11779:7;11809:10;;11802:17;;11729:98;:::o;10432:88::-;10473:13;10505:7;10498:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10432:88;:::o;21572:111::-;4362:12;:10;:12::i;:::-;4351:23;;:7;:5;:7::i;:::-;:23;;;4343:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21666:9:::1;21657:7;:18;;;;21572:111:::0;:::o;20541:242::-;4362:12;:10;:12::i;:::-;4351:23;;:7;:5;:7::i;:::-;:23;;;4343:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20648:13:::1;;;;;;;;;;;20640:21;;:4;:21;;::::0;20632:91:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;20734:41;20763:4;20769:5;20734:28;:41::i;:::-;20541:242:::0;;:::o;11524:96::-;11573:7;11603:9;;11596:16;;11524:96;:::o;5966:71::-;;;;:::o;6317:93::-;;;;;;;;;;;;;:::o;11286:130::-;4362:12;:10;:12::i;:::-;4351:23;;:7;:5;:7::i;:::-;:23;;;4343:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11403:5:::1;11377:10;:23;11388:11;11377:23;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;11286:130:::0;;:::o;10530:164::-;4362:12;:10;:12::i;:::-;4351:23;;:7;:5;:7::i;:::-;:23;;;4343:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10618:6:::1;10602:13;:22;;;;10676:3;10662:13;;10649:12;;:26;;;;:::i;:::-;:30;;;;:::i;:::-;10635:11;:44;;;;10530:164:::0;:::o;9740:176::-;9820:4;9840:40;9850:12;:10;:12::i;:::-;9863:9;9873:6;9840:9;:40::i;:::-;9902:4;9895:11;;9740:176;;;;:::o;19608:116::-;4362:12;:10;:12::i;:::-;4351:23;;:7;:5;:7::i;:::-;:23;;;4343:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19711:5:::1;19681:17;:27;19699:8;19681:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;19608:116:::0;:::o;6231:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;16902:86::-;4362:12;:10;:12::i;:::-;4351:23;;:7;:5;:7::i;:::-;:23;;;4343:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16972:8:::1;16966:3;;:14;;;;;;;;;;;;;;;;;;16902:86:::0;:::o;6417:66::-;;;;;;;;;;;;;:::o;21792:89::-;21836:7;21862:11;;21855:18;;21792:89;:::o;20293:118::-;4362:12;:10;:12::i;:::-;4351:23;;:7;:5;:7::i;:::-;:23;;;4343:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20392:10:::1;20365:16;;:38;;;;;;;;;;;;;;;;;;20293:118:::0;:::o;15963:123::-;4362:12;:10;:12::i;:::-;4351:23;;:7;:5;:7::i;:::-;:23;;;4343:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16067:4:::1;16035:17;:29;16053:10;16035:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;15963:123:::0;:::o;12146:118::-;12203:4;12230:17;:26;12248:7;12230:26;;;;;;;;;;;;;;;;;;;;;;;;;12223:33;;12146:118;;;:::o;21887:164::-;4362:12;:10;:12::i;:::-;4351:23;;:7;:5;:7::i;:::-;:23;;;4343:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21973:6:::1;21958:12;:21;;;;22039:4;22026:12;;22013;;:25;;;;:::i;:::-;:30;;;;:::i;:::-;21990:20;:53;;;;21887:164:::0;:::o;22057:97::-;22108:4;22131:12;;;;;;;;;;;22124:19;;22057:97;:::o;20030:110::-;4362:12;:10;:12::i;:::-;4351:23;;:7;:5;:7::i;:::-;:23;;;4343:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20120:12:::1;20101:16;:31;;;;20030:110:::0;:::o;9927:148::-;10010:7;10040:11;:18;10052:5;10040:18;;;;;;;;;;;;;;;:27;10059:7;10040:27;;;;;;;;;;;;;;;;10033:34;;9927:148;;;;:::o;9175:99::-;9226:7;9256:9;;9249:16;;9175:99;:::o;21689:97::-;21737:7;21763:15;;21756:22;;21689:97;:::o;21100:111::-;4362:12;:10;:12::i;:::-;4351:23;;:7;:5;:7::i;:::-;:23;;;4343:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21194:9:::1;21183;:20;;;;21100:111:::0;:::o;5031:192::-;4362:12;:10;:12::i;:::-;4351:23;;:7;:5;:7::i;:::-;:23;;;4343:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5140:1:::1;5120:22;;:8;:22;;::::0;5112:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;5196:19;5206:8;5196:9;:19::i;:::-;5031:192:::0;:::o;17507:243::-;4362:12;:10;:12::i;:::-;4351:23;;:7;:5;:7::i;:::-;:23;;;4343:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17700:12:::1;:21;;;17722:11;17735:6;17700:42;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17507:243:::0;;;:::o;91:98::-;144:7;171:10;164:17;;91:98;:::o;19132:316::-;19241:1;19224:19;;:5;:19;;;19216:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19316:1;19297:21;;:7;:21;;;19289:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19392:6;19362:11;:18;19374:5;19362:18;;;;;;;;;;;;;;;:27;19381:7;19362:27;;;;;;;;;;;;;;;:36;;;;19424:7;19408:32;;19417:5;19408:32;;;19433:6;19408:32;;;;;;:::i;:::-;;;;;;;;19132:316;;;:::o;12272:3252::-;12386:1;12370:18;;:4;:18;;;12362:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12457:1;12443:16;;:2;:16;;;12435:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;12527:1;12518:6;:10;12510:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;12593:21;12617:9;:15;12627:4;12617:15;;;;;;;;;;;;;;;;12593:39;;12668:6;12651:13;:23;;12643:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;12747:5;12731:21;;:12;;;;;;;;;;;:21;;;12728:141;;12776:17;:21;12794:2;12776:21;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;;12801:17;:23;12819:4;12801:23;;;;;;;;;;;;;;;;;;;;;;;;;12776:48;12768:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;12728:141;12905:5;12882:28;;:17;:21;12900:2;12882:21;;;;;;;;;;;;;;;;;;;;;;;;;:28;;;:62;;;;;12939:5;12914:30;;:17;:23;12932:4;12914:23;;;;;;;;;;;;;;;;;;;;;;;;;:30;;;12882:62;12879:163;;;12974:11;;12964:6;:21;;12956:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;12879:163;13052:25;13080:24;13098:4;13080:9;:24::i;:::-;13052:52;;13138:20;;13118:17;:40;;:66;;;;;13168:16;;;;;;;;;;;13167:17;13118:66;:96;;;;;13201:13;;;;;;;;;;;13193:21;;:4;:21;;;;13118:96;:126;;;;;13223:21;;;;;;;;;;;13118:126;13115:352;;;13288:20;;13267:17;:41;13264:188;;13353:20;;13333:40;;13396:36;13414:17;13396;:36::i;:::-;13264:188;13115:352;13483:13;13499:4;13483:20;;13549:17;:23;13567:4;13549:23;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;;13576:17;:21;13594:2;13576:21;;;;;;;;;;;;;;;;;;;;;;;;;13549:48;13546:159;;;13634:1;13618:13;:17;;;;13665:5;13654:16;;13546:159;13719:17;13755;13822;13900:8;13897:1106;;;13997:4;13977:24;;:10;:16;13988:4;13977:16;;;;;;;;;;;;;;;;;;;;;;;;;:24;;;:46;;;;14019:4;14003:20;;:10;:14;14014:2;14003:14;;;;;;;;;;;;;;;;;;;;;;;;;:20;;;13977:46;13974:127;;;14047:34;;;;;;;;;;:::i;:::-;;;;;;;;13974:127;14155:25;:29;14181:2;14155:29;;;;;;;;;;;;;;;;;;;;;;;;;:55;;;;;14202:7;;;;;;;;;;;14188:22;;:2;:22;;;;14155:55;14151:817;;;14255:1;14239:13;:17;;;;14315:3;14304:10;;14295:6;:19;;;;:::i;:::-;:23;;;;:::i;:::-;14283:35;;14377:3;14366:10;;14357:6;:19;;;;:::i;:::-;:23;;;;:::i;:::-;14345:35;;14436:3;14428:7;;14419:6;:16;;;;:::i;:::-;:20;;;;:::i;:::-;14407:32;;14506:9;14494;14482;:21;;;;:::i;:::-;:33;;;;:::i;:::-;14466:13;:49;;;;14151:817;;;14589:25;:31;14615:4;14589:31;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;;14640:7;;;;;;;;;;;14624:24;;:4;:24;;;;14589:59;14586:382;;;14707:1;14691:13;:17;;;;14762:3;14752:9;;14743:6;:18;;;;:::i;:::-;:22;;;;:::i;:::-;14731:34;;14819:3;14809:9;;14800:6;:18;;;;:::i;:::-;:22;;;;:::i;:::-;14788:34;;14873:3;14866:6;;14857;:15;;;;:::i;:::-;:19;;;;:::i;:::-;14845:31;;14939:9;14927;14915;:21;;;;:::i;:::-;:33;;;;:::i;:::-;14899:13;:49;;;;14586:382;14151:817;13897:1106;15053:6;15037:13;:22;;;;:::i;:::-;15019:9;:15;15029:4;15019:15;;;;;;;;;;;;;;;:40;;;;15124:9;15112;15100;15091:6;:18;;;;:::i;:::-;:30;;;;:::i;:::-;:42;;;;:::i;:::-;15074:9;:13;15084:2;15074:13;;;;;;;;;;;;;;;;:59;;;;;;;:::i;:::-;;;;;;;;15164:1;15151:9;:14;15148:286;;15201:13;;15173:9;:24;15191:4;15173:24;;;;;;;;;;;;;;;;:41;;;;;;;:::i;:::-;;;;;;;;15272:9;15259;;:22;;;;;;;:::i;:::-;;;;;;;;15309:9;15296;;:22;;;;;;;:::i;:::-;;;;;;;;15346:9;15333;;:22;;;;;;;:::i;:::-;;;;;;;;15389:4;15366:44;;15375:4;15366:44;;;15396:13;;15366:44;;;;;;:::i;:::-;;;;;;;;15148:286;15468:2;15453:39;;15462:4;15453:39;;;15478:13;;15471:6;:20;;;;:::i;:::-;15453:39;;;;;;:::i;:::-;;;;;;;;12341:3183;;;;;;12272:3252;;;:::o;5231:173::-;5287:16;5306:6;;;;;;;;;;;5287:25;;5332:8;5323:6;;:17;;;;;;;;;;;;;;;;;;5387:8;5356:40;;5377:8;5356:40;;;;;;;;;;;;5276:128;5231:173;:::o;20789:188::-;20906:5;20872:25;:31;20898:4;20872:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;20963:5;20929:40;;20957:4;20929:40;;;;;;;;;;;;20789:188;;:::o;15530:426::-;8080:4;8061:16;;:23;;;;;;;;;;;;;;;;;;15610:25:::1;15625:9;;15610:14;:25::i;:::-;15646:30;15666:9;;15646:19;:30::i;:::-;15687:21;15698:9;;15687:10;:21::i;:::-;15719:27;15749:21;15719:51;;15781:35;15792:19;15812:3;;;;;;;;;;;15781:10;:35::i;:::-;15832:44;15862:13;15832:44;;;;;;:::i;:::-;;;;;;;;15899:1;15887:9;:13;;;;15923:1;15911:9;:13;;;;15947:1;15935:9;:13;;;;15599:357;8114:5:::0;8095:16;;:24;;;;;;;;;;;;;;;;;;15530:426;:::o;18042:388::-;18104:12;18137:1;18119:15;:19;;;;:::i;:::-;18104:34;;18143:17;18181:4;18163:15;:22;;;;:::i;:::-;18143:42;;18190:22;18215:21;18190:46;;18243:22;18260:4;18243:16;:22::i;:::-;18270:18;18316:14;18291:21;:40;;;;:::i;:::-;18270:61;;18339:35;18352:9;18363:10;18339:12;:35::i;:::-;18384:41;18399:4;18404:10;18415:9;18384:41;;;;;;;;:::i;:::-;;;;;;;;18099:331;;;;18042:388;:::o;16092:399::-;16155:21;16193:1;16179:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16155:40;;16218:4;16200;16205:1;16200:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;16238:7;;;;;;;;;;;:12;;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16228:4;16233:1;16228:7;;;;;;;;:::i;:::-;;;;;;;:24;;;;;;;;;;;16257:49;16274:4;16289:7;;;;;;;;;;;16299:6;16257:8;:49::i;:::-;16317:7;;;;;;;;;;;:58;;;16381:6;16393:1;16429:4;16439:16;;;;;;;;;;;16461:15;16317:164;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16144:347;16092:399;:::o;16499:397::-;16553:21;16591:1;16577:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16553:40;;16616:4;16598;16603:1;16598:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;16636:7;;;;;;;;;;;:12;;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16626:4;16631:1;16626:7;;;;;;;;:::i;:::-;;;;;;;:24;;;;;;;;;;;16655:49;16672:4;16687:7;;;;;;;;;;;16697:6;16655:8;:49::i;:::-;16715:7;;;;;;;;;;;:58;;;16779:6;16791:1;16827:4;16845;16856:15;16715:161;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16542:354;16499:397;:::o;16994:505::-;17132:21;17170:1;17156:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17132:40;;17193:7;;;;;;;;;;;:12;;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17183:4;17188:1;17183:7;;;;;;;;:::i;:::-;;;;;;;:24;;;;;;;;;;;17228:11;17218:4;17223:1;17218:7;;;;;;;;:::i;:::-;;;;;;;:21;;;;;;;;;;;17278:7;;;;;;;;;;;:58;;;17344:9;17369:1;17418:4;17445;17465:15;17278:213;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17063:436;16994:505;;:::o;18438:397::-;18497:21;18535:1;18521:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18497:40;;18560:4;18542;18547:1;18542:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;18580:7;;;;;;;;;;;:12;;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18570:4;18575:1;18570:7;;;;;;;;:::i;:::-;;;;;;;:24;;;;;;;;;;;18599:54;18616:4;18631:7;;;;;;;;;;;18641:11;18599:8;:54::i;:::-;18664:7;;;;;;;;;;;:58;;;18728:11;18745:1;18781:4;18799;18810:15;18664:166;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18492:343;18438:397;:::o;18847:277::-;18920:54;18937:4;18952:7;;;;;;;;;;;18962:11;18920:8;:54::i;:::-;18981:7;;;;;;;;;;;:23;;;19011:9;19035:4;19046:11;19063:1;19070;19077:11;19099:15;18981:138;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;18847:277;;:::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;1478:117::-;1587:1;1584;1577:12;1724:77;1761:7;1790:5;1779:16;;1724:77;;;:::o;1807:122::-;1880:24;1898:5;1880:24;:::i;:::-;1873:5;1870:35;1860:63;;1919:1;1916;1909:12;1860:63;1807:122;:::o;1935:139::-;1981:5;2019:6;2006:20;1997:29;;2035:33;2062:5;2035:33;:::i;:::-;1935:139;;;;:::o;2080:329::-;2139:6;2188:2;2176:9;2167:7;2163:23;2159:32;2156:119;;;2194:79;;:::i;:::-;2156:119;2314:1;2339:53;2384:7;2375:6;2364:9;2360:22;2339:53;:::i;:::-;2329:63;;2285:117;2080:329;;;;:::o;2415:126::-;2452:7;2492:42;2485:5;2481:54;2470:65;;2415:126;;;:::o;2547:96::-;2584:7;2613:24;2631:5;2613:24;:::i;:::-;2602:35;;2547:96;;;:::o;2649:122::-;2722:24;2740:5;2722:24;:::i;:::-;2715:5;2712:35;2702:63;;2761:1;2758;2751:12;2702:63;2649:122;:::o;2777:139::-;2823:5;2861:6;2848:20;2839:29;;2877:33;2904:5;2877:33;:::i;:::-;2777:139;;;;:::o;2922:474::-;2990:6;2998;3047:2;3035:9;3026:7;3022:23;3018:32;3015:119;;;3053:79;;:::i;:::-;3015:119;3173:1;3198:53;3243:7;3234:6;3223:9;3219:22;3198:53;:::i;:::-;3188:63;;3144:117;3300:2;3326:53;3371:7;3362:6;3351:9;3347:22;3326:53;:::i;:::-;3316:63;;3271:118;2922:474;;;;;:::o;3402:90::-;3436:7;3479:5;3472:13;3465:21;3454:32;;3402:90;;;:::o;3498:109::-;3579:21;3594:5;3579:21;:::i;:::-;3574:3;3567:34;3498:109;;:::o;3613:210::-;3700:4;3738:2;3727:9;3723:18;3715:26;;3751:65;3813:1;3802:9;3798:17;3789:6;3751:65;:::i;:::-;3613:210;;;;:::o;3829:474::-;3897:6;3905;3954:2;3942:9;3933:7;3929:23;3925:32;3922:119;;;3960:79;;:::i;:::-;3922:119;4080:1;4105:53;4150:7;4141:6;4130:9;4126:22;4105:53;:::i;:::-;4095:63;;4051:117;4207:2;4233:53;4278:7;4269:6;4258:9;4254:22;4233:53;:::i;:::-;4223:63;;4178:118;3829:474;;;;;:::o;4309:118::-;4396:24;4414:5;4396:24;:::i;:::-;4391:3;4384:37;4309:118;;:::o;4433:222::-;4526:4;4564:2;4553:9;4549:18;4541:26;;4577:71;4645:1;4634:9;4630:17;4621:6;4577:71;:::i;:::-;4433:222;;;;:::o;4661:619::-;4738:6;4746;4754;4803:2;4791:9;4782:7;4778:23;4774:32;4771:119;;;4809:79;;:::i;:::-;4771:119;4929:1;4954:53;4999:7;4990:6;4979:9;4975:22;4954:53;:::i;:::-;4944:63;;4900:117;5056:2;5082:53;5127:7;5118:6;5107:9;5103:22;5082:53;:::i;:::-;5072:63;;5027:118;5184:2;5210:53;5255:7;5246:6;5235:9;5231:22;5210:53;:::i;:::-;5200:63;;5155:118;4661:619;;;;;:::o;5286:118::-;5373:24;5391:5;5373:24;:::i;:::-;5368:3;5361:37;5286:118;;:::o;5410:222::-;5503:4;5541:2;5530:9;5526:18;5518:26;;5554:71;5622:1;5611:9;5607:17;5598:6;5554:71;:::i;:::-;5410:222;;;;:::o;5638:116::-;5708:21;5723:5;5708:21;:::i;:::-;5701:5;5698:32;5688:60;;5744:1;5741;5734:12;5688:60;5638:116;:::o;5760:133::-;5803:5;5841:6;5828:20;5819:29;;5857:30;5881:5;5857:30;:::i;:::-;5760:133;;;;:::o;5899:323::-;5955:6;6004:2;5992:9;5983:7;5979:23;5975:32;5972:119;;;6010:79;;:::i;:::-;5972:119;6130:1;6155:50;6197:7;6188:6;6177:9;6173:22;6155:50;:::i;:::-;6145:60;;6101:114;5899:323;;;;:::o;6228:329::-;6287:6;6336:2;6324:9;6315:7;6311:23;6307:32;6304:119;;;6342:79;;:::i;:::-;6304:119;6462:1;6487:53;6532:7;6523:6;6512:9;6508:22;6487:53;:::i;:::-;6477:63;;6433:117;6228:329;;;;:::o;6563:104::-;6608:7;6637:24;6655:5;6637:24;:::i;:::-;6626:35;;6563:104;;;:::o;6673:138::-;6754:32;6780:5;6754:32;:::i;:::-;6747:5;6744:43;6734:71;;6801:1;6798;6791:12;6734:71;6673:138;:::o;6817:155::-;6871:5;6909:6;6896:20;6887:29;;6925:41;6960:5;6925:41;:::i;:::-;6817:155;;;;:::o;6978:345::-;7045:6;7094:2;7082:9;7073:7;7069:23;7065:32;7062:119;;;7100:79;;:::i;:::-;7062:119;7220:1;7245:61;7298:7;7289:6;7278:9;7274:22;7245:61;:::i;:::-;7235:71;;7191:125;6978:345;;;;:::o;7329:468::-;7394:6;7402;7451:2;7439:9;7430:7;7426:23;7422:32;7419:119;;;7457:79;;:::i;:::-;7419:119;7577:1;7602:53;7647:7;7638:6;7627:9;7623:22;7602:53;:::i;:::-;7592:63;;7548:117;7704:2;7730:50;7772:7;7763:6;7752:9;7748:22;7730:50;:::i;:::-;7720:60;;7675:115;7329:468;;;;;:::o;7803:142::-;7906:32;7932:5;7906:32;:::i;:::-;7901:3;7894:45;7803:142;;:::o;7951:254::-;8060:4;8098:2;8087:9;8083:18;8075:26;;8111:87;8195:1;8184:9;8180:17;8171:6;8111:87;:::i;:::-;7951:254;;;;:::o;8211:484::-;8284:6;8292;8341:2;8329:9;8320:7;8316:23;8312:32;8309:119;;;8347:79;;:::i;:::-;8309:119;8467:1;8492:61;8545:7;8536:6;8525:9;8521:22;8492:61;:::i;:::-;8482:71;;8438:125;8602:2;8628:50;8670:7;8661:6;8650:9;8646:22;8628:50;:::i;:::-;8618:60;;8573:115;8211:484;;;;;:::o;8701:109::-;8751:7;8780:24;8798:5;8780:24;:::i;:::-;8769:35;;8701:109;;;:::o;8816:148::-;8902:37;8933:5;8902:37;:::i;:::-;8895:5;8892:48;8882:76;;8954:1;8951;8944:12;8882:76;8816:148;:::o;8970:165::-;9029:5;9067:6;9054:20;9045:29;;9083:46;9123:5;9083:46;:::i;:::-;8970:165;;;;:::o;9141:661::-;9239:6;9247;9255;9304:2;9292:9;9283:7;9279:23;9275:32;9272:119;;;9310:79;;:::i;:::-;9272:119;9430:1;9455:66;9513:7;9504:6;9493:9;9489:22;9455:66;:::i;:::-;9445:76;;9401:130;9570:2;9596:61;9649:7;9640:6;9629:9;9625:22;9596:61;:::i;:::-;9586:71;;9541:126;9706:2;9732:53;9777:7;9768:6;9757:9;9753:22;9732:53;:::i;:::-;9722:63;;9677:118;9141:661;;;;;:::o;9808:180::-;9856:77;9853:1;9846:88;9953:4;9950:1;9943:15;9977:4;9974:1;9967:15;9994:320;10038:6;10075:1;10069:4;10065:12;10055:22;;10122:1;10116:4;10112:12;10143:18;10133:81;;10199:4;10191:6;10187:17;10177:27;;10133:81;10261:2;10253:6;10250:14;10230:18;10227:38;10224:84;;10280:18;;:::i;:::-;10224:84;10045:269;9994:320;;;:::o;10320:182::-;10460:34;10456:1;10448:6;10444:14;10437:58;10320:182;:::o;10508:366::-;10650:3;10671:67;10735:2;10730:3;10671:67;:::i;:::-;10664:74;;10747:93;10836:3;10747:93;:::i;:::-;10865:2;10860:3;10856:12;10849:19;;10508:366;;;:::o;10880:419::-;11046:4;11084:2;11073:9;11069:18;11061:26;;11133:9;11127:4;11123:20;11119:1;11108:9;11104:17;11097:47;11161:131;11287:4;11161:131;:::i;:::-;11153:139;;10880:419;;;:::o;11305:227::-;11445:34;11441:1;11433:6;11429:14;11422:58;11514:10;11509:2;11501:6;11497:15;11490:35;11305:227;:::o;11538:366::-;11680:3;11701:67;11765:2;11760:3;11701:67;:::i;:::-;11694:74;;11777:93;11866:3;11777:93;:::i;:::-;11895:2;11890:3;11886:12;11879:19;;11538:366;;;:::o;11910:419::-;12076:4;12114:2;12103:9;12099:18;12091:26;;12163:9;12157:4;12153:20;12149:1;12138:9;12134:17;12127:47;12191:131;12317:4;12191:131;:::i;:::-;12183:139;;11910:419;;;:::o;12335:180::-;12383:77;12380:1;12373:88;12480:4;12477:1;12470:15;12504:4;12501:1;12494:15;12521:191;12561:4;12581:20;12599:1;12581:20;:::i;:::-;12576:25;;12615:20;12633:1;12615:20;:::i;:::-;12610:25;;12654:1;12651;12648:8;12645:34;;;12659:18;;:::i;:::-;12645:34;12704:1;12701;12697:9;12689:17;;12521:191;;;;:::o;12718:348::-;12758:7;12781:20;12799:1;12781:20;:::i;:::-;12776:25;;12815:20;12833:1;12815:20;:::i;:::-;12810:25;;13003:1;12935:66;12931:74;12928:1;12925:81;12920:1;12913:9;12906:17;12902:105;12899:131;;;13010:18;;:::i;:::-;12899:131;13058:1;13055;13051:9;13040:20;;12718:348;;;;:::o;13072:180::-;13120:77;13117:1;13110:88;13217:4;13214:1;13207:15;13241:4;13238:1;13231:15;13258:185;13298:1;13315:20;13333:1;13315:20;:::i;:::-;13310:25;;13349:20;13367:1;13349:20;:::i;:::-;13344:25;;13388:1;13378:35;;13393:18;;:::i;:::-;13378:35;13435:1;13432;13428:9;13423:14;;13258:185;;;;:::o;13449:244::-;13589:34;13585:1;13577:6;13573:14;13566:58;13658:27;13653:2;13645:6;13641:15;13634:52;13449:244;:::o;13699:366::-;13841:3;13862:67;13926:2;13921:3;13862:67;:::i;:::-;13855:74;;13938:93;14027:3;13938:93;:::i;:::-;14056:2;14051:3;14047:12;14040:19;;13699:366;;;:::o;14071:419::-;14237:4;14275:2;14264:9;14260:18;14252:26;;14324:9;14318:4;14314:20;14310:1;14299:9;14295:17;14288:47;14352:131;14478:4;14352:131;:::i;:::-;14344:139;;14071:419;;;:::o;14496:225::-;14636:34;14632:1;14624:6;14620:14;14613:58;14705:8;14700:2;14692:6;14688:15;14681:33;14496:225;:::o;14727:366::-;14869:3;14890:67;14954:2;14949:3;14890:67;:::i;:::-;14883:74;;14966:93;15055:3;14966:93;:::i;:::-;15084:2;15079:3;15075:12;15068:19;;14727:366;;;:::o;15099:419::-;15265:4;15303:2;15292:9;15288:18;15280:26;;15352:9;15346:4;15342:20;15338:1;15327:9;15323:17;15316:47;15380:131;15506:4;15380:131;:::i;:::-;15372:139;;15099:419;;;:::o;15524:60::-;15552:3;15573:5;15566:12;;15524:60;;;:::o;15590:142::-;15640:9;15673:53;15691:34;15700:24;15718:5;15700:24;:::i;:::-;15691:34;:::i;:::-;15673:53;:::i;:::-;15660:66;;15590:142;;;:::o;15738:126::-;15788:9;15821:37;15852:5;15821:37;:::i;:::-;15808:50;;15738:126;;;:::o;15870:134::-;15928:9;15961:37;15992:5;15961:37;:::i;:::-;15948:50;;15870:134;;;:::o;16010:147::-;16105:45;16144:5;16105:45;:::i;:::-;16100:3;16093:58;16010:147;;:::o;16163:348::-;16292:4;16330:2;16319:9;16315:18;16307:26;;16343:79;16419:1;16408:9;16404:17;16395:6;16343:79;:::i;:::-;16432:72;16500:2;16489:9;16485:18;16476:6;16432:72;:::i;:::-;16163:348;;;;;:::o;16517:137::-;16571:5;16602:6;16596:13;16587:22;;16618:30;16642:5;16618:30;:::i;:::-;16517:137;;;;:::o;16660:345::-;16727:6;16776:2;16764:9;16755:7;16751:23;16747:32;16744:119;;;16782:79;;:::i;:::-;16744:119;16902:1;16927:61;16980:7;16971:6;16960:9;16956:22;16927:61;:::i;:::-;16917:71;;16873:125;16660:345;;;;:::o;17011:223::-;17151:34;17147:1;17139:6;17135:14;17128:58;17220:6;17215:2;17207:6;17203:15;17196:31;17011:223;:::o;17240:366::-;17382:3;17403:67;17467:2;17462:3;17403:67;:::i;:::-;17396:74;;17479:93;17568:3;17479:93;:::i;:::-;17597:2;17592:3;17588:12;17581:19;;17240:366;;;:::o;17612:419::-;17778:4;17816:2;17805:9;17801:18;17793:26;;17865:9;17859:4;17855:20;17851:1;17840:9;17836:17;17829:47;17893:131;18019:4;17893:131;:::i;:::-;17885:139;;17612:419;;;:::o;18037:221::-;18177:34;18173:1;18165:6;18161:14;18154:58;18246:4;18241:2;18233:6;18229:15;18222:29;18037:221;:::o;18264:366::-;18406:3;18427:67;18491:2;18486:3;18427:67;:::i;:::-;18420:74;;18503:93;18592:3;18503:93;:::i;:::-;18621:2;18616:3;18612:12;18605:19;;18264:366;;;:::o;18636:419::-;18802:4;18840:2;18829:9;18825:18;18817:26;;18889:9;18883:4;18879:20;18875:1;18864:9;18860:17;18853:47;18917:131;19043:4;18917:131;:::i;:::-;18909:139;;18636:419;;;:::o;19061:224::-;19201:34;19197:1;19189:6;19185:14;19178:58;19270:7;19265:2;19257:6;19253:15;19246:32;19061:224;:::o;19291:366::-;19433:3;19454:67;19518:2;19513:3;19454:67;:::i;:::-;19447:74;;19530:93;19619:3;19530:93;:::i;:::-;19648:2;19643:3;19639:12;19632:19;;19291:366;;;:::o;19663:419::-;19829:4;19867:2;19856:9;19852:18;19844:26;;19916:9;19910:4;19906:20;19902:1;19891:9;19887:17;19880:47;19944:131;20070:4;19944:131;:::i;:::-;19936:139;;19663:419;;;:::o;20088:222::-;20228:34;20224:1;20216:6;20212:14;20205:58;20297:5;20292:2;20284:6;20280:15;20273:30;20088:222;:::o;20316:366::-;20458:3;20479:67;20543:2;20538:3;20479:67;:::i;:::-;20472:74;;20555:93;20644:3;20555:93;:::i;:::-;20673:2;20668:3;20664:12;20657:19;;20316:366;;;:::o;20688:419::-;20854:4;20892:2;20881:9;20877:18;20869:26;;20941:9;20935:4;20931:20;20927:1;20916:9;20912:17;20905:47;20969:131;21095:4;20969:131;:::i;:::-;20961:139;;20688:419;;;:::o;21113:237::-;21253:34;21249:1;21241:6;21237:14;21230:58;21322:20;21317:2;21309:6;21305:15;21298:45;21113:237;:::o;21356:366::-;21498:3;21519:67;21583:2;21578:3;21519:67;:::i;:::-;21512:74;;21595:93;21684:3;21595:93;:::i;:::-;21713:2;21708:3;21704:12;21697:19;;21356:366;;;:::o;21728:419::-;21894:4;21932:2;21921:9;21917:18;21909:26;;21981:9;21975:4;21971:20;21967:1;21956:9;21952:17;21945:47;22009:131;22135:4;22009:131;:::i;:::-;22001:139;;21728:419;;;:::o;22153:225::-;22293:34;22289:1;22281:6;22277:14;22270:58;22362:8;22357:2;22349:6;22345:15;22338:33;22153:225;:::o;22384:366::-;22526:3;22547:67;22611:2;22606:3;22547:67;:::i;:::-;22540:74;;22623:93;22712:3;22623:93;:::i;:::-;22741:2;22736:3;22732:12;22725:19;;22384:366;;;:::o;22756:419::-;22922:4;22960:2;22949:9;22945:18;22937:26;;23009:9;23003:4;22999:20;22995:1;22984:9;22980:17;22973:47;23037:131;23163:4;23037:131;:::i;:::-;23029:139;;22756:419;;;:::o;23181:179::-;23321:31;23317:1;23309:6;23305:14;23298:55;23181:179;:::o;23366:366::-;23508:3;23529:67;23593:2;23588:3;23529:67;:::i;:::-;23522:74;;23605:93;23694:3;23605:93;:::i;:::-;23723:2;23718:3;23714:12;23707:19;;23366:366;;;:::o;23738:419::-;23904:4;23942:2;23931:9;23927:18;23919:26;;23991:9;23985:4;23981:20;23977:1;23966:9;23962:17;23955:47;24019:131;24145:4;24019:131;:::i;:::-;24011:139;;23738:419;;;:::o;24163:227::-;24303:34;24299:1;24291:6;24287:14;24280:58;24372:10;24367:2;24359:6;24355:15;24348:35;24163:227;:::o;24396:366::-;24538:3;24559:67;24623:2;24618:3;24559:67;:::i;:::-;24552:74;;24635:93;24724:3;24635:93;:::i;:::-;24753:2;24748:3;24744:12;24737:19;;24396:366;;;:::o;24768:419::-;24934:4;24972:2;24961:9;24957:18;24949:26;;25021:9;25015:4;25011:20;25007:1;24996:9;24992:17;24985:47;25049:131;25175:4;25049:131;:::i;:::-;25041:139;;24768:419;;;:::o;25193:174::-;25333:26;25329:1;25321:6;25317:14;25310:50;25193:174;:::o;25373:366::-;25515:3;25536:67;25600:2;25595:3;25536:67;:::i;:::-;25529:74;;25612:93;25701:3;25612:93;:::i;:::-;25730:2;25725:3;25721:12;25714:19;;25373:366;;;:::o;25745:419::-;25911:4;25949:2;25938:9;25934:18;25926:26;;25998:9;25992:4;25988:20;25984:1;25973:9;25969:17;25962:47;26026:131;26152:4;26026:131;:::i;:::-;26018:139;;25745:419;;;:::o;26170:305::-;26210:3;26229:20;26247:1;26229:20;:::i;:::-;26224:25;;26263:20;26281:1;26263:20;:::i;:::-;26258:25;;26417:1;26349:66;26345:74;26342:1;26339:81;26336:107;;;26423:18;;:::i;:::-;26336:107;26467:1;26464;26460:9;26453:16;;26170:305;;;;:::o;26481:442::-;26630:4;26668:2;26657:9;26653:18;26645:26;;26681:71;26749:1;26738:9;26734:17;26725:6;26681:71;:::i;:::-;26762:72;26830:2;26819:9;26815:18;26806:6;26762:72;:::i;:::-;26844;26912:2;26901:9;26897:18;26888:6;26844:72;:::i;:::-;26481:442;;;;;;:::o;26929:180::-;26977:77;26974:1;26967:88;27074:4;27071:1;27064:15;27098:4;27095:1;27088:15;27115:180;27163:77;27160:1;27153:88;27260:4;27257:1;27250:15;27284:4;27281:1;27274:15;27301:143;27358:5;27389:6;27383:13;27374:22;;27405:33;27432:5;27405:33;:::i;:::-;27301:143;;;;:::o;27450:351::-;27520:6;27569:2;27557:9;27548:7;27544:23;27540:32;27537:119;;;27575:79;;:::i;:::-;27537:119;27695:1;27720:64;27776:7;27767:6;27756:9;27752:22;27720:64;:::i;:::-;27710:74;;27666:128;27450:351;;;;:::o;27807:85::-;27852:7;27881:5;27870:16;;27807:85;;;:::o;27898:158::-;27956:9;27989:61;28007:42;28016:32;28042:5;28016:32;:::i;:::-;28007:42;:::i;:::-;27989:61;:::i;:::-;27976:74;;27898:158;;;:::o;28062:147::-;28157:45;28196:5;28157:45;:::i;:::-;28152:3;28145:58;28062:147;;:::o;28215:114::-;28282:6;28316:5;28310:12;28300:22;;28215:114;;;:::o;28335:184::-;28434:11;28468:6;28463:3;28456:19;28508:4;28503:3;28499:14;28484:29;;28335:184;;;;:::o;28525:132::-;28592:4;28615:3;28607:11;;28645:4;28640:3;28636:14;28628:22;;28525:132;;;:::o;28663:108::-;28740:24;28758:5;28740:24;:::i;:::-;28735:3;28728:37;28663:108;;:::o;28777:179::-;28846:10;28867:46;28909:3;28901:6;28867:46;:::i;:::-;28945:4;28940:3;28936:14;28922:28;;28777:179;;;;:::o;28962:113::-;29032:4;29064;29059:3;29055:14;29047:22;;28962:113;;;:::o;29111:732::-;29230:3;29259:54;29307:5;29259:54;:::i;:::-;29329:86;29408:6;29403:3;29329:86;:::i;:::-;29322:93;;29439:56;29489:5;29439:56;:::i;:::-;29518:7;29549:1;29534:284;29559:6;29556:1;29553:13;29534:284;;;29635:6;29629:13;29662:63;29721:3;29706:13;29662:63;:::i;:::-;29655:70;;29748:60;29801:6;29748:60;:::i;:::-;29738:70;;29594:224;29581:1;29578;29574:9;29569:14;;29534:284;;;29538:14;29834:3;29827:10;;29235:608;;;29111:732;;;;:::o;29849:847::-;30120:4;30158:3;30147:9;30143:19;30135:27;;30172:71;30240:1;30229:9;30225:17;30216:6;30172:71;:::i;:::-;30253:80;30329:2;30318:9;30314:18;30305:6;30253:80;:::i;:::-;30380:9;30374:4;30370:20;30365:2;30354:9;30350:18;30343:48;30408:108;30511:4;30502:6;30408:108;:::i;:::-;30400:116;;30526:80;30602:2;30591:9;30587:18;30578:6;30526:80;:::i;:::-;30616:73;30684:3;30673:9;30669:19;30660:6;30616:73;:::i;:::-;29849:847;;;;;;;;:::o;30702:831::-;30965:4;31003:3;30992:9;30988:19;30980:27;;31017:71;31085:1;31074:9;31070:17;31061:6;31017:71;:::i;:::-;31098:80;31174:2;31163:9;31159:18;31150:6;31098:80;:::i;:::-;31225:9;31219:4;31215:20;31210:2;31199:9;31195:18;31188:48;31253:108;31356:4;31347:6;31253:108;:::i;:::-;31245:116;;31371:72;31439:2;31428:9;31424:18;31415:6;31371:72;:::i;:::-;31453:73;31521:3;31510:9;31506:19;31497:6;31453:73;:::i;:::-;30702:831;;;;;;;;:::o;31539:720::-;31774:4;31812:3;31801:9;31797:19;31789:27;;31826:79;31902:1;31891:9;31887:17;31878:6;31826:79;:::i;:::-;31952:9;31946:4;31942:20;31937:2;31926:9;31922:18;31915:48;31980:108;32083:4;32074:6;31980:108;:::i;:::-;31972:116;;32098:72;32166:2;32155:9;32151:18;32142:6;32098:72;:::i;:::-;32180;32248:2;32237:9;32233:18;32224:6;32180:72;:::i;:::-;31539:720;;;;;;;:::o;32265:807::-;32514:4;32552:3;32541:9;32537:19;32529:27;;32566:71;32634:1;32623:9;32619:17;32610:6;32566:71;:::i;:::-;32647:72;32715:2;32704:9;32700:18;32691:6;32647:72;:::i;:::-;32729:80;32805:2;32794:9;32790:18;32781:6;32729:80;:::i;:::-;32819;32895:2;32884:9;32880:18;32871:6;32819:80;:::i;:::-;32909:73;32977:3;32966:9;32962:19;32953:6;32909:73;:::i;:::-;32992;33060:3;33049:9;33045:19;33036:6;32992:73;:::i;:::-;32265:807;;;;;;;;;:::o;33078:143::-;33135:5;33166:6;33160:13;33151:22;;33182:33;33209:5;33182:33;:::i;:::-;33078:143;;;;:::o;33227:663::-;33315:6;33323;33331;33380:2;33368:9;33359:7;33355:23;33351:32;33348:119;;;33386:79;;:::i;:::-;33348:119;33506:1;33531:64;33587:7;33578:6;33567:9;33563:22;33531:64;:::i;:::-;33521:74;;33477:128;33644:2;33670:64;33726:7;33717:6;33706:9;33702:22;33670:64;:::i;:::-;33660:74;;33615:129;33783:2;33809:64;33865:7;33856:6;33845:9;33841:22;33809:64;:::i;:::-;33799:74;;33754:129;33227:663;;;;;:::o

Swarm Source

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