ETH Price: $2,497.27 (+0.68%)

Token

Genine Labs (G9)
 

Overview

Max Total Supply

300,000,000 G9

Holders

69

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
425,244.991993498 G9

Value
$0.00
0x56c2e5c062a06033b3be2f2b8ccd6e4c82bb4c66
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:
GenineLabs

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-07-14
*/

/**
Telegram : https://t.me/Geninelabs
Website  : https://geninelabs.com/
Twitter  : https://twitter.com/GenineLabs
*/

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

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 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 GenineLabs is Context, IERC20, Ownable {
    
    using SafeMath for uint256;
    using Address for address;
    
    string private _name = "Genine Labs";
    string private _symbol = "G9";
    uint8 private _decimals = 9;

    address payable public marketingWalletAddress = payable(0x55dAAf37E14EdF41ee113b2c8B335e5d10dc2042);
    address payable public teamWalletAddress = payable(0x55dAAf37E14EdF41ee113b2c8B335e5d10dc2042);
    address public immutable deadAddress = 0x000000000000000000000000000000000000dEaD;
    
    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    
    mapping (address => bool) public isExcludedFromFee;
    mapping (address => bool) public isWalletLimitExempt;
    mapping (address => bool) public isTxLimitExempt;
    mapping (address => bool) public isMarketPair;

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

    uint256 public _liquidityShare = 4;
    uint256 public _marketingShare = 7;
    uint256 public _teamShare = 15;

    uint256 public _totalTaxIfBuying = 9;
    uint256 public _totalTaxIfSelling = 12;
    uint256 public _totalDistributionShares = 26;

    uint256 private _totalSupply =  300000000 * 10**_decimals;
    uint256 public _maxTxAmount =   1250000 * 10**_decimals;     
    uint256 public _walletMax =     1250000 * 10**_decimals;      
    uint256 private minimumTokensBeforeSwap = 100 * 10**_decimals; 

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

    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    event SwapETHForTokens(
        uint256 amountIn,
        address[] path
    );
    
    event SwapTokensForETH(
        uint256 amountIn,
        address[] path
    );
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor () {
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); 
        //0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506
        //0x10ED43C718714eb63d5aA57B78B54704E256024E
        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;
        
        isTxLimitExempt[owner()] = true;
        isTxLimitExempt[address(this)] = true;

        isMarketPair[address(uniswapPair)] = true;

        _balances[_msgSender()] = _totalSupply;
        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 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 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");

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

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

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

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

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

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

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":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newRouterAddress","type":"address"}],"name":"changeRouterVersion","outputs":[{"internalType":"address","name":"newPairAddress","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"checkWalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newValue","type":"bool"}],"name":"enableDisableWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","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":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isMarketPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isTxLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isWalletLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":[{"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":"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":"uint256","name":"newLimit","type":"uint256"}],"name":"setWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyByLimitOnly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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"},{"stateMutability":"payable","type":"receive"}]

