ETH Price: $3,819.10 (+1.56%)
Gas: 4 Gwei

Token

Floki Pup (FLOKIPUP)
 

Overview

Max Total Supply

1,000,000,000,000 FLOKIPUP

Holders

1,281

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
255,775,750.70000338 FLOKIPUP

Value
$0.00
0x5472715041a27cd267880a7f77312539873df2de
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:
FLOKIPUP

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

pragma solidity ^0.8.4;

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

    function _msgData() internal view virtual returns (bytes memory) {
        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 FLOKIPUP is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;
    
    address payable public marketingAddress = payable(0xEaf4ab38B1026A1C0b7EF5b28DbFD7A6B275ECDD); 
    address public immutable deadAddress = 0x000000000000000000000000000000000000dEaD;
    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;
    
   
    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _isExcluded;
    address[] private _excluded;
   
    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 1e12 * 10**9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private _name = "Floki Pup";
    string private _symbol = "FLOKIPUP";
    uint8 private _decimals = 9;

    //1% redistribution, 8% marketing. Total tax = 9%
    uint256 public _taxFee = 1;
    uint256 private _previousTaxFee = _taxFee;
    uint256 public _liquidityFee = 8;
    uint256 private _previousLiquidityFee = _liquidityFee;
    
    
    
    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;
    }

    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");
       if (from!= owner() && to!= owner()) require(tradingOpen, "Trading not yet enabled."); //transfers disabled before openTrading

       
        uint256 contractTokenBalance = balanceOf(address(this));
        
        if (!inSwap && to == uniswapV2Pair) {
            if(contractTokenBalance > 0) {
                if(contractTokenBalance > 0)
                swapTokens(contractTokenBalance);    
            }
        }
        
        bool takeFee = false;
        
        //take fee only on swaps
        if ( (from==uniswapV2Pair || to==uniswapV2Pair) && !(_isExcludedFromFee[from] || _isExcludedFromFee[to]) ) {
            takeFee = true;
        }
        
        _tokenTransfer(from,to,amount,takeFee);
    }

    function swapTokens(uint256 contractTokenBalance) private lockTheSwap {
        swapTokensForEth(contractTokenBalance);
        
        //Send to Marketing address
        uint256 contractETHBalance = address(this).balance;
        if(contractETHBalance > 0) {
            sendETHToFee(address(this).balance);
        }
    }
    
    function sendETHToFee(uint256 amount) private {
        marketingAddress.transfer(amount);
    }
    

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

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

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this), // 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);
        }
        
        if(!takeFee)
            restoreAllFee();
    }

    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;
        
        _previousTaxFee = _taxFee;
        _previousLiquidityFee = _liquidityFee;
        
        _taxFee = 0;
        _liquidityFee = 0;
    }
    
    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _liquidityFee = _previousLiquidityFee;
    }

    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 setMarketingAddress(address _marketingAddress) external onlyOwner() {
        marketingAddress = payable(_marketingAddress);
    }
    
    function transferToAddressETH(address payable recipient, uint256 amount) private {
        recipient.transfer(amount);
    }
    
    
    

     //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":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"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":[],"name":"marketingAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[{"internalType":"address","name":"_marketingAddress","type":"address"}],"name":"setMarketingAddress","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"}]

