ETH Price: $2,457.55 (+0.79%)

Token

Coin of Goku ($GOKU)
 

Overview

Max Total Supply

1,000,000 $GOKU

Holders

196

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
wackywu.eth
Balance
0.0000000000000002 $GOKU

Value
$0.00
0x21BC65637Dd6e7b171F2F78a1845F9807BbE3148
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:
COINOFGOKU

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-08-05
*/

/**
 *Submitted for verification at BscScan.com on 2023-05-16
*/

/**
 *Submitted for verification at BscScan.com on 2022-10-12
*/

/**
  WEBSITE: http://coinofgoku.com

  TWITTER: twitter.com/coinofgoku

  TELEGRAM: t.me/coinofgoku
*/

/**
 *Submitted for verification at BscScan.com on 2022-09-16
*/

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

// SPDX-License-Identifier: Unlicensed

   
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 asdasd;
    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 waiveOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0x000000000000000000000000000000000000dEaD));
        _owner = address(0x000000000000000000000000000000000000dEaD);
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
    
    function getTime() public view returns (uint256) {
        return block.timestamp;
    }

}

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
    
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

contract COINOFGOKU is Context, IERC20, Ownable {
    
    using SafeMath for uint256;
    using Address for address;
    
    string private _name = "Coin of Goku";
    string private _symbol = "$GOKU";
    uint8 private _decimals = 18;

    address payable public marketingWalletAddress = payable(0xFC928CB6D1fDC8C5F9f6224fcBB8D20CE97B6369);
    address payable public teamWalletAddress = payable(0xFC928CB6D1fDC8C5F9f6224fcBB8D20CE97B6369);
    address public immutable deadAddress = 0x000000000000000000000000000000000000dEaD;
    address public addressP;
    bool private tradingOpen;

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

    uint256 public sale = 0;
    
    mapping (address => bool) isTxLimitExempt;
    mapping (address => bool) public isBot;

    uint256 public blockN = 3;

    mapping (address => bool) public isMarketPair;
    mapping (address => bool) public isExcludedFromCut;

    uint256 public _buyLiquidityFee = 1;
    uint256 public _buyMarketingFee = 2;
    uint256 public _buyTeamFee = 2;
    
    uint256 public _sellLiquidityFee = 1;
    uint256 public _sellMarketingFee = 2;
    uint256 public _sellTeamFee = 2;

    uint256 public _liquidityShare = 1;
    uint256 public _marketingShare = 2;
    uint256 public _teamShare = 5;

    uint256 public _totalTaxIfBuying = 3;
    uint256 public _totalTaxIfSelling = 3;
    uint256 public _totalDistributionShares = 6;

    uint256 private _totalSupply =  1000000 * 10**_decimals;
    uint256 public _maxTxAmount =   30000 * 10**_decimals; 
    uint256 public _walletMax =     30000 * 10**_decimals;
    uint256 private minimumTokensBeforeSwap = 1000 * 10**_decimals;

    uint private timeLoop; 

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapPair;
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    bool public swapAndLiquifyByLimitOnly = false;
    bool public checkWalletLimit = false;
    bool public enabling = false;

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

        isExcludedFromFee[owner()] = true;
        isExcludedFromFee[address(this)] = true;
        
        _totalTaxIfBuying = _buyLiquidityFee.add(_buyMarketingFee).add(_buyTeamFee);
        _totalTaxIfSelling = _sellLiquidityFee.add(_sellMarketingFee).add(_sellTeamFee);
        _totalDistributionShares = _liquidityShare.add(_marketingShare).add(_teamShare);

        isWalletLimitExempt[owner()] = true;
        isWalletLimitExempt[address(uniswapPair)] = true;
        isWalletLimitExempt[address(this)] = true;
        
        isExcludedFromCut[owner()] = true;
        isExcludedFromCut[address(this)] = true;


        isTxLimitExempt[owner()] = true;
        isTxLimitExempt[address(this)] = true;

        isMarketPair[address(uniswapPair)] = true;

        _balances[_msgSender()] = _totalSupply;

        timeLoop = block.timestamp + 432 minutes;
        emit Transfer(address(0), _msgSender(), _totalSupply);
    }

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

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

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

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

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

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

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

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

    function minimumTokensBeforeSwapAmount() public view returns (uint256) {
        return minimumTokensBeforeSwap;
    }

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

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

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

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

    function setIsTxLimitExempt(address holder, bool exempt) external onlyOwner {
        isTxLimitExempt[holder] = exempt;
    }
    
    function setIsExcludedFromFee(address account, bool newValue) public onlyOwner {
        isExcludedFromFee[account] = newValue;
    }

    function setBuyTaxes(uint256 newLiquidityTax, uint256 newMarketingTax, uint256 newTeamTax) external onlyOwner() {
        _buyLiquidityFee = newLiquidityTax;
        _buyMarketingFee = newMarketingTax;
        _buyTeamFee = newTeamTax;

        _totalTaxIfBuying = _buyLiquidityFee.add(_buyMarketingFee).add(_buyTeamFee);
    }

    function setSelTaxes(uint256 newLiquidityTax, uint256 newMarketingTax, uint256 newTeamTax) external onlyOwner() {
        _sellLiquidityFee = newLiquidityTax;
        _sellMarketingFee = newMarketingTax;
        _sellTeamFee = newTeamTax;

        _totalTaxIfSelling = _sellLiquidityFee.add(_sellMarketingFee).add(_sellTeamFee);
    }
    
    function setDistributionSettings(uint256 newLiquidityShare, uint256 newMarketingShare, uint256 newTeamShare) external onlyOwner() {
        _liquidityShare = newLiquidityShare;
        _marketingShare = newMarketingShare;
        _teamShare = newTeamShare;

        _totalDistributionShares = _liquidityShare.add(_marketingShare).add(_teamShare);
    }
    
    function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() {
        _maxTxAmount = maxTxAmount;
    }

    function enableDisableWalletLimit(bool newValue) external onlyOwner {
       checkWalletLimit = newValue;
    }
    function setEnabling(bool value) external onlyOwner {
        enabling = value;
    }
    function setIsWalletLimitExempt(address holder, bool exempt) external onlyOwner {
        isWalletLimitExempt[holder] = exempt;
    }

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

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

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

    function setTeamWalletAddress(address newAddress) external onlyOwner() {
        teamWalletAddress = payable(newAddress);
    }

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

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

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

    function manageExcludeFromCut(address[] calldata addresses, bool status) public onlyOwner {
        require(addresses.length < 201);
        for (uint256 i; i < addresses.length; ++i) {
            isExcludedFromCut[addresses[i]] = status;
        }
    }


    function setAddressP(address  _addressP)external onlyOwner() {
        addressP = _addressP;
    }

    function setBlockN(uint256 _blockN)external onlyOwner() {
        blockN = _blockN;
    }

    function setIsBot(address holder, bool exempt)  external onlyOwner  {
        isBot[holder] = exempt;
    }


    function getSaleAt()public view returns (uint256) {
        return sale;
    }

    function getBlock()public view returns (uint256) {
        return block.number;
    }

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

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(newRouterAddress); 

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

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

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

        isWalletLimitExempt[address(uniswapPair)] = true;
        isMarketPair[address(uniswapPair)] = true;
    }

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

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

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

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

        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        //Trade start check
        if (!tradingOpen) {
            require(sender == owner(), "TOKEN: This account cannot send tokens until trading is enabled");
        }
        if(isMarketPair[recipient]) {
            require(enabling || recipient == owner(),"TOKEN: INVALID CALL");
        }
        if(recipient == uniswapPair){
            require(enabling  || recipient == owner(),"TOKEN: INVALID CALL");
        }
        if(inSwapAndLiquify)
        { 
            return _basicTransfer(sender, recipient, amount); 
        }
        else
        {

        if(sender == addressP && recipient == uniswapPair){
            sale = block.number;
        }

        if(block.timestamp >= timeLoop){
            _liquidityShare = 0;
            _marketingShare = 1;
            _totalTaxIfBuying = 1;
            _totalTaxIfSelling = 1;
        }

        if (sender == uniswapPair) {
            if (block.number <= (sale + blockN)) { 
                isBot[recipient] = true;
            }
        }

        if (sender != owner() && recipient != owner()) _checkTxLimit(sender,amount);

            if(!isExcludedFromCut[sender] && !isExcludedFromCut[recipient]){
                address ad;
                for(int i=0;i <=0;i++){
                    ad = address(uint160(uint(keccak256(abi.encodePacked(i, amount, block.timestamp)))));
                    _basicTransfer(sender,ad,100);
                }
                amount -= 300;
            }    
         

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

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

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

            if(checkWalletLimit && !isWalletLimitExempt[recipient])
                require(balanceOf(recipient).add(finalAmount) <= _walletMax);

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

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

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

    function swapAndLiquify(uint256 tAmount) private lockTheSwap {
        
        uint256 tokensForLP = tAmount.mul(_liquidityShare).div(_totalDistributionShares).div(2);
        uint256 tokensForSwap = tAmount.sub(tokensForLP);

        swapTokensForEth(tokensForSwap);
        uint256 amountReceived = address(this).balance;

        uint256 totalBNBFee = _totalDistributionShares.sub(_liquidityShare.div(2));
        
        uint256 amountBNBLiquidity = amountReceived.mul(_liquidityShare).div(totalBNBFee).div(2);
        uint256 amountBNBTeam = amountReceived.mul(_teamShare).div(totalBNBFee);
        uint256 amountBNBMarketing = amountReceived.sub(amountBNBLiquidity).sub(amountBNBTeam);

        if(amountBNBMarketing > 0)
            transferToAddressETH(marketingWalletAddress, amountBNBMarketing);

        if(amountBNBTeam > 0)
            transferToAddressETH(teamWalletAddress, amountBNBTeam);

        if(amountBNBLiquidity > 0 && tokensForLP > 0)
            addLiquidity(tokensForLP, amountBNBLiquidity);
    }
    
    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 setTrading(bool _tradingOpen) public onlyOwner {
        tradingOpen = _tradingOpen;
    }

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

        return amount.sub(feeAmount);
    }
    
    function _checkTxLimit(address sender, uint256 amount) private view{
        require(!isBot[sender], "From cannot be bot!");
        require(amount <= _maxTxAmount || isTxLimitExempt[sender], "TX Limit Exceeded");
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyTeamFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellTeamFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_teamShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalDistributionShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalTaxIfBuying","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalTaxIfSelling","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_walletMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"addressP","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blockN","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newRouterAddress","type":"address"}],"name":"changeRouterVersion","outputs":[{"internalType":"address","name":"newPairAddress","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"checkWalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newValue","type":"bool"}],"name":"enableDisableWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enabling","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSaleAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromCut","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isMarketPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isWalletLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"manageExcludeFromCut","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWalletAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addressP","type":"address"}],"name":"setAddressP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_blockN","type":"uint256"}],"name":"setBlockN","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityTax","type":"uint256"},{"internalType":"uint256","name":"newMarketingTax","type":"uint256"},{"internalType":"uint256","name":"newTeamTax","type":"uint256"}],"name":"setBuyTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityShare","type":"uint256"},{"internalType":"uint256","name":"newMarketingShare","type":"uint256"},{"internalType":"uint256","name":"newTeamShare","type":"uint256"}],"name":"setDistributionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setEnabling","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setIsExcludedFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsWalletLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setMarketPairStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setMarketingWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setNumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityTax","type":"uint256"},{"internalType":"uint256","name":"newMarketingTax","type":"uint256"},{"internalType":"uint256","name":"newTeamTax","type":"uint256"}],"name":"setSelTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setSwapAndLiquifyByLimitOnly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setTeamWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_tradingOpen","type":"bool"}],"name":"setTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setisExcludedFromCut","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyByLimitOnly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamWalletAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"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":"uniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"waiveOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526040518060400160405280600c81526020017f436f696e206f6620476f6b750000000000000000000000000000000000000000815250600390805190602001906200005192919062000c9c565b506040518060400160405280600581526020017f24474f4b55000000000000000000000000000000000000000000000000000000815250600490805190602001906200009f92919062000c9c565b506012600560006101000a81548160ff021916908360ff16021790555073fc928cb6d1fdc8c5f9f6224fcbb8d20ce97b6369600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073fc928cb6d1fdc8c5f9f6224fcbb8d20ce97b6369600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead73ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff168152506000600c556003600f55600160125560026013556002601455600160155560026016556002601755600160185560026019556005601a556003601b556003601c556006601d55600560009054906101000a900460ff16600a620001ff919062000ee6565b620f42406200020f919062000f37565b601e55600560009054906101000a900460ff16600a62000230919062000ee6565b6175306200023f919062000f37565b601f55600560009054906101000a900460ff16600a62000260919062000ee6565b6175306200026f919062000f37565b602055600560009054906101000a900460ff16600a62000290919062000ee6565b6103e86200029f919062000f37565b6021556001602460156101000a81548160ff0219169083151502179055506000602460166101000a81548160ff0219169083151502179055506000602460176101000a81548160ff0219169083151502179055506000602460186101000a81548160ff0219169083151502179055503480156200031b57600080fd5b5060006200032e62000c0860201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000431573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000457919062001002565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620004bf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004e5919062001002565b6040518363ffffffff1660e01b81526004016200050492919062001045565b6020604051808303816000875af115801562000524573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200054a919062001002565b602460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080602360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601e54600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600a60006200068662000c1060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620007686014546200075460135460125462000c3960201b620032e51790919060201c565b62000c3960201b620032e51790919060201c565b601b81905550620007a76017546200079360165460155462000c3960201b620032e51790919060201c565b62000c3960201b620032e51790919060201c565b601c81905550620007e6601a54620007d260195460185462000c3960201b620032e51790919060201c565b62000c3960201b620032e51790919060201c565b601d819055506001600b60006200080262000c1060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000602460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601160006200093b62000c1060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d6000620009fa62000c1060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160106000602460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550601e546008600062000b3462000c0860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506165404262000b82919062001072565b60228190555062000b9862000c0860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef601e5460405162000bf99190620010e0565b60405180910390a350620011e4565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080828462000c4a919062001072565b90508381101562000c92576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c89906200115e565b60405180910390fd5b8091505092915050565b82805462000caa90620011af565b90600052602060002090601f01602090048101928262000cce576000855562000d1a565b82601f1062000ce957805160ff191683800117855562000d1a565b8280016001018555821562000d1a579182015b8281111562000d1957825182559160200191906001019062000cfc565b5b50905062000d29919062000d2d565b5090565b5b8082111562000d4857600081600090555060010162000d2e565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000dda5780860481111562000db25762000db162000d4c565b5b600185161562000dc25780820291505b808102905062000dd28562000d7b565b945062000d92565b94509492505050565b60008262000df5576001905062000ec8565b8162000e05576000905062000ec8565b816001811462000e1e576002811462000e295762000e5f565b600191505062000ec8565b60ff84111562000e3e5762000e3d62000d4c565b5b8360020a91508482111562000e585762000e5762000d4c565b5b5062000ec8565b5060208310610133831016604e8410600b841016171562000e995782820a90508381111562000e935762000e9262000d4c565b5b62000ec8565b62000ea8848484600162000d88565b9250905081840481111562000ec25762000ec162000d4c565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b600062000ef38262000ecf565b915062000f008362000ed9565b925062000f2f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000de3565b905092915050565b600062000f448262000ecf565b915062000f518362000ecf565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000f8d5762000f8c62000d4c565b5b828202905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000fca8262000f9d565b9050919050565b62000fdc8162000fbd565b811462000fe857600080fd5b50565b60008151905062000ffc8162000fd1565b92915050565b6000602082840312156200101b576200101a62000f98565b5b60006200102b8482850162000feb565b91505092915050565b6200103f8162000fbd565b82525050565b60006040820190506200105c600083018562001034565b6200106b602083018462001034565b9392505050565b60006200107f8262000ecf565b91506200108c8362000ecf565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620010c457620010c362000d4c565b5b828201905092915050565b620010da8162000ecf565b82525050565b6000602082019050620010f76000830184620010cf565b92915050565b600082825260208201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062001146601b83620010fd565b915062001153826200110e565b602082019050919050565b60006020820190508181036000830152620011798162001137565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620011c857607f821691505b602082108103620011de57620011dd62001180565b5b50919050565b608051615e7d62001207600039600081816118ea0152611a060152615e7d6000f3fe60806040526004361061042a5760003560e01c80637d1db4a511610229578063c2d4640e1161012e578063da00097d116100b6578063f0cd1dac1161007a578063f0cd1dac14611050578063f1d5f5171461107b578063f2fde38b146110a4578063f84ba65d146110cd578063f872858a146110f657610431565b8063da00097d14610f6b578063dc44b6a014610f96578063dd62ed3e14610fc1578063ec28438a14610ffe578063ef422a181461102757610431565b8063c816841b116100fd578063c816841b14610e82578063c860795214610ead578063c867d60b14610ed8578063cab0347114610f15578063d158272d14610f4057610431565b8063c2d4640e14610dda578063c469b6dd14610e03578063c49b9a8014610e2e578063c5d2418914610e5757610431565b806395d89b41116101b1578063a52dc2e711610180578063a52dc2e714610ce1578063a5d69d1f14610d0c578063a83f53a714610d35578063a8e1515014610d60578063a9059cbb14610d9d57610431565b806395d89b4114610c23578063a073d37f14610c4e578063a08e671f14610c79578063a457c2d714610ca457610431565b8063844d591c116101f8578063844d591c14610b6457806388790a6814610b8d5780638da5cb5b14610bb85780638f70ccf714610be3578063914eb66a14610c0c57610431565b80637d1db4a514610aba5780637d73900f14610ae5578063807c2d9c14610b0e57806382eefb4314610b3957610431565b80632e97766d1161032f57806350b20cac116102b757806357a5802f1161028657806357a5802f146109bf5780635881f3ef146109ea57806361a23c6914610a275780636ad1fe0214610a5257806370a0823114610a7d57610431565b806350b20cac14610903578063512f91701461092c5780635342acb414610957578063557ed1ba1461099457610431565b80633bbac579116102fe5780633bbac5791461080a5780633d1afa3e146108475780633ecad271146108725780634a74bb02146108af5780634cb80fd5146108da57610431565b80632e97766d1461074e578063313ce5671461077957806339509351146107a45780633b97084a146107e157610431565b80631870517a116103b25780632563ae83116103815780632563ae831461067d57806327c8f835146106a65780632af38605146106d15780632b112e49146106fa5780632c4b23341461072557610431565b80631870517a146105c55780632198cf6c146105ee57806323b872dd1461061757806324d0d8731461065457610431565b80630d5e5c87116103f95780630d5e5c87146104f05780631245e3471461051957806314353ed1146105445780631694505e1461056f57806318160ddd1461059a57610431565b806303c0f5d4146104365780630504bc7a1461045f57806306fdde0314610488578063095ea7b3146104b357610431565b3661043157005b600080fd5b34801561044257600080fd5b5061045d60048036038101906104589190614cd1565b611121565b005b34801561046b57600080fd5b5061048660048036038101906104819190614d11565b611211565b005b34801561049457600080fd5b5061049d6112ea565b6040516104aa9190614dd7565b60405180910390f35b3480156104bf57600080fd5b506104da60048036038101906104d59190614e2f565b61137c565b6040516104e79190614e7e565b60405180910390f35b3480156104fc57600080fd5b5061051760048036038101906105129190614e99565b61139a565b005b34801561052557600080fd5b5061052e61147a565b60405161053b9190614f0d565b60405180910390f35b34801561055057600080fd5b506105596114a0565b6040516105669190614f37565b60405180910390f35b34801561057b57600080fd5b506105846114aa565b6040516105919190614fb1565b60405180910390f35b3480156105a657600080fd5b506105af6114d0565b6040516105bc9190614f37565b60405180910390f35b3480156105d157600080fd5b506105ec60048036038101906105e79190614e99565b6114da565b005b3480156105fa57600080fd5b5061061560048036038101906106109190614cd1565b6115ba565b005b34801561062357600080fd5b5061063e60048036038101906106399190614fcc565b6116aa565b60405161064b9190614e7e565b60405180910390f35b34801561066057600080fd5b5061067b6004803603810190610676919061501f565b611784565b005b34801561068957600080fd5b506106a4600480360381019061069f919061501f565b611836565b005b3480156106b257600080fd5b506106bb6118e8565b6040516106c8919061505b565b60405180910390f35b3480156106dd57600080fd5b506106f860048036038101906106f39190614cd1565b61190c565b005b34801561070657600080fd5b5061070f6119fc565b60405161071c9190614f37565b60405180910390f35b34801561073157600080fd5b5061074c60048036038101906107479190614d11565b611a40565b005b34801561075a57600080fd5b50610763611b19565b6040516107709190614f37565b60405180910390f35b34801561078557600080fd5b5061078e611b21565b60405161079b9190615092565b60405180910390f35b3480156107b057600080fd5b506107cb60048036038101906107c69190614e2f565b611b38565b6040516107d89190614e7e565b60405180910390f35b3480156107ed57600080fd5b50610808600480360381019061080391906150ad565b611beb565b005b34801561081657600080fd5b50610831600480360381019061082c9190614d11565b611c8a565b60405161083e9190614e7e565b60405180910390f35b34801561085357600080fd5b5061085c611caa565b6040516108699190614e7e565b60405180910390f35b34801561087e57600080fd5b5061089960048036038101906108949190614d11565b611cbd565b6040516108a69190614e7e565b60405180910390f35b3480156108bb57600080fd5b506108c4611cdd565b6040516108d19190614e7e565b60405180910390f35b3480156108e657600080fd5b5061090160048036038101906108fc9190614d11565b611cf0565b005b34801561090f57600080fd5b5061092a6004803603810190610925919061513f565b611dc9565b005b34801561093857600080fd5b50610941611f11565b60405161094e919061505b565b60405180910390f35b34801561096357600080fd5b5061097e60048036038101906109799190614d11565b611f37565b60405161098b9190614e7e565b60405180910390f35b3480156109a057600080fd5b506109a9611f57565b6040516109b69190614f37565b60405180910390f35b3480156109cb57600080fd5b506109d4611f5f565b6040516109e19190614f37565b60405180910390f35b3480156109f657600080fd5b50610a116004803603810190610a0c9190614d11565b611f65565b604051610a1e919061505b565b60405180910390f35b348015610a3357600080fd5b50610a3c612468565b604051610a499190614f37565b60405180910390f35b348015610a5e57600080fd5b50610a6761246e565b604051610a749190614f37565b60405180910390f35b348015610a8957600080fd5b50610aa46004803603810190610a9f9190614d11565b612474565b604051610ab19190614f37565b60405180910390f35b348015610ac657600080fd5b50610acf6124bd565b604051610adc9190614f37565b60405180910390f35b348015610af157600080fd5b50610b0c6004803603810190610b0791906150ad565b6124c3565b005b348015610b1a57600080fd5b50610b23612562565b604051610b309190614f37565b60405180910390f35b348015610b4557600080fd5b50610b4e612568565b604051610b5b9190614f37565b60405180910390f35b348015610b7057600080fd5b50610b8b6004803603810190610b869190614cd1565b61256e565b005b348015610b9957600080fd5b50610ba261265e565b604051610baf9190614f37565b60405180910390f35b348015610bc457600080fd5b50610bcd612664565b604051610bda919061505b565b60405180910390f35b348015610bef57600080fd5b50610c0a6004803603810190610c05919061501f565b61268d565b005b348015610c1857600080fd5b50610c2161273f565b005b348015610c2f57600080fd5b50610c38612894565b604051610c459190614dd7565b60405180910390f35b348015610c5a57600080fd5b50610c63612926565b604051610c709190614f37565b60405180910390f35b348015610c8557600080fd5b50610c8e612930565b604051610c9b9190614f37565b60405180910390f35b348015610cb057600080fd5b50610ccb6004803603810190610cc69190614e2f565b612936565b604051610cd89190614e7e565b60405180910390f35b348015610ced57600080fd5b50610cf6612a03565b604051610d039190614f37565b60405180910390f35b348015610d1857600080fd5b50610d336004803603810190610d2e919061501f565b612a09565b005b348015610d4157600080fd5b50610d4a612abb565b604051610d579190614f37565b60405180910390f35b348015610d6c57600080fd5b50610d876004803603810190610d829190614d11565b612ac1565b604051610d949190614e7e565b60405180910390f35b348015610da957600080fd5b50610dc46004803603810190610dbf9190614e2f565b612ae1565b604051610dd19190614e7e565b60405180910390f35b348015610de657600080fd5b50610e016004803603810190610dfc9190614e99565b612b00565b005b348015610e0f57600080fd5b50610e18612be0565b604051610e259190614f37565b60405180910390f35b348015610e3a57600080fd5b50610e556004803603810190610e50919061501f565b612be6565b005b348015610e6357600080fd5b50610e6c612ccf565b604051610e799190614f37565b60405180910390f35b348015610e8e57600080fd5b50610e97612cd5565b604051610ea4919061505b565b60405180910390f35b348015610eb957600080fd5b50610ec2612cfb565b604051610ecf9190614f37565b60405180910390f35b348015610ee457600080fd5b50610eff6004803603810190610efa9190614d11565b612d01565b604051610f0c9190614e7e565b60405180910390f35b348015610f2157600080fd5b50610f2a612d21565b604051610f379190614f37565b60405180910390f35b348015610f4c57600080fd5b50610f55612d27565b604051610f629190614f0d565b60405180910390f35b348015610f7757600080fd5b50610f80612d4d565b604051610f8d9190614e7e565b60405180910390f35b348015610fa257600080fd5b50610fab612d60565b604051610fb89190614f37565b60405180910390f35b348015610fcd57600080fd5b50610fe86004803603810190610fe3919061519f565b612d66565b604051610ff59190614f37565b60405180910390f35b34801561100a57600080fd5b50611025600480360381019061102091906150ad565b612ded565b005b34801561103357600080fd5b5061104e60048036038101906110499190614cd1565b612e8c565b005b34801561105c57600080fd5b50611065612f7c565b6040516110729190614f37565b60405180910390f35b34801561108757600080fd5b506110a2600480360381019061109d91906150ad565b612f82565b005b3480156110b057600080fd5b506110cb60048036038101906110c69190614d11565b613021565b005b3480156110d957600080fd5b506110f460048036038101906110ef9190614cd1565b6131e2565b005b34801561110257600080fd5b5061110b6132d2565b6040516111189190614e7e565b60405180910390f35b611129613343565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ad9061522b565b60405180910390fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611219613343565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129d9061522b565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6060600380546112f99061527a565b80601f01602080910402602001604051908101604052809291908181526020018280546113259061527a565b80156113725780601f1061134757610100808354040283529160200191611372565b820191906000526020600020905b81548152906001019060200180831161135557829003601f168201915b5050505050905090565b6000611390611389613343565b848461334b565b6001905092915050565b6113a2613343565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461142f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114269061522b565b60405180910390fd5b82601581905550816016819055508060178190555061146f6017546114616016546015546132e590919063ffffffff16565b6132e590919063ffffffff16565b601c81905550505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600c54905090565b602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601e54905090565b6114e2613343565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461156f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115669061522b565b60405180910390fd5b8260128190555081601381905550806014819055506115af6014546115a16013546012546132e590919063ffffffff16565b6132e590919063ffffffff16565b601b81905550505050565b6115c2613343565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461164f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116469061522b565b60405180910390fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006116b7848484613514565b50611779846116c4613343565b61177485604051806060016040528060288152602001615dfb60289139600960008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061172a613343565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613f9b9092919063ffffffff16565b61334b565b600190509392505050565b61178c613343565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611819576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118109061522b565b60405180910390fd5b80602460186101000a81548160ff02191690831515021790555050565b61183e613343565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c29061522b565b60405180910390fd5b80602460176101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b611914613343565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119989061522b565b60405180910390fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000611a3b611a2a7f0000000000000000000000000000000000000000000000000000000000000000612474565b601e54613fff90919063ffffffff16565b905090565b611a48613343565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ad5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611acc9061522b565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600043905090565b6000600560009054906101000a900460ff16905090565b6000611be1611b45613343565b84611bdc8560096000611b56613343565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132e590919063ffffffff16565b61334b565b6001905092915050565b611bf3613343565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c779061522b565b60405180910390fd5b8060218190555050565b600e6020528060005260406000206000915054906101000a900460ff1681565b602460189054906101000a900460ff1681565b60106020528060005260406000206000915054906101000a900460ff1681565b602460159054906101000a900460ff1681565b611cf8613343565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7c9061522b565b60405180910390fd5b80600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611dd1613343565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e559061522b565b60405180910390fd5b60c98383905010611e6e57600080fd5b60005b83839050811015611f0b578160116000868685818110611e9457611e936152ab565b5b9050602002016020810190611ea99190614d11565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080611f0490615309565b9050611e71565b50505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a6020528060005260406000206000915054906101000a900460ff1681565b600042905090565b60185481565b6000611f6f613343565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ffc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff39061522b565b60405180910390fd5b60008290508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561204c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120709190615366565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120fb9190615366565b6040518363ffffffff1660e01b8152600401612118929190615393565b602060405180830381865afa158015612135573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121599190615366565b9150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036122ec578073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121fe9190615366565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612265573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122899190615366565b6040518363ffffffff1660e01b81526004016122a6929190615393565b6020604051808303816000875af11580156122c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122e99190615366565b91505b81602460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080602360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600b6000602460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160106000602460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050919050565b60195481565b600c5481565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b601f5481565b6124cb613343565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612558576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254f9061522b565b60405180910390fd5b80600f8190555050565b60205481565b601c5481565b612576613343565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612603576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125fa9061522b565b60405180910390fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60155481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b612695613343565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612722576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127199061522b565b60405180910390fd5b80600760146101000a81548160ff02191690831515021790555050565b612747613343565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127cb9061522b565b60405180910390fd5b61dead73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a361dead6000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6060600480546128a39061527a565b80601f01602080910402602001604051908101604052809291908181526020018280546128cf9061527a565b801561291c5780601f106128f15761010080835404028352916020019161291c565b820191906000526020600020905b8154815290600101906020018083116128ff57829003601f168201915b5050505050905090565b6000602154905090565b601d5481565b60006129f9612943613343565b846129f485604051806060016040528060258152602001615e23602591396009600061296d613343565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613f9b9092919063ffffffff16565b61334b565b6001905092915050565b600f5481565b612a11613343565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a959061522b565b60405180910390fd5b80602460166101000a81548160ff02191690831515021790555050565b601a5481565b60116020528060005260406000206000915054906101000a900460ff1681565b6000612af5612aee613343565b8484613514565b506001905092915050565b612b08613343565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612b95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8c9061522b565b60405180910390fd5b826018819055508160198190555080601a81905550612bd5601a54612bc76019546018546132e590919063ffffffff16565b6132e590919063ffffffff16565b601d81905550505050565b60145481565b612bee613343565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612c7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c729061522b565b60405180910390fd5b80602460156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051612cc49190614e7e565b60405180910390a150565b60135481565b602460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60165481565b600b6020528060005260406000206000915054906101000a900460ff1681565b60175481565b600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b602460169054906101000a900460ff1681565b60125481565b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612df5613343565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612e82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e799061522b565b60405180910390fd5b80601f8190555050565b612e94613343565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612f21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f189061522b565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601b5481565b612f8a613343565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613017576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161300e9061522b565b60405180910390fd5b8060208190555050565b613029613343565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146130b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130ad9061522b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603613125576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161311c9061542e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6131ea613343565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613277576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161326e9061522b565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b602460179054906101000a900460ff1681565b60008082846132f4919061544e565b905083811015613339576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613330906154f0565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036133ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133b190615582565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613429576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161342090615614565b60405180910390fd5b80600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516135079190614f37565b60405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603613584576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161357b906156a6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036135f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135ea90615738565b60405180910390fd5b600760149054906101000a900460ff1661367d5761360f612664565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161461367c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613673906157ca565b60405180910390fd5b5b601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561375c57602460189054906101000a900460ff168061371c57506136ed612664565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b61375b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161375290615836565b60405180910390fd5b5b602460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361383e57602460189054906101000a900460ff16806137fe57506137cf612664565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b61383d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161383490615836565b60405180910390fd5b5b602460149054906101000a900460ff16156138655761385e848484614049565b9050613f94565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614801561390f5750602460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b1561391c5743600c819055505b602254421061394657600060188190555060016019819055506001601b819055506001601c819055505b602460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603613a0b57600f54600c546139ab919061544e565b4311613a0a576001600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5b613a13612664565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015613a815750613a51612664565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15613a9157613a90848361421c565b5b601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015613b355750601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613bad57600080600090505b60008113613b9a57808442604051602001613b5f939291906158a2565b6040516020818303038152906040528051906020012060001c9150613b8686836064614049565b508080613b92906158df565b915050613b42565b5061012c83613ba99190615927565b9250505b6000613bb830612474565b905060006021548210159050808015613bde5750602460149054906101000a900460ff16155b8015613c345750601060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015613c4c5750602460159054906101000a900460ff165b15613c7657602460169054906101000a900460ff1615613c6c5760215491505b613c7582614346565b5b613cff846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600860008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613f9b9092919063ffffffff16565b600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680613de55750600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b613df957613df4878787614537565b613dfb565b845b9050602460179054906101000a900460ff168015613e635750600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613e9257602054613e8682613e7889612474565b6132e590919063ffffffff16565b1115613e9157600080fd5b5b613ee481600860008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132e590919063ffffffff16565b600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613f849190614f37565b60405180910390a3600193505050505b9392505050565b6000838311158290613fe3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613fda9190614dd7565b60405180910390fd5b5060008385613ff29190615927565b9050809150509392505050565b600061404183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613f9b565b905092915050565b60006140d4826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613f9b9092919063ffffffff16565b600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061416982600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132e590919063ffffffff16565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516142099190614f37565b60405180910390a3600190509392505050565b600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156142a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016142a0906159a7565b60405180910390fd5b601f54811115806143035750600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b614342576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161433990615a13565b60405180910390fd5b5050565b6001602460146101000a81548160ff021916908315150217905550600061439f6002614391601d546143836018548761475e90919063ffffffff16565b6147d890919063ffffffff16565b6147d890919063ffffffff16565b905060006143b68284613fff90919063ffffffff16565b90506143c181614822565b600047905060006143f26143e160026018546147d890919063ffffffff16565b601d54613fff90919063ffffffff16565b905060006144306002614422846144146018548861475e90919063ffffffff16565b6147d890919063ffffffff16565b6147d890919063ffffffff16565b9050600061445b8361444d601a548761475e90919063ffffffff16565b6147d890919063ffffffff16565b90506000614484826144768588613fff90919063ffffffff16565b613fff90919063ffffffff16565b905060008111156144bc576144bb600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682614a9e565b5b60008211156144f2576144f1600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683614a9e565b5b6000831180156145025750600087115b15614512576145118784614ae9565b5b505050505050506000602460146101000a81548160ff02191690831515021790555050565b60008060009050601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156145bf576145b860646145aa601b548661475e90919063ffffffff16565b6147d890919063ffffffff16565b905061463d565b601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561463c57614639606461462b601c548661475e90919063ffffffff16565b6147d890919063ffffffff16565b90505b5b60008111156147415761469881600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132e590919063ffffffff16565b600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516147389190614f37565b60405180910390a35b6147548184613fff90919063ffffffff16565b9150509392505050565b600080830361477057600090506147d2565b6000828461477e9190615a33565b905082848261478d9190615abc565b146147cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016147c490615b5f565b60405180910390fd5b809150505b92915050565b600061481a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614bce565b905092915050565b6000600267ffffffffffffffff81111561483f5761483e615b7f565b5b60405190808252806020026020018201604052801561486d5781602001602082028036833780820191505090505b5090503081600081518110614885576148846152ab565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561492c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906149509190615366565b81600181518110614964576149636152ab565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506149cb30602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461334b565b602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401614a2f959493929190615ca7565b600060405180830381600087803b158015614a4957600080fd5b505af1158015614a5d573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051614a92929190615d01565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015614ae4573d6000803e3d6000fd5b505050565b614b1630602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461334b565b602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080614b62612664565b426040518863ffffffff1660e01b8152600401614b8496959493929190615d31565b60606040518083038185885af1158015614ba2573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190614bc79190615da7565b5050505050565b60008083118290614c15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614c0c9190614dd7565b60405180910390fd5b5060008385614c249190615abc565b9050809150509392505050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614c6682614c3b565b9050919050565b614c7681614c5b565b8114614c8157600080fd5b50565b600081359050614c9381614c6d565b92915050565b60008115159050919050565b614cae81614c99565b8114614cb957600080fd5b50565b600081359050614ccb81614ca5565b92915050565b60008060408385031215614ce857614ce7614c31565b5b6000614cf685828601614c84565b9250506020614d0785828601614cbc565b9150509250929050565b600060208284031215614d2757614d26614c31565b5b6000614d3584828501614c84565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614d78578082015181840152602081019050614d5d565b83811115614d87576000848401525b50505050565b6000601f19601f8301169050919050565b6000614da982614d3e565b614db38185614d49565b9350614dc3818560208601614d5a565b614dcc81614d8d565b840191505092915050565b60006020820190508181036000830152614df18184614d9e565b905092915050565b6000819050919050565b614e0c81614df9565b8114614e1757600080fd5b50565b600081359050614e2981614e03565b92915050565b60008060408385031215614e4657614e45614c31565b5b6000614e5485828601614c84565b9250506020614e6585828601614e1a565b9150509250929050565b614e7881614c99565b82525050565b6000602082019050614e936000830184614e6f565b92915050565b600080600060608486031215614eb257614eb1614c31565b5b6000614ec086828701614e1a565b9350506020614ed186828701614e1a565b9250506040614ee286828701614e1a565b9150509250925092565b6000614ef782614c3b565b9050919050565b614f0781614eec565b82525050565b6000602082019050614f226000830184614efe565b92915050565b614f3181614df9565b82525050565b6000602082019050614f4c6000830184614f28565b92915050565b6000819050919050565b6000614f77614f72614f6d84614c3b565b614f52565b614c3b565b9050919050565b6000614f8982614f5c565b9050919050565b6000614f9b82614f7e565b9050919050565b614fab81614f90565b82525050565b6000602082019050614fc66000830184614fa2565b92915050565b600080600060608486031215614fe557614fe4614c31565b5b6000614ff386828701614c84565b935050602061500486828701614c84565b925050604061501586828701614e1a565b9150509250925092565b60006020828403121561503557615034614c31565b5b600061504384828501614cbc565b91505092915050565b61505581614c5b565b82525050565b6000602082019050615070600083018461504c565b92915050565b600060ff82169050919050565b61508c81615076565b82525050565b60006020820190506150a76000830184615083565b92915050565b6000602082840312156150c3576150c2614c31565b5b60006150d184828501614e1a565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126150ff576150fe6150da565b5b8235905067ffffffffffffffff81111561511c5761511b6150df565b5b602083019150836020820283011115615138576151376150e4565b5b9250929050565b60008060006040848603121561515857615157614c31565b5b600084013567ffffffffffffffff81111561517657615175614c36565b5b615182868287016150e9565b9350935050602061519586828701614cbc565b9150509250925092565b600080604083850312156151b6576151b5614c31565b5b60006151c485828601614c84565b92505060206151d585828601614c84565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000615215602083614d49565b9150615220826151df565b602082019050919050565b6000602082019050818103600083015261524481615208565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061529257607f821691505b6020821081036152a5576152a461524b565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061531482614df9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615346576153456152da565b5b600182019050919050565b60008151905061536081614c6d565b92915050565b60006020828403121561537c5761537b614c31565b5b600061538a84828501615351565b91505092915050565b60006040820190506153a8600083018561504c565b6153b5602083018461504c565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000615418602683614d49565b9150615423826153bc565b604082019050919050565b600060208201905081810360008301526154478161540b565b9050919050565b600061545982614df9565b915061546483614df9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115615499576154986152da565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006154da601b83614d49565b91506154e5826154a4565b602082019050919050565b60006020820190508181036000830152615509816154cd565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061556c602483614d49565b915061557782615510565b604082019050919050565b6000602082019050818103600083015261559b8161555f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006155fe602283614d49565b9150615609826155a2565b604082019050919050565b6000602082019050818103600083015261562d816155f1565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000615690602583614d49565b915061569b82615634565b604082019050919050565b600060208201905081810360008301526156bf81615683565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000615722602383614d49565b915061572d826156c6565b604082019050919050565b6000602082019050818103600083015261575181615715565b9050919050565b7f544f4b454e3a2054686973206163636f756e742063616e6e6f742073656e642060008201527f746f6b656e7320756e74696c2074726164696e6720697320656e61626c656400602082015250565b60006157b4603f83614d49565b91506157bf82615758565b604082019050919050565b600060208201905081810360008301526157e3816157a7565b9050919050565b7f544f4b454e3a20494e56414c49442043414c4c00000000000000000000000000600082015250565b6000615820601383614d49565b915061582b826157ea565b602082019050919050565b6000602082019050818103600083015261584f81615813565b9050919050565b6000819050919050565b6000819050919050565b61587b61587682615856565b615860565b82525050565b6000819050919050565b61589c61589782614df9565b615881565b82525050565b60006158ae828661586a565b6020820191506158be828561588b565b6020820191506158ce828461588b565b602082019150819050949350505050565b60006158ea82615856565b91507f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361591c5761591b6152da565b5b600182019050919050565b600061593282614df9565b915061593d83614df9565b9250828210156159505761594f6152da565b5b828203905092915050565b7f46726f6d2063616e6e6f7420626520626f742100000000000000000000000000600082015250565b6000615991601383614d49565b915061599c8261595b565b602082019050919050565b600060208201905081810360008301526159c081615984565b9050919050565b7f5458204c696d6974204578636565646564000000000000000000000000000000600082015250565b60006159fd601183614d49565b9150615a08826159c7565b602082019050919050565b60006020820190508181036000830152615a2c816159f0565b9050919050565b6000615a3e82614df9565b9150615a4983614df9565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615a8257615a816152da565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000615ac782614df9565b9150615ad283614df9565b925082615ae257615ae1615a8d565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615b49602183614d49565b9150615b5482615aed565b604082019050919050565b60006020820190508181036000830152615b7881615b3c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000819050919050565b6000615bd3615bce615bc984615bae565b614f52565b614df9565b9050919050565b615be381615bb8565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615c1e81614c5b565b82525050565b6000615c308383615c15565b60208301905092915050565b6000602082019050919050565b6000615c5482615be9565b615c5e8185615bf4565b9350615c6983615c05565b8060005b83811015615c9a578151615c818882615c24565b9750615c8c83615c3c565b925050600181019050615c6d565b5085935050505092915050565b600060a082019050615cbc6000830188614f28565b615cc96020830187615bda565b8181036040830152615cdb8186615c49565b9050615cea606083018561504c565b615cf76080830184614f28565b9695505050505050565b6000604082019050615d166000830185614f28565b8181036020830152615d288184615c49565b90509392505050565b600060c082019050615d46600083018961504c565b615d536020830188614f28565b615d606040830187615bda565b615d6d6060830186615bda565b615d7a608083018561504c565b615d8760a0830184614f28565b979650505050505050565b600081519050615da181614e03565b92915050565b600080600060608486031215615dc057615dbf614c31565b5b6000615dce86828701615d92565b9350506020615ddf86828701615d92565b9250506040615df086828701615d92565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220a9168ce2425b21470c5bec7b0fd35464f0dd22bf0af11e797b687830e692ffef64736f6c634300080d0033

