ETH Price: $2,550.13 (+4.63%)

Token

Dejitaru Cult (OcculticTsuka)
 

Overview

Max Total Supply

10,000,000,000 OcculticTsuka

Holders

65

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
9,624,376.36755745 OcculticTsuka

Value
$0.00
0x3edc235e3e238bceeaed5cfed56fbc2f0a509ea5
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:
DejitaruCult

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/**

*/

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


abstract contract Context {

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

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

interface IERC20 {

    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

library SafeMath {

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

library Address {

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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 DejitaruCult is Context, IERC20, Ownable {
    
    using SafeMath for uint256;
    using Address for address;
    
    string private _name ="Dejitaru Cult";
    string private _symbol = "OcculticTsuka";
    uint8 private _decimals = 9;

    address payable private taxWallet1 = payable(0xEc431eefAEcB7ED6C6fa446D7aBceF92CE2925fd);
    address payable private taxWallet2 = payable(0xEc431eefAEcB7ED6C6fa446D7aBceF92CE2925fd);
    address public immutable deadAddress = 0x000000000000000000000000000000000000dEaD;
    
    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    
    mapping (address => bool) public checkExcludedFromFees;
    mapping (address => bool) public checkWalletLimitExcept;
    mapping (address => bool) public checkTxLimitExcept;
    mapping (address => bool) public checkMarketPair;

    uint256 public _buyLiquidityFees = 0;
    uint256 public _buyMarketingFees = 2;
    uint256 public _buyDevelopmentFees = 0;
    uint256 public _sellLiquidityFees = 0;
    uint256 public _sellMarketingFees = 2;
    uint256 public _sellDevelopmentFees = 0;

    uint256 public _liquidityShares = 0;
    uint256 public _marketingShares = 4;
    uint256 public _developmentShares = 0;

    uint256 public _totalTaxIfBuying = 4;
    uint256 public _totalTaxIfSelling = 4;
    uint256 public _totalDistributionShares = 10;

    uint256 private _totalSupply = 10000 * 10**6 * 10**9;
    uint256 public _maxTxAmount = 5000 * 10**6 * 10**9;
    uint256 public _walletMax = 5000 * 10**6 * 10**9;
    uint256 private minimumTokensBeforeSwap = 10 * 10**9; 

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

        uniswapPair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        _allowances[address(this)][address(uniswapV2Router)] = _totalSupply;

        checkExcludedFromFees[owner()] = true;
        checkExcludedFromFees[address(this)] = true;
        
        _totalTaxIfBuying = _buyLiquidityFees.add(_buyMarketingFees).add(_buyDevelopmentFees);
        _totalTaxIfSelling = _sellLiquidityFees.add(_sellMarketingFees).add(_sellDevelopmentFees);
        _totalDistributionShares = _liquidityShares.add(_marketingShares).add(_developmentShares);

        checkWalletLimitExcept[owner()] = true;
        checkWalletLimitExcept[address(uniswapPair)] = true;
        checkWalletLimitExcept[address(this)] = true;
        
        checkTxLimitExcept[owner()] = true;
        checkTxLimitExcept[address(this)] = true;

        checkMarketPair[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 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 addMarketPair(address account) public onlyOwner {
        checkMarketPair[account] = true;
    }

    function setcheckTxLimitExcept(address holder, bool exempt) external onlyOwner {
        checkTxLimitExcept[holder] = exempt;
    }
    
    function setcheckExcludedFromFees(address account, bool newValue) public onlyOwner {
        checkExcludedFromFees[account] = newValue;
    }

    function setBuyFee(uint256 newLiquidityTax, uint256 newMarketingTax, uint256 newDevelopmentTax) external onlyOwner() {
        _buyLiquidityFees = newLiquidityTax;
        _buyMarketingFees = newMarketingTax;
        _buyDevelopmentFees = newDevelopmentTax;

        _totalTaxIfBuying = _buyLiquidityFees.add(_buyMarketingFees).add(_buyDevelopmentFees);
    }

    function setSellFee(uint256 newLiquidityTax, uint256 newMarketingTax, uint256 newDevelopmentTax) external onlyOwner() {
        _sellLiquidityFees = newLiquidityTax;
        _sellMarketingFees = newMarketingTax;
        _sellDevelopmentFees = newDevelopmentTax;

        _totalTaxIfSelling = _sellLiquidityFees.add(_sellMarketingFees).add(_sellDevelopmentFees);
    }
    
    function setDistributionSettings(uint256 newLiquidityShare, uint256 newMarketingShare, uint256 newDevelopmentShare) external onlyOwner() {
        _liquidityShares = newLiquidityShare;
        _marketingShares = newMarketingShare;
        _developmentShares = newDevelopmentShare;

        _totalDistributionShares = _liquidityShares.add(_marketingShares).add(_developmentShares);
    }
    
    function adjustMaxTxAmount(uint256 maxTxAmount) external onlyOwner() {
        require(maxTxAmount <= (10000 * 10**6 * 10**9), "Max wallet should be less or euqal to 4% totalSupply");
        _maxTxAmount = maxTxAmount;
    }

    function enableDisableWalletLimit(bool newValue) external onlyOwner {
       checkWalletLimit = newValue;
    }

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

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

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

    function settaxWallet1(address newAddress) external onlyOwner() {
        taxWallet1 = payable(newAddress);
    }

    function settaxWallet2(address newAddress) external onlyOwner() {
        taxWallet2 = 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

        checkWalletLimitExcept[address(uniswapPair)] = true;
        checkMarketPair[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(!checkTxLimitExcept[sender] && !checkTxLimitExcept[recipient]) {
                require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
            }            

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

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

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

            if(checkWalletLimit && !checkWalletLimitExcept[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(_liquidityShares).div(_totalDistributionShares).div(2);
        uint256 tokensForSwap = tAmount.sub(tokensForLP);

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

        uint256 totalETHFee = _totalDistributionShares.sub(_liquidityShares.div(2));
        
        uint256 amountETHLiquidity = amountReceived.mul(_liquidityShares).div(totalETHFee).div(2);
        uint256 amountETHDevelopment = amountReceived.mul(_developmentShares).div(totalETHFee);
        uint256 amountETHMarketing = amountReceived.sub(amountETHLiquidity).sub(amountETHDevelopment);

        if(amountETHMarketing > 0)
            transferToAddressETH(taxWallet1, amountETHMarketing);

        if(amountETHDevelopment > 0)
            transferToAddressETH(taxWallet2, amountETHDevelopment);

        if(amountETHLiquidity > 0 && tokensForLP > 0)
            addLiquidity(tokensForLP, amountETHLiquidity);
    }
    
    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(checkMarketPair[sender]) {
            feeAmount = amount.mul(_totalTaxIfBuying).div(100);
        }
        else if(checkMarketPair[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":"_buyDevelopmentFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyLiquidityFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyMarketingFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_developmentShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingShares","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":"_sellDevelopmentFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLiquidityFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellMarketingFees","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":"account","type":"address"}],"name":"addMarketPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"adjustMaxTxAmount","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"address","name":"","type":"address"}],"name":"checkExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"checkMarketPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"checkTxLimitExcept","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkWalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"checkWalletLimitExcept","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":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"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":"newDevelopmentTax","type":"uint256"}],"name":"setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityShare","type":"uint256"},{"internalType":"uint256","name":"newMarketingShare","type":"uint256"},{"internalType":"uint256","name":"newDevelopmentShare","type":"uint256"}],"name":"setDistributionSettings","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":"newDevelopmentTax","type":"uint256"}],"name":"setSellFee","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":"uint256","name":"newLimit","type":"uint256"}],"name":"setWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setcheckExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setcheckTxLimitExcept","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setcheckWalletLimitExcept","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"settaxWallet1","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"settaxWallet2","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":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"waiveOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526040518060400160405280600d81526020017f44656a69746172752043756c7400000000000000000000000000000000000000815250600290805190602001906200005192919062000b41565b506040518060400160405280600d81526020017f4f6363756c7469635473756b6100000000000000000000000000000000000000815250600390805190602001906200009f92919062000b41565b506009600460006101000a81548160ff021916908360ff16021790555073ec431eefaecb7ed6c6fa446d7abcef92ce2925fd600460016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073ec431eefaecb7ed6c6fa446d7abcef92ce2925fd600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead73ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1660601b8152506000600c556002600d556000600e556000600f556002601055600060115560006012556004601355600060145560046015556004601655600a601755678ac7230489e80000601855674563918244f40000601955674563918244f40000601a556402540be400601b556001601d60156101000a81548160ff0219169083151502179055506000601d60166101000a81548160ff0219169083151502179055506001601d60176101000a81548160ff0219169083151502179055503480156200026557600080fd5b5060006200027862000aad60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200037657600080fd5b505afa1580156200038b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003b1919062000c08565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200041457600080fd5b505afa15801562000429573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200044f919062000c08565b6040518363ffffffff1660e01b81526004016200046e92919062000c83565b602060405180830381600087803b1580156200048957600080fd5b505af11580156200049e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004c4919062000c08565b601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601854600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600860006200060062000ab560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620006e2600e54620006ce600d54600c5462000ade60201b620028d11790919060201c565b62000ade60201b620028d11790919060201c565b601581905550620007216011546200070d601054600f5462000ade60201b620028d11790919060201c565b62000ade60201b620028d11790919060201c565b601681905550620007606014546200074c60135460125462000ade60201b620028d11790919060201c565b62000ade60201b620028d11790919060201c565b6017819055506001600960006200077c62000ab560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160096000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a6000620008b562000ab560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060185460066000620009ef62000aad60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062000a3d62000aad60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60185460405162000a9e919062000cd2565b60405180910390a35062000e77565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080828462000aef919062000d00565b90508381101562000b37576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b2e9062000cb0565b60405180910390fd5b8091505092915050565b82805462000b4f9062000d9b565b90600052602060002090601f01602090048101928262000b73576000855562000bbf565b82601f1062000b8e57805160ff191683800117855562000bbf565b8280016001018555821562000bbf579182015b8281111562000bbe57825182559160200191906001019062000ba1565b5b50905062000bce919062000bd2565b5090565b5b8082111562000bed57600081600090555060010162000bd3565b5090565b60008151905062000c028162000e5d565b92915050565b60006020828403121562000c215762000c2062000e2f565b5b600062000c318482850162000bf1565b91505092915050565b62000c458162000d5d565b82525050565b600062000c5a601b8362000cef565b915062000c678262000e34565b602082019050919050565b62000c7d8162000d91565b82525050565b600060408201905062000c9a600083018562000c3a565b62000ca9602083018462000c3a565b9392505050565b6000602082019050818103600083015262000ccb8162000c4b565b9050919050565b600060208201905062000ce9600083018462000c72565b92915050565b600082825260208201905092915050565b600062000d0d8262000d91565b915062000d1a8362000d91565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000d525762000d5162000dd1565b5b828201905092915050565b600062000d6a8262000d71565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000600282049050600182168062000db457607f821691505b6020821081141562000dcb5762000dca62000e00565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b62000e688162000d5d565b811462000e7457600080fd5b50565b60805160601c614bba62000e9d6000396000818161124801526112740152614bba6000f3fe6080604052600436106103545760003560e01c806370a08231116101c6578063bbaa7d44116100f7578063dd62ed3e11610095578063f1d5f5171161006f578063f1d5f51714610c87578063f2fde38b14610cb0578063f872858a14610cd9578063fabf706314610d045761035b565b8063dd62ed3e14610bf6578063e207a92b14610c33578063f0cd1dac14610c5c5761035b565b8063c78a789b116100d1578063c78a789b14610b38578063c816841b14610b75578063d76e26a314610ba0578063da00097d14610bcb5761035b565b8063bbaa7d4414610abd578063c2d4640e14610ae6578063c49b9a8014610b0f5761035b565b806395d89b4111610164578063a457c2d71161013e578063a457c2d7146109ef578063a5d69d1f14610a2c578063a9059cbb14610a55578063b6c3af3414610a925761035b565b806395d89b411461096e5780639e3fa32314610999578063a08e671f146109c45761035b565b806382eefb43116101a057806382eefb43146108d85780638da5cb5b146109035780638f03aad51461092e578063914eb66a146109575761035b565b806370a08231146108455780637d1db4a514610882578063807c2d9c146108ad5761035b565b80632f0a5fd4116102a0578063565cec381161023e578063646d470011610218578063646d47001461079b578063661b6e36146107c6578063667b511c146107f1578063705f9d741461081a5761035b565b8063565cec381461070a57806357e6adcb146107355780635881f3ef1461075e5761035b565b80633b97084a1161027a5780633b97084a1461063c5780634a74bb0214610665578063526012e81461069057806355324fa9146106cd5761035b565b80632f0a5fd4146105a9578063313ce567146105d457806339509351146105ff5761035b565b806323b872dd1161030d57806327c8f835116102e757806327c8f835146104ff5780632b112e491461052a5780632cdae5cb146105555780632df671091461057e5761035b565b806323b872dd1461047057806325519cf2146104ad5780632563ae83146104d65761035b565b806306fdde0314610360578063095ea7b31461038b5780630fe1203c146103c85780631694505e146103f157806318160ddd1461041c5780631d865c30146104475761035b565b3661035b57005b600080fd5b34801561036c57600080fd5b50610375610d41565b6040516103829190614299565b60405180910390f35b34801561039757600080fd5b506103b260048036038101906103ad9190613e08565b610dd3565b6040516103bf9190614263565b60405180910390f35b3480156103d457600080fd5b506103ef60048036038101906103ea9190613cdb565b610df1565b005b3480156103fd57600080fd5b50610406610eca565b604051610413919061427e565b60405180910390f35b34801561042857600080fd5b50610431610ef0565b60405161043e91906143fb565b60405180910390f35b34801561045357600080fd5b5061046e60048036038101906104699190613ea2565b610efa565b005b34801561047c57600080fd5b5061049760048036038101906104929190613d75565b610fda565b6040516104a49190614263565b60405180910390f35b3480156104b957600080fd5b506104d460048036038101906104cf9190613ea2565b6110b4565b005b3480156104e257600080fd5b506104fd60048036038101906104f89190613e48565b611194565b005b34801561050b57600080fd5b50610514611246565b60405161052191906141be565b60405180910390f35b34801561053657600080fd5b5061053f61126a565b60405161054c91906143fb565b60405180910390f35b34801561056157600080fd5b5061057c60048036038101906105779190613dc8565b6112ae565b005b34801561058a57600080fd5b5061059361139e565b6040516105a091906143fb565b60405180910390f35b3480156105b557600080fd5b506105be6113a4565b6040516105cb91906143fb565b60405180910390f35b3480156105e057600080fd5b506105e96113aa565b6040516105f691906144a0565b60405180910390f35b34801561060b57600080fd5b5061062660048036038101906106219190613e08565b6113c1565b6040516106339190614263565b60405180910390f35b34801561064857600080fd5b50610663600480360381019061065e9190613e75565b611474565b005b34801561067157600080fd5b5061067a611513565b6040516106879190614263565b60405180910390f35b34801561069c57600080fd5b506106b760048036038101906106b29190613cdb565b611526565b6040516106c49190614263565b60405180910390f35b3480156106d957600080fd5b506106f460048036038101906106ef9190613cdb565b611546565b6040516107019190614263565b60405180910390f35b34801561071657600080fd5b5061071f611566565b60405161072c91906143fb565b60405180910390f35b34801561074157600080fd5b5061075c60048036038101906107579190613dc8565b61156c565b005b34801561076a57600080fd5b5061078560048036038101906107809190613cdb565b61165c565b60405161079291906141be565b60405180910390f35b3480156107a757600080fd5b506107b0611bba565b6040516107bd91906143fb565b60405180910390f35b3480156107d257600080fd5b506107db611bc0565b6040516107e891906143fb565b60405180910390f35b3480156107fd57600080fd5b5061081860048036038101906108139190613dc8565b611bc6565b005b34801561082657600080fd5b5061082f611cb6565b60405161083c91906143fb565b60405180910390f35b34801561085157600080fd5b5061086c60048036038101906108679190613cdb565b611cbc565b60405161087991906143fb565b60405180910390f35b34801561088e57600080fd5b50610897611d05565b6040516108a491906143fb565b60405180910390f35b3480156108b957600080fd5b506108c2611d0b565b6040516108cf91906143fb565b60405180910390f35b3480156108e457600080fd5b506108ed611d11565b6040516108fa91906143fb565b60405180910390f35b34801561090f57600080fd5b50610918611d17565b60405161092591906141be565b60405180910390f35b34801561093a57600080fd5b5061095560048036038101906109509190613e75565b611d40565b005b34801561096357600080fd5b5061096c611e2a565b005b34801561097a57600080fd5b50610983611f7d565b6040516109909190614299565b60405180910390f35b3480156109a557600080fd5b506109ae61200f565b6040516109bb91906143fb565b60405180910390f35b3480156109d057600080fd5b506109d9612015565b6040516109e691906143fb565b60405180910390f35b3480156109fb57600080fd5b50610a166004803603810190610a119190613e08565b61201b565b604051610a239190614263565b60405180910390f35b348015610a3857600080fd5b50610a536004803603810190610a4e9190613e48565b6120e8565b005b348015610a6157600080fd5b50610a7c6004803603810190610a779190613e08565b61219a565b604051610a899190614263565b60405180910390f35b348015610a9e57600080fd5b50610aa76121b9565b604051610ab491906143fb565b60405180910390f35b348015610ac957600080fd5b50610ae46004803603810190610adf9190613cdb565b6121bf565b005b348015610af257600080fd5b50610b0d6004803603810190610b089190613ea2565b612298565b005b348015610b1b57600080fd5b50610b366004803603810190610b319190613e48565b612378565b005b348015610b4457600080fd5b50610b5f6004803603810190610b5a9190613cdb565b612461565b604051610b6c9190614263565b60405180910390f35b348015610b8157600080fd5b50610b8a612481565b604051610b9791906141be565b60405180910390f35b348015610bac57600080fd5b50610bb56124a7565b604051610bc291906143fb565b60405180910390f35b348015610bd757600080fd5b50610be06124ad565b604051610bed9190614263565b60405180910390f35b348015610c0257600080fd5b50610c1d6004803603810190610c189190613d35565b6124c0565b604051610c2a91906143fb565b60405180910390f35b348015610c3f57600080fd5b50610c5a6004803603810190610c559190613cdb565b612547565b005b348015610c6857600080fd5b50610c71612637565b604051610c7e91906143fb565b60405180910390f35b348015610c9357600080fd5b50610cae6004803603810190610ca99190613e75565b61263d565b005b348015610cbc57600080fd5b50610cd76004803603810190610cd29190613cdb565b6126dc565b005b348015610ce557600080fd5b50610cee61289e565b604051610cfb9190614263565b60405180910390f35b348015610d1057600080fd5b50610d2b6004803603810190610d269190613cdb565b6128b1565b604051610d389190614263565b60405180910390f35b606060028054610d50906146f5565b80601f0160208091040260200160405190810160405280929190818152602001828054610d7c906146f5565b8015610dc95780601f10610d9e57610100808354040283529160200191610dc9565b820191906000526020600020905b815481529060010190602001808311610dac57829003601f168201915b5050505050905090565b6000610de7610de061292f565b8484612937565b6001905092915050565b610df961292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7d9061439b565b60405180910390fd5b80600460016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601854905090565b610f0261292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f869061439b565b60405180910390fd5b82600f819055508160108190555080601181905550610fcf601154610fc1601054600f546128d190919063ffffffff16565b6128d190919063ffffffff16565b601681905550505050565b6000610fe7848484612b02565b506110a984610ff461292f565b6110a485604051806060016040528060288152602001614b3860289139600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061105a61292f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130e79092919063ffffffff16565b612937565b600190509392505050565b6110bc61292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611149576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111409061439b565b60405180910390fd5b82600c8190555081600d8190555080600e81905550611189600e5461117b600d54600c546128d190919063ffffffff16565b6128d190919063ffffffff16565b601581905550505050565b61119c61292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611229576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112209061439b565b60405180910390fd5b80601d60176101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60006112a96112987f0000000000000000000000000000000000000000000000000000000000000000611cbc565b60185461314b90919063ffffffff16565b905090565b6112b661292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611343576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133a9061439b565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600d5481565b600f5481565b6000600460009054906101000a900460ff16905090565b600061146a6113ce61292f565b8461146585600760006113df61292f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128d190919063ffffffff16565b612937565b6001905092915050565b61147c61292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611509576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115009061439b565b60405180910390fd5b80601b8190555050565b601d60159054906101000a900460ff1681565b60096020528060005260406000206000915054906101000a900460ff1681565b600b6020528060005260406000206000915054906101000a900460ff1681565b60135481565b61157461292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611601576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f89061439b565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600061166661292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea9061439b565b60405180910390fd5b60008290508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561173e57600080fd5b505afa158015611752573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117769190613d08565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156117d857600080fd5b505afa1580156117ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118109190613d08565b6040518363ffffffff1660e01b815260040161182d9291906141d9565b60206040518083038186803b15801561184557600080fd5b505afa158015611859573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061187d9190613d08565b9150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a3e578073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156118fa57600080fd5b505afa15801561190e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119329190613d08565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561199457600080fd5b505afa1580156119a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119cc9190613d08565b6040518363ffffffff1660e01b81526004016119e99291906141d9565b602060405180830381600087803b158015611a0357600080fd5b505af1158015611a17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a3b9190613d08565b91505b81601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160096000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050919050565b60115481565b60105481565b611bce61292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c529061439b565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600e5481565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60195481565b601a5481565b60165481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611d4861292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dcc9061439b565b60405180910390fd5b678ac7230489e80000811115611e20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e17906142db565b60405180910390fd5b8060198190555050565b611e3261292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ebf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb69061439b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b606060038054611f8c906146f5565b80601f0160208091040260200160405190810160405280929190818152602001828054611fb8906146f5565b80156120055780601f10611fda57610100808354040283529160200191612005565b820191906000526020600020905b815481529060010190602001808311611fe857829003601f168201915b5050505050905090565b60125481565b60175481565b60006120de61202861292f565b846120d985604051806060016040528060258152602001614b60602591396007600061205261292f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130e79092919063ffffffff16565b612937565b6001905092915050565b6120f061292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461217d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121749061439b565b60405180910390fd5b80601d60166101000a81548160ff02191690831515021790555050565b60006121ae6121a761292f565b8484612b02565b506001905092915050565b600c5481565b6121c761292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612254576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224b9061439b565b60405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6122a061292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461232d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123249061439b565b60405180910390fd5b82601281905550816013819055508060148190555061236d60145461235f6013546012546128d190919063ffffffff16565b6128d190919063ffffffff16565b601781905550505050565b61238061292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461240d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124049061439b565b60405180910390fd5b80601d60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516124569190614263565b60405180910390a150565b600a6020528060005260406000206000915054906101000a900460ff1681565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60145481565b601d60169054906101000a900460ff1681565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61254f61292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d39061439b565b60405180910390fd5b6001600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60155481565b61264561292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c99061439b565b60405180910390fd5b80601a8190555050565b6126e461292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612771576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127689061439b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156127e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d8906142fb565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601d60179054906101000a900460ff1681565b60086020528060005260406000206000915054906101000a900460ff1681565b60008082846128e09190614510565b905083811015612925576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291c9061433b565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156129a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299e906143db565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0e9061431b565b60405180910390fd5b80600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612af591906143fb565b60405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612b73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b6a906143bb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612be3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bda906142bb565b60405180910390fd5b601d60149054906101000a900460ff1615612c0a57612c03848484613195565b90506130e0565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612cae5750600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612cf957601954821115612cf8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cef9061435b565b60405180910390fd5b5b6000612d0430611cbc565b90506000601b548210159050808015612d2a5750601d60149054906101000a900460ff16155b8015612d805750600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612d985750601d60159054906101000a900460ff165b15612dc257601d60169054906101000a900460ff1615612db857601b5491505b612dc182613368565b5b612e4b846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600660008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130e79092919063ffffffff16565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612f315750600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612f4557612f40878787613559565b612f47565b845b9050601d60179054906101000a900460ff168015612faf5750600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612fde57601a54612fd282612fc489611cbc565b6128d190919063ffffffff16565b1115612fdd57600080fd5b5b61303081600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128d190919063ffffffff16565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516130d091906143fb565b60405180910390a3600193505050505b9392505050565b600083831115829061312f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131269190614299565b60405180910390fd5b506000838561313e91906145f1565b9050809150509392505050565b600061318d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506130e7565b905092915050565b6000613220826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130e79092919063ffffffff16565b600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506132b582600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128d190919063ffffffff16565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161335591906143fb565b60405180910390a3600190509392505050565b6001601d60146101000a81548160ff02191690831515021790555060006133c160026133b36017546133a56012548761378090919063ffffffff16565b6137fb90919063ffffffff16565b6137fb90919063ffffffff16565b905060006133d8828461314b90919063ffffffff16565b90506133e381613845565b6000479050600061341461340360026012546137fb90919063ffffffff16565b60175461314b90919063ffffffff16565b905060006134526002613444846134366012548861378090919063ffffffff16565b6137fb90919063ffffffff16565b6137fb90919063ffffffff16565b9050600061347d8361346f6014548761378090919063ffffffff16565b6137fb90919063ffffffff16565b905060006134a682613498858861314b90919063ffffffff16565b61314b90919063ffffffff16565b905060008111156134de576134dd600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682613ad0565b5b600082111561351457613513600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613ad0565b5b6000831180156135245750600087115b15613534576135338784613b1b565b5b505050505050506000601d60146101000a81548160ff02191690831515021790555050565b60008060009050600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156135e1576135da60646135cc6015548661378090919063ffffffff16565b6137fb90919063ffffffff16565b905061365f565b600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561365e5761365b606461364d6016548661378090919063ffffffff16565b6137fb90919063ffffffff16565b90505b5b6000811115613763576136ba81600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128d190919063ffffffff16565b600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161375a91906143fb565b60405180910390a35b613776818461314b90919063ffffffff16565b9150509392505050565b60008083141561379357600090506137f5565b600082846137a19190614597565b90508284826137b09190614566565b146137f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137e79061437b565b60405180910390fd5b809150505b92915050565b600061383d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613c0f565b905092915050565b6000600267ffffffffffffffff811115613862576138616147e3565b5b6040519080825280602002602001820160405280156138905781602001602082028036833780820191505090505b50905030816000815181106138a8576138a76147b4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561394a57600080fd5b505afa15801561395e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139829190613d08565b81600181518110613996576139956147b4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506139fd30601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612937565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613a61959493929190614446565b600060405180830381600087803b158015613a7b57600080fd5b505af1158015613a8f573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051613ac4929190614416565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613b16573d6000803e3d6000fd5b505050565b613b4830601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612937565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613b94611d17565b426040518863ffffffff1660e01b8152600401613bb696959493929190614202565b6060604051808303818588803b158015613bcf57600080fd5b505af1158015613be3573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613c089190613ef5565b5050505050565b60008083118290613c56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c4d9190614299565b60405180910390fd5b5060008385613c659190614566565b9050809150509392505050565b600081359050613c8181614af2565b92915050565b600081519050613c9681614af2565b92915050565b600081359050613cab81614b09565b92915050565b600081359050613cc081614b20565b92915050565b600081519050613cd581614b20565b92915050565b600060208284031215613cf157613cf0614812565b5b6000613cff84828501613c72565b91505092915050565b600060208284031215613d1e57613d1d614812565b5b6000613d2c84828501613c87565b91505092915050565b60008060408385031215613d4c57613d4b614812565b5b6000613d5a85828601613c72565b9250506020613d6b85828601613c72565b9150509250929050565b600080600060608486031215613d8e57613d8d614812565b5b6000613d9c86828701613c72565b9350506020613dad86828701613c72565b9250506040613dbe86828701613cb1565b9150509250925092565b60008060408385031215613ddf57613dde614812565b5b6000613ded85828601613c72565b9250506020613dfe85828601613c9c565b9150509250929050565b60008060408385031215613e1f57613e1e614812565b5b6000613e2d85828601613c72565b9250506020613e3e85828601613cb1565b9150509250929050565b600060208284031215613e5e57613e5d614812565b5b6000613e6c84828501613c9c565b91505092915050565b600060208284031215613e8b57613e8a614812565b5b6000613e9984828501613cb1565b91505092915050565b600080600060608486031215613ebb57613eba614812565b5b6000613ec986828701613cb1565b9350506020613eda86828701613cb1565b9250506040613eeb86828701613cb1565b9150509250925092565b600080600060608486031215613f0e57613f0d614812565b5b6000613f1c86828701613cc6565b9350506020613f2d86828701613cc6565b9250506040613f3e86828701613cc6565b9150509250925092565b6000613f548383613f60565b60208301905092915050565b613f6981614625565b82525050565b613f7881614625565b82525050565b6000613f89826144cb565b613f9381856144ee565b9350613f9e836144bb565b8060005b83811015613fcf578151613fb68882613f48565b9750613fc1836144e1565b925050600181019050613fa2565b5085935050505092915050565b613fe581614637565b82525050565b613ff48161467a565b82525050565b6140038161468c565b82525050565b6000614014826144d6565b61401e81856144ff565b935061402e8185602086016146c2565b61403781614817565b840191505092915050565b600061404f6023836144ff565b915061405a82614828565b604082019050919050565b60006140726034836144ff565b915061407d82614877565b604082019050919050565b60006140956026836144ff565b91506140a0826148c6565b604082019050919050565b60006140b86022836144ff565b91506140c382614915565b604082019050919050565b60006140db601b836144ff565b91506140e682614964565b602082019050919050565b60006140fe6028836144ff565b91506141098261498d565b604082019050919050565b60006141216021836144ff565b915061412c826149dc565b604082019050919050565b60006141446020836144ff565b915061414f82614a2b565b602082019050919050565b60006141676025836144ff565b915061417282614a54565b604082019050919050565b600061418a6024836144ff565b915061419582614aa3565b604082019050919050565b6141a981614663565b82525050565b6141b88161466d565b82525050565b60006020820190506141d36000830184613f6f565b92915050565b60006040820190506141ee6000830185613f6f565b6141fb6020830184613f6f565b9392505050565b600060c0820190506142176000830189613f6f565b61422460208301886141a0565b6142316040830187613ffa565b61423e6060830186613ffa565b61424b6080830185613f6f565b61425860a08301846141a0565b979650505050505050565b60006020820190506142786000830184613fdc565b92915050565b60006020820190506142936000830184613feb565b92915050565b600060208201905081810360008301526142b38184614009565b905092915050565b600060208201905081810360008301526142d481614042565b9050919050565b600060208201905081810360008301526142f481614065565b9050919050565b6000602082019050818103600083015261431481614088565b9050919050565b60006020820190508181036000830152614334816140ab565b9050919050565b60006020820190508181036000830152614354816140ce565b9050919050565b60006020820190508181036000830152614374816140f1565b9050919050565b6000602082019050818103600083015261439481614114565b9050919050565b600060208201905081810360008301526143b481614137565b9050919050565b600060208201905081810360008301526143d48161415a565b9050919050565b600060208201905081810360008301526143f48161417d565b9050919050565b600060208201905061441060008301846141a0565b92915050565b600060408201905061442b60008301856141a0565b818103602083015261443d8184613f7e565b90509392505050565b600060a08201905061445b60008301886141a0565b6144686020830187613ffa565b818103604083015261447a8186613f7e565b90506144896060830185613f6f565b61449660808301846141a0565b9695505050505050565b60006020820190506144b560008301846141af565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600061451b82614663565b915061452683614663565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561455b5761455a614727565b5b828201905092915050565b600061457182614663565b915061457c83614663565b92508261458c5761458b614756565b5b828204905092915050565b60006145a282614663565b91506145ad83614663565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156145e6576145e5614727565b5b828202905092915050565b60006145fc82614663565b915061460783614663565b92508282101561461a57614619614727565b5b828203905092915050565b600061463082614643565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006146858261469e565b9050919050565b600061469782614663565b9050919050565b60006146a9826146b0565b9050919050565b60006146bb82614643565b9050919050565b60005b838110156146e05780820151818401526020810190506146c5565b838111156146ef576000848401525b50505050565b6000600282049050600182168061470d57607f821691505b6020821081141561472157614720614785565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f4d61782077616c6c65742073686f756c64206265206c657373206f722065757160008201527f616c20746f20342520746f74616c537570706c79000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b614afb81614625565b8114614b0657600080fd5b50565b614b1281614637565b8114614b1d57600080fd5b50565b614b2981614663565b8114614b3457600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220c51e883e9a254e30f304f465e13c13b2fe96a62686ed0659678683b520f11b1e64736f6c63430008070033

Deployed Bytecode

0x6080604052600436106103545760003560e01c806370a08231116101c6578063bbaa7d44116100f7578063dd62ed3e11610095578063f1d5f5171161006f578063f1d5f51714610c87578063f2fde38b14610cb0578063f872858a14610cd9578063fabf706314610d045761035b565b8063dd62ed3e14610bf6578063e207a92b14610c33578063f0cd1dac14610c5c5761035b565b8063c78a789b116100d1578063c78a789b14610b38578063c816841b14610b75578063d76e26a314610ba0578063da00097d14610bcb5761035b565b8063bbaa7d4414610abd578063c2d4640e14610ae6578063c49b9a8014610b0f5761035b565b806395d89b4111610164578063a457c2d71161013e578063a457c2d7146109ef578063a5d69d1f14610a2c578063a9059cbb14610a55578063b6c3af3414610a925761035b565b806395d89b411461096e5780639e3fa32314610999578063a08e671f146109c45761035b565b806382eefb43116101a057806382eefb43146108d85780638da5cb5b146109035780638f03aad51461092e578063914eb66a146109575761035b565b806370a08231146108455780637d1db4a514610882578063807c2d9c146108ad5761035b565b80632f0a5fd4116102a0578063565cec381161023e578063646d470011610218578063646d47001461079b578063661b6e36146107c6578063667b511c146107f1578063705f9d741461081a5761035b565b8063565cec381461070a57806357e6adcb146107355780635881f3ef1461075e5761035b565b80633b97084a1161027a5780633b97084a1461063c5780634a74bb0214610665578063526012e81461069057806355324fa9146106cd5761035b565b80632f0a5fd4146105a9578063313ce567146105d457806339509351146105ff5761035b565b806323b872dd1161030d57806327c8f835116102e757806327c8f835146104ff5780632b112e491461052a5780632cdae5cb146105555780632df671091461057e5761035b565b806323b872dd1461047057806325519cf2146104ad5780632563ae83146104d65761035b565b806306fdde0314610360578063095ea7b31461038b5780630fe1203c146103c85780631694505e146103f157806318160ddd1461041c5780631d865c30146104475761035b565b3661035b57005b600080fd5b34801561036c57600080fd5b50610375610d41565b6040516103829190614299565b60405180910390f35b34801561039757600080fd5b506103b260048036038101906103ad9190613e08565b610dd3565b6040516103bf9190614263565b60405180910390f35b3480156103d457600080fd5b506103ef60048036038101906103ea9190613cdb565b610df1565b005b3480156103fd57600080fd5b50610406610eca565b604051610413919061427e565b60405180910390f35b34801561042857600080fd5b50610431610ef0565b60405161043e91906143fb565b60405180910390f35b34801561045357600080fd5b5061046e60048036038101906104699190613ea2565b610efa565b005b34801561047c57600080fd5b5061049760048036038101906104929190613d75565b610fda565b6040516104a49190614263565b60405180910390f35b3480156104b957600080fd5b506104d460048036038101906104cf9190613ea2565b6110b4565b005b3480156104e257600080fd5b506104fd60048036038101906104f89190613e48565b611194565b005b34801561050b57600080fd5b50610514611246565b60405161052191906141be565b60405180910390f35b34801561053657600080fd5b5061053f61126a565b60405161054c91906143fb565b60405180910390f35b34801561056157600080fd5b5061057c60048036038101906105779190613dc8565b6112ae565b005b34801561058a57600080fd5b5061059361139e565b6040516105a091906143fb565b60405180910390f35b3480156105b557600080fd5b506105be6113a4565b6040516105cb91906143fb565b60405180910390f35b3480156105e057600080fd5b506105e96113aa565b6040516105f691906144a0565b60405180910390f35b34801561060b57600080fd5b5061062660048036038101906106219190613e08565b6113c1565b6040516106339190614263565b60405180910390f35b34801561064857600080fd5b50610663600480360381019061065e9190613e75565b611474565b005b34801561067157600080fd5b5061067a611513565b6040516106879190614263565b60405180910390f35b34801561069c57600080fd5b506106b760048036038101906106b29190613cdb565b611526565b6040516106c49190614263565b60405180910390f35b3480156106d957600080fd5b506106f460048036038101906106ef9190613cdb565b611546565b6040516107019190614263565b60405180910390f35b34801561071657600080fd5b5061071f611566565b60405161072c91906143fb565b60405180910390f35b34801561074157600080fd5b5061075c60048036038101906107579190613dc8565b61156c565b005b34801561076a57600080fd5b5061078560048036038101906107809190613cdb565b61165c565b60405161079291906141be565b60405180910390f35b3480156107a757600080fd5b506107b0611bba565b6040516107bd91906143fb565b60405180910390f35b3480156107d257600080fd5b506107db611bc0565b6040516107e891906143fb565b60405180910390f35b3480156107fd57600080fd5b5061081860048036038101906108139190613dc8565b611bc6565b005b34801561082657600080fd5b5061082f611cb6565b60405161083c91906143fb565b60405180910390f35b34801561085157600080fd5b5061086c60048036038101906108679190613cdb565b611cbc565b60405161087991906143fb565b60405180910390f35b34801561088e57600080fd5b50610897611d05565b6040516108a491906143fb565b60405180910390f35b3480156108b957600080fd5b506108c2611d0b565b6040516108cf91906143fb565b60405180910390f35b3480156108e457600080fd5b506108ed611d11565b6040516108fa91906143fb565b60405180910390f35b34801561090f57600080fd5b50610918611d17565b60405161092591906141be565b60405180910390f35b34801561093a57600080fd5b5061095560048036038101906109509190613e75565b611d40565b005b34801561096357600080fd5b5061096c611e2a565b005b34801561097a57600080fd5b50610983611f7d565b6040516109909190614299565b60405180910390f35b3480156109a557600080fd5b506109ae61200f565b6040516109bb91906143fb565b60405180910390f35b3480156109d057600080fd5b506109d9612015565b6040516109e691906143fb565b60405180910390f35b3480156109fb57600080fd5b50610a166004803603810190610a119190613e08565b61201b565b604051610a239190614263565b60405180910390f35b348015610a3857600080fd5b50610a536004803603810190610a4e9190613e48565b6120e8565b005b348015610a6157600080fd5b50610a7c6004803603810190610a779190613e08565b61219a565b604051610a899190614263565b60405180910390f35b348015610a9e57600080fd5b50610aa76121b9565b604051610ab491906143fb565b60405180910390f35b348015610ac957600080fd5b50610ae46004803603810190610adf9190613cdb565b6121bf565b005b348015610af257600080fd5b50610b0d6004803603810190610b089190613ea2565b612298565b005b348015610b1b57600080fd5b50610b366004803603810190610b319190613e48565b612378565b005b348015610b4457600080fd5b50610b5f6004803603810190610b5a9190613cdb565b612461565b604051610b6c9190614263565b60405180910390f35b348015610b8157600080fd5b50610b8a612481565b604051610b9791906141be565b60405180910390f35b348015610bac57600080fd5b50610bb56124a7565b604051610bc291906143fb565b60405180910390f35b348015610bd757600080fd5b50610be06124ad565b604051610bed9190614263565b60405180910390f35b348015610c0257600080fd5b50610c1d6004803603810190610c189190613d35565b6124c0565b604051610c2a91906143fb565b60405180910390f35b348015610c3f57600080fd5b50610c5a6004803603810190610c559190613cdb565b612547565b005b348015610c6857600080fd5b50610c71612637565b604051610c7e91906143fb565b60405180910390f35b348015610c9357600080fd5b50610cae6004803603810190610ca99190613e75565b61263d565b005b348015610cbc57600080fd5b50610cd76004803603810190610cd29190613cdb565b6126dc565b005b348015610ce557600080fd5b50610cee61289e565b604051610cfb9190614263565b60405180910390f35b348015610d1057600080fd5b50610d2b6004803603810190610d269190613cdb565b6128b1565b604051610d389190614263565b60405180910390f35b606060028054610d50906146f5565b80601f0160208091040260200160405190810160405280929190818152602001828054610d7c906146f5565b8015610dc95780601f10610d9e57610100808354040283529160200191610dc9565b820191906000526020600020905b815481529060010190602001808311610dac57829003601f168201915b5050505050905090565b6000610de7610de061292f565b8484612937565b6001905092915050565b610df961292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7d9061439b565b60405180910390fd5b80600460016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601854905090565b610f0261292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f869061439b565b60405180910390fd5b82600f819055508160108190555080601181905550610fcf601154610fc1601054600f546128d190919063ffffffff16565b6128d190919063ffffffff16565b601681905550505050565b6000610fe7848484612b02565b506110a984610ff461292f565b6110a485604051806060016040528060288152602001614b3860289139600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061105a61292f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130e79092919063ffffffff16565b612937565b600190509392505050565b6110bc61292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611149576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111409061439b565b60405180910390fd5b82600c8190555081600d8190555080600e81905550611189600e5461117b600d54600c546128d190919063ffffffff16565b6128d190919063ffffffff16565b601581905550505050565b61119c61292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611229576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112209061439b565b60405180910390fd5b80601d60176101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000dead81565b60006112a96112987f000000000000000000000000000000000000000000000000000000000000dead611cbc565b60185461314b90919063ffffffff16565b905090565b6112b661292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611343576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133a9061439b565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600d5481565b600f5481565b6000600460009054906101000a900460ff16905090565b600061146a6113ce61292f565b8461146585600760006113df61292f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128d190919063ffffffff16565b612937565b6001905092915050565b61147c61292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611509576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115009061439b565b60405180910390fd5b80601b8190555050565b601d60159054906101000a900460ff1681565b60096020528060005260406000206000915054906101000a900460ff1681565b600b6020528060005260406000206000915054906101000a900460ff1681565b60135481565b61157461292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611601576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f89061439b565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600061166661292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea9061439b565b60405180910390fd5b60008290508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561173e57600080fd5b505afa158015611752573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117769190613d08565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156117d857600080fd5b505afa1580156117ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118109190613d08565b6040518363ffffffff1660e01b815260040161182d9291906141d9565b60206040518083038186803b15801561184557600080fd5b505afa158015611859573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061187d9190613d08565b9150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a3e578073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156118fa57600080fd5b505afa15801561190e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119329190613d08565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561199457600080fd5b505afa1580156119a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119cc9190613d08565b6040518363ffffffff1660e01b81526004016119e99291906141d9565b602060405180830381600087803b158015611a0357600080fd5b505af1158015611a17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a3b9190613d08565b91505b81601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160096000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050919050565b60115481565b60105481565b611bce61292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c529061439b565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600e5481565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60195481565b601a5481565b60165481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611d4861292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dcc9061439b565b60405180910390fd5b678ac7230489e80000811115611e20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e17906142db565b60405180910390fd5b8060198190555050565b611e3261292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ebf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb69061439b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b606060038054611f8c906146f5565b80601f0160208091040260200160405190810160405280929190818152602001828054611fb8906146f5565b80156120055780601f10611fda57610100808354040283529160200191612005565b820191906000526020600020905b815481529060010190602001808311611fe857829003601f168201915b5050505050905090565b60125481565b60175481565b60006120de61202861292f565b846120d985604051806060016040528060258152602001614b60602591396007600061205261292f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130e79092919063ffffffff16565b612937565b6001905092915050565b6120f061292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461217d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121749061439b565b60405180910390fd5b80601d60166101000a81548160ff02191690831515021790555050565b60006121ae6121a761292f565b8484612b02565b506001905092915050565b600c5481565b6121c761292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612254576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224b9061439b565b60405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6122a061292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461232d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123249061439b565b60405180910390fd5b82601281905550816013819055508060148190555061236d60145461235f6013546012546128d190919063ffffffff16565b6128d190919063ffffffff16565b601781905550505050565b61238061292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461240d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124049061439b565b60405180910390fd5b80601d60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516124569190614263565b60405180910390a150565b600a6020528060005260406000206000915054906101000a900460ff1681565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60145481565b601d60169054906101000a900460ff1681565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61254f61292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d39061439b565b60405180910390fd5b6001600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60155481565b61264561292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c99061439b565b60405180910390fd5b80601a8190555050565b6126e461292f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612771576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127689061439b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156127e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d8906142fb565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601d60179054906101000a900460ff1681565b60086020528060005260406000206000915054906101000a900460ff1681565b60008082846128e09190614510565b905083811015612925576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291c9061433b565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156129a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299e906143db565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0e9061431b565b60405180910390fd5b80600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612af591906143fb565b60405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612b73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b6a906143bb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612be3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bda906142bb565b60405180910390fd5b601d60149054906101000a900460ff1615612c0a57612c03848484613195565b90506130e0565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612cae5750600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612cf957601954821115612cf8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cef9061435b565b60405180910390fd5b5b6000612d0430611cbc565b90506000601b548210159050808015612d2a5750601d60149054906101000a900460ff16155b8015612d805750600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612d985750601d60159054906101000a900460ff165b15612dc257601d60169054906101000a900460ff1615612db857601b5491505b612dc182613368565b5b612e4b846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600660008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130e79092919063ffffffff16565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612f315750600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612f4557612f40878787613559565b612f47565b845b9050601d60179054906101000a900460ff168015612faf5750600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612fde57601a54612fd282612fc489611cbc565b6128d190919063ffffffff16565b1115612fdd57600080fd5b5b61303081600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128d190919063ffffffff16565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516130d091906143fb565b60405180910390a3600193505050505b9392505050565b600083831115829061312f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131269190614299565b60405180910390fd5b506000838561313e91906145f1565b9050809150509392505050565b600061318d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506130e7565b905092915050565b6000613220826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130e79092919063ffffffff16565b600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506132b582600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128d190919063ffffffff16565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161335591906143fb565b60405180910390a3600190509392505050565b6001601d60146101000a81548160ff02191690831515021790555060006133c160026133b36017546133a56012548761378090919063ffffffff16565b6137fb90919063ffffffff16565b6137fb90919063ffffffff16565b905060006133d8828461314b90919063ffffffff16565b90506133e381613845565b6000479050600061341461340360026012546137fb90919063ffffffff16565b60175461314b90919063ffffffff16565b905060006134526002613444846134366012548861378090919063ffffffff16565b6137fb90919063ffffffff16565b6137fb90919063ffffffff16565b9050600061347d8361346f6014548761378090919063ffffffff16565b6137fb90919063ffffffff16565b905060006134a682613498858861314b90919063ffffffff16565b61314b90919063ffffffff16565b905060008111156134de576134dd600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682613ad0565b5b600082111561351457613513600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613ad0565b5b6000831180156135245750600087115b15613534576135338784613b1b565b5b505050505050506000601d60146101000a81548160ff02191690831515021790555050565b60008060009050600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156135e1576135da60646135cc6015548661378090919063ffffffff16565b6137fb90919063ffffffff16565b905061365f565b600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561365e5761365b606461364d6016548661378090919063ffffffff16565b6137fb90919063ffffffff16565b90505b5b6000811115613763576136ba81600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128d190919063ffffffff16565b600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161375a91906143fb565b60405180910390a35b613776818461314b90919063ffffffff16565b9150509392505050565b60008083141561379357600090506137f5565b600082846137a19190614597565b90508284826137b09190614566565b146137f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137e79061437b565b60405180910390fd5b809150505b92915050565b600061383d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613c0f565b905092915050565b6000600267ffffffffffffffff811115613862576138616147e3565b5b6040519080825280602002602001820160405280156138905781602001602082028036833780820191505090505b50905030816000815181106138a8576138a76147b4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561394a57600080fd5b505afa15801561395e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139829190613d08565b81600181518110613996576139956147b4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506139fd30601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612937565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613a61959493929190614446565b600060405180830381600087803b158015613a7b57600080fd5b505af1158015613a8f573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051613ac4929190614416565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613b16573d6000803e3d6000fd5b505050565b613b4830601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612937565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613b94611d17565b426040518863ffffffff1660e01b8152600401613bb696959493929190614202565b6060604051808303818588803b158015613bcf57600080fd5b505af1158015613be3573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613c089190613ef5565b5050505050565b60008083118290613c56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c4d9190614299565b60405180910390fd5b5060008385613c659190614566565b9050809150509392505050565b600081359050613c8181614af2565b92915050565b600081519050613c9681614af2565b92915050565b600081359050613cab81614b09565b92915050565b600081359050613cc081614b20565b92915050565b600081519050613cd581614b20565b92915050565b600060208284031215613cf157613cf0614812565b5b6000613cff84828501613c72565b91505092915050565b600060208284031215613d1e57613d1d614812565b5b6000613d2c84828501613c87565b91505092915050565b60008060408385031215613d4c57613d4b614812565b5b6000613d5a85828601613c72565b9250506020613d6b85828601613c72565b9150509250929050565b600080600060608486031215613d8e57613d8d614812565b5b6000613d9c86828701613c72565b9350506020613dad86828701613c72565b9250506040613dbe86828701613cb1565b9150509250925092565b60008060408385031215613ddf57613dde614812565b5b6000613ded85828601613c72565b9250506020613dfe85828601613c9c565b9150509250929050565b60008060408385031215613e1f57613e1e614812565b5b6000613e2d85828601613c72565b9250506020613e3e85828601613cb1565b9150509250929050565b600060208284031215613e5e57613e5d614812565b5b6000613e6c84828501613c9c565b91505092915050565b600060208284031215613e8b57613e8a614812565b5b6000613e9984828501613cb1565b91505092915050565b600080600060608486031215613ebb57613eba614812565b5b6000613ec986828701613cb1565b9350506020613eda86828701613cb1565b9250506040613eeb86828701613cb1565b9150509250925092565b600080600060608486031215613f0e57613f0d614812565b5b6000613f1c86828701613cc6565b9350506020613f2d86828701613cc6565b9250506040613f3e86828701613cc6565b9150509250925092565b6000613f548383613f60565b60208301905092915050565b613f6981614625565b82525050565b613f7881614625565b82525050565b6000613f89826144cb565b613f9381856144ee565b9350613f9e836144bb565b8060005b83811015613fcf578151613fb68882613f48565b9750613fc1836144e1565b925050600181019050613fa2565b5085935050505092915050565b613fe581614637565b82525050565b613ff48161467a565b82525050565b6140038161468c565b82525050565b6000614014826144d6565b61401e81856144ff565b935061402e8185602086016146c2565b61403781614817565b840191505092915050565b600061404f6023836144ff565b915061405a82614828565b604082019050919050565b60006140726034836144ff565b915061407d82614877565b604082019050919050565b60006140956026836144ff565b91506140a0826148c6565b604082019050919050565b60006140b86022836144ff565b91506140c382614915565b604082019050919050565b60006140db601b836144ff565b91506140e682614964565b602082019050919050565b60006140fe6028836144ff565b91506141098261498d565b604082019050919050565b60006141216021836144ff565b915061412c826149dc565b604082019050919050565b60006141446020836144ff565b915061414f82614a2b565b602082019050919050565b60006141676025836144ff565b915061417282614a54565b604082019050919050565b600061418a6024836144ff565b915061419582614aa3565b604082019050919050565b6141a981614663565b82525050565b6141b88161466d565b82525050565b60006020820190506141d36000830184613f6f565b92915050565b60006040820190506141ee6000830185613f6f565b6141fb6020830184613f6f565b9392505050565b600060c0820190506142176000830189613f6f565b61422460208301886141a0565b6142316040830187613ffa565b61423e6060830186613ffa565b61424b6080830185613f6f565b61425860a08301846141a0565b979650505050505050565b60006020820190506142786000830184613fdc565b92915050565b60006020820190506142936000830184613feb565b92915050565b600060208201905081810360008301526142b38184614009565b905092915050565b600060208201905081810360008301526142d481614042565b9050919050565b600060208201905081810360008301526142f481614065565b9050919050565b6000602082019050818103600083015261431481614088565b9050919050565b60006020820190508181036000830152614334816140ab565b9050919050565b60006020820190508181036000830152614354816140ce565b9050919050565b60006020820190508181036000830152614374816140f1565b9050919050565b6000602082019050818103600083015261439481614114565b9050919050565b600060208201905081810360008301526143b481614137565b9050919050565b600060208201905081810360008301526143d48161415a565b9050919050565b600060208201905081810360008301526143f48161417d565b9050919050565b600060208201905061441060008301846141a0565b92915050565b600060408201905061442b60008301856141a0565b818103602083015261443d8184613f7e565b90509392505050565b600060a08201905061445b60008301886141a0565b6144686020830187613ffa565b818103604083015261447a8186613f7e565b90506144896060830185613f6f565b61449660808301846141a0565b9695505050505050565b60006020820190506144b560008301846141af565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600061451b82614663565b915061452683614663565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561455b5761455a614727565b5b828201905092915050565b600061457182614663565b915061457c83614663565b92508261458c5761458b614756565b5b828204905092915050565b60006145a282614663565b91506145ad83614663565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156145e6576145e5614727565b5b828202905092915050565b60006145fc82614663565b915061460783614663565b92508282101561461a57614619614727565b5b828203905092915050565b600061463082614643565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006146858261469e565b9050919050565b600061469782614663565b9050919050565b60006146a9826146b0565b9050919050565b60006146bb82614643565b9050919050565b60005b838110156146e05780820151818401526020810190506146c5565b838111156146ef576000848401525b50505050565b6000600282049050600182168061470d57607f821691505b6020821081141561472157614720614785565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f4d61782077616c6c65742073686f756c64206265206c657373206f722065757160008201527f616c20746f20342520746f74616c537570706c79000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b614afb81614625565b8114614b0657600080fd5b50565b614b1281614637565b8114614b1d57600080fd5b50565b614b2981614663565b8114614b3457600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220c51e883e9a254e30f304f465e13c13b2fe96a62686ed0659678683b520f11b1e64736f6c63430008070033

Deployed Bytecode Sourcemap

14244:14946:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17957:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19123:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21958:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15924:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18234:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20421:373;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23884:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20048:365;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21446:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14695:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22520:128;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19897:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15197:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15285:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18143:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18620:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21826:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16039:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14977:55;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15097:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15463:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21567:141;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22794:813;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15373:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15329:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19752:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15240:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18342:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15750:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15807:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15594:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5783:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21210:228;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6008:145;;;;;;;;;;;;;:::i;:::-;;18048:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15421:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15638:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18846:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22383:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23709:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15154:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22081:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20806:392;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22204:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15039:51;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15972:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15505:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16086:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18469:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19637:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15551:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21716:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6161:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16138:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14916:54;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17957:83;17994:13;18027:5;18020:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17957:83;:::o;19123:161::-;19198:4;19215:39;19224:12;:10;:12::i;:::-;19238:7;19247:6;19215:8;:39::i;:::-;19272:4;19265:11;;19123:161;;;;:::o;21958:115::-;5927:12;:10;:12::i;:::-;5917:22;;:6;;;;;;;;;;:22;;;5909:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22054:10:::1;22033;;:32;;;;;;;;;;;;;;;;;;21958:115:::0;:::o;15924:41::-;;;;;;;;;;;;;:::o;18234:100::-;18287:7;18314:12;;18307:19;;18234:100;:::o;20421:373::-;5927:12;:10;:12::i;:::-;5917:22;;:6;;;;;;;;;;:22;;;5909:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20571:15:::1;20550:18;:36;;;;20618:15;20597:18;:36;;;;20667:17;20644:20;:40;;;;20718:68;20765:20;;20718:42;20741:18;;20718;;:22;;:42;;;;:::i;:::-;:46;;:68;;;;:::i;:::-;20697:18;:89;;;;20421:373:::0;;;:::o;23884:313::-;23982:4;23999:36;24009:6;24017:9;24028:6;23999:9;:36::i;:::-;;24046:121;24055:6;24063:12;:10;:12::i;:::-;24077:89;24115:6;24077:89;;;;;;;;;;;;;;;;;:11;:19;24089:6;24077:19;;;;;;;;;;;;;;;:33;24097:12;:10;:12::i;:::-;24077:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;24046:8;:121::i;:::-;24185:4;24178:11;;23884:313;;;;;:::o;20048:365::-;5927:12;:10;:12::i;:::-;5917:22;;:6;;;;;;;;;;:22;;;5909:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20196:15:::1;20176:17;:35;;;;20242:15;20222:17;:35;;;;20290:17;20268:19;:39;;;;20340:65;20385:19;;20340:40;20362:17;;20340;;:21;;:40;;;;:::i;:::-;:44;;:65;;;;:::i;:::-;20320:17;:85;;;;20048:365:::0;;;:::o;21446:113::-;5927:12;:10;:12::i;:::-;5917:22;;:6;;;;;;;;;;:22;;;5909:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21543:8:::1;21524:16;;:27;;;;;;;;;;;;;;;;;;21446:113:::0;:::o;14695:81::-;;;:::o;22520:128::-;22573:7;22600:40;22617:22;22627:11;22617:9;:22::i;:::-;22600:12;;:16;;:40;;;;:::i;:::-;22593:47;;22520:128;:::o;19897:143::-;5927:12;:10;:12::i;:::-;5917:22;;:6;;;;;;;;;;:22;;;5909:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20024:8:::1;19991:21;:30;20013:7;19991:30;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;19897:143:::0;;:::o;15197:36::-;;;;:::o;15285:37::-;;;;:::o;18143:83::-;18184:5;18209:9;;;;;;;;;;;18202:16;;18143:83;:::o;18620:218::-;18708:4;18725:83;18734:12;:10;:12::i;:::-;18748:7;18757:50;18796:10;18757:11;:25;18769:12;:10;:12::i;:::-;18757:25;;;;;;;;;;;;;;;:34;18783:7;18757:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;18725:8;:83::i;:::-;18826:4;18819:11;;18620:218;;;;:::o;21826:124::-;5927:12;:10;:12::i;:::-;5917:22;;:6;;;;;;;;;;:22;;;5909:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21934:8:::1;21908:23;:34;;;;21826:124:::0;:::o;16039:40::-;;;;;;;;;;;;;:::o;14977:55::-;;;;;;;;;;;;;;;;;;;;;;:::o;15097:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;15463:35::-;;;;:::o;21567:141::-;5927:12;:10;:12::i;:::-;5917:22;;:6;;;;;;;;;;:22;;;5909:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21694:6:::1;21661:22;:30;21684:6;21661:30;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;21567:141:::0;;:::o;22794:813::-;22874:22;5927:12;:10;:12::i;:::-;5917:22;;:6;;;;;;;;;;:22;;;5909:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22911:35:::1;22968:16;22911:74;;23034:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23016:53;;;23078:4;23085:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23016:93;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22999:110;;23151:1;23125:28;;:14;:28;;;23122:225;;;23239:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23221:74;;;23304:4;23311:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23221:114;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23204:131;;23122:225;23373:14;23359:11;;:28;;;;;;;;;;;;;;;;;;23439:16;23421:15;;:34;;;;;;;;;;;;;;;;;;23540:4;23493:22;:44;23524:11;;;;;;;;;;;23493:44;;;;;;;;;;;;;;;;:51;;;;;;;;;;;;;;;;;;23595:4;23555:15;:37;23579:11;;;;;;;;;;;23555:37;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;22898:709;22794:813:::0;;;:::o;15373:39::-;;;;:::o;15329:37::-;;;;:::o;19752:133::-;5927:12;:10;:12::i;:::-;5917:22;;:6;;;;;;;;;;:22;;;5909:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19871:6:::1;19842:18;:26;19861:6;19842:26;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;19752:133:::0;;:::o;15240:38::-;;;;:::o;18342:119::-;18408:7;18435:9;:18;18445:7;18435:18;;;;;;;;;;;;;;;;18428:25;;18342:119;;;:::o;15750:50::-;;;;:::o;15807:48::-;;;;:::o;15594:37::-;;;;:::o;5783:79::-;5821:7;5848:6;;;;;;;;;;;5841:13;;5783:79;:::o;21210:228::-;5927:12;:10;:12::i;:::-;5917:22;;:6;;;;;;;;;;:22;;;5909:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21314:21:::1;21298:11;:38;;21290:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;21419:11;21404:12;:26;;;;21210:228:::0;:::o;6008:145::-;5927:12;:10;:12::i;:::-;5917:22;;:6;;;;;;;;;;:22;;;5909:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6112:1:::1;6075:40;;6096:6;::::0;::::1;;;;;;;;6075:40;;;;;;;;;;;;6143:1;6126:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;6008:145::o:0;18048:87::-;18087:13;18120:7;18113:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18048:87;:::o;15421:35::-;;;;:::o;15638:44::-;;;;:::o;18846:269::-;18939:4;18956:129;18965:12;:10;:12::i;:::-;18979:7;18988:96;19027:15;18988:96;;;;;;;;;;;;;;;;;:11;:25;19000:12;:10;:12::i;:::-;18988:25;;;;;;;;;;;;;;;:34;19014:7;18988:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;18956:8;:129::i;:::-;19103:4;19096:11;;18846:269;;;;:::o;22383:125::-;5927:12;:10;:12::i;:::-;5917:22;;:6;;;;;;;;;;:22;;;5909:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22492:8:::1;22464:25;;:36;;;;;;;;;;;;;;;;;;22383:125:::0;:::o;23709:167::-;23787:4;23804:42;23814:12;:10;:12::i;:::-;23828:9;23839:6;23804:9;:42::i;:::-;;23864:4;23857:11;;23709:167;;;;:::o;15154:36::-;;;;:::o;22081:115::-;5927:12;:10;:12::i;:::-;5917:22;;:6;;;;;;;;;;:22;;;5909:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22177:10:::1;22156;;:32;;;;;;;;;;;;;;;;;;22081:115:::0;:::o;20806:392::-;5927:12;:10;:12::i;:::-;5917:22;;:6;;;;;;;;;;:22;;;5909:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20973:17:::1;20954:16;:36;;;;21020:17;21001:16;:36;;;;21069:19;21048:18;:40;;;;21128:62;21171:18;;21128:38;21149:16;;21128;;:20;;:38;;;;:::i;:::-;:42;;:62;;;;:::i;:::-;21101:24;:89;;;;20806:392:::0;;;:::o;22204:171::-;5927:12;:10;:12::i;:::-;5917:22;;:6;;;;;;;;;;:22;;;5909:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22305:8:::1;22281:21;;:32;;;;;;;;;;;;;;;;;;22329:38;22358:8;22329:38;;;;;;:::i;:::-;;;;;;;;22204:171:::0;:::o;15039:51::-;;;;;;;;;;;;;;;;;;;;;;:::o;15972:26::-;;;;;;;;;;;;;:::o;15505:37::-;;;;:::o;16086:45::-;;;;;;;;;;;;;:::o;18469:143::-;18550:7;18577:11;:18;18589:5;18577:18;;;;;;;;;;;;;;;:27;18596:7;18577:27;;;;;;;;;;;;;;;;18570:34;;18469:143;;;;:::o;19637:107::-;5927:12;:10;:12::i;:::-;5917:22;;:6;;;;;;;;;;:22;;;5909:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19732:4:::1;19705:15;:24;19721:7;19705:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;19637:107:::0;:::o;15551:36::-;;;;:::o;21716:102::-;5927:12;:10;:12::i;:::-;5917:22;;:6;;;;;;;;;;:22;;;5909:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21802:8:::1;21788:10;:22;;;;21716:102:::0;:::o;6161:244::-;5927:12;:10;:12::i;:::-;5917:22;;:6;;;;;;;;;;:22;;;5909:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6270:1:::1;6250:22;;:8;:22;;;;6242:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;6360:8;6331:38;;6352:6;::::0;::::1;;;;;;;;6331:38;;;;;;;;;;;;6389:8;6380:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;6161:244:::0;:::o;16138:35::-;;;;;;;;;;;;;:::o;14916:54::-;;;;;;;;;;;;;;;;;;;;;;:::o;1185:181::-;1243:7;1263:9;1279:1;1275;:5;;;;:::i;:::-;1263:17;;1304:1;1299;:6;;1291:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;1357:1;1350:8;;;1185:181;;;;:::o;117:115::-;170:15;213:10;198:26;;117:115;:::o;19292:337::-;19402:1;19385:19;;:5;:19;;;;19377:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19483:1;19464:21;;:7;:21;;;;19456:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19567:6;19537:11;:18;19549:5;19537:18;;;;;;;;;;;;;;;:27;19556:7;19537:27;;;;;;;;;;;;;;;:36;;;;19605:7;19589:32;;19598:5;19589:32;;;19614:6;19589:32;;;;;;:::i;:::-;;;;;;;;19292:337;;;:::o;24205:1727::-;24292:4;24337:1;24319:20;;:6;:20;;;;24311:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;24421:1;24400:23;;:9;:23;;;;24392:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;24479:16;;;;;;;;;;;24476:1449;;;24529:41;24544:6;24552:9;24563:6;24529:14;:41::i;:::-;24522:48;;;;24476:1449;24626:18;:26;24645:6;24626:26;;;;;;;;;;;;;;;;;;;;;;;;;24625:27;:61;;;;;24657:18;:29;24676:9;24657:29;;;;;;;;;;;;;;;;;;;;;;;;;24656:30;24625:61;24622:176;;;24725:12;;24715:6;:22;;24707:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;24622:176;24826:28;24857:24;24875:4;24857:9;:24::i;:::-;24826:55;;24896:28;24951:23;;24927:20;:47;;24896:78;;25007:23;:44;;;;;25035:16;;;;;;;;;;;25034:17;25007:44;:72;;;;;25056:15;:23;25072:6;25056:23;;;;;;;;;;;;;;;;;;;;;;;;;25055:24;25007:72;:97;;;;;25083:21;;;;;;;;;;;25007:97;25003:308;;;25142:25;;;;;;;;;;;25139:97;;;25213:23;;25190:46;;25139:97;25255:36;25270:20;25255:14;:36::i;:::-;25003:308;25347:53;25369:6;25347:53;;;;;;;;;;;;;;;;;:9;:17;25357:6;25347:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;25327:9;:17;25337:6;25327:17;;;;;;;;;;;;;;;:73;;;;25417:19;25440:21;:29;25462:6;25440:29;;;;;;;;;;;;;;;;;;;;;;;;;:65;;;;25473:21;:32;25495:9;25473:32;;;;;;;;;;;;;;;;;;;;;;;;;25440:65;25439:156;;25561:34;25569:6;25577:9;25588:6;25561:7;:34::i;:::-;25439:156;;;25552:6;25439:156;25417:178;;25615:16;;;;;;;;;;;:54;;;;;25636:22;:33;25659:9;25636:33;;;;;;;;;;;;;;;;;;;;;;;;;25635:34;25615:54;25612:136;;;25737:10;;25696:37;25721:11;25696:20;25706:9;25696;:20::i;:::-;:24;;:37;;;;:::i;:::-;:51;;25688:60;;;;;;25612:136;25788:37;25813:11;25788:9;:20;25798:9;25788:20;;;;;;;;;;;;;;;;:24;;:37;;;;:::i;:::-;25765:9;:20;25775:9;25765:20;;;;;;;;;;;;;;;:60;;;;25864:9;25847:40;;25856:6;25847:40;;;25875:11;25847:40;;;;;;:::i;:::-;;;;;;;;25909:4;25902:11;;;;;24205:1727;;;;;;:::o;1518:192::-;1604:7;1637:1;1632;:6;;1640:12;1624:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1664:9;1680:1;1676;:5;;;;:::i;:::-;1664:17;;1701:1;1694:8;;;1518:192;;;;;:::o;1374:136::-;1432:7;1459:43;1463:1;1466;1459:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1452:50;;1374:136;;;;:::o;25940:330::-;26033:4;26070:53;26092:6;26070:53;;;;;;;;;;;;;;;;;:9;:17;26080:6;26070:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;26050:9;:17;26060:6;26050:17;;;;;;;;;;;;;;;:73;;;;26157:32;26182:6;26157:9;:20;26167:9;26157:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;26134:9;:20;26144:9;26134:20;;;;;;;;;;;;;;;:55;;;;26222:9;26205:35;;26214:6;26205:35;;;26233:6;26205:35;;;;;;:::i;:::-;;;;;;;;26258:4;26251:11;;25940:330;;;;;:::o;26278:1068::-;16615:4;16596:16;;:23;;;;;;;;;;;;;;;;;;26360:19:::1;26382:66;26446:1;26382:59;26416:24;;26382:29;26394:16;;26382:7;:11;;:29;;;;:::i;:::-;:33;;:59;;;;:::i;:::-;:63;;:66;;;;:::i;:::-;26360:88;;26459:21;26483:24;26495:11;26483:7;:11;;:24;;;;:::i;:::-;26459:48;;26520:31;26537:13;26520:16;:31::i;:::-;26562:22;26587:21;26562:46;;26621:19;26643:53;26672:23;26693:1;26672:16;;:20;;:23;;;;:::i;:::-;26643:24;;:28;;:53;;;;:::i;:::-;26621:75;;26717:26;26746:60;26804:1;26746:53;26787:11;26746:36;26765:16;;26746:14;:18;;:36;;;;:::i;:::-;:40;;:53;;;;:::i;:::-;:57;;:60;;;;:::i;:::-;26717:89;;26817:28;26848:55;26891:11;26848:38;26867:18;;26848:14;:18;;:38;;;;:::i;:::-;:42;;:55;;;;:::i;:::-;26817:86;;26914:26;26943:64;26986:20;26943:38;26962:18;26943:14;:18;;:38;;;;:::i;:::-;:42;;:64;;;;:::i;:::-;26914:93;;27044:1;27023:18;:22;27020:92;;;27060:52;27081:10;;;;;;;;;;;27093:18;27060:20;:52::i;:::-;27020:92;27151:1;27128:20;:24;27125:96;;;27167:54;27188:10;;;;;;;;;;;27200:20;27167;:54::i;:::-;27125:96;27258:1;27237:18;:22;:41;;;;;27277:1;27263:11;:15;27237:41;27234:104;;;27293:45;27306:11;27319:18;27293:12;:45::i;:::-;27234:104;26339:1007;;;;;;;16661:5:::0;16642:16;;:24;;;;;;;;;;;;;;;;;;26278:1068;:::o;28553:628::-;28639:7;28669:17;28689:1;28669:21;;28714:15;:23;28730:6;28714:23;;;;;;;;;;;;;;;;;;;;;;;;;28711:229;;;28766:38;28800:3;28766:29;28777:17;;28766:6;:10;;:29;;;;:::i;:::-;:33;;:38;;;;:::i;:::-;28754:50;;28711:229;;;28834:15;:26;28850:9;28834:26;;;;;;;;;;;;;;;;;;;;;;;;;28831:109;;;28889:39;28924:3;28889:30;28900:18;;28889:6;:10;;:30;;;;:::i;:::-;:34;;:39;;;;:::i;:::-;28877:51;;28831:109;28711:229;28975:1;28963:9;:13;28960:173;;;29020:39;29049:9;29020;:24;29038:4;29020:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;28993:9;:24;29011:4;28993:24;;;;;;;;;;;;;;;:66;;;;29104:4;29079:42;;29088:6;29079:42;;;29111:9;29079:42;;;;;;:::i;:::-;;;;;;;;28960:173;29152:21;29163:9;29152:6;:10;;:21;;;;:::i;:::-;29145:28;;;28553:628;;;;;:::o;1718:250::-;1776:7;1805:1;1800;:6;1796:47;;;1830:1;1823:8;;;;1796:47;1855:9;1871:1;1867;:5;;;;:::i;:::-;1855:17;;1900:1;1895;1891;:5;;;;:::i;:::-;:10;1883:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;1959:1;1952:8;;;1718:250;;;;;:::o;1976:132::-;2034:7;2061:39;2065:1;2068;2061:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2054:46;;1976:132;;;;:::o;27358:666::-;27484:21;27522:1;27508:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27484:40;;27553:4;27535;27540:1;27535:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;27579:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27569:4;27574:1;27569:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;27614:62;27631:4;27646:15;;;;;;;;;;;27664:11;27614:8;:62::i;:::-;27715:15;;;;;;;;;;;:66;;;27796:11;27822:1;27866:4;27893;27929:15;27715:240;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27981:35;27998:11;28011:4;27981:35;;;;;;;:::i;:::-;;;;;;;;27413:611;27358:666;:::o;22656:126::-;22748:9;:18;;:26;22767:6;22748:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22656:126;;:::o;28032:513::-;28180:62;28197:4;28212:15;;;;;;;;;;;28230:11;28180:8;:62::i;:::-;28285:15;;;;;;;;;;;:31;;;28324:9;28357:4;28377:11;28403:1;28446;28489:7;:5;:7::i;:::-;28511:15;28285:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;28032:513;;:::o;2116:278::-;2202:7;2234:1;2230;:5;2237:12;2222:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2261:9;2277:1;2273;:5;;;;:::i;:::-;2261:17;;2385:1;2378:8;;;2116: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:108::-;5705:24;5723:5;5705:24;:::i;:::-;5700:3;5693:37;5628:108;;:::o;5742:118::-;5829:24;5847:5;5829:24;:::i;:::-;5824:3;5817:37;5742:118;;:::o;5896:732::-;6015:3;6044:54;6092:5;6044:54;:::i;:::-;6114:86;6193:6;6188:3;6114:86;:::i;:::-;6107:93;;6224:56;6274:5;6224:56;:::i;:::-;6303:7;6334:1;6319:284;6344:6;6341:1;6338:13;6319:284;;;6420:6;6414:13;6447:63;6506:3;6491:13;6447:63;:::i;:::-;6440:70;;6533:60;6586:6;6533:60;:::i;:::-;6523:70;;6379:224;6366:1;6363;6359:9;6354:14;;6319:284;;;6323:14;6619:3;6612:10;;6020:608;;;5896:732;;;;:::o;6634:109::-;6715:21;6730:5;6715:21;:::i;:::-;6710:3;6703:34;6634:109;;:::o;6749:185::-;6863:64;6921:5;6863:64;:::i;:::-;6858:3;6851:77;6749:185;;:::o;6940:147::-;7035:45;7074:5;7035:45;:::i;:::-;7030:3;7023:58;6940:147;;:::o;7093:364::-;7181:3;7209:39;7242:5;7209:39;:::i;:::-;7264:71;7328:6;7323:3;7264:71;:::i;:::-;7257:78;;7344:52;7389:6;7384:3;7377:4;7370:5;7366:16;7344:52;:::i;:::-;7421:29;7443:6;7421:29;:::i;:::-;7416:3;7412:39;7405:46;;7185:272;7093:364;;;;:::o;7463:366::-;7605:3;7626:67;7690:2;7685:3;7626:67;:::i;:::-;7619:74;;7702:93;7791:3;7702:93;:::i;:::-;7820:2;7815:3;7811:12;7804:19;;7463:366;;;:::o;7835:::-;7977:3;7998:67;8062:2;8057:3;7998:67;:::i;:::-;7991:74;;8074:93;8163:3;8074:93;:::i;:::-;8192:2;8187:3;8183:12;8176:19;;7835:366;;;:::o;8207:::-;8349:3;8370:67;8434:2;8429:3;8370:67;:::i;:::-;8363:74;;8446:93;8535:3;8446:93;:::i;:::-;8564:2;8559:3;8555:12;8548:19;;8207:366;;;:::o;8579:::-;8721:3;8742:67;8806:2;8801:3;8742:67;:::i;:::-;8735:74;;8818:93;8907:3;8818:93;:::i;:::-;8936:2;8931:3;8927:12;8920:19;;8579:366;;;:::o;8951:::-;9093:3;9114:67;9178:2;9173:3;9114:67;:::i;:::-;9107:74;;9190:93;9279:3;9190:93;:::i;:::-;9308:2;9303:3;9299:12;9292:19;;8951:366;;;:::o;9323:::-;9465:3;9486:67;9550:2;9545:3;9486:67;:::i;:::-;9479:74;;9562:93;9651:3;9562:93;:::i;:::-;9680:2;9675:3;9671:12;9664:19;;9323:366;;;:::o;9695:::-;9837:3;9858:67;9922:2;9917:3;9858:67;:::i;:::-;9851:74;;9934:93;10023:3;9934:93;:::i;:::-;10052:2;10047:3;10043:12;10036:19;;9695:366;;;:::o;10067:::-;10209:3;10230:67;10294:2;10289:3;10230:67;:::i;:::-;10223:74;;10306:93;10395:3;10306:93;:::i;:::-;10424:2;10419:3;10415:12;10408:19;;10067:366;;;:::o;10439:::-;10581:3;10602:67;10666:2;10661:3;10602:67;:::i;:::-;10595:74;;10678:93;10767:3;10678:93;:::i;:::-;10796:2;10791:3;10787:12;10780:19;;10439:366;;;:::o;10811:::-;10953:3;10974:67;11038:2;11033:3;10974:67;:::i;:::-;10967:74;;11050:93;11139:3;11050:93;:::i;:::-;11168:2;11163:3;11159:12;11152:19;;10811:366;;;:::o;11183:118::-;11270:24;11288:5;11270:24;:::i;:::-;11265:3;11258:37;11183:118;;:::o;11307:112::-;11390:22;11406:5;11390:22;:::i;:::-;11385:3;11378:35;11307:112;;:::o;11425:222::-;11518:4;11556:2;11545:9;11541:18;11533:26;;11569:71;11637:1;11626:9;11622:17;11613:6;11569:71;:::i;:::-;11425:222;;;;:::o;11653:332::-;11774:4;11812:2;11801:9;11797:18;11789:26;;11825:71;11893:1;11882:9;11878:17;11869:6;11825:71;:::i;:::-;11906:72;11974:2;11963:9;11959:18;11950:6;11906:72;:::i;:::-;11653:332;;;;;:::o;11991:807::-;12240:4;12278:3;12267:9;12263:19;12255:27;;12292:71;12360:1;12349:9;12345:17;12336:6;12292:71;:::i;:::-;12373:72;12441:2;12430:9;12426:18;12417:6;12373:72;:::i;:::-;12455:80;12531:2;12520:9;12516:18;12507:6;12455:80;:::i;:::-;12545;12621:2;12610:9;12606:18;12597:6;12545:80;:::i;:::-;12635:73;12703:3;12692:9;12688:19;12679:6;12635:73;:::i;:::-;12718;12786:3;12775:9;12771:19;12762:6;12718:73;:::i;:::-;11991:807;;;;;;;;;:::o;12804:210::-;12891:4;12929:2;12918:9;12914:18;12906:26;;12942:65;13004:1;12993:9;12989:17;12980:6;12942:65;:::i;:::-;12804:210;;;;:::o;13020:276::-;13140:4;13178:2;13167:9;13163:18;13155:26;;13191:98;13286:1;13275:9;13271:17;13262:6;13191:98;:::i;:::-;13020:276;;;;:::o;13302:313::-;13415:4;13453:2;13442:9;13438:18;13430:26;;13502:9;13496:4;13492:20;13488:1;13477:9;13473:17;13466:47;13530:78;13603:4;13594:6;13530:78;:::i;:::-;13522:86;;13302:313;;;;:::o;13621:419::-;13787:4;13825:2;13814:9;13810:18;13802:26;;13874:9;13868:4;13864:20;13860:1;13849:9;13845:17;13838:47;13902:131;14028:4;13902:131;:::i;:::-;13894:139;;13621:419;;;:::o;14046:::-;14212:4;14250:2;14239:9;14235:18;14227:26;;14299:9;14293:4;14289:20;14285:1;14274:9;14270:17;14263:47;14327:131;14453:4;14327:131;:::i;:::-;14319:139;;14046:419;;;:::o;14471:::-;14637:4;14675:2;14664:9;14660:18;14652:26;;14724:9;14718:4;14714:20;14710:1;14699:9;14695:17;14688:47;14752:131;14878:4;14752:131;:::i;:::-;14744:139;;14471:419;;;:::o;14896:::-;15062:4;15100:2;15089:9;15085:18;15077:26;;15149:9;15143:4;15139:20;15135:1;15124:9;15120:17;15113:47;15177:131;15303:4;15177:131;:::i;:::-;15169:139;;14896:419;;;:::o;15321:::-;15487:4;15525:2;15514:9;15510:18;15502:26;;15574:9;15568:4;15564:20;15560:1;15549:9;15545:17;15538:47;15602:131;15728:4;15602:131;:::i;:::-;15594:139;;15321:419;;;:::o;15746:::-;15912:4;15950:2;15939:9;15935:18;15927:26;;15999:9;15993:4;15989:20;15985:1;15974:9;15970:17;15963:47;16027:131;16153:4;16027:131;:::i;:::-;16019:139;;15746:419;;;:::o;16171:::-;16337:4;16375:2;16364:9;16360:18;16352:26;;16424:9;16418:4;16414:20;16410:1;16399:9;16395:17;16388:47;16452:131;16578:4;16452:131;:::i;:::-;16444:139;;16171:419;;;:::o;16596:::-;16762:4;16800:2;16789:9;16785:18;16777:26;;16849:9;16843:4;16839:20;16835:1;16824:9;16820:17;16813:47;16877:131;17003:4;16877:131;:::i;:::-;16869:139;;16596:419;;;:::o;17021:::-;17187:4;17225:2;17214:9;17210:18;17202:26;;17274:9;17268:4;17264:20;17260:1;17249:9;17245:17;17238:47;17302:131;17428:4;17302:131;:::i;:::-;17294:139;;17021:419;;;:::o;17446:::-;17612:4;17650:2;17639:9;17635:18;17627:26;;17699:9;17693:4;17689:20;17685:1;17674:9;17670:17;17663:47;17727:131;17853:4;17727:131;:::i;:::-;17719:139;;17446:419;;;:::o;17871:222::-;17964:4;18002:2;17991:9;17987:18;17979:26;;18015:71;18083:1;18072:9;18068:17;18059:6;18015:71;:::i;:::-;17871:222;;;;:::o;18099:483::-;18270:4;18308:2;18297:9;18293:18;18285:26;;18321:71;18389:1;18378:9;18374:17;18365:6;18321:71;:::i;:::-;18439:9;18433:4;18429:20;18424:2;18413:9;18409:18;18402:48;18467:108;18570:4;18561:6;18467:108;:::i;:::-;18459:116;;18099:483;;;;;:::o;18588:831::-;18851:4;18889:3;18878:9;18874:19;18866:27;;18903:71;18971:1;18960:9;18956:17;18947:6;18903:71;:::i;:::-;18984:80;19060:2;19049:9;19045:18;19036:6;18984:80;:::i;:::-;19111:9;19105:4;19101:20;19096:2;19085:9;19081:18;19074:48;19139:108;19242:4;19233:6;19139:108;:::i;:::-;19131:116;;19257:72;19325:2;19314:9;19310:18;19301:6;19257:72;:::i;:::-;19339:73;19407:3;19396:9;19392:19;19383:6;19339:73;:::i;:::-;18588:831;;;;;;;;:::o;19425:214::-;19514:4;19552:2;19541:9;19537:18;19529:26;;19565:67;19629:1;19618:9;19614:17;19605:6;19565:67;:::i;:::-;19425:214;;;;:::o;19726:132::-;19793:4;19816:3;19808:11;;19846:4;19841:3;19837:14;19829:22;;19726:132;;;:::o;19864:114::-;19931:6;19965:5;19959:12;19949:22;;19864:114;;;:::o;19984:99::-;20036:6;20070:5;20064:12;20054:22;;19984:99;;;:::o;20089:113::-;20159:4;20191;20186:3;20182:14;20174:22;;20089:113;;;:::o;20208:184::-;20307:11;20341:6;20336:3;20329:19;20381:4;20376:3;20372:14;20357:29;;20208:184;;;;:::o;20398:169::-;20482:11;20516:6;20511:3;20504:19;20556:4;20551:3;20547:14;20532:29;;20398:169;;;;:::o;20573:305::-;20613:3;20632:20;20650:1;20632:20;:::i;:::-;20627:25;;20666:20;20684:1;20666:20;:::i;:::-;20661:25;;20820:1;20752:66;20748:74;20745:1;20742:81;20739:107;;;20826:18;;:::i;:::-;20739:107;20870:1;20867;20863:9;20856:16;;20573:305;;;;:::o;20884:185::-;20924:1;20941:20;20959:1;20941:20;:::i;:::-;20936:25;;20975:20;20993:1;20975:20;:::i;:::-;20970:25;;21014:1;21004:35;;21019:18;;:::i;:::-;21004:35;21061:1;21058;21054:9;21049:14;;20884:185;;;;:::o;21075:348::-;21115:7;21138:20;21156:1;21138:20;:::i;:::-;21133:25;;21172:20;21190:1;21172:20;:::i;:::-;21167:25;;21360:1;21292:66;21288:74;21285:1;21282:81;21277:1;21270:9;21263:17;21259:105;21256:131;;;21367:18;;:::i;:::-;21256:131;21415:1;21412;21408:9;21397:20;;21075:348;;;;:::o;21429:191::-;21469:4;21489:20;21507:1;21489:20;:::i;:::-;21484:25;;21523:20;21541:1;21523:20;:::i;:::-;21518:25;;21562:1;21559;21556:8;21553:34;;;21567:18;;:::i;:::-;21553:34;21612:1;21609;21605:9;21597:17;;21429:191;;;;:::o;21626:96::-;21663:7;21692:24;21710:5;21692:24;:::i;:::-;21681:35;;21626:96;;;:::o;21728:90::-;21762:7;21805:5;21798:13;21791:21;21780:32;;21728:90;;;:::o;21824:126::-;21861:7;21901:42;21894:5;21890:54;21879:65;;21824:126;;;:::o;21956:77::-;21993:7;22022:5;22011:16;;21956:77;;;:::o;22039:86::-;22074:7;22114:4;22107:5;22103:16;22092:27;;22039:86;;;:::o;22131:153::-;22208:9;22241:37;22272:5;22241:37;:::i;:::-;22228:50;;22131:153;;;:::o;22290:121::-;22348:9;22381:24;22399:5;22381:24;:::i;:::-;22368:37;;22290:121;;;:::o;22417:126::-;22467:9;22500:37;22531:5;22500:37;:::i;:::-;22487:50;;22417:126;;;:::o;22549:113::-;22599:9;22632:24;22650:5;22632:24;:::i;:::-;22619:37;;22549:113;;;:::o;22668:307::-;22736:1;22746:113;22760:6;22757:1;22754:13;22746:113;;;22845:1;22840:3;22836:11;22830:18;22826:1;22821:3;22817:11;22810:39;22782:2;22779:1;22775:10;22770:15;;22746:113;;;22877:6;22874:1;22871:13;22868:101;;;22957:1;22948:6;22943:3;22939:16;22932:27;22868:101;22717:258;22668:307;;;:::o;22981:320::-;23025:6;23062:1;23056:4;23052:12;23042:22;;23109:1;23103:4;23099:12;23130:18;23120:81;;23186:4;23178:6;23174:17;23164:27;;23120:81;23248:2;23240:6;23237:14;23217:18;23214:38;23211:84;;;23267:18;;:::i;:::-;23211:84;23032:269;22981:320;;;:::o;23307:180::-;23355:77;23352:1;23345:88;23452:4;23449:1;23442:15;23476:4;23473:1;23466:15;23493:180;23541:77;23538:1;23531:88;23638:4;23635:1;23628:15;23662:4;23659:1;23652:15;23679:180;23727:77;23724:1;23717:88;23824:4;23821:1;23814:15;23848:4;23845:1;23838:15;23865:180;23913:77;23910:1;23903:88;24010:4;24007:1;24000:15;24034:4;24031:1;24024:15;24051:180;24099:77;24096:1;24089:88;24196:4;24193:1;24186:15;24220:4;24217:1;24210:15;24360:117;24469:1;24466;24459:12;24483:102;24524:6;24575:2;24571:7;24566:2;24559:5;24555:14;24551:28;24541:38;;24483:102;;;:::o;24591:222::-;24731:34;24727:1;24719:6;24715:14;24708:58;24800:5;24795:2;24787:6;24783:15;24776:30;24591:222;:::o;24819:239::-;24959:34;24955:1;24947:6;24943:14;24936:58;25028:22;25023:2;25015:6;25011:15;25004:47;24819:239;:::o;25064:225::-;25204:34;25200:1;25192:6;25188:14;25181:58;25273:8;25268:2;25260:6;25256:15;25249:33;25064:225;:::o;25295:221::-;25435:34;25431:1;25423:6;25419:14;25412:58;25504:4;25499:2;25491:6;25487:15;25480:29;25295:221;:::o;25522:177::-;25662:29;25658:1;25650:6;25646:14;25639:53;25522:177;:::o;25705:227::-;25845:34;25841:1;25833:6;25829:14;25822:58;25914:10;25909:2;25901:6;25897:15;25890:35;25705:227;:::o;25938:220::-;26078:34;26074:1;26066:6;26062:14;26055:58;26147:3;26142:2;26134:6;26130:15;26123:28;25938:220;:::o;26164:182::-;26304:34;26300:1;26292:6;26288:14;26281:58;26164:182;:::o;26352:224::-;26492:34;26488:1;26480:6;26476:14;26469:58;26561:7;26556:2;26548:6;26544:15;26537:32;26352:224;:::o;26582:223::-;26722:34;26718:1;26710:6;26706:14;26699:58;26791:6;26786:2;26778:6;26774:15;26767:31;26582:223;:::o;26811:122::-;26884:24;26902:5;26884:24;:::i;:::-;26877:5;26874:35;26864:63;;26923:1;26920;26913:12;26864:63;26811:122;:::o;26939:116::-;27009:21;27024:5;27009:21;:::i;:::-;27002:5;26999:32;26989:60;;27045:1;27042;27035:12;26989:60;26939:116;:::o;27061:122::-;27134:24;27152:5;27134:24;:::i;:::-;27127:5;27124:35;27114:63;;27173:1;27170;27163:12;27114:63;27061:122;:::o

Swarm Source

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