60a060405273eaf4ab38b1026a1c0b7ef5b28dbfd7a6b275ecdd600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead73ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1660601b815250683635c9adc5dea00000600a55600a54600019620000b091906200049d565b600019620000bf919062000422565b600b556040518060400160405280600981526020017f466c6f6b69205075700000000000000000000000000000000000000000000000815250600d90805190602001906200010f92919062000344565b506040518060400160405280600881526020017f464c4f4b49505550000000000000000000000000000000000000000000000000815250600e90805190602001906200015d92919062000344565b506009600f60006101000a81548160ff021916908360ff1602179055506001601055601054601155600860125560125460135560006015806101000a81548160ff021916908315150217905550348015620001b757600080fd5b506000620001ca6200033c60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600b54600460006200027f6200033c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550620002cd6200033c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600a546040516200032e919062000405565b60405180910390a362000562565b600033905090565b828054620003529062000467565b90600052602060002090601f016020900481019282620003765760008555620003c2565b82601f106200039157805160ff1916838001178555620003c2565b82800160010185558215620003c2579182015b82811115620003c1578251825591602001919060010190620003a4565b5b509050620003d19190620003d5565b5090565b5b80821115620003f0576000816000905550600101620003d6565b5090565b620003ff816200045d565b82525050565b60006020820190506200041c6000830184620003f4565b92915050565b60006200042f826200045d565b91506200043c836200045d565b925082821015620004525762000451620004d5565b5b828203905092915050565b6000819050919050565b600060028204905060018216806200048057607f821691505b6020821081141562000497576200049662000533565b5b50919050565b6000620004aa826200045d565b9150620004b7836200045d565b925082620004ca57620004c962000504565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60805160601c6150796200058160003960006109ca01526150796000f3fe6080604052600436106101f25760003560e01c806352390c021161010d578063906e9dd0116100a0578063a9059cbb1161006f578063a9059cbb14610722578063c9567bf91461075f578063dd62ed3e14610776578063ea2f0b37146107b3578063f2fde38b146107dc576101f9565b8063906e9dd01461066657806395d89b411461068f578063a457c2d7146106ba578063a5ece941146106f7576101f9565b8063715018a6116100dc578063715018a6146105d05780638203f5fe146105e757806388f82020146105fe5780638da5cb5b1461063b576101f9565b806352390c02146105025780635342acb41461052b5780636bc87c3a1461056857806370a0823114610593576101f9565b8063313ce567116101855780633bd5d173116101545780633bd5d17314610448578063437823ec146104715780634549b0391461049a57806349bd5a5e146104d7576101f9565b8063313ce5671461038c5780633685d419146103b757806339509351146103e05780633b124fe71461041d576101f9565b806318160ddd116101c157806318160ddd146102bc57806323b872dd146102e757806327c8f835146103245780632d8381191461034f576101f9565b806306fdde03146101fe578063095ea7b31461022957806313114a9d146102665780631694505e14610291576101f9565b366101f957005b600080fd5b34801561020a57600080fd5b50610213610805565b6040516102209190614628565b60405180910390f35b34801561023557600080fd5b50610250600480360381019061024b91906141e1565b610897565b60405161025d91906145f2565b60405180910390f35b34801561027257600080fd5b5061027b6108b5565b604051610288919061480a565b60405180910390f35b34801561029d57600080fd5b506102a66108bf565b6040516102b3919061460d565b60405180910390f35b3480156102c857600080fd5b506102d16108e5565b6040516102de919061480a565b60405180910390f35b3480156102f357600080fd5b5061030e60048036038101906103099190614192565b6108ef565b60405161031b91906145f2565b60405180910390f35b34801561033057600080fd5b506103396109c8565b6040516103469190614593565b60405180910390f35b34801561035b57600080fd5b506103766004803603810190610371919061421d565b6109ec565b604051610383919061480a565b60405180910390f35b34801561039857600080fd5b506103a1610a5a565b6040516103ae91906148af565b60405180910390f35b3480156103c357600080fd5b506103de60048036038101906103d99190614104565b610a71565b005b3480156103ec57600080fd5b50610407600480360381019061040291906141e1565b610e58565b60405161041491906145f2565b60405180910390f35b34801561042957600080fd5b50610432610f0b565b60405161043f919061480a565b60405180910390f35b34801561045457600080fd5b5061046f600480360381019061046a919061421d565b610f11565b005b34801561047d57600080fd5b5061049860048036038101906104939190614104565b61108c565b005b3480156104a657600080fd5b506104c160048036038101906104bc9190614246565b61117c565b6040516104ce919061480a565b60405180910390f35b3480156104e357600080fd5b506104ec611200565b6040516104f99190614593565b60405180910390f35b34801561050e57600080fd5b5061052960048036038101906105249190614104565b611226565b005b34801561053757600080fd5b50610552600480360381019061054d9190614104565b6114da565b60405161055f91906145f2565b60405180910390f35b34801561057457600080fd5b5061057d611530565b60405161058a919061480a565b60405180910390f35b34801561059f57600080fd5b506105ba60048036038101906105b59190614104565b611536565b6040516105c7919061480a565b60405180910390f35b3480156105dc57600080fd5b506105e5611621565b005b3480156105f357600080fd5b506105fc611774565b005b34801561060a57600080fd5b5061062560048036038101906106209190614104565b611ae4565b60405161063291906145f2565b60405180910390f35b34801561064757600080fd5b50610650611b3a565b60405161065d9190614593565b60405180910390f35b34801561067257600080fd5b5061068d60048036038101906106889190614104565b611b63565b005b34801561069b57600080fd5b506106a4611c3c565b6040516106b19190614628565b60405180910390f35b3480156106c657600080fd5b506106e160048036038101906106dc91906141e1565b611cce565b6040516106ee91906145f2565b60405180910390f35b34801561070357600080fd5b5061070c611d9b565b60405161071991906145ae565b60405180910390f35b34801561072e57600080fd5b50610749600480360381019061074491906141e1565b611dc1565b60405161075691906145f2565b60405180910390f35b34801561076b57600080fd5b50610774611ddf565b005b34801561078257600080fd5b5061079d60048036038101906107989190614156565b611e90565b6040516107aa919061480a565b60405180910390f35b3480156107bf57600080fd5b506107da60048036038101906107d59190614104565b611f17565b005b3480156107e857600080fd5b5061080360048036038101906107fe9190614104565b612007565b005b6060600d805461081490614b04565b80601f016020809104026020016040519081016040528092919081815260200182805461084090614b04565b801561088d5780601f106108625761010080835404028352916020019161088d565b820191906000526020600020905b81548152906001019060200180831161087057829003601f168201915b5050505050905090565b60006108ab6108a46121c9565b84846121d1565b6001905092915050565b6000600c54905090565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600a54905090565b60006108fc84848461239c565b6109bd846109086121c9565b6109b885604051806060016040528060288152602001614ff760289139600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061096e6121c9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127949092919063ffffffff16565b6121d1565b600190509392505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600b54821115610a33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2a9061466a565b60405180910390fd5b6000610a3d6127f8565b9050610a52818461282390919063ffffffff16565b915050919050565b6000600f60009054906101000a900460ff16905090565b610a796121c9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610afd9061474a565b60405180910390fd5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610b92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b89906146ea565b60405180910390fd5b60005b600980549050811015610e54578173ffffffffffffffffffffffffffffffffffffffff1660098281548110610bf3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610e415760096001600980549050610c4e9190614a00565b81548110610c85577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660098281548110610cea577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506009805480610e07577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055610e54565b8080610e4c90614b36565b915050610b95565b5050565b6000610f01610e656121c9565b84610efc8560066000610e766121c9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461286d90919063ffffffff16565b6121d1565b6001905092915050565b60105481565b6000610f1b6121c9565b9050600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610faa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa1906147ea565b60405180910390fd5b6000610fb5836128cb565b5050505050905061100e81600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461292790919063ffffffff16565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061106681600b5461292790919063ffffffff16565b600b8190555061108183600c5461286d90919063ffffffff16565b600c81905550505050565b6110946121c9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611121576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111189061474a565b60405180910390fd5b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600a548311156111c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ba9061470a565b60405180910390fd5b816111e35760006111d3846128cb565b50505050509050809150506111fa565b60006111ee846128cb565b50505050915050809150505b92915050565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61122e6121c9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b29061474a565b60405180910390fd5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611348576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133f906146ea565b60405180910390fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561141c576113d8600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546109ec565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506009819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60125481565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156115d157600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905061161c565b611619600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546109ec565b90505b919050565b6116296121c9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ad9061474a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61177c6121c9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611809576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118009061474a565b60405180910390fd5b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561186857600080fd5b505afa15801561187c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118a0919061412d565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561190257600080fd5b505afa158015611916573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061193a919061412d565b6040518363ffffffff1660e01b81526004016119579291906145c9565b602060405180830381600087803b15801561197157600080fd5b505af1158015611985573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a9919061412d565b601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160076000611a38611b3a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611b6b6121c9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bf8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bef9061474a565b60405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6060600e8054611c4b90614b04565b80601f0160208091040260200160405190810160405280929190818152602001828054611c7790614b04565b8015611cc45780601f10611c9957610100808354040283529160200191611cc4565b820191906000526020600020905b815481529060010190602001808311611ca757829003601f168201915b5050505050905090565b6000611d91611cdb6121c9565b84611d8c8560405180606001604052806025815260200161501f6025913960066000611d056121c9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127949092919063ffffffff16565b6121d1565b6001905092915050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611dd5611dce6121c9565b848461239c565b6001905092915050565b611de76121c9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6b9061474a565b60405180910390fd5b60016015806101000a81548160ff021916908315150217905550565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611f1f6121c9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa39061474a565b60405180910390fd5b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61200f6121c9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461209c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120939061474a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561210c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121039061468a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612241576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612238906147aa565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a8906146aa565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161238f919061480a565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561240c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124039061478a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561247c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124739061464a565b60405180910390fd5b600081116124bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b69061476a565b60405180910390fd5b6124c7611b3a565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156125355750612505611b3a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156125885760158054906101000a900460ff16612587576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257e906147ca565b60405180910390fd5b5b600061259330611536565b9050601560149054906101000a900460ff161580156125ff5750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b156126225760008111156126215760008111156126205761261f81612971565b5b5b5b6000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806126cd5750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80156127775750600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806127755750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b155b1561278157600190505b61278d858585846129cc565b5050505050565b60008383111582906127dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d39190614628565b60405180910390fd5b50600083856127eb9190614a00565b9050809150509392505050565b6000806000612805612c23565b9150915061281c818361282390919063ffffffff16565b9250505090565b600061286583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612f6e565b905092915050565b600080828461287c919061491f565b9050838110156128c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b8906146ca565b60405180910390fd5b8091505092915050565b60008060008060008060008060006128e28a612fd1565b92509250925060008060006129008d86866128fb6127f8565b61302b565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b600061296983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612794565b905092915050565b6001601560146101000a81548160ff021916908315150217905550612995816130b4565b600047905060008111156129ad576129ac476133b1565b5b506000601560146101000a81548160ff02191690831515021790555050565b806129da576129d961341d565b5b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a7d5750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612a9257612a8d848484613460565b612c0f565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612b355750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612b4a57612b458484846136c0565b612c0e565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612bec5750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612c0157612bfc848484613920565b612c0d565b612c0c848484613c15565b5b5b5b80612c1d57612c1c613de0565b5b50505050565b6000806000600b5490506000600a54905060005b600980549050811015612f3157826004600060098481548110612c83577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180612d975750816005600060098481548110612d2f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15612dae57600b54600a5494509450505050612f6a565b612e646004600060098481548110612def577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461292790919063ffffffff16565b9250612f1c6005600060098481548110612ea7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361292790919063ffffffff16565b91508080612f2990614b36565b915050612c37565b50612f49600a54600b5461282390919063ffffffff16565b821015612f6157600b54600a54935093505050612f6a565b81819350935050505b9091565b60008083118290612fb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fac9190614628565b60405180910390fd5b5060008385612fc49190614975565b9050809150509392505050565b600080600080612fe085613df4565b90506000612fed86613e25565b9050600061301682613008858a61292790919063ffffffff16565b61292790919063ffffffff16565b90508083839550955095505050509193909250565b6000806000806130448589613e5690919063ffffffff16565b9050600061305b8689613e5690919063ffffffff16565b905060006130728789613e5690919063ffffffff16565b9050600061309b8261308d858761292790919063ffffffff16565b61292790919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000600267ffffffffffffffff8111156130f7577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156131255781602001602082028036833780820191505090505b5090503081600081518110613163577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561320557600080fd5b505afa158015613219573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061323d919061412d565b81600181518110613277577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506132de30601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846121d1565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613342959493929190614855565b600060405180830381600087803b15801561335c57600080fd5b505af1158015613370573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a782826040516133a5929190614825565b60405180910390a15050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613419573d6000803e3d6000fd5b5050565b600060105414801561343157506000601254145b1561343b5761345e565b601054601181905550601254601381905550600060108190555060006012819055505b565b600080600080600080613472876128cb565b9550955095509550955095506134d087600560008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461292790919063ffffffff16565b600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061356586600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461292790919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506135fa85600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461286d90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061364681613ed1565b6136508483614076565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516136ad919061480a565b60405180910390a3505050505050505050565b6000806000806000806136d2876128cb565b95509550955095509550955061373086600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461292790919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506137c583600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461286d90919063ffffffff16565b600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061385a85600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461286d90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506138a681613ed1565b6138b08483614076565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161390d919061480a565b60405180910390a3505050505050505050565b600080600080600080613932876128cb565b95509550955095509550955061399087600560008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461292790919063ffffffff16565b600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a2586600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461292790919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613aba83600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461286d90919063ffffffff16565b600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613b4f85600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461286d90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613b9b81613ed1565b613ba58483614076565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613c02919061480a565b60405180910390a3505050505050505050565b600080600080600080613c27876128cb565b955095509550955095509550613c8586600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461292790919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d1a85600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461286d90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d6681613ed1565b613d708483614076565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613dcd919061480a565b60405180910390a3505050505050505050565b601154601081905550601354601281905550565b6000613e1e6064613e1060105485613e5690919063ffffffff16565b61282390919063ffffffff16565b9050919050565b6000613e4f6064613e4160125485613e5690919063ffffffff16565b61282390919063ffffffff16565b9050919050565b600080831415613e695760009050613ecb565b60008284613e7791906149a6565b9050828482613e869190614975565b14613ec6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ebd9061472a565b60405180910390fd5b809150505b92915050565b6000613edb6127f8565b90506000613ef28284613e5690919063ffffffff16565b9050613f4681600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461286d90919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156140715761402d83600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461286d90919063ffffffff16565b600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b61408b82600b5461292790919063ffffffff16565b600b819055506140a681600c5461286d90919063ffffffff16565b600c819055505050565b6000813590506140bf81614fb1565b92915050565b6000815190506140d481614fb1565b92915050565b6000813590506140e981614fc8565b92915050565b6000813590506140fe81614fdf565b92915050565b60006020828403121561411657600080fd5b6000614124848285016140b0565b91505092915050565b60006020828403121561413f57600080fd5b600061414d848285016140c5565b91505092915050565b6000806040838503121561416957600080fd5b6000614177858286016140b0565b9250506020614188858286016140b0565b9150509250929050565b6000806000606084860312156141a757600080fd5b60006141b5868287016140b0565b93505060206141c6868287016140b0565b92505060406141d7868287016140ef565b9150509250925092565b600080604083850312156141f457600080fd5b6000614202858286016140b0565b9250506020614213858286016140ef565b9150509250929050565b60006020828403121561422f57600080fd5b600061423d848285016140ef565b91505092915050565b6000806040838503121561425957600080fd5b6000614267858286016140ef565b9250506020614278858286016140da565b9150509250929050565b600061428e83836142a9565b60208301905092915050565b6142a381614a46565b82525050565b6142b281614a34565b82525050565b6142c181614a34565b82525050565b60006142d2826148da565b6142dc81856148fd565b93506142e7836148ca565b8060005b838110156143185781516142ff8882614282565b975061430a836148f0565b9250506001810190506142eb565b5085935050505092915050565b61432e81614a58565b82525050565b61433d81614a9b565b82525050565b61434c81614abf565b82525050565b600061435d826148e5565b614367818561490e565b9350614377818560208601614ad1565b61438081614c0c565b840191505092915050565b600061439860238361490e565b91506143a382614c1d565b604082019050919050565b60006143bb602a8361490e565b91506143c682614c6c565b604082019050919050565b60006143de60268361490e565b91506143e982614cbb565b604082019050919050565b600061440160228361490e565b915061440c82614d0a565b604082019050919050565b6000614424601b8361490e565b915061442f82614d59565b602082019050919050565b6000614447601b8361490e565b915061445282614d82565b602082019050919050565b600061446a601f8361490e565b915061447582614dab565b602082019050919050565b600061448d60218361490e565b915061449882614dd4565b604082019050919050565b60006144b060208361490e565b91506144bb82614e23565b602082019050919050565b60006144d360298361490e565b91506144de82614e4c565b604082019050919050565b60006144f660258361490e565b915061450182614e9b565b604082019050919050565b600061451960248361490e565b915061452482614eea565b604082019050919050565b600061453c60188361490e565b915061454782614f39565b602082019050919050565b600061455f602c8361490e565b915061456a82614f62565b604082019050919050565b61457e81614a84565b82525050565b61458d81614a8e565b82525050565b60006020820190506145a860008301846142b8565b92915050565b60006020820190506145c3600083018461429a565b92915050565b60006040820190506145de60008301856142b8565b6145eb60208301846142b8565b9392505050565b60006020820190506146076000830184614325565b92915050565b60006020820190506146226000830184614334565b92915050565b600060208201905081810360008301526146428184614352565b905092915050565b600060208201905081810360008301526146638161438b565b9050919050565b60006020820190508181036000830152614683816143ae565b9050919050565b600060208201905081810360008301526146a3816143d1565b9050919050565b600060208201905081810360008301526146c3816143f4565b9050919050565b600060208201905081810360008301526146e381614417565b9050919050565b600060208201905081810360008301526147038161443a565b9050919050565b600060208201905081810360008301526147238161445d565b9050919050565b6000602082019050818103600083015261474381614480565b9050919050565b60006020820190508181036000830152614763816144a3565b9050919050565b60006020820190508181036000830152614783816144c6565b9050919050565b600060208201905081810360008301526147a3816144e9565b9050919050565b600060208201905081810360008301526147c38161450c565b9050919050565b600060208201905081810360008301526147e38161452f565b9050919050565b6000602082019050818103600083015261480381614552565b9050919050565b600060208201905061481f6000830184614575565b92915050565b600060408201905061483a6000830185614575565b818103602083015261484c81846142c7565b90509392505050565b600060a08201905061486a6000830188614575565b6148776020830187614343565b818103604083015261488981866142c7565b905061489860608301856142b8565b6148a56080830184614575565b9695505050505050565b60006020820190506148c46000830184614584565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600061492a82614a84565b915061493583614a84565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561496a57614969614b7f565b5b828201905092915050565b600061498082614a84565b915061498b83614a84565b92508261499b5761499a614bae565b5b828204905092915050565b60006149b182614a84565b91506149bc83614a84565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156149f5576149f4614b7f565b5b828202905092915050565b6000614a0b82614a84565b9150614a1683614a84565b925082821015614a2957614a28614b7f565b5b828203905092915050565b6000614a3f82614a64565b9050919050565b6000614a5182614a64565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000614aa682614aad565b9050919050565b6000614ab882614a64565b9050919050565b6000614aca82614a84565b9050919050565b60005b83811015614aef578082015181840152602081019050614ad4565b83811115614afe576000848401525b50505050565b60006002820490506001821680614b1c57607f821691505b60208210811415614b3057614b2f614bdd565b5b50919050565b6000614b4182614a84565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614b7457614b73614b7f565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f54726164696e67206e6f742079657420656e61626c65642e0000000000000000600082015250565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b614fba81614a34565b8114614fc557600080fd5b50565b614fd181614a58565b8114614fdc57600080fd5b50565b614fe881614a84565b8114614ff357600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212206198863d24d149b57983bca6e6a88d17475934a9b216d1ac0f750df1ba79b0ab64736f6c63430008040033