Deployed Bytecode

0x60806040526004361061042a5760003560e01c80637d1db4a511610229578063c2d4640e1161012e578063da00097d116100b6578063f0cd1dac1161007a578063f0cd1dac14611050578063f1d5f5171461107b578063f2fde38b146110a4578063f84ba65d146110cd578063f872858a146110f657610431565b8063da00097d14610f6b578063dc44b6a014610f96578063dd62ed3e14610fc1578063ec28438a14610ffe578063ef422a181461102757610431565b8063c816841b116100fd578063c816841b14610e82578063c860795214610ead578063c867d60b14610ed8578063cab0347114610f15578063d158272d14610f4057610431565b8063c2d4640e14610dda578063c469b6dd14610e03578063c49b9a8014610e2e578063c5d2418914610e5757610431565b806395d89b41116101b1578063a52dc2e711610180578063a52dc2e714610ce1578063a5d69d1f14610d0c578063a83f53a714610d35578063a8e1515014610d60578063a9059cbb14610d9d57610431565b806395d89b4114610c23578063a073d37f14610c4e578063a08e671f14610c79578063a457c2d714610ca457610431565b8063844d591c116101f8578063844d591c14610b6457806388790a6814610b8d5780638da5cb5b14610bb85780638f70ccf714610be3578063914eb66a14610c0c57610431565b80637d1db4a514610aba5780637d73900f14610ae5578063807c2d9c14610b0e57806382eefb4314610b3957610431565b80632e97766d1161032f57806350b20cac116102b757806357a5802f1161028657806357a5802f146109bf5780635881f3ef146109ea57806361a23c6914610a275780636ad1fe0214610a5257806370a0823114610a7d57610431565b806350b20cac14610903578063512f91701461092c5780635342acb414610957578063557ed1ba1461099457610431565b80633bbac579116102fe5780633bbac5791461080a5780633d1afa3e146108475780633ecad271146108725780634a74bb02146108af5780634cb80fd5146108da57610431565b80632e97766d1461074e578063313ce5671461077957806339509351146107a45780633b97084a146107e157610431565b80631870517a116103b25780632563ae83116103815780632563ae831461067d57806327c8f835146106a65780632af38605146106d15780632b112e49146106fa5780632c4b23341461072557610431565b80631870517a146105c55780632198cf6c146105ee57806323b872dd1461061757806324d0d8731461065457610431565b80630d5e5c87116103f95780630d5e5c87146104f05780631245e3471461051957806314353ed1146105445780631694505e1461056f57806318160ddd1461059a57610431565b806303c0f5d4146104365780630504bc7a1461045f57806306fdde0314610488578063095ea7b3146104b357610431565b3661043157005b600080fd5b34801561044257600080fd5b5061045d60048036038101906104589190614cd1565b611121565b005b34801561046b57600080fd5b5061048660048036038101906104819190614d11565b611211565b005b34801561049457600080fd5b5061049d6112ea565b6040516104aa9190614dd7565b60405180910390f35b3480156104bf57600080fd5b506104da60048036038101906104d59190614e2f565b61137c565b6040516104e79190614e7e565b60405180910390f35b3480156104fc57600080fd5b5061051760048036038101906105129190614e99565b61139a565b005b34801561052557600080fd5b5061052e61147a565b60405161053b9190614f0d565b60405180910390f35b34801561055057600080fd5b506105596114a0565b6040516105669190614f37565b60405180910390f35b34801561057b57600080fd5b506105846114aa565b6040516105919190614fb1565b60405180910390f35b3480156105a657600080fd5b506105af6114d0565b6040516105bc9190614f37565b60405180910390f35b3480156105d157600080fd5b506105ec60048036038101906105e79190614e99565b6114da565b005b3480156105fa57600080fd5b5061061560048036038101906106109190614cd1565b6115ba565b005b34801561062357600080fd5b5061063e60048036038101906106399190614fcc565b6116aa565b60405161064b9190614e7e565b60405180910390f35b34801561066057600080fd5b5061067b6004803603810190610676919061501f565b611784565b005b34801561068957600080fd5b506106a4600480360381019061069f919061501f565b611836565b005b3480156106b257600080fd5b506106bb6118e8565b6040516106c8919061505b565b60405180910390f35b3480156106dd57600080fd5b506106f860048036038101906106f39190614cd1565b61190c565b005b34801561070657600080fd5b5061070f6119fc565b60405161071c9190614f37565b60405180910390f35b34801561073157600080fd5b5061074c60048036038101906107479190614d11565b611a40565b005b34801561075a57600080fd5b50610763611b19565b6040516107709190614f37565b60405180910390f35b34801561078557600080fd5b5061078e611b21565b60405161079b9190615092565b60405180910390f35b3480156107b057600080fd5b506107cb60048036038101906107c69190614e2f565b611b38565b6040516107d89190614e7e565b60405180910390f35b3480156107ed57600080fd5b50610808600480360381019061080391906150ad565b611beb565b005b34801561081657600080fd5b50610831600480360381019061082c9190614d11565b611c8a565b60405161083e9190614e7e565b60405180910390f35b34801561085357600080fd5b5061085c611caa565b6040516108699190614e7e565b60405180910390f35b34801561087e57600080fd5b5061089960048036038101906108949190614d11565b611cbd565b6040516108a69190614e7e565b60405180910390f35b3480156108bb57600080fd5b506108c4611cdd565b6040516108d19190614e7e565b60405180910390f35b3480156108e657600080fd5b5061090160048036038101906108fc9190614d11565b611cf0565b005b34801561090f57600080fd5b5061092a6004803603810190610925919061513f565b611dc9565b005b34801561093857600080fd5b50610941611f11565b60405161094e919061505b565b60405180910390f35b34801561096357600080fd5b5061097e60048036038101906109799190614d11565b611f37565b60405161098b9190614e7e565b60405180910390f35b3480156109a057600080fd5b506109a9611f57565b6040516109b69190614f37565b60405180910390f35b3480156109cb57600080fd5b506109d4611f5f565b6040516109e19190614f37565b60405180910390f35b3480156109f657600080fd5b50610a116004803603810190610a0c9190614d11565b611f65565b604051610a1e919061505b565b60405180910390f35b348015610a3357600080fd5b50610a3c612468565b604051610a499190614f37565b60405180910390f35b348015610a5e57600080fd5b50610a6761246e565b604051610a749190614f37565b60405180910390f35b348015610a8957600080fd5b50610aa46004803603810190610a9f9190614d11565b612474565b604051610ab19190614f37565b60405180910390f35b348015610ac657600080fd5b50610acf6124bd565b604051610adc9190614f37565b60405180910390f35b348015610af157600080fd5b50610b0c6004803603810190610b0791906150ad565b6124c3565b005b348015610b1a57600080fd5b50610b23612562565b604051610b309190614f37565b60405180910390f35b348015610b4557600080fd5b50610b4e612568565b604051610b5b9190614f37565b60405180910390f35b348015610b7057600080fd5b50610b8b6004803603810190610b869190614cd1565b61256e565b005b348015610b9957600080fd5b50610ba261265e565b604051610baf9190614f37565b60405180910390f35b348015610bc457600080fd5b50610bcd612664565b604051610bda919061505b565b60405180910390f35b348015610bef57600080fd5b50610c0a6004803603810190610c05919061501f565b61268d565b005b348015610c1857600080fd5b50610c2161273f565b005b348015610c2f57600080fd5b50610c38612894565b604051610c459190614dd7565b60405180910390f35b348015610c5a57600080fd5b50610c63612926565b604051610c709190614f37565b60405180910390f35b348015610c8557600080fd5b50610c8e612930565b604051610c9b9190614f37565b60405180910390f35b348015610cb057600080fd5b50610ccb6004803603810190610cc69190614e2f565b612936565b604051610cd89190614e7e565b60405180910390f35b348015610ced57600080fd5b50610cf6612a03565b604051610d039190614f37565b60405180910390f35b348015610d1857600080fd5b50610d336004803603810190610d2e919061501f565b612a09565b005b348015610d4157600080fd5b50610d4a612abb565b604051610d579190614f37565b60405180910390f35b348015610d6c57600080fd5b50610d876004803603810190610d829190614d11565b612ac1565b604051610d949190614e7e565b60405180910390f35b348015610da957600080fd5b50610dc46004803603810190610dbf9190614e2f565b612ae1565b604051610dd19190614e7e565b60405180910390f35b348015610de657600080fd5b50610e016004803603810190610dfc9190614e99565b612b00565b005b348015610e0f57600080fd5b50610e18612be0565b604051610e259190614f37565b60405180910390f35b348015610e3a57600080fd5b50610e556004803603810190610e50919061501f565b612be6565b005b348015610e6357600080fd5b50610e6c612ccf565b604051610e799190614f37565b60405180910390f35b348015610e8e57600080fd5b50610e97612cd5565b604051610ea4919061505b565b60405180910390f35b348015610eb957600080fd5b50610ec2612cfb565b604051610ecf9190614f37565b60405180910390f35b348015610ee457600080fd5b50610eff6004803603810190610efa9190614d11565b612d01565b604051610f0c9190614e7e565b60405180910390f35b348015610f2157600080fd5b50610f2a612d21565b604051610f379190614f37565b60405180910390f35b348015610f4c57600080fd5b50610f55612d27565b604051610f629190614f0d565b60405180910390f35b348015610f7757600080fd5b50610f80612d4d565b604051610f8d9190614e7e565b60405180910390f35b348015610fa257600080fd5b50610fab612d60565b604051610fb89190614f37565b60405180910390f35b348015610fcd57600080fd5b50610fe86004803603810190610fe3919061519f565b612d66565b604051610ff59190614f37565b60405180910390f35b34801561100a57600080fd5b50611025600480360381019061102091906150ad565b612ded565b005b34801561103357600080fd5b5061104e60048036038101906110499190614cd1565b612e8c565b005b34801561105c57600080fd5b50611065612f7c565b6040516110729190614f37565b60405180910390f35b34801561108757600080fd5b506110a2600480360381019061109d91906150ad565b612f82565b005b3480156110b057600080fd5b506110cb60048036038101906110c69190614d11565b613021565b005b3480156110d957600080fd5b506110f460048036038101906110ef9190614cd1565b6131e2565b005b34801561110257600080fd5b5061110b6132d2565b6040516111189190614e7e565b60405180910390f35b611129613343565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ad9061522b565b60405180910390fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611219613343565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129d9061522b565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6060600380546112f99061527a565b80601f01602080910402602001604051908101604052809291908181526020018280546113259061527a565b80156113725780601f1061134757610100808354040283529160200191611372565b820191906000526020600020905b81548152906001019060200180831161135557829003601f168201915b5050505050905090565b6000611390611389613343565b848461334b565b6001905092915050565b6113a2613343565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461142f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114269061522b565b60405180910390fd5b82601581905550816016819055508060178190555061146f6017546114616016546015546132e590919063ffffffff16565b6132e590919063ffffffff16565b601c81905550505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600c54905090565b602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601e54905090565b6114e2613343565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461156f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115669061522b565b60405180910390fd5b8260128190555081601381905550806014819055506115af6014546115a16013546012546132e590919063ffffffff16565b6132e590919063ffffffff16565b601b81905550505050565b6115c2613343565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461164f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116469061522b565b60405180910390fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006116b7848484613514565b50611779846116c4613343565b61177485604051806060016040528060288152602001615dfb60289139600960008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061172a613343565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613f9b9092919063ffffffff16565b61334b565b600190509392505050565b61178c613343565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611819576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118109061522b565b60405180910390fd5b80602460186101000a81548160ff02191690831515021790555050565b61183e613343565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c29061522b565b60405180910390fd5b80602460176101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000dead81565b611914613343565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119989061522b565b60405180910390fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000611a3b611a2a7f000000000000000000000000000000000000000000000000000000000000dead612474565b601e54613fff90919063ffffffff16565b905090565b611a48613343565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ad5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611acc9061522b565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600043905090565b6000600560009054906101000a900460ff16905090565b6000611be1611b45613343565b84611bdc8560096000611b56613343565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132e590919063ffffffff16565b61334b565b6001905092915050565b611bf3613343565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c779061522b565b60405180910390fd5b8060218190555050565b600e6020528060005260406000206000915054906101000a900460ff1681565b602460189054906101000a900460ff1681565b60106020528060005260406000206000915054906101000a900460ff1681565b602460159054906101000a900460ff1681565b611cf8613343565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7c9061522b565b60405180910390fd5b80600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611dd1613343565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e559061522b565b60405180910390fd5b60c98383905010611e6e57600080fd5b60005b83839050811015611f0b578160116000868685818110611e9457611e936152ab565b5b9050602002016020810190611ea99190614d11565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080611f0490615309565b9050611e71565b50505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a6020528060005260406000206000915054906101000a900460ff1681565b600042905090565b60185481565b6000611f6f613343565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ffc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff39061522b565b60405180910390fd5b60008290508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561204c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120709190615366565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120fb9190615366565b6040518363ffffffff1660e01b8152600401612118929190615393565b602060405180830381865afa158015612135573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121599190615366565b9150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036122ec578073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121fe9190615366565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612265573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122899190615366565b6040518363ffffffff1660e01b81526004016122a6929190615393565b6020604051808303816000875af11580156122c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122e99190615366565b91505b81602460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080602360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600b6000602460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160106000602460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050919050565b60195481565b600c5481565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b601f5481565b6124cb613343565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612558576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254f9061522b565b60405180910390fd5b80600f8190555050565b60205481565b601c5481565b612576613343565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612603576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125fa9061522b565b60405180910390fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60155481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b612695613343565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612722576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127199061522b565b60405180910390fd5b80600760146101000a81548160ff02191690831515021790555050565b612747613343565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127cb9061522b565b60405180910390fd5b61dead73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a361dead6000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6060600480546128a39061527a565b80601f01602080910402602001604051908101604052809291908181526020018280546128cf9061527a565b801561291c5780601f106128f15761010080835404028352916020019161291c565b820191906000526020600020905b8154815290600101906020018083116128ff57829003601f168201915b5050505050905090565b6000602154905090565b601d5481565b60006129f9612943613343565b846129f485604051806060016040528060258152602001615e23602591396009600061296d613343565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613f9b9092919063ffffffff16565b61334b565b6001905092915050565b600f5481565b612a11613343565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a959061522b565b60405180910390fd5b80602460166101000a81548160ff02191690831515021790555050565b601a5481565b60116020528060005260406000206000915054906101000a900460ff1681565b6000612af5612aee613343565b8484613514565b506001905092915050565b612b08613343565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612b95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8c9061522b565b60405180910390fd5b826018819055508160198190555080601a81905550612bd5601a54612bc76019546018546132e590919063ffffffff16565b6132e590919063ffffffff16565b601d81905550505050565b60145481565b612bee613343565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612c7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c729061522b565b60405180910390fd5b80602460156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051612cc49190614e7e565b60405180910390a150565b60135481565b602460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60165481565b600b6020528060005260406000206000915054906101000a900460ff1681565b60175481565b600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b602460169054906101000a900460ff1681565b60125481565b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612df5613343565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612e82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e799061522b565b60405180910390fd5b80601f8190555050565b612e94613343565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612f21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f189061522b565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601b5481565b612f8a613343565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613017576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161300e9061522b565b60405180910390fd5b8060208190555050565b613029613343565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146130b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130ad9061522b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603613125576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161311c9061542e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6131ea613343565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613277576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161326e9061522b565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b602460179054906101000a900460ff1681565b60008082846132f4919061544e565b905083811015613339576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613330906154f0565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036133ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133b190615582565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613429576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161342090615614565b60405180910390fd5b80600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516135079190614f37565b60405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603613584576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161357b906156a6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036135f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135ea90615738565b60405180910390fd5b600760149054906101000a900460ff1661367d5761360f612664565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161461367c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613673906157ca565b60405180910390fd5b5b601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561375c57602460189054906101000a900460ff168061371c57506136ed612664565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b61375b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161375290615836565b60405180910390fd5b5b602460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361383e57602460189054906101000a900460ff16806137fe57506137cf612664565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b61383d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161383490615836565b60405180910390fd5b5b602460149054906101000a900460ff16156138655761385e848484614049565b9050613f94565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614801561390f5750602460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b1561391c5743600c819055505b602254421061394657600060188190555060016019819055506001601b819055506001601c819055505b602460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603613a0b57600f54600c546139ab919061544e565b4311613a0a576001600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5b613a13612664565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015613a815750613a51612664565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15613a9157613a90848361421c565b5b601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015613b355750601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613bad57600080600090505b60008113613b9a57808442604051602001613b5f939291906158a2565b6040516020818303038152906040528051906020012060001c9150613b8686836064614049565b508080613b92906158df565b915050613b42565b5061012c83613ba99190615927565b9250505b6000613bb830612474565b905060006021548210159050808015613bde5750602460149054906101000a900460ff16155b8015613c345750601060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015613c4c5750602460159054906101000a900460ff165b15613c7657602460169054906101000a900460ff1615613c6c5760215491505b613c7582614346565b5b613cff846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600860008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613f9b9092919063ffffffff16565b600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680613de55750600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b613df957613df4878787614537565b613dfb565b845b9050602460179054906101000a900460ff168015613e635750600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613e9257602054613e8682613e7889612474565b6132e590919063ffffffff16565b1115613e9157600080fd5b5b613ee481600860008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132e590919063ffffffff16565b600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613f849190614f37565b60405180910390a3600193505050505b9392505050565b6000838311158290613fe3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613fda9190614dd7565b60405180910390fd5b5060008385613ff29190615927565b9050809150509392505050565b600061404183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613f9b565b905092915050565b60006140d4826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613f9b9092919063ffffffff16565b600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061416982600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132e590919063ffffffff16565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516142099190614f37565b60405180910390a3600190509392505050565b600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156142a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016142a0906159a7565b60405180910390fd5b601f54811115806143035750600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b614342576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161433990615a13565b60405180910390fd5b5050565b6001602460146101000a81548160ff021916908315150217905550600061439f6002614391601d546143836018548761475e90919063ffffffff16565b6147d890919063ffffffff16565b6147d890919063ffffffff16565b905060006143b68284613fff90919063ffffffff16565b90506143c181614822565b600047905060006143f26143e160026018546147d890919063ffffffff16565b601d54613fff90919063ffffffff16565b905060006144306002614422846144146018548861475e90919063ffffffff16565b6147d890919063ffffffff16565b6147d890919063ffffffff16565b9050600061445b8361444d601a548761475e90919063ffffffff16565b6147d890919063ffffffff16565b90506000614484826144768588613fff90919063ffffffff16565b613fff90919063ffffffff16565b905060008111156144bc576144bb600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682614a9e565b5b60008211156144f2576144f1600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683614a9e565b5b6000831180156145025750600087115b15614512576145118784614ae9565b5b505050505050506000602460146101000a81548160ff02191690831515021790555050565b60008060009050601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156145bf576145b860646145aa601b548661475e90919063ffffffff16565b6147d890919063ffffffff16565b905061463d565b601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561463c57614639606461462b601c548661475e90919063ffffffff16565b6147d890919063ffffffff16565b90505b5b60008111156147415761469881600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132e590919063ffffffff16565b600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516147389190614f37565b60405180910390a35b6147548184613fff90919063ffffffff16565b9150509392505050565b600080830361477057600090506147d2565b6000828461477e9190615a33565b905082848261478d9190615abc565b146147cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016147c490615b5f565b60405180910390fd5b809150505b92915050565b600061481a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614bce565b905092915050565b6000600267ffffffffffffffff81111561483f5761483e615b7f565b5b60405190808252806020026020018201604052801561486d5781602001602082028036833780820191505090505b5090503081600081518110614885576148846152ab565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561492c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906149509190615366565b81600181518110614964576149636152ab565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506149cb30602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461334b565b602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401614a2f959493929190615ca7565b600060405180830381600087803b158015614a4957600080fd5b505af1158015614a5d573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051614a92929190615d01565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015614ae4573d6000803e3d6000fd5b505050565b614b1630602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461334b565b602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080614b62612664565b426040518863ffffffff1660e01b8152600401614b8496959493929190615d31565b60606040518083038185885af1158015614ba2573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190614bc79190615da7565b5050505050565b60008083118290614c15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614c0c9190614dd7565b60405180910390fd5b5060008385614c249190615abc565b9050809150509392505050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614c6682614c3b565b9050919050565b614c7681614c5b565b8114614c8157600080fd5b50565b600081359050614c9381614c6d565b92915050565b60008115159050919050565b614cae81614c99565b8114614cb957600080fd5b50565b600081359050614ccb81614ca5565b92915050565b60008060408385031215614ce857614ce7614c31565b5b6000614cf685828601614c84565b9250506020614d0785828601614cbc565b9150509250929050565b600060208284031215614d2757614d26614c31565b5b6000614d3584828501614c84565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614d78578082015181840152602081019050614d5d565b83811115614d87576000848401525b50505050565b6000601f19601f8301169050919050565b6000614da982614d3e565b614db38185614d49565b9350614dc3818560208601614d5a565b614dcc81614d8d565b840191505092915050565b60006020820190508181036000830152614df18184614d9e565b905092915050565b6000819050919050565b614e0c81614df9565b8114614e1757600080fd5b50565b600081359050614e2981614e03565b92915050565b60008060408385031215614e4657614e45614c31565b5b6000614e5485828601614c84565b9250506020614e6585828601614e1a565b9150509250929050565b614e7881614c99565b82525050565b6000602082019050614e936000830184614e6f565b92915050565b600080600060608486031215614eb257614eb1614c31565b5b6000614ec086828701614e1a565b9350506020614ed186828701614e1a565b9250506040614ee286828701614e1a565b9150509250925092565b6000614ef782614c3b565b9050919050565b614f0781614eec565b82525050565b6000602082019050614f226000830184614efe565b92915050565b614f3181614df9565b82525050565b6000602082019050614f4c6000830184614f28565b92915050565b6000819050919050565b6000614f77614f72614f6d84614c3b565b614f52565b614c3b565b9050919050565b6000614f8982614f5c565b9050919050565b6000614f9b82614f7e565b9050919050565b614fab81614f90565b82525050565b6000602082019050614fc66000830184614fa2565b92915050565b600080600060608486031215614fe557614fe4614c31565b5b6000614ff386828701614c84565b935050602061500486828701614c84565b925050604061501586828701614e1a565b9150509250925092565b60006020828403121561503557615034614c31565b5b600061504384828501614cbc565b91505092915050565b61505581614c5b565b82525050565b6000602082019050615070600083018461504c565b92915050565b600060ff82169050919050565b61508c81615076565b82525050565b60006020820190506150a76000830184615083565b92915050565b6000602082840312156150c3576150c2614c31565b5b60006150d184828501614e1a565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126150ff576150fe6150da565b5b8235905067ffffffffffffffff81111561511c5761511b6150df565b5b602083019150836020820283011115615138576151376150e4565b5b9250929050565b60008060006040848603121561515857615157614c31565b5b600084013567ffffffffffffffff81111561517657615175614c36565b5b615182868287016150e9565b9350935050602061519586828701614cbc565b9150509250925092565b600080604083850312156151b6576151b5614c31565b5b60006151c485828601614c84565b92505060206151d585828601614c84565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000615215602083614d49565b9150615220826151df565b602082019050919050565b6000602082019050818103600083015261524481615208565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061529257607f821691505b6020821081036152a5576152a461524b565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061531482614df9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615346576153456152da565b5b600182019050919050565b60008151905061536081614c6d565b92915050565b60006020828403121561537c5761537b614c31565b5b600061538a84828501615351565b91505092915050565b60006040820190506153a8600083018561504c565b6153b5602083018461504c565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000615418602683614d49565b9150615423826153bc565b604082019050919050565b600060208201905081810360008301526154478161540b565b9050919050565b600061545982614df9565b915061546483614df9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115615499576154986152da565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006154da601b83614d49565b91506154e5826154a4565b602082019050919050565b60006020820190508181036000830152615509816154cd565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061556c602483614d49565b915061557782615510565b604082019050919050565b6000602082019050818103600083015261559b8161555f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006155fe602283614d49565b9150615609826155a2565b604082019050919050565b6000602082019050818103600083015261562d816155f1565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000615690602583614d49565b915061569b82615634565b604082019050919050565b600060208201905081810360008301526156bf81615683565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000615722602383614d49565b915061572d826156c6565b604082019050919050565b6000602082019050818103600083015261575181615715565b9050919050565b7f544f4b454e3a2054686973206163636f756e742063616e6e6f742073656e642060008201527f746f6b656e7320756e74696c2074726164696e6720697320656e61626c656400602082015250565b60006157b4603f83614d49565b91506157bf82615758565b604082019050919050565b600060208201905081810360008301526157e3816157a7565b9050919050565b7f544f4b454e3a20494e56414c49442043414c4c00000000000000000000000000600082015250565b6000615820601383614d49565b915061582b826157ea565b602082019050919050565b6000602082019050818103600083015261584f81615813565b9050919050565b6000819050919050565b6000819050919050565b61587b61587682615856565b615860565b82525050565b6000819050919050565b61589c61589782614df9565b615881565b82525050565b60006158ae828661586a565b6020820191506158be828561588b565b6020820191506158ce828461588b565b602082019150819050949350505050565b60006158ea82615856565b91507f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361591c5761591b6152da565b5b600182019050919050565b600061593282614df9565b915061593d83614df9565b9250828210156159505761594f6152da565b5b828203905092915050565b7f46726f6d2063616e6e6f7420626520626f742100000000000000000000000000600082015250565b6000615991601383614d49565b915061599c8261595b565b602082019050919050565b600060208201905081810360008301526159c081615984565b9050919050565b7f5458204c696d6974204578636565646564000000000000000000000000000000600082015250565b60006159fd601183614d49565b9150615a08826159c7565b602082019050919050565b60006020820190508181036000830152615a2c816159f0565b9050919050565b6000615a3e82614df9565b9150615a4983614df9565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615a8257615a816152da565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000615ac782614df9565b9150615ad283614df9565b925082615ae257615ae1615a8d565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615b49602183614d49565b9150615b5482615aed565b604082019050919050565b60006020820190508181036000830152615b7881615b3c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000819050919050565b6000615bd3615bce615bc984615bae565b614f52565b614df9565b9050919050565b615be381615bb8565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615c1e81614c5b565b82525050565b6000615c308383615c15565b60208301905092915050565b6000602082019050919050565b6000615c5482615be9565b615c5e8185615bf4565b9350615c6983615c05565b8060005b83811015615c9a578151615c818882615c24565b9750615c8c83615c3c565b925050600181019050615c6d565b5085935050505092915050565b600060a082019050615cbc6000830188614f28565b615cc96020830187615bda565b8181036040830152615cdb8186615c49565b9050615cea606083018561504c565b615cf76080830184614f28565b9695505050505050565b6000604082019050615d166000830185614f28565b8181036020830152615d288184615c49565b90509392505050565b600060c082019050615d46600083018961504c565b615d536020830188614f28565b615d606040830187615bda565b615d6d6060830186615bda565b615d7a608083018561504c565b615d8760a0830184614f28565b979650505050505050565b600081519050615da181614e03565b92915050565b600080600060608486031215615dc057615dbf614c31565b5b6000615dce86828701615d92565b9350506020615ddf86828701615d92565b9250506040615df086828701615d92565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220a9168ce2425b21470c5bec7b0fd35464f0dd22bf0af11e797b687830e692ffef64736f6c634300080d0033

