ETH Price: $3,124.41 (+1.93%)

Token

Floki Pup (FLOKIPUP)
 

Overview

Max Total Supply

1,000,000,000,000 FLOKIPUP

Holders

888

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
557,492,423.124641658 FLOKIPUP

Value
$0.00
0xbc1b75775f6f8b92f5ee0a231b1a3a5be6a82d85
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-10-13
*/

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 marketingWallet = payable(0xe0a3A76B119085AC3eb4415F2325e4E3Dde5e51C); // Marketing Wallet
    address payable public buybackWallet = payable (0xf11E392DC052afa60377BF5AC23266cbCe7f0B1b); // Buyback Wallet
    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _isSniper;
    

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

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


    uint256 public reflectionFee = 2; // 2% reflectionFee on buys 
    uint256 public sellFee = 10; // 10% fee on sells, 2% buyback, 8% marketing/team/developement

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

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

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

        uniswapV2Router = _uniswapV2Router;

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

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

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

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

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

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

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

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

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

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

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

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

    function isExcludedFromReward(address account) public view returns (bool) {
        return _isExcluded[account];
    }

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

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

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

    function excludeFromReward(address account) public onlyOwner() {

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buybackWallet","outputs":[{"internalType":"address payable","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":[{"internalType":"address","name":"account","type":"address"}],"name":"isSniper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reflectionFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_buybackWallet","type":"address"}],"name":"setBuybackWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"rate","type":"uint256"}],"name":"setFeeRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"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"}]

