ETH Price: $2,946.31 (-6.68%)
Gas: 8 Gwei

Token

UniBridge (UniBridge)
 

Overview

Max Total Supply

1,000,000 UniBridge

Holders

552

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

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:
UniBridge

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-10-26
*/

/** 
   Unibridge is a groundbreaking initiative designed 
   to bridge the gap between various blockchain ecosystems 
   going from one blockchain to another with speed, user-friendliness and privacy.

Welcome to the future of cross-chain.

Website: https://unibridge.app
Twitter: https://x.com/unibridgecrypto
Customer Service Bot: @UnibridgeCSBot
Exchange Bot: @Uni_Bridge_Bot
TG Portal: https://t.me/UniBridgeEx
  
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.4;

abstract contract Context {

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

    function _msgData() internal view virtual returns (bytes memory) {
      
        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 SafeMath {

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

contract Ownable is Context {
    address private _owner;

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

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

    function owner() public view returns (address) {
        return _owner;
    }   
    
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0x000000000000000000000000000000000000dEaD));
        _owner = address(0x000000000000000000000000000000000000dEaD);
    }

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

}

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 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 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 UniBridge is Context, IERC20, Ownable {
    
    using SafeMath for uint256;
    
    string private _name = "UniBridge";
    string private _symbol = "UniBridge";
    uint8 private _decimals = 18;

    address payable public marketingWallet = payable(0x7517EF878cf234f18835ee9d566d03290CFd03A1);
    address payable public DeveloperWallet = payable(0x7517EF878cf234f18835ee9d566d03290CFd03A1);
    address public liquidityReciever;
    
    address public immutable deadAddress = 0x000000000000000000000000000000000000dEaD;
    address public immutable zeroAddress = 0x0000000000000000000000000000000000000000;

    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    
    bool public tradingEnabled;

    mapping (address => bool) public isExcludedFromFee;
    mapping (address => bool) public isMarketPair;
    
    // mapping (address => bool) public blacklist;
    mapping (address => bool) public isWalletLimitExempt;
    mapping (address => bool) public isTxLimitExempt;

    uint256 public _buyLiquidityFee = 0;
    uint256 public _buyMarketingFee = 25;
    uint256 public _buyDeveloperFee = 0;
    
    uint256 public _sellLiquidityFee = 0;
    uint256 public _sellMarketingFee = 25;
    uint256 public _sellDeveloperFee = 0;

    uint256 public feeUnits = 100;

    uint256 public _totalTaxIfBuying;
    uint256 public _totalTaxIfSelling;

    uint256 private _totalSupply = 1000000 * 10**_decimals;

    uint256 public minimumTokensBeforeSwap = _totalSupply.mul(1).div(100);   //0.001%

    uint256 public _maxTxAmount =  _totalSupply.mul(2).div(100);  //2%
    uint256 public _walletMax =   _totalSupply.mul(2).div(100);   //2%

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapPair;
    
    bool inSwapAndLiquify;

    bool public swapAndLiquifyEnabled = true;
    bool public swapAndLiquifyByLimitOnly = false;

    bool public checkWalletLimit = true;
    bool public EnableTransactionLimit = true;

    event SwapAndLiquifyEnabledUpdated(bool enabled);

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    event SwapETHForTokens(
        uint256 amountIn,
        address[] path
    );
    
    event SwapTokensForETH(
        uint256 amountIn,
        address[] path
    );
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor () {
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); 
        
        uniswapPair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        
        _allowances[address(this)][address(uniswapV2Router)] = ~uint256(0);

        isExcludedFromFee[owner()] = true;
        isExcludedFromFee[marketingWallet] = true;
        isExcludedFromFee[DeveloperWallet] = true;
        isExcludedFromFee[address(this)] = true;

        isWalletLimitExempt[owner()] = true;
        isWalletLimitExempt[marketingWallet] = true;
        isWalletLimitExempt[DeveloperWallet] = true;
        isWalletLimitExempt[address(uniswapPair)] = true;
        isWalletLimitExempt[address(this)] = true;
        
        isTxLimitExempt[owner()] = true;
        isTxLimitExempt[marketingWallet] = true;
        isTxLimitExempt[DeveloperWallet] = true;
        isTxLimitExempt[address(this)] = true;
        
        _totalTaxIfBuying = _buyLiquidityFee.add(_buyMarketingFee).add(_buyDeveloperFee);
        _totalTaxIfSelling = _sellLiquidityFee.add(_sellMarketingFee).add(_sellDeveloperFee);

        isMarketPair[address(uniswapPair)] = true;
        liquidityReciever = address(msg.sender);

        _balances[_msgSender()] = _totalSupply;
        emit Transfer(address(0), _msgSender(), _totalSupply);
    }

    function setTradingEnabled(bool _enabled) external onlyOwner{
        tradingEnabled = _enabled;

    }

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

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

    function decimals() public view returns (uint8) {
        return _decimals;
    }

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

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

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

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

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

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

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

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

    function setMarketPairStatus(address account, bool newValue) public onlyOwner {
        isMarketPair[account] = newValue;
    }

    function setIsExcludedFromFee(address account, bool newValue) public onlyOwner {
        isExcludedFromFee[account] = newValue;
    }

    function setIsTxLimitExempt(address holder, bool exempt) external onlyOwner {
        isTxLimitExempt[holder] = exempt;
    }
    
    function setIsWalletLimitExempt(address holder, bool exempt) external onlyOwner {
        isWalletLimitExempt[holder] = exempt;
    }

    function enableTxLimit(bool _status) external onlyOwner {
        EnableTransactionLimit = _status;
    }

    function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() {
        _maxTxAmount = maxTxAmount;
    }

    function enableDisableWalletLimit(bool newValue) external onlyOwner {
       checkWalletLimit = newValue;
    }

    function setWalletLimit(uint256 newLimit) external onlyOwner {
        _walletMax  = newLimit;
    }

    function setNumTokensBeforeSwap(uint256 newLimit) external onlyOwner() {
        minimumTokensBeforeSwap = newLimit;
    }

    function setMarketingWalletAddress(address newAddress) external onlyOwner() {
        marketingWallet = payable(newAddress);
    }

    function setLiquidityWalletAddress(address newAddress) external onlyOwner() {
        liquidityReciever = payable(newAddress);
    }

    function setDeveloperWalletAddress(address newAddress) external onlyOwner() {
        DeveloperWallet = payable(newAddress);
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    function setSwapAndLiquifyByLimitOnly(bool newValue) public onlyOwner {
        swapAndLiquifyByLimitOnly = newValue;
    }
    
    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(deadAddress)).sub(balanceOf(zeroAddress));
    }

    // function setBlacklist(address _adr, bool _status) external onlyOwner {
    //     blacklist[_adr] = _status;
    // }

    function transferToAddressETH(address payable recipient, uint256 amount) private {
        recipient.transfer(amount);
    }
    
    function changeRouterVersion(address newRouterAddress) public onlyOwner returns(address newPairAddress) {

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(newRouterAddress); 

        newPairAddress = IUniswapV2Factory(_uniswapV2Router.factory()).getPair(address(this), _uniswapV2Router.WETH());

        if(newPairAddress == address(0)) //Create If Doesnt exist
        {
            newPairAddress = IUniswapV2Factory(_uniswapV2Router.factory())
                .createPair(address(this), _uniswapV2Router.WETH());
        }

        uniswapPair = newPairAddress; //Set new pair address
        uniswapV2Router = _uniswapV2Router; //Set new router address

        isMarketPair[address(uniswapPair)] = true;
    }

    function setBuyTaxes(uint _Liquidity, uint _Marketing , uint _Developer) public onlyOwner {
        _buyLiquidityFee = _Liquidity;
        _buyMarketingFee = _Marketing;
        _buyDeveloperFee = _Developer;
        _totalTaxIfBuying = _buyLiquidityFee.add(_buyMarketingFee).add(_buyDeveloperFee);
        require(_totalTaxIfBuying <= (feeUnits/25), "Buy fees must be 25% or less");
    }

    function setSellTaxes(uint _Liquidity, uint _Marketing , uint _Developer) public onlyOwner {
        _sellLiquidityFee = _Liquidity;
        _sellMarketingFee = _Marketing;
        _sellDeveloperFee = _Developer;
        _totalTaxIfSelling = _sellLiquidityFee.add(_sellMarketingFee).add(_sellDeveloperFee);
        require(_totalTaxIfSelling <= (feeUnits/25), "Sell fees must be 25% or less");
    }
    

     //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}

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

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

    function _transfer(address sender, address recipient, uint256 amount) private returns (bool) {

        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        // require(!blacklist[sender] && !blacklist[recipient], "Bot Enemy address Restricted!");
        //  if(!_whitelisted[from]) { require(tradingEnabled, "Trading is not enabled yet");}


        if(inSwapAndLiquify)
        { 
            return _basicTransfer(sender, recipient, amount); 
        }
        else
        {

            if(!isTxLimitExempt[sender] && !isTxLimitExempt[recipient] && EnableTransactionLimit) {
                require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
            }

            uint256 contractTokenBalance = balanceOf(address(this));
            bool overMinimumTokenBalance = contractTokenBalance >= minimumTokensBeforeSwap;
            
            if (overMinimumTokenBalance && !inSwapAndLiquify && !isMarketPair[sender] && swapAndLiquifyEnabled) 
            {
                if(swapAndLiquifyByLimitOnly)
                    contractTokenBalance = minimumTokensBeforeSwap;
                swapAndLiquify(contractTokenBalance);    
            }

            _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");

            uint256 finalAmount = (isExcludedFromFee[sender] || isExcludedFromFee[recipient]) ? 
                                         amount : takeFee(sender, recipient, amount);

            if(checkWalletLimit && !isWalletLimitExempt[recipient]) {
                require(balanceOf(recipient).add(finalAmount) <= _walletMax,"Amount Exceed From Max Wallet Limit!!");
            }

            _balances[recipient] = _balances[recipient].add(finalAmount);

            emit Transfer(sender, recipient, finalAmount);
            return true;
        }
        
    }

    function rescueStuckedToken(address _token, uint _amount) external onlyOwner {
        IERC20(_token).transfer(msg.sender,_amount);
    }

    function rescueFunds() external onlyOwner {
        (bool os,) = payable(msg.sender).call{value: address(this).balance}("");
        require(os);
    }

    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
        return true;
    }

    function swapAndLiquify(uint256 tAmount) private lockTheSwap {

        uint256 totalShares = _totalTaxIfBuying.add(_totalTaxIfSelling);

        uint256 liquidityShare = _buyLiquidityFee.add(_sellLiquidityFee);
        uint256 MarketingShare = _buyMarketingFee.add(_sellMarketingFee);
        // uint256 DeveloperShare = _buyDeveloperFee.add(_sellDeveloperFee);
        
        uint256 tokenForLp = tAmount.mul(liquidityShare).div(totalShares).div(2);
        uint256 tokenForSwap = tAmount.sub(tokenForLp);

        uint256 initialBalance =  address(this).balance;
        swapTokensForEth(tokenForSwap);
        uint256 recievedBalance =  address(this).balance.sub(initialBalance);

        uint256 totalETHFee = totalShares.sub(liquidityShare.div(2));

        uint256 amountETHLiquidity = recievedBalance.mul(liquidityShare).div(totalETHFee).div(2);
        uint256 amountETHMarketing = recievedBalance.mul(MarketingShare).div(totalETHFee);
        uint256 amountETHDeveloper = recievedBalance.sub(amountETHLiquidity).sub(amountETHMarketing);

        if(amountETHMarketing > 0) {
            payable(marketingWallet).transfer(amountETHMarketing);
        }

        if(amountETHDeveloper > 0) {
            payable(DeveloperWallet).transfer(amountETHDeveloper);
        }         

        if(amountETHLiquidity > 0 && tokenForLp > 0) {
            addLiquidity(tokenForLp, amountETHLiquidity);
        }
    }
    
    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this), // The contract
            block.timestamp
        );
        
        emit SwapTokensForETH(tokenAmount, path);
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

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

    function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) {
        
        uint256 feeAmount = 0;
        
        if(isMarketPair[sender]) {
            feeAmount = amount.mul(_totalTaxIfBuying).div(100);
        }
        else if(isMarketPair[recipient]) {
            feeAmount = amount.mul(_totalTaxIfSelling).div(100);
        }
        
        if(feeAmount > 0) {
            _balances[address(this)] = _balances[address(this)].add(feeAmount);
            emit Transfer(sender, address(this), feeAmount);
        }

        return amount.sub(feeAmount);
    }

    /* AirDrop Function*/

    function airdrop(address[] calldata _address,uint[] calldata _tokens) external onlyOwner {
        address account = msg.sender;
        require(_address.length == _tokens.length,"Error: Mismatch Length");
        uint tokenCount;
        for(uint i = 0; i < _tokens.length; i++) {
            tokenCount += _tokens[i];
        }
        require(balanceOf(account) >= tokenCount,"Error: Insufficient Error!!");
        _balances[account] = _balances[account].sub(tokenCount); 
        for(uint j = 0; j < _address.length; j++) {
            _balances[_address[j]] = _balances[_address[j]].add(_tokens[j]);
            emit Transfer(account, _address[j], _tokens[j]);
        }

    }

    
}

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":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DeveloperWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"EnableTransactionLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyDeveloperFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellDeveloperFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalTaxIfBuying","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalTaxIfSelling","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_walletMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_address","type":"address[]"},{"internalType":"uint256[]","name":"_tokens","type":"uint256[]"}],"name":"airdrop","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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newRouterAddress","type":"address"}],"name":"changeRouterVersion","outputs":[{"internalType":"address","name":"newPairAddress","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"checkWalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newValue","type":"bool"}],"name":"enableDisableWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"enableTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeUnits","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isMarketPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isTxLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isWalletLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityReciever","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rescueFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"rescueStuckedToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_Liquidity","type":"uint256"},{"internalType":"uint256","name":"_Marketing","type":"uint256"},{"internalType":"uint256","name":"_Developer","type":"uint256"}],"name":"setBuyTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setDeveloperWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setIsExcludedFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsWalletLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setLiquidityWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setMarketPairStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setMarketingWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setNumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_Liquidity","type":"uint256"},{"internalType":"uint256","name":"_Marketing","type":"uint256"},{"internalType":"uint256","name":"_Developer","type":"uint256"}],"name":"setSellTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setSwapAndLiquifyByLimitOnly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setTradingEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyByLimitOnly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"zeroAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526040518060400160405280600981526020017f556e694272696467650000000000000000000000000000000000000000000000815250600190805190602001906200005192919062001048565b506040518060400160405280600981526020017f556e694272696467650000000000000000000000000000000000000000000000815250600290805190602001906200009f92919062001048565b506012600360006101000a81548160ff021916908360ff160217905550737517ef878cf234f18835ee9d566d03290cfd03a1600360016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550737517ef878cf234f18835ee9d566d03290cfd03a1600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead73ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1660601b815250600073ffffffffffffffffffffffffffffffffffffffff1660a09073ffffffffffffffffffffffffffffffffffffffff1660601b8152506000600d556019600e556000600f556000601055601960115560006012556064601355600360009054906101000a900460ff16600a620002169190620013aa565b620f4240620002269190620014e7565b6016556200026060646200024c600160165462000e7660201b620033c91790919060201c565b62000efa60201b620034441790919060201c565b6017556200029a606462000286600260165462000e7660201b620033c91790919060201c565b62000efa60201b620034441790919060201c565b601855620002d46064620002c0600260165462000e7660201b620033c91790919060201c565b62000efa60201b620034441790919060201c565b6019556001601b60156101000a81548160ff0219169083151502179055506000601b60166101000a81548160ff0219169083151502179055506001601b60176101000a81548160ff0219169083151502179055506001601b60186101000a81548160ff0219169083151502179055503480156200035057600080fd5b5060006200036362000f4c60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200046157600080fd5b505afa15801562000476573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200049c91906200110f565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620004ff57600080fd5b505afa15801562000514573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200053a91906200110f565b6040518363ffffffff1660e01b815260040162000559929190620011ec565b602060405180830381600087803b1580156200057457600080fd5b505af115801562000589573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005af91906200110f565b601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600019600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160096000620006eb62000f5460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160096000600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160096000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b60006200089e62000f5460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c600062000acb62000f5460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c6000600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000ca1600f5462000c8d600e54600d5462000f7d60201b6200348e1790919060201c565b62000f7d60201b6200348e1790919060201c565b60148190555062000ce060125462000ccc60115460105462000f7d60201b6200348e1790919060201c565b62000f7d60201b6200348e1790919060201c565b6015819055506001600a6000601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555033600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506016546006600062000db862000f4c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062000e0662000f4c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60165460405162000e67919062001281565b60405180910390a3506200173c565b60008083141562000e8b576000905062000ef4565b6000828462000e9b9190620014e7565b905082848262000eac919062001317565b1462000eef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ee6906200125f565b60405180910390fd5b809150505b92915050565b600062000f4483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525062000fe060201b60201c565b905092915050565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080828462000f8e9190620012ba565b90508381101562000fd6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000fcd906200123d565b60405180910390fd5b8091505092915050565b600080831182906200102a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162001021919062001219565b60405180910390fd5b50600083856200103b919062001317565b9050809150509392505050565b8280546200105690620015c9565b90600052602060002090601f0160209004810192826200107a5760008555620010c6565b82601f106200109557805160ff1916838001178555620010c6565b82800160010185558215620010c6579182015b82811115620010c5578251825591602001919060010190620010a8565b5b509050620010d59190620010d9565b5090565b5b80821115620010f4576000816000905550600101620010da565b5090565b600081519050620011098162001722565b92915050565b6000602082840312156200112257600080fd5b60006200113284828501620010f8565b91505092915050565b620011468162001548565b82525050565b600062001159826200129e565b620011658185620012a9565b93506200117781856020860162001593565b62001182816200168c565b840191505092915050565b60006200119c601b83620012a9565b9150620011a982620016aa565b602082019050919050565b6000620011c3602183620012a9565b9150620011d082620016d3565b604082019050919050565b620011e6816200157c565b82525050565b60006040820190506200120360008301856200113b565b6200121260208301846200113b565b9392505050565b600060208201905081810360008301526200123581846200114c565b905092915050565b6000602082019050818103600083015262001258816200118d565b9050919050565b600060208201905081810360008301526200127a81620011b4565b9050919050565b6000602082019050620012986000830184620011db565b92915050565b600081519050919050565b600082825260208201905092915050565b6000620012c7826200157c565b9150620012d4836200157c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156200130c576200130b620015ff565b5b828201905092915050565b600062001324826200157c565b915062001331836200157c565b9250826200134457620013436200162e565b5b828204905092915050565b6000808291508390505b6001851115620013a157808604811115620013795762001378620015ff565b5b6001851615620013895780820291505b808102905062001399856200169d565b945062001359565b94509492505050565b6000620013b7826200157c565b9150620013c48362001586565b9250620013f37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620013fb565b905092915050565b6000826200140d5760019050620014e0565b816200141d5760009050620014e0565b8160018114620014365760028114620014415762001477565b6001915050620014e0565b60ff841115620014565762001455620015ff565b5b8360020a91508482111562001470576200146f620015ff565b5b50620014e0565b5060208310610133831016604e8410600b8410161715620014b15782820a905083811115620014ab57620014aa620015ff565b5b620014e0565b620014c084848460016200134f565b92509050818404811115620014da57620014d9620015ff565b5b81810290505b9392505050565b6000620014f4826200157c565b915062001501836200157c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156200153d576200153c620015ff565b5b828202905092915050565b600062001555826200155c565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b83811015620015b357808201518184015260208101905062001596565b83811115620015c3576000848401525b50505050565b60006002820490506001821680620015e257607f821691505b60208210811415620015f957620015f86200165d565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6200172d8162001548565b81146200173957600080fd5b50565b60805160601c60a05160601c615b6a62001776600039600081816110e2015261153501526000818161150901526115610152615b6a6000f3fe6080604052600436106103c75760003560e01c806388790a68116101f2578063da00097d1161010d578063f1d5f517116100a0578063f84ba65d1161006f578063f84ba65d14610e73578063f872858a14610e9c578063f8f6329014610ec7578063fb4b8e6c14610ef2576103ce565b8063f1d5f51714610dcd578063f2fde38b14610df6578063f455444614610e1f578063f680f79914610e48576103ce565b8063ec28438a116100dc578063ec28438a14610d27578063ee828db314610d50578063ef422a1814610d79578063f0cd1dac14610da2576103ce565b8063da00097d14610c7d578063dc44b6a014610ca8578063dd62ed3e14610cd3578063e6b2603b14610d10576103ce565b8063c2e5ec0411610185578063c860795211610154578063c860795214610bc1578063c867d60b14610bec578063c9c9afc514610c29578063d2d7ad8314610c52576103ce565b8063c2e5ec0414610b19578063c49b9a8014610b42578063c5d2418914610b6b578063c816841b14610b96576103ce565b806398e944c8116101c157806398e944c814610a4b578063a457c2d714610a76578063a5d69d1f14610ab3578063a9059cbb14610adc576103ce565b806388790a681461098d5780638b42507f146109b85780638da5cb5b146109f557806395d89b4114610a20576103ce565b80633ecad271116102e257806370a0823111610275578063807c2d9c11610244578063807c2d9c146108e357806382eefb431461090e578063844d591c146109395780638526148514610962576103ce565b806370a0823114610839578063715018a61461087657806375f0a8741461088d5780637d1db4a5146108b8576103ce565b80635194f9bf116102b15780635194f9bf1461076b5780635342acb4146107965780635881f3ef146107d35780636724348214610810576103ce565b80633ecad271146106af5780634a74bb02146106ec5780634ada218b146107175780634cb80fd514610742576103ce565b806323555d571161035a5780632b112e49116103295780632b112e49146105f3578063313ce5671461061e57806339509351146106495780633b97084a14610686576103ce565b806323555d571461053757806323b872dd146105625780632563ae831461059f57806327c8f835146105c8576103ce565b80631694505e116103965780631694505e1461048f57806318160ddd146104ba5780631870517a146104e55780632198cf6c1461050e576103ce565b806306fdde03146103d357806308733214146103fe5780630930907b14610427578063095ea7b314610452576103ce565b366103ce57005b600080fd5b3480156103df57600080fd5b506103e8610f1b565b6040516103f59190615131565b60405180910390f35b34801561040a57600080fd5b5061042560048036038101906104209190614c2b565b610fad565b005b34801561043357600080fd5b5061043c6110e0565b6040516104499190615012565b60405180910390f35b34801561045e57600080fd5b5061047960048036038101906104749190614aff565b611104565b60405161048691906150fb565b60405180910390f35b34801561049b57600080fd5b506104a4611122565b6040516104b19190615116565b60405180910390f35b3480156104c657600080fd5b506104cf611148565b6040516104dc9190615313565b60405180910390f35b3480156104f157600080fd5b5061050c60048036038101906105079190614c2b565b611152565b005b34801561051a57600080fd5b5061053560048036038101906105309190614ac3565b611285565b005b34801561054357600080fd5b5061054c611375565b6040516105599190615313565b60405180910390f35b34801561056e57600080fd5b5061058960048036038101906105849190614a74565b61137b565b60405161059691906150fb565b60405180910390f35b3480156105ab57600080fd5b506105c660048036038101906105c19190614bb0565b611455565b005b3480156105d457600080fd5b506105dd611507565b6040516105ea9190615012565b60405180910390f35b3480156105ff57600080fd5b5061060861152b565b6040516106159190615313565b60405180910390f35b34801561062a57600080fd5b506106336115a9565b60405161064091906153b8565b60405180910390f35b34801561065557600080fd5b50610670600480360381019061066b9190614aff565b6115c0565b60405161067d91906150fb565b60405180910390f35b34801561069257600080fd5b506106ad60048036038101906106a89190614c02565b611673565b005b3480156106bb57600080fd5b506106d660048036038101906106d191906149e6565b611712565b6040516106e391906150fb565b60405180910390f35b3480156106f857600080fd5b50610701611732565b60405161070e91906150fb565b60405180910390f35b34801561072357600080fd5b5061072c611745565b60405161073991906150fb565b60405180910390f35b34801561074e57600080fd5b50610769600480360381019061076491906149e6565b611758565b005b34801561077757600080fd5b50610780611831565b60405161078d9190615313565b60405180910390f35b3480156107a257600080fd5b506107bd60048036038101906107b891906149e6565b611837565b6040516107ca91906150fb565b60405180910390f35b3480156107df57600080fd5b506107fa60048036038101906107f591906149e6565b611857565b6040516108079190615012565b60405180910390f35b34801561081c57600080fd5b5061083760048036038101906108329190614b3b565b611d3b565b005b34801561084557600080fd5b50610860600480360381019061085b91906149e6565b6121fa565b60405161086d9190615313565b60405180910390f35b34801561088257600080fd5b5061088b612243565b005b34801561089957600080fd5b506108a2612398565b6040516108af919061502d565b60405180910390f35b3480156108c457600080fd5b506108cd6123be565b6040516108da9190615313565b60405180910390f35b3480156108ef57600080fd5b506108f86123c4565b6040516109059190615313565b60405180910390f35b34801561091a57600080fd5b506109236123ca565b6040516109309190615313565b60405180910390f35b34801561094557600080fd5b50610960600480360381019061095b9190614ac3565b6123d0565b005b34801561096e57600080fd5b506109776124c0565b60405161098491906150fb565b60405180910390f35b34801561099957600080fd5b506109a26124d3565b6040516109af9190615313565b60405180910390f35b3480156109c457600080fd5b506109df60048036038101906109da91906149e6565b6124d9565b6040516109ec91906150fb565b60405180910390f35b348015610a0157600080fd5b50610a0a6124f9565b604051610a179190615012565b60405180910390f35b348015610a2c57600080fd5b50610a35612522565b604051610a429190615131565b60405180910390f35b348015610a5757600080fd5b50610a606125b4565b604051610a6d9190615012565b60405180910390f35b348015610a8257600080fd5b50610a9d6004803603810190610a989190614aff565b6125da565b604051610aaa91906150fb565b60405180910390f35b348015610abf57600080fd5b50610ada6004803603810190610ad59190614bb0565b6126a7565b005b348015610ae857600080fd5b50610b036004803603810190610afe9190614aff565b612759565b604051610b1091906150fb565b60405180910390f35b348015610b2557600080fd5b50610b406004803603810190610b3b9190614bb0565b612778565b005b348015610b4e57600080fd5b50610b696004803603810190610b649190614bb0565b61282a565b005b348015610b7757600080fd5b50610b80612913565b604051610b8d9190615313565b60405180910390f35b348015610ba257600080fd5b50610bab612919565b604051610bb89190615012565b60405180910390f35b348015610bcd57600080fd5b50610bd661293f565b604051610be39190615313565b60405180910390f35b348015610bf857600080fd5b50610c136004803603810190610c0e91906149e6565b612945565b604051610c2091906150fb565b60405180910390f35b348015610c3557600080fd5b50610c506004803603810190610c4b91906149e6565b612965565b005b348015610c5e57600080fd5b50610c67612a3e565b604051610c749190615313565b60405180910390f35b348015610c8957600080fd5b50610c92612a44565b604051610c9f91906150fb565b60405180910390f35b348015610cb457600080fd5b50610cbd612a57565b604051610cca9190615313565b60405180910390f35b348015610cdf57600080fd5b50610cfa6004803603810190610cf59190614a38565b612a5d565b604051610d079190615313565b60405180910390f35b348015610d1c57600080fd5b50610d25612ae4565b005b348015610d3357600080fd5b50610d4e6004803603810190610d499190614c02565b612bf2565b005b348015610d5c57600080fd5b50610d776004803603810190610d729190614bb0565b612c91565b005b348015610d8557600080fd5b50610da06004803603810190610d9b9190614ac3565b612d43565b005b348015610dae57600080fd5b50610db7612e33565b604051610dc49190615313565b60405180910390f35b348015610dd957600080fd5b50610df46004803603810190610def9190614c02565b612e39565b005b348015610e0257600080fd5b50610e1d6004803603810190610e1891906149e6565b612ed8565b005b348015610e2b57600080fd5b50610e466004803603810190610e419190614aff565b61309a565b005b348015610e5457600080fd5b50610e5d6131c1565b604051610e6a9190615313565b60405180910390f35b348015610e7f57600080fd5b50610e9a6004803603810190610e959190614ac3565b6131c7565b005b348015610ea857600080fd5b50610eb16132b7565b604051610ebe91906150fb565b60405180910390f35b348015610ed357600080fd5b50610edc6132ca565b604051610ee9919061502d565b60405180910390f35b348015610efe57600080fd5b50610f196004803603810190610f1491906149e6565b6132f0565b005b606060018054610f2a90615618565b80601f0160208091040260200160405190810160405280929190818152602001828054610f5690615618565b8015610fa35780601f10610f7857610100808354040283529160200191610fa3565b820191906000526020600020905b815481529060010190602001808311610f8657829003601f168201915b5050505050905090565b610fb56134ec565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611042576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103990615293565b60405180910390fd5b82601081905550816011819055508060128190555061108260125461107460115460105461348e90919063ffffffff16565b61348e90919063ffffffff16565b60158190555060196013546110979190615489565b60155411156110db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d2906152b3565b60405180910390fd5b505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60006111186111116134ec565b84846134f4565b6001905092915050565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601654905090565b61115a6134ec565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111de90615293565b60405180910390fd5b82600d8190555081600e8190555080600f81905550611227600f54611219600e54600d5461348e90919063ffffffff16565b61348e90919063ffffffff16565b601481905550601960135461123c9190615489565b6014541115611280576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127790615153565b60405180910390fd5b505050565b61128d6134ec565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461131a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131190615293565b60405180910390fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600f5481565b60006113888484846136bf565b5061144a846113956134ec565b61144585604051806060016040528060288152602001615ae860289139600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006113fb6134ec565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613cf29092919063ffffffff16565b6134f4565b600190509392505050565b61145d6134ec565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e190615293565b60405180910390fd5b80601b60176101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60006115a46115597f00000000000000000000000000000000000000000000000000000000000000006121fa565b6115966115857f00000000000000000000000000000000000000000000000000000000000000006121fa565b601654613d5690919063ffffffff16565b613d5690919063ffffffff16565b905090565b6000600360009054906101000a900460ff16905090565b60006116696115cd6134ec565b8461166485600760006115de6134ec565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461348e90919063ffffffff16565b6134f4565b6001905092915050565b61167b6134ec565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611708576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ff90615293565b60405180910390fd5b8060178190555050565b600a6020528060005260406000206000915054906101000a900460ff1681565b601b60159054906101000a900460ff1681565b600860009054906101000a900460ff1681565b6117606134ec565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e490615293565b60405180910390fd5b80600360016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60125481565b60096020528060005260406000206000915054906101000a900460ff1681565b60006118616134ec565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e590615293565b60405180910390fd5b60008290508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561193957600080fd5b505afa15801561194d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119719190614a0f565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156119d357600080fd5b505afa1580156119e7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a0b9190614a0f565b6040518363ffffffff1660e01b8152600401611a28929190615048565b60206040518083038186803b158015611a4057600080fd5b505afa158015611a54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a789190614a0f565b9150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c39578073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611af557600080fd5b505afa158015611b09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b2d9190614a0f565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611b8f57600080fd5b505afa158015611ba3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bc79190614a0f565b6040518363ffffffff1660e01b8152600401611be4929190615048565b602060405180830381600087803b158015611bfe57600080fd5b505af1158015611c12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c369190614a0f565b91505b81601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600a6000601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050919050565b611d436134ec565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc790615293565b60405180910390fd5b6000339050828290508585905014611e1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1490615273565b60405180910390fd5b600080600090505b84849050811015611e9057848482818110611e69577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002013582611e7b9190615433565b91508080611e889061564a565b915050611e25565b5080611e9b836121fa565b1015611edc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed390615193565b60405180910390fd5b611f2e81600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d5690919063ffffffff16565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060005b868690508110156121f15761205d858583818110611fbb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020135600660008a8a86818110611fff577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b905060200201602081019061201491906149e6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461348e90919063ffffffff16565b6006600089898581811061209a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020160208101906120af91906149e6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550868682818110612126577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b905060200201602081019061213b91906149e6565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8787858181106121c2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b905060200201356040516121d69190615313565b60405180910390a380806121e99061564a565b915050611f74565b50505050505050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61224b6134ec565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122cf90615293565b60405180910390fd5b61dead73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a361dead6000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60185481565b60195481565b60155481565b6123d86134ec565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612465576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245c90615293565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601b60189054906101000a900460ff1681565b60105481565b600c6020528060005260406000206000915054906101000a900460ff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606002805461253190615618565b80601f016020809104026020016040519081016040528092919081815260200182805461255d90615618565b80156125aa5780601f1061257f576101008083540402835291602001916125aa565b820191906000526020600020905b81548152906001019060200180831161258d57829003601f168201915b5050505050905090565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061269d6125e76134ec565b8461269885604051806060016040528060258152602001615b1060259139600760006126116134ec565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613cf29092919063ffffffff16565b6134f4565b6001905092915050565b6126af6134ec565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461273c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273390615293565b60405180910390fd5b80601b60166101000a81548160ff02191690831515021790555050565b600061276d6127666134ec565b84846136bf565b506001905092915050565b6127806134ec565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461280d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280490615293565b60405180910390fd5b80600860006101000a81548160ff02191690831515021790555050565b6128326134ec565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146128bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b690615293565b60405180910390fd5b80601b60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405161290891906150fb565b60405180910390a150565b600e5481565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b600b6020528060005260406000206000915054906101000a900460ff1681565b61296d6134ec565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f190615293565b60405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60175481565b601b60169054906101000a900460ff1681565b600d5481565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612aec6134ec565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612b79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7090615293565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff1647604051612b9f90614ffd565b60006040518083038185875af1925050503d8060008114612bdc576040519150601f19603f3d011682016040523d82523d6000602084013e612be1565b606091505b5050905080612bef57600080fd5b50565b612bfa6134ec565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612c87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7e90615293565b60405180910390fd5b8060188190555050565b612c996134ec565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612d26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1d90615293565b60405180910390fd5b80601b60186101000a81548160ff02191690831515021790555050565b612d4b6134ec565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612dd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dcf90615293565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60145481565b612e416134ec565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612ece576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ec590615293565b60405180910390fd5b8060198190555050565b612ee06134ec565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612f6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f6490615293565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612fdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fd4906151b3565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6130a26134ec565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461312f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161312690615293565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b815260040161316a929190615071565b602060405180830381600087803b15801561318457600080fd5b505af1158015613198573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131bc9190614bd9565b505050565b60135481565b6131cf6134ec565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461325c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161325390615293565b60405180910390fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601b60179054906101000a900460ff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6132f86134ec565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613385576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161337c90615293565b60405180910390fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000808314156133dc576000905061343e565b600082846133ea91906154ba565b90508284826133f99190615489565b14613439576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161343090615253565b60405180910390fd5b809150505b92915050565b600061348683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613da0565b905092915050565b600080828461349d9190615433565b9050838110156134e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134d9906151f3565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613564576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161355b906152f3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156135d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135cb906151d3565b60405180910390fd5b80600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516136b29190615313565b60405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415613730576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613727906152d3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156137a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161379790615173565b60405180910390fd5b601b60149054906101000a900460ff16156137c7576137c0848484613e03565b9050613ceb565b600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561386b5750600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156138835750601b60189054906101000a900460ff165b156138ce576018548211156138cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138c490615233565b60405180910390fd5b5b60006138d9306121fa565b9050600060175482101590508080156138ff5750601b60149054906101000a900460ff16155b80156139555750600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561396d5750601b60159054906101000a900460ff165b1561399757601b60169054906101000a900460ff161561398d5760175491505b61399682613fd6565b5b613a20846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600660008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613cf29092919063ffffffff16565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680613b065750600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b613b1a57613b158787876142a1565b613b1c565b845b9050601b60179054906101000a900460ff168015613b845750600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613be957601954613ba782613b99896121fa565b61348e90919063ffffffff16565b1115613be8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bdf90615213565b60405180910390fd5b5b613c3b81600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461348e90919063ffffffff16565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613cdb9190615313565b60405180910390a3600193505050505b9392505050565b6000838311158290613d3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d319190615131565b60405180910390fd5b5060008385613d499190615514565b9050809150509392505050565b6000613d9883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613cf2565b905092915050565b60008083118290613de7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613dde9190615131565b60405180910390fd5b5060008385613df69190615489565b9050809150509392505050565b6000613e8e826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613cf29092919063ffffffff16565b600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f2382600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461348e90919063ffffffff16565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613fc39190615313565b60405180910390a3600190509392505050565b6001601b60146101000a81548160ff021916908315150217905550600061400a60155460145461348e90919063ffffffff16565b90506000614025601054600d5461348e90919063ffffffff16565b90506000614040601154600e5461348e90919063ffffffff16565b9050600061407c600261406e86614060878a6133c990919063ffffffff16565b61344490919063ffffffff16565b61344490919063ffffffff16565b905060006140938287613d5690919063ffffffff16565b905060004790506140a3826144c8565b60006140b88247613d5690919063ffffffff16565b905060006140e26140d360028961344490919063ffffffff16565b89613d5690919063ffffffff16565b9050600061411e6002614110846141028c886133c990919063ffffffff16565b61344490919063ffffffff16565b61344490919063ffffffff16565b90506000614147836141398a876133c990919063ffffffff16565b61344490919063ffffffff16565b90506000614170826141628588613d5690919063ffffffff16565b613d5690919063ffffffff16565b905060008211156141e557600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050501580156141e3573d6000803e3d6000fd5b505b600081111561425857600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015614256573d6000803e3d6000fd5b505b6000831180156142685750600088115b156142785761427788846147c5565b5b50505050505050505050506000601b60146101000a81548160ff02191690831515021790555050565b60008060009050600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615614329576143226064614314601454866133c990919063ffffffff16565b61344490919063ffffffff16565b90506143a7565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156143a6576143a36064614395601554866133c990919063ffffffff16565b61344490919063ffffffff16565b90505b5b60008111156144ab5761440281600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461348e90919063ffffffff16565b600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516144a29190615313565b60405180910390a35b6144be8184613d5690919063ffffffff16565b9150509392505050565b6000600267ffffffffffffffff81111561450b577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156145395781602001602082028036833780820191505090505b5090503081600081518110614577577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561461957600080fd5b505afa15801561462d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146519190614a0f565b8160018151811061468b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506146f230601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846134f4565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161475695949392919061535e565b600060405180830381600087803b15801561477057600080fd5b505af1158015614784573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a782826040516147b992919061532e565b60405180910390a15050565b6147f230601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846134f4565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161487b9695949392919061509a565b6060604051808303818588803b15801561489457600080fd5b505af11580156148a8573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906148cd9190614c7a565b5050505050565b6000813590506148e381615aa2565b92915050565b6000815190506148f881615aa2565b92915050565b60008083601f84011261491057600080fd5b8235905067ffffffffffffffff81111561492957600080fd5b60208301915083602082028301111561494157600080fd5b9250929050565b60008083601f84011261495a57600080fd5b8235905067ffffffffffffffff81111561497357600080fd5b60208301915083602082028301111561498b57600080fd5b9250929050565b6000813590506149a181615ab9565b92915050565b6000815190506149b681615ab9565b92915050565b6000813590506149cb81615ad0565b92915050565b6000815190506149e081615ad0565b92915050565b6000602082840312156149f857600080fd5b6000614a06848285016148d4565b91505092915050565b600060208284031215614a2157600080fd5b6000614a2f848285016148e9565b91505092915050565b60008060408385031215614a4b57600080fd5b6000614a59858286016148d4565b9250506020614a6a858286016148d4565b9150509250929050565b600080600060608486031215614a8957600080fd5b6000614a97868287016148d4565b9350506020614aa8868287016148d4565b9250506040614ab9868287016149bc565b9150509250925092565b60008060408385031215614ad657600080fd5b6000614ae4858286016148d4565b9250506020614af585828601614992565b9150509250929050565b60008060408385031215614b1257600080fd5b6000614b20858286016148d4565b9250506020614b31858286016149bc565b9150509250929050565b60008060008060408587031215614b5157600080fd5b600085013567ffffffffffffffff811115614b6b57600080fd5b614b77878288016148fe565b9450945050602085013567ffffffffffffffff811115614b9657600080fd5b614ba287828801614948565b925092505092959194509250565b600060208284031215614bc257600080fd5b6000614bd084828501614992565b91505092915050565b600060208284031215614beb57600080fd5b6000614bf9848285016149a7565b91505092915050565b600060208284031215614c1457600080fd5b6000614c22848285016149bc565b91505092915050565b600080600060608486031215614c4057600080fd5b6000614c4e868287016149bc565b9350506020614c5f868287016149bc565b9250506040614c70868287016149bc565b9150509250925092565b600080600060608486031215614c8f57600080fd5b6000614c9d868287016149d1565b9350506020614cae868287016149d1565b9250506040614cbf868287016149d1565b9150509250925092565b6000614cd58383614cf0565b60208301905092915050565b614cea8161555a565b82525050565b614cf981615548565b82525050565b614d0881615548565b82525050565b6000614d19826153e3565b614d238185615406565b9350614d2e836153d3565b8060005b83811015614d5f578151614d468882614cc9565b9750614d51836153f9565b925050600181019050614d32565b5085935050505092915050565b614d758161556c565b82525050565b614d84816155af565b82525050565b614d93816155d3565b82525050565b6000614da4826153ee565b614dae8185615422565b9350614dbe8185602086016155e5565b614dc781615720565b840191505092915050565b6000614ddf601c83615422565b9150614dea82615731565b602082019050919050565b6000614e02602383615422565b9150614e0d8261575a565b604082019050919050565b6000614e25601b83615422565b9150614e30826157a9565b602082019050919050565b6000614e48602683615422565b9150614e53826157d2565b604082019050919050565b6000614e6b602283615422565b9150614e7682615821565b604082019050919050565b6000614e8e601b83615422565b9150614e9982615870565b602082019050919050565b6000614eb1602583615422565b9150614ebc82615899565b604082019050919050565b6000614ed4602883615422565b9150614edf826158e8565b604082019050919050565b6000614ef7602183615422565b9150614f0282615937565b604082019050919050565b6000614f1a601683615422565b9150614f2582615986565b602082019050919050565b6000614f3d602083615422565b9150614f48826159af565b602082019050919050565b6000614f60601d83615422565b9150614f6b826159d8565b602082019050919050565b6000614f83602583615422565b9150614f8e82615a01565b604082019050919050565b6000614fa6600083615417565b9150614fb182615a50565b600082019050919050565b6000614fc9602483615422565b9150614fd482615a53565b604082019050919050565b614fe881615598565b82525050565b614ff7816155a2565b82525050565b600061500882614f99565b9150819050919050565b60006020820190506150276000830184614cff565b92915050565b60006020820190506150426000830184614ce1565b92915050565b600060408201905061505d6000830185614cff565b61506a6020830184614cff565b9392505050565b60006040820190506150866000830185614cff565b6150936020830184614fdf565b9392505050565b600060c0820190506150af6000830189614cff565b6150bc6020830188614fdf565b6150c96040830187614d8a565b6150d66060830186614d8a565b6150e36080830185614cff565b6150f060a0830184614fdf565b979650505050505050565b60006020820190506151106000830184614d6c565b92915050565b600060208201905061512b6000830184614d7b565b92915050565b6000602082019050818103600083015261514b8184614d99565b905092915050565b6000602082019050818103600083015261516c81614dd2565b9050919050565b6000602082019050818103600083015261518c81614df5565b9050919050565b600060208201905081810360008301526151ac81614e18565b9050919050565b600060208201905081810360008301526151cc81614e3b565b9050919050565b600060208201905081810360008301526151ec81614e5e565b9050919050565b6000602082019050818103600083015261520c81614e81565b9050919050565b6000602082019050818103600083015261522c81614ea4565b9050919050565b6000602082019050818103600083015261524c81614ec7565b9050919050565b6000602082019050818103600083015261526c81614eea565b9050919050565b6000602082019050818103600083015261528c81614f0d565b9050919050565b600060208201905081810360008301526152ac81614f30565b9050919050565b600060208201905081810360008301526152cc81614f53565b9050919050565b600060208201905081810360008301526152ec81614f76565b9050919050565b6000602082019050818103600083015261530c81614fbc565b9050919050565b60006020820190506153286000830184614fdf565b92915050565b60006040820190506153436000830185614fdf565b81810360208301526153558184614d0e565b90509392505050565b600060a0820190506153736000830188614fdf565b6153806020830187614d8a565b81810360408301526153928186614d0e565b90506153a16060830185614cff565b6153ae6080830184614fdf565b9695505050505050565b60006020820190506153cd6000830184614fee565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600061543e82615598565b915061544983615598565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561547e5761547d615693565b5b828201905092915050565b600061549482615598565b915061549f83615598565b9250826154af576154ae6156c2565b5b828204905092915050565b60006154c582615598565b91506154d083615598565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561550957615508615693565b5b828202905092915050565b600061551f82615598565b915061552a83615598565b92508282101561553d5761553c615693565b5b828203905092915050565b600061555382615578565b9050919050565b600061556582615578565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006155ba826155c1565b9050919050565b60006155cc82615578565b9050919050565b60006155de82615598565b9050919050565b60005b838110156156035780820151818401526020810190506155e8565b83811115615612576000848401525b50505050565b6000600282049050600182168061563057607f821691505b60208210811415615644576156436156f1565b5b50919050565b600061565582615598565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561568857615687615693565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f4275792066656573206d75737420626520323525206f72206c65737300000000600082015250565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f4572726f723a20496e73756666696369656e74204572726f7221210000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f416d6f756e74204578636565642046726f6d204d61782057616c6c6574204c6960008201527f6d69742121000000000000000000000000000000000000000000000000000000602082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4572726f723a204d69736d61746368204c656e67746800000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f53656c6c2066656573206d75737420626520323525206f72206c657373000000600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b50565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b615aab81615548565b8114615ab657600080fd5b50565b615ac28161556c565b8114615acd57600080fd5b50565b615ad981615598565b8114615ae457600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220b273da0c5d1eeee43c469689de69460052fe9901997296ac7cd9fd6f6169197c64736f6c63430008040033