Deployed Bytecode

0x6080604052600436106101f25760003560e01c806352390c021161010d578063906e9dd0116100a0578063a9059cbb1161006f578063a9059cbb14610722578063c9567bf91461075f578063dd62ed3e14610776578063ea2f0b37146107b3578063f2fde38b146107dc576101f9565b8063906e9dd01461066657806395d89b411461068f578063a457c2d7146106ba578063a5ece941146106f7576101f9565b8063715018a6116100dc578063715018a6146105d05780638203f5fe146105e757806388f82020146105fe5780638da5cb5b1461063b576101f9565b806352390c02146105025780635342acb41461052b5780636bc87c3a1461056857806370a0823114610593576101f9565b8063313ce567116101855780633bd5d173116101545780633bd5d17314610448578063437823ec146104715780634549b0391461049a57806349bd5a5e146104d7576101f9565b8063313ce5671461038c5780633685d419146103b757806339509351146103e05780633b124fe71461041d576101f9565b806318160ddd116101c157806318160ddd146102bc57806323b872dd146102e757806327c8f835146103245780632d8381191461034f576101f9565b806306fdde03146101fe578063095ea7b31461022957806313114a9d146102665780631694505e14610291576101f9565b366101f957005b600080fd5b34801561020a57600080fd5b50610213610805565b6040516102209190614628565b60405180910390f35b34801561023557600080fd5b50610250600480360381019061024b91906141e1565b610897565b60405161025d91906145f2565b60405180910390f35b34801561027257600080fd5b5061027b6108b5565b604051610288919061480a565b60405180910390f35b34801561029d57600080fd5b506102a66108bf565b6040516102b3919061460d565b60405180910390f35b3480156102c857600080fd5b506102d16108e5565b6040516102de919061480a565b60405180910390f35b3480156102f357600080fd5b5061030e60048036038101906103099190614192565b6108ef565b60405161031b91906145f2565b60405180910390f35b34801561033057600080fd5b506103396109c8565b6040516103469190614593565b60405180910390f35b34801561035b57600080fd5b506103766004803603810190610371919061421d565b6109ec565b604051610383919061480a565b60405180910390f35b34801561039857600080fd5b506103a1610a5a565b6040516103ae91906148af565b60405180910390f35b3480156103c357600080fd5b506103de60048036038101906103d99190614104565b610a71565b005b3480156103ec57600080fd5b50610407600480360381019061040291906141e1565b610e58565b60405161041491906145f2565b60405180910390f35b34801561042957600080fd5b50610432610f0b565b60405161043f919061480a565b60405180910390f35b34801561045457600080fd5b5061046f600480360381019061046a919061421d565b610f11565b005b34801561047d57600080fd5b5061049860048036038101906104939190614104565b61108c565b005b3480156104a657600080fd5b506104c160048036038101906104bc9190614246565b61117c565b6040516104ce919061480a565b60405180910390f35b3480156104e357600080fd5b506104ec611200565b6040516104f99190614593565b60405180910390f35b34801561050e57600080fd5b5061052960048036038101906105249190614104565b611226565b005b34801561053757600080fd5b50610552600480360381019061054d9190614104565b6114da565b60405161055f91906145f2565b60405180910390f35b34801561057457600080fd5b5061057d611530565b60405161058a919061480a565b60405180910390f35b34801561059f57600080fd5b506105ba60048036038101906105b59190614104565b611536565b6040516105c7919061480a565b60405180910390f35b3480156105dc57600080fd5b506105e5611621565b005b3480156105f357600080fd5b506105fc611774565b005b34801561060a57600080fd5b5061062560048036038101906106209190614104565b611ae4565b60405161063291906145f2565b60405180910390f35b34801561064757600080fd5b50610650611b3a565b60405161065d9190614593565b60405180910390f35b34801561067257600080fd5b5061068d60048036038101906106889190614104565b611b63565b005b34801561069b57600080fd5b506106a4611c3c565b6040516106b19190614628565b60405180910390f35b3480156106c657600080fd5b506106e160048036038101906106dc91906141e1565b611cce565b6040516106ee91906145f2565b60405180910390f35b34801561070357600080fd5b5061070c611d9b565b60405161071991906145ae565b60405180910390f35b34801561072e57600080fd5b50610749600480360381019061074491906141e1565b611dc1565b60405161075691906145f2565b60405180910390f35b34801561076b57600080fd5b50610774611ddf565b005b34801561078257600080fd5b5061079d60048036038101906107989190614156565b611e90565b6040516107aa919061480a565b60405180910390f35b3480156107bf57600080fd5b506107da60048036038101906107d59190614104565b611f17565b005b3480156107e857600080fd5b5061080360048036038101906107fe9190614104565b612007565b005b6060600d805461081490614b04565b80601f016020809104026020016040519081016040528092919081815260200182805461084090614b04565b801561088d5780601f106108625761010080835404028352916020019161088d565b820191906000526020600020905b81548152906001019060200180831161087057829003601f168201915b5050505050905090565b60006108ab6108a46121c9565b84846121d1565b6001905092915050565b6000600c54905090565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600a54905090565b60006108fc84848461239c565b6109bd846109086121c9565b6109b885604051806060016040528060288152602001614ff760289139600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061096e6121c9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127949092919063ffffffff16565b6121d1565b600190509392505050565b7f000000000000000000000000000000000000000000000000000000000000dead81565b6000600b54821115610a33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2a9061466a565b60405180910390fd5b6000610a3d6127f8565b9050610a52818461282390919063ffffffff16565b915050919050565b6000600f60009054906101000a900460ff16905090565b610a796121c9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610afd9061474a565b60405180910390fd5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610b92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b89906146ea565b60405180910390fd5b60005b600980549050811015610e54578173ffffffffffffffffffffffffffffffffffffffff1660098281548110610bf3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610e415760096001600980549050610c4e9190614a00565b81548110610c85577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660098281548110610cea577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506009805480610e07577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055610e54565b8080610e4c90614b36565b915050610b95565b5050565b6000610f01610e656121c9565b84610efc8560066000610e766121c9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461286d90919063ffffffff16565b6121d1565b6001905092915050565b60105481565b6000610f1b6121c9565b9050600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610faa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa1906147ea565b60405180910390fd5b6000610fb5836128cb565b5050505050905061100e81600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461292790919063ffffffff16565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061106681600b5461292790919063ffffffff16565b600b8190555061108183600c5461286d90919063ffffffff16565b600c81905550505050565b6110946121c9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611121576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111189061474a565b60405180910390fd5b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600a548311156111c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ba9061470a565b60405180910390fd5b816111e35760006111d3846128cb565b50505050509050809150506111fa565b60006111ee846128cb565b50505050915050809150505b92915050565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61122e6121c9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b29061474a565b60405180910390fd5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611348576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133f906146ea565b60405180910390fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561141c576113d8600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546109ec565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506009819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60125481565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156115d157600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905061161c565b611619600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546109ec565b90505b919050565b6116296121c9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ad9061474a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61177c6121c9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611809576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118009061474a565b60405180910390fd5b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561186857600080fd5b505afa15801561187c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118a0919061412d565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561190257600080fd5b505afa158015611916573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061193a919061412d565b6040518363ffffffff1660e01b81526004016119579291906145c9565b602060405180830381600087803b15801561197157600080fd5b505af1158015611985573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a9919061412d565b601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160076000611a38611b3a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611b6b6121c9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bf8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bef9061474a565b60405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6060600e8054611c4b90614b04565b80601f0160208091040260200160405190810160405280929190818152602001828054611c7790614b04565b8015611cc45780601f10611c9957610100808354040283529160200191611cc4565b820191906000526020600020905b815481529060010190602001808311611ca757829003601f168201915b5050505050905090565b6000611d91611cdb6121c9565b84611d8c8560405180606001604052806025815260200161501f6025913960066000611d056121c9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127949092919063ffffffff16565b6121d1565b6001905092915050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611dd5611dce6121c9565b848461239c565b6001905092915050565b611de76121c9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6b9061474a565b60405180910390fd5b60016015806101000a81548160ff021916908315150217905550565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611f1f6121c9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa39061474a565b60405180910390fd5b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61200f6121c9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461209c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120939061474a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561210c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121039061468a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612241576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612238906147aa565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a8906146aa565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161238f919061480a565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561240c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124039061478a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561247c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124739061464a565b60405180910390fd5b600081116124bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b69061476a565b60405180910390fd5b6124c7611b3a565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156125355750612505611b3a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156125885760158054906101000a900460ff16612587576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257e906147ca565b60405180910390fd5b5b600061259330611536565b9050601560149054906101000a900460ff161580156125ff5750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b156126225760008111156126215760008111156126205761261f81612971565b5b5b5b6000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806126cd5750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80156127775750600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806127755750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b155b1561278157600190505b61278d858585846129cc565b5050505050565b60008383111582906127dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d39190614628565b60405180910390fd5b50600083856127eb9190614a00565b9050809150509392505050565b6000806000612805612c23565b9150915061281c818361282390919063ffffffff16565b9250505090565b600061286583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612f6e565b905092915050565b600080828461287c919061491f565b9050838110156128c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b8906146ca565b60405180910390fd5b8091505092915050565b60008060008060008060008060006128e28a612fd1565b92509250925060008060006129008d86866128fb6127f8565b61302b565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b600061296983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612794565b905092915050565b6001601560146101000a81548160ff021916908315150217905550612995816130b4565b600047905060008111156129ad576129ac476133b1565b5b506000601560146101000a81548160ff02191690831515021790555050565b806129da576129d961341d565b5b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a7d5750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612a9257612a8d848484613460565b612c0f565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612b355750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612b4a57612b458484846136c0565b612c0e565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612bec5750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612c0157612bfc848484613920565b612c0d565b612c0c848484613c15565b5b5b5b80612c1d57612c1c613de0565b5b50505050565b6000806000600b5490506000600a54905060005b600980549050811015612f3157826004600060098481548110612c83577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180612d975750816005600060098481548110612d2f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15612dae57600b54600a5494509450505050612f6a565b612e646004600060098481548110612def577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461292790919063ffffffff16565b9250612f1c6005600060098481548110612ea7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361292790919063ffffffff16565b91508080612f2990614b36565b915050612c37565b50612f49600a54600b5461282390919063ffffffff16565b821015612f6157600b54600a54935093505050612f6a565b81819350935050505b9091565b60008083118290612fb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fac9190614628565b60405180910390fd5b5060008385612fc49190614975565b9050809150509392505050565b600080600080612fe085613df4565b90506000612fed86613e25565b9050600061301682613008858a61292790919063ffffffff16565b61292790919063ffffffff16565b90508083839550955095505050509193909250565b6000806000806130448589613e5690919063ffffffff16565b9050600061305b8689613e5690919063ffffffff16565b905060006130728789613e5690919063ffffffff16565b9050600061309b8261308d858761292790919063ffffffff16565b61292790919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000600267ffffffffffffffff8111156130f7577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156131255781602001602082028036833780820191505090505b5090503081600081518110613163577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561320557600080fd5b505afa158015613219573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061323d919061412d565b81600181518110613277577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506132de30601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846121d1565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613342959493929190614855565b600060405180830381600087803b15801561335c57600080fd5b505af1158015613370573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a782826040516133a5929190614825565b60405180910390a15050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613419573d6000803e3d6000fd5b5050565b600060105414801561343157506000601254145b1561343b5761345e565b601054601181905550601254601381905550600060108190555060006012819055505b565b600080600080600080613472876128cb565b9550955095509550955095506134d087600560008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461292790919063ffffffff16565b600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061356586600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461292790919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506135fa85600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461286d90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061364681613ed1565b6136508483614076565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516136ad919061480a565b60405180910390a3505050505050505050565b6000806000806000806136d2876128cb565b95509550955095509550955061373086600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461292790919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506137c583600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461286d90919063ffffffff16565b600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061385a85600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461286d90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506138a681613ed1565b6138b08483614076565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161390d919061480a565b60405180910390a3505050505050505050565b600080600080600080613932876128cb565b95509550955095509550955061399087600560008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461292790919063ffffffff16565b600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a2586600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461292790919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613aba83600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461286d90919063ffffffff16565b600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613b4f85600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461286d90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613b9b81613ed1565b613ba58483614076565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613c02919061480a565b60405180910390a3505050505050505050565b600080600080600080613c27876128cb565b955095509550955095509550613c8586600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461292790919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d1a85600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461286d90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d6681613ed1565b613d708483614076565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613dcd919061480a565b60405180910390a3505050505050505050565b601154601081905550601354601281905550565b6000613e1e6064613e1060105485613e5690919063ffffffff16565b61282390919063ffffffff16565b9050919050565b6000613e4f6064613e4160125485613e5690919063ffffffff16565b61282390919063ffffffff16565b9050919050565b600080831415613e695760009050613ecb565b60008284613e7791906149a6565b9050828482613e869190614975565b14613ec6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ebd9061472a565b60405180910390fd5b809150505b92915050565b6000613edb6127f8565b90506000613ef28284613e5690919063ffffffff16565b9050613f4681600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461286d90919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156140715761402d83600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461286d90919063ffffffff16565b600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b61408b82600b5461292790919063ffffffff16565b600b819055506140a681600c5461286d90919063ffffffff16565b600c819055505050565b6000813590506140bf81614fb1565b92915050565b6000815190506140d481614fb1565b92915050565b6000813590506140e981614fc8565b92915050565b6000813590506140fe81614fdf565b92915050565b60006020828403121561411657600080fd5b6000614124848285016140b0565b91505092915050565b60006020828403121561413f57600080fd5b600061414d848285016140c5565b91505092915050565b6000806040838503121561416957600080fd5b6000614177858286016140b0565b9250506020614188858286016140b0565b9150509250929050565b6000806000606084860312156141a757600080fd5b60006141b5868287016140b0565b93505060206141c6868287016140b0565b92505060406141d7868287016140ef565b9150509250925092565b600080604083850312156141f457600080fd5b6000614202858286016140b0565b9250506020614213858286016140ef565b9150509250929050565b60006020828403121561422f57600080fd5b600061423d848285016140ef565b91505092915050565b6000806040838503121561425957600080fd5b6000614267858286016140ef565b9250506020614278858286016140da565b9150509250929050565b600061428e83836142a9565b60208301905092915050565b6142a381614a46565b82525050565b6142b281614a34565b82525050565b6142c181614a34565b82525050565b60006142d2826148da565b6142dc81856148fd565b93506142e7836148ca565b8060005b838110156143185781516142ff8882614282565b975061430a836148f0565b9250506001810190506142eb565b5085935050505092915050565b61432e81614a58565b82525050565b61433d81614a9b565b82525050565b61434c81614abf565b82525050565b600061435d826148e5565b614367818561490e565b9350614377818560208601614ad1565b61438081614c0c565b840191505092915050565b600061439860238361490e565b91506143a382614c1d565b604082019050919050565b60006143bb602a8361490e565b91506143c682614c6c565b604082019050919050565b60006143de60268361490e565b91506143e982614cbb565b604082019050919050565b600061440160228361490e565b915061440c82614d0a565b604082019050919050565b6000614424601b8361490e565b915061442f82614d59565b602082019050919050565b6000614447601b8361490e565b915061445282614d82565b602082019050919050565b600061446a601f8361490e565b915061447582614dab565b602082019050919050565b600061448d60218361490e565b915061449882614dd4565b604082019050919050565b60006144b060208361490e565b91506144bb82614e23565b602082019050919050565b60006144d360298361490e565b91506144de82614e4c565b604082019050919050565b60006144f660258361490e565b915061450182614e9b565b604082019050919050565b600061451960248361490e565b915061452482614eea565b604082019050919050565b600061453c60188361490e565b915061454782614f39565b602082019050919050565b600061455f602c8361490e565b915061456a82614f62565b604082019050919050565b61457e81614a84565b82525050565b61458d81614a8e565b82525050565b60006020820190506145a860008301846142b8565b92915050565b60006020820190506145c3600083018461429a565b92915050565b60006040820190506145de60008301856142b8565b6145eb60208301846142b8565b9392505050565b60006020820190506146076000830184614325565b92915050565b60006020820190506146226000830184614334565b92915050565b600060208201905081810360008301526146428184614352565b905092915050565b600060208201905081810360008301526146638161438b565b9050919050565b60006020820190508181036000830152614683816143ae565b9050919050565b600060208201905081810360008301526146a3816143d1565b9050919050565b600060208201905081810360008301526146c3816143f4565b9050919050565b600060208201905081810360008301526146e381614417565b9050919050565b600060208201905081810360008301526147038161443a565b9050919050565b600060208201905081810360008301526147238161445d565b9050919050565b6000602082019050818103600083015261474381614480565b9050919050565b60006020820190508181036000830152614763816144a3565b9050919050565b60006020820190508181036000830152614783816144c6565b9050919050565b600060208201905081810360008301526147a3816144e9565b9050919050565b600060208201905081810360008301526147c38161450c565b9050919050565b600060208201905081810360008301526147e38161452f565b9050919050565b6000602082019050818103600083015261480381614552565b9050919050565b600060208201905061481f6000830184614575565b92915050565b600060408201905061483a6000830185614575565b818103602083015261484c81846142c7565b90509392505050565b600060a08201905061486a6000830188614575565b6148776020830187614343565b818103604083015261488981866142c7565b905061489860608301856142b8565b6148a56080830184614575565b9695505050505050565b60006020820190506148c46000830184614584565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600061492a82614a84565b915061493583614a84565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561496a57614969614b7f565b5b828201905092915050565b600061498082614a84565b915061498b83614a84565b92508261499b5761499a614bae565b5b828204905092915050565b60006149b182614a84565b91506149bc83614a84565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156149f5576149f4614b7f565b5b828202905092915050565b6000614a0b82614a84565b9150614a1683614a84565b925082821015614a2957614a28614b7f565b5b828203905092915050565b6000614a3f82614a64565b9050919050565b6000614a5182614a64565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000614aa682614aad565b9050919050565b6000614ab882614a64565b9050919050565b6000614aca82614a84565b9050919050565b60005b83811015614aef578082015181840152602081019050614ad4565b83811115614afe576000848401525b50505050565b60006002820490506001821680614b1c57607f821691505b60208210811415614b3057614b2f614bdd565b5b50919050565b6000614b4182614a84565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614b7457614b73614b7f565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f54726164696e67206e6f742079657420656e61626c65642e0000000000000000600082015250565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b614fba81614a34565b8114614fc557600080fd5b50565b614fd181614a58565b8114614fdc57600080fd5b50565b614fe881614a84565b8114614ff357600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212206198863d24d149b57983bca6e6a88d17475934a9b216d1ac0f750df1ba79b0ab64736f6c63430008040033

