ETH Price: $2,519.19 (-5.28%)

Token

Froggies (FROGGIES)
 

Overview

Max Total Supply

100,000,000,000,000,000 FROGGIES

Holders

32

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
0 FROGGIES

Value
$0.00
0x9537d8304078ade22b11dfe229c7900daa00dbce
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:
FROGGIES

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-11-02
*/

/**
 *Submitted for verification at Etherscan.io on 2021-10-29
*/

/**
 *Submitted for verification at Etherscan.io on 2021-10-13
*/

// SPDX-License-Identifier: Unlicensed
pragma solidity ^0.8.0;

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

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        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;
    }
}

library Address {

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

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

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


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

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

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

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

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

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

contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    uint256 private _lockTime;

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

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

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

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

// pragma solidity >=0.5.0;

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


// pragma solidity >=0.5.0;

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

// pragma solidity >=0.6.2;

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



// pragma solidity >=0.6.2;

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 FROGGIES is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;
    
    address payable public marketingWallet = payable(0x981b5f02AEdfb1c3529887158a4bCFe94c16Ab05); // Marketing Wallet
    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _isSniper;
    

    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _isExcluded;
    address[] private _excluded;
   
    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 100000000000000000* 10**9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private _name = "Froggies";
    string private _symbol = "FROGGIES";
    uint8 private _decimals = 9;


    uint256 public reflectionFee = 5; // 5% reflectionFee on buys 
    uint256 public sellFee = 5; // 5% fee on sells, 5% marketing/team/developement

    uint256 private _taxFee;
    uint256 private _liquidityFee;
    
    uint256 private _feeRate = 2; //contract can sell max 2% price impact in a single transaction
    uint256 public launchTime;

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;
    
    bool inSwap;
    
    bool tradingOpen = false;
    
    event SwapETHForTokens(
        uint256 amountIn,
        address[] path
    );
    
    event SwapTokensForETH(
        uint256 amountIn,
        address[] path
    );
    
    modifier lockTheSwap {
        inSwap = true;
        _;
        inSwap = false;
    }
    

    constructor () {
        _rOwned[_msgSender()] = _rTotal;
        emit Transfer(address(0), _msgSender(), _tTotal);
    }
    
    function initContract() external onlyOwner() {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
        .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;

        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        
    }
    
    function openTrading() external onlyOwner() {
        tradingOpen = true;
        launchTime = block.timestamp;
    }

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

    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[account]);
    }

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

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

    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, 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 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 isExcludedFromReward(address account) public view returns (bool) {
        return _isExcluded[account];
    }

    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }
    
    function deliver(uint256 tAmount) public {
        address sender = _msgSender();
        require(!_isExcluded[sender], "Excluded addresses cannot call this function");
        (uint256 rAmount,,,,,) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
    }
  

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount,,,,,) = _getValues(tAmount);
            return rAmount;
        } else {
            (,uint256 rTransferAmount,,,,) = _getValues(tAmount);
            return rTransferAmount;
        }
    }

    function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();
        return rAmount.div(currentRate);
    }

    function excludeFromReward(address account) public onlyOwner() {

        require(!_isExcluded[account], "Account is already excluded");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeInReward(address account) external onlyOwner() {
        require(_isExcluded[account], "Account is already excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }

    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 _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(!_isSniper[to], "You have no power here!");
        require(!_isSniper[from], "You have no power here!");
        if (from!= owner() && to!= owner()) require(tradingOpen, "Trading not yet enabled."); //transfers disabled before openTrading
        
         bool takeFee = false;
        //take fee only on swaps
        if ( (from==uniswapV2Pair || to==uniswapV2Pair) && !(_isExcludedFromFee[from] || _isExcludedFromFee[to]) ) {
            takeFee = true;
        }
       
        // buy
        if(from == uniswapV2Pair && to != address(uniswapV2Router) && !_isExcludedFromFee[to]) {
            
            // 5% reflection Fee on buys, no marketing
            if (takeFee) {
                _taxFee = reflectionFee;
                _liquidityFee = 0;
            }
            
            //antibot
            if (block.timestamp == launchTime) {
                _isSniper[to] = true;
            }
        }

        //sell
        if (!inSwap && tradingOpen && to == uniswapV2Pair) {
            
            // no reflection on sells, 5% marketing fee
            if (takeFee) {
                _taxFee = 0;
                _liquidityFee = sellFee;
            }
            
            uint256 contractTokenBalance = balanceOf(address(this));
            if(contractTokenBalance > 0) {
                if(contractTokenBalance > balanceOf(uniswapV2Pair).mul(_feeRate).div(100)) {
                    contractTokenBalance = balanceOf(uniswapV2Pair).mul(_feeRate).div(100);
                }
                swapTokens(contractTokenBalance);    
            }
          
        }
        _tokenTransfer(from,to,amount,takeFee);
    }

    function swapTokens(uint256 contractTokenBalance) private lockTheSwap {
        swapTokensForEth(contractTokenBalance);
        
        //Send to marketing wallet and buyback wallet
        uint256 contractETHBalance = address(this).balance;
        if(contractETHBalance > 0) {
            sendETHToFee(address(this).balance);
        }
    }
    
    function sendETHToFee(uint256 amount) private {
        marketingWallet.transfer(amount.mul(sellFee).div(10));
    }
    

   
    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
            owner(),
            block.timestamp
        );
    }

    function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private {
        if(!takeFee)
            removeAllFee();
        
        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);           
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);   
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);        
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

    function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, _getRate());
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity);
    }

    function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256) {
        uint256 tFee = calculateTaxFee(tAmount);
        uint256 tLiquidity = calculateLiquidityFee(tAmount);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity);
        return (tTransferAmount, tFee, tLiquidity);
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity);
        return (rAmount, rTransferAmount, rFee);
    }

    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;      
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
    
    function _takeLiquidity(uint256 tLiquidity) private {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
    }
    
    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_taxFee).div(
            10**2
        );
    }
    
    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_liquidityFee).div(
            10**2
        );
    }
    
    function removeAllFee() private {
        if(_taxFee == 0 && _liquidityFee == 0) return;
        
        _taxFee = 0;
        _liquidityFee = 0;
    }
    
    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }
    
    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }
    
    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }
    
    function setMarketingWallet(address _marketingWallet) external onlyOwner() {
        marketingWallet = payable(_marketingWallet);
    }
   
    function transferToAddressETH(address payable recipient, uint256 amount) private {
        recipient.transfer(amount);
    }
    
    function isSniper(address account) public view returns (bool) {
        return _isSniper[account];
    }
    
    function setFeeRate(uint256 rate) external  onlyOwner() {
        _feeRate = rate;
    }
    
    function setReflectionFee(uint256 fee) external  onlyOwner() {
        reflectionFee = fee;
    }
    
    function setSellFee(uint256 fee) external  onlyOwner() {
        sellFee = fee;
    }
   
     //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"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":"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":[{"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":[],"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":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isSniper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reflectionFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rate","type":"uint256"}],"name":"setFeeRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"setReflectionFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405273981b5f02aedfb1c3529887158a4bcfe94c16ab05600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506a52b7d2dcc80cd2e4000000600b55600b546000196200007a919062000461565b600019620000899190620003e6565b600c556040518060400160405280600881526020017f46726f6767696573000000000000000000000000000000000000000000000000815250600e9080519060200190620000d992919062000308565b506040518060400160405280600881526020017f46524f4747494553000000000000000000000000000000000000000000000000815250600f90805190602001906200012792919062000308565b506009601060006101000a81548160ff021916908360ff1602179055506005601155600560125560026015556000601860156101000a81548160ff0219169083151502179055503480156200017b57600080fd5b5060006200018e6200030060201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600c5460046000620002436200030060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550620002916200030060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600b54604051620002f29190620003c9565b60405180910390a362000526565b600033905090565b82805462000316906200042b565b90600052602060002090601f0160209004810192826200033a576000855562000386565b82601f106200035557805160ff191683800117855562000386565b8280016001018555821562000386579182015b828111156200038557825182559160200191906001019062000368565b5b50905062000395919062000399565b5090565b5b80821115620003b45760008160009055506001016200039a565b5090565b620003c38162000421565b82525050565b6000602082019050620003e06000830184620003b8565b92915050565b6000620003f38262000421565b9150620004008362000421565b92508282101562000416576200041562000499565b5b828203905092915050565b6000819050919050565b600060028204905060018216806200044457607f821691505b602082108114156200045b576200045a620004f7565b5b50919050565b60006200046e8262000421565b91506200047b8362000421565b9250826200048e576200048d620004c8565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b61566980620005366000396000f3fe60806040526004361061021e5760003560e01c80635342acb4116101235780638b4cee08116100ab578063c9567bf91161006f578063c9567bf91461081a578063dd62ed3e14610831578063e547be691461086e578063ea2f0b3714610897578063f2fde38b146108c057610225565b80638b4cee08146107215780638da5cb5b1461074a57806395d89b4114610775578063a457c2d7146107a0578063a9059cbb146107dd57610225565b806375f0a874116100f257806375f0a8741461064c578063790ca413146106775780638203f5fe146106a257806383ad7994146106b957806388f82020146106e457610225565b80635342acb4146105925780635d098b38146105cf57806370a08231146105f8578063715018a61461063557610225565b8063313ce567116101a6578063437823ec11610175578063437823ec146104af5780634549b039146104d857806345596e2e1461051557806349bd5a5e1461053e57806352390c021461056957610225565b8063313ce567146103f55780633685d4191461042057806339509351146104495780633bd5d1731461048657610225565b80631694505e116101ed5780631694505e146102fa57806318160ddd1461032557806323b872dd146103505780632b14ca561461038d5780632d838119146103b857610225565b806306fdde031461022a578063095ea7b3146102555780630f3a325f1461029257806313114a9d146102cf57610225565b3661022557005b600080fd5b34801561023657600080fd5b5061023f6108e9565b60405161024c9190614b2b565b60405180910390f35b34801561026157600080fd5b5061027c600480360381019061027791906146b5565b61097b565b6040516102899190614af5565b60405180910390f35b34801561029e57600080fd5b506102b960048036038101906102b491906145c8565b610999565b6040516102c69190614af5565b60405180910390f35b3480156102db57600080fd5b506102e46109ef565b6040516102f19190614d2d565b60405180910390f35b34801561030657600080fd5b5061030f6109f9565b60405161031c9190614b10565b60405180910390f35b34801561033157600080fd5b5061033a610a1f565b6040516103479190614d2d565b60405180910390f35b34801561035c57600080fd5b5061037760048036038101906103729190614662565b610a29565b6040516103849190614af5565b60405180910390f35b34801561039957600080fd5b506103a2610b02565b6040516103af9190614d2d565b60405180910390f35b3480156103c457600080fd5b506103df60048036038101906103da91906146f5565b610b08565b6040516103ec9190614d2d565b60405180910390f35b34801561040157600080fd5b5061040a610b76565b6040516104179190614dd2565b60405180910390f35b34801561042c57600080fd5b50610447600480360381019061044291906145c8565b610b8d565b005b34801561045557600080fd5b50610470600480360381019061046b91906146b5565b610edc565b60405161047d9190614af5565b60405180910390f35b34801561049257600080fd5b506104ad60048036038101906104a891906146f5565b610f8f565b005b3480156104bb57600080fd5b506104d660048036038101906104d191906145c8565b61110a565b005b3480156104e457600080fd5b506104ff60048036038101906104fa9190614722565b6111fa565b60405161050c9190614d2d565b60405180910390f35b34801561052157600080fd5b5061053c600480360381019061053791906146f5565b61127e565b005b34801561054a57600080fd5b5061055361131d565b6040516105609190614a96565b60405180910390f35b34801561057557600080fd5b50610590600480360381019061058b91906145c8565b611343565b005b34801561059e57600080fd5b506105b960048036038101906105b491906145c8565b6115f7565b6040516105c69190614af5565b60405180910390f35b3480156105db57600080fd5b506105f660048036038101906105f191906145c8565b61164d565b005b34801561060457600080fd5b5061061f600480360381019061061a91906145c8565b611726565b60405161062c9190614d2d565b60405180910390f35b34801561064157600080fd5b5061064a611811565b005b34801561065857600080fd5b50610661611964565b60405161066e9190614ab1565b60405180910390f35b34801561068357600080fd5b5061068c61198a565b6040516106999190614d2d565b60405180910390f35b3480156106ae57600080fd5b506106b7611990565b005b3480156106c557600080fd5b506106ce611d00565b6040516106db9190614d2d565b60405180910390f35b3480156106f057600080fd5b5061070b600480360381019061070691906145c8565b611d06565b6040516107189190614af5565b60405180910390f35b34801561072d57600080fd5b50610748600480360381019061074391906146f5565b611d5c565b005b34801561075657600080fd5b5061075f611dfb565b60405161076c9190614a96565b60405180910390f35b34801561078157600080fd5b5061078a611e24565b6040516107979190614b2b565b60405180910390f35b3480156107ac57600080fd5b506107c760048036038101906107c291906146b5565b611eb6565b6040516107d49190614af5565b60405180910390f35b3480156107e957600080fd5b5061080460048036038101906107ff91906146b5565b611f83565b6040516108119190614af5565b60405180910390f35b34801561082657600080fd5b5061082f611fa1565b005b34801561083d57600080fd5b5061085860048036038101906108539190614622565b61205a565b6040516108659190614d2d565b60405180910390f35b34801561087a57600080fd5b50610895600480360381019061089091906146f5565b6120e1565b005b3480156108a357600080fd5b506108be60048036038101906108b991906145c8565b612180565b005b3480156108cc57600080fd5b506108e760048036038101906108e291906145c8565b612270565b005b6060600e80546108f890615039565b80601f016020809104026020016040519081016040528092919081815260200182805461092490615039565b80156109715780601f1061094657610100808354040283529160200191610971565b820191906000526020600020905b81548152906001019060200180831161095457829003601f168201915b5050505050905090565b600061098f610988612432565b848461243a565b6001905092915050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600d54905090565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600b54905090565b6000610a36848484612605565b610af784610a42612432565b610af2856040518060600160405280602881526020016155e760289139600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610aa8612432565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d6f9092919063ffffffff16565b61243a565b600190509392505050565b60125481565b6000600c54821115610b4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4690614b6d565b60405180910390fd5b6000610b59612dd3565b9050610b6e8184612dfe90919063ffffffff16565b915050919050565b6000601060009054906101000a900460ff16905090565b610b95612432565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1990614c4d565b60405180910390fd5b600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610cae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca590614bed565b60405180910390fd5b60005b600a80549050811015610ed8578173ffffffffffffffffffffffffffffffffffffffff16600a8281548110610ce957610ce8615170565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610ec557600a6001600a80549050610d449190614f23565b81548110610d5557610d54615170565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600a8281548110610d9457610d93615170565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a805480610e8b57610e8a615141565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055610ed8565b8080610ed09061506b565b915050610cb1565b5050565b6000610f85610ee9612432565b84610f808560066000610efa612432565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e4890919063ffffffff16565b61243a565b6001905092915050565b6000610f99612432565b9050600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611028576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101f90614ced565b60405180910390fd5b600061103383612ea6565b5050505050905061108c81600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0290919063ffffffff16565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506110e481600c54612f0290919063ffffffff16565b600c819055506110ff83600d54612e4890919063ffffffff16565b600d81905550505050565b611112612432565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461119f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119690614c4d565b60405180910390fd5b6001600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600b54831115611241576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123890614c0d565b60405180910390fd5b8161126157600061125184612ea6565b5050505050905080915050611278565b600061126c84612ea6565b50505050915050809150505b92915050565b611286612432565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611313576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130a90614c4d565b60405180910390fd5b8060158190555050565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61134b612432565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113cf90614c4d565b60405180910390fd5b600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611465576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145c90614bed565b60405180910390fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611539576114f5600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b08565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611655612432565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d990614c4d565b60405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156117c157600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905061180c565b611809600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b08565b90505b919050565b611819612432565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189d90614c4d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60165481565b611998612432565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1c90614c4d565b60405180910390fd5b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611a8457600080fd5b505afa158015611a98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611abc91906145f5565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611b1e57600080fd5b505afa158015611b32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b5691906145f5565b6040518363ffffffff1660e01b8152600401611b73929190614acc565b602060405180830381600087803b158015611b8d57600080fd5b505af1158015611ba1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bc591906145f5565b601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160086000611c54611dfb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60115481565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611d64612432565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611df1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de890614c4d565b60405180910390fd5b8060128190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600f8054611e3390615039565b80601f0160208091040260200160405190810160405280929190818152602001828054611e5f90615039565b8015611eac5780601f10611e8157610100808354040283529160200191611eac565b820191906000526020600020905b815481529060010190602001808311611e8f57829003601f168201915b5050505050905090565b6000611f79611ec3612432565b84611f748560405180606001604052806025815260200161560f6025913960066000611eed612432565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d6f9092919063ffffffff16565b61243a565b6001905092915050565b6000611f97611f90612432565b8484612605565b6001905092915050565b611fa9612432565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612036576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202d90614c4d565b60405180910390fd5b6001601860156101000a81548160ff02191690831515021790555042601681905550565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6120e9612432565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612176576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216d90614c4d565b60405180910390fd5b8060118190555050565b612188612432565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612215576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220c90614c4d565b60405180910390fd5b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b612278612432565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612305576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122fc90614c4d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612375576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236c90614b8d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156124aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a190614cad565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561251a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251190614bad565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516125f89190614d2d565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612675576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266c90614c8d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156126e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126dc90614b4d565b60405180910390fd5b60008111612728576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271f90614c6d565b60405180910390fd5b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156127b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ac90614d0d565b60405180910390fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612842576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283990614d0d565b60405180910390fd5b61284a611dfb565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156128b85750612888611dfb565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561290d57601860159054906101000a900460ff1661290c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290390614ccd565b60405180910390fd5b5b6000601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806129b85750601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b8015612a625750600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612a605750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b155b15612a6c57600190505b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015612b175750601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612b6d5750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612bee578015612b8a5760115460138190555060006014819055505b601654421415612bed576001600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5b601860149054906101000a900460ff16158015612c175750601860159054906101000a900460ff165b8015612c705750601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15612d5d578015612c8d5760006013819055506012546014819055505b6000612c9830611726565b90506000811115612d5b57612cf56064612ce7601554612cd9601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611726565b612f4c90919063ffffffff16565b612dfe90919063ffffffff16565b811115612d5157612d4e6064612d40601554612d32601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611726565b612f4c90919063ffffffff16565b612dfe90919063ffffffff16565b90505b612d5a81612fc7565b5b505b612d6984848484613022565b50505050565b6000838311158290612db7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dae9190614b2b565b60405180910390fd5b5060008385612dc69190614f23565b9050809150509392505050565b6000806000612de061326b565b91509150612df78183612dfe90919063ffffffff16565b9250505090565b6000612e4083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061351e565b905092915050565b6000808284612e579190614e42565b905083811015612e9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e9390614bcd565b60405180910390fd5b8091505092915050565b6000806000806000806000806000612ebd8a613581565b9250925092506000806000612edb8d8686612ed6612dd3565b6135db565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b6000612f4483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612d6f565b905092915050565b600080831415612f5f5760009050612fc1565b60008284612f6d9190614ec9565b9050828482612f7c9190614e98565b14612fbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fb390614c2d565b60405180910390fd5b809150505b92915050565b6001601860146101000a81548160ff021916908315150217905550612feb81613664565b6000479050600081111561300357613002476138ef565b5b506000601860146101000a81548160ff02191690831515021790555050565b806130305761302f613982565b5b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156130d35750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156130e8576130e38484846139b3565b613265565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561318b5750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156131a05761319b848484613c13565b613264565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156132425750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561325757613252848484613e73565b613263565b613262848484614168565b5b5b5b50505050565b6000806000600c5490506000600b54905060005b600a805490508110156134e1578260046000600a84815481106132a5576132a4615170565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118061339357508160056000600a848154811061332b5761332a615170565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156133aa57600c54600b549450945050505061351a565b61343a60046000600a84815481106133c5576133c4615170565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484612f0290919063ffffffff16565b92506134cc60056000600a848154811061345757613456615170565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483612f0290919063ffffffff16565b915080806134d99061506b565b91505061327f565b506134f9600b54600c54612dfe90919063ffffffff16565b82101561351157600c54600b5493509350505061351a565b81819350935050505b9091565b60008083118290613565576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161355c9190614b2b565b60405180910390fd5b50600083856135749190614e98565b9050809150509392505050565b60008060008061359085614333565b9050600061359d86614364565b905060006135c6826135b8858a612f0290919063ffffffff16565b612f0290919063ffffffff16565b90508083839550955095505050509193909250565b6000806000806135f48589612f4c90919063ffffffff16565b9050600061360b8689612f4c90919063ffffffff16565b905060006136228789612f4c90919063ffffffff16565b9050600061364b8261363d8587612f0290919063ffffffff16565b612f0290919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000600267ffffffffffffffff8111156136815761368061519f565b5b6040519080825280602002602001820160405280156136af5781602001602082028036833780820191505090505b50905030816000815181106136c7576136c6615170565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561376957600080fd5b505afa15801561377d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137a191906145f5565b816001815181106137b5576137b4615170565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061381c30601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461243a565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613880959493929190614d78565b600060405180830381600087803b15801561389a57600080fd5b505af11580156138ae573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a782826040516138e3929190614d48565b60405180910390a15050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc613953600a61394560125486612f4c90919063ffffffff16565b612dfe90919063ffffffff16565b9081150290604051600060405180830381858888f1935050505015801561397e573d6000803e3d6000fd5b5050565b600060135414801561399657506000601454145b156139a0576139b1565b600060138190555060006014819055505b565b6000806000806000806139c587612ea6565b955095509550955095509550613a2387600560008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0290919063ffffffff16565b600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613ab886600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0290919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613b4d85600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e4890919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613b9981614395565b613ba3848361453a565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613c009190614d2d565b60405180910390a3505050505050505050565b600080600080600080613c2587612ea6565b955095509550955095509550613c8386600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0290919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d1883600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e4890919063ffffffff16565b600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613dad85600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e4890919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613df981614395565b613e03848361453a565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613e609190614d2d565b60405180910390a3505050505050505050565b600080600080600080613e8587612ea6565b955095509550955095509550613ee387600560008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0290919063ffffffff16565b600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f7886600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0290919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061400d83600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e4890919063ffffffff16565b600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506140a285600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e4890919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506140ee81614395565b6140f8848361453a565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516141559190614d2d565b60405180910390a3505050505050505050565b60008060008060008061417a87612ea6565b9550955095509550955095506141d886600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0290919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061426d85600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e4890919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506142b981614395565b6142c3848361453a565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516143209190614d2d565b60405180910390a3505050505050505050565b600061435d606461434f60135485612f4c90919063ffffffff16565b612dfe90919063ffffffff16565b9050919050565b600061438e606461438060145485612f4c90919063ffffffff16565b612dfe90919063ffffffff16565b9050919050565b600061439f612dd3565b905060006143b68284612f4c90919063ffffffff16565b905061440a81600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e4890919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615614535576144f183600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e4890919063ffffffff16565b600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b61454f82600c54612f0290919063ffffffff16565b600c8190555061456a81600d54612e4890919063ffffffff16565b600d819055505050565b600081359050614583816155a1565b92915050565b600081519050614598816155a1565b92915050565b6000813590506145ad816155b8565b92915050565b6000813590506145c2816155cf565b92915050565b6000602082840312156145de576145dd6151ce565b5b60006145ec84828501614574565b91505092915050565b60006020828403121561460b5761460a6151ce565b5b600061461984828501614589565b91505092915050565b60008060408385031215614639576146386151ce565b5b600061464785828601614574565b925050602061465885828601614574565b9150509250929050565b60008060006060848603121561467b5761467a6151ce565b5b600061468986828701614574565b935050602061469a86828701614574565b92505060406146ab868287016145b3565b9150509250925092565b600080604083850312156146cc576146cb6151ce565b5b60006146da85828601614574565b92505060206146eb858286016145b3565b9150509250929050565b60006020828403121561470b5761470a6151ce565b5b6000614719848285016145b3565b91505092915050565b60008060408385031215614739576147386151ce565b5b6000614747858286016145b3565b92505060206147588582860161459e565b9150509250929050565b600061476e8383614789565b60208301905092915050565b61478381614f69565b82525050565b61479281614f57565b82525050565b6147a181614f57565b82525050565b60006147b282614dfd565b6147bc8185614e20565b93506147c783614ded565b8060005b838110156147f85781516147df8882614762565b97506147ea83614e13565b9250506001810190506147cb565b5085935050505092915050565b61480e81614f7b565b82525050565b61481d81614fbe565b82525050565b61482c81614fd0565b82525050565b600061483d82614e08565b6148478185614e31565b9350614857818560208601615006565b614860816151d3565b840191505092915050565b6000614878602383614e31565b9150614883826151e4565b604082019050919050565b600061489b602a83614e31565b91506148a682615233565b604082019050919050565b60006148be602683614e31565b91506148c982615282565b604082019050919050565b60006148e1602283614e31565b91506148ec826152d1565b604082019050919050565b6000614904601b83614e31565b915061490f82615320565b602082019050919050565b6000614927601b83614e31565b915061493282615349565b602082019050919050565b600061494a601f83614e31565b915061495582615372565b602082019050919050565b600061496d602183614e31565b91506149788261539b565b604082019050919050565b6000614990602083614e31565b915061499b826153ea565b602082019050919050565b60006149b3602983614e31565b91506149be82615413565b604082019050919050565b60006149d6602583614e31565b91506149e182615462565b604082019050919050565b60006149f9602483614e31565b9150614a04826154b1565b604082019050919050565b6000614a1c601883614e31565b9150614a2782615500565b602082019050919050565b6000614a3f602c83614e31565b9150614a4a82615529565b604082019050919050565b6000614a62601783614e31565b9150614a6d82615578565b602082019050919050565b614a8181614fa7565b82525050565b614a9081614fb1565b82525050565b6000602082019050614aab6000830184614798565b92915050565b6000602082019050614ac6600083018461477a565b92915050565b6000604082019050614ae16000830185614798565b614aee6020830184614798565b9392505050565b6000602082019050614b0a6000830184614805565b92915050565b6000602082019050614b256000830184614814565b92915050565b60006020820190508181036000830152614b458184614832565b905092915050565b60006020820190508181036000830152614b668161486b565b9050919050565b60006020820190508181036000830152614b868161488e565b9050919050565b60006020820190508181036000830152614ba6816148b1565b9050919050565b60006020820190508181036000830152614bc6816148d4565b9050919050565b60006020820190508181036000830152614be6816148f7565b9050919050565b60006020820190508181036000830152614c068161491a565b9050919050565b60006020820190508181036000830152614c268161493d565b9050919050565b60006020820190508181036000830152614c4681614960565b9050919050565b60006020820190508181036000830152614c6681614983565b9050919050565b60006020820190508181036000830152614c86816149a6565b9050919050565b60006020820190508181036000830152614ca6816149c9565b9050919050565b60006020820190508181036000830152614cc6816149ec565b9050919050565b60006020820190508181036000830152614ce681614a0f565b9050919050565b60006020820190508181036000830152614d0681614a32565b9050919050565b60006020820190508181036000830152614d2681614a55565b9050919050565b6000602082019050614d426000830184614a78565b92915050565b6000604082019050614d5d6000830185614a78565b8181036020830152614d6f81846147a7565b90509392505050565b600060a082019050614d8d6000830188614a78565b614d9a6020830187614823565b8181036040830152614dac81866147a7565b9050614dbb6060830185614798565b614dc86080830184614a78565b9695505050505050565b6000602082019050614de76000830184614a87565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000614e4d82614fa7565b9150614e5883614fa7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614e8d57614e8c6150b4565b5b828201905092915050565b6000614ea382614fa7565b9150614eae83614fa7565b925082614ebe57614ebd6150e3565b5b828204905092915050565b6000614ed482614fa7565b9150614edf83614fa7565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614f1857614f176150b4565b5b828202905092915050565b6000614f2e82614fa7565b9150614f3983614fa7565b925082821015614f4c57614f4b6150b4565b5b828203905092915050565b6000614f6282614f87565b9050919050565b6000614f7482614f87565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000614fc982614fe2565b9050919050565b6000614fdb82614fa7565b9050919050565b6000614fed82614ff4565b9050919050565b6000614fff82614f87565b9050919050565b60005b83811015615024578082015181840152602081019050615009565b83811115615033576000848401525b50505050565b6000600282049050600182168061505157607f821691505b6020821081141561506557615064615112565b5b50919050565b600061507682614fa7565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156150a9576150a86150b4565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f54726164696e67206e6f742079657420656e61626c65642e0000000000000000600082015250565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b7f596f752068617665206e6f20706f776572206865726521000000000000000000600082015250565b6155aa81614f57565b81146155b557600080fd5b50565b6155c181614f7b565b81146155cc57600080fd5b50565b6155d881614fa7565b81146155e357600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220d74ba2fa05e6f3c9228b06881a4fe115f1367b91e2acc4d77c3de6455360818564736f6c63430008070033