60a06040526040518060400160405280600b81526020017f47656e696e65204c616273000000000000000000000000000000000000000000815250600390805190602001906200005192919062000bd7565b506040518060400160405280600281526020017f4739000000000000000000000000000000000000000000000000000000000000815250600490805190602001906200009f92919062000bd7565b506009600560006101000a81548160ff021916908360ff1602179055507355daaf37e14edf41ee113b2c8b335e5d10dc2042600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507355daaf37e14edf41ee113b2c8b335e5d10dc2042600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead73ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1660601b8152506002600d556005600e556002600f5560026010556005601155600560125560046013556007601455600f6015556009601655600c601755601a601855600560009054906101000a900460ff16600a620001f8919062000e4e565b6311e1a30062000209919062000f8b565b601955600560009054906101000a900460ff16600a6200022a919062000e4e565b621312d06200023a919062000f8b565b601a55600560009054906101000a900460ff16600a6200025b919062000e4e565b621312d06200026b919062000f8b565b601b55600560009054906101000a900460ff16600a6200028c919062000e4e565b60646200029a919062000f8b565b601c556001601e60156101000a81548160ff0219169083151502179055506000601e60166101000a81548160ff0219169083151502179055506001601e60176101000a81548160ff021916908315150217905550348015620002fb57600080fd5b5060006200030e62000b4360201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200040c57600080fd5b505afa15801562000421573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000447919062000c9e565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620004aa57600080fd5b505afa158015620004bf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004e5919062000c9e565b6040518363ffffffff1660e01b81526004016200050492919062000d19565b602060405180830381600087803b1580156200051f57600080fd5b505af115801562000534573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200055a919062000c9e565b601e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601954600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600960006200069662000b4b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000778600f5462000764600e54600d5462000b7460201b620028571790919060201c565b62000b7460201b620028571790919060201c565b601681905550620007b7601254620007a360115460105462000b7460201b620028571790919060201c565b62000b7460201b620028571790919060201c565b601781905550620007f6601554620007e260145460135462000b7460201b620028571790919060201c565b62000b7460201b620028571790919060201c565b6018819055506001600a60006200081262000b4b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a6000601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b60006200094b62000b4b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c6000601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506019546007600062000a8562000b4360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062000ad362000b4360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60195460405162000b34919062000d68565b60405180910390a35062001120565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080828462000b85919062000d96565b90508381101562000bcd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000bc49062000d46565b60405180910390fd5b8091505092915050565b82805462000be59062001037565b90600052602060002090601f01602090048101928262000c09576000855562000c55565b82601f1062000c2457805160ff191683800117855562000c55565b8280016001018555821562000c55579182015b8281111562000c5457825182559160200191906001019062000c37565b5b50905062000c64919062000c68565b5090565b5b8082111562000c8357600081600090555060010162000c69565b5090565b60008151905062000c988162001106565b92915050565b60006020828403121562000cb75762000cb6620010cb565b5b600062000cc78482850162000c87565b91505092915050565b62000cdb8162000fec565b82525050565b600062000cf0601b8362000d85565b915062000cfd82620010dd565b602082019050919050565b62000d138162001020565b82525050565b600060408201905062000d30600083018562000cd0565b62000d3f602083018462000cd0565b9392505050565b6000602082019050818103600083015262000d618162000ce1565b9050919050565b600060208201905062000d7f600083018462000d08565b92915050565b600082825260208201905092915050565b600062000da38262001020565b915062000db08362001020565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000de85762000de76200106d565b5b828201905092915050565b6000808291508390505b600185111562000e455780860481111562000e1d5762000e1c6200106d565b5b600185161562000e2d5780820291505b808102905062000e3d85620010d0565b945062000dfd565b94509492505050565b600062000e5b8262001020565b915062000e68836200102a565b925062000e977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000e9f565b905092915050565b60008262000eb1576001905062000f84565b8162000ec1576000905062000f84565b816001811462000eda576002811462000ee55762000f1b565b600191505062000f84565b60ff84111562000efa5762000ef96200106d565b5b8360020a91508482111562000f145762000f136200106d565b5b5062000f84565b5060208310610133831016604e8410600b841016171562000f555782820a90508381111562000f4f5762000f4e6200106d565b5b62000f84565b62000f64848484600162000df3565b9250905081840481111562000f7e5762000f7d6200106d565b5b81810290505b9392505050565b600062000f988262001020565b915062000fa58362001020565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000fe15762000fe06200106d565b5b828202905092915050565b600062000ff98262001000565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600060028204905060018216806200105057607f821691505b602082108114156200106757620010666200109c565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b60008160011c9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b620011118162000fec565b81146200111d57600080fd5b50565b60805160601c614aea620011466000396000818161134b01526113770152614aea6000f3fe6080604052600436106103855760003560e01c806388790a68116101d1578063c816841b11610102578063dd62ed3e116100a0578063f1d5f5171161006f578063f1d5f51714610d61578063f2fde38b14610d8a578063f84ba65d14610db3578063f872858a14610ddc5761038c565b8063dd62ed3e14610ca7578063ec28438a14610ce4578063ef422a1814610d0d578063f0cd1dac14610d365761038c565b8063cab03471116100dc578063cab0347114610bfb578063d158272d14610c26578063da00097d14610c51578063dc44b6a014610c7c5761038c565b8063c816841b14610b68578063c860795214610b93578063c867d60b14610bbe5761038c565b8063a5d69d1f1161016f578063c2d4640e11610149578063c2d4640e14610ac0578063c469b6dd14610ae9578063c49b9a8014610b14578063c5d2418914610b3d5761038c565b8063a5d69d1f14610a2f578063a83f53a714610a58578063a9059cbb14610a835761038c565b806395d89b41116101ab57806395d89b4114610971578063a073d37f1461099c578063a08e671f146109c7578063a457c2d7146109f25761038c565b806388790a68146108de5780638b42507f146109095780638da5cb5b146109465761038c565b806339509351116102b657806357a5802f116102545780637d1db4a5116102235780637d1db4a514610834578063807c2d9c1461085f57806382eefb431461088a578063844d591c146108b55761038c565b806357a5802f146107645780635881f3ef1461078f57806361a23c69146107cc57806370a08231146107f75761038c565b80634a74bb02116102905780634a74bb02146106a85780634cb80fd5146106d35780635342acb4146106fc578063557ed1ba146107395761038c565b806339509351146106055780633b97084a146106425780633ecad2711461066b5761038c565b80632198cf6c1161032357806327c8f835116102fd57806327c8f8351461055b5780632b112e49146105865780632c4b2334146105b1578063313ce567146105da5761038c565b80632198cf6c146104cc57806323b872dd146104f55780632563ae83146105325761038c565b80631245e3471161035f5780631245e347146104225780631694505e1461044d57806318160ddd146104785780631870517a146104a35761038c565b806306fdde0314610391578063095ea7b3146103bc5780630d5e5c87146103f95761038c565b3661038c57005b600080fd5b34801561039d57600080fd5b506103a6610e07565b6040516103b39190614226565b60405180910390f35b3480156103c857600080fd5b506103e360048036038101906103de9190613d8e565b610e99565b6040516103f091906141f0565b60405180910390f35b34801561040557600080fd5b50610420600480360381019061041b9190613e28565b610eb7565b005b34801561042e57600080fd5b50610437610f97565b604051610444919061414b565b60405180910390f35b34801561045957600080fd5b50610462610fbd565b60405161046f919061420b565b60405180910390f35b34801561048457600080fd5b5061048d610fe3565b60405161049a9190614368565b60405180910390f35b3480156104af57600080fd5b506104ca60048036038101906104c59190613e28565b610fed565b005b3480156104d857600080fd5b506104f360048036038101906104ee9190613d4e565b6110cd565b005b34801561050157600080fd5b5061051c60048036038101906105179190613cfb565b6111bd565b60405161052991906141f0565b60405180910390f35b34801561053e57600080fd5b5061055960048036038101906105549190613dce565b611297565b005b34801561056757600080fd5b50610570611349565b60405161057d9190614130565b60405180910390f35b34801561059257600080fd5b5061059b61136d565b6040516105a89190614368565b60405180910390f35b3480156105bd57600080fd5b506105d860048036038101906105d39190613c61565b6113b1565b005b3480156105e657600080fd5b506105ef61148a565b6040516105fc919061440d565b60405180910390f35b34801561061157600080fd5b5061062c60048036038101906106279190613d8e565b6114a1565b60405161063991906141f0565b60405180910390f35b34801561064e57600080fd5b5061066960048036038101906106649190613dfb565b611554565b005b34801561067757600080fd5b50610692600480360381019061068d9190613c61565b6115f3565b60405161069f91906141f0565b60405180910390f35b3480156106b457600080fd5b506106bd611613565b6040516106ca91906141f0565b60405180910390f35b3480156106df57600080fd5b506106fa60048036038101906106f59190613c61565b611626565b005b34801561070857600080fd5b50610723600480360381019061071e9190613c61565b6116ff565b60405161073091906141f0565b60405180910390f35b34801561074557600080fd5b5061074e61171f565b60405161075b9190614368565b60405180910390f35b34801561077057600080fd5b50610779611727565b6040516107869190614368565b60405180910390f35b34801561079b57600080fd5b506107b660048036038101906107b19190613c61565b61172d565b6040516107c39190614130565b60405180910390f35b3480156107d857600080fd5b506107e1611c8b565b6040516107ee9190614368565b60405180910390f35b34801561080357600080fd5b5061081e60048036038101906108199190613c61565b611c91565b60405161082b9190614368565b60405180910390f35b34801561084057600080fd5b50610849611cda565b6040516108569190614368565b60405180910390f35b34801561086b57600080fd5b50610874611ce0565b6040516108819190614368565b60405180910390f35b34801561089657600080fd5b5061089f611ce6565b6040516108ac9190614368565b60405180910390f35b3480156108c157600080fd5b506108dc60048036038101906108d79190613d4e565b611cec565b005b3480156108ea57600080fd5b506108f3611ddc565b6040516109009190614368565b60405180910390f35b34801561091557600080fd5b50610930600480360381019061092b9190613c61565b611de2565b60405161093d91906141f0565b60405180910390f35b34801561095257600080fd5b5061095b611e02565b6040516109689190614130565b60405180910390f35b34801561097d57600080fd5b50610986611e2b565b6040516109939190614226565b60405180910390f35b3480156109a857600080fd5b506109b1611ebd565b6040516109be9190614368565b60405180910390f35b3480156109d357600080fd5b506109dc611ec7565b6040516109e99190614368565b60405180910390f35b3480156109fe57600080fd5b50610a196004803603810190610a149190613d8e565b611ecd565b604051610a2691906141f0565b60405180910390f35b348015610a3b57600080fd5b50610a566004803603810190610a519190613dce565b611f9a565b005b348015610a6457600080fd5b50610a6d61204c565b604051610a7a9190614368565b60405180910390f35b348015610a8f57600080fd5b50610aaa6004803603810190610aa59190613d8e565b612052565b604051610ab791906141f0565b60405180910390f35b348015610acc57600080fd5b50610ae76004803603810190610ae29190613e28565b612071565b005b348015610af557600080fd5b50610afe612151565b604051610b0b9190614368565b60405180910390f35b348015610b2057600080fd5b50610b3b6004803603810190610b369190613dce565b612157565b005b348015610b4957600080fd5b50610b52612240565b604051610b5f9190614368565b60405180910390f35b348015610b7457600080fd5b50610b7d612246565b604051610b8a9190614130565b60405180910390f35b348015610b9f57600080fd5b50610ba861226c565b604051610bb59190614368565b60405180910390f35b348015610bca57600080fd5b50610be56004803603810190610be09190613c61565b612272565b604051610bf291906141f0565b60405180910390f35b348015610c0757600080fd5b50610c10612292565b604051610c1d9190614368565b60405180910390f35b348015610c3257600080fd5b50610c3b612298565b604051610c48919061414b565b60405180910390f35b348015610c5d57600080fd5b50610c666122be565b604051610c7391906141f0565b60405180910390f35b348015610c8857600080fd5b50610c916122d1565b604051610c9e9190614368565b60405180910390f35b348015610cb357600080fd5b50610cce6004803603810190610cc99190613cbb565b6122d7565b604051610cdb9190614368565b60405180910390f35b348015610cf057600080fd5b50610d0b6004803603810190610d069190613dfb565b61235e565b005b348015610d1957600080fd5b50610d346004803603810190610d2f9190613d4e565b6123fd565b005b348015610d4257600080fd5b50610d4b6124ed565b604051610d589190614368565b60405180910390f35b348015610d6d57600080fd5b50610d886004803603810190610d839190613dfb565b6124f3565b005b348015610d9657600080fd5b50610db16004803603810190610dac9190613c61565b612592565b005b348015610dbf57600080fd5b50610dda6004803603810190610dd59190613d4e565b612754565b005b348015610de857600080fd5b50610df1612844565b604051610dfe91906141f0565b60405180910390f35b606060038054610e1690614674565b80601f0160208091040260200160405190810160405280929190818152602001828054610e4290614674565b8015610e8f5780601f10610e6457610100808354040283529160200191610e8f565b820191906000526020600020905b815481529060010190602001808311610e7257829003601f168201915b5050505050905090565b6000610ead610ea66128b5565b84846128bd565b6001905092915050565b610ebf6128b5565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4390614308565b60405180910390fd5b826010819055508160118190555080601281905550610f8c601254610f7e60115460105461285790919063ffffffff16565b61285790919063ffffffff16565b601781905550505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601954905090565b610ff56128b5565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611082576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107990614308565b60405180910390fd5b82600d8190555081600e8190555080600f819055506110c2600f546110b4600e54600d5461285790919063ffffffff16565b61285790919063ffffffff16565b601681905550505050565b6110d56128b5565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611162576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115990614308565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006111ca848484612a88565b5061128c846111d76128b5565b61128785604051806060016040528060288152602001614a6860289139600860008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061123d6128b5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461306d9092919063ffffffff16565b6128bd565b600190509392505050565b61129f6128b5565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461132c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132390614308565b60405180910390fd5b80601e60176101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60006113ac61139b7f0000000000000000000000000000000000000000000000000000000000000000611c91565b6019546130d190919063ffffffff16565b905090565b6113b96128b5565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611446576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143d90614308565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600560009054906101000a900460ff16905090565b600061154a6114ae6128b5565b8461154585600860006114bf6128b5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461285790919063ffffffff16565b6128bd565b6001905092915050565b61155c6128b5565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e090614308565b60405180910390fd5b80601c8190555050565b600c6020528060005260406000206000915054906101000a900460ff1681565b601e60159054906101000a900460ff1681565b61162e6128b5565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b290614308565b60405180910390fd5b80600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60096020528060005260406000206000915054906101000a900460ff1681565b600042905090565b60135481565b60006117376128b5565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117bb90614308565b60405180910390fd5b60008290508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561180f57600080fd5b505afa158015611823573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118479190613c8e565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156118a957600080fd5b505afa1580156118bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e19190613c8e565b6040518363ffffffff1660e01b81526004016118fe929190614166565b60206040518083038186803b15801561191657600080fd5b505afa15801561192a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061194e9190613c8e565b9150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b0f578073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156119cb57600080fd5b505afa1580156119df573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a039190613c8e565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611a6557600080fd5b505afa158015611a79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a9d9190613c8e565b6040518363ffffffff1660e01b8152600401611aba929190614166565b602060405180830381600087803b158015611ad457600080fd5b505af1158015611ae8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b0c9190613c8e565b91505b81601e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600a6000601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c6000601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050919050565b60145481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b601a5481565b601b5481565b60175481565b611cf46128b5565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7890614308565b60405180910390fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60105481565b600b6020528060005260406000206000915054906101000a900460ff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611e3a90614674565b80601f0160208091040260200160405190810160405280929190818152602001828054611e6690614674565b8015611eb35780601f10611e8857610100808354040283529160200191611eb3565b820191906000526020600020905b815481529060010190602001808311611e9657829003601f168201915b5050505050905090565b6000601c54905090565b60185481565b6000611f90611eda6128b5565b84611f8b85604051806060016040528060258152602001614a906025913960086000611f046128b5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461306d9092919063ffffffff16565b6128bd565b6001905092915050565b611fa26128b5565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461202f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202690614308565b60405180910390fd5b80601e60166101000a81548160ff02191690831515021790555050565b60155481565b600061206661205f6128b5565b8484612a88565b506001905092915050565b6120796128b5565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612106576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120fd90614308565b60405180910390fd5b82601381905550816014819055508060158190555061214660155461213860145460135461285790919063ffffffff16565b61285790919063ffffffff16565b601881905550505050565b600f5481565b61215f6128b5565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e390614308565b60405180910390fd5b80601e60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405161223591906141f0565b60405180910390a150565b600e5481565b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b600a6020528060005260406000206000915054906101000a900460ff1681565b60125481565b600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601e60169054906101000a900460ff1681565b600d5481565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6123666128b5565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ea90614308565b60405180910390fd5b80601a8190555050565b6124056128b5565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612492576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248990614308565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60165481565b6124fb6128b5565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612588576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257f90614308565b60405180910390fd5b80601b8190555050565b61259a6128b5565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612627576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261e90614308565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612697576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268e90614268565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61275c6128b5565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e090614308565b60405180910390fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601e60179054906101000a900460ff1681565b6000808284612866919061447d565b9050838110156128ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a2906142a8565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561292d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292490614348565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561299d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299490614288565b60405180910390fd5b80600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612a7b9190614368565b60405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612af9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612af090614328565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b6090614248565b60405180910390fd5b601e60149054906101000a900460ff1615612b9057612b8984848461311b565b9050613066565b600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612c345750600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c7f57601a54821115612c7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c75906142c8565b60405180910390fd5b5b6000612c8a30611c91565b90506000601c548210159050808015612cb05750601e60149054906101000a900460ff16155b8015612d065750600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612d1e5750601e60159054906101000a900460ff165b15612d4857601e60169054906101000a900460ff1615612d3e57601c5491505b612d47826132ee565b5b612dd1846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600760008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461306d9092919063ffffffff16565b600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612eb75750600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612ecb57612ec68787876134df565b612ecd565b845b9050601e60179054906101000a900460ff168015612f355750600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612f6457601b54612f5882612f4a89611c91565b61285790919063ffffffff16565b1115612f6357600080fd5b5b612fb681600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461285790919063ffffffff16565b600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516130569190614368565b60405180910390a3600193505050505b9392505050565b60008383111582906130b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130ac9190614226565b60405180910390fd5b50600083856130c4919061455e565b9050809150509392505050565b600061311383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061306d565b905092915050565b60006131a6826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461306d9092919063ffffffff16565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061323b82600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461285790919063ffffffff16565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516132db9190614368565b60405180910390a3600190509392505050565b6001601e60146101000a81548160ff0219169083151502179055506000613347600261333960185461332b6013548761370690919063ffffffff16565b61378190919063ffffffff16565b61378190919063ffffffff16565b9050600061335e82846130d190919063ffffffff16565b9050613369816137cb565b6000479050600061339a613389600260135461378190919063ffffffff16565b6018546130d190919063ffffffff16565b905060006133d860026133ca846133bc6013548861370690919063ffffffff16565b61378190919063ffffffff16565b61378190919063ffffffff16565b90506000613403836133f56015548761370690919063ffffffff16565b61378190919063ffffffff16565b9050600061342c8261341e85886130d190919063ffffffff16565b6130d190919063ffffffff16565b9050600081111561346457613463600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682613a56565b5b600082111561349a57613499600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613a56565b5b6000831180156134aa5750600087115b156134ba576134b98784613aa1565b5b505050505050506000601e60146101000a81548160ff02191690831515021790555050565b60008060009050600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156135675761356060646135526016548661370690919063ffffffff16565b61378190919063ffffffff16565b90506135e5565b600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156135e4576135e160646135d36017548661370690919063ffffffff16565b61378190919063ffffffff16565b90505b5b60008111156136e95761364081600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461285790919063ffffffff16565b600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516136e09190614368565b60405180910390a35b6136fc81846130d190919063ffffffff16565b9150509392505050565b600080831415613719576000905061377b565b600082846137279190614504565b905082848261373691906144d3565b14613776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161376d906142e8565b60405180910390fd5b809150505b92915050565b60006137c383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613b95565b905092915050565b6000600267ffffffffffffffff8111156137e8576137e7614762565b5b6040519080825280602002602001820160405280156138165781602001602082028036833780820191505090505b509050308160008151811061382e5761382d614733565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156138d057600080fd5b505afa1580156138e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139089190613c8e565b8160018151811061391c5761391b614733565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061398330601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846128bd565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016139e79594939291906143b3565b600060405180830381600087803b158015613a0157600080fd5b505af1158015613a15573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051613a4a929190614383565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613a9c573d6000803e3d6000fd5b505050565b613ace30601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846128bd565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613b1a611e02565b426040518863ffffffff1660e01b8152600401613b3c9695949392919061418f565b6060604051808303818588803b158015613b5557600080fd5b505af1158015613b69573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613b8e9190613e7b565b5050505050565b60008083118290613bdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bd39190614226565b60405180910390fd5b5060008385613beb91906144d3565b9050809150509392505050565b600081359050613c0781614a22565b92915050565b600081519050613c1c81614a22565b92915050565b600081359050613c3181614a39565b92915050565b600081359050613c4681614a50565b92915050565b600081519050613c5b81614a50565b92915050565b600060208284031215613c7757613c76614791565b5b6000613c8584828501613bf8565b91505092915050565b600060208284031215613ca457613ca3614791565b5b6000613cb284828501613c0d565b91505092915050565b60008060408385031215613cd257613cd1614791565b5b6000613ce085828601613bf8565b9250506020613cf185828601613bf8565b9150509250929050565b600080600060608486031215613d1457613d13614791565b5b6000613d2286828701613bf8565b9350506020613d3386828701613bf8565b9250506040613d4486828701613c37565b9150509250925092565b60008060408385031215613d6557613d64614791565b5b6000613d7385828601613bf8565b9250506020613d8485828601613c22565b9150509250929050565b60008060408385031215613da557613da4614791565b5b6000613db385828601613bf8565b9250506020613dc485828601613c37565b9150509250929050565b600060208284031215613de457613de3614791565b5b6000613df284828501613c22565b91505092915050565b600060208284031215613e1157613e10614791565b5b6000613e1f84828501613c37565b91505092915050565b600080600060608486031215613e4157613e40614791565b5b6000613e4f86828701613c37565b9350506020613e6086828701613c37565b9250506040613e7186828701613c37565b9150509250925092565b600080600060608486031215613e9457613e93614791565b5b6000613ea286828701613c4c565b9350506020613eb386828701613c4c565b9250506040613ec486828701613c4c565b9150509250925092565b6000613eda8383613ef5565b60208301905092915050565b613eef816145a4565b82525050565b613efe81614592565b82525050565b613f0d81614592565b82525050565b6000613f1e82614438565b613f28818561445b565b9350613f3383614428565b8060005b83811015613f64578151613f4b8882613ece565b9750613f568361444e565b925050600181019050613f37565b5085935050505092915050565b613f7a816145b6565b82525050565b613f89816145f9565b82525050565b613f988161460b565b82525050565b6000613fa982614443565b613fb3818561446c565b9350613fc3818560208601614641565b613fcc81614796565b840191505092915050565b6000613fe460238361446c565b9150613fef826147a7565b604082019050919050565b600061400760268361446c565b9150614012826147f6565b604082019050919050565b600061402a60228361446c565b915061403582614845565b604082019050919050565b600061404d601b8361446c565b915061405882614894565b602082019050919050565b600061407060288361446c565b915061407b826148bd565b604082019050919050565b600061409360218361446c565b915061409e8261490c565b604082019050919050565b60006140b660208361446c565b91506140c18261495b565b602082019050919050565b60006140d960258361446c565b91506140e482614984565b604082019050919050565b60006140fc60248361446c565b9150614107826149d3565b604082019050919050565b61411b816145e2565b82525050565b61412a816145ec565b82525050565b60006020820190506141456000830184613f04565b92915050565b60006020820190506141606000830184613ee6565b92915050565b600060408201905061417b6000830185613f04565b6141886020830184613f04565b9392505050565b600060c0820190506141a46000830189613f04565b6141b16020830188614112565b6141be6040830187613f8f565b6141cb6060830186613f8f565b6141d86080830185613f04565b6141e560a0830184614112565b979650505050505050565b60006020820190506142056000830184613f71565b92915050565b60006020820190506142206000830184613f80565b92915050565b600060208201905081810360008301526142408184613f9e565b905092915050565b6000602082019050818103600083015261426181613fd7565b9050919050565b6000602082019050818103600083015261428181613ffa565b9050919050565b600060208201905081810360008301526142a18161401d565b9050919050565b600060208201905081810360008301526142c181614040565b9050919050565b600060208201905081810360008301526142e181614063565b9050919050565b6000602082019050818103600083015261430181614086565b9050919050565b60006020820190508181036000830152614321816140a9565b9050919050565b60006020820190508181036000830152614341816140cc565b9050919050565b60006020820190508181036000830152614361816140ef565b9050919050565b600060208201905061437d6000830184614112565b92915050565b60006040820190506143986000830185614112565b81810360208301526143aa8184613f13565b90509392505050565b600060a0820190506143c86000830188614112565b6143d56020830187613f8f565b81810360408301526143e78186613f13565b90506143f66060830185613f04565b6144036080830184614112565b9695505050505050565b60006020820190506144226000830184614121565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000614488826145e2565b9150614493836145e2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156144c8576144c76146a6565b5b828201905092915050565b60006144de826145e2565b91506144e9836145e2565b9250826144f9576144f86146d5565b5b828204905092915050565b600061450f826145e2565b915061451a836145e2565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614553576145526146a6565b5b828202905092915050565b6000614569826145e2565b9150614574836145e2565b925082821015614587576145866146a6565b5b828203905092915050565b600061459d826145c2565b9050919050565b60006145af826145c2565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006146048261461d565b9050919050565b6000614616826145e2565b9050919050565b60006146288261462f565b9050919050565b600061463a826145c2565b9050919050565b60005b8381101561465f578082015181840152602081019050614644565b8381111561466e576000848401525b50505050565b6000600282049050600182168061468c57607f821691505b602082108114156146a05761469f614704565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b614a2b81614592565b8114614a3657600080fd5b50565b614a42816145b6565b8114614a4d57600080fd5b50565b614a59816145e2565b8114614a6457600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220a4ff32fe0e5f2badf9f5bf892ba31b688cd7d2ad48a6ad7a40f04189b0a92c3264736f6c63430008070033