608060405273e0a3a76b119085ac3eb4415f2325e4e3dde5e51c600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073f11e392dc052afa60377bf5ac23266cbce7f0b1b600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550683635c9adc5dea00000600c55600c54600019620000cd9190620004b4565b600019620000dc919062000439565b600d556040518060400160405280600981526020017f466c6f6b69205075700000000000000000000000000000000000000000000000815250600f90805190602001906200012c9291906200035b565b506040518060400160405280600881526020017f464c4f4b49505550000000000000000000000000000000000000000000000000815250601090805190602001906200017a9291906200035b565b506009601160006101000a81548160ff021916908360ff1602179055506002601255600a60135560026016556000601960156101000a81548160ff021916908315150217905550348015620001ce57600080fd5b506000620001e16200035360201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600d5460056000620002966200035360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550620002e46200035360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600c546040516200034591906200041c565b60405180910390a362000579565b600033905090565b82805462000369906200047e565b90600052602060002090601f0160209004810192826200038d5760008555620003d9565b82601f10620003a857805160ff1916838001178555620003d9565b82800160010185558215620003d9579182015b82811115620003d8578251825591602001919060010190620003bb565b5b509050620003e89190620003ec565b5090565b5b8082111562000407576000816000905550600101620003ed565b5090565b620004168162000474565b82525050565b60006020820190506200043360008301846200040b565b92915050565b6000620004468262000474565b9150620004538362000474565b925082821015620004695762000468620004ec565b5b828203905092915050565b6000819050919050565b600060028204905060018216806200049757607f821691505b60208210811415620004ae57620004ad6200054a565b5b50919050565b6000620004c18262000474565b9150620004ce8362000474565b925082620004e157620004e06200051b565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b61579b80620005896000396000f3fe60806040526004361061021e5760003560e01c806352390c021161012357806388f82020116100ab578063c9567bf91161006f578063c9567bf91461081a578063dd62ed3e14610831578063deab8aea1461086e578063ea2f0b3714610899578063f2fde38b146108c257610225565b806388f820201461070d5780638da5cb5b1461074a57806395d89b4114610775578063a457c2d7146107a0578063a9059cbb146107dd57610225565b8063715018a6116100f2578063715018a61461065e57806375f0a87414610675578063790ca413146106a05780638203f5fe146106cb57806383ad7994146106e257610225565b806352390c02146105925780635342acb4146105bb5780635d098b38146105f857806370a082311461062157610225565b80632d838119116101a65780633bd5d173116101755780633bd5d173146104af578063437823ec146104d85780634549b0391461050157806345596e2e1461053e57806349bd5a5e1461056757610225565b80632d838119146103e1578063313ce5671461041e5780633685d41914610449578063395093511461047257610225565b80631694505e116101ed5780631694505e146102fa57806318160ddd146103255780631d0adc071461035057806323b872dd146103795780632b14ca56146103b657610225565b806306fdde031461022a578063095ea7b3146102555780630f3a325f1461029257806313114a9d146102cf57610225565b3661022557005b600080fd5b34801561023657600080fd5b5061023f6108eb565b60405161024c9190614d01565b60405180910390f35b34801561026157600080fd5b5061027c60048036038101906102779190614897565b61097d565b6040516102899190614ccb565b60405180910390f35b34801561029e57600080fd5b506102b960048036038101906102b491906147ba565b61099b565b6040516102c69190614ccb565b60405180910390f35b3480156102db57600080fd5b506102e46109f1565b6040516102f19190614f03565b60405180910390f35b34801561030657600080fd5b5061030f6109fb565b60405161031c9190614ce6565b60405180910390f35b34801561033157600080fd5b5061033a610a21565b6040516103479190614f03565b60405180910390f35b34801561035c57600080fd5b50610377600480360381019061037291906147ba565b610a2b565b005b34801561038557600080fd5b506103a0600480360381019061039b9190614848565b610b04565b6040516103ad9190614ccb565b60405180910390f35b3480156103c257600080fd5b506103cb610bdd565b6040516103d89190614f03565b60405180910390f35b3480156103ed57600080fd5b50610408600480360381019061040391906148d3565b610be3565b6040516104159190614f03565b60405180910390f35b34801561042a57600080fd5b50610433610c51565b6040516104409190614fa8565b60405180910390f35b34801561045557600080fd5b50610470600480360381019061046b91906147ba565b610c68565b005b34801561047e57600080fd5b5061049960048036038101906104949190614897565b61104f565b6040516104a69190614ccb565b60405180910390f35b3480156104bb57600080fd5b506104d660048036038101906104d191906148d3565b611102565b005b3480156104e457600080fd5b506104ff60048036038101906104fa91906147ba565b61127d565b005b34801561050d57600080fd5b50610528600480360381019061052391906148fc565b61136d565b6040516105359190614f03565b60405180910390f35b34801561054a57600080fd5b50610565600480360381019061056091906148d3565b6113f1565b005b34801561057357600080fd5b5061057c611490565b6040516105899190614c6c565b60405180910390f35b34801561059e57600080fd5b506105b960048036038101906105b491906147ba565b6114b6565b005b3480156105c757600080fd5b506105e260048036038101906105dd91906147ba565b61176a565b6040516105ef9190614ccb565b60405180910390f35b34801561060457600080fd5b5061061f600480360381019061061a91906147ba565b6117c0565b005b34801561062d57600080fd5b50610648600480360381019061064391906147ba565b611899565b6040516106559190614f03565b60405180910390f35b34801561066a57600080fd5b50610673611984565b005b34801561068157600080fd5b5061068a611ad7565b6040516106979190614c87565b60405180910390f35b3480156106ac57600080fd5b506106b5611afd565b6040516106c29190614f03565b60405180910390f35b3480156106d757600080fd5b506106e0611b03565b005b3480156106ee57600080fd5b506106f7611e73565b6040516107049190614f03565b60405180910390f35b34801561071957600080fd5b50610734600480360381019061072f91906147ba565b611e79565b6040516107419190614ccb565b60405180910390f35b34801561075657600080fd5b5061075f611ecf565b60405161076c9190614c6c565b60405180910390f35b34801561078157600080fd5b5061078a611ef8565b6040516107979190614d01565b60405180910390f35b3480156107ac57600080fd5b506107c760048036038101906107c29190614897565b611f8a565b6040516107d49190614ccb565b60405180910390f35b3480156107e957600080fd5b5061080460048036038101906107ff9190614897565b612057565b6040516108119190614ccb565b60405180910390f35b34801561082657600080fd5b5061082f612075565b005b34801561083d57600080fd5b506108586004803603810190610853919061480c565b61212e565b6040516108659190614f03565b60405180910390f35b34801561087a57600080fd5b506108836121b5565b6040516108909190614c87565b60405180910390f35b3480156108a557600080fd5b506108c060048036038101906108bb91906147ba565b6121db565b005b3480156108ce57600080fd5b506108e960048036038101906108e491906147ba565b6122cb565b005b6060600f80546108fa906151fd565b80601f0160208091040260200160405190810160405280929190818152602001828054610926906151fd565b80156109735780601f1061094857610100808354040283529160200191610973565b820191906000526020600020905b81548152906001019060200180831161095657829003601f168201915b5050505050905090565b600061099161098a61248d565b8484612495565b6001905092915050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600e54905090565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600c54905090565b610a3361248d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ac0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab790614e23565b60405180910390fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000610b11848484612660565b610bd284610b1d61248d565b610bcd8560405180606001604052806028815260200161571960289139600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610b8361248d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612dc99092919063ffffffff16565b612495565b600190509392505050565b60135481565b6000600d54821115610c2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2190614d43565b60405180910390fd5b6000610c34612e2d565b9050610c498184612e5890919063ffffffff16565b915050919050565b6000601160009054906101000a900460ff16905090565b610c7061248d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf490614e23565b60405180910390fd5b600a60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610d89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8090614dc3565b60405180910390fd5b60005b600b8054905081101561104b578173ffffffffffffffffffffffffffffffffffffffff16600b8281548110610dea577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561103857600b6001600b80549050610e4591906150f9565b81548110610e7c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600b8281548110610ee1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600b805480610ffe577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905561104b565b80806110439061522f565b915050610d8c565b5050565b60006110f861105c61248d565b846110f3856007600061106d61248d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ea290919063ffffffff16565b612495565b6001905092915050565b600061110c61248d565b9050600a60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561119b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119290614ec3565b60405180910390fd5b60006111a683612f00565b505050505090506111ff81600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f5c90919063ffffffff16565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061125781600d54612f5c90919063ffffffff16565b600d8190555061127283600e54612ea290919063ffffffff16565b600e81905550505050565b61128561248d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611312576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130990614e23565b60405180910390fd5b6001600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600c548311156113b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ab90614de3565b60405180910390fd5b816113d45760006113c484612f00565b50505050509050809150506113eb565b60006113df84612f00565b50505050915050809150505b92915050565b6113f961248d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611486576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147d90614e23565b60405180910390fd5b8060168190555050565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6114be61248d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461154b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154290614e23565b60405180910390fd5b600a60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156115d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cf90614dc3565b60405180910390fd5b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156116ac57611668600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610be3565b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600b819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6117c861248d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611855576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184c90614e23565b60405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561193457600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905061197f565b61197c600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610be3565b90505b919050565b61198c61248d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1090614e23565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60175481565b611b0b61248d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8f90614e23565b60405180910390fd5b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611bf757600080fd5b505afa158015611c0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c2f91906147e3565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611c9157600080fd5b505afa158015611ca5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cc991906147e3565b6040518363ffffffff1660e01b8152600401611ce6929190614ca2565b602060405180830381600087803b158015611d0057600080fd5b505af1158015611d14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d3891906147e3565b601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160096000611dc7611ecf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60125481565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060108054611f07906151fd565b80601f0160208091040260200160405190810160405280929190818152602001828054611f33906151fd565b8015611f805780601f10611f5557610100808354040283529160200191611f80565b820191906000526020600020905b815481529060010190602001808311611f6357829003601f168201915b5050505050905090565b600061204d611f9761248d565b84612048856040518060600160405280602581526020016157416025913960076000611fc161248d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612dc99092919063ffffffff16565b612495565b6001905092915050565b600061206b61206461248d565b8484612660565b6001905092915050565b61207d61248d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461210a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210190614e23565b60405180910390fd5b6001601960156101000a81548160ff02191690831515021790555042601781905550565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6121e361248d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612270576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226790614e23565b60405180910390fd5b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6122d361248d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612360576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235790614e23565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156123d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c790614d63565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612505576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124fc90614e83565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612575576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256c90614d83565b60405180910390fd5b80600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516126539190614f03565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c790614e63565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612740576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273790614d23565b60405180910390fd5b60008111612783576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277a90614e43565b60405180910390fd5b600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612810576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280790614ee3565b60405180910390fd5b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561289d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289490614ee3565b60405180910390fd5b6128a5611ecf565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561291357506128e3611ecf565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561296857601960159054906101000a900460ff16612967576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295e90614ea3565b60405180910390fd5b5b6000601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612a135750601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b8015612abd5750600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612abb5750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b155b15612ac757600190505b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015612b725750601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612bc85750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c49578015612be55760125460148190555060006015819055505b601754421415612c48576001600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5b601960149054906101000a900460ff16158015612c725750601960159054906101000a900460ff165b8015612ccb5750601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15612db7578015612ce7576000601481905550600a6015819055505b6000612cf230611899565b90506000811115612db557612d4f6064612d41601654612d33601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611899565b612fa690919063ffffffff16565b612e5890919063ffffffff16565b811115612dab57612da86064612d9a601654612d8c601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611899565b612fa690919063ffffffff16565b612e5890919063ffffffff16565b90505b612db481613021565b5b505b612dc38484848461307c565b50505050565b6000838311158290612e11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e089190614d01565b60405180910390fd5b5060008385612e2091906150f9565b9050809150509392505050565b6000806000612e3a6132c5565b91509150612e518183612e5890919063ffffffff16565b9250505090565b6000612e9a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613610565b905092915050565b6000808284612eb19190615018565b905083811015612ef6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eed90614da3565b60405180910390fd5b8091505092915050565b6000806000806000806000806000612f178a613673565b9250925092506000806000612f358d8686612f30612e2d565b6136cd565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b6000612f9e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612dc9565b905092915050565b600080831415612fb9576000905061301b565b60008284612fc7919061509f565b9050828482612fd6919061506e565b14613016576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161300d90614e03565b60405180910390fd5b809150505b92915050565b6001601960146101000a81548160ff02191690831515021790555061304581613756565b6000479050600081111561305d5761305c47613a53565b5b506000601960146101000a81548160ff02191690831515021790555050565b8061308a57613089613b74565b5b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561312d5750600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156131425761313d848484613ba5565b6132bf565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156131e55750600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156131fa576131f5848484613e05565b6132be565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561329c5750600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156132b1576132ac848484614065565b6132bd565b6132bc84848461435a565b5b5b5b50505050565b6000806000600d5490506000600c54905060005b600b805490508110156135d3578260056000600b8481548110613325577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118061343957508160066000600b84815481106133d1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1561345057600d54600c549450945050505061360c565b61350660056000600b8481548110613491577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484612f5c90919063ffffffff16565b92506135be60066000600b8481548110613549577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483612f5c90919063ffffffff16565b915080806135cb9061522f565b9150506132d9565b506135eb600c54600d54612e5890919063ffffffff16565b82101561360357600d54600c5493509350505061360c565b81819350935050505b9091565b60008083118290613657576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161364e9190614d01565b60405180910390fd5b5060008385613666919061506e565b9050809150509392505050565b60008060008061368285614525565b9050600061368f86614556565b905060006136b8826136aa858a612f5c90919063ffffffff16565b612f5c90919063ffffffff16565b90508083839550955095505050509193909250565b6000806000806136e68589612fa690919063ffffffff16565b905060006136fd8689612fa690919063ffffffff16565b905060006137148789612fa690919063ffffffff16565b9050600061373d8261372f8587612f5c90919063ffffffff16565b612f5c90919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000600267ffffffffffffffff811115613799577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156137c75781602001602082028036833780820191505090505b5090503081600081518110613805577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156138a757600080fd5b505afa1580156138bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138df91906147e3565b81600181518110613919577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061398030601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612495565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016139e4959493929190614f4e565b600060405180830381600087803b1580156139fe57600080fd5b505af1158015613a12573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051613a47929190614f1e565b60405180910390a15050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc613ab6600a613aa8600886612fa690919063ffffffff16565b612e5890919063ffffffff16565b9081150290604051600060405180830381858888f19350505050158015613ae1573d6000803e3d6000fd5b50600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc613b45600a613b37600286612fa690919063ffffffff16565b612e5890919063ffffffff16565b9081150290604051600060405180830381858888f19350505050158015613b70573d6000803e3d6000fd5b5050565b6000601454148015613b8857506000601554145b15613b9257613ba3565b600060148190555060006015819055505b565b600080600080600080613bb787612f00565b955095509550955095509550613c1587600660008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f5c90919063ffffffff16565b600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613caa86600560008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f5c90919063ffffffff16565b600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d3f85600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ea290919063ffffffff16565b600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d8b81614587565b613d95848361472c565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613df29190614f03565b60405180910390a3505050505050505050565b600080600080600080613e1787612f00565b955095509550955095509550613e7586600560008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f5c90919063ffffffff16565b600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f0a83600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ea290919063ffffffff16565b600660008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f9f85600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ea290919063ffffffff16565b600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613feb81614587565b613ff5848361472c565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516140529190614f03565b60405180910390a3505050505050505050565b60008060008060008061407787612f00565b9550955095509550955095506140d587600660008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f5c90919063ffffffff16565b600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061416a86600560008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f5c90919063ffffffff16565b600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506141ff83600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ea290919063ffffffff16565b600660008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061429485600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ea290919063ffffffff16565b600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506142e081614587565b6142ea848361472c565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516143479190614f03565b60405180910390a3505050505050505050565b60008060008060008061436c87612f00565b9550955095509550955095506143ca86600560008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f5c90919063ffffffff16565b600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061445f85600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ea290919063ffffffff16565b600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506144ab81614587565b6144b5848361472c565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516145129190614f03565b60405180910390a3505050505050505050565b600061454f606461454160145485612fa690919063ffffffff16565b612e5890919063ffffffff16565b9050919050565b6000614580606461457260155485612fa690919063ffffffff16565b612e5890919063ffffffff16565b9050919050565b6000614591612e2d565b905060006145a88284612fa690919063ffffffff16565b90506145fc81600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ea290919063ffffffff16565b600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615614727576146e383600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ea290919063ffffffff16565b600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b61474182600d54612f5c90919063ffffffff16565b600d8190555061475c81600e54612ea290919063ffffffff16565b600e819055505050565b600081359050614775816156d3565b92915050565b60008151905061478a816156d3565b92915050565b60008135905061479f816156ea565b92915050565b6000813590506147b481615701565b92915050565b6000602082840312156147cc57600080fd5b60006147da84828501614766565b91505092915050565b6000602082840312156147f557600080fd5b60006148038482850161477b565b91505092915050565b6000806040838503121561481f57600080fd5b600061482d85828601614766565b925050602061483e85828601614766565b9150509250929050565b60008060006060848603121561485d57600080fd5b600061486b86828701614766565b935050602061487c86828701614766565b925050604061488d868287016147a5565b9150509250925092565b600080604083850312156148aa57600080fd5b60006148b885828601614766565b92505060206148c9858286016147a5565b9150509250929050565b6000602082840312156148e557600080fd5b60006148f3848285016147a5565b91505092915050565b6000806040838503121561490f57600080fd5b600061491d858286016147a5565b925050602061492e85828601614790565b9150509250929050565b6000614944838361495f565b60208301905092915050565b6149598161513f565b82525050565b6149688161512d565b82525050565b6149778161512d565b82525050565b600061498882614fd3565b6149928185614ff6565b935061499d83614fc3565b8060005b838110156149ce5781516149b58882614938565b97506149c083614fe9565b9250506001810190506149a1565b5085935050505092915050565b6149e481615151565b82525050565b6149f381615194565b82525050565b614a02816151b8565b82525050565b6000614a1382614fde565b614a1d8185615007565b9350614a2d8185602086016151ca565b614a3681615305565b840191505092915050565b6000614a4e602383615007565b9150614a5982615316565b604082019050919050565b6000614a71602a83615007565b9150614a7c82615365565b604082019050919050565b6000614a94602683615007565b9150614a9f826153b4565b604082019050919050565b6000614ab7602283615007565b9150614ac282615403565b604082019050919050565b6000614ada601b83615007565b9150614ae582615452565b602082019050919050565b6000614afd601b83615007565b9150614b088261547b565b602082019050919050565b6000614b20601f83615007565b9150614b2b826154a4565b602082019050919050565b6000614b43602183615007565b9150614b4e826154cd565b604082019050919050565b6000614b66602083615007565b9150614b718261551c565b602082019050919050565b6000614b89602983615007565b9150614b9482615545565b604082019050919050565b6000614bac602583615007565b9150614bb782615594565b604082019050919050565b6000614bcf602483615007565b9150614bda826155e3565b604082019050919050565b6000614bf2601883615007565b9150614bfd82615632565b602082019050919050565b6000614c15602c83615007565b9150614c208261565b565b604082019050919050565b6000614c38601783615007565b9150614c43826156aa565b602082019050919050565b614c578161517d565b82525050565b614c6681615187565b82525050565b6000602082019050614c81600083018461496e565b92915050565b6000602082019050614c9c6000830184614950565b92915050565b6000604082019050614cb7600083018561496e565b614cc4602083018461496e565b9392505050565b6000602082019050614ce060008301846149db565b92915050565b6000602082019050614cfb60008301846149ea565b92915050565b60006020820190508181036000830152614d1b8184614a08565b905092915050565b60006020820190508181036000830152614d3c81614a41565b9050919050565b60006020820190508181036000830152614d5c81614a64565b9050919050565b60006020820190508181036000830152614d7c81614a87565b9050919050565b60006020820190508181036000830152614d9c81614aaa565b9050919050565b60006020820190508181036000830152614dbc81614acd565b9050919050565b60006020820190508181036000830152614ddc81614af0565b9050919050565b60006020820190508181036000830152614dfc81614b13565b9050919050565b60006020820190508181036000830152614e1c81614b36565b9050919050565b60006020820190508181036000830152614e3c81614b59565b9050919050565b60006020820190508181036000830152614e5c81614b7c565b9050919050565b60006020820190508181036000830152614e7c81614b9f565b9050919050565b60006020820190508181036000830152614e9c81614bc2565b9050919050565b60006020820190508181036000830152614ebc81614be5565b9050919050565b60006020820190508181036000830152614edc81614c08565b9050919050565b60006020820190508181036000830152614efc81614c2b565b9050919050565b6000602082019050614f186000830184614c4e565b92915050565b6000604082019050614f336000830185614c4e565b8181036020830152614f45818461497d565b90509392505050565b600060a082019050614f636000830188614c4e565b614f7060208301876149f9565b8181036040830152614f82818661497d565b9050614f91606083018561496e565b614f9e6080830184614c4e565b9695505050505050565b6000602082019050614fbd6000830184614c5d565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006150238261517d565b915061502e8361517d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561506357615062615278565b5b828201905092915050565b60006150798261517d565b91506150848361517d565b925082615094576150936152a7565b5b828204905092915050565b60006150aa8261517d565b91506150b58361517d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156150ee576150ed615278565b5b828202905092915050565b60006151048261517d565b915061510f8361517d565b92508282101561512257615121615278565b5b828203905092915050565b60006151388261515d565b9050919050565b600061514a8261515d565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061519f826151a6565b9050919050565b60006151b18261515d565b9050919050565b60006151c38261517d565b9050919050565b60005b838110156151e85780820151818401526020810190506151cd565b838111156151f7576000848401525b50505050565b6000600282049050600182168061521557607f821691505b60208210811415615229576152286152d6565b5b50919050565b600061523a8261517d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561526d5761526c615278565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f54726164696e67206e6f742079657420656e61626c65642e0000000000000000600082015250565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b7f596f752068617665206e6f20706f776572206865726521000000000000000000600082015250565b6156dc8161512d565b81146156e757600080fd5b50565b6156f381615151565b81146156fe57600080fd5b50565b61570a8161517d565b811461571557600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220d3ec81dbe810ccb8ab71216fdbac8517339c73aa0b517acc207fe74e71852b2d64736f6c63430008040033