Deployed Bytecode

0x60806040526004361061021e5760003560e01c80635342acb4116101235780638b4cee08116100ab578063c9567bf91161006f578063c9567bf91461081a578063dd62ed3e14610831578063e547be691461086e578063ea2f0b3714610897578063f2fde38b146108c057610225565b80638b4cee08146107215780638da5cb5b1461074a57806395d89b4114610775578063a457c2d7146107a0578063a9059cbb146107dd57610225565b806375f0a874116100f257806375f0a8741461064c578063790ca413146106775780638203f5fe146106a257806383ad7994146106b957806388f82020146106e457610225565b80635342acb4146105925780635d098b38146105cf57806370a08231146105f8578063715018a61461063557610225565b8063313ce567116101a6578063437823ec11610175578063437823ec146104af5780634549b039146104d857806345596e2e1461051557806349bd5a5e1461053e57806352390c021461056957610225565b8063313ce567146103f55780633685d4191461042057806339509351146104495780633bd5d1731461048657610225565b80631694505e116101ed5780631694505e146102fa57806318160ddd1461032557806323b872dd146103505780632b14ca561461038d5780632d838119146103b857610225565b806306fdde031461022a578063095ea7b3146102555780630f3a325f1461029257806313114a9d146102cf57610225565b3661022557005b600080fd5b34801561023657600080fd5b5061023f6108e9565b60405161024c9190614b2b565b60405180910390f35b34801561026157600080fd5b5061027c600480360381019061027791906146b5565b61097b565b6040516102899190614af5565b60405180910390f35b34801561029e57600080fd5b506102b960048036038101906102b491906145c8565b610999565b6040516102c69190614af5565b60405180910390f35b3480156102db57600080fd5b506102e46109ef565b6040516102f19190614d2d565b60405180910390f35b34801561030657600080fd5b5061030f6109f9565b60405161031c9190614b10565b60405180910390f35b34801561033157600080fd5b5061033a610a1f565b6040516103479190614d2d565b60405180910390f35b34801561035c57600080fd5b5061037760048036038101906103729190614662565b610a29565b6040516103849190614af5565b60405180910390f35b34801561039957600080fd5b506103a2610b02565b6040516103af9190614d2d565b60405180910390f35b3480156103c457600080fd5b506103df60048036038101906103da91906146f5565b610b08565b6040516103ec9190614d2d565b60405180910390f35b34801561040157600080fd5b5061040a610b76565b6040516104179190614dd2565b60405180910390f35b34801561042c57600080fd5b50610447600480360381019061044291906145c8565b610b8d565b005b34801561045557600080fd5b50610470600480360381019061046b91906146b5565b610edc565b60405161047d9190614af5565b60405180910390f35b34801561049257600080fd5b506104ad60048036038101906104a891906146f5565b610f8f565b005b3480156104bb57600080fd5b506104d660048036038101906104d191906145c8565b61110a565b005b3480156104e457600080fd5b506104ff60048036038101906104fa9190614722565b6111fa565b60405161050c9190614d2d565b60405180910390f35b34801561052157600080fd5b5061053c600480360381019061053791906146f5565b61127e565b005b34801561054a57600080fd5b5061055361131d565b6040516105609190614a96565b60405180910390f35b34801561057557600080fd5b50610590600480360381019061058b91906145c8565b611343565b005b34801561059e57600080fd5b506105b960048036038101906105b491906145c8565b6115f7565b6040516105c69190614af5565b60405180910390f35b3480156105db57600080fd5b506105f660048036038101906105f191906145c8565b61164d565b005b34801561060457600080fd5b5061061f600480360381019061061a91906145c8565b611726565b60405161062c9190614d2d565b60405180910390f35b34801561064157600080fd5b5061064a611811565b005b34801561065857600080fd5b50610661611964565b60405161066e9190614ab1565b60405180910390f35b34801561068357600080fd5b5061068c61198a565b6040516106999190614d2d565b60405180910390f35b3480156106ae57600080fd5b506106b7611990565b005b3480156106c557600080fd5b506106ce611d00565b6040516106db9190614d2d565b60405180910390f35b3480156106f057600080fd5b5061070b600480360381019061070691906145c8565b611d06565b6040516107189190614af5565b60405180910390f35b34801561072d57600080fd5b50610748600480360381019061074391906146f5565b611d5c565b005b34801561075657600080fd5b5061075f611dfb565b60405161076c9190614a96565b60405180910390f35b34801561078157600080fd5b5061078a611e24565b6040516107979190614b2b565b60405180910390f35b3480156107ac57600080fd5b506107c760048036038101906107c291906146b5565b611eb6565b6040516107d49190614af5565b60405180910390f35b3480156107e957600080fd5b5061080460048036038101906107ff91906146b5565b611f83565b6040516108119190614af5565b60405180910390f35b34801561082657600080fd5b5061082f611fa1565b005b34801561083d57600080fd5b5061085860048036038101906108539190614622565b61205a565b6040516108659190614d2d565b60405180910390f35b34801561087a57600080fd5b50610895600480360381019061089091906146f5565b6120e1565b005b3480156108a357600080fd5b506108be60048036038101906108b991906145c8565b612180565b005b3480156108cc57600080fd5b506108e760048036038101906108e291906145c8565b612270565b005b6060600e80546108f890615039565b80601f016020809104026020016040519081016040528092919081815260200182805461092490615039565b80156109715780601f1061094657610100808354040283529160200191610971565b820191906000526020600020905b81548152906001019060200180831161095457829003601f168201915b5050505050905090565b600061098f610988612432565b848461243a565b6001905092915050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600d54905090565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600b54905090565b6000610a36848484612605565b610af784610a42612432565b610af2856040518060600160405280602881526020016155e760289139600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610aa8612432565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d6f9092919063ffffffff16565b61243a565b600190509392505050565b60125481565b6000600c54821115610b4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4690614b6d565b60405180910390fd5b6000610b59612dd3565b9050610b6e8184612dfe90919063ffffffff16565b915050919050565b6000601060009054906101000a900460ff16905090565b610b95612432565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1990614c4d565b60405180910390fd5b600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610cae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca590614bed565b60405180910390fd5b60005b600a80549050811015610ed8578173ffffffffffffffffffffffffffffffffffffffff16600a8281548110610ce957610ce8615170565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610ec557600a6001600a80549050610d449190614f23565b81548110610d5557610d54615170565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600a8281548110610d9457610d93615170565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a805480610e8b57610e8a615141565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055610ed8565b8080610ed09061506b565b915050610cb1565b5050565b6000610f85610ee9612432565b84610f808560066000610efa612432565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e4890919063ffffffff16565b61243a565b6001905092915050565b6000610f99612432565b9050600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611028576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101f90614ced565b60405180910390fd5b600061103383612ea6565b5050505050905061108c81600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0290919063ffffffff16565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506110e481600c54612f0290919063ffffffff16565b600c819055506110ff83600d54612e4890919063ffffffff16565b600d81905550505050565b611112612432565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461119f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119690614c4d565b60405180910390fd5b6001600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600b54831115611241576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123890614c0d565b60405180910390fd5b8161126157600061125184612ea6565b5050505050905080915050611278565b600061126c84612ea6565b50505050915050809150505b92915050565b611286612432565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611313576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130a90614c4d565b60405180910390fd5b8060158190555050565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61134b612432565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113cf90614c4d565b60405180910390fd5b600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611465576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145c90614bed565b60405180910390fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611539576114f5600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b08565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611655612432565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d990614c4d565b60405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156117c157600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905061180c565b611809600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b08565b90505b919050565b611819612432565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189d90614c4d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60165481565b611998612432565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1c90614c4d565b60405180910390fd5b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611a8457600080fd5b505afa158015611a98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611abc91906145f5565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611b1e57600080fd5b505afa158015611b32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b5691906145f5565b6040518363ffffffff1660e01b8152600401611b73929190614acc565b602060405180830381600087803b158015611b8d57600080fd5b505af1158015611ba1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bc591906145f5565b601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160086000611c54611dfb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60115481565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611d64612432565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611df1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de890614c4d565b60405180910390fd5b8060128190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600f8054611e3390615039565b80601f0160208091040260200160405190810160405280929190818152602001828054611e5f90615039565b8015611eac5780601f10611e8157610100808354040283529160200191611eac565b820191906000526020600020905b815481529060010190602001808311611e8f57829003601f168201915b5050505050905090565b6000611f79611ec3612432565b84611f748560405180606001604052806025815260200161560f6025913960066000611eed612432565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d6f9092919063ffffffff16565b61243a565b6001905092915050565b6000611f97611f90612432565b8484612605565b6001905092915050565b611fa9612432565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612036576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202d90614c4d565b60405180910390fd5b6001601860156101000a81548160ff02191690831515021790555042601681905550565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6120e9612432565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612176576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216d90614c4d565b60405180910390fd5b8060118190555050565b612188612432565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612215576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220c90614c4d565b60405180910390fd5b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b612278612432565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612305576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122fc90614c4d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612375576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236c90614b8d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156124aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a190614cad565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561251a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251190614bad565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516125f89190614d2d565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612675576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266c90614c8d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156126e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126dc90614b4d565b60405180910390fd5b60008111612728576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271f90614c6d565b60405180910390fd5b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156127b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ac90614d0d565b60405180910390fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612842576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283990614d0d565b60405180910390fd5b61284a611dfb565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156128b85750612888611dfb565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561290d57601860159054906101000a900460ff1661290c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290390614ccd565b60405180910390fd5b5b6000601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806129b85750601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b8015612a625750600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612a605750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b155b15612a6c57600190505b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015612b175750601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612b6d5750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612bee578015612b8a5760115460138190555060006014819055505b601654421415612bed576001600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5b601860149054906101000a900460ff16158015612c175750601860159054906101000a900460ff165b8015612c705750601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15612d5d578015612c8d5760006013819055506012546014819055505b6000612c9830611726565b90506000811115612d5b57612cf56064612ce7601554612cd9601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611726565b612f4c90919063ffffffff16565b612dfe90919063ffffffff16565b811115612d5157612d4e6064612d40601554612d32601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611726565b612f4c90919063ffffffff16565b612dfe90919063ffffffff16565b90505b612d5a81612fc7565b5b505b612d6984848484613022565b50505050565b6000838311158290612db7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dae9190614b2b565b60405180910390fd5b5060008385612dc69190614f23565b9050809150509392505050565b6000806000612de061326b565b91509150612df78183612dfe90919063ffffffff16565b9250505090565b6000612e4083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061351e565b905092915050565b6000808284612e579190614e42565b905083811015612e9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e9390614bcd565b60405180910390fd5b8091505092915050565b6000806000806000806000806000612ebd8a613581565b9250925092506000806000612edb8d8686612ed6612dd3565b6135db565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b6000612f4483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612d6f565b905092915050565b600080831415612f5f5760009050612fc1565b60008284612f6d9190614ec9565b9050828482612f7c9190614e98565b14612fbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fb390614c2d565b60405180910390fd5b809150505b92915050565b6001601860146101000a81548160ff021916908315150217905550612feb81613664565b6000479050600081111561300357613002476138ef565b5b506000601860146101000a81548160ff02191690831515021790555050565b806130305761302f613982565b5b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156130d35750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156130e8576130e38484846139b3565b613265565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561318b5750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156131a05761319b848484613c13565b613264565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156132425750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561325757613252848484613e73565b613263565b613262848484614168565b5b5b5b50505050565b6000806000600c5490506000600b54905060005b600a805490508110156134e1578260046000600a84815481106132a5576132a4615170565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118061339357508160056000600a848154811061332b5761332a615170565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156133aa57600c54600b549450945050505061351a565b61343a60046000600a84815481106133c5576133c4615170565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484612f0290919063ffffffff16565b92506134cc60056000600a848154811061345757613456615170565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483612f0290919063ffffffff16565b915080806134d99061506b565b91505061327f565b506134f9600b54600c54612dfe90919063ffffffff16565b82101561351157600c54600b5493509350505061351a565b81819350935050505b9091565b60008083118290613565576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161355c9190614b2b565b60405180910390fd5b50600083856135749190614e98565b9050809150509392505050565b60008060008061359085614333565b9050600061359d86614364565b905060006135c6826135b8858a612f0290919063ffffffff16565b612f0290919063ffffffff16565b90508083839550955095505050509193909250565b6000806000806135f48589612f4c90919063ffffffff16565b9050600061360b8689612f4c90919063ffffffff16565b905060006136228789612f4c90919063ffffffff16565b9050600061364b8261363d8587612f0290919063ffffffff16565b612f0290919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000600267ffffffffffffffff8111156136815761368061519f565b5b6040519080825280602002602001820160405280156136af5781602001602082028036833780820191505090505b50905030816000815181106136c7576136c6615170565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561376957600080fd5b505afa15801561377d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137a191906145f5565b816001815181106137b5576137b4615170565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061381c30601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461243a565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613880959493929190614d78565b600060405180830381600087803b15801561389a57600080fd5b505af11580156138ae573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a782826040516138e3929190614d48565b60405180910390a15050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc613953600a61394560125486612f4c90919063ffffffff16565b612dfe90919063ffffffff16565b9081150290604051600060405180830381858888f1935050505015801561397e573d6000803e3d6000fd5b5050565b600060135414801561399657506000601454145b156139a0576139b1565b600060138190555060006014819055505b565b6000806000806000806139c587612ea6565b955095509550955095509550613a2387600560008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0290919063ffffffff16565b600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613ab886600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0290919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613b4d85600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e4890919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613b9981614395565b613ba3848361453a565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613c009190614d2d565b60405180910390a3505050505050505050565b600080600080600080613c2587612ea6565b955095509550955095509550613c8386600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0290919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d1883600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e4890919063ffffffff16565b600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613dad85600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e4890919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613df981614395565b613e03848361453a565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613e609190614d2d565b60405180910390a3505050505050505050565b600080600080600080613e8587612ea6565b955095509550955095509550613ee387600560008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0290919063ffffffff16565b600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f7886600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0290919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061400d83600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e4890919063ffffffff16565b600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506140a285600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e4890919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506140ee81614395565b6140f8848361453a565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516141559190614d2d565b60405180910390a3505050505050505050565b60008060008060008061417a87612ea6565b9550955095509550955095506141d886600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0290919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061426d85600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e4890919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506142b981614395565b6142c3848361453a565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516143209190614d2d565b60405180910390a3505050505050505050565b600061435d606461434f60135485612f4c90919063ffffffff16565b612dfe90919063ffffffff16565b9050919050565b600061438e606461438060145485612f4c90919063ffffffff16565b612dfe90919063ffffffff16565b9050919050565b600061439f612dd3565b905060006143b68284612f4c90919063ffffffff16565b905061440a81600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e4890919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615614535576144f183600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e4890919063ffffffff16565b600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b61454f82600c54612f0290919063ffffffff16565b600c8190555061456a81600d54612e4890919063ffffffff16565b600d819055505050565b600081359050614583816155a1565b92915050565b600081519050614598816155a1565b92915050565b6000813590506145ad816155b8565b92915050565b6000813590506145c2816155cf565b92915050565b6000602082840312156145de576145dd6151ce565b5b60006145ec84828501614574565b91505092915050565b60006020828403121561460b5761460a6151ce565b5b600061461984828501614589565b91505092915050565b60008060408385031215614639576146386151ce565b5b600061464785828601614574565b925050602061465885828601614574565b9150509250929050565b60008060006060848603121561467b5761467a6151ce565b5b600061468986828701614574565b935050602061469a86828701614574565b92505060406146ab868287016145b3565b9150509250925092565b600080604083850312156146cc576146cb6151ce565b5b60006146da85828601614574565b92505060206146eb858286016145b3565b9150509250929050565b60006020828403121561470b5761470a6151ce565b5b6000614719848285016145b3565b91505092915050565b60008060408385031215614739576147386151ce565b5b6000614747858286016145b3565b92505060206147588582860161459e565b9150509250929050565b600061476e8383614789565b60208301905092915050565b61478381614f69565b82525050565b61479281614f57565b82525050565b6147a181614f57565b82525050565b60006147b282614dfd565b6147bc8185614e20565b93506147c783614ded565b8060005b838110156147f85781516147df8882614762565b97506147ea83614e13565b9250506001810190506147cb565b5085935050505092915050565b61480e81614f7b565b82525050565b61481d81614fbe565b82525050565b61482c81614fd0565b82525050565b600061483d82614e08565b6148478185614e31565b9350614857818560208601615006565b614860816151d3565b840191505092915050565b6000614878602383614e31565b9150614883826151e4565b604082019050919050565b600061489b602a83614e31565b91506148a682615233565b604082019050919050565b60006148be602683614e31565b91506148c982615282565b604082019050919050565b60006148e1602283614e31565b91506148ec826152d1565b604082019050919050565b6000614904601b83614e31565b915061490f82615320565b602082019050919050565b6000614927601b83614e31565b915061493282615349565b602082019050919050565b600061494a601f83614e31565b915061495582615372565b602082019050919050565b600061496d602183614e31565b91506149788261539b565b604082019050919050565b6000614990602083614e31565b915061499b826153ea565b602082019050919050565b60006149b3602983614e31565b91506149be82615413565b604082019050919050565b60006149d6602583614e31565b91506149e182615462565b604082019050919050565b60006149f9602483614e31565b9150614a04826154b1565b604082019050919050565b6000614a1c601883614e31565b9150614a2782615500565b602082019050919050565b6000614a3f602c83614e31565b9150614a4a82615529565b604082019050919050565b6000614a62601783614e31565b9150614a6d82615578565b602082019050919050565b614a8181614fa7565b82525050565b614a9081614fb1565b82525050565b6000602082019050614aab6000830184614798565b92915050565b6000602082019050614ac6600083018461477a565b92915050565b6000604082019050614ae16000830185614798565b614aee6020830184614798565b9392505050565b6000602082019050614b0a6000830184614805565b92915050565b6000602082019050614b256000830184614814565b92915050565b60006020820190508181036000830152614b458184614832565b905092915050565b60006020820190508181036000830152614b668161486b565b9050919050565b60006020820190508181036000830152614b868161488e565b9050919050565b60006020820190508181036000830152614ba6816148b1565b9050919050565b60006020820190508181036000830152614bc6816148d4565b9050919050565b60006020820190508181036000830152614be6816148f7565b9050919050565b60006020820190508181036000830152614c068161491a565b9050919050565b60006020820190508181036000830152614c268161493d565b9050919050565b60006020820190508181036000830152614c4681614960565b9050919050565b60006020820190508181036000830152614c6681614983565b9050919050565b60006020820190508181036000830152614c86816149a6565b9050919050565b60006020820190508181036000830152614ca6816149c9565b9050919050565b60006020820190508181036000830152614cc6816149ec565b9050919050565b60006020820190508181036000830152614ce681614a0f565b9050919050565b60006020820190508181036000830152614d0681614a32565b9050919050565b60006020820190508181036000830152614d2681614a55565b9050919050565b6000602082019050614d426000830184614a78565b92915050565b6000604082019050614d5d6000830185614a78565b8181036020830152614d6f81846147a7565b90509392505050565b600060a082019050614d8d6000830188614a78565b614d9a6020830187614823565b8181036040830152614dac81866147a7565b9050614dbb6060830185614798565b614dc86080830184614a78565b9695505050505050565b6000602082019050614de76000830184614a87565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000614e4d82614fa7565b9150614e5883614fa7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614e8d57614e8c6150b4565b5b828201905092915050565b6000614ea382614fa7565b9150614eae83614fa7565b925082614ebe57614ebd6150e3565b5b828204905092915050565b6000614ed482614fa7565b9150614edf83614fa7565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614f1857614f176150b4565b5b828202905092915050565b6000614f2e82614fa7565b9150614f3983614fa7565b925082821015614f4c57614f4b6150b4565b5b828203905092915050565b6000614f6282614f87565b9050919050565b6000614f7482614f87565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000614fc982614fe2565b9050919050565b6000614fdb82614fa7565b9050919050565b6000614fed82614ff4565b9050919050565b6000614fff82614f87565b9050919050565b60005b83811015615024578082015181840152602081019050615009565b83811115615033576000848401525b50505050565b6000600282049050600182168061505157607f821691505b6020821081141561506557615064615112565b5b50919050565b600061507682614fa7565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156150a9576150a86150b4565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f54726164696e67206e6f742079657420656e61626c65642e0000000000000000600082015250565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b7f596f752068617665206e6f20706f776572206865726521000000000000000000600082015250565b6155aa81614f57565b81146155b557600080fd5b50565b6155c181614f7b565b81146155cc57600080fd5b50565b6155d881614fa7565b81146155e357600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220d74ba2fa05e6f3c9228b06881a4fe115f1367b91e2acc4d77c3de6455360818564736f6c63430008070033