Deployed Bytecode

0x6080604052600436106103855760003560e01c806388790a68116101d1578063c816841b11610102578063dd62ed3e116100a0578063f1d5f5171161006f578063f1d5f51714610d61578063f2fde38b14610d8a578063f84ba65d14610db3578063f872858a14610ddc5761038c565b8063dd62ed3e14610ca7578063ec28438a14610ce4578063ef422a1814610d0d578063f0cd1dac14610d365761038c565b8063cab03471116100dc578063cab0347114610bfb578063d158272d14610c26578063da00097d14610c51578063dc44b6a014610c7c5761038c565b8063c816841b14610b68578063c860795214610b93578063c867d60b14610bbe5761038c565b8063a5d69d1f1161016f578063c2d4640e11610149578063c2d4640e14610ac0578063c469b6dd14610ae9578063c49b9a8014610b14578063c5d2418914610b3d5761038c565b8063a5d69d1f14610a2f578063a83f53a714610a58578063a9059cbb14610a835761038c565b806395d89b41116101ab57806395d89b4114610971578063a073d37f1461099c578063a08e671f146109c7578063a457c2d7146109f25761038c565b806388790a68146108de5780638b42507f146109095780638da5cb5b146109465761038c565b806339509351116102b657806357a5802f116102545780637d1db4a5116102235780637d1db4a514610834578063807c2d9c1461085f57806382eefb431461088a578063844d591c146108b55761038c565b806357a5802f146107645780635881f3ef1461078f57806361a23c69146107cc57806370a08231146107f75761038c565b80634a74bb02116102905780634a74bb02146106a85780634cb80fd5146106d35780635342acb4146106fc578063557ed1ba146107395761038c565b806339509351146106055780633b97084a146106425780633ecad2711461066b5761038c565b80632198cf6c1161032357806327c8f835116102fd57806327c8f8351461055b5780632b112e49146105865780632c4b2334146105b1578063313ce567146105da5761038c565b80632198cf6c146104cc57806323b872dd146104f55780632563ae83146105325761038c565b80631245e3471161035f5780631245e347146104225780631694505e1461044d57806318160ddd146104785780631870517a146104a35761038c565b806306fdde0314610391578063095ea7b3146103bc5780630d5e5c87146103f95761038c565b3661038c57005b600080fd5b34801561039d57600080fd5b506103a6610e07565b6040516103b39190614226565b60405180910390f35b3480156103c857600080fd5b506103e360048036038101906103de9190613d8e565b610e99565b6040516103f091906141f0565b60405180910390f35b34801561040557600080fd5b50610420600480360381019061041b9190613e28565b610eb7565b005b34801561042e57600080fd5b50610437610f97565b604051610444919061414b565b60405180910390f35b34801561045957600080fd5b50610462610fbd565b60405161046f919061420b565b60405180910390f35b34801561048457600080fd5b5061048d610fe3565b60405161049a9190614368565b60405180910390f35b3480156104af57600080fd5b506104ca60048036038101906104c59190613e28565b610fed565b005b3480156104d857600080fd5b506104f360048036038101906104ee9190613d4e565b6110cd565b005b34801561050157600080fd5b5061051c60048036038101906105179190613cfb565b6111bd565b60405161052991906141f0565b60405180910390f35b34801561053e57600080fd5b5061055960048036038101906105549190613dce565b611297565b005b34801561056757600080fd5b50610570611349565b60405161057d9190614130565b60405180910390f35b34801561059257600080fd5b5061059b61136d565b6040516105a89190614368565b60405180910390f35b3480156105bd57600080fd5b506105d860048036038101906105d39190613c61565b6113b1565b005b3480156105e657600080fd5b506105ef61148a565b6040516105fc919061440d565b60405180910390f35b34801561061157600080fd5b5061062c60048036038101906106279190613d8e565b6114a1565b60405161063991906141f0565b60405180910390f35b34801561064e57600080fd5b5061066960048036038101906106649190613dfb565b611554565b005b34801561067757600080fd5b50610692600480360381019061068d9190613c61565b6115f3565b60405161069f91906141f0565b60405180910390f35b3480156106b457600080fd5b506106bd611613565b6040516106ca91906141f0565b60405180910390f35b3480156106df57600080fd5b506106fa60048036038101906106f59190613c61565b611626565b005b34801561070857600080fd5b50610723600480360381019061071e9190613c61565b6116ff565b60405161073091906141f0565b60405180910390f35b34801561074557600080fd5b5061074e61171f565b60405161075b9190614368565b60405180910390f35b34801561077057600080fd5b50610779611727565b6040516107869190614368565b60405180910390f35b34801561079b57600080fd5b506107b660048036038101906107b19190613c61565b61172d565b6040516107c39190614130565b60405180910390f35b3480156107d857600080fd5b506107e1611c8b565b6040516107ee9190614368565b60405180910390f35b34801561080357600080fd5b5061081e60048036038101906108199190613c61565b611c91565b60405161082b9190614368565b60405180910390f35b34801561084057600080fd5b50610849611cda565b6040516108569190614368565b60405180910390f35b34801561086b57600080fd5b50610874611ce0565b6040516108819190614368565b60405180910390f35b34801561089657600080fd5b5061089f611ce6565b6040516108ac9190614368565b60405180910390f35b3480156108c157600080fd5b506108dc60048036038101906108d79190613d4e565b611cec565b005b3480156108ea57600080fd5b506108f3611ddc565b6040516109009190614368565b60405180910390f35b34801561091557600080fd5b50610930600480360381019061092b9190613c61565b611de2565b60405161093d91906141f0565b60405180910390f35b34801561095257600080fd5b5061095b611e02565b6040516109689190614130565b60405180910390f35b34801561097d57600080fd5b50610986611e2b565b6040516109939190614226565b60405180910390f35b3480156109a857600080fd5b506109b1611ebd565b6040516109be9190614368565b60405180910390f35b3480156109d357600080fd5b506109dc611ec7565b6040516109e99190614368565b60405180910390f35b3480156109fe57600080fd5b50610a196004803603810190610a149190613d8e565b611ecd565b604051610a2691906141f0565b60405180910390f35b348015610a3b57600080fd5b50610a566004803603810190610a519190613dce565b611f9a565b005b348015610a6457600080fd5b50610a6d61204c565b604051610a7a9190614368565b60405180910390f35b348015610a8f57600080fd5b50610aaa6004803603810190610aa59190613d8e565b612052565b604051610ab791906141f0565b60405180910390f35b348015610acc57600080fd5b50610ae76004803603810190610ae29190613e28565b612071565b005b348015610af557600080fd5b50610afe612151565b604051610b0b9190614368565b60405180910390f35b348015610b2057600080fd5b50610b3b6004803603810190610b369190613dce565b612157565b005b348015610b4957600080fd5b50610b52612240565b604051610b5f9190614368565b60405180910390f35b348015610b7457600080fd5b50610b7d612246565b604051610b8a9190614130565b60405180910390f35b348015610b9f57600080fd5b50610ba861226c565b604051610bb59190614368565b60405180910390f35b348015610bca57600080fd5b50610be56004803603810190610be09190613c61565b612272565b604051610bf291906141f0565b60405180910390f35b348015610c0757600080fd5b50610c10612292565b604051610c1d9190614368565b60405180910390f35b348015610c3257600080fd5b50610c3b612298565b604051610c48919061414b565b60405180910390f35b348015610c5d57600080fd5b50610c666122be565b604051610c7391906141f0565b60405180910390f35b348015610c8857600080fd5b50610c916122d1565b604051610c9e9190614368565b60405180910390f35b348015610cb357600080fd5b50610cce6004803603810190610cc99190613cbb565b6122d7565b604051610cdb9190614368565b60405180910390f35b348015610cf057600080fd5b50610d0b6004803603810190610d069190613dfb565b61235e565b005b348015610d1957600080fd5b50610d346004803603810190610d2f9190613d4e565b6123fd565b005b348015610d4257600080fd5b50610d4b6124ed565b604051610d589190614368565b60405180910390f35b348015610d6d57600080fd5b50610d886004803603810190610d839190613dfb565b6124f3565b005b348015610d9657600080fd5b50610db16004803603810190610dac9190613c61565b612592565b005b348015610dbf57600080fd5b50610dda6004803603810190610dd59190613d4e565b612754565b005b348015610de857600080fd5b50610df1612844565b604051610dfe91906141f0565b60405180910390f35b606060038054610e1690614674565b80601f0160208091040260200160405190810160405280929190818152602001828054610e4290614674565b8015610e8f5780601f10610e6457610100808354040283529160200191610e8f565b820191906000526020600020905b815481529060010190602001808311610e7257829003601f168201915b5050505050905090565b6000610ead610ea66128b5565b84846128bd565b6001905092915050565b610ebf6128b5565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4390614308565b60405180910390fd5b826010819055508160118190555080601281905550610f8c601254610f7e60115460105461285790919063ffffffff16565b61285790919063ffffffff16565b601781905550505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601954905090565b610ff56128b5565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611082576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107990614308565b60405180910390fd5b82600d8190555081600e8190555080600f819055506110c2600f546110b4600e54600d5461285790919063ffffffff16565b61285790919063ffffffff16565b601681905550505050565b6110d56128b5565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611162576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115990614308565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006111ca848484612a88565b5061128c846111d76128b5565b61128785604051806060016040528060288152602001614a6860289139600860008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061123d6128b5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461306d9092919063ffffffff16565b6128bd565b600190509392505050565b61129f6128b5565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461132c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132390614308565b60405180910390fd5b80601e60176101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000dead81565b60006113ac61139b7f000000000000000000000000000000000000000000000000000000000000dead611c91565b6019546130d190919063ffffffff16565b905090565b6113b96128b5565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611446576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143d90614308565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600560009054906101000a900460ff16905090565b600061154a6114ae6128b5565b8461154585600860006114bf6128b5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461285790919063ffffffff16565b6128bd565b6001905092915050565b61155c6128b5565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e090614308565b60405180910390fd5b80601c8190555050565b600c6020528060005260406000206000915054906101000a900460ff1681565b601e60159054906101000a900460ff1681565b61162e6128b5565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b290614308565b60405180910390fd5b80600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60096020528060005260406000206000915054906101000a900460ff1681565b600042905090565b60135481565b60006117376128b5565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117bb90614308565b60405180910390fd5b60008290508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561180f57600080fd5b505afa158015611823573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118479190613c8e565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156118a957600080fd5b505afa1580156118bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e19190613c8e565b6040518363ffffffff1660e01b81526004016118fe929190614166565b60206040518083038186803b15801561191657600080fd5b505afa15801561192a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061194e9190613c8e565b9150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b0f578073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156119cb57600080fd5b505afa1580156119df573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a039190613c8e565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611a6557600080fd5b505afa158015611a79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a9d9190613c8e565b6040518363ffffffff1660e01b8152600401611aba929190614166565b602060405180830381600087803b158015611ad457600080fd5b505af1158015611ae8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b0c9190613c8e565b91505b81601e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600a6000601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c6000601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050919050565b60145481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b601a5481565b601b5481565b60175481565b611cf46128b5565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7890614308565b60405180910390fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60105481565b600b6020528060005260406000206000915054906101000a900460ff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611e3a90614674565b80601f0160208091040260200160405190810160405280929190818152602001828054611e6690614674565b8015611eb35780601f10611e8857610100808354040283529160200191611eb3565b820191906000526020600020905b815481529060010190602001808311611e9657829003601f168201915b5050505050905090565b6000601c54905090565b60185481565b6000611f90611eda6128b5565b84611f8b85604051806060016040528060258152602001614a906025913960086000611f046128b5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461306d9092919063ffffffff16565b6128bd565b6001905092915050565b611fa26128b5565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461202f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202690614308565b60405180910390fd5b80601e60166101000a81548160ff02191690831515021790555050565b60155481565b600061206661205f6128b5565b8484612a88565b506001905092915050565b6120796128b5565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612106576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120fd90614308565b60405180910390fd5b82601381905550816014819055508060158190555061214660155461213860145460135461285790919063ffffffff16565b61285790919063ffffffff16565b601881905550505050565b600f5481565b61215f6128b5565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e390614308565b60405180910390fd5b80601e60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405161223591906141f0565b60405180910390a150565b600e5481565b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b600a6020528060005260406000206000915054906101000a900460ff1681565b60125481565b600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601e60169054906101000a900460ff1681565b600d5481565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6123666128b5565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ea90614308565b60405180910390fd5b80601a8190555050565b6124056128b5565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612492576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248990614308565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60165481565b6124fb6128b5565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612588576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257f90614308565b60405180910390fd5b80601b8190555050565b61259a6128b5565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612627576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261e90614308565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612697576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268e90614268565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61275c6128b5565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e090614308565b60405180910390fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601e60179054906101000a900460ff1681565b6000808284612866919061447d565b9050838110156128ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a2906142a8565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561292d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292490614348565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561299d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299490614288565b60405180910390fd5b80600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612a7b9190614368565b60405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612af9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612af090614328565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b6090614248565b60405180910390fd5b601e60149054906101000a900460ff1615612b9057612b8984848461311b565b9050613066565b600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612c345750600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c7f57601a54821115612c7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c75906142c8565b60405180910390fd5b5b6000612c8a30611c91565b90506000601c548210159050808015612cb05750601e60149054906101000a900460ff16155b8015612d065750600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612d1e5750601e60159054906101000a900460ff165b15612d4857601e60169054906101000a900460ff1615612d3e57601c5491505b612d47826132ee565b5b612dd1846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600760008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461306d9092919063ffffffff16565b600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612eb75750600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612ecb57612ec68787876134df565b612ecd565b845b9050601e60179054906101000a900460ff168015612f355750600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612f6457601b54612f5882612f4a89611c91565b61285790919063ffffffff16565b1115612f6357600080fd5b5b612fb681600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461285790919063ffffffff16565b600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516130569190614368565b60405180910390a3600193505050505b9392505050565b60008383111582906130b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130ac9190614226565b60405180910390fd5b50600083856130c4919061455e565b9050809150509392505050565b600061311383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061306d565b905092915050565b60006131a6826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461306d9092919063ffffffff16565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061323b82600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461285790919063ffffffff16565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516132db9190614368565b60405180910390a3600190509392505050565b6001601e60146101000a81548160ff0219169083151502179055506000613347600261333960185461332b6013548761370690919063ffffffff16565b61378190919063ffffffff16565b61378190919063ffffffff16565b9050600061335e82846130d190919063ffffffff16565b9050613369816137cb565b6000479050600061339a613389600260135461378190919063ffffffff16565b6018546130d190919063ffffffff16565b905060006133d860026133ca846133bc6013548861370690919063ffffffff16565b61378190919063ffffffff16565b61378190919063ffffffff16565b90506000613403836133f56015548761370690919063ffffffff16565b61378190919063ffffffff16565b9050600061342c8261341e85886130d190919063ffffffff16565b6130d190919063ffffffff16565b9050600081111561346457613463600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682613a56565b5b600082111561349a57613499600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613a56565b5b6000831180156134aa5750600087115b156134ba576134b98784613aa1565b5b505050505050506000601e60146101000a81548160ff02191690831515021790555050565b60008060009050600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156135675761356060646135526016548661370690919063ffffffff16565b61378190919063ffffffff16565b90506135e5565b600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156135e4576135e160646135d36017548661370690919063ffffffff16565b61378190919063ffffffff16565b90505b5b60008111156136e95761364081600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461285790919063ffffffff16565b600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516136e09190614368565b60405180910390a35b6136fc81846130d190919063ffffffff16565b9150509392505050565b600080831415613719576000905061377b565b600082846137279190614504565b905082848261373691906144d3565b14613776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161376d906142e8565b60405180910390fd5b809150505b92915050565b60006137c383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613b95565b905092915050565b6000600267ffffffffffffffff8111156137e8576137e7614762565b5b6040519080825280602002602001820160405280156138165781602001602082028036833780820191505090505b509050308160008151811061382e5761382d614733565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156138d057600080fd5b505afa1580156138e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139089190613c8e565b8160018151811061391c5761391b614733565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061398330601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846128bd565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016139e79594939291906143b3565b600060405180830381600087803b158015613a0157600080fd5b505af1158015613a15573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051613a4a929190614383565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613a9c573d6000803e3d6000fd5b505050565b613ace30601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846128bd565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613b1a611e02565b426040518863ffffffff1660e01b8152600401613b3c9695949392919061418f565b6060604051808303818588803b158015613b5557600080fd5b505af1158015613b69573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613b8e9190613e7b565b5050505050565b60008083118290613bdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bd39190614226565b60405180910390fd5b5060008385613beb91906144d3565b9050809150509392505050565b600081359050613c0781614a22565b92915050565b600081519050613c1c81614a22565b92915050565b600081359050613c3181614a39565b92915050565b600081359050613c4681614a50565b92915050565b600081519050613c5b81614a50565b92915050565b600060208284031215613c7757613c76614791565b5b6000613c8584828501613bf8565b91505092915050565b600060208284031215613ca457613ca3614791565b5b6000613cb284828501613c0d565b91505092915050565b60008060408385031215613cd257613cd1614791565b5b6000613ce085828601613bf8565b9250506020613cf185828601613bf8565b9150509250929050565b600080600060608486031215613d1457613d13614791565b5b6000613d2286828701613bf8565b9350506020613d3386828701613bf8565b9250506040613d4486828701613c37565b9150509250925092565b60008060408385031215613d6557613d64614791565b5b6000613d7385828601613bf8565b9250506020613d8485828601613c22565b9150509250929050565b60008060408385031215613da557613da4614791565b5b6000613db385828601613bf8565b9250506020613dc485828601613c37565b9150509250929050565b600060208284031215613de457613de3614791565b5b6000613df284828501613c22565b91505092915050565b600060208284031215613e1157613e10614791565b5b6000613e1f84828501613c37565b91505092915050565b600080600060608486031215613e4157613e40614791565b5b6000613e4f86828701613c37565b9350506020613e6086828701613c37565b9250506040613e7186828701613c37565b9150509250925092565b600080600060608486031215613e9457613e93614791565b5b6000613ea286828701613c4c565b9350506020613eb386828701613c4c565b9250506040613ec486828701613c4c565b9150509250925092565b6000613eda8383613ef5565b60208301905092915050565b613eef816145a4565b82525050565b613efe81614592565b82525050565b613f0d81614592565b82525050565b6000613f1e82614438565b613f28818561445b565b9350613f3383614428565b8060005b83811015613f64578151613f4b8882613ece565b9750613f568361444e565b925050600181019050613f37565b5085935050505092915050565b613f7a816145b6565b82525050565b613f89816145f9565b82525050565b613f988161460b565b82525050565b6000613fa982614443565b613fb3818561446c565b9350613fc3818560208601614641565b613fcc81614796565b840191505092915050565b6000613fe460238361446c565b9150613fef826147a7565b604082019050919050565b600061400760268361446c565b9150614012826147f6565b604082019050919050565b600061402a60228361446c565b915061403582614845565b604082019050919050565b600061404d601b8361446c565b915061405882614894565b602082019050919050565b600061407060288361446c565b915061407b826148bd565b604082019050919050565b600061409360218361446c565b915061409e8261490c565b604082019050919050565b60006140b660208361446c565b91506140c18261495b565b602082019050919050565b60006140d960258361446c565b91506140e482614984565b604082019050919050565b60006140fc60248361446c565b9150614107826149d3565b604082019050919050565b61411b816145e2565b82525050565b61412a816145ec565b82525050565b60006020820190506141456000830184613f04565b92915050565b60006020820190506141606000830184613ee6565b92915050565b600060408201905061417b6000830185613f04565b6141886020830184613f04565b9392505050565b600060c0820190506141a46000830189613f04565b6141b16020830188614112565b6141be6040830187613f8f565b6141cb6060830186613f8f565b6141d86080830185613f04565b6141e560a0830184614112565b979650505050505050565b60006020820190506142056000830184613f71565b92915050565b60006020820190506142206000830184613f80565b92915050565b600060208201905081810360008301526142408184613f9e565b905092915050565b6000602082019050818103600083015261426181613fd7565b9050919050565b6000602082019050818103600083015261428181613ffa565b9050919050565b600060208201905081810360008301526142a18161401d565b9050919050565b600060208201905081810360008301526142c181614040565b9050919050565b600060208201905081810360008301526142e181614063565b9050919050565b6000602082019050818103600083015261430181614086565b9050919050565b60006020820190508181036000830152614321816140a9565b9050919050565b60006020820190508181036000830152614341816140cc565b9050919050565b60006020820190508181036000830152614361816140ef565b9050919050565b600060208201905061437d6000830184614112565b92915050565b60006040820190506143986000830185614112565b81810360208301526143aa8184613f13565b90509392505050565b600060a0820190506143c86000830188614112565b6143d56020830187613f8f565b81810360408301526143e78186613f13565b90506143f66060830185613f04565b6144036080830184614112565b9695505050505050565b60006020820190506144226000830184614121565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000614488826145e2565b9150614493836145e2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156144c8576144c76146a6565b5b828201905092915050565b60006144de826145e2565b91506144e9836145e2565b9250826144f9576144f86146d5565b5b828204905092915050565b600061450f826145e2565b915061451a836145e2565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614553576145526146a6565b5b828202905092915050565b6000614569826145e2565b9150614574836145e2565b925082821015614587576145866146a6565b5b828203905092915050565b600061459d826145c2565b9050919050565b60006145af826145c2565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006146048261461d565b9050919050565b6000614616826145e2565b9050919050565b60006146288261462f565b9050919050565b600061463a826145c2565b9050919050565b60005b8381101561465f578082015181840152602081019050614644565b8381111561466e576000848401525b50505050565b6000600282049050600182168061468c57607f821691505b602082108114156146a05761469f614704565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b614a2b81614592565b8114614a3657600080fd5b50565b614a42816145b6565b8114614a4d57600080fd5b50565b614a59816145e2565b8114614a6457600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220a4ff32fe0e5f2badf9f5bf892ba31b688cd7d2ad48a6ad7a40f04189b0a92c3264736f6c63430008070033