Deployed Bytecode

0x6080604052600436106103c75760003560e01c806388790a68116101f2578063da00097d1161010d578063f1d5f517116100a0578063f84ba65d1161006f578063f84ba65d14610e73578063f872858a14610e9c578063f8f6329014610ec7578063fb4b8e6c14610ef2576103ce565b8063f1d5f51714610dcd578063f2fde38b14610df6578063f455444614610e1f578063f680f79914610e48576103ce565b8063ec28438a116100dc578063ec28438a14610d27578063ee828db314610d50578063ef422a1814610d79578063f0cd1dac14610da2576103ce565b8063da00097d14610c7d578063dc44b6a014610ca8578063dd62ed3e14610cd3578063e6b2603b14610d10576103ce565b8063c2e5ec0411610185578063c860795211610154578063c860795214610bc1578063c867d60b14610bec578063c9c9afc514610c29578063d2d7ad8314610c52576103ce565b8063c2e5ec0414610b19578063c49b9a8014610b42578063c5d2418914610b6b578063c816841b14610b96576103ce565b806398e944c8116101c157806398e944c814610a4b578063a457c2d714610a76578063a5d69d1f14610ab3578063a9059cbb14610adc576103ce565b806388790a681461098d5780638b42507f146109b85780638da5cb5b146109f557806395d89b4114610a20576103ce565b80633ecad271116102e257806370a0823111610275578063807c2d9c11610244578063807c2d9c146108e357806382eefb431461090e578063844d591c146109395780638526148514610962576103ce565b806370a0823114610839578063715018a61461087657806375f0a8741461088d5780637d1db4a5146108b8576103ce565b80635194f9bf116102b15780635194f9bf1461076b5780635342acb4146107965780635881f3ef146107d35780636724348214610810576103ce565b80633ecad271146106af5780634a74bb02146106ec5780634ada218b146107175780634cb80fd514610742576103ce565b806323555d571161035a5780632b112e49116103295780632b112e49146105f3578063313ce5671461061e57806339509351146106495780633b97084a14610686576103ce565b806323555d571461053757806323b872dd146105625780632563ae831461059f57806327c8f835146105c8576103ce565b80631694505e116103965780631694505e1461048f57806318160ddd146104ba5780631870517a146104e55780632198cf6c1461050e576103ce565b806306fdde03146103d357806308733214146103fe5780630930907b14610427578063095ea7b314610452576103ce565b366103ce57005b600080fd5b3480156103df57600080fd5b506103e8610f1b565b6040516103f59190615131565b60405180910390f35b34801561040a57600080fd5b5061042560048036038101906104209190614c2b565b610fad565b005b34801561043357600080fd5b5061043c6110e0565b6040516104499190615012565b60405180910390f35b34801561045e57600080fd5b5061047960048036038101906104749190614aff565b611104565b60405161048691906150fb565b60405180910390f35b34801561049b57600080fd5b506104a4611122565b6040516104b19190615116565b60405180910390f35b3480156104c657600080fd5b506104cf611148565b6040516104dc9190615313565b60405180910390f35b3480156104f157600080fd5b5061050c60048036038101906105079190614c2b565b611152565b005b34801561051a57600080fd5b5061053560048036038101906105309190614ac3565b611285565b005b34801561054357600080fd5b5061054c611375565b6040516105599190615313565b60405180910390f35b34801561056e57600080fd5b5061058960048036038101906105849190614a74565b61137b565b60405161059691906150fb565b60405180910390f35b3480156105ab57600080fd5b506105c660048036038101906105c19190614bb0565b611455565b005b3480156105d457600080fd5b506105dd611507565b6040516105ea9190615012565b60405180910390f35b3480156105ff57600080fd5b5061060861152b565b6040516106159190615313565b60405180910390f35b34801561062a57600080fd5b506106336115a9565b60405161064091906153b8565b60405180910390f35b34801561065557600080fd5b50610670600480360381019061066b9190614aff565b6115c0565b60405161067d91906150fb565b60405180910390f35b34801561069257600080fd5b506106ad60048036038101906106a89190614c02565b611673565b005b3480156106bb57600080fd5b506106d660048036038101906106d191906149e6565b611712565b6040516106e391906150fb565b60405180910390f35b3480156106f857600080fd5b50610701611732565b60405161070e91906150fb565b60405180910390f35b34801561072357600080fd5b5061072c611745565b60405161073991906150fb565b60405180910390f35b34801561074e57600080fd5b50610769600480360381019061076491906149e6565b611758565b005b34801561077757600080fd5b50610780611831565b60405161078d9190615313565b60405180910390f35b3480156107a257600080fd5b506107bd60048036038101906107b891906149e6565b611837565b6040516107ca91906150fb565b60405180910390f35b3480156107df57600080fd5b506107fa60048036038101906107f591906149e6565b611857565b6040516108079190615012565b60405180910390f35b34801561081c57600080fd5b5061083760048036038101906108329190614b3b565b611d3b565b005b34801561084557600080fd5b50610860600480360381019061085b91906149e6565b6121fa565b60405161086d9190615313565b60405180910390f35b34801561088257600080fd5b5061088b612243565b005b34801561089957600080fd5b506108a2612398565b6040516108af919061502d565b60405180910390f35b3480156108c457600080fd5b506108cd6123be565b6040516108da9190615313565b60405180910390f35b3480156108ef57600080fd5b506108f86123c4565b6040516109059190615313565b60405180910390f35b34801561091a57600080fd5b506109236123ca565b6040516109309190615313565b60405180910390f35b34801561094557600080fd5b50610960600480360381019061095b9190614ac3565b6123d0565b005b34801561096e57600080fd5b506109776124c0565b60405161098491906150fb565b60405180910390f35b34801561099957600080fd5b506109a26124d3565b6040516109af9190615313565b60405180910390f35b3480156109c457600080fd5b506109df60048036038101906109da91906149e6565b6124d9565b6040516109ec91906150fb565b60405180910390f35b348015610a0157600080fd5b50610a0a6124f9565b604051610a179190615012565b60405180910390f35b348015610a2c57600080fd5b50610a35612522565b604051610a429190615131565b60405180910390f35b348015610a5757600080fd5b50610a606125b4565b604051610a6d9190615012565b60405180910390f35b348015610a8257600080fd5b50610a9d6004803603810190610a989190614aff565b6125da565b604051610aaa91906150fb565b60405180910390f35b348015610abf57600080fd5b50610ada6004803603810190610ad59190614bb0565b6126a7565b005b348015610ae857600080fd5b50610b036004803603810190610afe9190614aff565b612759565b604051610b1091906150fb565b60405180910390f35b348015610b2557600080fd5b50610b406004803603810190610b3b9190614bb0565b612778565b005b348015610b4e57600080fd5b50610b696004803603810190610b649190614bb0565b61282a565b005b348015610b7757600080fd5b50610b80612913565b604051610b8d9190615313565b60405180910390f35b348015610ba257600080fd5b50610bab612919565b604051610bb89190615012565b60405180910390f35b348015610bcd57600080fd5b50610bd661293f565b604051610be39190615313565b60405180910390f35b348015610bf857600080fd5b50610c136004803603810190610c0e91906149e6565b612945565b604051610c2091906150fb565b60405180910390f35b348015610c3557600080fd5b50610c506004803603810190610c4b91906149e6565b612965565b005b348015610c5e57600080fd5b50610c67612a3e565b604051610c749190615313565b60405180910390f35b348015610c8957600080fd5b50610c92612a44565b604051610c9f91906150fb565b60405180910390f35b348015610cb457600080fd5b50610cbd612a57565b604051610cca9190615313565b60405180910390f35b348015610cdf57600080fd5b50610cfa6004803603810190610cf59190614a38565b612a5d565b604051610d079190615313565b60405180910390f35b348015610d1c57600080fd5b50610d25612ae4565b005b348015610d3357600080fd5b50610d4e6004803603810190610d499190614c02565b612bf2565b005b348015610d5c57600080fd5b50610d776004803603810190610d729190614bb0565b612c91565b005b348015610d8557600080fd5b50610da06004803603810190610d9b9190614ac3565b612d43565b005b348015610dae57600080fd5b50610db7612e33565b604051610dc49190615313565b60405180910390f35b348015610dd957600080fd5b50610df46004803603810190610def9190614c02565b612e39565b005b348015610e0257600080fd5b50610e1d6004803603810190610e1891906149e6565b612ed8565b005b348015610e2b57600080fd5b50610e466004803603810190610e419190614aff565b61309a565b005b348015610e5457600080fd5b50610e5d6131c1565b604051610e6a9190615313565b60405180910390f35b348015610e7f57600080fd5b50610e9a6004803603810190610e959190614ac3565b6131c7565b005b348015610ea857600080fd5b50610eb16132b7565b604051610ebe91906150fb565b60405180910390f35b348015610ed357600080fd5b50610edc6132ca565b604051610ee9919061502d565b60405180910390f35b348015610efe57600080fd5b50610f196004803603810190610f1491906149e6565b6132f0565b005b606060018054610f2a90615618565b80601f0160208091040260200160405190810160405280929190818152602001828054610f5690615618565b8015610fa35780601f10610f7857610100808354040283529160200191610fa3565b820191906000526020600020905b815481529060010190602001808311610f8657829003601f168201915b5050505050905090565b610fb56134ec565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611042576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103990615293565b60405180910390fd5b82601081905550816011819055508060128190555061108260125461107460115460105461348e90919063ffffffff16565b61348e90919063ffffffff16565b60158190555060196013546110979190615489565b60155411156110db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d2906152b3565b60405180910390fd5b505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60006111186111116134ec565b84846134f4565b6001905092915050565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601654905090565b61115a6134ec565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111de90615293565b60405180910390fd5b82600d8190555081600e8190555080600f81905550611227600f54611219600e54600d5461348e90919063ffffffff16565b61348e90919063ffffffff16565b601481905550601960135461123c9190615489565b6014541115611280576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127790615153565b60405180910390fd5b505050565b61128d6134ec565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461131a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131190615293565b60405180910390fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600f5481565b60006113888484846136bf565b5061144a846113956134ec565b61144585604051806060016040528060288152602001615ae860289139600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006113fb6134ec565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613cf29092919063ffffffff16565b6134f4565b600190509392505050565b61145d6134ec565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e190615293565b60405180910390fd5b80601b60176101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000dead81565b60006115a46115597f00000000000000000000000000000000000000000000000000000000000000006121fa565b6115966115857f000000000000000000000000000000000000000000000000000000000000dead6121fa565b601654613d5690919063ffffffff16565b613d5690919063ffffffff16565b905090565b6000600360009054906101000a900460ff16905090565b60006116696115cd6134ec565b8461166485600760006115de6134ec565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461348e90919063ffffffff16565b6134f4565b6001905092915050565b61167b6134ec565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611708576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ff90615293565b60405180910390fd5b8060178190555050565b600a6020528060005260406000206000915054906101000a900460ff1681565b601b60159054906101000a900460ff1681565b600860009054906101000a900460ff1681565b6117606134ec565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e490615293565b60405180910390fd5b80600360016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60125481565b60096020528060005260406000206000915054906101000a900460ff1681565b60006118616134ec565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e590615293565b60405180910390fd5b60008290508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561193957600080fd5b505afa15801561194d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119719190614a0f565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156119d357600080fd5b505afa1580156119e7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a0b9190614a0f565b6040518363ffffffff1660e01b8152600401611a28929190615048565b60206040518083038186803b158015611a4057600080fd5b505afa158015611a54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a789190614a0f565b9150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c39578073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611af557600080fd5b505afa158015611b09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b2d9190614a0f565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611b8f57600080fd5b505afa158015611ba3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bc79190614a0f565b6040518363ffffffff1660e01b8152600401611be4929190615048565b602060405180830381600087803b158015611bfe57600080fd5b505af1158015611c12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c369190614a0f565b91505b81601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600a6000601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050919050565b611d436134ec565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc790615293565b60405180910390fd5b6000339050828290508585905014611e1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1490615273565b60405180910390fd5b600080600090505b84849050811015611e9057848482818110611e69577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002013582611e7b9190615433565b91508080611e889061564a565b915050611e25565b5080611e9b836121fa565b1015611edc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed390615193565b60405180910390fd5b611f2e81600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d5690919063ffffffff16565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060005b868690508110156121f15761205d858583818110611fbb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020135600660008a8a86818110611fff577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b905060200201602081019061201491906149e6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461348e90919063ffffffff16565b6006600089898581811061209a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020160208101906120af91906149e6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550868682818110612126577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b905060200201602081019061213b91906149e6565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8787858181106121c2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b905060200201356040516121d69190615313565b60405180910390a380806121e99061564a565b915050611f74565b50505050505050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61224b6134ec565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122cf90615293565b60405180910390fd5b61dead73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a361dead6000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60185481565b60195481565b60155481565b6123d86134ec565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612465576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245c90615293565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601b60189054906101000a900460ff1681565b60105481565b600c6020528060005260406000206000915054906101000a900460ff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606002805461253190615618565b80601f016020809104026020016040519081016040528092919081815260200182805461255d90615618565b80156125aa5780601f1061257f576101008083540402835291602001916125aa565b820191906000526020600020905b81548152906001019060200180831161258d57829003601f168201915b5050505050905090565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061269d6125e76134ec565b8461269885604051806060016040528060258152602001615b1060259139600760006126116134ec565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613cf29092919063ffffffff16565b6134f4565b6001905092915050565b6126af6134ec565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461273c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273390615293565b60405180910390fd5b80601b60166101000a81548160ff02191690831515021790555050565b600061276d6127666134ec565b84846136bf565b506001905092915050565b6127806134ec565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461280d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280490615293565b60405180910390fd5b80600860006101000a81548160ff02191690831515021790555050565b6128326134ec565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146128bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b690615293565b60405180910390fd5b80601b60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405161290891906150fb565b60405180910390a150565b600e5481565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b600b6020528060005260406000206000915054906101000a900460ff1681565b61296d6134ec565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f190615293565b60405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60175481565b601b60169054906101000a900460ff1681565b600d5481565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612aec6134ec565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612b79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7090615293565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff1647604051612b9f90614ffd565b60006040518083038185875af1925050503d8060008114612bdc576040519150601f19603f3d011682016040523d82523d6000602084013e612be1565b606091505b5050905080612bef57600080fd5b50565b612bfa6134ec565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612c87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7e90615293565b60405180910390fd5b8060188190555050565b612c996134ec565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612d26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1d90615293565b60405180910390fd5b80601b60186101000a81548160ff02191690831515021790555050565b612d4b6134ec565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612dd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dcf90615293565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60145481565b612e416134ec565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612ece576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ec590615293565b60405180910390fd5b8060198190555050565b612ee06134ec565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612f6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f6490615293565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612fdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fd4906151b3565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6130a26134ec565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461312f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161312690615293565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b815260040161316a929190615071565b602060405180830381600087803b15801561318457600080fd5b505af1158015613198573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131bc9190614bd9565b505050565b60135481565b6131cf6134ec565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461325c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161325390615293565b60405180910390fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601b60179054906101000a900460ff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6132f86134ec565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613385576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161337c90615293565b60405180910390fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000808314156133dc576000905061343e565b600082846133ea91906154ba565b90508284826133f99190615489565b14613439576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161343090615253565b60405180910390fd5b809150505b92915050565b600061348683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613da0565b905092915050565b600080828461349d9190615433565b9050838110156134e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134d9906151f3565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613564576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161355b906152f3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156135d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135cb906151d3565b60405180910390fd5b80600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516136b29190615313565b60405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415613730576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613727906152d3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156137a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161379790615173565b60405180910390fd5b601b60149054906101000a900460ff16156137c7576137c0848484613e03565b9050613ceb565b600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561386b5750600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156138835750601b60189054906101000a900460ff165b156138ce576018548211156138cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138c490615233565b60405180910390fd5b5b60006138d9306121fa565b9050600060175482101590508080156138ff5750601b60149054906101000a900460ff16155b80156139555750600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561396d5750601b60159054906101000a900460ff165b1561399757601b60169054906101000a900460ff161561398d5760175491505b61399682613fd6565b5b613a20846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600660008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613cf29092919063ffffffff16565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680613b065750600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b613b1a57613b158787876142a1565b613b1c565b845b9050601b60179054906101000a900460ff168015613b845750600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613be957601954613ba782613b99896121fa565b61348e90919063ffffffff16565b1115613be8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bdf90615213565b60405180910390fd5b5b613c3b81600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461348e90919063ffffffff16565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613cdb9190615313565b60405180910390a3600193505050505b9392505050565b6000838311158290613d3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d319190615131565b60405180910390fd5b5060008385613d499190615514565b9050809150509392505050565b6000613d9883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613cf2565b905092915050565b60008083118290613de7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613dde9190615131565b60405180910390fd5b5060008385613df69190615489565b9050809150509392505050565b6000613e8e826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613cf29092919063ffffffff16565b600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f2382600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461348e90919063ffffffff16565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613fc39190615313565b60405180910390a3600190509392505050565b6001601b60146101000a81548160ff021916908315150217905550600061400a60155460145461348e90919063ffffffff16565b90506000614025601054600d5461348e90919063ffffffff16565b90506000614040601154600e5461348e90919063ffffffff16565b9050600061407c600261406e86614060878a6133c990919063ffffffff16565b61344490919063ffffffff16565b61344490919063ffffffff16565b905060006140938287613d5690919063ffffffff16565b905060004790506140a3826144c8565b60006140b88247613d5690919063ffffffff16565b905060006140e26140d360028961344490919063ffffffff16565b89613d5690919063ffffffff16565b9050600061411e6002614110846141028c886133c990919063ffffffff16565b61344490919063ffffffff16565b61344490919063ffffffff16565b90506000614147836141398a876133c990919063ffffffff16565b61344490919063ffffffff16565b90506000614170826141628588613d5690919063ffffffff16565b613d5690919063ffffffff16565b905060008211156141e557600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050501580156141e3573d6000803e3d6000fd5b505b600081111561425857600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015614256573d6000803e3d6000fd5b505b6000831180156142685750600088115b156142785761427788846147c5565b5b50505050505050505050506000601b60146101000a81548160ff02191690831515021790555050565b60008060009050600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615614329576143226064614314601454866133c990919063ffffffff16565b61344490919063ffffffff16565b90506143a7565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156143a6576143a36064614395601554866133c990919063ffffffff16565b61344490919063ffffffff16565b90505b5b60008111156144ab5761440281600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461348e90919063ffffffff16565b600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516144a29190615313565b60405180910390a35b6144be8184613d5690919063ffffffff16565b9150509392505050565b6000600267ffffffffffffffff81111561450b577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156145395781602001602082028036833780820191505090505b5090503081600081518110614577577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561461957600080fd5b505afa15801561462d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146519190614a0f565b8160018151811061468b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506146f230601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846134f4565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161475695949392919061535e565b600060405180830381600087803b15801561477057600080fd5b505af1158015614784573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a782826040516147b992919061532e565b60405180910390a15050565b6147f230601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846134f4565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161487b9695949392919061509a565b6060604051808303818588803b15801561489457600080fd5b505af11580156148a8573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906148cd9190614c7a565b5050505050565b6000813590506148e381615aa2565b92915050565b6000815190506148f881615aa2565b92915050565b60008083601f84011261491057600080fd5b8235905067ffffffffffffffff81111561492957600080fd5b60208301915083602082028301111561494157600080fd5b9250929050565b60008083601f84011261495a57600080fd5b8235905067ffffffffffffffff81111561497357600080fd5b60208301915083602082028301111561498b57600080fd5b9250929050565b6000813590506149a181615ab9565b92915050565b6000815190506149b681615ab9565b92915050565b6000813590506149cb81615ad0565b92915050565b6000815190506149e081615ad0565b92915050565b6000602082840312156149f857600080fd5b6000614a06848285016148d4565b91505092915050565b600060208284031215614a2157600080fd5b6000614a2f848285016148e9565b91505092915050565b60008060408385031215614a4b57600080fd5b6000614a59858286016148d4565b9250506020614a6a858286016148d4565b9150509250929050565b600080600060608486031215614a8957600080fd5b6000614a97868287016148d4565b9350506020614aa8868287016148d4565b9250506040614ab9868287016149bc565b9150509250925092565b60008060408385031215614ad657600080fd5b6000614ae4858286016148d4565b9250506020614af585828601614992565b9150509250929050565b60008060408385031215614b1257600080fd5b6000614b20858286016148d4565b9250506020614b31858286016149bc565b9150509250929050565b60008060008060408587031215614b5157600080fd5b600085013567ffffffffffffffff811115614b6b57600080fd5b614b77878288016148fe565b9450945050602085013567ffffffffffffffff811115614b9657600080fd5b614ba287828801614948565b925092505092959194509250565b600060208284031215614bc257600080fd5b6000614bd084828501614992565b91505092915050565b600060208284031215614beb57600080fd5b6000614bf9848285016149a7565b91505092915050565b600060208284031215614c1457600080fd5b6000614c22848285016149bc565b91505092915050565b600080600060608486031215614c4057600080fd5b6000614c4e868287016149bc565b9350506020614c5f868287016149bc565b9250506040614c70868287016149bc565b9150509250925092565b600080600060608486031215614c8f57600080fd5b6000614c9d868287016149d1565b9350506020614cae868287016149d1565b9250506040614cbf868287016149d1565b9150509250925092565b6000614cd58383614cf0565b60208301905092915050565b614cea8161555a565b82525050565b614cf981615548565b82525050565b614d0881615548565b82525050565b6000614d19826153e3565b614d238185615406565b9350614d2e836153d3565b8060005b83811015614d5f578151614d468882614cc9565b9750614d51836153f9565b925050600181019050614d32565b5085935050505092915050565b614d758161556c565b82525050565b614d84816155af565b82525050565b614d93816155d3565b82525050565b6000614da4826153ee565b614dae8185615422565b9350614dbe8185602086016155e5565b614dc781615720565b840191505092915050565b6000614ddf601c83615422565b9150614dea82615731565b602082019050919050565b6000614e02602383615422565b9150614e0d8261575a565b604082019050919050565b6000614e25601b83615422565b9150614e30826157a9565b602082019050919050565b6000614e48602683615422565b9150614e53826157d2565b604082019050919050565b6000614e6b602283615422565b9150614e7682615821565b604082019050919050565b6000614e8e601b83615422565b9150614e9982615870565b602082019050919050565b6000614eb1602583615422565b9150614ebc82615899565b604082019050919050565b6000614ed4602883615422565b9150614edf826158e8565b604082019050919050565b6000614ef7602183615422565b9150614f0282615937565b604082019050919050565b6000614f1a601683615422565b9150614f2582615986565b602082019050919050565b6000614f3d602083615422565b9150614f48826159af565b602082019050919050565b6000614f60601d83615422565b9150614f6b826159d8565b602082019050919050565b6000614f83602583615422565b9150614f8e82615a01565b604082019050919050565b6000614fa6600083615417565b9150614fb182615a50565b600082019050919050565b6000614fc9602483615422565b9150614fd482615a53565b604082019050919050565b614fe881615598565b82525050565b614ff7816155a2565b82525050565b600061500882614f99565b9150819050919050565b60006020820190506150276000830184614cff565b92915050565b60006020820190506150426000830184614ce1565b92915050565b600060408201905061505d6000830185614cff565b61506a6020830184614cff565b9392505050565b60006040820190506150866000830185614cff565b6150936020830184614fdf565b9392505050565b600060c0820190506150af6000830189614cff565b6150bc6020830188614fdf565b6150c96040830187614d8a565b6150d66060830186614d8a565b6150e36080830185614cff565b6150f060a0830184614fdf565b979650505050505050565b60006020820190506151106000830184614d6c565b92915050565b600060208201905061512b6000830184614d7b565b92915050565b6000602082019050818103600083015261514b8184614d99565b905092915050565b6000602082019050818103600083015261516c81614dd2565b9050919050565b6000602082019050818103600083015261518c81614df5565b9050919050565b600060208201905081810360008301526151ac81614e18565b9050919050565b600060208201905081810360008301526151cc81614e3b565b9050919050565b600060208201905081810360008301526151ec81614e5e565b9050919050565b6000602082019050818103600083015261520c81614e81565b9050919050565b6000602082019050818103600083015261522c81614ea4565b9050919050565b6000602082019050818103600083015261524c81614ec7565b9050919050565b6000602082019050818103600083015261526c81614eea565b9050919050565b6000602082019050818103600083015261528c81614f0d565b9050919050565b600060208201905081810360008301526152ac81614f30565b9050919050565b600060208201905081810360008301526152cc81614f53565b9050919050565b600060208201905081810360008301526152ec81614f76565b9050919050565b6000602082019050818103600083015261530c81614fbc565b9050919050565b60006020820190506153286000830184614fdf565b92915050565b60006040820190506153436000830185614fdf565b81810360208301526153558184614d0e565b90509392505050565b600060a0820190506153736000830188614fdf565b6153806020830187614d8a565b81810360408301526153928186614d0e565b90506153a16060830185614cff565b6153ae6080830184614fdf565b9695505050505050565b60006020820190506153cd6000830184614fee565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600061543e82615598565b915061544983615598565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561547e5761547d615693565b5b828201905092915050565b600061549482615598565b915061549f83615598565b9250826154af576154ae6156c2565b5b828204905092915050565b60006154c582615598565b91506154d083615598565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561550957615508615693565b5b828202905092915050565b600061551f82615598565b915061552a83615598565b92508282101561553d5761553c615693565b5b828203905092915050565b600061555382615578565b9050919050565b600061556582615578565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006155ba826155c1565b9050919050565b60006155cc82615578565b9050919050565b60006155de82615598565b9050919050565b60005b838110156156035780820151818401526020810190506155e8565b83811115615612576000848401525b50505050565b6000600282049050600182168061563057607f821691505b60208210811415615644576156436156f1565b5b50919050565b600061565582615598565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561568857615687615693565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f4275792066656573206d75737420626520323525206f72206c65737300000000600082015250565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f4572726f723a20496e73756666696369656e74204572726f7221210000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f416d6f756e74204578636565642046726f6d204d61782057616c6c6574204c6960008201527f6d69742121000000000000000000000000000000000000000000000000000000602082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4572726f723a204d69736d61746368204c656e67746800000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f53656c6c2066656573206d75737420626520323525206f72206c657373000000600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b50565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b615aab81615548565b8114615ab657600080fd5b50565b615ac28161556c565b8114615acd57600080fd5b50565b615ad981615598565b8114615ae457600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220b273da0c5d1eeee43c469689de69460052fe9901997296ac7cd9fd6f6169197c64736f6c63430008040033