Deployed Bytecode Sourcemap

14550:17770:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17026:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17938:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31802:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19059:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15856:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17303:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18107:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15565:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19991:253;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17212:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20595:479;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18428:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19158:377;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31271:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19547:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31920:90;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15904:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20252:335;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31136:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31516:137;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17406:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6179:148;;;;;;;;;;;;;:::i;:::-;;14674:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15822:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16434:452;;;;;;;;;;;;;:::i;:::-;;15497:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18931:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32133:87;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5954:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17117:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18654:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17612:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16898:120;;;;;;;;;;;;;:::i;:::-;;17787:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32022:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31394:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6335:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17026:83;17063:13;17096:5;17089:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17026:83;:::o;17938:161::-;18013:4;18030:39;18039:12;:10;:12::i;:::-;18053:7;18062:6;18030:8;:39::i;:::-;18087:4;18080:11;;17938:161;;;;:::o;31802:106::-;31858:4;31882:9;:18;31892:7;31882:18;;;;;;;;;;;;;;;;;;;;;;;;;31875:25;;31802:106;;;:::o;19059:87::-;19101:7;19128:10;;19121:17;;19059:87;:::o;15856:41::-;;;;;;;;;;;;;:::o;17303:95::-;17356:7;17383;;17376:14;;17303:95;:::o;18107:313::-;18205:4;18222:36;18232:6;18240:9;18251:6;18222:9;:36::i;:::-;18269:121;18278:6;18286:12;:10;:12::i;:::-;18300:89;18338:6;18300:89;;;;;;;;;;;;;;;;;:11;:19;18312:6;18300:19;;;;;;;;;;;;;;;:33;18320:12;:10;:12::i;:::-;18300:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;18269:8;:121::i;:::-;18408:4;18401:11;;18107:313;;;;;:::o;15565:26::-;;;;:::o;19991:253::-;20057:7;20096;;20085;:18;;20077:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;20161:19;20184:10;:8;:10::i;:::-;20161:33;;20212:24;20224:11;20212:7;:11;;:24;;;;:::i;:::-;20205:31;;;19991:253;;;:::o;17212:83::-;17253:5;17278:9;;;;;;;;;;;17271:16;;17212:83;:::o;20595:479::-;6098:12;:10;:12::i;:::-;6088:22;;:6;;;;;;;;;;:22;;;6080:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20677:11:::1;:20;20689:7;20677:20;;;;;;;;;;;;;;;;;;;;;;;;;20669:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;20745:9;20740:327;20764:9;:16;;;;20760:1;:20;20740:327;;;20822:7;20806:23;;:9;20816:1;20806:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:23;;;20802:254;;;20865:9;20894:1;20875:9;:16;;;;:20;;;;:::i;:::-;20865:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20850:9;20860:1;20850:12;;;;;;;;:::i;:::-;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;20934:1;20915:7;:16;20923:7;20915:16;;;;;;;;;;;;;;;:20;;;;20977:5;20954:11;:20;20966:7;20954:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;21001:9;:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;21035:5;;20802:254;20782:3;;;;;:::i;:::-;;;;20740:327;;;;20595:479:::0;:::o;18428:218::-;18516:4;18533:83;18542:12;:10;:12::i;:::-;18556:7;18565:50;18604:10;18565:11;:25;18577:12;:10;:12::i;:::-;18565:25;;;;;;;;;;;;;;;:34;18591:7;18565:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;18533:8;:83::i;:::-;18634:4;18627:11;;18428:218;;;;:::o;19158:377::-;19210:14;19227:12;:10;:12::i;:::-;19210:29;;19259:11;:19;19271:6;19259:19;;;;;;;;;;;;;;;;;;;;;;;;;19258:20;19250:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;19339:15;19363:19;19374:7;19363:10;:19::i;:::-;19338:44;;;;;;;19411:28;19431:7;19411;:15;19419:6;19411:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;19393:7;:15;19401:6;19393:15;;;;;;;;;;;;;;;:46;;;;19460:20;19472:7;19460;;:11;;:20;;;;:::i;:::-;19450:7;:30;;;;19504:23;19519:7;19504:10;;:14;;:23;;;;:::i;:::-;19491:10;:36;;;;19199:336;;19158:377;:::o;31271:111::-;6098:12;:10;:12::i;:::-;6088:22;;:6;;;;;;;;;;:22;;;6080:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31370:4:::1;31340:18;:27;31359:7;31340:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;31271:111:::0;:::o;19547:436::-;19637:7;19676;;19665;:18;;19657:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;19735:17;19730:246;;19770:15;19794:19;19805:7;19794:10;:19::i;:::-;19769:44;;;;;;;19835:7;19828:14;;;;;19730:246;19877:23;19908:19;19919:7;19908:10;:19::i;:::-;19875:52;;;;;;;19949:15;19942:22;;;19547:436;;;;;:::o;31920:90::-;6098:12;:10;:12::i;:::-;6088:22;;:6;;;;;;;;;;:22;;;6080:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31998:4:::1;31987:8;:15;;;;31920:90:::0;:::o;15904:28::-;;;;;;;;;;;;;:::o;20252:335::-;6098:12;:10;:12::i;:::-;6088:22;;:6;;;;;;;;;;:22;;;6080:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20337:11:::1;:20;20349:7;20337:20;;;;;;;;;;;;;;;;;;;;;;;;;20336:21;20328:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;20422:1;20403:7;:16;20411:7;20403:16;;;;;;;;;;;;;;;;:20;20400:108;;;20459:37;20479:7;:16;20487:7;20479:16;;;;;;;;;;;;;;;;20459:19;:37::i;:::-;20440:7;:16;20448:7;20440:16;;;;;;;;;;;;;;;:56;;;;20400:108;20541:4;20518:11;:20;20530:7;20518:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;20556:9;20571:7;20556:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20252:335:::0;:::o;31136:123::-;31200:4;31224:18;:27;31243:7;31224:27;;;;;;;;;;;;;;;;;;;;;;;;;31217:34;;31136:123;;;:::o;31516:137::-;6098:12;:10;:12::i;:::-;6088:22;;:6;;;;;;;;;;:22;;;6080:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31628:16:::1;31602:15;;:43;;;;;;;;;;;;;;;;;;31516:137:::0;:::o;17406:198::-;17472:7;17496:11;:20;17508:7;17496:20;;;;;;;;;;;;;;;;;;;;;;;;;17492:49;;;17525:7;:16;17533:7;17525:16;;;;;;;;;;;;;;;;17518:23;;;;17492:49;17559:37;17579:7;:16;17587:7;17579:16;;;;;;;;;;;;;;;;17559:19;:37::i;:::-;17552:44;;17406:198;;;;:::o;6179:148::-;6098:12;:10;:12::i;:::-;6088:22;;:6;;;;;;;;;;:22;;;6080:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6286:1:::1;6249:40;;6270:6;::::0;::::1;;;;;;;;6249:40;;;;;;;;;;;;6317:1;6300:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;6179:148::o:0;14674:92::-;;;;;;;;;;;;;:::o;15822:25::-;;;;:::o;16434:452::-;6098:12;:10;:12::i;:::-;6088:22;;:6;;;;;;;;;;:22;;;6080:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16490:35:::1;16547:42;16490:100;;16635:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16617:66;;;16692:4;16699:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16617:106;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16601:13;;:122;;;;;;;;;;;;;;;;;;16754:16;16736:15;;:34;;;;;;;;;;;;;;;;;;16813:4;16783:18;:27;16802:7;:5;:7::i;:::-;16783:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;16864:4;16828:18;:33;16855:4;16828:33;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;16479:407;16434:452::o:0;15497:32::-;;;;:::o;18931:120::-;18999:4;19023:11;:20;19035:7;19023:20;;;;;;;;;;;;;;;;;;;;;;;;;19016:27;;18931:120;;;:::o;32133:87::-;6098:12;:10;:12::i;:::-;6088:22;;:6;;;;;;;;;;:22;;;6080:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32209:3:::1;32199:7;:13;;;;32133:87:::0;:::o;5954:79::-;5992:7;6019:6;;;;;;;;;;;6012:13;;5954:79;:::o;17117:87::-;17156:13;17189:7;17182:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17117:87;:::o;18654:269::-;18747:4;18764:129;18773:12;:10;:12::i;:::-;18787:7;18796:96;18835:15;18796:96;;;;;;;;;;;;;;;;;:11;:25;18808:12;:10;:12::i;:::-;18796:25;;;;;;;;;;;;;;;:34;18822:7;18796:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;18764:8;:129::i;:::-;18911:4;18904:11;;18654:269;;;;:::o;17612:167::-;17690:4;17707:42;17717:12;:10;:12::i;:::-;17731:9;17742:6;17707:9;:42::i;:::-;17767:4;17760:11;;17612:167;;;;:::o;16898:120::-;6098:12;:10;:12::i;:::-;6088:22;;:6;;;;;;;;;;:22;;;6080:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16967:4:::1;16953:11;;:18;;;;;;;;;;;;;;;;;;16995:15;16982:10;:28;;;;16898:120::o:0;17787:143::-;17868:7;17895:11;:18;17907:5;17895:18;;;;;;;;;;;;;;;:27;17914:7;17895:27;;;;;;;;;;;;;;;;17888:34;;17787:143;;;;:::o;32022:99::-;6098:12;:10;:12::i;:::-;6088:22;;:6;;;;;;;;;;:22;;;6080:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32110:3:::1;32094:13;:19;;;;32022:99:::0;:::o;31394:110::-;6098:12;:10;:12::i;:::-;6088:22;;:6;;;;;;;;;;:22;;;6080:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31491:5:::1;31461:18;:27;31480:7;31461:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;31394:110:::0;:::o;6335:244::-;6098:12;:10;:12::i;:::-;6088:22;;:6;;;;;;;;;;:22;;;6080:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6444:1:::1;6424:22;;:8;:22;;;;6416:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;6534:8;6505:38;;6526:6;::::0;::::1;;;;;;;;6505:38;;;;;;;;;;;;6563:8;6554:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;6335:244:::0;:::o;242:115::-;295:15;338:10;323:26;;242:115;:::o;21082:337::-;21192:1;21175:19;;:5;:19;;;;21167:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21273:1;21254:21;;:7;:21;;;;21246:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21357:6;21327:11;:18;21339:5;21327:18;;;;;;;;;;;;;;;:27;21346:7;21327:27;;;;;;;;;;;;;;;:36;;;;21395:7;21379:32;;21388:5;21379:32;;;21404:6;21379:32;;;;;;:::i;:::-;;;;;;;;21082:337;;;:::o;21427:2041::-;21565:1;21549:18;;:4;:18;;;;21541:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21642:1;21628:16;;:2;:16;;;;21620:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;21712:1;21703:6;:10;21695:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;21779:9;:13;21789:2;21779:13;;;;;;;;;;;;;;;;;;;;;;;;;21778:14;21770:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;21840:9;:15;21850:4;21840:15;;;;;;;;;;;;;;;;;;;;;;;;;21839:16;21831:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;21905:7;:5;:7::i;:::-;21898:14;;:4;:14;;;;:30;;;;;21921:7;:5;:7::i;:::-;21916:12;;:2;:12;;;;21898:30;21894:84;;;21938:11;;;;;;;;;;;21930:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;21894:84;22040:12;22117:13;;;;;;;;;;;22111:19;;:4;:19;;;:40;;;;22138:13;;;;;;;;;;;22134:17;;:2;:17;;;22111:40;22110:99;;;;;22158:18;:24;22177:4;22158:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;22186:18;:22;22205:2;22186:22;;;;;;;;;;;;;;;;;;;;;;;;;22158:50;22156:53;22110:99;22105:148;;;22237:4;22227:14;;22105:148;22299:13;;;;;;;;;;;22291:21;;:4;:21;;;:55;;;;;22330:15;;;;;;;;;;;22316:30;;:2;:30;;;;22291:55;:82;;;;;22351:18;:22;22370:2;22351:22;;;;;;;;;;;;;;;;;;;;;;;;;22350:23;22291:82;22288:431;;;22464:7;22460:107;;;22502:13;;22492:7;:23;;;;22550:1;22534:13;:17;;;;22460:107;22641:10;;22622:15;:29;22618:90;;;22688:4;22672:9;:13;22682:2;22672:13;;;;;;;;;;;;;;;;:20;;;;;;;;;;;;;;;;;;22618:90;22288:431;22752:6;;;;;;;;;;;22751:7;:22;;;;;22762:11;;;;;;;;;;;22751:22;:45;;;;;22783:13;;;;;;;;;;;22777:19;;:2;:19;;;22751:45;22747:665;;;22888:7;22884:101;;;22926:1;22916:7;:11;;;;22962:7;;22946:13;:23;;;;22884:101;23013:28;23044:24;23062:4;23044:9;:24::i;:::-;23013:55;;23109:1;23086:20;:24;23083:306;;;23157:47;23200:3;23157:38;23186:8;;23157:24;23167:13;;;;;;;;;;;23157:9;:24::i;:::-;:28;;:38;;;;:::i;:::-;:42;;:47;;;;:::i;:::-;23134:20;:70;23131:188;;;23252:47;23295:3;23252:38;23281:8;;23252:24;23262:13;;;;;;;;;;;23252:9;:24::i;:::-;:28;;:38;;;;:::i;:::-;:42;;:47;;;;:::i;:::-;23229:70;;23131:188;23337:32;23348:20;23337:10;:32::i;:::-;23083:306;22798:614;22747:665;23422:38;23437:4;23442:2;23445:6;23452:7;23422:14;:38::i;:::-;21530:1938;21427:2041;;;:::o;1653:192::-;1739:7;1772:1;1767;:6;;1775:12;1759:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1799:9;1815:1;1811;:5;;;;:::i;:::-;1799:17;;1836:1;1829:8;;;1653:192;;;;;:::o;29513:163::-;29554:7;29575:15;29592;29611:19;:17;:19::i;:::-;29574:56;;;;29648:20;29660:7;29648;:11;;:20;;;;:::i;:::-;29641:27;;;;29513:163;:::o;2113:132::-;2171:7;2198:39;2202:1;2205;2198:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2191:46;;2113:132;;;;:::o;1320:181::-;1378:7;1398:9;1414:1;1410;:5;;;;:::i;:::-;1398:17;;1439:1;1434;:6;;1426:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;1492:1;1485:8;;;1320:181;;;;:::o;28311:419::-;28370:7;28379;28388;28397;28406;28415;28436:23;28461:12;28475:18;28497:20;28509:7;28497:11;:20::i;:::-;28435:82;;;;;;28529:15;28546:23;28571:12;28587:50;28599:7;28608:4;28614:10;28626;:8;:10::i;:::-;28587:11;:50::i;:::-;28528:109;;;;;;28656:7;28665:15;28682:4;28688:15;28705:4;28711:10;28648:74;;;;;;;;;;;;;;;;;;28311:419;;;;;;;:::o;1509:136::-;1567:7;1594:43;1598:1;1601;1594:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1587:50;;1509:136;;;;:::o;1853:250::-;1911:7;1940:1;1935;:6;1931:47;;;1965:1;1958:8;;;;1931:47;1990:9;2006:1;2002;:5;;;;:::i;:::-;1990:17;;2035:1;2030;2026;:5;;;;:::i;:::-;:10;2018:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;2094:1;2087:8;;;1853:250;;;;;:::o;23476:352::-;16235:4;16226:6;;:13;;;;;;;;;;;;;;;;;;23557:38:::1;23574:20;23557:16;:38::i;:::-;23671:26;23700:21;23671:50;;23756:1;23735:18;:22;23732:89;;;23774:35;23787:21;23774:12;:35::i;:::-;23732:89;23546:282;16271:5:::0;16262:6;;:14;;;;;;;;;;;;;;;;;;23476:352;:::o;25178:642::-;25289:7;25285:40;;25311:14;:12;:14::i;:::-;25285:40;25350:11;:19;25362:6;25350:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;25374:11;:22;25386:9;25374:22;;;;;;;;;;;;;;;;;;;;;;;;;25373:23;25350:46;25346:467;;;25413:48;25435:6;25443:9;25454:6;25413:21;:48::i;:::-;25346:467;;;25484:11;:19;25496:6;25484:19;;;;;;;;;;;;;;;;;;;;;;;;;25483:20;:46;;;;;25507:11;:22;25519:9;25507:22;;;;;;;;;;;;;;;;;;;;;;;;;25483:46;25479:334;;;25546:46;25566:6;25574:9;25585:6;25546:19;:46::i;:::-;25479:334;;;25614:11;:19;25626:6;25614:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;25637:11;:22;25649:9;25637:22;;;;;;;;;;;;;;;;;;;;;;;;;25614:45;25610:203;;;25676:48;25698:6;25706:9;25717:6;25676:21;:48::i;:::-;25610:203;;;25757:44;25775:6;25783:9;25794:6;25757:17;:44::i;:::-;25610:203;25479:334;25346:467;25178:642;;;;:::o;29684:561::-;29734:7;29743;29763:15;29781:7;;29763:25;;29799:15;29817:7;;29799:25;;29846:9;29841:289;29865:9;:16;;;;29861:1;:20;29841:289;;;29931:7;29907;:21;29915:9;29925:1;29915:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29907:21;;;;;;;;;;;;;;;;:31;:66;;;;29966:7;29942;:21;29950:9;29960:1;29950:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29942:21;;;;;;;;;;;;;;;;:31;29907:66;29903:97;;;29983:7;;29992;;29975:25;;;;;;;;;29903:97;30025:34;30037:7;:21;30045:9;30055:1;30045:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;30037:21;;;;;;;;;;;;;;;;30025:7;:11;;:34;;;;:::i;:::-;30015:44;;30084:34;30096:7;:21;30104:9;30114:1;30104:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;30096:21;;;;;;;;;;;;;;;;30084:7;:11;;:34;;;;:::i;:::-;30074:44;;29883:3;;;;;:::i;:::-;;;;29841:289;;;;30154:20;30166:7;;30154;;:11;;:20;;;;:::i;:::-;30144:7;:30;30140:61;;;30184:7;;30193;;30176:25;;;;;;;;30140:61;30220:7;30229;30212:25;;;;;;29684:561;;;:::o;2253:278::-;2339:7;2371:1;2367;:5;2374:12;2359:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2398:9;2414:1;2410;:5;;;;:::i;:::-;2398:17;;2522:1;2515:8;;;2253:278;;;;;:::o;28738:330::-;28798:7;28807;28816;28836:12;28851:24;28867:7;28851:15;:24::i;:::-;28836:39;;28886:18;28907:30;28929:7;28907:21;:30::i;:::-;28886:51;;28948:23;28974:33;28996:10;28974:17;28986:4;28974:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;28948:59;;29026:15;29043:4;29049:10;29018:42;;;;;;;;;28738:330;;;;;:::o;29076:429::-;29191:7;29200;29209;29229:15;29247:24;29259:11;29247:7;:11;;:24;;;;:::i;:::-;29229:42;;29282:12;29297:21;29306:11;29297:4;:8;;:21;;;;:::i;:::-;29282:36;;29329:18;29350:27;29365:11;29350:10;:14;;:27;;;;:::i;:::-;29329:48;;29388:23;29414:33;29436:10;29414:17;29426:4;29414:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;29388:59;;29466:7;29475:15;29492:4;29458:39;;;;;;;;;;29076:429;;;;;;;;:::o;23977:666::-;24103:21;24141:1;24127:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24103:40;;24172:4;24154;24159:1;24154:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;24198:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24188:4;24193:1;24188:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;24233:62;24250:4;24265:15;;;;;;;;;;;24283:11;24233:8;:62::i;:::-;24334:15;;;;;;;;;;;:66;;;24415:11;24441:1;24485:4;24512;24548:15;24334:240;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24600:35;24617:11;24630:4;24600:35;;;;;;;:::i;:::-;;;;;;;;24032:611;23977:666;:::o;23840:118::-;23897:15;;;;;;;;;;;:24;;:53;23922:27;23946:2;23922:19;23933:7;;23922:6;:10;;:19;;;;:::i;:::-;:23;;:27;;;;:::i;:::-;23897:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23840:118;:::o;30968:156::-;31025:1;31014:7;;:12;:34;;;;;31047:1;31030:13;;:18;31014:34;31011:46;;;31050:7;;31011:46;31087:1;31077:7;:11;;;;31115:1;31099:13;:17;;;;30968:156;:::o;26932:566::-;27035:15;27052:23;27077:12;27091:23;27116:12;27130:18;27152:19;27163:7;27152:10;:19::i;:::-;27034:137;;;;;;;;;;;;27200:28;27220:7;27200;:15;27208:6;27200:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;27182:7;:15;27190:6;27182:15;;;;;;;;;;;;;;;:46;;;;27257:28;27277:7;27257;:15;27265:6;27257:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;27239:7;:15;27247:6;27239:15;;;;;;;;;;;;;;;:46;;;;27317:39;27340:15;27317:7;:18;27325:9;27317:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;27296:7;:18;27304:9;27296:18;;;;;;;;;;;;;;;:60;;;;27370:26;27385:10;27370:14;:26::i;:::-;27407:23;27419:4;27425;27407:11;:23::i;:::-;27463:9;27446:44;;27455:6;27446:44;;;27474:15;27446:44;;;;;;:::i;:::-;;;;;;;;27023:475;;;;;;26932:566;;;:::o;26338:586::-;26439:15;26456:23;26481:12;26495:23;26520:12;26534:18;26556:19;26567:7;26556:10;:19::i;:::-;26438:137;;;;;;;;;;;;26604:28;26624:7;26604;:15;26612:6;26604:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;26586:7;:15;26594:6;26586:15;;;;;;;;;;;;;;;:46;;;;26664:39;26687:15;26664:7;:18;26672:9;26664:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;26643:7;:18;26651:9;26643:18;;;;;;;;;;;;;;;:60;;;;26735:39;26758:15;26735:7;:18;26743:9;26735:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;26714:7;:18;26722:9;26714:18;;;;;;;;;;;;;;;:60;;;;26796:26;26811:10;26796:14;:26::i;:::-;26833:23;26845:4;26851;26833:11;:23::i;:::-;26889:9;26872:44;;26881:6;26872:44;;;26900:15;26872:44;;;;;;:::i;:::-;;;;;;;;26427:497;;;;;;26338:586;;;:::o;27506:642::-;27609:15;27626:23;27651:12;27665:23;27690:12;27704:18;27726:19;27737:7;27726:10;:19::i;:::-;27608:137;;;;;;;;;;;;27774:28;27794:7;27774;:15;27782:6;27774:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;27756:7;:15;27764:6;27756:15;;;;;;;;;;;;;;;:46;;;;27831:28;27851:7;27831;:15;27839:6;27831:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;27813:7;:15;27821:6;27813:15;;;;;;;;;;;;;;;:46;;;;27891:39;27914:15;27891:7;:18;27899:9;27891:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;27870:7;:18;27878:9;27870:18;;;;;;;;;;;;;;;:60;;;;27962:39;27985:15;27962:7;:18;27970:9;27962:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;27941:7;:18;27949:9;27941:18;;;;;;;;;;;;;;;:60;;;;28020:26;28035:10;28020:14;:26::i;:::-;28057:23;28069:4;28075;28057:11;:23::i;:::-;28113:9;28096:44;;28105:6;28096:44;;;28124:15;28096:44;;;;;;:::i;:::-;;;;;;;;27597:551;;;;;;27506:642;;;:::o;25828:502::-;25927:15;25944:23;25969:12;25983:23;26008:12;26022:18;26044:19;26055:7;26044:10;:19::i;:::-;25926:137;;;;;;;;;;;;26092:28;26112:7;26092;:15;26100:6;26092:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;26074:7;:15;26082:6;26074:15;;;;;;;;;;;;;;;:46;;;;26152:39;26175:15;26152:7;:18;26160:9;26152:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;26131:7;:18;26139:9;26131:18;;;;;;;;;;;;;;;:60;;;;26202:26;26217:10;26202:14;:26::i;:::-;26239:23;26251:4;26257;26239:11;:23::i;:::-;26295:9;26278:44;;26287:6;26278:44;;;26306:15;26278:44;;;;;;:::i;:::-;;;;;;;;25915:415;;;;;;25828:502;;;:::o;30624:154::-;30688:7;30715:55;30754:5;30715:20;30727:7;;30715;:11;;:20;;;;:::i;:::-;:24;;:55;;;;:::i;:::-;30708:62;;30624:154;;;:::o;30790:166::-;30860:7;30887:61;30932:5;30887:26;30899:13;;30887:7;:11;;:26;;;;:::i;:::-;:30;;:61;;;;:::i;:::-;30880:68;;30790:166;;;:::o;30257:355::-;30320:19;30343:10;:8;:10::i;:::-;30320:33;;30364:18;30385:27;30400:11;30385:10;:14;;:27;;;;:::i;:::-;30364:48;;30448:38;30475:10;30448:7;:22;30464:4;30448:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;30423:7;:22;30439:4;30423:22;;;;;;;;;;;;;;;:63;;;;30500:11;:26;30520:4;30500:26;;;;;;;;;;;;;;;;;;;;;;;;;30497:107;;;30566:38;30593:10;30566:7;:22;30582:4;30566:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;30541:7;:22;30557:4;30541:22;;;;;;;;;;;;;;;:63;;;;30497:107;30309:303;;30257:355;:::o;28156:147::-;28234:17;28246:4;28234:7;;:11;;:17;;;;:::i;:::-;28224:7;:27;;;;28275:20;28290:4;28275:10;;:14;;:20;;;;:::i;:::-;28262:10;:33;;;;28156:147;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;7:139;;;;:::o;152:143::-;209:5;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;152:143;;;;:::o;301:133::-;344:5;382:6;369:20;360:29;;398:30;422:5;398:30;:::i;:::-;301:133;;;;:::o;440:139::-;486:5;524:6;511:20;502:29;;540:33;567:5;540:33;:::i;:::-;440:139;;;;:::o;585:329::-;644:6;693:2;681:9;672:7;668:23;664:32;661:119;;;699:79;;:::i;:::-;661:119;819:1;844:53;889:7;880:6;869:9;865:22;844:53;:::i;:::-;834:63;;790:117;585:329;;;;:::o;920:351::-;990:6;1039:2;1027:9;1018:7;1014:23;1010:32;1007:119;;;1045:79;;:::i;:::-;1007:119;1165:1;1190:64;1246:7;1237:6;1226:9;1222:22;1190:64;:::i;:::-;1180:74;;1136:128;920:351;;;;:::o;1277:474::-;1345:6;1353;1402:2;1390:9;1381:7;1377:23;1373:32;1370:119;;;1408:79;;:::i;:::-;1370:119;1528:1;1553:53;1598:7;1589:6;1578:9;1574:22;1553:53;:::i;:::-;1543:63;;1499:117;1655:2;1681:53;1726:7;1717:6;1706:9;1702:22;1681:53;:::i;:::-;1671:63;;1626:118;1277:474;;;;;:::o;1757:619::-;1834:6;1842;1850;1899:2;1887:9;1878:7;1874:23;1870:32;1867:119;;;1905:79;;:::i;:::-;1867:119;2025:1;2050:53;2095:7;2086:6;2075:9;2071:22;2050:53;:::i;:::-;2040:63;;1996:117;2152:2;2178:53;2223:7;2214:6;2203:9;2199:22;2178:53;:::i;:::-;2168:63;;2123:118;2280:2;2306:53;2351:7;2342:6;2331:9;2327:22;2306:53;:::i;:::-;2296:63;;2251:118;1757:619;;;;;:::o;2382:474::-;2450:6;2458;2507:2;2495:9;2486:7;2482:23;2478:32;2475:119;;;2513:79;;:::i;:::-;2475:119;2633:1;2658:53;2703:7;2694:6;2683:9;2679:22;2658:53;:::i;:::-;2648:63;;2604:117;2760:2;2786:53;2831:7;2822:6;2811:9;2807:22;2786:53;:::i;:::-;2776:63;;2731:118;2382:474;;;;;:::o;2862:329::-;2921:6;2970:2;2958:9;2949:7;2945:23;2941:32;2938:119;;;2976:79;;:::i;:::-;2938:119;3096:1;3121:53;3166:7;3157:6;3146:9;3142:22;3121:53;:::i;:::-;3111:63;;3067:117;2862:329;;;;:::o;3197:468::-;3262:6;3270;3319:2;3307:9;3298:7;3294:23;3290:32;3287:119;;;3325:79;;:::i;:::-;3287:119;3445:1;3470:53;3515:7;3506:6;3495:9;3491:22;3470:53;:::i;:::-;3460:63;;3416:117;3572:2;3598:50;3640:7;3631:6;3620:9;3616:22;3598:50;:::i;:::-;3588:60;;3543:115;3197:468;;;;;:::o;3671:179::-;3740:10;3761:46;3803:3;3795:6;3761:46;:::i;:::-;3839:4;3834:3;3830:14;3816:28;;3671:179;;;;:::o;3856:142::-;3959:32;3985:5;3959:32;:::i;:::-;3954:3;3947:45;3856:142;;:::o;4004:108::-;4081:24;4099:5;4081:24;:::i;:::-;4076:3;4069:37;4004:108;;:::o;4118:118::-;4205:24;4223:5;4205:24;:::i;:::-;4200:3;4193:37;4118:118;;:::o;4272:732::-;4391:3;4420:54;4468:5;4420:54;:::i;:::-;4490:86;4569:6;4564:3;4490:86;:::i;:::-;4483:93;;4600:56;4650:5;4600:56;:::i;:::-;4679:7;4710:1;4695:284;4720:6;4717:1;4714:13;4695:284;;;4796:6;4790:13;4823:63;4882:3;4867:13;4823:63;:::i;:::-;4816:70;;4909:60;4962:6;4909:60;:::i;:::-;4899:70;;4755:224;4742:1;4739;4735:9;4730:14;;4695:284;;;4699:14;4995:3;4988:10;;4396:608;;;4272:732;;;;:::o;5010:109::-;5091:21;5106:5;5091:21;:::i;:::-;5086:3;5079:34;5010:109;;:::o;5125:185::-;5239:64;5297:5;5239:64;:::i;:::-;5234:3;5227:77;5125:185;;:::o;5316:147::-;5411:45;5450:5;5411:45;:::i;:::-;5406:3;5399:58;5316:147;;:::o;5469:364::-;5557:3;5585:39;5618:5;5585:39;:::i;:::-;5640:71;5704:6;5699:3;5640:71;:::i;:::-;5633:78;;5720:52;5765:6;5760:3;5753:4;5746:5;5742:16;5720:52;:::i;:::-;5797:29;5819:6;5797:29;:::i;:::-;5792:3;5788:39;5781:46;;5561:272;5469:364;;;;:::o;5839:366::-;5981:3;6002:67;6066:2;6061:3;6002:67;:::i;:::-;5995:74;;6078:93;6167:3;6078:93;:::i;:::-;6196:2;6191:3;6187:12;6180:19;;5839:366;;;:::o;6211:::-;6353:3;6374:67;6438:2;6433:3;6374:67;:::i;:::-;6367:74;;6450:93;6539:3;6450:93;:::i;:::-;6568:2;6563:3;6559:12;6552:19;;6211:366;;;:::o;6583:::-;6725:3;6746:67;6810:2;6805:3;6746:67;:::i;:::-;6739:74;;6822:93;6911:3;6822:93;:::i;:::-;6940:2;6935:3;6931:12;6924:19;;6583:366;;;:::o;6955:::-;7097:3;7118:67;7182:2;7177:3;7118:67;:::i;:::-;7111:74;;7194:93;7283:3;7194:93;:::i;:::-;7312:2;7307:3;7303:12;7296:19;;6955:366;;;:::o;7327:::-;7469:3;7490:67;7554:2;7549:3;7490:67;:::i;:::-;7483:74;;7566:93;7655:3;7566:93;:::i;:::-;7684:2;7679:3;7675:12;7668:19;;7327:366;;;:::o;7699:::-;7841:3;7862:67;7926:2;7921:3;7862:67;:::i;:::-;7855:74;;7938:93;8027:3;7938:93;:::i;:::-;8056:2;8051:3;8047:12;8040:19;;7699:366;;;:::o;8071:::-;8213:3;8234:67;8298:2;8293:3;8234:67;:::i;:::-;8227:74;;8310:93;8399:3;8310:93;:::i;:::-;8428:2;8423:3;8419:12;8412:19;;8071:366;;;:::o;8443:::-;8585:3;8606:67;8670:2;8665:3;8606:67;:::i;:::-;8599:74;;8682:93;8771:3;8682:93;:::i;:::-;8800:2;8795:3;8791:12;8784:19;;8443:366;;;:::o;8815:::-;8957:3;8978:67;9042:2;9037:3;8978:67;:::i;:::-;8971:74;;9054:93;9143:3;9054:93;:::i;:::-;9172:2;9167:3;9163:12;9156:19;;8815:366;;;:::o;9187:::-;9329:3;9350:67;9414:2;9409:3;9350:67;:::i;:::-;9343:74;;9426:93;9515:3;9426:93;:::i;:::-;9544:2;9539:3;9535:12;9528:19;;9187:366;;;:::o;9559:::-;9701:3;9722:67;9786:2;9781:3;9722:67;:::i;:::-;9715:74;;9798:93;9887:3;9798:93;:::i;:::-;9916:2;9911:3;9907:12;9900:19;;9559:366;;;:::o;9931:::-;10073:3;10094:67;10158:2;10153:3;10094:67;:::i;:::-;10087:74;;10170:93;10259:3;10170:93;:::i;:::-;10288:2;10283:3;10279:12;10272:19;;9931:366;;;:::o;10303:::-;10445:3;10466:67;10530:2;10525:3;10466:67;:::i;:::-;10459:74;;10542:93;10631:3;10542:93;:::i;:::-;10660:2;10655:3;10651:12;10644:19;;10303:366;;;:::o;10675:::-;10817:3;10838:67;10902:2;10897:3;10838:67;:::i;:::-;10831:74;;10914:93;11003:3;10914:93;:::i;:::-;11032:2;11027:3;11023:12;11016:19;;10675:366;;;:::o;11047:::-;11189:3;11210:67;11274:2;11269:3;11210:67;:::i;:::-;11203:74;;11286:93;11375:3;11286:93;:::i;:::-;11404:2;11399:3;11395:12;11388:19;;11047:366;;;:::o;11419:118::-;11506:24;11524:5;11506:24;:::i;:::-;11501:3;11494:37;11419:118;;:::o;11543:112::-;11626:22;11642:5;11626:22;:::i;:::-;11621:3;11614:35;11543:112;;:::o;11661:222::-;11754:4;11792:2;11781:9;11777:18;11769:26;;11805:71;11873:1;11862:9;11858:17;11849:6;11805:71;:::i;:::-;11661:222;;;;:::o;11889:254::-;11998:4;12036:2;12025:9;12021:18;12013:26;;12049:87;12133:1;12122:9;12118:17;12109:6;12049:87;:::i;:::-;11889:254;;;;:::o;12149:332::-;12270:4;12308:2;12297:9;12293:18;12285:26;;12321:71;12389:1;12378:9;12374:17;12365:6;12321:71;:::i;:::-;12402:72;12470:2;12459:9;12455:18;12446:6;12402:72;:::i;:::-;12149:332;;;;;:::o;12487:210::-;12574:4;12612:2;12601:9;12597:18;12589:26;;12625:65;12687:1;12676:9;12672:17;12663:6;12625:65;:::i;:::-;12487:210;;;;:::o;12703:276::-;12823:4;12861:2;12850:9;12846:18;12838:26;;12874:98;12969:1;12958:9;12954:17;12945:6;12874:98;:::i;:::-;12703:276;;;;:::o;12985:313::-;13098:4;13136:2;13125:9;13121:18;13113:26;;13185:9;13179:4;13175:20;13171:1;13160:9;13156:17;13149:47;13213:78;13286:4;13277:6;13213:78;:::i;:::-;13205:86;;12985:313;;;;:::o;13304:419::-;13470:4;13508:2;13497:9;13493:18;13485:26;;13557:9;13551:4;13547:20;13543:1;13532:9;13528:17;13521:47;13585:131;13711:4;13585:131;:::i;:::-;13577:139;;13304:419;;;:::o;13729:::-;13895:4;13933:2;13922:9;13918:18;13910:26;;13982:9;13976:4;13972:20;13968:1;13957:9;13953:17;13946:47;14010:131;14136:4;14010:131;:::i;:::-;14002:139;;13729:419;;;:::o;14154:::-;14320:4;14358:2;14347:9;14343:18;14335:26;;14407:9;14401:4;14397:20;14393:1;14382:9;14378:17;14371:47;14435:131;14561:4;14435:131;:::i;:::-;14427:139;;14154:419;;;:::o;14579:::-;14745:4;14783:2;14772:9;14768:18;14760:26;;14832:9;14826:4;14822:20;14818:1;14807:9;14803:17;14796:47;14860:131;14986:4;14860:131;:::i;:::-;14852:139;;14579:419;;;:::o;15004:::-;15170:4;15208:2;15197:9;15193:18;15185:26;;15257:9;15251:4;15247:20;15243:1;15232:9;15228:17;15221:47;15285:131;15411:4;15285:131;:::i;:::-;15277:139;;15004:419;;;:::o;15429:::-;15595:4;15633:2;15622:9;15618:18;15610:26;;15682:9;15676:4;15672:20;15668:1;15657:9;15653:17;15646:47;15710:131;15836:4;15710:131;:::i;:::-;15702:139;;15429:419;;;:::o;15854:::-;16020:4;16058:2;16047:9;16043:18;16035:26;;16107:9;16101:4;16097:20;16093:1;16082:9;16078:17;16071:47;16135:131;16261:4;16135:131;:::i;:::-;16127:139;;15854:419;;;:::o;16279:::-;16445:4;16483:2;16472:9;16468:18;16460:26;;16532:9;16526:4;16522:20;16518:1;16507:9;16503:17;16496:47;16560:131;16686:4;16560:131;:::i;:::-;16552:139;;16279:419;;;:::o;16704:::-;16870:4;16908:2;16897:9;16893:18;16885:26;;16957:9;16951:4;16947:20;16943:1;16932:9;16928:17;16921:47;16985:131;17111:4;16985:131;:::i;:::-;16977:139;;16704:419;;;:::o;17129:::-;17295:4;17333:2;17322:9;17318:18;17310:26;;17382:9;17376:4;17372:20;17368:1;17357:9;17353:17;17346:47;17410:131;17536:4;17410:131;:::i;:::-;17402:139;;17129:419;;;:::o;17554:::-;17720:4;17758:2;17747:9;17743:18;17735:26;;17807:9;17801:4;17797:20;17793:1;17782:9;17778:17;17771:47;17835:131;17961:4;17835:131;:::i;:::-;17827:139;;17554:419;;;:::o;17979:::-;18145:4;18183:2;18172:9;18168:18;18160:26;;18232:9;18226:4;18222:20;18218:1;18207:9;18203:17;18196:47;18260:131;18386:4;18260:131;:::i;:::-;18252:139;;17979:419;;;:::o;18404:::-;18570:4;18608:2;18597:9;18593:18;18585:26;;18657:9;18651:4;18647:20;18643:1;18632:9;18628:17;18621:47;18685:131;18811:4;18685:131;:::i;:::-;18677:139;;18404:419;;;:::o;18829:::-;18995:4;19033:2;19022:9;19018:18;19010:26;;19082:9;19076:4;19072:20;19068:1;19057:9;19053:17;19046:47;19110:131;19236:4;19110:131;:::i;:::-;19102:139;;18829:419;;;:::o;19254:::-;19420:4;19458:2;19447:9;19443:18;19435:26;;19507:9;19501:4;19497:20;19493:1;19482:9;19478:17;19471:47;19535:131;19661:4;19535:131;:::i;:::-;19527:139;;19254:419;;;:::o;19679:222::-;19772:4;19810:2;19799:9;19795:18;19787:26;;19823:71;19891:1;19880:9;19876:17;19867:6;19823:71;:::i;:::-;19679:222;;;;:::o;19907:483::-;20078:4;20116:2;20105:9;20101:18;20093:26;;20129:71;20197:1;20186:9;20182:17;20173:6;20129:71;:::i;:::-;20247:9;20241:4;20237:20;20232:2;20221:9;20217:18;20210:48;20275:108;20378:4;20369:6;20275:108;:::i;:::-;20267:116;;19907:483;;;;;:::o;20396:831::-;20659:4;20697:3;20686:9;20682:19;20674:27;;20711:71;20779:1;20768:9;20764:17;20755:6;20711:71;:::i;:::-;20792:80;20868:2;20857:9;20853:18;20844:6;20792:80;:::i;:::-;20919:9;20913:4;20909:20;20904:2;20893:9;20889:18;20882:48;20947:108;21050:4;21041:6;20947:108;:::i;:::-;20939:116;;21065:72;21133:2;21122:9;21118:18;21109:6;21065:72;:::i;:::-;21147:73;21215:3;21204:9;21200:19;21191:6;21147:73;:::i;:::-;20396:831;;;;;;;;:::o;21233:214::-;21322:4;21360:2;21349:9;21345:18;21337:26;;21373:67;21437:1;21426:9;21422:17;21413:6;21373:67;:::i;:::-;21233:214;;;;:::o;21534:132::-;21601:4;21624:3;21616:11;;21654:4;21649:3;21645:14;21637:22;;21534:132;;;:::o;21672:114::-;21739:6;21773:5;21767:12;21757:22;;21672:114;;;:::o;21792:99::-;21844:6;21878:5;21872:12;21862:22;;21792:99;;;:::o;21897:113::-;21967:4;21999;21994:3;21990:14;21982:22;;21897:113;;;:::o;22016:184::-;22115:11;22149:6;22144:3;22137:19;22189:4;22184:3;22180:14;22165:29;;22016:184;;;;:::o;22206:169::-;22290:11;22324:6;22319:3;22312:19;22364:4;22359:3;22355:14;22340:29;;22206:169;;;;:::o;22381:305::-;22421:3;22440:20;22458:1;22440:20;:::i;:::-;22435:25;;22474:20;22492:1;22474:20;:::i;:::-;22469:25;;22628:1;22560:66;22556:74;22553:1;22550:81;22547:107;;;22634:18;;:::i;:::-;22547:107;22678:1;22675;22671:9;22664:16;;22381:305;;;;:::o;22692:185::-;22732:1;22749:20;22767:1;22749:20;:::i;:::-;22744:25;;22783:20;22801:1;22783:20;:::i;:::-;22778:25;;22822:1;22812:35;;22827:18;;:::i;:::-;22812:35;22869:1;22866;22862:9;22857:14;;22692:185;;;;:::o;22883:348::-;22923:7;22946:20;22964:1;22946:20;:::i;:::-;22941:25;;22980:20;22998:1;22980:20;:::i;:::-;22975:25;;23168:1;23100:66;23096:74;23093:1;23090:81;23085:1;23078:9;23071:17;23067:105;23064:131;;;23175:18;;:::i;:::-;23064:131;23223:1;23220;23216:9;23205:20;;22883:348;;;;:::o;23237:191::-;23277:4;23297:20;23315:1;23297:20;:::i;:::-;23292:25;;23331:20;23349:1;23331:20;:::i;:::-;23326:25;;23370:1;23367;23364:8;23361:34;;;23375:18;;:::i;:::-;23361:34;23420:1;23417;23413:9;23405:17;;23237:191;;;;:::o;23434:96::-;23471:7;23500:24;23518:5;23500:24;:::i;:::-;23489:35;;23434:96;;;:::o;23536:104::-;23581:7;23610:24;23628:5;23610:24;:::i;:::-;23599:35;;23536:104;;;:::o;23646:90::-;23680:7;23723:5;23716:13;23709:21;23698:32;;23646:90;;;:::o;23742:126::-;23779:7;23819:42;23812:5;23808:54;23797:65;;23742:126;;;:::o;23874:77::-;23911:7;23940:5;23929:16;;23874:77;;;:::o;23957:86::-;23992:7;24032:4;24025:5;24021:16;24010:27;;23957:86;;;:::o;24049:153::-;24126:9;24159:37;24190:5;24159:37;:::i;:::-;24146:50;;24049:153;;;:::o;24208:121::-;24266:9;24299:24;24317:5;24299:24;:::i;:::-;24286:37;;24208:121;;;:::o;24335:126::-;24385:9;24418:37;24449:5;24418:37;:::i;:::-;24405:50;;24335:126;;;:::o;24467:113::-;24517:9;24550:24;24568:5;24550:24;:::i;:::-;24537:37;;24467:113;;;:::o;24586:307::-;24654:1;24664:113;24678:6;24675:1;24672:13;24664:113;;;24763:1;24758:3;24754:11;24748:18;24744:1;24739:3;24735:11;24728:39;24700:2;24697:1;24693:10;24688:15;;24664:113;;;24795:6;24792:1;24789:13;24786:101;;;24875:1;24866:6;24861:3;24857:16;24850:27;24786:101;24635:258;24586:307;;;:::o;24899:320::-;24943:6;24980:1;24974:4;24970:12;24960:22;;25027:1;25021:4;25017:12;25048:18;25038:81;;25104:4;25096:6;25092:17;25082:27;;25038:81;25166:2;25158:6;25155:14;25135:18;25132:38;25129:84;;;25185:18;;:::i;:::-;25129:84;24950:269;24899:320;;;:::o;25225:233::-;25264:3;25287:24;25305:5;25287:24;:::i;:::-;25278:33;;25333:66;25326:5;25323:77;25320:103;;;25403:18;;:::i;:::-;25320:103;25450:1;25443:5;25439:13;25432:20;;25225:233;;;:::o;25464:180::-;25512:77;25509:1;25502:88;25609:4;25606:1;25599:15;25633:4;25630:1;25623:15;25650:180;25698:77;25695:1;25688:88;25795:4;25792:1;25785:15;25819:4;25816:1;25809:15;25836:180;25884:77;25881:1;25874:88;25981:4;25978:1;25971:15;26005:4;26002:1;25995:15;26022:180;26070:77;26067:1;26060:88;26167:4;26164:1;26157:15;26191:4;26188:1;26181:15;26208:180;26256:77;26253:1;26246:88;26353:4;26350:1;26343:15;26377:4;26374:1;26367:15;26394:180;26442:77;26439:1;26432:88;26539:4;26536:1;26529:15;26563:4;26560:1;26553:15;26703:117;26812:1;26809;26802:12;26826:102;26867:6;26918:2;26914:7;26909:2;26902:5;26898:14;26894:28;26884:38;;26826:102;;;:::o;26934:222::-;27074:34;27070:1;27062:6;27058:14;27051:58;27143:5;27138:2;27130:6;27126:15;27119:30;26934:222;:::o;27162:229::-;27302:34;27298:1;27290:6;27286:14;27279:58;27371:12;27366:2;27358:6;27354:15;27347:37;27162:229;:::o;27397:225::-;27537:34;27533:1;27525:6;27521:14;27514:58;27606:8;27601:2;27593:6;27589:15;27582:33;27397:225;:::o;27628:221::-;27768:34;27764:1;27756:6;27752:14;27745:58;27837:4;27832:2;27824:6;27820:15;27813:29;27628:221;:::o;27855:177::-;27995:29;27991:1;27983:6;27979:14;27972:53;27855:177;:::o;28038:::-;28178:29;28174:1;28166:6;28162:14;28155:53;28038:177;:::o;28221:181::-;28361:33;28357:1;28349:6;28345:14;28338:57;28221:181;:::o;28408:220::-;28548:34;28544:1;28536:6;28532:14;28525:58;28617:3;28612:2;28604:6;28600:15;28593:28;28408:220;:::o;28634:182::-;28774:34;28770:1;28762:6;28758:14;28751:58;28634:182;:::o;28822:228::-;28962:34;28958:1;28950:6;28946:14;28939:58;29031:11;29026:2;29018:6;29014:15;29007:36;28822:228;:::o;29056:224::-;29196:34;29192:1;29184:6;29180:14;29173:58;29265:7;29260:2;29252:6;29248:15;29241:32;29056:224;:::o;29286:223::-;29426:34;29422:1;29414:6;29410:14;29403:58;29495:6;29490:2;29482:6;29478:15;29471:31;29286:223;:::o;29515:174::-;29655:26;29651:1;29643:6;29639:14;29632:50;29515:174;:::o;29695:231::-;29835:34;29831:1;29823:6;29819:14;29812:58;29904:14;29899:2;29891:6;29887:15;29880:39;29695:231;:::o;29932:173::-;30072:25;30068:1;30060:6;30056:14;30049:49;29932:173;:::o;30111:122::-;30184:24;30202:5;30184:24;:::i;:::-;30177:5;30174:35;30164:63;;30223:1;30220;30213:12;30164:63;30111:122;:::o;30239:116::-;30309:21;30324:5;30309:21;:::i;:::-;30302:5;30299:32;30289:60;;30345:1;30342;30335:12;30289:60;30239:116;:::o;30361:122::-;30434:24;30452:5;30434:24;:::i;:::-;30427:5;30424:35;30414:63;;30473:1;30470;30463:12;30414:63;30361:122;:::o

Swarm Source

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