Deployed Bytecode Sourcemap

14366:16515:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16696:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17608:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18729:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15575:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16973:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17777:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14591:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19671:253;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16882:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20275:479;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18098:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15377:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18838:377;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30242:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19227:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15623:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19932:335;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30107:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15458:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17076:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5997:148;;;;;;;;;;;;;:::i;:::-;;16153:442;;;;;;;;;;;;;:::i;:::-;;18601:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5772:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30487:141;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16787:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18324:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14490:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17282:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16607:81;;;;;;;;;;;;;:::i;:::-;;17457:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30365:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6153:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16696:83;16733:13;16766:5;16759:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16696:83;:::o;17608:161::-;17683:4;17700:39;17709:12;:10;:12::i;:::-;17723:7;17732:6;17700:8;:39::i;:::-;17757:4;17750:11;;17608:161;;;;:::o;18729:87::-;18771:7;18798:10;;18791:17;;18729:87;:::o;15575:41::-;;;;;;;;;;;;;:::o;16973:95::-;17026:7;17053;;17046:14;;16973:95;:::o;17777:313::-;17875:4;17892:36;17902:6;17910:9;17921:6;17892:9;:36::i;:::-;17939:121;17948:6;17956:12;:10;:12::i;:::-;17970:89;18008:6;17970:89;;;;;;;;;;;;;;;;;:11;:19;17982:6;17970:19;;;;;;;;;;;;;;;:33;17990:12;:10;:12::i;:::-;17970:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;17939:8;:121::i;:::-;18078:4;18071:11;;17777:313;;;;;:::o;14591:81::-;;;:::o;19671:253::-;19737:7;19776;;19765;:18;;19757:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;19841:19;19864:10;:8;:10::i;:::-;19841:33;;19892:24;19904:11;19892:7;:11;;:24;;;;:::i;:::-;19885:31;;;19671:253;;;:::o;16882:83::-;16923:5;16948:9;;;;;;;;;;;16941:16;;16882:83;:::o;20275:479::-;5916:12;:10;:12::i;:::-;5906:22;;:6;;;;;;;;;;:22;;;5898:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20357:11:::1;:20;20369:7;20357:20;;;;;;;;;;;;;;;;;;;;;;;;;20349:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;20425:9;20420:327;20444:9;:16;;;;20440:1;:20;20420:327;;;20502:7;20486:23;;:9;20496:1;20486:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;20482:254;;;20545:9;20574:1;20555:9;:16;;;;:20;;;;:::i;:::-;20545:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20530:9;20540:1;20530:12;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;20614:1;20595:7;:16;20603:7;20595:16;;;;;;;;;;;;;;;:20;;;;20657:5;20634:11;:20;20646:7;20634:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;20681:9;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20715:5;;20482:254;20462:3;;;;;:::i;:::-;;;;20420:327;;;;20275:479:::0;:::o;18098:218::-;18186:4;18203:83;18212:12;:10;:12::i;:::-;18226:7;18235:50;18274:10;18235:11;:25;18247:12;:10;:12::i;:::-;18235:25;;;;;;;;;;;;;;;:34;18261:7;18235:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;18203:8;:83::i;:::-;18304:4;18297:11;;18098:218;;;;:::o;15377:26::-;;;;:::o;18838:377::-;18890:14;18907:12;:10;:12::i;:::-;18890:29;;18939:11;:19;18951:6;18939:19;;;;;;;;;;;;;;;;;;;;;;;;;18938:20;18930:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;19019:15;19043:19;19054:7;19043:10;:19::i;:::-;19018:44;;;;;;;19091:28;19111:7;19091;:15;19099:6;19091:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;19073:7;:15;19081:6;19073:15;;;;;;;;;;;;;;;:46;;;;19140:20;19152:7;19140;;:11;;:20;;;;:::i;:::-;19130:7;:30;;;;19184:23;19199:7;19184:10;;:14;;:23;;;;:::i;:::-;19171:10;:36;;;;18838:377;;;:::o;30242:111::-;5916:12;:10;:12::i;:::-;5906:22;;:6;;;;;;;;;;:22;;;5898:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30341:4:::1;30311:18;:27;30330:7;30311:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;30242:111:::0;:::o;19227:436::-;19317:7;19356;;19345;:18;;19337:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;19415:17;19410:246;;19450:15;19474:19;19485:7;19474:10;:19::i;:::-;19449:44;;;;;;;19515:7;19508:14;;;;;19410:246;19557:23;19588:19;19599:7;19588:10;:19::i;:::-;19555:52;;;;;;;19629:15;19622:22;;;19227:436;;;;;:::o;15623:28::-;;;;;;;;;;;;;:::o;19932:335::-;5916:12;:10;:12::i;:::-;5906:22;;:6;;;;;;;;;;:22;;;5898:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20017:11:::1;:20;20029:7;20017:20;;;;;;;;;;;;;;;;;;;;;;;;;20016:21;20008:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;20102:1;20083:7;:16;20091:7;20083:16;;;;;;;;;;;;;;;;:20;20080:108;;;20139:37;20159:7;:16;20167:7;20159:16;;;;;;;;;;;;;;;;20139:19;:37::i;:::-;20120:7;:16;20128:7;20120:16;;;;;;;;;;;;;;;:56;;;;20080:108;20221:4;20198:11;:20;20210:7;20198:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;20236:9;20251:7;20236:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19932:335:::0;:::o;30107:123::-;30171:4;30195:18;:27;30214:7;30195:27;;;;;;;;;;;;;;;;;;;;;;;;;30188:34;;30107:123;;;:::o;15458:32::-;;;;:::o;17076:198::-;17142:7;17166:11;:20;17178:7;17166:20;;;;;;;;;;;;;;;;;;;;;;;;;17162:49;;;17195:7;:16;17203:7;17195:16;;;;;;;;;;;;;;;;17188:23;;;;17162:49;17229:37;17249:7;:16;17257:7;17249:16;;;;;;;;;;;;;;;;17229:19;:37::i;:::-;17222:44;;17076:198;;;;:::o;5997:148::-;5916:12;:10;:12::i;:::-;5906:22;;:6;;;;;;;;;;:22;;;5898:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6104:1:::1;6067:40;;6088:6;::::0;::::1;;;;;;;;6067:40;;;;;;;;;;;;6135:1;6118:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;5997:148::o:0;16153:442::-;5916:12;:10;:12::i;:::-;5906:22;;:6;;;;;;;;;;:22;;;5898:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16209:35:::1;16266:42;16209:100;;16354:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16336:66;;;16411:4;16418:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16336:106;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16320:13;;:122;;;;;;;;;;;;;;;;;;16473:16;16455:15;;:34;;;;;;;;;;;;;;;;;;16532:4;16502:18;:27;16521:7;:5;:7::i;:::-;16502:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;16583:4;16547:18;:33;16574:4;16547:33;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;5976:1;16153:442::o:0;18601:120::-;18669:4;18693:11;:20;18705:7;18693:20;;;;;;;;;;;;;;;;;;;;;;;;;18686:27;;18601:120;;;:::o;5772:79::-;5810:7;5837:6;;;;;;;;;;;5830:13;;5772:79;:::o;30487:141::-;5916:12;:10;:12::i;:::-;5906:22;;:6;;;;;;;;;;:22;;;5898:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30602:17:::1;30575:16;;:45;;;;;;;;;;;;;;;;;;30487:141:::0;:::o;16787:87::-;16826:13;16859:7;16852:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16787:87;:::o;18324:269::-;18417:4;18434:129;18443:12;:10;:12::i;:::-;18457:7;18466:96;18505:15;18466:96;;;;;;;;;;;;;;;;;:11;:25;18478:12;:10;:12::i;:::-;18466:25;;;;;;;;;;;;;;;:34;18492:7;18466:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;18434:8;:129::i;:::-;18581:4;18574:11;;18324:269;;;;:::o;14490:93::-;;;;;;;;;;;;;:::o;17282:167::-;17360:4;17377:42;17387:12;:10;:12::i;:::-;17401:9;17412:6;17377:9;:42::i;:::-;17437:4;17430:11;;17282:167;;;;:::o;16607:81::-;5916:12;:10;:12::i;:::-;5906:22;;:6;;;;;;;;;;:22;;;5898:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16676:4:::1;16662:11;::::0;:18:::1;;;;;;;;;;;;;;;;;;16607:81::o:0;17457:143::-;17538:7;17565:11;:18;17577:5;17565:18;;;;;;;;;;;;;;;:27;17584:7;17565:27;;;;;;;;;;;;;;;;17558:34;;17457:143;;;;:::o;30365:110::-;5916:12;:10;:12::i;:::-;5906:22;;:6;;;;;;;;;;:22;;;5898:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30462:5:::1;30432:18;:27;30451:7;30432:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;30365:110:::0;:::o;6153:244::-;5916:12;:10;:12::i;:::-;5906:22;;:6;;;;;;;;;;:22;;;5898:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6262:1:::1;6242:22;;:8;:22;;;;6234:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;6352:8;6323:38;;6344:6;::::0;::::1;;;;;;;;6323:38;;;;;;;;;;;;6381:8;6372:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;6153:244:::0;:::o;60:115::-;113:15;156:10;141:26;;60:115;:::o;20762:337::-;20872:1;20855:19;;:5;:19;;;;20847:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20953:1;20934:21;;:7;:21;;;;20926:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21037:6;21007:11;:18;21019:5;21007:18;;;;;;;;;;;;;;;:27;21026:7;21007:27;;;;;;;;;;;;;;;:36;;;;21075:7;21059:32;;21068:5;21059:32;;;21084:6;21059:32;;;;;;:::i;:::-;;;;;;;;20762:337;;;:::o;21107:1081::-;21245:1;21229:18;;:4;:18;;;;21221:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21322:1;21308:16;;:2;:16;;;;21300:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;21392:1;21383:6;:10;21375:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;21460:7;:5;:7::i;:::-;21453:14;;:4;:14;;;;:30;;;;;21476:7;:5;:7::i;:::-;21471:12;;:2;:12;;;;21453:30;21449:84;;;21493:11;;;;;;;;;;21485:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;21449:84;21595:28;21626:24;21644:4;21626:9;:24::i;:::-;21595:55;;21676:6;;;;;;;;;;;21675:7;:30;;;;;21692:13;;;;;;;;;;;21686:19;;:2;:19;;;21675:30;21671:208;;;21748:1;21725:20;:24;21722:146;;;21796:1;21773:20;:24;21770:78;;;21816:32;21827:20;21816:10;:32::i;:::-;21770:78;21722:146;21671:208;21899:12;21986:13;;;;;;;;;;;21980:19;;:4;:19;;;:40;;;;22007:13;;;;;;;;;;;22003:17;;:2;:17;;;21980:40;21979:99;;;;;22027:18;:24;22046:4;22027:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;22055:18;:22;22074:2;22055:22;;;;;;;;;;;;;;;;;;;;;;;;;22027:50;22025:53;21979:99;21974:148;;;22106:4;22096:14;;21974:148;22142:38;22157:4;22162:2;22165:6;22172:7;22142:14;:38::i;:::-;21107:1081;;;;;:::o;1471:192::-;1557:7;1590:1;1585;:6;;1593:12;1577:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1617:9;1633:1;1629;:5;;;;:::i;:::-;1617:17;;1654:1;1647:8;;;1471:192;;;;;:::o;28257:163::-;28298:7;28319:15;28336;28355:19;:17;:19::i;:::-;28318:56;;;;28392:20;28404:7;28392;:11;;:20;;;;:::i;:::-;28385:27;;;;28257:163;:::o;1931:132::-;1989:7;2016:39;2020:1;2023;2016:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2009:46;;1931:132;;;;:::o;1138:181::-;1196:7;1216:9;1232:1;1228;:5;;;;:::i;:::-;1216:17;;1257:1;1252;:6;;1244:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;1310:1;1303:8;;;1138:181;;;;:::o;27055:419::-;27114:7;27123;27132;27141;27150;27159;27180:23;27205:12;27219:18;27241:20;27253:7;27241:11;:20::i;:::-;27179:82;;;;;;27273:15;27290:23;27315:12;27331:50;27343:7;27352:4;27358:10;27370;:8;:10::i;:::-;27331:11;:50::i;:::-;27272:109;;;;;;27400:7;27409:15;27426:4;27432:15;27449:4;27455:10;27392:74;;;;;;;;;;;;;;;;;;27055:419;;;;;;;:::o;1327:136::-;1385:7;1412:43;1416:1;1419;1412:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1405:50;;1327:136;;;;:::o;22196:334::-;15954:4;15945:6;;:13;;;;;;;;;;;;;;;;;;22277:38:::1;22294:20;22277:16;:38::i;:::-;22373:26;22402:21;22373:50;;22458:1;22437:18;:22;22434:89;;;22476:35;22489:21;22476:12;:35::i;:::-;22434:89;15969:1;15990:5:::0;15981:6;;:14;;;;;;;;;;;;;;;;;;22196:334;:::o;23860:704::-;23971:7;23967:40;;23993:14;:12;:14::i;:::-;23967:40;24032:11;:19;24044:6;24032:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;24056:11;:22;24068:9;24056:22;;;;;;;;;;;;;;;;;;;;;;;;;24055:23;24032:46;24028:467;;;24095:48;24117:6;24125:9;24136:6;24095:21;:48::i;:::-;24028:467;;;24166:11;:19;24178:6;24166:19;;;;;;;;;;;;;;;;;;;;;;;;;24165:20;:46;;;;;24189:11;:22;24201:9;24189:22;;;;;;;;;;;;;;;;;;;;;;;;;24165:46;24161:334;;;24228:46;24248:6;24256:9;24267:6;24228:19;:46::i;:::-;24161:334;;;24296:11;:19;24308:6;24296:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;24319:11;:22;24331:9;24319:22;;;;;;;;;;;;;;;;;;;;;;;;;24296:45;24292:203;;;24358:48;24380:6;24388:9;24399:6;24358:21;:48::i;:::-;24292:203;;;24439:44;24457:6;24465:9;24476:6;24439:17;:44::i;:::-;24292:203;24161:334;24028:467;24519:7;24515:41;;24541:15;:13;:15::i;:::-;24515:41;23860:704;;;;:::o;28428:561::-;28478:7;28487;28507:15;28525:7;;28507:25;;28543:15;28561:7;;28543:25;;28590:9;28585:289;28609:9;:16;;;;28605:1;:20;28585:289;;;28675:7;28651;:21;28659:9;28669:1;28659:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28651:21;;;;;;;;;;;;;;;;:31;:66;;;;28710:7;28686;:21;28694:9;28704:1;28694:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28686:21;;;;;;;;;;;;;;;;:31;28651:66;28647:97;;;28727:7;;28736;;28719:25;;;;;;;;;28647:97;28769:34;28781:7;:21;28789:9;28799:1;28789:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28781:21;;;;;;;;;;;;;;;;28769:7;:11;;:34;;;;:::i;:::-;28759:44;;28828:34;28840:7;:21;28848:9;28858:1;28848:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28840:21;;;;;;;;;;;;;;;;28828:7;:11;;:34;;;;:::i;:::-;28818:44;;28627:3;;;;;:::i;:::-;;;;28585:289;;;;28898:20;28910:7;;28898;;:11;;:20;;;;:::i;:::-;28888:7;:30;28884:61;;;28928:7;;28937;;28920:25;;;;;;;;28884:61;28964:7;28973;28956:25;;;;;;28428:561;;;:::o;2071:278::-;2157:7;2189:1;2185;:5;2192:12;2177:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2216:9;2232:1;2228;:5;;;;:::i;:::-;2216:17;;2340:1;2333:8;;;2071:278;;;;;:::o;27482:330::-;27542:7;27551;27560;27580:12;27595:24;27611:7;27595:15;:24::i;:::-;27580:39;;27630:18;27651:30;27673:7;27651:21;:30::i;:::-;27630:51;;27692:23;27718:33;27740:10;27718:17;27730:4;27718:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;27692:59;;27770:15;27787:4;27793:10;27762:42;;;;;;;;;27482:330;;;;;:::o;27820:429::-;27935:7;27944;27953;27973:15;27991:24;28003:11;27991:7;:11;;:24;;;;:::i;:::-;27973:42;;28026:12;28041:21;28050:11;28041:4;:8;;:21;;;;:::i;:::-;28026:36;;28073:18;28094:27;28109:11;28094:10;:14;;:27;;;;:::i;:::-;28073:48;;28132:23;28158:33;28180:10;28158:17;28170:4;28158:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;28132:59;;28210:7;28219:15;28236:4;28202:39;;;;;;;;;;27820:429;;;;;;;;:::o;22659:666::-;22785:21;22823:1;22809:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22785:40;;22854:4;22836;22841:1;22836:7;;;;;;;;;;;;;;;;;;;;;:23;;;;;;;;;;;22880:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22870:4;22875:1;22870:7;;;;;;;;;;;;;;;;;;;;;:32;;;;;;;;;;;22915:62;22932:4;22947:15;;;;;;;;;;;22965:11;22915:8;:62::i;:::-;23016:15;;;;;;;;;;;:66;;;23097:11;23123:1;23167:4;23194;23230:15;23016:240;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23282:35;23299:11;23312:4;23282:35;;;;;;;:::i;:::-;;;;;;;;22659:666;;:::o;22542:98::-;22599:16;;;;;;;;;;;:25;;:33;22625:6;22599:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22542:98;:::o;29712:250::-;29769:1;29758:7;;:12;:34;;;;;29791:1;29774:13;;:18;29758:34;29755:46;;;29794:7;;29755:46;29839:7;;29821:15;:25;;;;29881:13;;29857:21;:37;;;;29925:1;29915:7;:11;;;;29953:1;29937:13;:17;;;;29712:250;:::o;25676:566::-;25779:15;25796:23;25821:12;25835:23;25860:12;25874:18;25896:19;25907:7;25896:10;:19::i;:::-;25778:137;;;;;;;;;;;;25944:28;25964:7;25944;:15;25952:6;25944:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;25926:7;:15;25934:6;25926:15;;;;;;;;;;;;;;;:46;;;;26001:28;26021:7;26001;:15;26009:6;26001:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;25983:7;:15;25991:6;25983:15;;;;;;;;;;;;;;;:46;;;;26061:39;26084:15;26061:7;:18;26069:9;26061:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;26040:7;:18;26048:9;26040:18;;;;;;;;;;;;;;;:60;;;;26114:26;26129:10;26114:14;:26::i;:::-;26151:23;26163:4;26169;26151:11;:23::i;:::-;26207:9;26190:44;;26199:6;26190:44;;;26218:15;26190:44;;;;;;:::i;:::-;;;;;;;;25676:566;;;;;;;;;:::o;25082:586::-;25183:15;25200:23;25225:12;25239:23;25264:12;25278:18;25300:19;25311:7;25300:10;:19::i;:::-;25182:137;;;;;;;;;;;;25348:28;25368:7;25348;:15;25356:6;25348:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;25330:7;:15;25338:6;25330:15;;;;;;;;;;;;;;;:46;;;;25408:39;25431:15;25408:7;:18;25416:9;25408:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;25387:7;:18;25395:9;25387:18;;;;;;;;;;;;;;;:60;;;;25479:39;25502:15;25479:7;:18;25487:9;25479:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;25458:7;:18;25466:9;25458:18;;;;;;;;;;;;;;;:60;;;;25540:26;25555:10;25540:14;:26::i;:::-;25577:23;25589:4;25595;25577:11;:23::i;:::-;25633:9;25616:44;;25625:6;25616:44;;;25644:15;25616:44;;;;;;:::i;:::-;;;;;;;;25082:586;;;;;;;;;:::o;26250:642::-;26353:15;26370:23;26395:12;26409:23;26434:12;26448:18;26470:19;26481:7;26470:10;:19::i;:::-;26352:137;;;;;;;;;;;;26518:28;26538:7;26518;:15;26526:6;26518:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;26500:7;:15;26508:6;26500:15;;;;;;;;;;;;;;;:46;;;;26575:28;26595:7;26575;:15;26583:6;26575:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;26557:7;:15;26565:6;26557:15;;;;;;;;;;;;;;;:46;;;;26635:39;26658:15;26635:7;:18;26643:9;26635:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;26614:7;:18;26622:9;26614:18;;;;;;;;;;;;;;;:60;;;;26706:39;26729:15;26706:7;:18;26714:9;26706:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;26685:7;:18;26693:9;26685:18;;;;;;;;;;;;;;;:60;;;;26764:26;26779:10;26764:14;:26::i;:::-;26801:23;26813:4;26819;26801:11;:23::i;:::-;26857:9;26840:44;;26849:6;26840:44;;;26868:15;26840:44;;;;;;:::i;:::-;;;;;;;;26250:642;;;;;;;;;:::o;24572:502::-;24671:15;24688:23;24713:12;24727:23;24752:12;24766:18;24788:19;24799:7;24788:10;:19::i;:::-;24670:137;;;;;;;;;;;;24836:28;24856:7;24836;:15;24844:6;24836:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;24818:7;:15;24826:6;24818:15;;;;;;;;;;;;;;;:46;;;;24896:39;24919:15;24896:7;:18;24904:9;24896:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;24875:7;:18;24883:9;24875:18;;;;;;;;;;;;;;;:60;;;;24946:26;24961:10;24946:14;:26::i;:::-;24983:23;24995:4;25001;24983:11;:23::i;:::-;25039:9;25022:44;;25031:6;25022:44;;;25050:15;25022:44;;;;;;:::i;:::-;;;;;;;;24572:502;;;;;;;;;:::o;29974:125::-;30028:15;;30018:7;:25;;;;30070:21;;30054:13;:37;;;;29974:125::o;29368:154::-;29432:7;29459:55;29498:5;29459:20;29471:7;;29459;:11;;:20;;;;:::i;:::-;:24;;:55;;;;:::i;:::-;29452:62;;29368:154;;;:::o;29534:166::-;29604:7;29631:61;29676:5;29631:26;29643:13;;29631:7;:11;;:26;;;;:::i;:::-;:30;;:61;;;;:::i;:::-;29624:68;;29534:166;;;:::o;1671:250::-;1729:7;1758:1;1753;:6;1749:47;;;1783:1;1776:8;;;;1749:47;1808:9;1824:1;1820;:5;;;;:::i;:::-;1808:17;;1853:1;1848;1844;:5;;;;:::i;:::-;:10;1836:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;1912:1;1905:8;;;1671:250;;;;;:::o;29001:355::-;29064:19;29087:10;:8;:10::i;:::-;29064:33;;29108:18;29129:27;29144:11;29129:10;:14;;:27;;;;:::i;:::-;29108:48;;29192:38;29219:10;29192:7;:22;29208:4;29192:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;29167:7;:22;29183:4;29167:22;;;;;;;;;;;;;;;:63;;;;29244:11;:26;29264:4;29244:26;;;;;;;;;;;;;;;;;;;;;;;;;29241:107;;;29310:38;29337:10;29310:7;:22;29326:4;29310:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;29285:7;:22;29301:4;29285:22;;;;;;;;;;;;;;;:63;;;;29241:107;29001:355;;;:::o;26900:147::-;26978:17;26990:4;26978:7;;:11;;:17;;;;:::i;:::-;26968:7;:27;;;;27019:20;27034:4;27019:10;;:14;;:20;;;;:::i;:::-;27006:10;:33;;;;26900:147;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:143::-;209:5;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;215:80;;;;:::o;301:133::-;344:5;382:6;369:20;360:29;;398:30;422:5;398:30;:::i;:::-;350:84;;;;:::o;440:139::-;486:5;524:6;511:20;502:29;;540:33;567:5;540:33;:::i;:::-;492:87;;;;:::o;585:262::-;644:6;693:2;681:9;672:7;668:23;664:32;661:2;;;709:1;706;699:12;661:2;752:1;777:53;822:7;813:6;802:9;798:22;777:53;:::i;:::-;767:63;;723:117;651:196;;;;:::o;853:284::-;923:6;972:2;960:9;951:7;947:23;943:32;940:2;;;988:1;985;978:12;940:2;1031:1;1056:64;1112:7;1103:6;1092:9;1088:22;1056:64;:::i;:::-;1046:74;;1002:128;930:207;;;;:::o;1143:407::-;1211:6;1219;1268:2;1256:9;1247:7;1243:23;1239:32;1236:2;;;1284:1;1281;1274:12;1236:2;1327:1;1352:53;1397:7;1388:6;1377:9;1373:22;1352:53;:::i;:::-;1342:63;;1298:117;1454:2;1480:53;1525:7;1516:6;1505:9;1501:22;1480:53;:::i;:::-;1470:63;;1425:118;1226:324;;;;;:::o;1556:552::-;1633:6;1641;1649;1698:2;1686:9;1677:7;1673:23;1669:32;1666:2;;;1714:1;1711;1704:12;1666:2;1757:1;1782:53;1827:7;1818:6;1807:9;1803:22;1782:53;:::i;:::-;1772:63;;1728:117;1884:2;1910:53;1955:7;1946:6;1935:9;1931:22;1910:53;:::i;:::-;1900:63;;1855:118;2012:2;2038:53;2083:7;2074:6;2063:9;2059:22;2038:53;:::i;:::-;2028:63;;1983:118;1656:452;;;;;:::o;2114:407::-;2182:6;2190;2239:2;2227:9;2218:7;2214:23;2210:32;2207:2;;;2255:1;2252;2245:12;2207:2;2298:1;2323:53;2368:7;2359:6;2348:9;2344:22;2323:53;:::i;:::-;2313:63;;2269:117;2425:2;2451:53;2496:7;2487:6;2476:9;2472:22;2451:53;:::i;:::-;2441:63;;2396:118;2197:324;;;;;:::o;2527:262::-;2586:6;2635:2;2623:9;2614:7;2610:23;2606:32;2603:2;;;2651:1;2648;2641:12;2603:2;2694:1;2719:53;2764:7;2755:6;2744:9;2740:22;2719:53;:::i;:::-;2709:63;;2665:117;2593:196;;;;:::o;2795:401::-;2860:6;2868;2917:2;2905:9;2896:7;2892:23;2888:32;2885:2;;;2933:1;2930;2923:12;2885:2;2976:1;3001:53;3046:7;3037:6;3026:9;3022:22;3001:53;:::i;:::-;2991:63;;2947:117;3103:2;3129:50;3171:7;3162:6;3151:9;3147:22;3129:50;:::i;:::-;3119:60;;3074:115;2875:321;;;;;:::o;3202:179::-;3271:10;3292:46;3334:3;3326:6;3292:46;:::i;:::-;3370:4;3365:3;3361:14;3347:28;;3282:99;;;;:::o;3387:142::-;3490:32;3516:5;3490:32;:::i;:::-;3485:3;3478:45;3468:61;;:::o;3535:108::-;3612:24;3630:5;3612:24;:::i;:::-;3607:3;3600:37;3590:53;;:::o;3649:118::-;3736:24;3754:5;3736:24;:::i;:::-;3731:3;3724:37;3714:53;;:::o;3803:732::-;3922:3;3951:54;3999:5;3951:54;:::i;:::-;4021:86;4100:6;4095:3;4021:86;:::i;:::-;4014:93;;4131:56;4181:5;4131:56;:::i;:::-;4210:7;4241:1;4226:284;4251:6;4248:1;4245:13;4226:284;;;4327:6;4321:13;4354:63;4413:3;4398:13;4354:63;:::i;:::-;4347:70;;4440:60;4493:6;4440:60;:::i;:::-;4430:70;;4286:224;4273:1;4270;4266:9;4261:14;;4226:284;;;4230:14;4526:3;4519:10;;3927:608;;;;;;;:::o;4541:109::-;4622:21;4637:5;4622:21;:::i;:::-;4617:3;4610:34;4600:50;;:::o;4656:185::-;4770:64;4828:5;4770:64;:::i;:::-;4765:3;4758:77;4748:93;;:::o;4847:147::-;4942:45;4981:5;4942:45;:::i;:::-;4937:3;4930:58;4920:74;;:::o;5000:364::-;5088:3;5116:39;5149:5;5116:39;:::i;:::-;5171:71;5235:6;5230:3;5171:71;:::i;:::-;5164:78;;5251:52;5296:6;5291:3;5284:4;5277:5;5273:16;5251:52;:::i;:::-;5328:29;5350:6;5328:29;:::i;:::-;5323:3;5319:39;5312:46;;5092:272;;;;;:::o;5370:366::-;5512:3;5533:67;5597:2;5592:3;5533:67;:::i;:::-;5526:74;;5609:93;5698:3;5609:93;:::i;:::-;5727:2;5722:3;5718:12;5711:19;;5516:220;;;:::o;5742:366::-;5884:3;5905:67;5969:2;5964:3;5905:67;:::i;:::-;5898:74;;5981:93;6070:3;5981:93;:::i;:::-;6099:2;6094:3;6090:12;6083:19;;5888:220;;;:::o;6114:366::-;6256:3;6277:67;6341:2;6336:3;6277:67;:::i;:::-;6270:74;;6353:93;6442:3;6353:93;:::i;:::-;6471:2;6466:3;6462:12;6455:19;;6260:220;;;:::o;6486:366::-;6628:3;6649:67;6713:2;6708:3;6649:67;:::i;:::-;6642:74;;6725:93;6814:3;6725:93;:::i;:::-;6843:2;6838:3;6834:12;6827:19;;6632:220;;;:::o;6858:366::-;7000:3;7021:67;7085:2;7080:3;7021:67;:::i;:::-;7014:74;;7097:93;7186:3;7097:93;:::i;:::-;7215:2;7210:3;7206:12;7199:19;;7004:220;;;:::o;7230:366::-;7372:3;7393:67;7457:2;7452:3;7393:67;:::i;:::-;7386:74;;7469:93;7558:3;7469:93;:::i;:::-;7587:2;7582:3;7578:12;7571:19;;7376:220;;;:::o;7602:366::-;7744:3;7765:67;7829:2;7824:3;7765:67;:::i;:::-;7758:74;;7841:93;7930:3;7841:93;:::i;:::-;7959:2;7954:3;7950:12;7943:19;;7748:220;;;:::o;7974:366::-;8116:3;8137:67;8201:2;8196:3;8137:67;:::i;:::-;8130:74;;8213:93;8302:3;8213:93;:::i;:::-;8331:2;8326:3;8322:12;8315:19;;8120:220;;;:::o;8346:366::-;8488:3;8509:67;8573:2;8568:3;8509:67;:::i;:::-;8502:74;;8585:93;8674:3;8585:93;:::i;:::-;8703:2;8698:3;8694:12;8687:19;;8492:220;;;:::o;8718:366::-;8860:3;8881:67;8945:2;8940:3;8881:67;:::i;:::-;8874:74;;8957:93;9046:3;8957:93;:::i;:::-;9075:2;9070:3;9066:12;9059:19;;8864:220;;;:::o;9090:366::-;9232:3;9253:67;9317:2;9312:3;9253:67;:::i;:::-;9246:74;;9329:93;9418:3;9329:93;:::i;:::-;9447:2;9442:3;9438:12;9431:19;;9236:220;;;:::o;9462:366::-;9604:3;9625:67;9689:2;9684:3;9625:67;:::i;:::-;9618:74;;9701:93;9790:3;9701:93;:::i;:::-;9819:2;9814:3;9810:12;9803:19;;9608:220;;;:::o;9834:366::-;9976:3;9997:67;10061:2;10056:3;9997:67;:::i;:::-;9990:74;;10073:93;10162:3;10073:93;:::i;:::-;10191:2;10186:3;10182:12;10175:19;;9980:220;;;:::o;10206:366::-;10348:3;10369:67;10433:2;10428:3;10369:67;:::i;:::-;10362:74;;10445:93;10534:3;10445:93;:::i;:::-;10563:2;10558:3;10554:12;10547:19;;10352:220;;;:::o;10578:118::-;10665:24;10683:5;10665:24;:::i;:::-;10660:3;10653:37;10643:53;;:::o;10702:112::-;10785:22;10801:5;10785:22;:::i;:::-;10780:3;10773:35;10763:51;;:::o;10820:222::-;10913:4;10951:2;10940:9;10936:18;10928:26;;10964:71;11032:1;11021:9;11017:17;11008:6;10964:71;:::i;:::-;10918:124;;;;:::o;11048:254::-;11157:4;11195:2;11184:9;11180:18;11172:26;;11208:87;11292:1;11281:9;11277:17;11268:6;11208:87;:::i;:::-;11162:140;;;;:::o;11308:332::-;11429:4;11467:2;11456:9;11452:18;11444:26;;11480:71;11548:1;11537:9;11533:17;11524:6;11480:71;:::i;:::-;11561:72;11629:2;11618:9;11614:18;11605:6;11561:72;:::i;:::-;11434:206;;;;;:::o;11646:210::-;11733:4;11771:2;11760:9;11756:18;11748:26;;11784:65;11846:1;11835:9;11831:17;11822:6;11784:65;:::i;:::-;11738:118;;;;:::o;11862:276::-;11982:4;12020:2;12009:9;12005:18;11997:26;;12033:98;12128:1;12117:9;12113:17;12104:6;12033:98;:::i;:::-;11987:151;;;;:::o;12144:313::-;12257:4;12295:2;12284:9;12280:18;12272:26;;12344:9;12338:4;12334:20;12330:1;12319:9;12315:17;12308:47;12372:78;12445:4;12436:6;12372:78;:::i;:::-;12364:86;;12262:195;;;;:::o;12463:419::-;12629:4;12667:2;12656:9;12652:18;12644:26;;12716:9;12710:4;12706:20;12702:1;12691:9;12687:17;12680:47;12744:131;12870:4;12744:131;:::i;:::-;12736:139;;12634:248;;;:::o;12888:419::-;13054:4;13092:2;13081:9;13077:18;13069:26;;13141:9;13135:4;13131:20;13127:1;13116:9;13112:17;13105:47;13169:131;13295:4;13169:131;:::i;:::-;13161:139;;13059:248;;;:::o;13313:419::-;13479:4;13517:2;13506:9;13502:18;13494:26;;13566:9;13560:4;13556:20;13552:1;13541:9;13537:17;13530:47;13594:131;13720:4;13594:131;:::i;:::-;13586:139;;13484:248;;;:::o;13738:419::-;13904:4;13942:2;13931:9;13927:18;13919:26;;13991:9;13985:4;13981:20;13977:1;13966:9;13962:17;13955:47;14019:131;14145:4;14019:131;:::i;:::-;14011:139;;13909:248;;;:::o;14163:419::-;14329:4;14367:2;14356:9;14352:18;14344:26;;14416:9;14410:4;14406:20;14402:1;14391:9;14387:17;14380:47;14444:131;14570:4;14444:131;:::i;:::-;14436:139;;14334:248;;;:::o;14588:419::-;14754:4;14792:2;14781:9;14777:18;14769:26;;14841:9;14835:4;14831:20;14827:1;14816:9;14812:17;14805:47;14869:131;14995:4;14869:131;:::i;:::-;14861:139;;14759:248;;;:::o;15013:419::-;15179:4;15217:2;15206:9;15202:18;15194:26;;15266:9;15260:4;15256:20;15252:1;15241:9;15237:17;15230:47;15294:131;15420:4;15294:131;:::i;:::-;15286:139;;15184:248;;;:::o;15438:419::-;15604:4;15642:2;15631:9;15627:18;15619:26;;15691:9;15685:4;15681:20;15677:1;15666:9;15662:17;15655:47;15719:131;15845:4;15719:131;:::i;:::-;15711:139;;15609:248;;;:::o;15863:419::-;16029:4;16067:2;16056:9;16052:18;16044:26;;16116:9;16110:4;16106:20;16102:1;16091:9;16087:17;16080:47;16144:131;16270:4;16144:131;:::i;:::-;16136:139;;16034:248;;;:::o;16288:419::-;16454:4;16492:2;16481:9;16477:18;16469:26;;16541:9;16535:4;16531:20;16527:1;16516:9;16512:17;16505:47;16569:131;16695:4;16569:131;:::i;:::-;16561:139;;16459:248;;;:::o;16713:419::-;16879:4;16917:2;16906:9;16902:18;16894:26;;16966:9;16960:4;16956:20;16952:1;16941:9;16937:17;16930:47;16994:131;17120:4;16994:131;:::i;:::-;16986:139;;16884:248;;;:::o;17138:419::-;17304:4;17342:2;17331:9;17327:18;17319:26;;17391:9;17385:4;17381:20;17377:1;17366:9;17362:17;17355:47;17419:131;17545:4;17419:131;:::i;:::-;17411:139;;17309:248;;;:::o;17563:419::-;17729:4;17767:2;17756:9;17752:18;17744:26;;17816:9;17810:4;17806:20;17802:1;17791:9;17787:17;17780:47;17844:131;17970:4;17844:131;:::i;:::-;17836:139;;17734:248;;;:::o;17988:419::-;18154:4;18192:2;18181:9;18177:18;18169:26;;18241:9;18235:4;18231:20;18227:1;18216:9;18212:17;18205:47;18269:131;18395:4;18269:131;:::i;:::-;18261:139;;18159:248;;;:::o;18413:222::-;18506:4;18544:2;18533:9;18529:18;18521:26;;18557:71;18625:1;18614:9;18610:17;18601:6;18557:71;:::i;:::-;18511:124;;;;:::o;18641:483::-;18812:4;18850:2;18839:9;18835:18;18827:26;;18863:71;18931:1;18920:9;18916:17;18907:6;18863:71;:::i;:::-;18981:9;18975:4;18971:20;18966:2;18955:9;18951:18;18944:48;19009:108;19112:4;19103:6;19009:108;:::i;:::-;19001:116;;18817:307;;;;;:::o;19130:831::-;19393:4;19431:3;19420:9;19416:19;19408:27;;19445:71;19513:1;19502:9;19498:17;19489:6;19445:71;:::i;:::-;19526:80;19602:2;19591:9;19587:18;19578:6;19526:80;:::i;:::-;19653:9;19647:4;19643:20;19638:2;19627:9;19623:18;19616:48;19681:108;19784:4;19775:6;19681:108;:::i;:::-;19673:116;;19799:72;19867:2;19856:9;19852:18;19843:6;19799:72;:::i;:::-;19881:73;19949:3;19938:9;19934:19;19925:6;19881:73;:::i;:::-;19398:563;;;;;;;;:::o;19967:214::-;20056:4;20094:2;20083:9;20079:18;20071:26;;20107:67;20171:1;20160:9;20156:17;20147:6;20107:67;:::i;:::-;20061:120;;;;:::o;20187:132::-;20254:4;20277:3;20269:11;;20307:4;20302:3;20298:14;20290:22;;20259:60;;;:::o;20325:114::-;20392:6;20426:5;20420:12;20410:22;;20399:40;;;:::o;20445:99::-;20497:6;20531:5;20525:12;20515:22;;20504:40;;;:::o;20550:113::-;20620:4;20652;20647:3;20643:14;20635:22;;20625:38;;;:::o;20669:184::-;20768:11;20802:6;20797:3;20790:19;20842:4;20837:3;20833:14;20818:29;;20780:73;;;;:::o;20859:169::-;20943:11;20977:6;20972:3;20965:19;21017:4;21012:3;21008:14;20993:29;;20955:73;;;;:::o;21034:305::-;21074:3;21093:20;21111:1;21093:20;:::i;:::-;21088:25;;21127:20;21145:1;21127:20;:::i;:::-;21122:25;;21281:1;21213:66;21209:74;21206:1;21203:81;21200:2;;;21287:18;;:::i;:::-;21200:2;21331:1;21328;21324:9;21317:16;;21078:261;;;;:::o;21345:185::-;21385:1;21402:20;21420:1;21402:20;:::i;:::-;21397:25;;21436:20;21454:1;21436:20;:::i;:::-;21431:25;;21475:1;21465:2;;21480:18;;:::i;:::-;21465:2;21522:1;21519;21515:9;21510:14;;21387:143;;;;:::o;21536:348::-;21576:7;21599:20;21617:1;21599:20;:::i;:::-;21594:25;;21633:20;21651:1;21633:20;:::i;:::-;21628:25;;21821:1;21753:66;21749:74;21746:1;21743:81;21738:1;21731:9;21724:17;21720:105;21717:2;;;21828:18;;:::i;:::-;21717:2;21876:1;21873;21869:9;21858:20;;21584:300;;;;:::o;21890:191::-;21930:4;21950:20;21968:1;21950:20;:::i;:::-;21945:25;;21984:20;22002:1;21984:20;:::i;:::-;21979:25;;22023:1;22020;22017:8;22014:2;;;22028:18;;:::i;:::-;22014:2;22073:1;22070;22066:9;22058:17;;21935:146;;;;:::o;22087:96::-;22124:7;22153:24;22171:5;22153:24;:::i;:::-;22142:35;;22132:51;;;:::o;22189:104::-;22234:7;22263:24;22281:5;22263:24;:::i;:::-;22252:35;;22242:51;;;:::o;22299:90::-;22333:7;22376:5;22369:13;22362:21;22351:32;;22341:48;;;:::o;22395:126::-;22432:7;22472:42;22465:5;22461:54;22450:65;;22440:81;;;:::o;22527:77::-;22564:7;22593:5;22582:16;;22572:32;;;:::o;22610:86::-;22645:7;22685:4;22678:5;22674:16;22663:27;;22653:43;;;:::o;22702:180::-;22779:9;22812:64;22870:5;22812:64;:::i;:::-;22799:77;;22789:93;;;:::o;22888:140::-;22965:9;22998:24;23016:5;22998:24;:::i;:::-;22985:37;;22975:53;;;:::o;23034:121::-;23092:9;23125:24;23143:5;23125:24;:::i;:::-;23112:37;;23102:53;;;:::o;23161:307::-;23229:1;23239:113;23253:6;23250:1;23247:13;23239:113;;;23338:1;23333:3;23329:11;23323:18;23319:1;23314:3;23310:11;23303:39;23275:2;23272:1;23268:10;23263:15;;23239:113;;;23370:6;23367:1;23364:13;23361:2;;;23450:1;23441:6;23436:3;23432:16;23425:27;23361:2;23210:258;;;;:::o;23474:320::-;23518:6;23555:1;23549:4;23545:12;23535:22;;23602:1;23596:4;23592:12;23623:18;23613:2;;23679:4;23671:6;23667:17;23657:27;;23613:2;23741;23733:6;23730:14;23710:18;23707:38;23704:2;;;23760:18;;:::i;:::-;23704:2;23525:269;;;;:::o;23800:233::-;23839:3;23862:24;23880:5;23862:24;:::i;:::-;23853:33;;23908:66;23901:5;23898:77;23895:2;;;23978:18;;:::i;:::-;23895:2;24025:1;24018:5;24014:13;24007:20;;23843:190;;;:::o;24039:180::-;24087:77;24084:1;24077:88;24184:4;24181:1;24174:15;24208:4;24205:1;24198:15;24225:180;24273:77;24270:1;24263:88;24370:4;24367:1;24360:15;24394:4;24391:1;24384:15;24411:180;24459:77;24456:1;24449:88;24556:4;24553:1;24546:15;24580:4;24577:1;24570:15;24597:102;24638:6;24689:2;24685:7;24680:2;24673:5;24669:14;24665:28;24655:38;;24645:54;;;:::o;24705:222::-;24845:34;24841:1;24833:6;24829:14;24822:58;24914:5;24909:2;24901:6;24897:15;24890:30;24811:116;:::o;24933:229::-;25073:34;25069:1;25061:6;25057:14;25050:58;25142:12;25137:2;25129:6;25125:15;25118:37;25039:123;:::o;25168:225::-;25308:34;25304:1;25296:6;25292:14;25285:58;25377:8;25372:2;25364:6;25360:15;25353:33;25274:119;:::o;25399:221::-;25539:34;25535:1;25527:6;25523:14;25516:58;25608:4;25603:2;25595:6;25591:15;25584:29;25505:115;:::o;25626:177::-;25766:29;25762:1;25754:6;25750:14;25743:53;25732:71;:::o;25809:177::-;25949:29;25945:1;25937:6;25933:14;25926:53;25915:71;:::o;25992:181::-;26132:33;26128:1;26120:6;26116:14;26109:57;26098:75;:::o;26179:220::-;26319:34;26315:1;26307:6;26303:14;26296:58;26388:3;26383:2;26375:6;26371:15;26364:28;26285:114;:::o;26405:182::-;26545:34;26541:1;26533:6;26529:14;26522:58;26511:76;:::o;26593:228::-;26733:34;26729:1;26721:6;26717:14;26710:58;26802:11;26797:2;26789:6;26785:15;26778:36;26699:122;:::o;26827:224::-;26967:34;26963:1;26955:6;26951:14;26944:58;27036:7;27031:2;27023:6;27019:15;27012:32;26933:118;:::o;27057:223::-;27197:34;27193:1;27185:6;27181:14;27174:58;27266:6;27261:2;27253:6;27249:15;27242:31;27163:117;:::o;27286:174::-;27426:26;27422:1;27414:6;27410:14;27403:50;27392:68;:::o;27466:231::-;27606:34;27602:1;27594:6;27590:14;27583:58;27675:14;27670:2;27662:6;27658:15;27651:39;27572:125;:::o;27703:122::-;27776:24;27794:5;27776:24;:::i;:::-;27769:5;27766:35;27756:2;;27815:1;27812;27805:12;27756:2;27746:79;:::o;27831:116::-;27901:21;27916:5;27901:21;:::i;:::-;27894:5;27891:32;27881:2;;27937:1;27934;27927:12;27881:2;27871:76;:::o;27953:122::-;28026:24;28044:5;28026:24;:::i;:::-;28019:5;28016:35;28006:2;;28065:1;28062;28055:12;28006:2;27996:79;:::o

Swarm Source

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