Deployed Bytecode

0x60806040526004361061021e5760003560e01c806352390c021161012357806388f82020116100ab578063c9567bf91161006f578063c9567bf91461081a578063dd62ed3e14610831578063deab8aea1461086e578063ea2f0b3714610899578063f2fde38b146108c257610225565b806388f820201461070d5780638da5cb5b1461074a57806395d89b4114610775578063a457c2d7146107a0578063a9059cbb146107dd57610225565b8063715018a6116100f2578063715018a61461065e57806375f0a87414610675578063790ca413146106a05780638203f5fe146106cb57806383ad7994146106e257610225565b806352390c02146105925780635342acb4146105bb5780635d098b38146105f857806370a082311461062157610225565b80632d838119116101a65780633bd5d173116101755780633bd5d173146104af578063437823ec146104d85780634549b0391461050157806345596e2e1461053e57806349bd5a5e1461056757610225565b80632d838119146103e1578063313ce5671461041e5780633685d41914610449578063395093511461047257610225565b80631694505e116101ed5780631694505e146102fa57806318160ddd146103255780631d0adc071461035057806323b872dd146103795780632b14ca56146103b657610225565b806306fdde031461022a578063095ea7b3146102555780630f3a325f1461029257806313114a9d146102cf57610225565b3661022557005b600080fd5b34801561023657600080fd5b5061023f6108eb565b60405161024c9190614d01565b60405180910390f35b34801561026157600080fd5b5061027c60048036038101906102779190614897565b61097d565b6040516102899190614ccb565b60405180910390f35b34801561029e57600080fd5b506102b960048036038101906102b491906147ba565b61099b565b6040516102c69190614ccb565b60405180910390f35b3480156102db57600080fd5b506102e46109f1565b6040516102f19190614f03565b60405180910390f35b34801561030657600080fd5b5061030f6109fb565b60405161031c9190614ce6565b60405180910390f35b34801561033157600080fd5b5061033a610a21565b6040516103479190614f03565b60405180910390f35b34801561035c57600080fd5b50610377600480360381019061037291906147ba565b610a2b565b005b34801561038557600080fd5b506103a0600480360381019061039b9190614848565b610b04565b6040516103ad9190614ccb565b60405180910390f35b3480156103c257600080fd5b506103cb610bdd565b6040516103d89190614f03565b60405180910390f35b3480156103ed57600080fd5b50610408600480360381019061040391906148d3565b610be3565b6040516104159190614f03565b60405180910390f35b34801561042a57600080fd5b50610433610c51565b6040516104409190614fa8565b60405180910390f35b34801561045557600080fd5b50610470600480360381019061046b91906147ba565b610c68565b005b34801561047e57600080fd5b5061049960048036038101906104949190614897565b61104f565b6040516104a69190614ccb565b60405180910390f35b3480156104bb57600080fd5b506104d660048036038101906104d191906148d3565b611102565b005b3480156104e457600080fd5b506104ff60048036038101906104fa91906147ba565b61127d565b005b34801561050d57600080fd5b50610528600480360381019061052391906148fc565b61136d565b6040516105359190614f03565b60405180910390f35b34801561054a57600080fd5b50610565600480360381019061056091906148d3565b6113f1565b005b34801561057357600080fd5b5061057c611490565b6040516105899190614c6c565b60405180910390f35b34801561059e57600080fd5b506105b960048036038101906105b491906147ba565b6114b6565b005b3480156105c757600080fd5b506105e260048036038101906105dd91906147ba565b61176a565b6040516105ef9190614ccb565b60405180910390f35b34801561060457600080fd5b5061061f600480360381019061061a91906147ba565b6117c0565b005b34801561062d57600080fd5b50610648600480360381019061064391906147ba565b611899565b6040516106559190614f03565b60405180910390f35b34801561066a57600080fd5b50610673611984565b005b34801561068157600080fd5b5061068a611ad7565b6040516106979190614c87565b60405180910390f35b3480156106ac57600080fd5b506106b5611afd565b6040516106c29190614f03565b60405180910390f35b3480156106d757600080fd5b506106e0611b03565b005b3480156106ee57600080fd5b506106f7611e73565b6040516107049190614f03565b60405180910390f35b34801561071957600080fd5b50610734600480360381019061072f91906147ba565b611e79565b6040516107419190614ccb565b60405180910390f35b34801561075657600080fd5b5061075f611ecf565b60405161076c9190614c6c565b60405180910390f35b34801561078157600080fd5b5061078a611ef8565b6040516107979190614d01565b60405180910390f35b3480156107ac57600080fd5b506107c760048036038101906107c29190614897565b611f8a565b6040516107d49190614ccb565b60405180910390f35b3480156107e957600080fd5b5061080460048036038101906107ff9190614897565b612057565b6040516108119190614ccb565b60405180910390f35b34801561082657600080fd5b5061082f612075565b005b34801561083d57600080fd5b506108586004803603810190610853919061480c565b61212e565b6040516108659190614f03565b60405180910390f35b34801561087a57600080fd5b506108836121b5565b6040516108909190614c87565b60405180910390f35b3480156108a557600080fd5b506108c060048036038101906108bb91906147ba565b6121db565b005b3480156108ce57600080fd5b506108e960048036038101906108e491906147ba565b6122cb565b005b6060600f80546108fa906151fd565b80601f0160208091040260200160405190810160405280929190818152602001828054610926906151fd565b80156109735780601f1061094857610100808354040283529160200191610973565b820191906000526020600020905b81548152906001019060200180831161095657829003601f168201915b5050505050905090565b600061099161098a61248d565b8484612495565b6001905092915050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600e54905090565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600c54905090565b610a3361248d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ac0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab790614e23565b60405180910390fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000610b11848484612660565b610bd284610b1d61248d565b610bcd8560405180606001604052806028815260200161571960289139600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610b8361248d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612dc99092919063ffffffff16565b612495565b600190509392505050565b60135481565b6000600d54821115610c2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2190614d43565b60405180910390fd5b6000610c34612e2d565b9050610c498184612e5890919063ffffffff16565b915050919050565b6000601160009054906101000a900460ff16905090565b610c7061248d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf490614e23565b60405180910390fd5b600a60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610d89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8090614dc3565b60405180910390fd5b60005b600b8054905081101561104b578173ffffffffffffffffffffffffffffffffffffffff16600b8281548110610dea577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561103857600b6001600b80549050610e4591906150f9565b81548110610e7c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600b8281548110610ee1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600b805480610ffe577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905561104b565b80806110439061522f565b915050610d8c565b5050565b60006110f861105c61248d565b846110f3856007600061106d61248d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ea290919063ffffffff16565b612495565b6001905092915050565b600061110c61248d565b9050600a60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561119b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119290614ec3565b60405180910390fd5b60006111a683612f00565b505050505090506111ff81600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f5c90919063ffffffff16565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061125781600d54612f5c90919063ffffffff16565b600d8190555061127283600e54612ea290919063ffffffff16565b600e81905550505050565b61128561248d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611312576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130990614e23565b60405180910390fd5b6001600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600c548311156113b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ab90614de3565b60405180910390fd5b816113d45760006113c484612f00565b50505050509050809150506113eb565b60006113df84612f00565b50505050915050809150505b92915050565b6113f961248d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611486576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147d90614e23565b60405180910390fd5b8060168190555050565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6114be61248d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461154b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154290614e23565b60405180910390fd5b600a60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156115d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cf90614dc3565b60405180910390fd5b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156116ac57611668600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610be3565b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600b819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6117c861248d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611855576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184c90614e23565b60405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561193457600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905061197f565b61197c600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610be3565b90505b919050565b61198c61248d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1090614e23565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60175481565b611b0b61248d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8f90614e23565b60405180910390fd5b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611bf757600080fd5b505afa158015611c0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c2f91906147e3565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611c9157600080fd5b505afa158015611ca5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cc991906147e3565b6040518363ffffffff1660e01b8152600401611ce6929190614ca2565b602060405180830381600087803b158015611d0057600080fd5b505af1158015611d14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d3891906147e3565b601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160096000611dc7611ecf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60125481565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060108054611f07906151fd565b80601f0160208091040260200160405190810160405280929190818152602001828054611f33906151fd565b8015611f805780601f10611f5557610100808354040283529160200191611f80565b820191906000526020600020905b815481529060010190602001808311611f6357829003601f168201915b5050505050905090565b600061204d611f9761248d565b84612048856040518060600160405280602581526020016157416025913960076000611fc161248d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612dc99092919063ffffffff16565b612495565b6001905092915050565b600061206b61206461248d565b8484612660565b6001905092915050565b61207d61248d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461210a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210190614e23565b60405180910390fd5b6001601960156101000a81548160ff02191690831515021790555042601781905550565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6121e361248d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612270576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226790614e23565b60405180910390fd5b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6122d361248d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612360576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235790614e23565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156123d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c790614d63565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612505576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124fc90614e83565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612575576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256c90614d83565b60405180910390fd5b80600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516126539190614f03565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c790614e63565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612740576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273790614d23565b60405180910390fd5b60008111612783576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277a90614e43565b60405180910390fd5b600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612810576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280790614ee3565b60405180910390fd5b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561289d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289490614ee3565b60405180910390fd5b6128a5611ecf565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561291357506128e3611ecf565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561296857601960159054906101000a900460ff16612967576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295e90614ea3565b60405180910390fd5b5b6000601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612a135750601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b8015612abd5750600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612abb5750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b155b15612ac757600190505b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015612b725750601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612bc85750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c49578015612be55760125460148190555060006015819055505b601754421415612c48576001600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5b601960149054906101000a900460ff16158015612c725750601960159054906101000a900460ff165b8015612ccb5750601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15612db7578015612ce7576000601481905550600a6015819055505b6000612cf230611899565b90506000811115612db557612d4f6064612d41601654612d33601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611899565b612fa690919063ffffffff16565b612e5890919063ffffffff16565b811115612dab57612da86064612d9a601654612d8c601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611899565b612fa690919063ffffffff16565b612e5890919063ffffffff16565b90505b612db481613021565b5b505b612dc38484848461307c565b50505050565b6000838311158290612e11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e089190614d01565b60405180910390fd5b5060008385612e2091906150f9565b9050809150509392505050565b6000806000612e3a6132c5565b91509150612e518183612e5890919063ffffffff16565b9250505090565b6000612e9a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613610565b905092915050565b6000808284612eb19190615018565b905083811015612ef6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eed90614da3565b60405180910390fd5b8091505092915050565b6000806000806000806000806000612f178a613673565b9250925092506000806000612f358d8686612f30612e2d565b6136cd565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b6000612f9e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612dc9565b905092915050565b600080831415612fb9576000905061301b565b60008284612fc7919061509f565b9050828482612fd6919061506e565b14613016576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161300d90614e03565b60405180910390fd5b809150505b92915050565b6001601960146101000a81548160ff02191690831515021790555061304581613756565b6000479050600081111561305d5761305c47613a53565b5b506000601960146101000a81548160ff02191690831515021790555050565b8061308a57613089613b74565b5b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561312d5750600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156131425761313d848484613ba5565b6132bf565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156131e55750600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156131fa576131f5848484613e05565b6132be565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561329c5750600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156132b1576132ac848484614065565b6132bd565b6132bc84848461435a565b5b5b5b50505050565b6000806000600d5490506000600c54905060005b600b805490508110156135d3578260056000600b8481548110613325577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118061343957508160066000600b84815481106133d1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1561345057600d54600c549450945050505061360c565b61350660056000600b8481548110613491577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484612f5c90919063ffffffff16565b92506135be60066000600b8481548110613549577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483612f5c90919063ffffffff16565b915080806135cb9061522f565b9150506132d9565b506135eb600c54600d54612e5890919063ffffffff16565b82101561360357600d54600c5493509350505061360c565b81819350935050505b9091565b60008083118290613657576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161364e9190614d01565b60405180910390fd5b5060008385613666919061506e565b9050809150509392505050565b60008060008061368285614525565b9050600061368f86614556565b905060006136b8826136aa858a612f5c90919063ffffffff16565b612f5c90919063ffffffff16565b90508083839550955095505050509193909250565b6000806000806136e68589612fa690919063ffffffff16565b905060006136fd8689612fa690919063ffffffff16565b905060006137148789612fa690919063ffffffff16565b9050600061373d8261372f8587612f5c90919063ffffffff16565b612f5c90919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000600267ffffffffffffffff811115613799577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156137c75781602001602082028036833780820191505090505b5090503081600081518110613805577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156138a757600080fd5b505afa1580156138bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138df91906147e3565b81600181518110613919577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061398030601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612495565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016139e4959493929190614f4e565b600060405180830381600087803b1580156139fe57600080fd5b505af1158015613a12573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051613a47929190614f1e565b60405180910390a15050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc613ab6600a613aa8600886612fa690919063ffffffff16565b612e5890919063ffffffff16565b9081150290604051600060405180830381858888f19350505050158015613ae1573d6000803e3d6000fd5b50600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc613b45600a613b37600286612fa690919063ffffffff16565b612e5890919063ffffffff16565b9081150290604051600060405180830381858888f19350505050158015613b70573d6000803e3d6000fd5b5050565b6000601454148015613b8857506000601554145b15613b9257613ba3565b600060148190555060006015819055505b565b600080600080600080613bb787612f00565b955095509550955095509550613c1587600660008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f5c90919063ffffffff16565b600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613caa86600560008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f5c90919063ffffffff16565b600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d3f85600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ea290919063ffffffff16565b600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d8b81614587565b613d95848361472c565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613df29190614f03565b60405180910390a3505050505050505050565b600080600080600080613e1787612f00565b955095509550955095509550613e7586600560008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f5c90919063ffffffff16565b600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f0a83600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ea290919063ffffffff16565b600660008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f9f85600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ea290919063ffffffff16565b600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613feb81614587565b613ff5848361472c565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516140529190614f03565b60405180910390a3505050505050505050565b60008060008060008061407787612f00565b9550955095509550955095506140d587600660008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f5c90919063ffffffff16565b600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061416a86600560008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f5c90919063ffffffff16565b600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506141ff83600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ea290919063ffffffff16565b600660008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061429485600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ea290919063ffffffff16565b600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506142e081614587565b6142ea848361472c565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516143479190614f03565b60405180910390a3505050505050505050565b60008060008060008061436c87612f00565b9550955095509550955095506143ca86600560008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f5c90919063ffffffff16565b600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061445f85600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ea290919063ffffffff16565b600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506144ab81614587565b6144b5848361472c565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516145129190614f03565b60405180910390a3505050505050505050565b600061454f606461454160145485612fa690919063ffffffff16565b612e5890919063ffffffff16565b9050919050565b6000614580606461457260155485612fa690919063ffffffff16565b612e5890919063ffffffff16565b9050919050565b6000614591612e2d565b905060006145a88284612fa690919063ffffffff16565b90506145fc81600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ea290919063ffffffff16565b600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615614727576146e383600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ea290919063ffffffff16565b600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b61474182600d54612f5c90919063ffffffff16565b600d8190555061475c81600e54612ea290919063ffffffff16565b600e819055505050565b600081359050614775816156d3565b92915050565b60008151905061478a816156d3565b92915050565b60008135905061479f816156ea565b92915050565b6000813590506147b481615701565b92915050565b6000602082840312156147cc57600080fd5b60006147da84828501614766565b91505092915050565b6000602082840312156147f557600080fd5b60006148038482850161477b565b91505092915050565b6000806040838503121561481f57600080fd5b600061482d85828601614766565b925050602061483e85828601614766565b9150509250929050565b60008060006060848603121561485d57600080fd5b600061486b86828701614766565b935050602061487c86828701614766565b925050604061488d868287016147a5565b9150509250925092565b600080604083850312156148aa57600080fd5b60006148b885828601614766565b92505060206148c9858286016147a5565b9150509250929050565b6000602082840312156148e557600080fd5b60006148f3848285016147a5565b91505092915050565b6000806040838503121561490f57600080fd5b600061491d858286016147a5565b925050602061492e85828601614790565b9150509250929050565b6000614944838361495f565b60208301905092915050565b6149598161513f565b82525050565b6149688161512d565b82525050565b6149778161512d565b82525050565b600061498882614fd3565b6149928185614ff6565b935061499d83614fc3565b8060005b838110156149ce5781516149b58882614938565b97506149c083614fe9565b9250506001810190506149a1565b5085935050505092915050565b6149e481615151565b82525050565b6149f381615194565b82525050565b614a02816151b8565b82525050565b6000614a1382614fde565b614a1d8185615007565b9350614a2d8185602086016151ca565b614a3681615305565b840191505092915050565b6000614a4e602383615007565b9150614a5982615316565b604082019050919050565b6000614a71602a83615007565b9150614a7c82615365565b604082019050919050565b6000614a94602683615007565b9150614a9f826153b4565b604082019050919050565b6000614ab7602283615007565b9150614ac282615403565b604082019050919050565b6000614ada601b83615007565b9150614ae582615452565b602082019050919050565b6000614afd601b83615007565b9150614b088261547b565b602082019050919050565b6000614b20601f83615007565b9150614b2b826154a4565b602082019050919050565b6000614b43602183615007565b9150614b4e826154cd565b604082019050919050565b6000614b66602083615007565b9150614b718261551c565b602082019050919050565b6000614b89602983615007565b9150614b9482615545565b604082019050919050565b6000614bac602583615007565b9150614bb782615594565b604082019050919050565b6000614bcf602483615007565b9150614bda826155e3565b604082019050919050565b6000614bf2601883615007565b9150614bfd82615632565b602082019050919050565b6000614c15602c83615007565b9150614c208261565b565b604082019050919050565b6000614c38601783615007565b9150614c43826156aa565b602082019050919050565b614c578161517d565b82525050565b614c6681615187565b82525050565b6000602082019050614c81600083018461496e565b92915050565b6000602082019050614c9c6000830184614950565b92915050565b6000604082019050614cb7600083018561496e565b614cc4602083018461496e565b9392505050565b6000602082019050614ce060008301846149db565b92915050565b6000602082019050614cfb60008301846149ea565b92915050565b60006020820190508181036000830152614d1b8184614a08565b905092915050565b60006020820190508181036000830152614d3c81614a41565b9050919050565b60006020820190508181036000830152614d5c81614a64565b9050919050565b60006020820190508181036000830152614d7c81614a87565b9050919050565b60006020820190508181036000830152614d9c81614aaa565b9050919050565b60006020820190508181036000830152614dbc81614acd565b9050919050565b60006020820190508181036000830152614ddc81614af0565b9050919050565b60006020820190508181036000830152614dfc81614b13565b9050919050565b60006020820190508181036000830152614e1c81614b36565b9050919050565b60006020820190508181036000830152614e3c81614b59565b9050919050565b60006020820190508181036000830152614e5c81614b7c565b9050919050565b60006020820190508181036000830152614e7c81614b9f565b9050919050565b60006020820190508181036000830152614e9c81614bc2565b9050919050565b60006020820190508181036000830152614ebc81614be5565b9050919050565b60006020820190508181036000830152614edc81614c08565b9050919050565b60006020820190508181036000830152614efc81614c2b565b9050919050565b6000602082019050614f186000830184614c4e565b92915050565b6000604082019050614f336000830185614c4e565b8181036020830152614f45818461497d565b90509392505050565b600060a082019050614f636000830188614c4e565b614f7060208301876149f9565b8181036040830152614f82818661497d565b9050614f91606083018561496e565b614f9e6080830184614c4e565b9695505050505050565b6000602082019050614fbd6000830184614c5d565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006150238261517d565b915061502e8361517d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561506357615062615278565b5b828201905092915050565b60006150798261517d565b91506150848361517d565b925082615094576150936152a7565b5b828204905092915050565b60006150aa8261517d565b91506150b58361517d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156150ee576150ed615278565b5b828202905092915050565b60006151048261517d565b915061510f8361517d565b92508282101561512257615121615278565b5b828203905092915050565b60006151388261515d565b9050919050565b600061514a8261515d565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061519f826151a6565b9050919050565b60006151b18261515d565b9050919050565b60006151c38261517d565b9050919050565b60005b838110156151e85780820151818401526020810190506151cd565b838111156151f7576000848401525b50505050565b6000600282049050600182168061521557607f821691505b60208210811415615229576152286152d6565b5b50919050565b600061523a8261517d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561526d5761526c615278565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f54726164696e67206e6f742079657420656e61626c65642e0000000000000000600082015250565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b7f596f752068617665206e6f20706f776572206865726521000000000000000000600082015250565b6156dc8161512d565b81146156e757600080fd5b50565b6156f381615151565b81146156fe57600080fd5b50565b61570a8161517d565b811461571557600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220d3ec81dbe810ccb8ab71216fdbac8517339c73aa0b517acc207fe74e71852b2d64736f6c63430008040033