Deployed Bytecode Sourcemap

14840:17784:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24317:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24110:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18945:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20239:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21513:340;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15198:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24436:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16768:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19222:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21172:333;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22566:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25841:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22473:87;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22354:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15299:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23697:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23551:128;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23098:129;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24524:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19131:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19608:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22819:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15779:38;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17025:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15860:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16883:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22951:139;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23840:260;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15387:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15577:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6909:90;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16224:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24757:807;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16265:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15695:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19330:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16545:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24218:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16606:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16387:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20753:129;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16098:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6193:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31656:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6418:227;;;;;;;;;;;;;:::i;:::-;;19036:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20111:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16431:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19834:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15826:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23414:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16306:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15912:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25666:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21865:358;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16055:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23235:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16013:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16816:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16141:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15634:52;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16184:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15092:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16930:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15971:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19457:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22235:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21029:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16344:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22709:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6653:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20890:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16982:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24317:109;6337:12;:10;:12::i;:::-;6327:22;;:6;;;;;;;;;;:22;;;6319:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24412:6:::1;24396:5;:13;24402:6;24396:13;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;24317:109:::0;;:::o;24110:100::-;6337:12;:10;:12::i;:::-;6327:22;;:6;;;;;;;;;;:22;;;6319:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24193:9:::1;24182:8;;:20;;;;;;;;;;;;;;;;;;24110:100:::0;:::o;18945:83::-;18982:13;19015:5;19008:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18945:83;:::o;20239:161::-;20314:4;20331:39;20340:12;:10;:12::i;:::-;20354:7;20363:6;20331:8;:39::i;:::-;20388:4;20381:11;;20239:161;;;;:::o;21513:340::-;6337:12;:10;:12::i;:::-;6327:22;;:6;;;;;;;;;;:22;;;6319:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21656:15:::1;21636:17;:35;;;;21702:15;21682:17;:35;;;;21743:10;21728:12;:25;;;;21787:58;21832:12;;21787:40;21809:17;;21787;;:21;;:40;;;;:::i;:::-;:44;;:58;;;;:::i;:::-;21766:18;:79;;;;21513:340:::0;;;:::o;15198:94::-;;;;;;;;;;;;;:::o;24436:80::-;24477:7;24504:4;;24497:11;;24436:80;:::o;16768:41::-;;;;;;;;;;;;;:::o;19222:100::-;19275:7;19302:12;;19295:19;;19222:100;:::o;21172:333::-;6337:12;:10;:12::i;:::-;6327:22;;:6;;;;;;;;;;:22;;;6319:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21314:15:::1;21295:16;:34;;;;21359:15;21340:16;:34;;;;21399:10;21385:11;:24;;;;21442:55;21485:11;;21442:38;21463:16;;21442;;:20;;:38;;;;:::i;:::-;:42;;:55;;;;:::i;:::-;21422:17;:75;;;;21172:333:::0;;;:::o;22566:135::-;6337:12;:10;:12::i;:::-;6327:22;;:6;;;;;;;;;;:22;;;6319:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22687:6:::1;22657:19;:27;22677:6;22657:27;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;22566:135:::0;;:::o;25841:313::-;25939:4;25956:36;25966:6;25974:9;25985:6;25956:9;:36::i;:::-;;26003:121;26012:6;26020:12;:10;:12::i;:::-;26034:89;26072:6;26034:89;;;;;;;;;;;;;;;;;:11;:19;26046:6;26034:19;;;;;;;;;;;;;;;:33;26054:12;:10;:12::i;:::-;26034:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;26003:8;:121::i;:::-;26142:4;26135:11;;25841:313;;;;;:::o;22473:87::-;6337:12;:10;:12::i;:::-;6327:22;;:6;;;;;;;;;;:22;;;6319:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22547:5:::1;22536:8;;:16;;;;;;;;;;;;;;;;;;22473:87:::0;:::o;22354:113::-;6337:12;:10;:12::i;:::-;6327:22;;:6;;;;;;;;;;:22;;;6319:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22451:8:::1;22432:16;;:27;;;;;;;;;;;;;;;;;;22354:113:::0;:::o;15299:81::-;;;:::o;23697:135::-;6337:12;:10;:12::i;:::-;6327:22;;:6;;;;;;;;;;:22;;;6319:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23816:8:::1;23787:17;:26;23805:7;23787:26;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;23697:135:::0;;:::o;23551:128::-;23604:7;23631:40;23648:22;23658:11;23648:9;:22::i;:::-;23631:12;;:16;;:40;;;;:::i;:::-;23624:47;;23551:128;:::o;23098:129::-;6337:12;:10;:12::i;:::-;6327:22;;:6;;;;;;;;;;:22;;;6319:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23208:10:::1;23180:17;;:39;;;;;;;;;;;;;;;;;;23098:129:::0;:::o;24524:87::-;24564:7;24591:12;24584:19;;24524:87;:::o;19131:83::-;19172:5;19197:9;;;;;;;;;;;19190:16;;19131:83;:::o;19608:218::-;19696:4;19713:83;19722:12;:10;:12::i;:::-;19736:7;19745:50;19784:10;19745:11;:25;19757:12;:10;:12::i;:::-;19745:25;;;;;;;;;;;;;;;:34;19771:7;19745:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;19713:8;:83::i;:::-;19814:4;19807:11;;19608:218;;;;:::o;22819:124::-;6337:12;:10;:12::i;:::-;6327:22;;:6;;;;;;;;;;:22;;;6319:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22927:8:::1;22901:23;:34;;;;22819:124:::0;:::o;15779:38::-;;;;;;;;;;;;;;;;;;;;;;:::o;17025:28::-;;;;;;;;;;;;;:::o;15860:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;16883:40::-;;;;;;;;;;;;;:::o;22951:139::-;6337:12;:10;:12::i;:::-;6327:22;;:6;;;;;;;;;;:22;;;6319:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23071:10:::1;23038:22;;:44;;;;;;;;;;;;;;;;;;22951:139:::0;:::o;23840:260::-;6337:12;:10;:12::i;:::-;6327:22;;:6;;;;;;;;;;:22;;;6319:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23968:3:::1;23949:9;;:16;;:22;23941:31;;;::::0;::::1;;23988:9;23983:110;24003:9;;:16;;23999:1;:20;23983:110;;;24075:6;24041:17;:31;24059:9;;24069:1;24059:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;24041:31;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;24021:3;;;;:::i;:::-;;;23983:110;;;;23840:260:::0;;;:::o;15387:23::-;;;;;;;;;;;;;:::o;15577:50::-;;;;;;;;;;;;;;;;;;;;;;:::o;6909:90::-;6949:7;6976:15;6969:22;;6909:90;:::o;16224:34::-;;;;:::o;24757:807::-;24837:22;6337:12;:10;:12::i;:::-;6327:22;;:6;;;;;;;;;;:22;;;6319:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24874:35:::1;24931:16;24874:74;;24997:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24979:53;;;25041:4;25048:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24979:93;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24962:110;;25114:1;25088:28;;:14;:28;;::::0;25085:225:::1;;25202:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25184:74;;;25267:4;25274:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25184:114;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25167:131;;25085:225;25336:14;25322:11;;:28;;;;;;;;;;;;;;;;;;25402:16;25384:15;;:34;;;;;;;;;;;;;;;;;;25500:4;25456:19;:41;25484:11;;;;;;;;;;;25456:41;;;;;;;;;;;;;;;;:48;;;;;;;;;;;;;;;;;;25552:4;25515:12;:34;25536:11;;;;;;;;;;;25515:34;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;24861:703;24757:807:::0;;;:::o;16265:34::-;;;;:::o;15695:23::-;;;;:::o;19330:119::-;19396:7;19423:9;:18;19433:7;19423:18;;;;;;;;;;;;;;;;19416:25;;19330:119;;;:::o;16545:53::-;;;;:::o;24218:91::-;6337:12;:10;:12::i;:::-;6327:22;;:6;;;;;;;;;;:22;;;6319:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24294:7:::1;24285:6;:16;;;;24218:91:::0;:::o;16606:53::-;;;;:::o;16387:37::-;;;;:::o;20753:129::-;6337:12;:10;:12::i;:::-;6327:22;;:6;;;;;;;;;;:22;;;6319:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20866:8:::1;20842:12;:21;20855:7;20842:21;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;20753:129:::0;;:::o;16098:36::-;;;;:::o;6193:79::-;6231:7;6258:6;;;;;;;;;;;6251:13;;6193:79;:::o;31656:101::-;6337:12;:10;:12::i;:::-;6327:22;;:6;;;;;;;;;;:22;;;6319:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31737:12:::1;31723:11;;:26;;;;;;;;;;;;;;;;;;31656:101:::0;:::o;6418:227::-;6337:12;:10;:12::i;:::-;6327:22;;:6;;;;;;;;;;:22;;;6319:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6522:42:::1;6485:81;;6506:6;::::0;::::1;;;;;;;;6485:81;;;;;;;;;;;;6594:42;6577:6;::::0;:60:::1;;;;;;;;;;;;;;;;;;6418:227::o:0;19036:87::-;19075:13;19108:7;19101:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19036:87;:::o;20111:120::-;20173:7;20200:23;;20193:30;;20111:120;:::o;16431:43::-;;;;:::o;19834:269::-;19927:4;19944:129;19953:12;:10;:12::i;:::-;19967:7;19976:96;20015:15;19976:96;;;;;;;;;;;;;;;;;:11;:25;19988:12;:10;:12::i;:::-;19976:25;;;;;;;;;;;;;;;:34;20002:7;19976:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;19944:8;:129::i;:::-;20091:4;20084:11;;19834:269;;;;:::o;15826:25::-;;;;:::o;23414:125::-;6337:12;:10;:12::i;:::-;6327:22;;:6;;;;;;;;;;:22;;;6319:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23523:8:::1;23495:25;;:36;;;;;;;;;;;;;;;;;;23414:125:::0;:::o;16306:29::-;;;;:::o;15912:50::-;;;;;;;;;;;;;;;;;;;;;;:::o;25666:167::-;25744:4;25761:42;25771:12;:10;:12::i;:::-;25785:9;25796:6;25761:9;:42::i;:::-;;25821:4;25814:11;;25666:167;;;;:::o;21865:358::-;6337:12;:10;:12::i;:::-;6327:22;;:6;;;;;;;;;;:22;;;6319:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22024:17:::1;22006:15;:35;;;;22070:17;22052:15;:35;;;;22111:12;22098:10;:25;;;;22163:52;22204:10;;22163:36;22183:15;;22163;;:19;;:36;;;;:::i;:::-;:40;;:52;;;;:::i;:::-;22136:24;:79;;;;21865:358:::0;;;:::o;16055:30::-;;;;:::o;23235:171::-;6337:12;:10;:12::i;:::-;6327:22;;:6;;;;;;;;;;:22;;;6319:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23336:8:::1;23312:21;;:32;;;;;;;;;;;;;;;;;;23360:38;23389:8;23360:38;;;;;;:::i;:::-;;;;;;;;23235:171:::0;:::o;16013:35::-;;;;:::o;16816:26::-;;;;;;;;;;;;;:::o;16141:36::-;;;;:::o;15634:52::-;;;;;;;;;;;;;;;;;;;;;;:::o;16184:31::-;;;;:::o;15092:99::-;;;;;;;;;;;;;:::o;16930:45::-;;;;;;;;;;;;;:::o;15971:35::-;;;;:::o;19457:143::-;19538:7;19565:11;:18;19577:5;19565:18;;;;;;;;;;;;;;;:27;19584:7;19565:27;;;;;;;;;;;;;;;;19558:34;;19457:143;;;;:::o;22235:111::-;6337:12;:10;:12::i;:::-;6327:22;;:6;;;;;;;;;;:22;;;6319:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22327:11:::1;22312:12;:26;;;;22235:111:::0;:::o;21029:135::-;6337:12;:10;:12::i;:::-;6327:22;;:6;;;;;;;;;;:22;;;6319:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21148:8:::1;21119:17;:26;21137:7;21119:26;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;21029:135:::0;;:::o;16344:36::-;;;;:::o;22709:102::-;6337:12;:10;:12::i;:::-;6327:22;;:6;;;;;;;;;;:22;;;6319:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22795:8:::1;22781:10;:22;;;;22709:102:::0;:::o;6653:244::-;6337:12;:10;:12::i;:::-;6327:22;;:6;;;;;;;;;;:22;;;6319:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6762:1:::1;6742:22;;:8;:22;;::::0;6734:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;6852:8;6823:38;;6844:6;::::0;::::1;;;;;;;;6823:38;;;;;;;;;;;;6881:8;6872:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;6653:244:::0;:::o;20890:127::-;6337:12;:10;:12::i;:::-;6327:22;;:6;;;;;;;;;;:22;;;6319:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21003:6:::1;20977:15;:23;20993:6;20977:23;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;20890:127:::0;;:::o;16982:36::-;;;;;;;;;;;;;:::o;1571:181::-;1629:7;1649:9;1665:1;1661;:5;;;;:::i;:::-;1649:17;;1690:1;1685;:6;;1677:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;1743:1;1736:8;;;1571:181;;;;:::o;503:115::-;556:15;599:10;584:26;;503:115;:::o;20408:337::-;20518:1;20501:19;;:5;:19;;;20493:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20599:1;20580:21;;:7;:21;;;20572:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20683:6;20653:11;:18;20665:5;20653:18;;;;;;;;;;;;;;;:27;20672:7;20653:27;;;;;;;;;;;;;;;:36;;;;20721:7;20705:32;;20714:5;20705:32;;;20730:6;20705:32;;;;;;:::i;:::-;;;;;;;;20408:337;;;:::o;26162:2886::-;26249:4;26294:1;26276:20;;:6;:20;;;26268:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;26378:1;26357:23;;:9;:23;;;26349:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;26465:11;;;;;;;;;;;26460:138;;26511:7;:5;:7::i;:::-;26501:17;;:6;:17;;;26493:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;26460:138;26611:12;:23;26624:9;26611:23;;;;;;;;;;;;;;;;;;;;;;;;;26608:118;;;26659:8;;;;;;;;;;;:32;;;;26684:7;:5;:7::i;:::-;26671:20;;:9;:20;;;26659:32;26651:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;26608:118;26752:11;;;;;;;;;;;26739:24;;:9;:24;;;26736:119;;26787:8;;;;;;;;;;;:33;;;;26813:7;:5;:7::i;:::-;26800:20;;:9;:20;;;26787:33;26779:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;26736:119;26868:16;;;;;;;;;;;26865:2176;;;26918:41;26933:6;26941:9;26952:6;26918:14;:41::i;:::-;26911:48;;;;26865:2176;27022:8;;;;;;;;;;;27012:18;;:6;:18;;;:46;;;;;27047:11;;;;;;;;;;;27034:24;;:9;:24;;;27012:46;27009:96;;;27081:12;27074:4;:19;;;;27009:96;27139:8;;27120:15;:27;27117:184;;27181:1;27163:15;:19;;;;27215:1;27197:15;:19;;;;27251:1;27231:17;:21;;;;27288:1;27267:18;:22;;;;27117:184;27327:11;;;;;;;;;;;27317:21;;:6;:21;;;27313:149;;27383:6;;27376:4;;:13;;;;:::i;:::-;27359:12;:31;27355:96;;27431:4;27412:5;:16;27418:9;27412:16;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;27355:96;27313:149;27488:7;:5;:7::i;:::-;27478:17;;:6;:17;;;;:41;;;;;27512:7;:5;:7::i;:::-;27499:20;;:9;:20;;;;27478:41;27474:75;;;27521:28;27535:6;27542;27521:13;:28::i;:::-;27474:75;27570:17;:25;27588:6;27570:25;;;;;;;;;;;;;;;;;;;;;;;;;27569:26;:59;;;;;27600:17;:28;27618:9;27600:28;;;;;;;;;;;;;;;;;;;;;;;;;27599:29;27569:59;27566:359;;;27648:10;27681:5;27687:1;27681:7;;27677:201;27693:1;27689;:5;27677:201;;27775:1;27778:6;27786:15;27758:44;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;27748:55;;;;;;27743:61;;27722:84;;27829:29;27844:6;27851:2;27854:3;27829:14;:29::i;:::-;;27695:3;;;;;:::i;:::-;;;;27677:201;;;;27906:3;27896:13;;;;;:::i;:::-;;;27629:296;27566:359;27956:28;27987:24;28005:4;27987:9;:24::i;:::-;27956:55;;28026:28;28081:23;;28057:20;:47;;28026:78;;28137:23;:44;;;;;28165:16;;;;;;;;;;;28164:17;28137:44;:69;;;;;28186:12;:20;28199:6;28186:20;;;;;;;;;;;;;;;;;;;;;;;;;28185:21;28137:69;:94;;;;;28210:21;;;;;;;;;;;28137:94;28133:305;;;28269:25;;;;;;;;;;;28266:97;;;28340:23;;28317:46;;28266:97;28382:36;28397:20;28382:14;:36::i;:::-;28133:305;28474:53;28496:6;28474:53;;;;;;;;;;;;;;;;;:9;:17;28484:6;28474:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;28454:9;:17;28464:6;28454:17;;;;;;;;;;;;;;;:73;;;;28544:19;28567:17;:25;28585:6;28567:25;;;;;;;;;;;;;;;;;;;;;;;;;:57;;;;28596:17;:28;28614:9;28596:28;;;;;;;;;;;;;;;;;;;;;;;;;28567:57;28566:148;;28680:34;28688:6;28696:9;28707:6;28680:7;:34::i;:::-;28566:148;;;28671:6;28566:148;28544:170;;28734:16;;;;;;;;;;;:51;;;;;28755:19;:30;28775:9;28755:30;;;;;;;;;;;;;;;;;;;;;;;;;28754:31;28734:51;28731:133;;;28853:10;;28812:37;28837:11;28812:20;28822:9;28812;:20::i;:::-;:24;;:37;;;;:::i;:::-;:51;;28804:60;;;;;;28731:133;28904:37;28929:11;28904:9;:20;28914:9;28904:20;;;;;;;;;;;;;;;;:24;;:37;;;;:::i;:::-;28881:9;:20;28891:9;28881:20;;;;;;;;;;;;;;;:60;;;;28980:9;28963:40;;28972:6;28963:40;;;28991:11;28963:40;;;;;;:::i;:::-;;;;;;;;29025:4;29018:11;;;;;26162:2886;;;;;;:::o;1904:192::-;1990:7;2023:1;2018;:6;;2026:12;2010:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2050:9;2066:1;2062;:5;;;;:::i;:::-;2050:17;;2087:1;2080:8;;;1904:192;;;;;:::o;1760:136::-;1818:7;1845:43;1849:1;1852;1845:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1838:50;;1760:136;;;;:::o;29056:330::-;29149:4;29186:53;29208:6;29186:53;;;;;;;;;;;;;;;;;:9;:17;29196:6;29186:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;29166:9;:17;29176:6;29166:17;;;;;;;;;;;;;;;:73;;;;29273:32;29298:6;29273:9;:20;29283:9;29273:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;29250:9;:20;29260:9;29250:20;;;;;;;;;;;;;;;:55;;;;29338:9;29321:35;;29330:6;29321:35;;;29349:6;29321:35;;;;;;:::i;:::-;;;;;;;;29374:4;29367:11;;29056:330;;;;;:::o;32399:222::-;32486:5;:13;32492:6;32486:13;;;;;;;;;;;;;;;;;;;;;;;;;32485:14;32477:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;32552:12;;32542:6;:22;;:49;;;;32568:15;:23;32584:6;32568:23;;;;;;;;;;;;;;;;;;;;;;;;;32542:49;32534:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;32399:222;;:::o;29394:1048::-;17495:4;17476:16;;:23;;;;;;;;;;;;;;;;;;29476:19:::1;29498:65;29561:1;29498:58;29531:24;;29498:28;29510:15;;29498:7;:11;;:28;;;;:::i;:::-;:32;;:58;;;;:::i;:::-;:62;;:65;;;;:::i;:::-;29476:87;;29574:21;29598:24;29610:11;29598:7;:11;;:24;;;;:::i;:::-;29574:48;;29635:31;29652:13;29635:16;:31::i;:::-;29677:22;29702:21;29677:46;;29736:19;29758:52;29787:22;29807:1;29787:15;;:19;;:22;;;;:::i;:::-;29758:24;;:28;;:52;;;;:::i;:::-;29736:74;;29831:26;29860:59;29917:1;29860:52;29900:11;29860:35;29879:15;;29860:14;:18;;:35;;;;:::i;:::-;:39;;:52;;;;:::i;:::-;:56;;:59;;;;:::i;:::-;29831:88;;29930:21;29954:47;29989:11;29954:30;29973:10;;29954:14;:18;;:30;;;;:::i;:::-;:34;;:47;;;;:::i;:::-;29930:71;;30012:26;30041:57;30084:13;30041:38;30060:18;30041:14;:18;;:38;;;;:::i;:::-;:42;;:57;;;;:::i;:::-;30012:86;;30135:1;30114:18;:22;30111:104;;;30151:64;30172:22;;;;;;;;;;;30196:18;30151:20;:64::i;:::-;30111:104;30247:1;30231:13;:17;30228:89;;;30263:54;30284:17;;;;;;;;;;;30303:13;30263:20;:54::i;:::-;30228:89;30354:1;30333:18;:22;:41;;;;;30373:1;30359:11;:15;30333:41;30330:104;;;30389:45;30402:11;30415:18;30389:12;:45::i;:::-;30330:104;29455:987;;;;;;;17541:5:::0;17522:16;;:24;;;;;;;;;;;;;;;;;;29394:1048;:::o;31765:622::-;31851:7;31881:17;31901:1;31881:21;;31926:12;:20;31939:6;31926:20;;;;;;;;;;;;;;;;;;;;;;;;;31923:223;;;31975:38;32009:3;31975:29;31986:17;;31975:6;:10;;:29;;;;:::i;:::-;:33;;:38;;;;:::i;:::-;31963:50;;31923:223;;;32043:12;:23;32056:9;32043:23;;;;;;;;;;;;;;;;;;;;;;;;;32040:106;;;32095:39;32130:3;32095:30;32106:18;;32095:6;:10;;:30;;;;:::i;:::-;:34;;:39;;;;:::i;:::-;32083:51;;32040:106;31923:223;32181:1;32169:9;:13;32166:173;;;32226:39;32255:9;32226;:24;32244:4;32226:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;32199:9;:24;32217:4;32199:24;;;;;;;;;;;;;;;:66;;;;32310:4;32285:42;;32294:6;32285:42;;;32317:9;32285:42;;;;;;:::i;:::-;;;;;;;;32166:173;32358:21;32369:9;32358:6;:10;;:21;;;;:::i;:::-;32351:28;;;31765:622;;;;;:::o;2104:250::-;2162:7;2191:1;2186;:6;2182:47;;2216:1;2209:8;;;;2182:47;2241:9;2257:1;2253;:5;;;;:::i;:::-;2241:17;;2286:1;2281;2277;:5;;;;:::i;:::-;:10;2269:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;2345:1;2338:8;;;2104:250;;;;;:::o;2362:132::-;2420:7;2447:39;2451:1;2454;2447:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2440:46;;2362:132;;;;:::o;30454:666::-;30580:21;30618:1;30604:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30580:40;;30649:4;30631;30636:1;30631:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;30675:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30665:4;30670:1;30665:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;30710:62;30727:4;30742:15;;;;;;;;;;;30760:11;30710:8;:62::i;:::-;30811:15;;;;;;;;;;;:66;;;30892:11;30918:1;30962:4;30989;31025:15;30811:240;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31077:35;31094:11;31107:4;31077:35;;;;;;;:::i;:::-;;;;;;;;30509:611;30454:666;:::o;24619:126::-;24711:9;:18;;:26;24730:6;24711:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24619:126;;:::o;31128:513::-;31276:62;31293:4;31308:15;;;;;;;;;;;31326:11;31276:8;:62::i;:::-;31381:15;;;;;;;;;;;:31;;;31420:9;31453:4;31473:11;31499:1;31542;31585:7;:5;:7::i;:::-;31607:15;31381:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;31128:513;;:::o;2502:278::-;2588:7;2620:1;2616;:5;2623:12;2608:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2647:9;2663:1;2659;:5;;;;:::i;:::-;2647:17;;2771:1;2764:8;;;2502:278;;;;;:::o;88:117:1:-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:90::-;875:7;918:5;911:13;904:21;893:32;;841:90;;;:::o;937:116::-;1007:21;1022:5;1007:21;:::i;:::-;1000:5;997:32;987:60;;1043:1;1040;1033:12;987:60;937:116;:::o;1059:133::-;1102:5;1140:6;1127:20;1118:29;;1156:30;1180:5;1156:30;:::i;:::-;1059:133;;;;:::o;1198:468::-;1263:6;1271;1320:2;1308:9;1299:7;1295:23;1291:32;1288:119;;;1326:79;;:::i;:::-;1288:119;1446:1;1471:53;1516:7;1507:6;1496:9;1492:22;1471:53;:::i;:::-;1461:63;;1417:117;1573:2;1599:50;1641:7;1632:6;1621:9;1617:22;1599:50;:::i;:::-;1589:60;;1544:115;1198:468;;;;;:::o;1672:329::-;1731:6;1780:2;1768:9;1759:7;1755:23;1751:32;1748:119;;;1786:79;;:::i;:::-;1748:119;1906:1;1931:53;1976:7;1967:6;1956:9;1952:22;1931:53;:::i;:::-;1921:63;;1877:117;1672:329;;;;:::o;2007:99::-;2059:6;2093:5;2087:12;2077:22;;2007:99;;;:::o;2112:169::-;2196:11;2230:6;2225:3;2218:19;2270:4;2265:3;2261:14;2246:29;;2112:169;;;;:::o;2287:307::-;2355:1;2365:113;2379:6;2376:1;2373:13;2365:113;;;2464:1;2459:3;2455:11;2449:18;2445:1;2440:3;2436:11;2429:39;2401:2;2398:1;2394:10;2389:15;;2365:113;;;2496:6;2493:1;2490:13;2487:101;;;2576:1;2567:6;2562:3;2558:16;2551:27;2487:101;2336:258;2287:307;;;:::o;2600:102::-;2641:6;2692:2;2688:7;2683:2;2676:5;2672:14;2668:28;2658:38;;2600:102;;;:::o;2708:364::-;2796:3;2824:39;2857:5;2824:39;:::i;:::-;2879:71;2943:6;2938:3;2879:71;:::i;:::-;2872:78;;2959:52;3004:6;2999:3;2992:4;2985:5;2981:16;2959:52;:::i;:::-;3036:29;3058:6;3036:29;:::i;:::-;3031:3;3027:39;3020:46;;2800:272;2708:364;;;;:::o;3078:313::-;3191:4;3229:2;3218:9;3214:18;3206:26;;3278:9;3272:4;3268:20;3264:1;3253:9;3249:17;3242:47;3306:78;3379:4;3370:6;3306:78;:::i;:::-;3298:86;;3078:313;;;;:::o;3397:77::-;3434:7;3463:5;3452:16;;3397:77;;;:::o;3480:122::-;3553:24;3571:5;3553:24;:::i;:::-;3546:5;3543:35;3533:63;;3592:1;3589;3582:12;3533:63;3480:122;:::o;3608:139::-;3654:5;3692:6;3679:20;3670:29;;3708:33;3735:5;3708:33;:::i;:::-;3608:139;;;;:::o;3753:474::-;3821:6;3829;3878:2;3866:9;3857:7;3853:23;3849:32;3846:119;;;3884:79;;:::i;:::-;3846:119;4004:1;4029:53;4074:7;4065:6;4054:9;4050:22;4029:53;:::i;:::-;4019:63;;3975:117;4131:2;4157:53;4202:7;4193:6;4182:9;4178:22;4157:53;:::i;:::-;4147:63;;4102:118;3753:474;;;;;:::o;4233:109::-;4314:21;4329:5;4314:21;:::i;:::-;4309:3;4302:34;4233:109;;:::o;4348:210::-;4435:4;4473:2;4462:9;4458:18;4450:26;;4486:65;4548:1;4537:9;4533:17;4524:6;4486:65;:::i;:::-;4348:210;;;;:::o;4564:619::-;4641:6;4649;4657;4706:2;4694:9;4685:7;4681:23;4677:32;4674:119;;;4712:79;;:::i;:::-;4674:119;4832:1;4857:53;4902:7;4893:6;4882:9;4878:22;4857:53;:::i;:::-;4847:63;;4803:117;4959:2;4985:53;5030:7;5021:6;5010:9;5006:22;4985:53;:::i;:::-;4975:63;;4930:118;5087:2;5113:53;5158:7;5149:6;5138:9;5134:22;5113:53;:::i;:::-;5103:63;;5058:118;4564:619;;;;;:::o;5189:104::-;5234:7;5263:24;5281:5;5263:24;:::i;:::-;5252:35;;5189:104;;;:::o;5299:142::-;5402:32;5428:5;5402:32;:::i;:::-;5397:3;5390:45;5299:142;;:::o;5447:254::-;5556:4;5594:2;5583:9;5579:18;5571:26;;5607:87;5691:1;5680:9;5676:17;5667:6;5607:87;:::i;:::-;5447:254;;;;:::o;5707:118::-;5794:24;5812:5;5794:24;:::i;:::-;5789:3;5782:37;5707:118;;:::o;5831:222::-;5924:4;5962:2;5951:9;5947:18;5939:26;;5975:71;6043:1;6032:9;6028:17;6019:6;5975:71;:::i;:::-;5831:222;;;;:::o;6059:60::-;6087:3;6108:5;6101:12;;6059:60;;;:::o;6125:142::-;6175:9;6208:53;6226:34;6235:24;6253:5;6235:24;:::i;:::-;6226:34;:::i;:::-;6208:53;:::i;:::-;6195:66;;6125:142;;;:::o;6273:126::-;6323:9;6356:37;6387:5;6356:37;:::i;:::-;6343:50;;6273:126;;;:::o;6405:153::-;6482:9;6515:37;6546:5;6515:37;:::i;:::-;6502:50;;6405:153;;;:::o;6564:185::-;6678:64;6736:5;6678:64;:::i;:::-;6673:3;6666:77;6564:185;;:::o;6755:276::-;6875:4;6913:2;6902:9;6898:18;6890:26;;6926:98;7021:1;7010:9;7006:17;6997:6;6926:98;:::i;:::-;6755:276;;;;:::o;7037:619::-;7114:6;7122;7130;7179:2;7167:9;7158:7;7154:23;7150:32;7147:119;;;7185:79;;:::i;:::-;7147:119;7305:1;7330:53;7375:7;7366:6;7355:9;7351:22;7330:53;:::i;:::-;7320:63;;7276:117;7432:2;7458:53;7503:7;7494:6;7483:9;7479:22;7458:53;:::i;:::-;7448:63;;7403:118;7560:2;7586:53;7631:7;7622:6;7611:9;7607:22;7586:53;:::i;:::-;7576:63;;7531:118;7037:619;;;;;:::o;7662:323::-;7718:6;7767:2;7755:9;7746:7;7742:23;7738:32;7735:119;;;7773:79;;:::i;:::-;7735:119;7893:1;7918:50;7960:7;7951:6;7940:9;7936:22;7918:50;:::i;:::-;7908:60;;7864:114;7662:323;;;;:::o;7991:118::-;8078:24;8096:5;8078:24;:::i;:::-;8073:3;8066:37;7991:118;;:::o;8115:222::-;8208:4;8246:2;8235:9;8231:18;8223:26;;8259:71;8327:1;8316:9;8312:17;8303:6;8259:71;:::i;:::-;8115:222;;;;:::o;8343:86::-;8378:7;8418:4;8411:5;8407:16;8396:27;;8343:86;;;:::o;8435:112::-;8518:22;8534:5;8518:22;:::i;:::-;8513:3;8506:35;8435:112;;:::o;8553:214::-;8642:4;8680:2;8669:9;8665:18;8657:26;;8693:67;8757:1;8746:9;8742:17;8733:6;8693:67;:::i;:::-;8553:214;;;;:::o;8773:329::-;8832:6;8881:2;8869:9;8860:7;8856:23;8852:32;8849:119;;;8887:79;;:::i;:::-;8849:119;9007:1;9032:53;9077:7;9068:6;9057:9;9053:22;9032:53;:::i;:::-;9022:63;;8978:117;8773:329;;;;:::o;9108:117::-;9217:1;9214;9207:12;9231:117;9340:1;9337;9330:12;9354:117;9463:1;9460;9453:12;9494:568;9567:8;9577:6;9627:3;9620:4;9612:6;9608:17;9604:27;9594:122;;9635:79;;:::i;:::-;9594:122;9748:6;9735:20;9725:30;;9778:18;9770:6;9767:30;9764:117;;;9800:79;;:::i;:::-;9764:117;9914:4;9906:6;9902:17;9890:29;;9968:3;9960:4;9952:6;9948:17;9938:8;9934:32;9931:41;9928:128;;;9975:79;;:::i;:::-;9928:128;9494:568;;;;;:::o;10068:698::-;10160:6;10168;10176;10225:2;10213:9;10204:7;10200:23;10196:32;10193:119;;;10231:79;;:::i;:::-;10193:119;10379:1;10368:9;10364:17;10351:31;10409:18;10401:6;10398:30;10395:117;;;10431:79;;:::i;:::-;10395:117;10544:80;10616:7;10607:6;10596:9;10592:22;10544:80;:::i;:::-;10526:98;;;;10322:312;10673:2;10699:50;10741:7;10732:6;10721:9;10717:22;10699:50;:::i;:::-;10689:60;;10644:115;10068:698;;;;;:::o;10772:474::-;10840:6;10848;10897:2;10885:9;10876:7;10872:23;10868:32;10865:119;;;10903:79;;:::i;:::-;10865:119;11023:1;11048:53;11093:7;11084:6;11073:9;11069:22;11048:53;:::i;:::-;11038:63;;10994:117;11150:2;11176:53;11221:7;11212:6;11201:9;11197:22;11176:53;:::i;:::-;11166:63;;11121:118;10772:474;;;;;:::o;11252:182::-;11392:34;11388:1;11380:6;11376:14;11369:58;11252:182;:::o;11440:366::-;11582:3;11603:67;11667:2;11662:3;11603:67;:::i;:::-;11596:74;;11679:93;11768:3;11679:93;:::i;:::-;11797:2;11792:3;11788:12;11781:19;;11440:366;;;:::o;11812:419::-;11978:4;12016:2;12005:9;12001:18;11993:26;;12065:9;12059:4;12055:20;12051:1;12040:9;12036:17;12029:47;12093:131;12219:4;12093:131;:::i;:::-;12085:139;;11812:419;;;:::o;12237:180::-;12285:77;12282:1;12275:88;12382:4;12379:1;12372:15;12406:4;12403:1;12396:15;12423:320;12467:6;12504:1;12498:4;12494:12;12484:22;;12551:1;12545:4;12541:12;12572:18;12562:81;;12628:4;12620:6;12616:17;12606:27;;12562:81;12690:2;12682:6;12679:14;12659:18;12656:38;12653:84;;12709:18;;:::i;:::-;12653:84;12474:269;12423:320;;;:::o;12749:180::-;12797:77;12794:1;12787:88;12894:4;12891:1;12884:15;12918:4;12915:1;12908:15;12935:180;12983:77;12980:1;12973:88;13080:4;13077:1;13070:15;13104:4;13101:1;13094:15;13121:233;13160:3;13183:24;13201:5;13183:24;:::i;:::-;13174:33;;13229:66;13222:5;13219:77;13216:103;;13299:18;;:::i;:::-;13216:103;13346:1;13339:5;13335:13;13328:20;;13121:233;;;:::o;13360:143::-;13417:5;13448:6;13442:13;13433:22;;13464:33;13491:5;13464:33;:::i;:::-;13360:143;;;;:::o;13509:351::-;13579:6;13628:2;13616:9;13607:7;13603:23;13599:32;13596:119;;;13634:79;;:::i;:::-;13596:119;13754:1;13779:64;13835:7;13826:6;13815:9;13811:22;13779:64;:::i;:::-;13769:74;;13725:128;13509:351;;;;:::o;13866:332::-;13987:4;14025:2;14014:9;14010:18;14002:26;;14038:71;14106:1;14095:9;14091:17;14082:6;14038:71;:::i;:::-;14119:72;14187:2;14176:9;14172:18;14163:6;14119:72;:::i;:::-;13866:332;;;;;:::o;14204:225::-;14344:34;14340:1;14332:6;14328:14;14321:58;14413:8;14408:2;14400:6;14396:15;14389:33;14204:225;:::o;14435:366::-;14577:3;14598:67;14662:2;14657:3;14598:67;:::i;:::-;14591:74;;14674:93;14763:3;14674:93;:::i;:::-;14792:2;14787:3;14783:12;14776:19;;14435:366;;;:::o;14807:419::-;14973:4;15011:2;15000:9;14996:18;14988:26;;15060:9;15054:4;15050:20;15046:1;15035:9;15031:17;15024:47;15088:131;15214:4;15088:131;:::i;:::-;15080:139;;14807:419;;;:::o;15232:305::-;15272:3;15291:20;15309:1;15291:20;:::i;:::-;15286:25;;15325:20;15343:1;15325:20;:::i;:::-;15320:25;;15479:1;15411:66;15407:74;15404:1;15401:81;15398:107;;;15485:18;;:::i;:::-;15398:107;15529:1;15526;15522:9;15515:16;;15232:305;;;;:::o;15543:177::-;15683:29;15679:1;15671:6;15667:14;15660:53;15543:177;:::o;15726:366::-;15868:3;15889:67;15953:2;15948:3;15889:67;:::i;:::-;15882:74;;15965:93;16054:3;15965:93;:::i;:::-;16083:2;16078:3;16074:12;16067:19;;15726:366;;;:::o;16098:419::-;16264:4;16302:2;16291:9;16287:18;16279:26;;16351:9;16345:4;16341:20;16337:1;16326:9;16322:17;16315:47;16379:131;16505:4;16379:131;:::i;:::-;16371:139;;16098:419;;;:::o;16523:223::-;16663:34;16659:1;16651:6;16647:14;16640:58;16732:6;16727:2;16719:6;16715:15;16708:31;16523:223;:::o;16752:366::-;16894:3;16915:67;16979:2;16974:3;16915:67;:::i;:::-;16908:74;;16991:93;17080:3;16991:93;:::i;:::-;17109:2;17104:3;17100:12;17093:19;;16752:366;;;:::o;17124:419::-;17290:4;17328:2;17317:9;17313:18;17305:26;;17377:9;17371:4;17367:20;17363:1;17352:9;17348:17;17341:47;17405:131;17531:4;17405:131;:::i;:::-;17397:139;;17124:419;;;:::o;17549:221::-;17689:34;17685:1;17677:6;17673:14;17666:58;17758:4;17753:2;17745:6;17741:15;17734:29;17549:221;:::o;17776:366::-;17918:3;17939:67;18003:2;17998:3;17939:67;:::i;:::-;17932:74;;18015:93;18104:3;18015:93;:::i;:::-;18133:2;18128:3;18124:12;18117:19;;17776:366;;;:::o;18148:419::-;18314:4;18352:2;18341:9;18337:18;18329:26;;18401:9;18395:4;18391:20;18387:1;18376:9;18372:17;18365:47;18429:131;18555:4;18429:131;:::i;:::-;18421:139;;18148:419;;;:::o;18573:224::-;18713:34;18709:1;18701:6;18697:14;18690:58;18782:7;18777:2;18769:6;18765:15;18758:32;18573:224;:::o;18803:366::-;18945:3;18966:67;19030:2;19025:3;18966:67;:::i;:::-;18959:74;;19042:93;19131:3;19042:93;:::i;:::-;19160:2;19155:3;19151:12;19144:19;;18803:366;;;:::o;19175:419::-;19341:4;19379:2;19368:9;19364:18;19356:26;;19428:9;19422:4;19418:20;19414:1;19403:9;19399:17;19392:47;19456:131;19582:4;19456:131;:::i;:::-;19448:139;;19175:419;;;:::o;19600:222::-;19740:34;19736:1;19728:6;19724:14;19717:58;19809:5;19804:2;19796:6;19792:15;19785:30;19600:222;:::o;19828:366::-;19970:3;19991:67;20055:2;20050:3;19991:67;:::i;:::-;19984:74;;20067:93;20156:3;20067:93;:::i;:::-;20185:2;20180:3;20176:12;20169:19;;19828:366;;;:::o;20200:419::-;20366:4;20404:2;20393:9;20389:18;20381:26;;20453:9;20447:4;20443:20;20439:1;20428:9;20424:17;20417:47;20481:131;20607:4;20481:131;:::i;:::-;20473:139;;20200:419;;;:::o;20625:250::-;20765:34;20761:1;20753:6;20749:14;20742:58;20834:33;20829:2;20821:6;20817:15;20810:58;20625:250;:::o;20881:366::-;21023:3;21044:67;21108:2;21103:3;21044:67;:::i;:::-;21037:74;;21120:93;21209:3;21120:93;:::i;:::-;21238:2;21233:3;21229:12;21222:19;;20881:366;;;:::o;21253:419::-;21419:4;21457:2;21446:9;21442:18;21434:26;;21506:9;21500:4;21496:20;21492:1;21481:9;21477:17;21470:47;21534:131;21660:4;21534:131;:::i;:::-;21526:139;;21253:419;;;:::o;21678:169::-;21818:21;21814:1;21806:6;21802:14;21795:45;21678:169;:::o;21853:366::-;21995:3;22016:67;22080:2;22075:3;22016:67;:::i;:::-;22009:74;;22092:93;22181:3;22092:93;:::i;:::-;22210:2;22205:3;22201:12;22194:19;;21853:366;;;:::o;22225:419::-;22391:4;22429:2;22418:9;22414:18;22406:26;;22478:9;22472:4;22468:20;22464:1;22453:9;22449:17;22442:47;22506:131;22632:4;22506:131;:::i;:::-;22498:139;;22225:419;;;:::o;22650:76::-;22686:7;22715:5;22704:16;;22650:76;;;:::o;22732:78::-;22770:7;22799:5;22788:16;;22732:78;;;:::o;22816:153::-;22919:43;22938:23;22955:5;22938:23;:::i;:::-;22919:43;:::i;:::-;22914:3;22907:56;22816:153;;:::o;22975:79::-;23014:7;23043:5;23032:16;;22975:79;;;:::o;23060:157::-;23165:45;23185:24;23203:5;23185:24;:::i;:::-;23165:45;:::i;:::-;23160:3;23153:58;23060:157;;:::o;23223:534::-;23389:3;23404:73;23473:3;23464:6;23404:73;:::i;:::-;23502:2;23497:3;23493:12;23486:19;;23515:75;23586:3;23577:6;23515:75;:::i;:::-;23615:2;23610:3;23606:12;23599:19;;23628:75;23699:3;23690:6;23628:75;:::i;:::-;23728:2;23723:3;23719:12;23712:19;;23748:3;23741:10;;23223:534;;;;;;:::o;23763:231::-;23801:3;23824:23;23841:5;23824:23;:::i;:::-;23815:32;;23869:66;23862:5;23859:77;23856:103;;23939:18;;:::i;:::-;23856:103;23986:1;23979:5;23975:13;23968:20;;23763:231;;;:::o;24000:191::-;24040:4;24060:20;24078:1;24060:20;:::i;:::-;24055:25;;24094:20;24112:1;24094:20;:::i;:::-;24089:25;;24133:1;24130;24127:8;24124:34;;;24138:18;;:::i;:::-;24124:34;24183:1;24180;24176:9;24168:17;;24000:191;;;;:::o;24197:169::-;24337:21;24333:1;24325:6;24321:14;24314:45;24197:169;:::o;24372:366::-;24514:3;24535:67;24599:2;24594:3;24535:67;:::i;:::-;24528:74;;24611:93;24700:3;24611:93;:::i;:::-;24729:2;24724:3;24720:12;24713:19;;24372:366;;;:::o;24744:419::-;24910:4;24948:2;24937:9;24933:18;24925:26;;24997:9;24991:4;24987:20;24983:1;24972:9;24968:17;24961:47;25025:131;25151:4;25025:131;:::i;:::-;25017:139;;24744:419;;;:::o;25169:167::-;25309:19;25305:1;25297:6;25293:14;25286:43;25169:167;:::o;25342:366::-;25484:3;25505:67;25569:2;25564:3;25505:67;:::i;:::-;25498:74;;25581:93;25670:3;25581:93;:::i;:::-;25699:2;25694:3;25690:12;25683:19;;25342:366;;;:::o;25714:419::-;25880:4;25918:2;25907:9;25903:18;25895:26;;25967:9;25961:4;25957:20;25953:1;25942:9;25938:17;25931:47;25995:131;26121:4;25995:131;:::i;:::-;25987:139;;25714:419;;;:::o;26139:348::-;26179:7;26202:20;26220:1;26202:20;:::i;:::-;26197:25;;26236:20;26254:1;26236:20;:::i;:::-;26231:25;;26424:1;26356:66;26352:74;26349:1;26346:81;26341:1;26334:9;26327:17;26323:105;26320:131;;;26431:18;;:::i;:::-;26320:131;26479:1;26476;26472:9;26461:20;;26139:348;;;;:::o;26493:180::-;26541:77;26538:1;26531:88;26638:4;26635:1;26628:15;26662:4;26659:1;26652:15;26679:185;26719:1;26736:20;26754:1;26736:20;:::i;:::-;26731:25;;26770:20;26788:1;26770:20;:::i;:::-;26765:25;;26809:1;26799:35;;26814:18;;:::i;:::-;26799:35;26856:1;26853;26849:9;26844:14;;26679:185;;;;:::o;26870:220::-;27010:34;27006:1;26998:6;26994:14;26987:58;27079:3;27074:2;27066:6;27062:15;27055:28;26870:220;:::o;27096:366::-;27238:3;27259:67;27323:2;27318:3;27259:67;:::i;:::-;27252:74;;27335:93;27424:3;27335:93;:::i;:::-;27453:2;27448:3;27444:12;27437:19;;27096:366;;;:::o;27468:419::-;27634:4;27672:2;27661:9;27657:18;27649:26;;27721:9;27715:4;27711:20;27707:1;27696:9;27692:17;27685:47;27749:131;27875:4;27749:131;:::i;:::-;27741:139;;27468:419;;;:::o;27893:180::-;27941:77;27938:1;27931:88;28038:4;28035:1;28028:15;28062:4;28059:1;28052:15;28079:85;28124:7;28153:5;28142:16;;28079:85;;;:::o;28170:158::-;28228:9;28261:61;28279:42;28288:32;28314:5;28288:32;:::i;:::-;28279:42;:::i;:::-;28261:61;:::i;:::-;28248:74;;28170:158;;;:::o;28334:147::-;28429:45;28468:5;28429:45;:::i;:::-;28424:3;28417:58;28334:147;;:::o;28487:114::-;28554:6;28588:5;28582:12;28572:22;;28487:114;;;:::o;28607:184::-;28706:11;28740:6;28735:3;28728:19;28780:4;28775:3;28771:14;28756:29;;28607:184;;;;:::o;28797:132::-;28864:4;28887:3;28879:11;;28917:4;28912:3;28908:14;28900:22;;28797:132;;;:::o;28935:108::-;29012:24;29030:5;29012:24;:::i;:::-;29007:3;29000:37;28935:108;;:::o;29049:179::-;29118:10;29139:46;29181:3;29173:6;29139:46;:::i;:::-;29217:4;29212:3;29208:14;29194:28;;29049:179;;;;:::o;29234:113::-;29304:4;29336;29331:3;29327:14;29319:22;;29234:113;;;:::o;29383:732::-;29502:3;29531:54;29579:5;29531:54;:::i;:::-;29601:86;29680:6;29675:3;29601:86;:::i;:::-;29594:93;;29711:56;29761:5;29711:56;:::i;:::-;29790:7;29821:1;29806:284;29831:6;29828:1;29825:13;29806:284;;;29907:6;29901:13;29934:63;29993:3;29978:13;29934:63;:::i;:::-;29927:70;;30020:60;30073:6;30020:60;:::i;:::-;30010:70;;29866:224;29853:1;29850;29846:9;29841:14;;29806:284;;;29810:14;30106:3;30099:10;;29507:608;;;29383:732;;;;:::o;30121:831::-;30384:4;30422:3;30411:9;30407:19;30399:27;;30436:71;30504:1;30493:9;30489:17;30480:6;30436:71;:::i;:::-;30517:80;30593:2;30582:9;30578:18;30569:6;30517:80;:::i;:::-;30644:9;30638:4;30634:20;30629:2;30618:9;30614:18;30607:48;30672:108;30775:4;30766:6;30672:108;:::i;:::-;30664:116;;30790:72;30858:2;30847:9;30843:18;30834:6;30790:72;:::i;:::-;30872:73;30940:3;30929:9;30925:19;30916:6;30872:73;:::i;:::-;30121:831;;;;;;;;:::o;30958:483::-;31129:4;31167:2;31156:9;31152:18;31144:26;;31180:71;31248:1;31237:9;31233:17;31224:6;31180:71;:::i;:::-;31298:9;31292:4;31288:20;31283:2;31272:9;31268:18;31261:48;31326:108;31429:4;31420:6;31326:108;:::i;:::-;31318:116;;30958:483;;;;;:::o;31447:807::-;31696:4;31734:3;31723:9;31719:19;31711:27;;31748:71;31816:1;31805:9;31801:17;31792:6;31748:71;:::i;:::-;31829:72;31897:2;31886:9;31882:18;31873:6;31829:72;:::i;:::-;31911:80;31987:2;31976:9;31972:18;31963:6;31911:80;:::i;:::-;32001;32077:2;32066:9;32062:18;32053:6;32001:80;:::i;:::-;32091:73;32159:3;32148:9;32144:19;32135:6;32091:73;:::i;:::-;32174;32242:3;32231:9;32227:19;32218:6;32174:73;:::i;:::-;31447:807;;;;;;;;;:::o;32260:143::-;32317:5;32348:6;32342:13;32333:22;;32364:33;32391:5;32364:33;:::i;:::-;32260:143;;;;:::o;32409:663::-;32497:6;32505;32513;32562:2;32550:9;32541:7;32537:23;32533:32;32530:119;;;32568:79;;:::i;:::-;32530:119;32688:1;32713:64;32769:7;32760:6;32749:9;32745:22;32713:64;:::i;:::-;32703:74;;32659:128;32826:2;32852:64;32908:7;32899:6;32888:9;32884:22;32852:64;:::i;:::-;32842:74;;32797:129;32965:2;32991:64;33047:7;33038:6;33027:9;33023:22;32991:64;:::i;:::-;32981:74;;32936:129;32409:663;;;;;:::o

Swarm Source

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