Deployed Bytecode Sourcemap

11873:17063:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16085:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21253:405;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12424:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17251:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13641:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16362:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20850:395;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18184:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13044:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21941:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18561:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12336:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19662:156;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16271:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16748:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18792:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12733:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13758:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12641:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18924:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13179:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12676:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20094:748;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28228:697;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16470:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3550:230;;;;;;;;;;;;;:::i;:::-;;12093:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13495:59;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13567:58;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13301:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17765:129;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13901:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13092:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12902:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3325:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16176:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12291:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16974:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19525:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21766:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15971:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19346:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13001:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13689:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13135:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12843:52;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19064:134;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13406:69;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13805:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12959:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16597:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24403:154;;;;;;;;;;;;;:::i;:::-;;18442:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18327:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17902:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13262:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18682:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3788:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24256:139;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13224:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18045:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13859:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12192:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19206:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16085:83;16122:13;16155:5;16148:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16085:83;:::o;21253:405::-;3469:12;:10;:12::i;:::-;3459:22;;:6;;;;;;;;;;:22;;;3451:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21375:10:::1;21355:17;:30;;;;21416:10;21396:17;:30;;;;21457:10;21437:17;:30;;;;21499:63;21544:17;;21499:40;21521:17;;21499;;:21;;:40;;;;:::i;:::-;:44;;:63;;;;:::i;:::-;21478:18;:84;;;;21613:2;21604:8;;:11;;;;:::i;:::-;21581:18;;:35;;21573:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;21253:405:::0;;;:::o;12424:81::-;;;:::o;17251:161::-;17326:4;17343:39;17352:12;:10;:12::i;:::-;17366:7;17375:6;17343:8;:39::i;:::-;17400:4;17393:11;;17251:161;;;;:::o;13641:41::-;;;;;;;;;;;;;:::o;16362:100::-;16415:7;16442:12;;16435:19;;16362:100;:::o;20850:395::-;3469:12;:10;:12::i;:::-;3459:22;;:6;;;;;;;;;;:22;;;3451:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20970:10:::1;20951:16;:29;;;;21010:10;20991:16;:29;;;;21050:10;21031:16;:29;;;;21091:60;21134:16;;21091:38;21112:16;;21091;;:20;;:38;;;;:::i;:::-;:42;;:60;;;;:::i;:::-;21071:17;:80;;;;21201:2;21192:8;;:11;;;;:::i;:::-;21170:17;;:34;;21162:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;20850:395:::0;;;:::o;18184:135::-;3469:12;:10;:12::i;:::-;3459:22;;:6;;;;;;;;;;:22;;;3451:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18305:6:::1;18275:19;:27;18295:6;18275:27;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;18184:135:::0;;:::o;13044:35::-;;;;:::o;21941:313::-;22039:4;22056:36;22066:6;22074:9;22085:6;22056:9;:36::i;:::-;;22103:121;22112:6;22120:12;:10;:12::i;:::-;22134:89;22172:6;22134:89;;;;;;;;;;;;;;;;;:11;:19;22146:6;22134:19;;;;;;;;;;;;;;;:33;22154:12;:10;:12::i;:::-;22134:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;22103:8;:121::i;:::-;22242:4;22235:11;;21941:313;;;;;:::o;18561:113::-;3469:12;:10;:12::i;:::-;3459:22;;:6;;;;;;;;;;:22;;;3451:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18658:8:::1;18639:16;;:27;;;;;;;;;;;;;;;;;;18561:113:::0;:::o;12336:81::-;;;:::o;19662:156::-;19715:7;19742:68;19787:22;19797:11;19787:9;:22::i;:::-;19742:40;19759:22;19769:11;19759:9;:22::i;:::-;19742:12;;:16;;:40;;;;:::i;:::-;:44;;:68;;;;:::i;:::-;19735:75;;19662:156;:::o;16271:83::-;16312:5;16337:9;;;;;;;;;;;16330:16;;16271:83;:::o;16748:218::-;16836:4;16853:83;16862:12;:10;:12::i;:::-;16876:7;16885:50;16924:10;16885:11;:25;16897:12;:10;:12::i;:::-;16885:25;;;;;;;;;;;;;;;:34;16911:7;16885:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;16853:8;:83::i;:::-;16954:4;16947:11;;16748:218;;;;:::o;18792:124::-;3469:12;:10;:12::i;:::-;3459:22;;:6;;;;;;;;;;:22;;;3451:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18900:8:::1;18874:23;:34;;;;18792:124:::0;:::o;12733:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;13758:40::-;;;;;;;;;;;;;:::o;12641:26::-;;;;;;;;;;;;;:::o;18924:132::-;3469:12;:10;:12::i;:::-;3459:22;;:6;;;;;;;;;;:22;;;3451:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19037:10:::1;19011:15;;:37;;;;;;;;;;;;;;;;;;18924:132:::0;:::o;13179:36::-;;;;:::o;12676:50::-;;;;;;;;;;;;;;;;;;;;;;:::o;20094:748::-;20174:22;3469:12;:10;:12::i;:::-;3459:22;;:6;;;;;;;;;;:22;;;3451:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20211:35:::1;20268:16;20211:74;;20334:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20316:53;;;20378:4;20385:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20316:93;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20299:110;;20451:1;20425:28;;:14;:28;;;20422:225;;;20539:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20521:74;;;20604:4;20611:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20521:114;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20504:131;;20422:225;20673:14;20659:11;;:28;;;;;;;;;;;;;;;;;;20739:16;20721:15;;:34;;;;;;;;;;;;;;;;;;20830:4;20793:12;:34;20814:11;;;;;;;;;;;20793:34;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;3529:1;20094:748:::0;;;:::o;28228:697::-;3469:12;:10;:12::i;:::-;3459:22;;:6;;;;;;;;;;:22;;;3451:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28328:15:::1;28346:10;28328:28;;28394:7;;:14;;28375:8;;:15;;:33;28367:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28445:15;28475:6:::0;28484:1:::1;28475:10;;28471:92;28491:7;;:14;;28487:1;:18;28471:92;;;28541:7;;28549:1;28541:10;;;;;;;;;;;;;;;;;;;;;28527:24;;;;;:::i;:::-;;;28507:3;;;;;:::i;:::-;;;;28471:92;;;;28603:10;28581:18;28591:7;28581:9;:18::i;:::-;:32;;28573:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;28676:34;28699:10;28676:9;:18;28686:7;28676:18;;;;;;;;;;;;;;;;:22;;:34;;;;:::i;:::-;28655:9;:18;28665:7;28655:18;;;;;;;;;;;;;;;:55;;;;28726:6;28722:194;28742:8;;:15;;28738:1;:19;28722:194;;;28804:38;28831:7;;28839:1;28831:10;;;;;;;;;;;;;;;;;;;;;28804:9;:22;28814:8;;28823:1;28814:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28804:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;28779:9;:22;28789:8;;28798:1;28789:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28779:22;;;;;;;;;;;;;;;:63;;;;28880:8;;28889:1;28880:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28862:42;;28871:7;28862:42;;;28893:7;;28901:1;28893:10;;;;;;;;;;;;;;;;;;;;;28862:42;;;;;;:::i;:::-;;;;;;;;28759:3;;;;;:::i;:::-;;;;28722:194;;;;3529:1;;28228:697:::0;;;;:::o;16470:119::-;16536:7;16563:9;:18;16573:7;16563:18;;;;;;;;;;;;;;;;16556:25;;16470:119;;;:::o;3550:230::-;3469:12;:10;:12::i;:::-;3459:22;;:6;;;;;;;;;;:22;;;3451:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;3657:42:::1;3620:81;;3641:6;::::0;::::1;;;;;;;;3620:81;;;;;;;;;;;;3729:42;3712:6;::::0;:60:::1;;;;;;;;;;;;;;;;;;3550:230::o:0;12093:92::-;;;;;;;;;;;;;:::o;13495:59::-;;;;:::o;13567:58::-;;;;:::o;13301:33::-;;;;:::o;17765:129::-;3469:12;:10;:12::i;:::-;3459:22;;:6;;;;;;;;;;:22;;;3451:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17878:8:::1;17854:12;:21;17867:7;17854:21;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;17765:129:::0;;:::o;13901:41::-;;;;;;;;;;;;;:::o;13092:36::-;;;;:::o;12902:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;3325:79::-;3363:7;3390:6;;;;;;;;;;;3383:13;;3325:79;:::o;16176:87::-;16215:13;16248:7;16241:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16176:87;:::o;12291:32::-;;;;;;;;;;;;;:::o;16974:269::-;17067:4;17084:129;17093:12;:10;:12::i;:::-;17107:7;17116:96;17155:15;17116:96;;;;;;;;;;;;;;;;;:11;:25;17128:12;:10;:12::i;:::-;17116:25;;;;;;;;;;;;;;;:34;17142:7;17116:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;17084:8;:129::i;:::-;17231:4;17224:11;;16974:269;;;;:::o;19525:125::-;3469:12;:10;:12::i;:::-;3459:22;;:6;;;;;;;;;;:22;;;3451:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19634:8:::1;19606:25;;:36;;;;;;;;;;;;;;;;;;19525:125:::0;:::o;21766:167::-;21844:4;21861:42;21871:12;:10;:12::i;:::-;21885:9;21896:6;21861:9;:42::i;:::-;;21921:4;21914:11;;21766:167;;;;:::o;15971:106::-;3469:12;:10;:12::i;:::-;3459:22;;:6;;;;;;;;;;:22;;;3451:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16059:8:::1;16042:14;;:25;;;;;;;;;;;;;;;;;;15971:106:::0;:::o;19346:171::-;3469:12;:10;:12::i;:::-;3459:22;;:6;;;;;;;;;;:22;;;3451:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19447:8:::1;19423:21;;:32;;;;;;;;;;;;;;;;;;19471:38;19500:8;19471:38;;;;;;:::i;:::-;;;;;;;;19346:171:::0;:::o;13001:36::-;;;;:::o;13689:26::-;;;;;;;;;;;;;:::o;13135:37::-;;;;:::o;12843:52::-;;;;;;;;;;;;;;;;;;;;;;:::o;19064:134::-;3469:12;:10;:12::i;:::-;3459:22;;:6;;;;;;;;;;:22;;;3451:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19179:10:::1;19151:17;;:39;;;;;;;;;;;;;;;;;;19064:134:::0;:::o;13406:69::-;;;;:::o;13805:45::-;;;;;;;;;;;;;:::o;12959:35::-;;;;:::o;16597:143::-;16678:7;16705:11;:18;16717:5;16705:18;;;;;;;;;;;;;;;:27;16724:7;16705:27;;;;;;;;;;;;;;;;16698:34;;16597:143;;;;:::o;24403:154::-;3469:12;:10;:12::i;:::-;3459:22;;:6;;;;;;;;;;:22;;;3451:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24457:7:::1;24477:10;24469:24;;24501:21;24469:58;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24456:71;;;24546:2;24538:11;;;::::0;::::1;;3529:1;24403:154::o:0;18442:111::-;3469:12;:10;:12::i;:::-;3459:22;;:6;;;;;;;;;;:22;;;3451:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18534:11:::1;18519:12;:26;;;;18442:111:::0;:::o;18327:107::-;3469:12;:10;:12::i;:::-;3459:22;;:6;;;;;;;;;;:22;;;3451:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18419:7:::1;18394:22;;:32;;;;;;;;;;;;;;;;;;18327:107:::0;:::o;17902:135::-;3469:12;:10;:12::i;:::-;3459:22;;:6;;;;;;;;;;:22;;;3451:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18021:8:::1;17992:17;:26;18010:7;17992:26;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;17902:135:::0;;:::o;13262:32::-;;;;:::o;18682:102::-;3469:12;:10;:12::i;:::-;3459:22;;:6;;;;;;;;;;:22;;;3451:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18768:8:::1;18754:10;:22;;;;18682:102:::0;:::o;3788:244::-;3469:12;:10;:12::i;:::-;3459:22;;:6;;;;;;;;;;:22;;;3451:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;3897:1:::1;3877:22;;:8;:22;;;;3869:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3987:8;3958:38;;3979:6;::::0;::::1;;;;;;;;3958:38;;;;;;;;;;;;4016:8;4007:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;3788:244:::0;:::o;24256:139::-;3469:12;:10;:12::i;:::-;3459:22;;:6;;;;;;;;;;:22;;;3451:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24351:6:::1;24344:23;;;24368:10;24379:7;24344:43;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24256:139:::0;;:::o;13224:29::-;;;;:::o;18045:127::-;3469:12;:10;:12::i;:::-;3459:22;;:6;;;;;;;;;;:22;;;3451:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18158:6:::1;18132:15;:23;18148:6;18132:23;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;18045:127:::0;;:::o;13859:35::-;;;;;;;;;;;;;:::o;12192:92::-;;;;;;;;;;;;;:::o;19206:132::-;3469:12;:10;:12::i;:::-;3459:22;;:6;;;;;;;;;;:22;;;3451:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19319:10:::1;19293:15;;:37;;;;;;;;;;;;;;;;;;19206:132:::0;:::o;2010:250::-;2068:7;2097:1;2092;:6;2088:47;;;2122:1;2115:8;;;;2088:47;2147:9;2163:1;2159;:5;;;;:::i;:::-;2147:17;;2192:1;2187;2183;:5;;;;:::i;:::-;:10;2175:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;2251:1;2244:8;;;2010:250;;;;;:::o;2268:132::-;2326:7;2353:39;2357:1;2360;2353:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2346:46;;2268:132;;;;:::o;1477:181::-;1535:7;1555:9;1571:1;1567;:5;;;;:::i;:::-;1555:17;;1596:1;1591;:6;;1583:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;1649:1;1642:8;;;1477:181;;;;:::o;535:115::-;588:15;631:10;616:26;;535:115;:::o;17420:337::-;17530:1;17513:19;;:5;:19;;;;17505:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17611:1;17592:21;;:7;:21;;;;17584:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17695:6;17665:11;:18;17677:5;17665:18;;;;;;;;;;;;;;;:27;17684:7;17665:27;;;;;;;;;;;;;;;:36;;;;17733:7;17717:32;;17726:5;17717:32;;;17742:6;17717:32;;;;;;:::i;:::-;;;;;;;;17420:337;;;:::o;22262:1986::-;22349:4;22394:1;22376:20;;:6;:20;;;;22368:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;22478:1;22457:23;;:9;:23;;;;22449:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;22732:16;;;;;;;;;;;22729:1502;;;22782:41;22797:6;22805:9;22816:6;22782:14;:41::i;:::-;22775:48;;;;22729:1502;22881:15;:23;22897:6;22881:23;;;;;;;;;;;;;;;;;;;;;;;;;22880:24;:55;;;;;22909:15;:26;22925:9;22909:26;;;;;;;;;;;;;;;;;;;;;;;;;22908:27;22880:55;:81;;;;;22939:22;;;;;;;;;;;22880:81;22877:196;;;23000:12;;22990:6;:22;;22982:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;22877:196;23089:28;23120:24;23138:4;23120:9;:24::i;:::-;23089:55;;23159:28;23214:23;;23190:20;:47;;23159:78;;23270:23;:44;;;;;23298:16;;;;;;;;;;;23297:17;23270:44;:69;;;;;23319:12;:20;23332:6;23319:20;;;;;;;;;;;;;;;;;;;;;;;;;23318:21;23270:69;:94;;;;;23343:21;;;;;;;;;;;23270:94;23266:305;;;23402:25;;;;;;;;;;;23399:97;;;23473:23;;23450:46;;23399:97;23515:36;23530:20;23515:14;:36::i;:::-;23266:305;23607:53;23629:6;23607:53;;;;;;;;;;;;;;;;;:9;:17;23617:6;23607:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;23587:9;:17;23597:6;23587:17;;;;;;;;;;;;;;;:73;;;;23677:19;23700:17;:25;23718:6;23700:25;;;;;;;;;;;;;;;;;;;;;;;;;:57;;;;23729:17;:28;23747:9;23729:28;;;;;;;;;;;;;;;;;;;;;;;;;23700:57;23699:148;;23813:34;23821:6;23829:9;23840:6;23813:7;:34::i;:::-;23699:148;;;23804:6;23699:148;23677:170;;23867:16;;;;;;;;;;;:51;;;;;23888:19;:30;23908:9;23888:30;;;;;;;;;;;;;;;;;;;;;;;;;23887:31;23867:51;23864:191;;;23988:10;;23947:37;23972:11;23947:20;23957:9;23947;:20::i;:::-;:24;;:37;;;;:::i;:::-;:51;;23939:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;23864:191;24094:37;24119:11;24094:9;:20;24104:9;24094:20;;;;;;;;;;;;;;;;:24;;:37;;;;:::i;:::-;24071:9;:20;24081:9;24071:20;;;;;;;;;;;;;;;:60;;;;24170:9;24153:40;;24162:6;24153:40;;;24181:11;24153:40;;;;;;:::i;:::-;;;;;;;;24215:4;24208:11;;;;;22262:1986;;;;;;:::o;1810:192::-;1896:7;1929:1;1924;:6;;1932:12;1916:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1956:9;1972:1;1968;:5;;;;:::i;:::-;1956:17;;1993:1;1986:8;;;1810:192;;;;;:::o;1666:136::-;1724:7;1751:43;1755:1;1758;1751:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1744:50;;1666:136;;;;:::o;2408:278::-;2494:7;2526:1;2522;:5;2529:12;2514:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2553:9;2569:1;2565;:5;;;;:::i;:::-;2553:17;;2677:1;2670:8;;;2408:278;;;;;:::o;24565:330::-;24658:4;24695:53;24717:6;24695:53;;;;;;;;;;;;;;;;;:9;:17;24705:6;24695:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;24675:9;:17;24685:6;24675:17;;;;;;;;;;;;;;;:73;;;;24782:32;24807:6;24782:9;:20;24792:9;24782:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;24759:9;:20;24769:9;24759:20;;;;;;;;;;;;;;;:55;;;;24847:9;24830:35;;24839:6;24830:35;;;24858:6;24830:35;;;;;;:::i;:::-;;;;;;;;24883:4;24876:11;;24565:330;;;;;:::o;24903:1449::-;14386:4;14367:16;;:23;;;;;;;;;;;;;;;;;;24977:19:::1;24999:41;25021:18;;24999:17;;:21;;:41;;;;:::i;:::-;24977:63;;25053:22;25078:39;25099:17;;25078:16;;:20;;:39;;;;:::i;:::-;25053:64;;25128:22;25153:39;25174:17;;25153:16;;:20;;:39;;;;:::i;:::-;25128:64;;25291:18;25312:51;25361:1;25312:44;25344:11;25312:27;25324:14;25312:7;:11;;:27;;;;:::i;:::-;:31;;:44;;;;:::i;:::-;:48;;:51;;;;:::i;:::-;25291:72;;25374:20;25397:23;25409:10;25397:7;:11;;:23;;;;:::i;:::-;25374:46;;25433:22;25459:21;25433:47;;25491:30;25508:12;25491:16;:30::i;:::-;25532:23;25559:41;25585:14;25559:21;:25;;:41;;;;:::i;:::-;25532:68;;25613:19;25635:38;25651:21;25670:1;25651:14;:18;;:21;;;;:::i;:::-;25635:11;:15;;:38;;;;:::i;:::-;25613:60;;25686:26;25715:59;25772:1;25715:52;25755:11;25715:35;25735:14;25715:15;:19;;:35;;;;:::i;:::-;:39;;:52;;;;:::i;:::-;:56;;:59;;;;:::i;:::-;25686:88;;25785:26;25814:52;25854:11;25814:35;25834:14;25814:15;:19;;:35;;;;:::i;:::-;:39;;:52;;;;:::i;:::-;25785:81;;25877:26;25906:63;25950:18;25906:39;25926:18;25906:15;:19;;:39;;;;:::i;:::-;:43;;:63;;;;:::i;:::-;25877:92;;26006:1;25985:18;:22;25982:107;;;26032:15;;;;;;;;;;;26024:33;;:53;26058:18;26024:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;25982:107;26125:1;26104:18;:22;26101:107;;;26151:15;;;;;;;;;;;26143:33;;:53;26177:18;26143:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;26101:107;26253:1;26232:18;:22;:40;;;;;26271:1;26258:10;:14;26232:40;26229:116;;;26289:44;26302:10;26314:18;26289:12;:44::i;:::-;26229:116;14401:1;;;;;;;;;;;14432:5:::0;14413:16;;:24;;;;;;;;;;;;;;;;;;24903:1449;:::o;27569:622::-;27655:7;27685:17;27705:1;27685:21;;27730:12;:20;27743:6;27730:20;;;;;;;;;;;;;;;;;;;;;;;;;27727:223;;;27779:38;27813:3;27779:29;27790:17;;27779:6;:10;;:29;;;;:::i;:::-;:33;;:38;;;;:::i;:::-;27767:50;;27727:223;;;27847:12;:23;27860:9;27847:23;;;;;;;;;;;;;;;;;;;;;;;;;27844:106;;;27899:39;27934:3;27899:30;27910:18;;27899:6;:10;;:30;;;;:::i;:::-;:34;;:39;;;;:::i;:::-;27887:51;;27844:106;27727:223;27985:1;27973:9;:13;27970:173;;;28030:39;28059:9;28030;:24;28048:4;28030:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;28003:9;:24;28021:4;28003:24;;;;;;;;;;;;;;;:66;;;;28114:4;28089:42;;28098:6;28089:42;;;28121:9;28089:42;;;;;;:::i;:::-;;;;;;;;27970:173;28162:21;28173:9;28162:6;:10;;:21;;;;:::i;:::-;28155:28;;;27569:622;;;;;:::o;26364:666::-;26490:21;26528:1;26514:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26490:40;;26559:4;26541;26546:1;26541:7;;;;;;;;;;;;;;;;;;;;;:23;;;;;;;;;;;26585:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26575:4;26580:1;26575:7;;;;;;;;;;;;;;;;;;;;;:32;;;;;;;;;;;26620:62;26637:4;26652:15;;;;;;;;;;;26670:11;26620:8;:62::i;:::-;26721:15;;;;;;;;;;;:66;;;26802:11;26828:1;26872:4;26899;26935:15;26721:240;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26987:35;27004:11;27017:4;26987:35;;;;;;;:::i;:::-;;;;;;;;26364:666;;:::o;27038:523::-;27186:62;27203:4;27218:15;;;;;;;;;;;27236:11;27186:8;:62::i;:::-;27291:15;;;;;;;;;;;:31;;;27330:9;27363:4;27383:11;27409:1;27452;27495:17;;;;;;;;;;;27527:15;27291:262;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;27038:523;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:143::-;209:5;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;215:80;;;;:::o;318:367::-;391:8;401:6;451:3;444:4;436:6;432:17;428:27;418:2;;469:1;466;459:12;418:2;505:6;492:20;482:30;;535:18;527:6;524:30;521:2;;;567:1;564;557:12;521:2;604:4;596:6;592:17;580:29;;658:3;650:4;642:6;638:17;628:8;624:32;621:41;618:2;;;675:1;672;665:12;618:2;408:277;;;;;:::o;708:367::-;781:8;791:6;841:3;834:4;826:6;822:17;818:27;808:2;;859:1;856;849:12;808:2;895:6;882:20;872:30;;925:18;917:6;914:30;911:2;;;957:1;954;947:12;911:2;994:4;986:6;982:17;970:29;;1048:3;1040:4;1032:6;1028:17;1018:8;1014:32;1011:41;1008:2;;;1065:1;1062;1055:12;1008:2;798:277;;;;;:::o;1081:133::-;1124:5;1162:6;1149:20;1140:29;;1178:30;1202:5;1178:30;:::i;:::-;1130:84;;;;:::o;1220:137::-;1274:5;1305:6;1299:13;1290:22;;1321:30;1345:5;1321:30;:::i;:::-;1280:77;;;;:::o;1363:139::-;1409:5;1447:6;1434:20;1425:29;;1463:33;1490:5;1463:33;:::i;:::-;1415:87;;;;:::o;1508:143::-;1565:5;1596:6;1590:13;1581:22;;1612:33;1639:5;1612:33;:::i;:::-;1571:80;;;;:::o;1657:262::-;1716:6;1765:2;1753:9;1744:7;1740:23;1736:32;1733:2;;;1781:1;1778;1771:12;1733:2;1824:1;1849:53;1894:7;1885:6;1874:9;1870:22;1849:53;:::i;:::-;1839:63;;1795:117;1723:196;;;;:::o;1925:284::-;1995:6;2044:2;2032:9;2023:7;2019:23;2015:32;2012:2;;;2060:1;2057;2050:12;2012:2;2103:1;2128:64;2184:7;2175:6;2164:9;2160:22;2128:64;:::i;:::-;2118:74;;2074:128;2002:207;;;;:::o;2215:407::-;2283:6;2291;2340:2;2328:9;2319:7;2315:23;2311:32;2308:2;;;2356:1;2353;2346:12;2308:2;2399:1;2424:53;2469:7;2460:6;2449:9;2445:22;2424:53;:::i;:::-;2414:63;;2370:117;2526:2;2552:53;2597:7;2588:6;2577:9;2573:22;2552:53;:::i;:::-;2542:63;;2497:118;2298:324;;;;;:::o;2628:552::-;2705:6;2713;2721;2770:2;2758:9;2749:7;2745:23;2741:32;2738:2;;;2786:1;2783;2776:12;2738:2;2829:1;2854:53;2899:7;2890:6;2879:9;2875:22;2854:53;:::i;:::-;2844:63;;2800:117;2956:2;2982:53;3027:7;3018:6;3007:9;3003:22;2982:53;:::i;:::-;2972:63;;2927:118;3084:2;3110:53;3155:7;3146:6;3135:9;3131:22;3110:53;:::i;:::-;3100:63;;3055:118;2728:452;;;;;:::o;3186:401::-;3251:6;3259;3308:2;3296:9;3287:7;3283:23;3279:32;3276:2;;;3324:1;3321;3314:12;3276:2;3367:1;3392:53;3437:7;3428:6;3417:9;3413:22;3392:53;:::i;:::-;3382:63;;3338:117;3494:2;3520:50;3562:7;3553:6;3542:9;3538:22;3520:50;:::i;:::-;3510:60;;3465:115;3266:321;;;;;:::o;3593:407::-;3661:6;3669;3718:2;3706:9;3697:7;3693:23;3689:32;3686:2;;;3734:1;3731;3724:12;3686:2;3777:1;3802:53;3847:7;3838:6;3827:9;3823:22;3802:53;:::i;:::-;3792:63;;3748:117;3904:2;3930:53;3975:7;3966:6;3955:9;3951:22;3930:53;:::i;:::-;3920:63;;3875:118;3676:324;;;;;:::o;4006:733::-;4128:6;4136;4144;4152;4201:2;4189:9;4180:7;4176:23;4172:32;4169:2;;;4217:1;4214;4207:12;4169:2;4288:1;4277:9;4273:17;4260:31;4318:18;4310:6;4307:30;4304:2;;;4350:1;4347;4340:12;4304:2;4386:80;4458:7;4449:6;4438:9;4434:22;4386:80;:::i;:::-;4368:98;;;;4231:245;4543:2;4532:9;4528:18;4515:32;4574:18;4566:6;4563:30;4560:2;;;4606:1;4603;4596:12;4560:2;4642:80;4714:7;4705:6;4694:9;4690:22;4642:80;:::i;:::-;4624:98;;;;4486:246;4159:580;;;;;;;:::o;4745:256::-;4801:6;4850:2;4838:9;4829:7;4825:23;4821:32;4818:2;;;4866:1;4863;4856:12;4818:2;4909:1;4934:50;4976:7;4967:6;4956:9;4952:22;4934:50;:::i;:::-;4924:60;;4880:114;4808:193;;;;:::o;5007:278::-;5074:6;5123:2;5111:9;5102:7;5098:23;5094:32;5091:2;;;5139:1;5136;5129:12;5091:2;5182:1;5207:61;5260:7;5251:6;5240:9;5236:22;5207:61;:::i;:::-;5197:71;;5153:125;5081:204;;;;:::o;5291:262::-;5350:6;5399:2;5387:9;5378:7;5374:23;5370:32;5367:2;;;5415:1;5412;5405:12;5367:2;5458:1;5483:53;5528:7;5519:6;5508:9;5504:22;5483:53;:::i;:::-;5473:63;;5429:117;5357:196;;;;:::o;5559:552::-;5636:6;5644;5652;5701:2;5689:9;5680:7;5676:23;5672:32;5669:2;;;5717:1;5714;5707:12;5669:2;5760:1;5785:53;5830:7;5821:6;5810:9;5806:22;5785:53;:::i;:::-;5775:63;;5731:117;5887:2;5913:53;5958:7;5949:6;5938:9;5934:22;5913:53;:::i;:::-;5903:63;;5858:118;6015:2;6041:53;6086:7;6077:6;6066:9;6062:22;6041:53;:::i;:::-;6031:63;;5986:118;5659:452;;;;;:::o;6117:596::-;6205:6;6213;6221;6270:2;6258:9;6249:7;6245:23;6241:32;6238:2;;;6286:1;6283;6276:12;6238:2;6329:1;6354:64;6410:7;6401:6;6390:9;6386:22;6354:64;:::i;:::-;6344:74;;6300:128;6467:2;6493:64;6549:7;6540:6;6529:9;6525:22;6493:64;:::i;:::-;6483:74;;6438:129;6606:2;6632:64;6688:7;6679:6;6668:9;6664:22;6632:64;:::i;:::-;6622:74;;6577:129;6228:485;;;;;:::o;6719:179::-;6788:10;6809:46;6851:3;6843:6;6809:46;:::i;:::-;6887:4;6882:3;6878:14;6864:28;;6799:99;;;;:::o;6904:142::-;7007:32;7033:5;7007:32;:::i;:::-;7002:3;6995:45;6985:61;;:::o;7052:108::-;7129:24;7147:5;7129:24;:::i;:::-;7124:3;7117:37;7107:53;;:::o;7166:118::-;7253:24;7271:5;7253:24;:::i;:::-;7248:3;7241:37;7231:53;;:::o;7320:732::-;7439:3;7468:54;7516:5;7468:54;:::i;:::-;7538:86;7617:6;7612:3;7538:86;:::i;:::-;7531:93;;7648:56;7698:5;7648:56;:::i;:::-;7727:7;7758:1;7743:284;7768:6;7765:1;7762:13;7743:284;;;7844:6;7838:13;7871:63;7930:3;7915:13;7871:63;:::i;:::-;7864:70;;7957:60;8010:6;7957:60;:::i;:::-;7947:70;;7803:224;7790:1;7787;7783:9;7778:14;;7743:284;;;7747:14;8043:3;8036:10;;7444:608;;;;;;;:::o;8058:109::-;8139:21;8154:5;8139:21;:::i;:::-;8134:3;8127:34;8117:50;;:::o;8173:185::-;8287:64;8345:5;8287:64;:::i;:::-;8282:3;8275:77;8265:93;;:::o;8364:147::-;8459:45;8498:5;8459:45;:::i;:::-;8454:3;8447:58;8437:74;;:::o;8517:364::-;8605:3;8633:39;8666:5;8633:39;:::i;:::-;8688:71;8752:6;8747:3;8688:71;:::i;:::-;8681:78;;8768:52;8813:6;8808:3;8801:4;8794:5;8790:16;8768:52;:::i;:::-;8845:29;8867:6;8845:29;:::i;:::-;8840:3;8836:39;8829:46;;8609:272;;;;;:::o;8887:366::-;9029:3;9050:67;9114:2;9109:3;9050:67;:::i;:::-;9043:74;;9126:93;9215:3;9126:93;:::i;:::-;9244:2;9239:3;9235:12;9228:19;;9033:220;;;:::o;9259:366::-;9401:3;9422:67;9486:2;9481:3;9422:67;:::i;:::-;9415:74;;9498:93;9587:3;9498:93;:::i;:::-;9616:2;9611:3;9607:12;9600:19;;9405:220;;;:::o;9631:366::-;9773:3;9794:67;9858:2;9853:3;9794:67;:::i;:::-;9787:74;;9870:93;9959:3;9870:93;:::i;:::-;9988:2;9983:3;9979:12;9972:19;;9777:220;;;:::o;10003:366::-;10145:3;10166:67;10230:2;10225:3;10166:67;:::i;:::-;10159:74;;10242:93;10331:3;10242:93;:::i;:::-;10360:2;10355:3;10351:12;10344:19;;10149:220;;;:::o;10375:366::-;10517:3;10538:67;10602:2;10597:3;10538:67;:::i;:::-;10531:74;;10614:93;10703:3;10614:93;:::i;:::-;10732:2;10727:3;10723:12;10716:19;;10521:220;;;:::o;10747:366::-;10889:3;10910:67;10974:2;10969:3;10910:67;:::i;:::-;10903:74;;10986:93;11075:3;10986:93;:::i;:::-;11104:2;11099:3;11095:12;11088:19;;10893:220;;;:::o;11119:366::-;11261:3;11282:67;11346:2;11341:3;11282:67;:::i;:::-;11275:74;;11358:93;11447:3;11358:93;:::i;:::-;11476:2;11471:3;11467:12;11460:19;;11265:220;;;:::o;11491:366::-;11633:3;11654:67;11718:2;11713:3;11654:67;:::i;:::-;11647:74;;11730:93;11819:3;11730:93;:::i;:::-;11848:2;11843:3;11839:12;11832:19;;11637:220;;;:::o;11863:366::-;12005:3;12026:67;12090:2;12085:3;12026:67;:::i;:::-;12019:74;;12102:93;12191:3;12102:93;:::i;:::-;12220:2;12215:3;12211:12;12204:19;;12009:220;;;:::o;12235:366::-;12377:3;12398:67;12462:2;12457:3;12398:67;:::i;:::-;12391:74;;12474:93;12563:3;12474:93;:::i;:::-;12592:2;12587:3;12583:12;12576:19;;12381:220;;;:::o;12607:366::-;12749:3;12770:67;12834:2;12829:3;12770:67;:::i;:::-;12763:74;;12846:93;12935:3;12846:93;:::i;:::-;12964:2;12959:3;12955:12;12948:19;;12753:220;;;:::o;12979:366::-;13121:3;13142:67;13206:2;13201:3;13142:67;:::i;:::-;13135:74;;13218:93;13307:3;13218:93;:::i;:::-;13336:2;13331:3;13327:12;13320:19;;13125:220;;;:::o;13351:366::-;13493:3;13514:67;13578:2;13573:3;13514:67;:::i;:::-;13507:74;;13590:93;13679:3;13590:93;:::i;:::-;13708:2;13703:3;13699:12;13692:19;;13497:220;;;:::o;13723:398::-;13882:3;13903:83;13984:1;13979:3;13903:83;:::i;:::-;13896:90;;13995:93;14084:3;13995:93;:::i;:::-;14113:1;14108:3;14104:11;14097:18;;13886:235;;;:::o;14127:366::-;14269:3;14290:67;14354:2;14349:3;14290:67;:::i;:::-;14283:74;;14366:93;14455:3;14366:93;:::i;:::-;14484:2;14479:3;14475:12;14468:19;;14273:220;;;:::o;14499:118::-;14586:24;14604:5;14586:24;:::i;:::-;14581:3;14574:37;14564:53;;:::o;14623:112::-;14706:22;14722:5;14706:22;:::i;:::-;14701:3;14694:35;14684:51;;:::o;14741:379::-;14925:3;14947:147;15090:3;14947:147;:::i;:::-;14940:154;;15111:3;15104:10;;14929:191;;;:::o;15126:222::-;15219:4;15257:2;15246:9;15242:18;15234:26;;15270:71;15338:1;15327:9;15323:17;15314:6;15270:71;:::i;:::-;15224:124;;;;:::o;15354:254::-;15463:4;15501:2;15490:9;15486:18;15478:26;;15514:87;15598:1;15587:9;15583:17;15574:6;15514:87;:::i;:::-;15468:140;;;;:::o;15614:332::-;15735:4;15773:2;15762:9;15758:18;15750:26;;15786:71;15854:1;15843:9;15839:17;15830:6;15786:71;:::i;:::-;15867:72;15935:2;15924:9;15920:18;15911:6;15867:72;:::i;:::-;15740:206;;;;;:::o;15952:332::-;16073:4;16111:2;16100:9;16096:18;16088:26;;16124:71;16192:1;16181:9;16177:17;16168:6;16124:71;:::i;:::-;16205:72;16273:2;16262:9;16258:18;16249:6;16205:72;:::i;:::-;16078:206;;;;;:::o;16290:807::-;16539:4;16577:3;16566:9;16562:19;16554:27;;16591:71;16659:1;16648:9;16644:17;16635:6;16591:71;:::i;:::-;16672:72;16740:2;16729:9;16725:18;16716:6;16672:72;:::i;:::-;16754:80;16830:2;16819:9;16815:18;16806:6;16754:80;:::i;:::-;16844;16920:2;16909:9;16905:18;16896:6;16844:80;:::i;:::-;16934:73;17002:3;16991:9;16987:19;16978:6;16934:73;:::i;:::-;17017;17085:3;17074:9;17070:19;17061:6;17017:73;:::i;:::-;16544:553;;;;;;;;;:::o;17103:210::-;17190:4;17228:2;17217:9;17213:18;17205:26;;17241:65;17303:1;17292:9;17288:17;17279:6;17241:65;:::i;:::-;17195:118;;;;:::o;17319:276::-;17439:4;17477:2;17466:9;17462:18;17454:26;;17490:98;17585:1;17574:9;17570:17;17561:6;17490:98;:::i;:::-;17444:151;;;;:::o;17601:313::-;17714:4;17752:2;17741:9;17737:18;17729:26;;17801:9;17795:4;17791:20;17787:1;17776:9;17772:17;17765:47;17829:78;17902:4;17893:6;17829:78;:::i;:::-;17821:86;;17719:195;;;;:::o;17920:419::-;18086:4;18124:2;18113:9;18109:18;18101:26;;18173:9;18167:4;18163:20;18159:1;18148:9;18144:17;18137:47;18201:131;18327:4;18201:131;:::i;:::-;18193:139;;18091:248;;;:::o;18345:419::-;18511:4;18549:2;18538:9;18534:18;18526:26;;18598:9;18592:4;18588:20;18584:1;18573:9;18569:17;18562:47;18626:131;18752:4;18626:131;:::i;:::-;18618:139;;18516:248;;;:::o;18770:419::-;18936:4;18974:2;18963:9;18959:18;18951:26;;19023:9;19017:4;19013:20;19009:1;18998:9;18994:17;18987:47;19051:131;19177:4;19051:131;:::i;:::-;19043:139;;18941:248;;;:::o;19195:419::-;19361:4;19399:2;19388:9;19384:18;19376:26;;19448:9;19442:4;19438:20;19434:1;19423:9;19419:17;19412:47;19476:131;19602:4;19476:131;:::i;:::-;19468:139;;19366:248;;;:::o;19620:419::-;19786:4;19824:2;19813:9;19809:18;19801:26;;19873:9;19867:4;19863:20;19859:1;19848:9;19844:17;19837:47;19901:131;20027:4;19901:131;:::i;:::-;19893:139;;19791:248;;;:::o;20045:419::-;20211:4;20249:2;20238:9;20234:18;20226:26;;20298:9;20292:4;20288:20;20284:1;20273:9;20269:17;20262:47;20326:131;20452:4;20326:131;:::i;:::-;20318:139;;20216:248;;;:::o;20470:419::-;20636:4;20674:2;20663:9;20659:18;20651:26;;20723:9;20717:4;20713:20;20709:1;20698:9;20694:17;20687:47;20751:131;20877:4;20751:131;:::i;:::-;20743:139;;20641:248;;;:::o;20895:419::-;21061:4;21099:2;21088:9;21084:18;21076:26;;21148:9;21142:4;21138:20;21134:1;21123:9;21119:17;21112:47;21176:131;21302:4;21176:131;:::i;:::-;21168:139;;21066:248;;;:::o;21320:419::-;21486:4;21524:2;21513:9;21509:18;21501:26;;21573:9;21567:4;21563:20;21559:1;21548:9;21544:17;21537:47;21601:131;21727:4;21601:131;:::i;:::-;21593:139;;21491:248;;;:::o;21745:419::-;21911:4;21949:2;21938:9;21934:18;21926:26;;21998:9;21992:4;21988:20;21984:1;21973:9;21969:17;21962:47;22026:131;22152:4;22026:131;:::i;:::-;22018:139;;21916:248;;;:::o;22170:419::-;22336:4;22374:2;22363:9;22359:18;22351:26;;22423:9;22417:4;22413:20;22409:1;22398:9;22394:17;22387:47;22451:131;22577:4;22451:131;:::i;:::-;22443:139;;22341:248;;;:::o;22595:419::-;22761:4;22799:2;22788:9;22784:18;22776:26;;22848:9;22842:4;22838:20;22834:1;22823:9;22819:17;22812:47;22876:131;23002:4;22876:131;:::i;:::-;22868:139;;22766:248;;;:::o;23020:419::-;23186:4;23224:2;23213:9;23209:18;23201:26;;23273:9;23267:4;23263:20;23259:1;23248:9;23244:17;23237:47;23301:131;23427:4;23301:131;:::i;:::-;23293:139;;23191:248;;;:::o;23445:419::-;23611:4;23649:2;23638:9;23634:18;23626:26;;23698:9;23692:4;23688:20;23684:1;23673:9;23669:17;23662:47;23726:131;23852:4;23726:131;:::i;:::-;23718:139;;23616:248;;;:::o;23870:222::-;23963:4;24001:2;23990:9;23986:18;23978:26;;24014:71;24082:1;24071:9;24067:17;24058:6;24014:71;:::i;:::-;23968:124;;;;:::o;24098:483::-;24269:4;24307:2;24296:9;24292:18;24284:26;;24320:71;24388:1;24377:9;24373:17;24364:6;24320:71;:::i;:::-;24438:9;24432:4;24428:20;24423:2;24412:9;24408:18;24401:48;24466:108;24569:4;24560:6;24466:108;:::i;:::-;24458:116;;24274:307;;;;;:::o;24587:831::-;24850:4;24888:3;24877:9;24873:19;24865:27;;24902:71;24970:1;24959:9;24955:17;24946:6;24902:71;:::i;:::-;24983:80;25059:2;25048:9;25044:18;25035:6;24983:80;:::i;:::-;25110:9;25104:4;25100:20;25095:2;25084:9;25080:18;25073:48;25138:108;25241:4;25232:6;25138:108;:::i;:::-;25130:116;;25256:72;25324:2;25313:9;25309:18;25300:6;25256:72;:::i;:::-;25338:73;25406:3;25395:9;25391:19;25382:6;25338:73;:::i;:::-;24855:563;;;;;;;;:::o;25424:214::-;25513:4;25551:2;25540:9;25536:18;25528:26;;25564:67;25628:1;25617:9;25613:17;25604:6;25564:67;:::i;:::-;25518:120;;;;:::o;25644:132::-;25711:4;25734:3;25726:11;;25764:4;25759:3;25755:14;25747:22;;25716:60;;;:::o;25782:114::-;25849:6;25883:5;25877:12;25867:22;;25856:40;;;:::o;25902:99::-;25954:6;25988:5;25982:12;25972:22;;25961:40;;;:::o;26007:113::-;26077:4;26109;26104:3;26100:14;26092:22;;26082:38;;;:::o;26126:184::-;26225:11;26259:6;26254:3;26247:19;26299:4;26294:3;26290:14;26275:29;;26237:73;;;;:::o;26316:147::-;26417:11;26454:3;26439:18;;26429:34;;;;:::o;26469:169::-;26553:11;26587:6;26582:3;26575:19;26627:4;26622:3;26618:14;26603:29;;26565:73;;;;:::o;26644:305::-;26684:3;26703:20;26721:1;26703:20;:::i;:::-;26698:25;;26737:20;26755:1;26737:20;:::i;:::-;26732:25;;26891:1;26823:66;26819:74;26816:1;26813:81;26810:2;;;26897:18;;:::i;:::-;26810:2;26941:1;26938;26934:9;26927:16;;26688:261;;;;:::o;26955:185::-;26995:1;27012:20;27030:1;27012:20;:::i;:::-;27007:25;;27046:20;27064:1;27046:20;:::i;:::-;27041:25;;27085:1;27075:2;;27090:18;;:::i;:::-;27075:2;27132:1;27129;27125:9;27120:14;;26997:143;;;;:::o;27146:348::-;27186:7;27209:20;27227:1;27209:20;:::i;:::-;27204:25;;27243:20;27261:1;27243:20;:::i;:::-;27238:25;;27431:1;27363:66;27359:74;27356:1;27353:81;27348:1;27341:9;27334:17;27330:105;27327:2;;;27438:18;;:::i;:::-;27327:2;27486:1;27483;27479:9;27468:20;;27194:300;;;;:::o;27500:191::-;27540:4;27560:20;27578:1;27560:20;:::i;:::-;27555:25;;27594:20;27612:1;27594:20;:::i;:::-;27589:25;;27633:1;27630;27627:8;27624:2;;;27638:18;;:::i;:::-;27624:2;27683:1;27680;27676:9;27668:17;;27545:146;;;;:::o;27697:96::-;27734:7;27763:24;27781:5;27763:24;:::i;:::-;27752:35;;27742:51;;;:::o;27799:104::-;27844:7;27873:24;27891:5;27873:24;:::i;:::-;27862:35;;27852:51;;;:::o;27909:90::-;27943:7;27986:5;27979:13;27972:21;27961:32;;27951:48;;;:::o;28005:126::-;28042:7;28082:42;28075:5;28071:54;28060:65;;28050:81;;;:::o;28137:77::-;28174:7;28203:5;28192:16;;28182:32;;;:::o;28220:86::-;28255:7;28295:4;28288:5;28284:16;28273:27;;28263:43;;;:::o;28312:180::-;28389:9;28422:64;28480:5;28422:64;:::i;:::-;28409:77;;28399:93;;;:::o;28498:140::-;28575:9;28608:24;28626:5;28608:24;:::i;:::-;28595:37;;28585:53;;;:::o;28644:121::-;28702:9;28735:24;28753:5;28735:24;:::i;:::-;28722:37;;28712:53;;;:::o;28771:307::-;28839:1;28849:113;28863:6;28860:1;28857:13;28849:113;;;28948:1;28943:3;28939:11;28933:18;28929:1;28924:3;28920:11;28913:39;28885:2;28882:1;28878:10;28873:15;;28849:113;;;28980:6;28977:1;28974:13;28971:2;;;29060:1;29051:6;29046:3;29042:16;29035:27;28971:2;28820:258;;;;:::o;29084:320::-;29128:6;29165:1;29159:4;29155:12;29145:22;;29212:1;29206:4;29202:12;29233:18;29223:2;;29289:4;29281:6;29277:17;29267:27;;29223:2;29351;29343:6;29340:14;29320:18;29317:38;29314:2;;;29370:18;;:::i;:::-;29314:2;29135:269;;;;:::o;29410:233::-;29449:3;29472:24;29490:5;29472:24;:::i;:::-;29463:33;;29518:66;29511:5;29508:77;29505:2;;;29588:18;;:::i;:::-;29505:2;29635:1;29628:5;29624:13;29617:20;;29453:190;;;:::o;29649:180::-;29697:77;29694:1;29687:88;29794:4;29791:1;29784:15;29818:4;29815:1;29808:15;29835:180;29883:77;29880:1;29873:88;29980:4;29977:1;29970:15;30004:4;30001:1;29994:15;30021:180;30069:77;30066:1;30059:88;30166:4;30163:1;30156:15;30190:4;30187:1;30180:15;30207:102;30248:6;30299:2;30295:7;30290:2;30283:5;30279:14;30275:28;30265:38;;30255:54;;;:::o;30315:178::-;30455:30;30451:1;30443:6;30439:14;30432:54;30421:72;:::o;30499:222::-;30639:34;30635:1;30627:6;30623:14;30616:58;30708:5;30703:2;30695:6;30691:15;30684:30;30605:116;:::o;30727:177::-;30867:29;30863:1;30855:6;30851:14;30844:53;30833:71;:::o;30910:225::-;31050:34;31046:1;31038:6;31034:14;31027:58;31119:8;31114:2;31106:6;31102:15;31095:33;31016:119;:::o;31141:221::-;31281:34;31277:1;31269:6;31265:14;31258:58;31350:4;31345:2;31337:6;31333:15;31326:29;31247:115;:::o;31368:177::-;31508:29;31504:1;31496:6;31492:14;31485:53;31474:71;:::o;31551:224::-;31691:34;31687:1;31679:6;31675:14;31668:58;31760:7;31755:2;31747:6;31743:15;31736:32;31657:118;:::o;31781:227::-;31921:34;31917:1;31909:6;31905:14;31898:58;31990:10;31985:2;31977:6;31973:15;31966:35;31887:121;:::o;32014:220::-;32154:34;32150:1;32142:6;32138:14;32131:58;32223:3;32218:2;32210:6;32206:15;32199:28;32120:114;:::o;32240:172::-;32380:24;32376:1;32368:6;32364:14;32357:48;32346:66;:::o;32418:182::-;32558:34;32554:1;32546:6;32542:14;32535:58;32524:76;:::o;32606:179::-;32746:31;32742:1;32734:6;32730:14;32723:55;32712:73;:::o;32791:224::-;32931:34;32927:1;32919:6;32915:14;32908:58;33000:7;32995:2;32987:6;32983:15;32976:32;32897:118;:::o;33021:114::-;33127:8;:::o;33141:223::-;33281:34;33277:1;33269:6;33265:14;33258:58;33350:6;33345:2;33337:6;33333:15;33326:31;33247:117;:::o;33370:122::-;33443:24;33461:5;33443:24;:::i;:::-;33436:5;33433:35;33423:2;;33482:1;33479;33472:12;33423:2;33413:79;:::o;33498:116::-;33568:21;33583:5;33568:21;:::i;:::-;33561:5;33558:32;33548:2;;33604:1;33601;33594:12;33548:2;33538:76;:::o;33620:122::-;33693:24;33711:5;33693:24;:::i;:::-;33686:5;33683:35;33673:2;;33732:1;33729;33722:12;33673:2;33663:79;:::o

Swarm Source

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