Deployed Bytecode Sourcemap

14366:17905:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16968:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17880:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31962:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19001:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15798:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17245:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31684:129;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18049:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15493:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19933:253;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17154:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20537:479;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18370:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19100:377;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31290:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19489:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32081:90;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15846:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20194:335;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31155:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31535:137;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17348:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5997:148;;;;;;;;;;;;;:::i;:::-;;14490:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15764:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16376:452;;;;;;;;;;;;;:::i;:::-;;15425:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18873:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5772:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17059:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18596:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17554:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16840:120;;;;;;;;;;;;;:::i;:::-;;17729:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14609:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31413:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6153:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16968:83;17005:13;17038:5;17031:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16968:83;:::o;17880:161::-;17955:4;17972:39;17981:12;:10;:12::i;:::-;17995:7;18004:6;17972:8;:39::i;:::-;18029:4;18022:11;;17880:161;;;;:::o;31962:106::-;32018:4;32042:9;:18;32052:7;32042:18;;;;;;;;;;;;;;;;;;;;;;;;;32035:25;;31962:106;;;:::o;19001:87::-;19043:7;19070:10;;19063:17;;19001:87;:::o;15798:41::-;;;;;;;;;;;;;:::o;17245:95::-;17298:7;17325;;17318:14;;17245:95;:::o;31684:129::-;5916:12;:10;:12::i;:::-;5906:22;;:6;;;;;;;;;;:22;;;5898:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31790:14:::1;31766:13;;:39;;;;;;;;;;;;;;;;;;31684:129:::0;:::o;18049:313::-;18147:4;18164:36;18174:6;18182:9;18193:6;18164:9;:36::i;:::-;18211:121;18220:6;18228:12;:10;:12::i;:::-;18242:89;18280:6;18242:89;;;;;;;;;;;;;;;;;:11;:19;18254:6;18242:19;;;;;;;;;;;;;;;:33;18262:12;:10;:12::i;:::-;18242:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;18211:8;:121::i;:::-;18350:4;18343:11;;18049:313;;;;;:::o;15493:27::-;;;;:::o;19933:253::-;19999:7;20038;;20027;:18;;20019:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;20103:19;20126:10;:8;:10::i;:::-;20103:33;;20154:24;20166:11;20154:7;:11;;:24;;;;:::i;:::-;20147:31;;;19933:253;;;:::o;17154:83::-;17195:5;17220:9;;;;;;;;;;;17213:16;;17154:83;:::o;20537:479::-;5916:12;:10;:12::i;:::-;5906:22;;:6;;;;;;;;;;:22;;;5898:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20619:11:::1;:20;20631:7;20619:20;;;;;;;;;;;;;;;;;;;;;;;;;20611:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;20687:9;20682:327;20706:9;:16;;;;20702:1;:20;20682:327;;;20764:7;20748:23;;:9;20758:1;20748:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;20744:254;;;20807:9;20836:1;20817:9;:16;;;;:20;;;;:::i;:::-;20807:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20792:9;20802:1;20792:12;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;20876:1;20857:7;:16;20865:7;20857:16;;;;;;;;;;;;;;;:20;;;;20919:5;20896:11;:20;20908:7;20896:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;20943:9;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20977:5;;20744:254;20724:3;;;;;:::i;:::-;;;;20682:327;;;;20537:479:::0;:::o;18370:218::-;18458:4;18475:83;18484:12;:10;:12::i;:::-;18498:7;18507:50;18546:10;18507:11;:25;18519:12;:10;:12::i;:::-;18507:25;;;;;;;;;;;;;;;:34;18533:7;18507:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;18475:8;:83::i;:::-;18576:4;18569:11;;18370:218;;;;:::o;19100:377::-;19152:14;19169:12;:10;:12::i;:::-;19152:29;;19201:11;:19;19213:6;19201:19;;;;;;;;;;;;;;;;;;;;;;;;;19200:20;19192:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;19281:15;19305:19;19316:7;19305:10;:19::i;:::-;19280:44;;;;;;;19353:28;19373:7;19353;:15;19361:6;19353:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;19335:7;:15;19343:6;19335:15;;;;;;;;;;;;;;;:46;;;;19402:20;19414:7;19402;;:11;;:20;;;;:::i;:::-;19392:7;:30;;;;19446:23;19461:7;19446:10;;:14;;:23;;;;:::i;:::-;19433:10;:36;;;;19100:377;;;:::o;31290:111::-;5916:12;:10;:12::i;:::-;5906:22;;:6;;;;;;;;;;:22;;;5898:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31389:4:::1;31359:18;:27;31378:7;31359:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;31290:111:::0;:::o;19489:436::-;19579:7;19618;;19607;:18;;19599:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;19677:17;19672:246;;19712:15;19736:19;19747:7;19736:10;:19::i;:::-;19711:44;;;;;;;19777:7;19770:14;;;;;19672:246;19819:23;19850:19;19861:7;19850:10;:19::i;:::-;19817:52;;;;;;;19891:15;19884:22;;;19489:436;;;;;:::o;32081:90::-;5916:12;:10;:12::i;:::-;5906:22;;:6;;;;;;;;;;:22;;;5898:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32159:4:::1;32148:8;:15;;;;32081:90:::0;:::o;15846:28::-;;;;;;;;;;;;;:::o;20194:335::-;5916:12;:10;:12::i;:::-;5906:22;;:6;;;;;;;;;;:22;;;5898:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20279:11:::1;:20;20291:7;20279:20;;;;;;;;;;;;;;;;;;;;;;;;;20278:21;20270:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;20364:1;20345:7;:16;20353:7;20345:16;;;;;;;;;;;;;;;;:20;20342:108;;;20401:37;20421:7;:16;20429:7;20421:16;;;;;;;;;;;;;;;;20401:19;:37::i;:::-;20382:7;:16;20390:7;20382:16;;;;;;;;;;;;;;;:56;;;;20342:108;20483:4;20460:11;:20;20472:7;20460:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;20498:9;20513:7;20498:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20194:335:::0;:::o;31155:123::-;31219:4;31243:18;:27;31262:7;31243:27;;;;;;;;;;;;;;;;;;;;;;;;;31236:34;;31155:123;;;:::o;31535:137::-;5916:12;:10;:12::i;:::-;5906:22;;:6;;;;;;;;;;:22;;;5898:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31647:16:::1;31621:15;;:43;;;;;;;;;;;;;;;;;;31535:137:::0;:::o;17348:198::-;17414:7;17438:11;:20;17450:7;17438:20;;;;;;;;;;;;;;;;;;;;;;;;;17434:49;;;17467:7;:16;17475:7;17467:16;;;;;;;;;;;;;;;;17460:23;;;;17434:49;17501:37;17521:7;:16;17529:7;17521:16;;;;;;;;;;;;;;;;17501:19;:37::i;:::-;17494:44;;17348: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;14490:92::-;;;;;;;;;;;;;:::o;15764:25::-;;;;:::o;16376:452::-;5916:12;:10;:12::i;:::-;5906:22;;:6;;;;;;;;;;:22;;;5898:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16432:35:::1;16489:42;16432:100;;16577:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16559:66;;;16634:4;16641:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16559:106;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16543:13;;:122;;;;;;;;;;;;;;;;;;16696:16;16678:15;;:34;;;;;;;;;;;;;;;;;;16755:4;16725:18;:27;16744:7;:5;:7::i;:::-;16725:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;16806:4;16770:18;:33;16797:4;16770:33;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;5976:1;16376:452::o:0;15425:32::-;;;;:::o;18873:120::-;18941:4;18965:11;:20;18977:7;18965:20;;;;;;;;;;;;;;;;;;;;;;;;;18958:27;;18873:120;;;:::o;5772:79::-;5810:7;5837:6;;;;;;;;;;;5830:13;;5772:79;:::o;17059:87::-;17098:13;17131:7;17124:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17059:87;:::o;18596:269::-;18689:4;18706:129;18715:12;:10;:12::i;:::-;18729:7;18738:96;18777:15;18738:96;;;;;;;;;;;;;;;;;:11;:25;18750:12;:10;:12::i;:::-;18738:25;;;;;;;;;;;;;;;:34;18764:7;18738:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;18706:8;:129::i;:::-;18853:4;18846:11;;18596:269;;;;:::o;17554:167::-;17632:4;17649:42;17659:12;:10;:12::i;:::-;17673:9;17684:6;17649:9;:42::i;:::-;17709:4;17702:11;;17554:167;;;;:::o;16840:120::-;5916:12;:10;:12::i;:::-;5906:22;;:6;;;;;;;;;;:22;;;5898:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16909:4:::1;16895:11;;:18;;;;;;;;;;;;;;;;;;16937:15;16924:10;:28;;;;16840:120::o:0;17729:143::-;17810:7;17837:11;:18;17849:5;17837:18;;;;;;;;;;;;;;;:27;17856:7;17837:27;;;;;;;;;;;;;;;;17830:34;;17729:143;;;;:::o;14609:91::-;;;;;;;;;;;;;:::o;31413:110::-;5916:12;:10;:12::i;:::-;5906:22;;:6;;;;;;;;;;:22;;;5898:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31510:5:::1;31480:18;:27;31499:7;31480:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;31413: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;21024:337::-;21134:1;21117:19;;:5;:19;;;;21109:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21215:1;21196:21;;:7;:21;;;;21188:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21299:6;21269:11;:18;21281:5;21269:18;;;;;;;;;;;;;;;:27;21288:7;21269:27;;;;;;;;;;;;;;;:36;;;;21337:7;21321:32;;21330:5;21321:32;;;21346:6;21321:32;;;;;;:::i;:::-;;;;;;;;21024:337;;;:::o;21369:2068::-;21507:1;21491:18;;:4;:18;;;;21483:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21584:1;21570:16;;:2;:16;;;;21562:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;21654:1;21645:6;:10;21637:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;21721:9;:13;21731:2;21721:13;;;;;;;;;;;;;;;;;;;;;;;;;21720:14;21712:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;21782:9;:15;21792:4;21782:15;;;;;;;;;;;;;;;;;;;;;;;;;21781:16;21773:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;21847:7;:5;:7::i;:::-;21840:14;;:4;:14;;;;:30;;;;;21863:7;:5;:7::i;:::-;21858:12;;:2;:12;;;;21840:30;21836:84;;;21880:11;;;;;;;;;;;21872:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;21836:84;21982:12;22059:13;;;;;;;;;;;22053:19;;:4;:19;;;:40;;;;22080:13;;;;;;;;;;;22076:17;;:2;:17;;;22053:40;22052:99;;;;;22100:18;:24;22119:4;22100:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;22128:18;:22;22147:2;22128:22;;;;;;;;;;;;;;;;;;;;;;;;;22100:50;22098:53;22052:99;22047:148;;;22179:4;22169:14;;22047:148;22241:13;;;;;;;;;;;22233:21;;:4;:21;;;:55;;;;;22272:15;;;;;;;;;;;22258:30;;:2;:30;;;;22233:55;:82;;;;;22293:18;:22;22312:2;22293:22;;;;;;;;;;;;;;;;;;;;;;;;;22292:23;22233:82;22230:447;;;22422:7;22418:107;;;22460:13;;22450:7;:23;;;;22508:1;22492:13;:17;;;;22418:107;22599:10;;22580:15;:29;22576:90;;;22646:4;22630:9;:13;22640:2;22630:13;;;;;;;;;;;;;;;;:20;;;;;;;;;;;;;;;;;;22576:90;22230:447;22710:6;;;;;;;;;;;22709:7;:22;;;;;22720:11;;;;;;;;;;;22709:22;:45;;;;;22741:13;;;;;;;;;;;22735:19;;:2;:19;;;22709:45;22705:676;;;22862:7;22858:96;;;22900:1;22890:7;:11;;;;22936:2;22920:13;:18;;;;22858:96;22982:28;23013:24;23031:4;23013:9;:24::i;:::-;22982:55;;23078:1;23055:20;:24;23052:306;;;23126:47;23169:3;23126:38;23155:8;;23126:24;23136:13;;;;;;;;;;;23126:9;:24::i;:::-;:28;;:38;;;;:::i;:::-;:42;;:47;;;;:::i;:::-;23103:20;:70;23100:188;;;23221:47;23264:3;23221:38;23250:8;;23221:24;23231:13;;;;;;;;;;;23221:9;:24::i;:::-;:28;;:38;;;;:::i;:::-;:42;;:47;;;;:::i;:::-;23198:70;;23100:188;23306:32;23317:20;23306:10;:32::i;:::-;23052:306;22705:676;;23391:38;23406:4;23411:2;23414:6;23421:7;23391:14;:38::i;:::-;21369:2068;;;;:::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;29532:163::-;29573:7;29594:15;29611;29630:19;:17;:19::i;:::-;29593:56;;;;29667:20;29679:7;29667;:11;;:20;;;;:::i;:::-;29660:27;;;;29532: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;28330:419::-;28389:7;28398;28407;28416;28425;28434;28455:23;28480:12;28494:18;28516:20;28528:7;28516:11;:20::i;:::-;28454:82;;;;;;28548:15;28565:23;28590:12;28606:50;28618:7;28627:4;28633:10;28645;:8;:10::i;:::-;28606:11;:50::i;:::-;28547:109;;;;;;28675:7;28684:15;28701:4;28707:15;28724:4;28730:10;28667:74;;;;;;;;;;;;;;;;;;28330:419;;;;;;;:::o;1327:136::-;1385:7;1412:43;1416:1;1419;1412:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1405:50;;1327:136;;;;:::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;23445:352::-;16177:4;16168:6;;:13;;;;;;;;;;;;;;;;;;23526:38:::1;23543:20;23526:16;:38::i;:::-;23640:26;23669:21;23640:50;;23725:1;23704:18;:22;23701:89;;;23743:35;23756:21;23743:12;:35::i;:::-;23701:89;16192:1;16213:5:::0;16204:6;;:14;;;;;;;;;;;;;;;;;;23445:352;:::o;25197:642::-;25308:7;25304:40;;25330:14;:12;:14::i;:::-;25304:40;25369:11;:19;25381:6;25369:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;25393:11;:22;25405:9;25393:22;;;;;;;;;;;;;;;;;;;;;;;;;25392:23;25369:46;25365:467;;;25432:48;25454:6;25462:9;25473:6;25432:21;:48::i;:::-;25365:467;;;25503:11;:19;25515:6;25503:19;;;;;;;;;;;;;;;;;;;;;;;;;25502:20;:46;;;;;25526:11;:22;25538:9;25526:22;;;;;;;;;;;;;;;;;;;;;;;;;25502:46;25498:334;;;25565:46;25585:6;25593:9;25604:6;25565:19;:46::i;:::-;25498:334;;;25633:11;:19;25645:6;25633:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;25656:11;:22;25668:9;25656:22;;;;;;;;;;;;;;;;;;;;;;;;;25633:45;25629:203;;;25695:48;25717:6;25725:9;25736:6;25695:21;:48::i;:::-;25629:203;;;25776:44;25794:6;25802:9;25813:6;25776:17;:44::i;:::-;25629:203;25498:334;25365:467;25197:642;;;;:::o;29703:561::-;29753:7;29762;29782:15;29800:7;;29782:25;;29818:15;29836:7;;29818:25;;29865:9;29860:289;29884:9;:16;;;;29880:1;:20;29860:289;;;29950:7;29926;:21;29934:9;29944:1;29934:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29926:21;;;;;;;;;;;;;;;;:31;:66;;;;29985:7;29961;:21;29969:9;29979:1;29969:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29961:21;;;;;;;;;;;;;;;;:31;29926:66;29922:97;;;30002:7;;30011;;29994:25;;;;;;;;;29922:97;30044:34;30056:7;:21;30064:9;30074:1;30064:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30056:21;;;;;;;;;;;;;;;;30044:7;:11;;:34;;;;:::i;:::-;30034:44;;30103:34;30115:7;:21;30123:9;30133:1;30123:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30115:21;;;;;;;;;;;;;;;;30103:7;:11;;:34;;;;:::i;:::-;30093:44;;29902:3;;;;;:::i;:::-;;;;29860:289;;;;30173:20;30185:7;;30173;;:11;;:20;;;;:::i;:::-;30163:7;:30;30159:61;;;30203:7;;30212;;30195:25;;;;;;;;30159:61;30239:7;30248;30231:25;;;;;;29703: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;28757:330::-;28817:7;28826;28835;28855:12;28870:24;28886:7;28870:15;:24::i;:::-;28855:39;;28905:18;28926:30;28948:7;28926:21;:30::i;:::-;28905:51;;28967:23;28993:33;29015:10;28993:17;29005:4;28993:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;28967:59;;29045:15;29062:4;29068:10;29037:42;;;;;;;;;28757:330;;;;;:::o;29095:429::-;29210:7;29219;29228;29248:15;29266:24;29278:11;29266:7;:11;;:24;;;;:::i;:::-;29248:42;;29301:12;29316:21;29325:11;29316:4;:8;;:21;;;;:::i;:::-;29301:36;;29348:18;29369:27;29384:11;29369:10;:14;;:27;;;;:::i;:::-;29348:48;;29407:23;29433:33;29455:10;29433:17;29445:4;29433:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;29407:59;;29485:7;29494:15;29511:4;29477:39;;;;;;;;;;29095:429;;;;;;;;:::o;23996:666::-;24122:21;24160:1;24146:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24122:40;;24191:4;24173;24178:1;24173:7;;;;;;;;;;;;;;;;;;;;;:23;;;;;;;;;;;24217:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24207:4;24212:1;24207:7;;;;;;;;;;;;;;;;;;;;;:32;;;;;;;;;;;24252:62;24269:4;24284:15;;;;;;;;;;;24302:11;24252:8;:62::i;:::-;24353:15;;;;;;;;;;;:66;;;24434:11;24460:1;24504:4;24531;24567:15;24353:240;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24619:35;24636:11;24649:4;24619:35;;;;;;;:::i;:::-;;;;;;;;23996:666;;:::o;23809:168::-;23866:15;;;;;;;;;;;:24;;:47;23891:21;23909:2;23891:13;23902:1;23891:6;:10;;:13;;;;:::i;:::-;:17;;:21;;;;:::i;:::-;23866:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23924:13;;;;;;;;;;;:22;;:45;23947:21;23965:2;23947:13;23958:1;23947:6;:10;;:13;;;;:::i;:::-;:17;;:21;;;;:::i;:::-;23924:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23809:168;:::o;30987:156::-;31044:1;31033:7;;:12;:34;;;;;31066:1;31049:13;;:18;31033:34;31030:46;;;31069:7;;31030:46;31106:1;31096:7;:11;;;;31134:1;31118:13;:17;;;;30987:156;:::o;26951:566::-;27054:15;27071:23;27096:12;27110:23;27135:12;27149:18;27171:19;27182:7;27171:10;:19::i;:::-;27053:137;;;;;;;;;;;;27219:28;27239:7;27219;:15;27227:6;27219:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;27201:7;:15;27209:6;27201:15;;;;;;;;;;;;;;;:46;;;;27276:28;27296:7;27276;:15;27284:6;27276:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;27258:7;:15;27266:6;27258:15;;;;;;;;;;;;;;;:46;;;;27336:39;27359:15;27336:7;:18;27344:9;27336:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;27315:7;:18;27323:9;27315:18;;;;;;;;;;;;;;;:60;;;;27389:26;27404:10;27389:14;:26::i;:::-;27426:23;27438:4;27444;27426:11;:23::i;:::-;27482:9;27465:44;;27474:6;27465:44;;;27493:15;27465:44;;;;;;:::i;:::-;;;;;;;;26951:566;;;;;;;;;:::o;26357:586::-;26458:15;26475:23;26500:12;26514:23;26539:12;26553:18;26575:19;26586:7;26575:10;:19::i;:::-;26457:137;;;;;;;;;;;;26623:28;26643:7;26623;:15;26631:6;26623:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;26605:7;:15;26613:6;26605:15;;;;;;;;;;;;;;;:46;;;;26683:39;26706:15;26683:7;:18;26691:9;26683:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;26662:7;:18;26670:9;26662:18;;;;;;;;;;;;;;;:60;;;;26754:39;26777:15;26754:7;:18;26762:9;26754:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;26733:7;:18;26741:9;26733:18;;;;;;;;;;;;;;;:60;;;;26815:26;26830:10;26815:14;:26::i;:::-;26852:23;26864:4;26870;26852:11;:23::i;:::-;26908:9;26891:44;;26900:6;26891:44;;;26919:15;26891:44;;;;;;:::i;:::-;;;;;;;;26357:586;;;;;;;;;:::o;27525:642::-;27628:15;27645:23;27670:12;27684:23;27709:12;27723:18;27745:19;27756:7;27745:10;:19::i;:::-;27627:137;;;;;;;;;;;;27793:28;27813:7;27793;:15;27801:6;27793:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;27775:7;:15;27783:6;27775:15;;;;;;;;;;;;;;;:46;;;;27850:28;27870:7;27850;:15;27858:6;27850:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;27832:7;:15;27840:6;27832:15;;;;;;;;;;;;;;;:46;;;;27910:39;27933:15;27910:7;:18;27918:9;27910:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;27889:7;:18;27897:9;27889:18;;;;;;;;;;;;;;;:60;;;;27981:39;28004:15;27981:7;:18;27989:9;27981:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;27960:7;:18;27968:9;27960:18;;;;;;;;;;;;;;;:60;;;;28039:26;28054:10;28039:14;:26::i;:::-;28076:23;28088:4;28094;28076:11;:23::i;:::-;28132:9;28115:44;;28124:6;28115:44;;;28143:15;28115:44;;;;;;:::i;:::-;;;;;;;;27525:642;;;;;;;;;:::o;25847:502::-;25946:15;25963:23;25988:12;26002:23;26027:12;26041:18;26063:19;26074:7;26063:10;:19::i;:::-;25945:137;;;;;;;;;;;;26111:28;26131:7;26111;:15;26119:6;26111:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;26093:7;:15;26101:6;26093:15;;;;;;;;;;;;;;;:46;;;;26171:39;26194:15;26171:7;:18;26179:9;26171:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;26150:7;:18;26158:9;26150:18;;;;;;;;;;;;;;;:60;;;;26221:26;26236:10;26221:14;:26::i;:::-;26258:23;26270:4;26276;26258:11;:23::i;:::-;26314:9;26297:44;;26306:6;26297:44;;;26325:15;26297:44;;;;;;:::i;:::-;;;;;;;;25847:502;;;;;;;;;:::o;30643:154::-;30707:7;30734:55;30773:5;30734:20;30746:7;;30734;:11;;:20;;;;:::i;:::-;:24;;:55;;;;:::i;:::-;30727:62;;30643:154;;;:::o;30809:166::-;30879:7;30906:61;30951:5;30906:26;30918:13;;30906:7;:11;;:26;;;;:::i;:::-;:30;;:61;;;;:::i;:::-;30899:68;;30809:166;;;:::o;30276:355::-;30339:19;30362:10;:8;:10::i;:::-;30339:33;;30383:18;30404:27;30419:11;30404:10;:14;;:27;;;;:::i;:::-;30383:48;;30467:38;30494:10;30467:7;:22;30483:4;30467:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;30442:7;:22;30458:4;30442:22;;;;;;;;;;;;;;;:63;;;;30519:11;:26;30539:4;30519:26;;;;;;;;;;;;;;;;;;;;;;;;;30516:107;;;30585:38;30612:10;30585:7;:22;30601:4;30585:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;30560:7;:22;30576:4;30560:22;;;;;;;;;;;;;;;:63;;;;30516:107;30276:355;;;:::o;28175:147::-;28253:17;28265:4;28253:7;;:11;;:17;;;;:::i;:::-;28243:7;:27;;;;28294:20;28309:4;28294:10;;:14;;:20;;;;:::i;:::-;28281:10;:33;;;;28175: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:366::-;10720:3;10741:67;10805:2;10800:3;10741:67;:::i;:::-;10734:74;;10817:93;10906:3;10817:93;:::i;:::-;10935:2;10930:3;10926:12;10919:19;;10724:220;;;:::o;10950:118::-;11037:24;11055:5;11037:24;:::i;:::-;11032:3;11025:37;11015:53;;:::o;11074:112::-;11157:22;11173:5;11157:22;:::i;:::-;11152:3;11145:35;11135:51;;:::o;11192:222::-;11285:4;11323:2;11312:9;11308:18;11300:26;;11336:71;11404:1;11393:9;11389:17;11380:6;11336:71;:::i;:::-;11290:124;;;;:::o;11420:254::-;11529:4;11567:2;11556:9;11552:18;11544:26;;11580:87;11664:1;11653:9;11649:17;11640:6;11580:87;:::i;:::-;11534:140;;;;:::o;11680:332::-;11801:4;11839:2;11828:9;11824:18;11816:26;;11852:71;11920:1;11909:9;11905:17;11896:6;11852:71;:::i;:::-;11933:72;12001:2;11990:9;11986:18;11977:6;11933:72;:::i;:::-;11806:206;;;;;:::o;12018:210::-;12105:4;12143:2;12132:9;12128:18;12120:26;;12156:65;12218:1;12207:9;12203:17;12194:6;12156:65;:::i;:::-;12110:118;;;;:::o;12234:276::-;12354:4;12392:2;12381:9;12377:18;12369:26;;12405:98;12500:1;12489:9;12485:17;12476:6;12405:98;:::i;:::-;12359:151;;;;:::o;12516:313::-;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:78;12817:4;12808:6;12744:78;:::i;:::-;12736:86;;12634:195;;;;:::o;12835:419::-;13001:4;13039:2;13028:9;13024:18;13016:26;;13088:9;13082:4;13078:20;13074:1;13063:9;13059:17;13052:47;13116:131;13242:4;13116:131;:::i;:::-;13108:139;;13006:248;;;:::o;13260:419::-;13426:4;13464:2;13453:9;13449:18;13441:26;;13513:9;13507:4;13503:20;13499:1;13488:9;13484:17;13477:47;13541:131;13667:4;13541:131;:::i;:::-;13533:139;;13431:248;;;:::o;13685:419::-;13851:4;13889:2;13878:9;13874:18;13866:26;;13938:9;13932:4;13928:20;13924:1;13913:9;13909:17;13902:47;13966:131;14092:4;13966:131;:::i;:::-;13958:139;;13856:248;;;:::o;14110:419::-;14276:4;14314:2;14303:9;14299:18;14291:26;;14363:9;14357:4;14353:20;14349:1;14338:9;14334:17;14327:47;14391:131;14517:4;14391:131;:::i;:::-;14383:139;;14281:248;;;:::o;14535:419::-;14701:4;14739:2;14728:9;14724:18;14716:26;;14788:9;14782:4;14778:20;14774:1;14763:9;14759:17;14752:47;14816:131;14942:4;14816:131;:::i;:::-;14808:139;;14706:248;;;:::o;14960:419::-;15126:4;15164:2;15153:9;15149:18;15141:26;;15213:9;15207:4;15203:20;15199:1;15188:9;15184:17;15177:47;15241:131;15367:4;15241:131;:::i;:::-;15233:139;;15131:248;;;:::o;15385:419::-;15551:4;15589:2;15578:9;15574:18;15566:26;;15638:9;15632:4;15628:20;15624:1;15613:9;15609:17;15602:47;15666:131;15792:4;15666:131;:::i;:::-;15658:139;;15556:248;;;:::o;15810:419::-;15976:4;16014:2;16003:9;15999:18;15991:26;;16063:9;16057:4;16053:20;16049:1;16038:9;16034:17;16027:47;16091:131;16217:4;16091:131;:::i;:::-;16083:139;;15981:248;;;:::o;16235:419::-;16401:4;16439:2;16428:9;16424:18;16416:26;;16488:9;16482:4;16478:20;16474:1;16463:9;16459:17;16452:47;16516:131;16642:4;16516:131;:::i;:::-;16508:139;;16406:248;;;:::o;16660:419::-;16826:4;16864:2;16853:9;16849:18;16841:26;;16913:9;16907:4;16903:20;16899:1;16888:9;16884:17;16877:47;16941:131;17067:4;16941:131;:::i;:::-;16933:139;;16831:248;;;:::o;17085:419::-;17251:4;17289:2;17278:9;17274:18;17266:26;;17338:9;17332:4;17328:20;17324:1;17313:9;17309:17;17302:47;17366:131;17492:4;17366:131;:::i;:::-;17358:139;;17256:248;;;:::o;17510:419::-;17676:4;17714:2;17703:9;17699:18;17691:26;;17763:9;17757:4;17753:20;17749:1;17738:9;17734:17;17727:47;17791:131;17917:4;17791:131;:::i;:::-;17783:139;;17681:248;;;:::o;17935:419::-;18101:4;18139:2;18128:9;18124:18;18116:26;;18188:9;18182:4;18178:20;18174:1;18163:9;18159:17;18152:47;18216:131;18342:4;18216:131;:::i;:::-;18208:139;;18106:248;;;:::o;18360:419::-;18526:4;18564:2;18553:9;18549:18;18541:26;;18613:9;18607:4;18603:20;18599:1;18588:9;18584:17;18577:47;18641:131;18767:4;18641:131;:::i;:::-;18633:139;;18531:248;;;:::o;18785:419::-;18951:4;18989:2;18978:9;18974:18;18966:26;;19038:9;19032:4;19028:20;19024:1;19013:9;19009:17;19002:47;19066:131;19192:4;19066:131;:::i;:::-;19058:139;;18956:248;;;:::o;19210:222::-;19303:4;19341:2;19330:9;19326:18;19318:26;;19354:71;19422:1;19411:9;19407:17;19398:6;19354:71;:::i;:::-;19308:124;;;;:::o;19438:483::-;19609:4;19647:2;19636:9;19632:18;19624:26;;19660:71;19728:1;19717:9;19713:17;19704:6;19660:71;:::i;:::-;19778:9;19772:4;19768:20;19763:2;19752:9;19748:18;19741:48;19806:108;19909:4;19900:6;19806:108;:::i;:::-;19798:116;;19614:307;;;;;:::o;19927:831::-;20190:4;20228:3;20217:9;20213:19;20205:27;;20242:71;20310:1;20299:9;20295:17;20286:6;20242:71;:::i;:::-;20323:80;20399:2;20388:9;20384:18;20375:6;20323:80;:::i;:::-;20450:9;20444:4;20440:20;20435:2;20424:9;20420:18;20413:48;20478:108;20581:4;20572:6;20478:108;:::i;:::-;20470:116;;20596:72;20664:2;20653:9;20649:18;20640:6;20596:72;:::i;:::-;20678:73;20746:3;20735:9;20731:19;20722:6;20678:73;:::i;:::-;20195:563;;;;;;;;:::o;20764:214::-;20853:4;20891:2;20880:9;20876:18;20868:26;;20904:67;20968:1;20957:9;20953:17;20944:6;20904:67;:::i;:::-;20858:120;;;;:::o;20984:132::-;21051:4;21074:3;21066:11;;21104:4;21099:3;21095:14;21087:22;;21056:60;;;:::o;21122:114::-;21189:6;21223:5;21217:12;21207:22;;21196:40;;;:::o;21242:99::-;21294:6;21328:5;21322:12;21312:22;;21301:40;;;:::o;21347:113::-;21417:4;21449;21444:3;21440:14;21432:22;;21422:38;;;:::o;21466:184::-;21565:11;21599:6;21594:3;21587:19;21639:4;21634:3;21630:14;21615:29;;21577:73;;;;:::o;21656:169::-;21740:11;21774:6;21769:3;21762:19;21814:4;21809:3;21805:14;21790:29;;21752:73;;;;:::o;21831:305::-;21871:3;21890:20;21908:1;21890:20;:::i;:::-;21885:25;;21924:20;21942:1;21924:20;:::i;:::-;21919:25;;22078:1;22010:66;22006:74;22003:1;22000:81;21997:2;;;22084:18;;:::i;:::-;21997:2;22128:1;22125;22121:9;22114:16;;21875:261;;;;:::o;22142:185::-;22182:1;22199:20;22217:1;22199:20;:::i;:::-;22194:25;;22233:20;22251:1;22233:20;:::i;:::-;22228:25;;22272:1;22262:2;;22277:18;;:::i;:::-;22262:2;22319:1;22316;22312:9;22307:14;;22184:143;;;;:::o;22333:348::-;22373:7;22396:20;22414:1;22396:20;:::i;:::-;22391:25;;22430:20;22448:1;22430:20;:::i;:::-;22425:25;;22618:1;22550:66;22546:74;22543:1;22540:81;22535:1;22528:9;22521:17;22517:105;22514:2;;;22625:18;;:::i;:::-;22514:2;22673:1;22670;22666:9;22655:20;;22381:300;;;;:::o;22687:191::-;22727:4;22747:20;22765:1;22747:20;:::i;:::-;22742:25;;22781:20;22799:1;22781:20;:::i;:::-;22776:25;;22820:1;22817;22814:8;22811:2;;;22825:18;;:::i;:::-;22811:2;22870:1;22867;22863:9;22855:17;;22732:146;;;;:::o;22884:96::-;22921:7;22950:24;22968:5;22950:24;:::i;:::-;22939:35;;22929:51;;;:::o;22986:104::-;23031:7;23060:24;23078:5;23060:24;:::i;:::-;23049:35;;23039:51;;;:::o;23096:90::-;23130:7;23173:5;23166:13;23159:21;23148:32;;23138:48;;;:::o;23192:126::-;23229:7;23269:42;23262:5;23258:54;23247:65;;23237:81;;;:::o;23324:77::-;23361:7;23390:5;23379:16;;23369:32;;;:::o;23407:86::-;23442:7;23482:4;23475:5;23471:16;23460:27;;23450:43;;;:::o;23499:180::-;23576:9;23609:64;23667:5;23609:64;:::i;:::-;23596:77;;23586:93;;;:::o;23685:140::-;23762:9;23795:24;23813:5;23795:24;:::i;:::-;23782:37;;23772:53;;;:::o;23831:121::-;23889:9;23922:24;23940:5;23922:24;:::i;:::-;23909:37;;23899:53;;;:::o;23958:307::-;24026:1;24036:113;24050:6;24047:1;24044:13;24036:113;;;24135:1;24130:3;24126:11;24120:18;24116:1;24111:3;24107:11;24100:39;24072:2;24069:1;24065:10;24060:15;;24036:113;;;24167:6;24164:1;24161:13;24158:2;;;24247:1;24238:6;24233:3;24229:16;24222:27;24158:2;24007:258;;;;:::o;24271:320::-;24315:6;24352:1;24346:4;24342:12;24332:22;;24399:1;24393:4;24389:12;24420:18;24410:2;;24476:4;24468:6;24464:17;24454:27;;24410:2;24538;24530:6;24527:14;24507:18;24504:38;24501:2;;;24557:18;;:::i;:::-;24501:2;24322:269;;;;:::o;24597:233::-;24636:3;24659:24;24677:5;24659:24;:::i;:::-;24650:33;;24705:66;24698:5;24695:77;24692:2;;;24775:18;;:::i;:::-;24692:2;24822:1;24815:5;24811:13;24804:20;;24640:190;;;:::o;24836:180::-;24884:77;24881:1;24874:88;24981:4;24978:1;24971:15;25005:4;25002:1;24995:15;25022:180;25070:77;25067:1;25060:88;25167:4;25164:1;25157:15;25191:4;25188:1;25181:15;25208:180;25256:77;25253:1;25246:88;25353:4;25350:1;25343:15;25377:4;25374:1;25367:15;25394:102;25435:6;25486:2;25482:7;25477:2;25470:5;25466:14;25462:28;25452:38;;25442:54;;;:::o;25502:222::-;25642:34;25638:1;25630:6;25626:14;25619:58;25711:5;25706:2;25698:6;25694:15;25687:30;25608:116;:::o;25730:229::-;25870:34;25866:1;25858:6;25854:14;25847:58;25939:12;25934:2;25926:6;25922:15;25915:37;25836:123;:::o;25965:225::-;26105:34;26101:1;26093:6;26089:14;26082:58;26174:8;26169:2;26161:6;26157:15;26150:33;26071:119;:::o;26196:221::-;26336:34;26332:1;26324:6;26320:14;26313:58;26405:4;26400:2;26392:6;26388:15;26381:29;26302:115;:::o;26423:177::-;26563:29;26559:1;26551:6;26547:14;26540:53;26529:71;:::o;26606:177::-;26746:29;26742:1;26734:6;26730:14;26723:53;26712:71;:::o;26789:181::-;26929:33;26925:1;26917:6;26913:14;26906:57;26895:75;:::o;26976:220::-;27116:34;27112:1;27104:6;27100:14;27093:58;27185:3;27180:2;27172:6;27168:15;27161:28;27082:114;:::o;27202:182::-;27342:34;27338:1;27330:6;27326:14;27319:58;27308:76;:::o;27390:228::-;27530:34;27526:1;27518:6;27514:14;27507:58;27599:11;27594:2;27586:6;27582:15;27575:36;27496:122;:::o;27624:224::-;27764:34;27760:1;27752:6;27748:14;27741:58;27833:7;27828:2;27820:6;27816:15;27809:32;27730:118;:::o;27854:223::-;27994:34;27990:1;27982:6;27978:14;27971:58;28063:6;28058:2;28050:6;28046:15;28039:31;27960:117;:::o;28083:174::-;28223:26;28219:1;28211:6;28207:14;28200:50;28189:68;:::o;28263:231::-;28403:34;28399:1;28391:6;28387:14;28380:58;28472:14;28467:2;28459:6;28455:15;28448:39;28369:125;:::o;28500:173::-;28640:25;28636:1;28628:6;28624:14;28617:49;28606:67;:::o;28679:122::-;28752:24;28770:5;28752:24;:::i;:::-;28745:5;28742:35;28732:2;;28791:1;28788;28781:12;28732:2;28722:79;:::o;28807:116::-;28877:21;28892:5;28877:21;:::i;:::-;28870:5;28867:32;28857:2;;28913:1;28910;28903:12;28857:2;28847:76;:::o;28929:122::-;29002:24;29020:5;29002:24;:::i;:::-;28995:5;28992:35;28982:2;;29041:1;29038;29031:12;28982:2;28972:79;:::o

Swarm Source

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