Deployed Bytecode Sourcemap

14332:14901:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18100:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19394:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20668:340;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14685:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16017:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18377:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20327:333;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21630:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23973:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21509:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14786:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22615:128;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22162:129;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18286:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18763:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21883:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15178:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16132:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22015:139;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15007:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6401:90;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15485:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22889:807;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15526:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18485:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15811:55;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15878;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15649:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19908:129;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15359:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15123:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5918:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18191:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19266:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15694:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18989:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22478:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15567:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23798:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21020:358;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15316:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22299:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15274:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16065:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15402:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15064:52;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15445:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14579:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16179:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15232:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18612:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21390:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20184:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15606:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21773:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6145:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20045:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16231:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18100:83;18137:13;18170:5;18163:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18100:83;:::o;19394:161::-;19469:4;19486:39;19495:12;:10;:12::i;:::-;19509:7;19518:6;19486:8;:39::i;:::-;19543:4;19536:11;;19394:161;;;;:::o;20668:340::-;6062:12;:10;:12::i;:::-;6052:22;;:6;;;;;;;;;;:22;;;6044:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20811:15:::1;20791:17;:35;;;;20857:15;20837:17;:35;;;;20898:10;20883:12;:25;;;;20942:58;20987:12;;20942:40;20964:17;;20942;;:21;;:40;;;;:::i;:::-;:44;;:58;;;;:::i;:::-;20921:18;:79;;;;20668:340:::0;;;:::o;14685:94::-;;;;;;;;;;;;;:::o;16017:41::-;;;;;;;;;;;;;:::o;18377:100::-;18430:7;18457:12;;18450:19;;18377:100;:::o;20327:333::-;6062:12;:10;:12::i;:::-;6052:22;;:6;;;;;;;;;;:22;;;6044:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20469:15:::1;20450:16;:34;;;;20514:15;20495:16;:34;;;;20554:10;20540:11;:24;;;;20597:55;20640:11;;20597:38;20618:16;;20597;;:20;;:38;;;;:::i;:::-;:42;;:55;;;;:::i;:::-;20577:17;:75;;;;20327:333:::0;;;:::o;21630:135::-;6062:12;:10;:12::i;:::-;6052:22;;:6;;;;;;;;;;:22;;;6044:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21751:6:::1;21721:19;:27;21741:6;21721:27;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;21630:135:::0;;:::o;23973:313::-;24071:4;24088:36;24098:6;24106:9;24117:6;24088:9;:36::i;:::-;;24135:121;24144:6;24152:12;:10;:12::i;:::-;24166:89;24204:6;24166:89;;;;;;;;;;;;;;;;;:11;:19;24178:6;24166:19;;;;;;;;;;;;;;;:33;24186:12;:10;:12::i;:::-;24166:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;24135:8;:121::i;:::-;24274:4;24267:11;;23973:313;;;;;:::o;21509:113::-;6062:12;:10;:12::i;:::-;6052:22;;:6;;;;;;;;;;:22;;;6044:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21606:8:::1;21587:16;;:27;;;;;;;;;;;;;;;;;;21509:113:::0;:::o;14786:81::-;;;:::o;22615:128::-;22668:7;22695:40;22712:22;22722:11;22712:9;:22::i;:::-;22695:12;;:16;;:40;;;;:::i;:::-;22688:47;;22615:128;:::o;22162:129::-;6062:12;:10;:12::i;:::-;6052:22;;:6;;;;;;;;;;:22;;;6044:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22272:10:::1;22244:17;;:39;;;;;;;;;;;;;;;;;;22162:129:::0;:::o;18286:83::-;18327:5;18352:9;;;;;;;;;;;18345:16;;18286:83;:::o;18763:218::-;18851:4;18868:83;18877:12;:10;:12::i;:::-;18891:7;18900:50;18939:10;18900:11;:25;18912:12;:10;:12::i;:::-;18900:25;;;;;;;;;;;;;;;:34;18926:7;18900:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;18868:8;:83::i;:::-;18969:4;18962:11;;18763:218;;;;:::o;21883:124::-;6062:12;:10;:12::i;:::-;6052:22;;:6;;;;;;;;;;:22;;;6044:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21991:8:::1;21965:23;:34;;;;21883:124:::0;:::o;15178:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;16132:40::-;;;;;;;;;;;;;:::o;22015:139::-;6062:12;:10;:12::i;:::-;6052:22;;:6;;;;;;;;;;:22;;;6044:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22135:10:::1;22102:22;;:44;;;;;;;;;;;;;;;;;;22015:139:::0;:::o;15007:50::-;;;;;;;;;;;;;;;;;;;;;;:::o;6401:90::-;6441:7;6468:15;6461:22;;6401:90;:::o;15485:34::-;;;;:::o;22889:807::-;22969:22;6062:12;:10;:12::i;:::-;6052:22;;:6;;;;;;;;;;:22;;;6044:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23006:35:::1;23063:16;23006:74;;23129:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23111:53;;;23173:4;23180:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23111:93;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23094:110;;23246:1;23220:28;;:14;:28;;;23217:225;;;23334:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23316:74;;;23399:4;23406:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23316:114;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23299:131;;23217:225;23468:14;23454:11;;:28;;;;;;;;;;;;;;;;;;23534:16;23516:15;;:34;;;;;;;;;;;;;;;;;;23632:4;23588:19;:41;23616:11;;;;;;;;;;;23588:41;;;;;;;;;;;;;;;;:48;;;;;;;;;;;;;;;;;;23684:4;23647:12;:34;23668:11;;;;;;;;;;;23647:34;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;22993:703;22889:807:::0;;;:::o;15526:34::-;;;;:::o;18485:119::-;18551:7;18578:9;:18;18588:7;18578:18;;;;;;;;;;;;;;;;18571:25;;18485:119;;;:::o;15811:55::-;;;;:::o;15878:::-;;;;:::o;15649:38::-;;;;:::o;19908:129::-;6062:12;:10;:12::i;:::-;6052:22;;:6;;;;;;;;;;:22;;;6044:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20021:8:::1;19997:12;:21;20010:7;19997:21;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;19908:129:::0;;:::o;15359:36::-;;;;:::o;15123:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;5918:79::-;5956:7;5983:6;;;;;;;;;;;5976:13;;5918:79;:::o;18191:87::-;18230:13;18263:7;18256:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18191:87;:::o;19266:120::-;19328:7;19355:23;;19348:30;;19266:120;:::o;15694:44::-;;;;:::o;18989:269::-;19082:4;19099:129;19108:12;:10;:12::i;:::-;19122:7;19131:96;19170:15;19131:96;;;;;;;;;;;;;;;;;:11;:25;19143:12;:10;:12::i;:::-;19131:25;;;;;;;;;;;;;;;:34;19157:7;19131:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;19099:8;:129::i;:::-;19246:4;19239:11;;18989:269;;;;:::o;22478:125::-;6062:12;:10;:12::i;:::-;6052:22;;:6;;;;;;;;;;:22;;;6044:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22587:8:::1;22559:25;;:36;;;;;;;;;;;;;;;;;;22478:125:::0;:::o;15567:30::-;;;;:::o;23798:167::-;23876:4;23893:42;23903:12;:10;:12::i;:::-;23917:9;23928:6;23893:9;:42::i;:::-;;23953:4;23946:11;;23798:167;;;;:::o;21020:358::-;6062:12;:10;:12::i;:::-;6052:22;;:6;;;;;;;;;;:22;;;6044:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21179:17:::1;21161:15;:35;;;;21225:17;21207:15;:35;;;;21266:12;21253:10;:25;;;;21318:52;21359:10;;21318:36;21338:15;;21318;;:19;;:36;;;;:::i;:::-;:40;;:52;;;;:::i;:::-;21291:24;:79;;;;21020:358:::0;;;:::o;15316:30::-;;;;:::o;22299:171::-;6062:12;:10;:12::i;:::-;6052:22;;:6;;;;;;;;;;:22;;;6044:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22400:8:::1;22376:21;;:32;;;;;;;;;;;;;;;;;;22424:38;22453:8;22424:38;;;;;;:::i;:::-;;;;;;;;22299:171:::0;:::o;15274:35::-;;;;:::o;16065:26::-;;;;;;;;;;;;;:::o;15402:36::-;;;;:::o;15064:52::-;;;;;;;;;;;;;;;;;;;;;;:::o;15445:31::-;;;;:::o;14579:99::-;;;;;;;;;;;;;:::o;16179:45::-;;;;;;;;;;;;;:::o;15232:35::-;;;;:::o;18612:143::-;18693:7;18720:11;:18;18732:5;18720:18;;;;;;;;;;;;;;;:27;18739:7;18720:27;;;;;;;;;;;;;;;;18713:34;;18612:143;;;;:::o;21390:111::-;6062:12;:10;:12::i;:::-;6052:22;;:6;;;;;;;;;;:22;;;6044:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21482:11:::1;21467:12;:26;;;;21390:111:::0;:::o;20184:135::-;6062:12;:10;:12::i;:::-;6052:22;;:6;;;;;;;;;;:22;;;6044:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20303:8:::1;20274:17;:26;20292:7;20274:26;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;20184:135:::0;;:::o;15606:36::-;;;;:::o;21773:102::-;6062:12;:10;:12::i;:::-;6052:22;;:6;;;;;;;;;;:22;;;6044:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21859:8:::1;21845:10;:22;;;;21773:102:::0;:::o;6145:244::-;6062:12;:10;:12::i;:::-;6052:22;;:6;;;;;;;;;;:22;;;6044:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6254:1:::1;6234:22;;:8;:22;;;;6226:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;6344:8;6315:38;;6336:6;::::0;::::1;;;;;;;;6315:38;;;;;;;;;;;;6373:8;6364:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;6145:244:::0;:::o;20045:127::-;6062:12;:10;:12::i;:::-;6052:22;;:6;;;;;;;;;;:22;;;6044:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20158:6:::1;20132:15;:23;20148:6;20132:23;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;20045:127:::0;;:::o;16231:35::-;;;;;;;;;;;;;:::o;1296:181::-;1354:7;1374:9;1390:1;1386;:5;;;;:::i;:::-;1374:17;;1415:1;1410;:6;;1402:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;1468:1;1461:8;;;1296:181;;;;:::o;228:115::-;281:15;324:10;309:26;;228:115;:::o;19563:337::-;19673:1;19656:19;;:5;:19;;;;19648:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19754:1;19735:21;;:7;:21;;;;19727:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19838:6;19808:11;:18;19820:5;19808:18;;;;;;;;;;;;;;;:27;19827:7;19808:27;;;;;;;;;;;;;;;:36;;;;19876:7;19860:32;;19869:5;19860:32;;;19885:6;19860:32;;;;;;:::i;:::-;;;;;;;;19563:337;;;:::o;24294:1707::-;24381:4;24426:1;24408:20;;:6;:20;;;;24400:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;24510:1;24489:23;;:9;:23;;;;24481:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;24568:16;;;;;;;;;;;24565:1429;;;24618:41;24633:6;24641:9;24652:6;24618:14;:41::i;:::-;24611:48;;;;24565:1429;24715:15;:23;24731:6;24715:23;;;;;;;;;;;;;;;;;;;;;;;;;24714:24;:55;;;;;24743:15;:26;24759:9;24743:26;;;;;;;;;;;;;;;;;;;;;;;;;24742:27;24714:55;24711:170;;;24808:12;;24798:6;:22;;24790:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;24711:170;24909:28;24940:24;24958:4;24940:9;:24::i;:::-;24909:55;;24979:28;25034:23;;25010:20;:47;;24979:78;;25090:23;:44;;;;;25118:16;;;;;;;;;;;25117:17;25090:44;:69;;;;;25139:12;:20;25152:6;25139:20;;;;;;;;;;;;;;;;;;;;;;;;;25138:21;25090:69;:94;;;;;25163:21;;;;;;;;;;;25090:94;25086:305;;;25222:25;;;;;;;;;;;25219:97;;;25293:23;;25270:46;;25219:97;25335:36;25350:20;25335:14;:36::i;:::-;25086:305;25427:53;25449:6;25427:53;;;;;;;;;;;;;;;;;:9;:17;25437:6;25427:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;25407:9;:17;25417:6;25407:17;;;;;;;;;;;;;;;:73;;;;25497:19;25520:17;:25;25538:6;25520:25;;;;;;;;;;;;;;;;;;;;;;;;;:57;;;;25549:17;:28;25567:9;25549:28;;;;;;;;;;;;;;;;;;;;;;;;;25520:57;25519:148;;25633:34;25641:6;25649:9;25660:6;25633:7;:34::i;:::-;25519:148;;;25624:6;25519:148;25497:170;;25687:16;;;;;;;;;;;:51;;;;;25708:19;:30;25728:9;25708:30;;;;;;;;;;;;;;;;;;;;;;;;;25707:31;25687:51;25684:133;;;25806:10;;25765:37;25790:11;25765:20;25775:9;25765;:20::i;:::-;:24;;:37;;;;:::i;:::-;:51;;25757:60;;;;;;25684:133;25857:37;25882:11;25857:9;:20;25867:9;25857:20;;;;;;;;;;;;;;;;:24;;:37;;;;:::i;:::-;25834:9;:20;25844:9;25834:20;;;;;;;;;;;;;;;:60;;;;25933:9;25916:40;;25925:6;25916:40;;;25944:11;25916:40;;;;;;:::i;:::-;;;;;;;;25978:4;25971:11;;;;;24294:1707;;;;;;:::o;1629:192::-;1715:7;1748:1;1743;:6;;1751:12;1735:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1775:9;1791:1;1787;:5;;;;:::i;:::-;1775:17;;1812:1;1805:8;;;1629:192;;;;;:::o;1485:136::-;1543:7;1570:43;1574:1;1577;1570:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1563:50;;1485:136;;;;:::o;26009:330::-;26102:4;26139:53;26161:6;26139:53;;;;;;;;;;;;;;;;;:9;:17;26149:6;26139:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;26119:9;:17;26129:6;26119:17;;;;;;;;;;;;;;;:73;;;;26226:32;26251:6;26226:9;:20;26236:9;26226:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;26203:9;:20;26213:9;26203:20;;;;;;;;;;;;;;;:55;;;;26291:9;26274:35;;26283:6;26274:35;;;26302:6;26274:35;;;;;;:::i;:::-;;;;;;;;26327:4;26320:11;;26009:330;;;;;:::o;26347:1048::-;16708:4;16689:16;;:23;;;;;;;;;;;;;;;;;;26429:19:::1;26451:65;26514:1;26451:58;26484:24;;26451:28;26463:15;;26451:7;:11;;:28;;;;:::i;:::-;:32;;:58;;;;:::i;:::-;:62;;:65;;;;:::i;:::-;26429:87;;26527:21;26551:24;26563:11;26551:7;:11;;:24;;;;:::i;:::-;26527:48;;26588:31;26605:13;26588:16;:31::i;:::-;26630:22;26655:21;26630:46;;26689:19;26711:52;26740:22;26760:1;26740:15;;:19;;:22;;;;:::i;:::-;26711:24;;:28;;:52;;;;:::i;:::-;26689:74;;26784:26;26813:59;26870:1;26813:52;26853:11;26813:35;26832:15;;26813:14;:18;;:35;;;;:::i;:::-;:39;;:52;;;;:::i;:::-;:56;;:59;;;;:::i;:::-;26784:88;;26883:21;26907:47;26942:11;26907:30;26926:10;;26907:14;:18;;:30;;;;:::i;:::-;:34;;:47;;;;:::i;:::-;26883:71;;26965:26;26994:57;27037:13;26994:38;27013:18;26994:14;:18;;:38;;;;:::i;:::-;:42;;:57;;;;:::i;:::-;26965:86;;27088:1;27067:18;:22;27064:104;;;27104:64;27125:22;;;;;;;;;;;27149:18;27104:20;:64::i;:::-;27064:104;27200:1;27184:13;:17;27181:89;;;27216:54;27237:17;;;;;;;;;;;27256:13;27216:20;:54::i;:::-;27181:89;27307:1;27286:18;:22;:41;;;;;27326:1;27312:11;:15;27286:41;27283:104;;;27342:45;27355:11;27368:18;27342:12;:45::i;:::-;27283:104;26408:987;;;;;;;16754:5:::0;16735:16;;:24;;;;;;;;;;;;;;;;;;26347:1048;:::o;28602:622::-;28688:7;28718:17;28738:1;28718:21;;28763:12;:20;28776:6;28763:20;;;;;;;;;;;;;;;;;;;;;;;;;28760:223;;;28812:38;28846:3;28812:29;28823:17;;28812:6;:10;;:29;;;;:::i;:::-;:33;;:38;;;;:::i;:::-;28800:50;;28760:223;;;28880:12;:23;28893:9;28880:23;;;;;;;;;;;;;;;;;;;;;;;;;28877:106;;;28932:39;28967:3;28932:30;28943:18;;28932:6;:10;;:30;;;;:::i;:::-;:34;;:39;;;;:::i;:::-;28920:51;;28877:106;28760:223;29018:1;29006:9;:13;29003:173;;;29063:39;29092:9;29063;:24;29081:4;29063:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;29036:9;:24;29054:4;29036:24;;;;;;;;;;;;;;;:66;;;;29147:4;29122:42;;29131:6;29122:42;;;29154:9;29122:42;;;;;;:::i;:::-;;;;;;;;29003:173;29195:21;29206:9;29195:6;:10;;:21;;;;:::i;:::-;29188:28;;;28602:622;;;;;:::o;1829:250::-;1887:7;1916:1;1911;:6;1907:47;;;1941:1;1934:8;;;;1907:47;1966:9;1982:1;1978;:5;;;;:::i;:::-;1966:17;;2011:1;2006;2002;:5;;;;:::i;:::-;:10;1994:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;2070:1;2063:8;;;1829:250;;;;;:::o;2087:132::-;2145:7;2172:39;2176:1;2179;2172:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2165:46;;2087:132;;;;:::o;27407:666::-;27533:21;27571:1;27557:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27533:40;;27602:4;27584;27589:1;27584:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;27628:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27618:4;27623:1;27618:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;27663:62;27680:4;27695:15;;;;;;;;;;;27713:11;27663:8;:62::i;:::-;27764:15;;;;;;;;;;;:66;;;27845:11;27871:1;27915:4;27942;27978:15;27764:240;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28030:35;28047:11;28060:4;28030:35;;;;;;;:::i;:::-;;;;;;;;27462:611;27407:666;:::o;22751:126::-;22843:9;:18;;:26;22862:6;22843:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22751:126;;:::o;28081:513::-;28229:62;28246:4;28261:15;;;;;;;;;;;28279:11;28229:8;:62::i;:::-;28334:15;;;;;;;;;;;:31;;;28373:9;28406:4;28426:11;28452:1;28495;28538:7;:5;:7::i;:::-;28560:15;28334:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;28081:513;;:::o;2227:278::-;2313:7;2345:1;2341;:5;2348:12;2333:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2372:9;2388:1;2384;:5;;;;:::i;:::-;2372:17;;2496:1;2489:8;;;2227:278;;;;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;7:139;;;;:::o;152:143::-;209:5;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;152:143;;;;:::o;301:133::-;344:5;382:6;369:20;360:29;;398:30;422:5;398:30;:::i;:::-;301:133;;;;:::o;440:139::-;486:5;524:6;511:20;502:29;;540:33;567:5;540:33;:::i;:::-;440:139;;;;:::o;585:143::-;642:5;673:6;667:13;658:22;;689:33;716:5;689:33;:::i;:::-;585:143;;;;:::o;734:329::-;793:6;842:2;830:9;821:7;817:23;813:32;810:119;;;848:79;;:::i;:::-;810:119;968:1;993:53;1038:7;1029:6;1018:9;1014:22;993:53;:::i;:::-;983:63;;939:117;734:329;;;;:::o;1069:351::-;1139:6;1188:2;1176:9;1167:7;1163:23;1159:32;1156:119;;;1194:79;;:::i;:::-;1156:119;1314:1;1339:64;1395:7;1386:6;1375:9;1371:22;1339:64;:::i;:::-;1329:74;;1285:128;1069:351;;;;:::o;1426:474::-;1494:6;1502;1551:2;1539:9;1530:7;1526:23;1522:32;1519:119;;;1557:79;;:::i;:::-;1519:119;1677:1;1702:53;1747:7;1738:6;1727:9;1723:22;1702:53;:::i;:::-;1692:63;;1648:117;1804:2;1830:53;1875:7;1866:6;1855:9;1851:22;1830:53;:::i;:::-;1820:63;;1775:118;1426:474;;;;;:::o;1906:619::-;1983:6;1991;1999;2048:2;2036:9;2027:7;2023:23;2019:32;2016:119;;;2054:79;;:::i;:::-;2016:119;2174:1;2199:53;2244:7;2235:6;2224:9;2220:22;2199:53;:::i;:::-;2189:63;;2145:117;2301:2;2327:53;2372:7;2363:6;2352:9;2348:22;2327:53;:::i;:::-;2317:63;;2272:118;2429:2;2455:53;2500:7;2491:6;2480:9;2476:22;2455:53;:::i;:::-;2445:63;;2400:118;1906:619;;;;;:::o;2531:468::-;2596:6;2604;2653:2;2641:9;2632:7;2628:23;2624:32;2621:119;;;2659:79;;:::i;:::-;2621:119;2779:1;2804:53;2849:7;2840:6;2829:9;2825:22;2804:53;:::i;:::-;2794:63;;2750:117;2906:2;2932:50;2974:7;2965:6;2954:9;2950:22;2932:50;:::i;:::-;2922:60;;2877:115;2531:468;;;;;:::o;3005:474::-;3073:6;3081;3130:2;3118:9;3109:7;3105:23;3101:32;3098:119;;;3136:79;;:::i;:::-;3098:119;3256:1;3281:53;3326:7;3317:6;3306:9;3302:22;3281:53;:::i;:::-;3271:63;;3227:117;3383:2;3409:53;3454:7;3445:6;3434:9;3430:22;3409:53;:::i;:::-;3399:63;;3354:118;3005:474;;;;;:::o;3485:323::-;3541:6;3590:2;3578:9;3569:7;3565:23;3561:32;3558:119;;;3596:79;;:::i;:::-;3558:119;3716:1;3741:50;3783:7;3774:6;3763:9;3759:22;3741:50;:::i;:::-;3731:60;;3687:114;3485:323;;;;:::o;3814:329::-;3873:6;3922:2;3910:9;3901:7;3897:23;3893:32;3890:119;;;3928:79;;:::i;:::-;3890:119;4048:1;4073:53;4118:7;4109:6;4098:9;4094:22;4073:53;:::i;:::-;4063:63;;4019:117;3814:329;;;;:::o;4149:619::-;4226:6;4234;4242;4291:2;4279:9;4270:7;4266:23;4262:32;4259:119;;;4297:79;;:::i;:::-;4259:119;4417:1;4442:53;4487:7;4478:6;4467:9;4463:22;4442:53;:::i;:::-;4432:63;;4388:117;4544:2;4570:53;4615:7;4606:6;4595:9;4591:22;4570:53;:::i;:::-;4560:63;;4515:118;4672:2;4698:53;4743:7;4734:6;4723:9;4719:22;4698:53;:::i;:::-;4688:63;;4643:118;4149:619;;;;;:::o;4774:663::-;4862:6;4870;4878;4927:2;4915:9;4906:7;4902:23;4898:32;4895:119;;;4933:79;;:::i;:::-;4895:119;5053:1;5078:64;5134:7;5125:6;5114:9;5110:22;5078:64;:::i;:::-;5068:74;;5024:128;5191:2;5217:64;5273:7;5264:6;5253:9;5249:22;5217:64;:::i;:::-;5207:74;;5162:129;5330:2;5356:64;5412:7;5403:6;5392:9;5388:22;5356:64;:::i;:::-;5346:74;;5301:129;4774:663;;;;;:::o;5443:179::-;5512:10;5533:46;5575:3;5567:6;5533:46;:::i;:::-;5611:4;5606:3;5602:14;5588:28;;5443:179;;;;:::o;5628:142::-;5731:32;5757:5;5731:32;:::i;:::-;5726:3;5719:45;5628:142;;:::o;5776:108::-;5853:24;5871:5;5853:24;:::i;:::-;5848:3;5841:37;5776:108;;:::o;5890:118::-;5977:24;5995:5;5977:24;:::i;:::-;5972:3;5965:37;5890:118;;:::o;6044:732::-;6163:3;6192:54;6240:5;6192:54;:::i;:::-;6262:86;6341:6;6336:3;6262:86;:::i;:::-;6255:93;;6372:56;6422:5;6372:56;:::i;:::-;6451:7;6482:1;6467:284;6492:6;6489:1;6486:13;6467:284;;;6568:6;6562:13;6595:63;6654:3;6639:13;6595:63;:::i;:::-;6588:70;;6681:60;6734:6;6681:60;:::i;:::-;6671:70;;6527:224;6514:1;6511;6507:9;6502:14;;6467:284;;;6471:14;6767:3;6760:10;;6168:608;;;6044:732;;;;:::o;6782:109::-;6863:21;6878:5;6863:21;:::i;:::-;6858:3;6851:34;6782:109;;:::o;6897:185::-;7011:64;7069:5;7011:64;:::i;:::-;7006:3;6999:77;6897:185;;:::o;7088:147::-;7183:45;7222:5;7183:45;:::i;:::-;7178:3;7171:58;7088:147;;:::o;7241:364::-;7329:3;7357:39;7390:5;7357:39;:::i;:::-;7412:71;7476:6;7471:3;7412:71;:::i;:::-;7405:78;;7492:52;7537:6;7532:3;7525:4;7518:5;7514:16;7492:52;:::i;:::-;7569:29;7591:6;7569:29;:::i;:::-;7564:3;7560:39;7553:46;;7333:272;7241:364;;;;:::o;7611:366::-;7753:3;7774:67;7838:2;7833:3;7774:67;:::i;:::-;7767:74;;7850:93;7939:3;7850:93;:::i;:::-;7968:2;7963:3;7959:12;7952:19;;7611:366;;;:::o;7983:::-;8125:3;8146:67;8210:2;8205:3;8146:67;:::i;:::-;8139:74;;8222:93;8311:3;8222:93;:::i;:::-;8340:2;8335:3;8331:12;8324:19;;7983:366;;;:::o;8355:::-;8497:3;8518:67;8582:2;8577:3;8518:67;:::i;:::-;8511:74;;8594:93;8683:3;8594:93;:::i;:::-;8712:2;8707:3;8703:12;8696:19;;8355:366;;;:::o;8727:::-;8869:3;8890:67;8954:2;8949:3;8890:67;:::i;:::-;8883:74;;8966:93;9055:3;8966:93;:::i;:::-;9084:2;9079:3;9075:12;9068:19;;8727:366;;;:::o;9099:::-;9241:3;9262:67;9326:2;9321:3;9262:67;:::i;:::-;9255:74;;9338:93;9427:3;9338:93;:::i;:::-;9456:2;9451:3;9447:12;9440:19;;9099:366;;;:::o;9471:::-;9613:3;9634:67;9698:2;9693:3;9634:67;:::i;:::-;9627:74;;9710:93;9799:3;9710:93;:::i;:::-;9828:2;9823:3;9819:12;9812:19;;9471:366;;;:::o;9843:::-;9985:3;10006:67;10070:2;10065:3;10006:67;:::i;:::-;9999:74;;10082:93;10171:3;10082:93;:::i;:::-;10200:2;10195:3;10191:12;10184:19;;9843:366;;;:::o;10215:::-;10357:3;10378:67;10442:2;10437:3;10378:67;:::i;:::-;10371:74;;10454:93;10543:3;10454:93;:::i;:::-;10572:2;10567:3;10563:12;10556:19;;10215:366;;;:::o;10587:::-;10729:3;10750:67;10814:2;10809:3;10750:67;:::i;:::-;10743:74;;10826:93;10915:3;10826:93;:::i;:::-;10944:2;10939:3;10935:12;10928:19;;10587:366;;;:::o;10959:118::-;11046:24;11064:5;11046:24;:::i;:::-;11041:3;11034:37;10959:118;;:::o;11083:112::-;11166:22;11182:5;11166:22;:::i;:::-;11161:3;11154:35;11083:112;;:::o;11201:222::-;11294:4;11332:2;11321:9;11317:18;11309:26;;11345:71;11413:1;11402:9;11398:17;11389:6;11345:71;:::i;:::-;11201:222;;;;:::o;11429:254::-;11538:4;11576:2;11565:9;11561:18;11553:26;;11589:87;11673:1;11662:9;11658:17;11649:6;11589:87;:::i;:::-;11429:254;;;;:::o;11689:332::-;11810:4;11848:2;11837:9;11833:18;11825:26;;11861:71;11929:1;11918:9;11914:17;11905:6;11861:71;:::i;:::-;11942:72;12010:2;11999:9;11995:18;11986:6;11942:72;:::i;:::-;11689:332;;;;;:::o;12027:807::-;12276:4;12314:3;12303:9;12299:19;12291:27;;12328:71;12396:1;12385:9;12381:17;12372:6;12328:71;:::i;:::-;12409:72;12477:2;12466:9;12462:18;12453:6;12409:72;:::i;:::-;12491:80;12567:2;12556:9;12552:18;12543:6;12491:80;:::i;:::-;12581;12657:2;12646:9;12642:18;12633:6;12581:80;:::i;:::-;12671:73;12739:3;12728:9;12724:19;12715:6;12671:73;:::i;:::-;12754;12822:3;12811:9;12807:19;12798:6;12754:73;:::i;:::-;12027:807;;;;;;;;;:::o;12840:210::-;12927:4;12965:2;12954:9;12950:18;12942:26;;12978:65;13040:1;13029:9;13025:17;13016:6;12978:65;:::i;:::-;12840:210;;;;:::o;13056:276::-;13176:4;13214:2;13203:9;13199:18;13191:26;;13227:98;13322:1;13311:9;13307:17;13298:6;13227:98;:::i;:::-;13056:276;;;;:::o;13338:313::-;13451:4;13489:2;13478:9;13474:18;13466:26;;13538:9;13532:4;13528:20;13524:1;13513:9;13509:17;13502:47;13566:78;13639:4;13630:6;13566:78;:::i;:::-;13558:86;;13338:313;;;;:::o;13657:419::-;13823:4;13861:2;13850:9;13846:18;13838:26;;13910:9;13904:4;13900:20;13896:1;13885:9;13881:17;13874:47;13938:131;14064:4;13938:131;:::i;:::-;13930:139;;13657:419;;;:::o;14082:::-;14248:4;14286:2;14275:9;14271:18;14263:26;;14335:9;14329:4;14325:20;14321:1;14310:9;14306:17;14299:47;14363:131;14489:4;14363:131;:::i;:::-;14355:139;;14082:419;;;:::o;14507:::-;14673:4;14711:2;14700:9;14696:18;14688:26;;14760:9;14754:4;14750:20;14746:1;14735:9;14731:17;14724:47;14788:131;14914:4;14788:131;:::i;:::-;14780:139;;14507:419;;;:::o;14932:::-;15098:4;15136:2;15125:9;15121:18;15113:26;;15185:9;15179:4;15175:20;15171:1;15160:9;15156:17;15149:47;15213:131;15339:4;15213:131;:::i;:::-;15205:139;;14932:419;;;:::o;15357:::-;15523:4;15561:2;15550:9;15546:18;15538:26;;15610:9;15604:4;15600:20;15596:1;15585:9;15581:17;15574:47;15638:131;15764:4;15638:131;:::i;:::-;15630:139;;15357:419;;;:::o;15782:::-;15948:4;15986:2;15975:9;15971:18;15963:26;;16035:9;16029:4;16025:20;16021:1;16010:9;16006:17;15999:47;16063:131;16189:4;16063:131;:::i;:::-;16055:139;;15782:419;;;:::o;16207:::-;16373:4;16411:2;16400:9;16396:18;16388:26;;16460:9;16454:4;16450:20;16446:1;16435:9;16431:17;16424:47;16488:131;16614:4;16488:131;:::i;:::-;16480:139;;16207:419;;;:::o;16632:::-;16798:4;16836:2;16825:9;16821:18;16813:26;;16885:9;16879:4;16875:20;16871:1;16860:9;16856:17;16849:47;16913:131;17039:4;16913:131;:::i;:::-;16905:139;;16632:419;;;:::o;17057:::-;17223:4;17261:2;17250:9;17246:18;17238:26;;17310:9;17304:4;17300:20;17296:1;17285:9;17281:17;17274:47;17338:131;17464:4;17338:131;:::i;:::-;17330:139;;17057:419;;;:::o;17482:222::-;17575:4;17613:2;17602:9;17598:18;17590:26;;17626:71;17694:1;17683:9;17679:17;17670:6;17626:71;:::i;:::-;17482:222;;;;:::o;17710:483::-;17881:4;17919:2;17908:9;17904:18;17896:26;;17932:71;18000:1;17989:9;17985:17;17976:6;17932:71;:::i;:::-;18050:9;18044:4;18040:20;18035:2;18024:9;18020:18;18013:48;18078:108;18181:4;18172:6;18078:108;:::i;:::-;18070:116;;17710:483;;;;;:::o;18199:831::-;18462:4;18500:3;18489:9;18485:19;18477:27;;18514:71;18582:1;18571:9;18567:17;18558:6;18514:71;:::i;:::-;18595:80;18671:2;18660:9;18656:18;18647:6;18595:80;:::i;:::-;18722:9;18716:4;18712:20;18707:2;18696:9;18692:18;18685:48;18750:108;18853:4;18844:6;18750:108;:::i;:::-;18742:116;;18868:72;18936:2;18925:9;18921:18;18912:6;18868:72;:::i;:::-;18950:73;19018:3;19007:9;19003:19;18994:6;18950:73;:::i;:::-;18199:831;;;;;;;;:::o;19036:214::-;19125:4;19163:2;19152:9;19148:18;19140:26;;19176:67;19240:1;19229:9;19225:17;19216:6;19176:67;:::i;:::-;19036:214;;;;:::o;19337:132::-;19404:4;19427:3;19419:11;;19457:4;19452:3;19448:14;19440:22;;19337:132;;;:::o;19475:114::-;19542:6;19576:5;19570:12;19560:22;;19475:114;;;:::o;19595:99::-;19647:6;19681:5;19675:12;19665:22;;19595:99;;;:::o;19700:113::-;19770:4;19802;19797:3;19793:14;19785:22;;19700:113;;;:::o;19819:184::-;19918:11;19952:6;19947:3;19940:19;19992:4;19987:3;19983:14;19968:29;;19819:184;;;;:::o;20009:169::-;20093:11;20127:6;20122:3;20115:19;20167:4;20162:3;20158:14;20143:29;;20009:169;;;;:::o;20184:305::-;20224:3;20243:20;20261:1;20243:20;:::i;:::-;20238:25;;20277:20;20295:1;20277:20;:::i;:::-;20272:25;;20431:1;20363:66;20359:74;20356:1;20353:81;20350:107;;;20437:18;;:::i;:::-;20350:107;20481:1;20478;20474:9;20467:16;;20184:305;;;;:::o;20495:185::-;20535:1;20552:20;20570:1;20552:20;:::i;:::-;20547:25;;20586:20;20604:1;20586:20;:::i;:::-;20581:25;;20625:1;20615:35;;20630:18;;:::i;:::-;20615:35;20672:1;20669;20665:9;20660:14;;20495:185;;;;:::o;20686:348::-;20726:7;20749:20;20767:1;20749:20;:::i;:::-;20744:25;;20783:20;20801:1;20783:20;:::i;:::-;20778:25;;20971:1;20903:66;20899:74;20896:1;20893:81;20888:1;20881:9;20874:17;20870:105;20867:131;;;20978:18;;:::i;:::-;20867:131;21026:1;21023;21019:9;21008:20;;20686:348;;;;:::o;21040:191::-;21080:4;21100:20;21118:1;21100:20;:::i;:::-;21095:25;;21134:20;21152:1;21134:20;:::i;:::-;21129:25;;21173:1;21170;21167:8;21164:34;;;21178:18;;:::i;:::-;21164:34;21223:1;21220;21216:9;21208:17;;21040:191;;;;:::o;21237:96::-;21274:7;21303:24;21321:5;21303:24;:::i;:::-;21292:35;;21237:96;;;:::o;21339:104::-;21384:7;21413:24;21431:5;21413:24;:::i;:::-;21402:35;;21339:104;;;:::o;21449:90::-;21483:7;21526:5;21519:13;21512:21;21501:32;;21449:90;;;:::o;21545:126::-;21582:7;21622:42;21615:5;21611:54;21600:65;;21545:126;;;:::o;21677:77::-;21714:7;21743:5;21732:16;;21677:77;;;:::o;21760:86::-;21795:7;21835:4;21828:5;21824:16;21813:27;;21760:86;;;:::o;21852:153::-;21929:9;21962:37;21993:5;21962:37;:::i;:::-;21949:50;;21852:153;;;:::o;22011:121::-;22069:9;22102:24;22120:5;22102:24;:::i;:::-;22089:37;;22011:121;;;:::o;22138:126::-;22188:9;22221:37;22252:5;22221:37;:::i;:::-;22208:50;;22138:126;;;:::o;22270:113::-;22320:9;22353:24;22371:5;22353:24;:::i;:::-;22340:37;;22270:113;;;:::o;22389:307::-;22457:1;22467:113;22481:6;22478:1;22475:13;22467:113;;;22566:1;22561:3;22557:11;22551:18;22547:1;22542:3;22538:11;22531:39;22503:2;22500:1;22496:10;22491:15;;22467:113;;;22598:6;22595:1;22592:13;22589:101;;;22678:1;22669:6;22664:3;22660:16;22653:27;22589:101;22438:258;22389:307;;;:::o;22702:320::-;22746:6;22783:1;22777:4;22773:12;22763:22;;22830:1;22824:4;22820:12;22851:18;22841:81;;22907:4;22899:6;22895:17;22885:27;;22841:81;22969:2;22961:6;22958:14;22938:18;22935:38;22932:84;;;22988:18;;:::i;:::-;22932:84;22753:269;22702:320;;;:::o;23028:180::-;23076:77;23073:1;23066:88;23173:4;23170:1;23163:15;23197:4;23194:1;23187:15;23214:180;23262:77;23259:1;23252:88;23359:4;23356:1;23349:15;23383:4;23380:1;23373:15;23400:180;23448:77;23445:1;23438:88;23545:4;23542:1;23535:15;23569:4;23566:1;23559:15;23586:180;23634:77;23631:1;23624:88;23731:4;23728:1;23721:15;23755:4;23752:1;23745:15;23772:180;23820:77;23817:1;23810:88;23917:4;23914:1;23907:15;23941:4;23938:1;23931:15;24081:117;24190:1;24187;24180:12;24204:102;24245:6;24296:2;24292:7;24287:2;24280:5;24276:14;24272:28;24262:38;;24204:102;;;:::o;24312:222::-;24452:34;24448:1;24440:6;24436:14;24429:58;24521:5;24516:2;24508:6;24504:15;24497:30;24312:222;:::o;24540:225::-;24680:34;24676:1;24668:6;24664:14;24657:58;24749:8;24744:2;24736:6;24732:15;24725:33;24540:225;:::o;24771:221::-;24911:34;24907:1;24899:6;24895:14;24888:58;24980:4;24975:2;24967:6;24963:15;24956:29;24771:221;:::o;24998:177::-;25138:29;25134:1;25126:6;25122:14;25115:53;24998:177;:::o;25181:227::-;25321:34;25317:1;25309:6;25305:14;25298:58;25390:10;25385:2;25377:6;25373:15;25366:35;25181:227;:::o;25414:220::-;25554:34;25550:1;25542:6;25538:14;25531:58;25623:3;25618:2;25610:6;25606:15;25599:28;25414:220;:::o;25640:182::-;25780:34;25776:1;25768:6;25764:14;25757:58;25640:182;:::o;25828:224::-;25968:34;25964:1;25956:6;25952:14;25945:58;26037:7;26032:2;26024:6;26020:15;26013:32;25828:224;:::o;26058:223::-;26198:34;26194:1;26186:6;26182:14;26175:58;26267:6;26262:2;26254:6;26250:15;26243:31;26058:223;:::o;26287:122::-;26360:24;26378:5;26360:24;:::i;:::-;26353:5;26350:35;26340:63;;26399:1;26396;26389:12;26340:63;26287:122;:::o;26415:116::-;26485:21;26500:5;26485:21;:::i;:::-;26478:5;26475:32;26465:60;;26521:1;26518;26511:12;26465:60;26415:116;:::o;26537:122::-;26610:24;26628:5;26610:24;:::i;:::-;26603:5;26600:35;26590:63;;26649:1;26646;26639:12;26590:63;26537:122;:::o

Swarm Source

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