ETH Price: $3,478.22 (+6.20%)
Gas: 5 Gwei

Token

PSYCHO (PSYCHO)
 

Overview

Max Total Supply

69,420,420,420 PSYCHO

Holders

151

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
Null: 0x00...dEaD
Balance
9,844,270,527.239961761715676426 PSYCHO

Value
$0.00
0x000000000000000000000000000000000000dead
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:
PSYCHO

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/**

██████╗░░██████╗██╗░░░██╗░█████╗░██╗░░██╗░█████╗░
██╔══██╗██╔════╝╚██╗░██╔╝██╔══██╗██║░░██║██╔══██╗
██████╔╝╚█████╗░░╚████╔╝░██║░░╚═╝███████║██║░░██║
██╔═══╝░░╚═══██╗░░╚██╔╝░░██║░░██╗██╔══██║██║░░██║
██║░░░░░██████╔╝░░░██║░░░╚█████╔╝██║░░██║╚█████╔╝
╚═╝░░░░░╚═════╝░░░░╚═╝░░░░╚════╝░╚═╝░░╚═╝░╚════╝░

$PSYCHO - The Ultimate Burn Token
---------------------------------------------------------

*Founder/Dev*
Satoshi - twitter.com/DevSatoshi

---------------------------------------------------------
*Tax*
6% Buy - 6% Sell

Tax Break-Down
4% Burns
1% Liquidity

---------------------------------------------------------
*Token Allocation*
95% Into Liquidity (Locked & Burned)
2.5% Dev/Founder
2.5% Private Liquidity Provider

---------------------------------------------------------
This contract is verified for public view.
This contract passes on all security checks. (Low & High)

*/

// SPDX-License-Identifier: MIT
                                                    
pragma solidity 0.8.17;

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

    function _msgData() internal view virtual returns (bytes calldata) {
        this;
        return msg.data;
    }
}

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 Mint(address indexed sender, uint amount0, uint amount1);
    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 mint(address to) external returns (uint liquidity);
    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 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 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);
}

interface IERC20Metadata is IERC20 {

    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function decimals() external view returns (uint8);
}


contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;

    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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


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


    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

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

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

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

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

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

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

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

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

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        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 _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

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;

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

contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
  
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() public view returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

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



library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;

        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    function div(int256 a, int256 b) internal pure returns (int256) {

        require(b != -1 || a != MIN_INT256);

        return a / b;
    }

    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }

    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }


    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}

library SafeMathUint {
  function toInt256Safe(uint256 a) internal pure returns (int256) {
    int256 b = int256(a);
    require(b >= 0);
    return b;
  }
}


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 PSYCHO is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0xdead);

    bool private swapping;

    address public marketingWallet;
    address private devWallet;
    
    uint256 public swapTokensAtAmount;

    bool public swapEnabled = true;
    

    uint256 public buyTotalFees;
    uint256 private buyMarketingFee;
    uint256 private buyLiquidityFee;
    uint256 private buyDevFee;
    uint256 private buyBurnFee;
    
    uint256 public sellTotalFees;
    uint256 private sellMarketingFee;
    uint256 private sellLiquidityFee;
    uint256 private sellDevFee;
    uint256 private sellBurnFee;
    
    uint256 private tokensForMarketing;
    uint256 private tokensForLiquidity;
    uint256 private tokensForDev;
    uint256 private tokensForBurn;
    
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) private _isExcludedMaxTransactionAmount;

    mapping (address => bool) public automatedMarketMakerPairs;

    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event marketingWalletUpdated(address indexed newWallet, address indexed oldWallet);
    
    event devWalletUpdated(address indexed newWallet, address indexed oldWallet);

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    constructor() ERC20("PSYCHO", "PSYCHO") {

        address newOwner = address(msg.sender);
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D );
        
        uniswapV2Router = _uniswapV2Router;
        
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
        
        uint256 _buyMarketingFee = 1;
        uint256 _buyLiquidityFee = 1;
        uint256 _buyDevFee = 1;
        uint256 _buyBurnFee = 3;

        
        uint256 _sellMarketingFee = 1;
        uint256 _sellLiquidityFee = 1;
        uint256 _sellDevFee = 1;
        uint256 _sellBurnFee = 3;
        
        uint256 totalSupply = 69420420420 * 10**18;
        
        swapTokensAtAmount = 100000000 *10**18;

        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        buyBurnFee = _buyBurnFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee + buyBurnFee;
        
        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        sellBurnFee = _sellBurnFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee + sellBurnFee;
        
    	marketingWallet = address(0xcDE98bf13919296538Ad8749c2790587b7869e0f);
    	devWallet = address(0x1D080d0044797ED71eCce9084fa66469EFBa3a5f);

        excludeFromFees(newOwner, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(devWallet, true);
        excludeFromFees(marketingWallet, true);
        
        _mint(newOwner, totalSupply);
        transferOwnership(newOwner);
    }

    receive() external payable {

  	}

    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){
  	    require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
  	    require(newAmount <= totalSupply() * 5 / 1000, "Swap amount cannot be higher than 0.1% total supply.");
  	    swapTokensAtAmount = newAmount * (10**18);
  	    return true;
  	}
    
    function updateSwapEnabled(bool enabled) external onlyOwner(){
        swapEnabled = enabled;
    }
    
    function updateBuyFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee, uint256 _burnFee) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buyBurnFee = _burnFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee + buyBurnFee;
        require(buyTotalFees <= 15, "Must keep fees at 15% or less");
    }
    
    function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee, uint256 _burnFee) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        sellBurnFee = _burnFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee + sellBurnFee;
        require(sellTotalFees <= 15, "Must keep fees at 15% or less");
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs");

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateMarketingWallet(address newMarketingWallet) external onlyOwner {
        emit marketingWalletUpdated(newMarketingWallet, marketingWallet);
        marketingWallet = newMarketingWallet;
    }
    
    function updatedevWallet(address newWallet) external onlyOwner {
        emit devWalletUpdated(newWallet, devWallet);
        devWallet = newWallet;
    }
    

    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }
    
    event BoughtEarly(address indexed sniper);

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        
         if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
        
        
		uint256 contractTokenBalance = balanceOf(address(this));
        
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if( 
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;
            
            swapBack();

            swapping = false;
        }
        
        bool takeFee = !swapping;

        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
        
        uint256 fees = 0;
        if(takeFee){
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForDev += fees * sellDevFee / sellTotalFees;
                tokensForMarketing += fees * sellMarketingFee / sellTotalFees;
                tokensForBurn += fees * sellBurnFee / sellTotalFees;
            }
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
        	    fees = amount.mul(buyTotalFees).div(100);
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForDev += fees * buyDevFee / buyTotalFees;
                tokensForMarketing += fees * buyMarketingFee / buyTotalFees;
                tokensForBurn += fees * buyBurnFee / buyTotalFees;
            }
            
            if(fees > 0){    
                super._transfer(from, address(this), fees - tokensForBurn);
            }

            if(tokensForBurn > 0){
                super._transfer(from, address(deadAddress), tokensForBurn);
            }

            tokensForBurn = 0;
            
        	
        	amount -= fees;
        }

        super._transfer(from, to, amount);
    }

    function swapTokensForEth(uint256 tokenAmount) private {

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, 
            path,
            address(this),
            block.timestamp
        );
        
    }
    
    
    
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
 
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            deadAddress,
            block.timestamp
        );
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing + tokensForDev;
        
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}
    
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);
        
        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH); 
        
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        
        uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap);
        uint256 ethForBuyBack = ethBalance.mul(tokensForDev).div(totalTokensToSwap);
        
        
        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForBuyBack;
        
        
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;
        
        (bool success,) = address(marketingWallet).call{value: ethForMarketing}("");
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }
        
        (success,) = address(devWallet).call{value: address(this).balance}("");
    }
    
    function withdrawStuckETH() external onlyOwner{
        require (address(this).balance > 0, "Can't withdraw negative or zero");
        payable(owner()).transfer(address(this).balance);
    }

    function removeStuckToken(address _address) external onlyOwner {
        require(_address != address(this), "Can't withdraw tokens destined for liquidity");
        require(IERC20(_address).balanceOf(address(this)) > 0, "Can't withdraw 0");

        IERC20(_address).transfer(owner(), IERC20(_address).balanceOf(address(this)));
    }
}

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":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","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":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","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":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"removeStuckToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updatedevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600960006101000a81548160ff0219169083151502179055503480156200002c57600080fd5b506040518060400160405280600681526020017f50535943484f00000000000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f50535943484f00000000000000000000000000000000000000000000000000008152508160039081620000aa919062000e43565b508060049081620000bc919062000e43565b5050506000620000d1620005e960201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35060003390506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200020e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000234919062000f94565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200029c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002c2919062000f94565b6040518363ffffffff1660e01b8152600401620002e192919062000fd7565b6020604051808303816000875af115801562000301573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000327919062000f94565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200036f60a0516001620005f160201b60201c565b60006001905060006001905060006001905060006003905060006001905060006001905060006001905060006003905060006be04f39d3b6079da68a90000090506a52b7d2dcc80cd2e400000060088190555088600b8190555087600c8190555086600d8190555085600e81905550600e54600d54600c54600b54620003f6919062001033565b62000402919062001033565b6200040e919062001033565b600a819055508460108190555083601181905550826012819055508160138190555060135460125460115460105462000448919062001033565b62000454919062001033565b62000460919062001033565b600f8190555073cde98bf13919296538ad8749c2790587b7869e0f600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550731d080d0044797ed71ecce9084fa66469efba3a5f600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005238b60016200069260201b60201c565b620005363060016200069260201b60201c565b6200054b61dead60016200069260201b60201c565b62000580600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200069260201b60201c565b620005b5600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200069260201b60201c565b620005c78b82620007df60201b60201c565b620005d88b6200098d60201b60201c565b5050505050505050505050620012d5565b600033905090565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b620006a2620005e960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000734576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200072b90620010cf565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620007d391906200110e565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000851576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000848906200117b565b60405180910390fd5b620008656000838362000b6160201b60201c565b620008818160025462000b6660201b62001ecd1790919060201c565b600281905550620008df816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000b6660201b62001ecd1790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620009819190620011ae565b60405180910390a35050565b6200099d620005e960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000a2f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a2690620010cf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000aa1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a989062001241565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b505050565b600080828462000b77919062001033565b90508381101562000bbf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000bb690620012b3565b60405180910390fd5b8091505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000c4b57607f821691505b60208210810362000c615762000c6062000c03565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000ccb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000c8c565b62000cd7868362000c8c565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000d2462000d1e62000d188462000cef565b62000cf9565b62000cef565b9050919050565b6000819050919050565b62000d408362000d03565b62000d5862000d4f8262000d2b565b84845462000c99565b825550505050565b600090565b62000d6f62000d60565b62000d7c81848462000d35565b505050565b5b8181101562000da45762000d9860008262000d65565b60018101905062000d82565b5050565b601f82111562000df35762000dbd8162000c67565b62000dc88462000c7c565b8101602085101562000dd8578190505b62000df062000de78562000c7c565b83018262000d81565b50505b505050565b600082821c905092915050565b600062000e186000198460080262000df8565b1980831691505092915050565b600062000e33838362000e05565b9150826002028217905092915050565b62000e4e8262000bc9565b67ffffffffffffffff81111562000e6a5762000e6962000bd4565b5b62000e76825462000c32565b62000e8382828562000da8565b600060209050601f83116001811462000ebb576000841562000ea6578287015190505b62000eb2858262000e25565b86555062000f22565b601f19841662000ecb8662000c67565b60005b8281101562000ef55784890151825560018201915060208501945060208101905062000ece565b8683101562000f15578489015162000f11601f89168262000e05565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000f5c8262000f2f565b9050919050565b62000f6e8162000f4f565b811462000f7a57600080fd5b50565b60008151905062000f8e8162000f63565b92915050565b60006020828403121562000fad5762000fac62000f2a565b5b600062000fbd8482850162000f7d565b91505092915050565b62000fd18162000f4f565b82525050565b600060408201905062000fee600083018562000fc6565b62000ffd602083018462000fc6565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620010408262000cef565b91506200104d8362000cef565b925082820190508082111562001068576200106762001004565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620010b76020836200106e565b9150620010c4826200107f565b602082019050919050565b60006020820190508181036000830152620010ea81620010a8565b9050919050565b60008115159050919050565b6200110881620010f1565b82525050565b6000602082019050620011256000830184620010fd565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001163601f836200106e565b915062001170826200112b565b602082019050919050565b60006020820190508181036000830152620011968162001154565b9050919050565b620011a88162000cef565b82525050565b6000602082019050620011c560008301846200119d565b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000620012296026836200106e565b91506200123682620011cb565b604082019050919050565b600060208201905081810360008301526200125c816200121a565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006200129b601b836200106e565b9150620012a88262001263565b602082019050919050565b60006020820190508181036000830152620012ce816200128c565b9050919050565b60805160a0516144e06200132560003960008181610be301526110430152600081816108eb01528181612f6d0152818161304e0152818161307501528181613111015261313801526144e06000f3fe6080604052600436106101fd5760003560e01c8063924de9b71161010d578063d257b34f116100a0578063e2f456051161006f578063e2f456051461077c578063e7ad9fcd146107a7578063f2fde38b146107d0578063f5648a4f146107f9578063fc1704411461081057610204565b8063d257b34f146106ae578063d85ba063146106eb578063dd62ed3e14610716578063e083e9221461075357610204565b8063a9059cbb116100dc578063a9059cbb146105e2578063aacebbe31461061f578063b62496f514610648578063c02466681461068557610204565b8063924de9b71461052857806395d89b41146105515780639a7a23d61461057c578063a457c2d7146105a557610204565b806339509351116101905780636ddd17131161015f5780636ddd17131461045357806370a082311461047e578063715018a6146104bb57806375f0a874146104d25780638da5cb5b146104fd57610204565b8063395093511461038357806349bd5a5e146103c05780634fbee193146103eb5780636a486a8e1461042857610204565b806323b872dd116101cc57806323b872dd146102c757806327c8f835146103045780632e6ed7ef1461032f578063313ce5671461035857610204565b806306fdde0314610209578063095ea7b3146102345780631694505e1461027157806318160ddd1461029c57610204565b3661020457005b600080fd5b34801561021557600080fd5b5061021e610839565b60405161022b91906132da565b60405180910390f35b34801561024057600080fd5b5061025b60048036038101906102569190613395565b6108cb565b60405161026891906133f0565b60405180910390f35b34801561027d57600080fd5b506102866108e9565b604051610293919061346a565b60405180910390f35b3480156102a857600080fd5b506102b161090d565b6040516102be9190613494565b60405180910390f35b3480156102d357600080fd5b506102ee60048036038101906102e991906134af565b610917565b6040516102fb91906133f0565b60405180910390f35b34801561031057600080fd5b506103196109f0565b6040516103269190613511565b60405180910390f35b34801561033b57600080fd5b506103566004803603810190610351919061352c565b6109f6565b005b34801561036457600080fd5b5061036d610b25565b60405161037a91906135af565b60405180910390f35b34801561038f57600080fd5b506103aa60048036038101906103a59190613395565b610b2e565b6040516103b791906133f0565b60405180910390f35b3480156103cc57600080fd5b506103d5610be1565b6040516103e29190613511565b60405180910390f35b3480156103f757600080fd5b50610412600480360381019061040d91906135ca565b610c05565b60405161041f91906133f0565b60405180910390f35b34801561043457600080fd5b5061043d610c5b565b60405161044a9190613494565b60405180910390f35b34801561045f57600080fd5b50610468610c61565b60405161047591906133f0565b60405180910390f35b34801561048a57600080fd5b506104a560048036038101906104a091906135ca565b610c74565b6040516104b29190613494565b60405180910390f35b3480156104c757600080fd5b506104d0610cbc565b005b3480156104de57600080fd5b506104e7610e14565b6040516104f49190613511565b60405180910390f35b34801561050957600080fd5b50610512610e3a565b60405161051f9190613511565b60405180910390f35b34801561053457600080fd5b5061054f600480360381019061054a9190613623565b610e64565b005b34801561055d57600080fd5b50610566610f18565b60405161057391906132da565b60405180910390f35b34801561058857600080fd5b506105a3600480360381019061059e9190613650565b610faa565b005b3480156105b157600080fd5b506105cc60048036038101906105c79190613395565b6110dd565b6040516105d991906133f0565b60405180910390f35b3480156105ee57600080fd5b5061060960048036038101906106049190613395565b6111aa565b60405161061691906133f0565b60405180910390f35b34801561062b57600080fd5b50610646600480360381019061064191906135ca565b6111c8565b005b34801561065457600080fd5b5061066f600480360381019061066a91906135ca565b61131f565b60405161067c91906133f0565b60405180910390f35b34801561069157600080fd5b506106ac60048036038101906106a79190613650565b61133f565b005b3480156106ba57600080fd5b506106d560048036038101906106d09190613690565b61147f565b6040516106e291906133f0565b60405180910390f35b3480156106f757600080fd5b50610700611602565b60405161070d9190613494565b60405180910390f35b34801561072257600080fd5b5061073d600480360381019061073891906136bd565b611608565b60405161074a9190613494565b60405180910390f35b34801561075f57600080fd5b5061077a600480360381019061077591906135ca565b61168f565b005b34801561078857600080fd5b50610791611952565b60405161079e9190613494565b60405180910390f35b3480156107b357600080fd5b506107ce60048036038101906107c9919061352c565b611958565b005b3480156107dc57600080fd5b506107f760048036038101906107f291906135ca565b611a86565b005b34801561080557600080fd5b5061080e611c4c565b005b34801561081c57600080fd5b50610837600480360381019061083291906135ca565b611d76565b005b6060600380546108489061372c565b80601f01602080910402602001604051908101604052809291908181526020018280546108749061372c565b80156108c15780601f10610896576101008083540402835291602001916108c1565b820191906000526020600020905b8154815290600101906020018083116108a457829003601f168201915b5050505050905090565b60006108df6108d8611f2b565b8484611f33565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b60006109248484846120fc565b6109e584610930611f2b565b6109e08560405180606001604052806028815260200161445e60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610996611f2b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127669092919063ffffffff16565b611f33565b600190509392505050565b61dead81565b6109fe611f2b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a84906137a9565b60405180910390fd5b83600b8190555082600c8190555081600d8190555080600e81905550600e54600d54600c54600b54610abf91906137f8565b610ac991906137f8565b610ad391906137f8565b600a81905550600f600a541115610b1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1690613878565b60405180910390fd5b50505050565b60006012905090565b6000610bd7610b3b611f2b565b84610bd28560016000610b4c611f2b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ecd90919063ffffffff16565b611f33565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600f5481565b600960009054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610cc4611f2b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4a906137a9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610e6c611f2b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610efb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef2906137a9565b60405180910390fd5b80600960006101000a81548160ff02191690831515021790555050565b606060048054610f279061372c565b80601f0160208091040260200160405190810160405280929190818152602001828054610f539061372c565b8015610fa05780601f10610f7557610100808354040283529160200191610fa0565b820191906000526020600020905b815481529060010190602001808311610f8357829003601f168201915b5050505050905090565b610fb2611f2b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611041576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611038906137a9565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036110cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c69061390a565b60405180910390fd5b6110d982826127ca565b5050565b60006111a06110ea611f2b565b8461119b856040518060600160405280602581526020016144866025913960016000611114611f2b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127669092919063ffffffff16565b611f33565b6001905092915050565b60006111be6111b7611f2b565b84846120fc565b6001905092915050565b6111d0611f2b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461125f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611256906137a9565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601a6020528060005260406000206000915054906101000a900460ff1681565b611347611f2b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113cd906137a9565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161147391906133f0565b60405180910390a25050565b6000611489611f2b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611518576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150f906137a9565b60405180910390fd5b620186a0600161152661090d565b611530919061392a565b61153a919061399b565b82101561157c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157390613a3e565b60405180910390fd5b6103e8600561158961090d565b611593919061392a565b61159d919061399b565b8211156115df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d690613ad0565b60405180910390fd5b670de0b6b3a7640000826115f3919061392a565b60088190555060019050919050565b600a5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611697611f2b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611726576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171d906137a9565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611794576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178b90613b62565b60405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016117cf9190613511565b602060405180830381865afa1580156117ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118109190613b97565b11611850576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184790613c10565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb611874610e3a565b8373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016118ad9190613511565b602060405180830381865afa1580156118ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ee9190613b97565b6040518363ffffffff1660e01b815260040161190b929190613c30565b6020604051808303816000875af115801561192a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061194e9190613c6e565b5050565b60085481565b611960611f2b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e6906137a9565b60405180910390fd5b83601081905550826011819055508160128190555080601381905550601354601254601154601054611a2191906137f8565b611a2b91906137f8565b611a3591906137f8565b600f81905550600f80541115611a80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7790613878565b60405180910390fd5b50505050565b611a8e611f2b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b14906137a9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611b8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8390613d0d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611c54611f2b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ce3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cda906137a9565b60405180910390fd5b60004711611d26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1d90613d79565b60405180910390fd5b611d2e610e3a565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611d73573d6000803e3d6000fd5b50565b611d7e611f2b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e04906137a9565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000808284611edc91906137f8565b905083811015611f21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1890613de5565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611fa2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9990613e77565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612011576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200890613f09565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516120ef9190613494565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361216b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216290613f9b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036121da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d19061402d565b60405180910390fd5b600081036121f3576121ee8383600061286b565b612761565b60006121fe30610c74565b9050600060085482101590508080156122235750600960009054906101000a900460ff165b801561223c5750600560149054906101000a900460ff16155b80156122925750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156122e85750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561233e5750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612382576001600560146101000a81548160ff021916908315150217905550612366612afe565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806124385750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561244257600090505b6000811561275157601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156124a557506000600f54115b156125a5576124d260646124c4600f5488612dbb90919063ffffffff16565b612e3590919063ffffffff16565b9050600f54601154826124e5919061392a565b6124ef919061399b565b6015600082825461250091906137f8565b92505081905550600f5460125482612518919061392a565b612522919061399b565b6016600082825461253391906137f8565b92505081905550600f546010548261254b919061392a565b612555919061399b565b6014600082825461256691906137f8565b92505081905550600f546013548261257e919061392a565b612588919061399b565b6017600082825461259991906137f8565b925050819055506126fd565b601a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561260057506000600a54115b156126fc5761262d606461261f600a5488612dbb90919063ffffffff16565b612e3590919063ffffffff16565b9050600a54600c5482612640919061392a565b61264a919061399b565b6015600082825461265b91906137f8565b92505081905550600a54600d5482612673919061392a565b61267d919061399b565b6016600082825461268e91906137f8565b92505081905550600a54600b54826126a6919061392a565b6126b0919061399b565b601460008282546126c191906137f8565b92505081905550600a54600e54826126d9919061392a565b6126e3919061399b565b601760008282546126f491906137f8565b925050819055505b5b600081111561271f5761271e873060175484612719919061404d565b61286b565b5b6000601754111561273a576127398761dead60175461286b565b5b6000601781905550808561274e919061404d565b94505b61275c87878761286b565b505050505b505050565b60008383111582906127ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a591906132da565b60405180910390fd5b50600083856127bd919061404d565b9050809150509392505050565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036128da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128d190613f9b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612949576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129409061402d565b60405180910390fd5b612954838383612e7f565b6129bf81604051806060016040528060268152602001614438602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127669092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612a52816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ecd90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612af19190613494565b60405180910390a3505050565b6000612b0930610c74565b90506000601654601454601554612b2091906137f8565b612b2a91906137f8565b90506000821480612b3b5750600081145b15612b47575050612db9565b600060028260155485612b5a919061392a565b612b64919061399b565b612b6e919061399b565b90506000612b858285612e8490919063ffffffff16565b90506000479050612b9582612ece565b6000612baa8247612e8490919063ffffffff16565b90506000612bd586612bc760145485612dbb90919063ffffffff16565b612e3590919063ffffffff16565b90506000612c0087612bf260165486612dbb90919063ffffffff16565b612e3590919063ffffffff16565b90506000818385612c11919061404d565b612c1b919061404d565b90506000601581905550600060148190555060006016819055506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1684604051612c7d906140b2565b60006040518083038185875af1925050503d8060008114612cba576040519150601f19603f3d011682016040523d82523d6000602084013e612cbf565b606091505b50509050600088118015612cd35750600082115b15612d2057612ce2888361310b565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618783601554604051612d17939291906140c7565b60405180910390a15b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051612d66906140b2565b60006040518083038185875af1925050503d8060008114612da3576040519150601f19603f3d011682016040523d82523d6000602084013e612da8565b606091505b505080915050505050505050505050505b565b6000808303612dcd5760009050612e2f565b60008284612ddb919061392a565b9050828482612dea919061399b565b14612e2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e2190614170565b60405180910390fd5b809150505b92915050565b6000612e7783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506131e7565b905092915050565b505050565b6000612ec683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612766565b905092915050565b6000600267ffffffffffffffff811115612eeb57612eea614190565b5b604051908082528060200260200182016040528015612f195781602001602082028036833780820191505090505b5090503081600081518110612f3157612f306141bf565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612fd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ffa9190614203565b8160018151811061300e5761300d6141bf565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613073307f000000000000000000000000000000000000000000000000000000000000000084611f33565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016130d5959493929190614329565b600060405180830381600087803b1580156130ef57600080fd5b505af1158015613103573d6000803e3d6000fd5b505050505050565b613136307f000000000000000000000000000000000000000000000000000000000000000084611f33565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b815260040161319d96959493929190614383565b60606040518083038185885af11580156131bb573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906131e091906143e4565b5050505050565b6000808311829061322e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161322591906132da565b60405180910390fd5b506000838561323d919061399b565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613284578082015181840152602081019050613269565b60008484015250505050565b6000601f19601f8301169050919050565b60006132ac8261324a565b6132b68185613255565b93506132c6818560208601613266565b6132cf81613290565b840191505092915050565b600060208201905081810360008301526132f481846132a1565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061332c82613301565b9050919050565b61333c81613321565b811461334757600080fd5b50565b60008135905061335981613333565b92915050565b6000819050919050565b6133728161335f565b811461337d57600080fd5b50565b60008135905061338f81613369565b92915050565b600080604083850312156133ac576133ab6132fc565b5b60006133ba8582860161334a565b92505060206133cb85828601613380565b9150509250929050565b60008115159050919050565b6133ea816133d5565b82525050565b600060208201905061340560008301846133e1565b92915050565b6000819050919050565b600061343061342b61342684613301565b61340b565b613301565b9050919050565b600061344282613415565b9050919050565b600061345482613437565b9050919050565b61346481613449565b82525050565b600060208201905061347f600083018461345b565b92915050565b61348e8161335f565b82525050565b60006020820190506134a96000830184613485565b92915050565b6000806000606084860312156134c8576134c76132fc565b5b60006134d68682870161334a565b93505060206134e78682870161334a565b92505060406134f886828701613380565b9150509250925092565b61350b81613321565b82525050565b60006020820190506135266000830184613502565b92915050565b60008060008060808587031215613546576135456132fc565b5b600061355487828801613380565b945050602061356587828801613380565b935050604061357687828801613380565b925050606061358787828801613380565b91505092959194509250565b600060ff82169050919050565b6135a981613593565b82525050565b60006020820190506135c460008301846135a0565b92915050565b6000602082840312156135e0576135df6132fc565b5b60006135ee8482850161334a565b91505092915050565b613600816133d5565b811461360b57600080fd5b50565b60008135905061361d816135f7565b92915050565b600060208284031215613639576136386132fc565b5b60006136478482850161360e565b91505092915050565b60008060408385031215613667576136666132fc565b5b60006136758582860161334a565b92505060206136868582860161360e565b9150509250929050565b6000602082840312156136a6576136a56132fc565b5b60006136b484828501613380565b91505092915050565b600080604083850312156136d4576136d36132fc565b5b60006136e28582860161334a565b92505060206136f38582860161334a565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061374457607f821691505b602082108103613757576137566136fd565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613793602083613255565b915061379e8261375d565b602082019050919050565b600060208201905081810360008301526137c281613786565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006138038261335f565b915061380e8361335f565b9250828201905080821115613826576138256137c9565b5b92915050565b7f4d757374206b656570206665657320617420313525206f72206c657373000000600082015250565b6000613862601d83613255565b915061386d8261382c565b602082019050919050565b6000602082019050818103600083015261389181613855565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006138f4603983613255565b91506138ff82613898565b604082019050919050565b60006020820190508181036000830152613923816138e7565b9050919050565b60006139358261335f565b91506139408361335f565b925082820261394e8161335f565b91508282048414831517613965576139646137c9565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006139a68261335f565b91506139b18361335f565b9250826139c1576139c061396c565b5b828204905092915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000613a28603583613255565b9150613a33826139cc565b604082019050919050565b60006020820190508181036000830152613a5781613a1b565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e312520746f74616c20737570706c792e000000000000000000000000602082015250565b6000613aba603483613255565b9150613ac582613a5e565b604082019050919050565b60006020820190508181036000830152613ae981613aad565b9050919050565b7f43616e277420776974686472617720746f6b656e732064657374696e6564206660008201527f6f72206c69717569646974790000000000000000000000000000000000000000602082015250565b6000613b4c602c83613255565b9150613b5782613af0565b604082019050919050565b60006020820190508181036000830152613b7b81613b3f565b9050919050565b600081519050613b9181613369565b92915050565b600060208284031215613bad57613bac6132fc565b5b6000613bbb84828501613b82565b91505092915050565b7f43616e2774207769746864726177203000000000000000000000000000000000600082015250565b6000613bfa601083613255565b9150613c0582613bc4565b602082019050919050565b60006020820190508181036000830152613c2981613bed565b9050919050565b6000604082019050613c456000830185613502565b613c526020830184613485565b9392505050565b600081519050613c68816135f7565b92915050565b600060208284031215613c8457613c836132fc565b5b6000613c9284828501613c59565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613cf7602683613255565b9150613d0282613c9b565b604082019050919050565b60006020820190508181036000830152613d2681613cea565b9050919050565b7f43616e2774207769746864726177206e65676174697665206f72207a65726f00600082015250565b6000613d63601f83613255565b9150613d6e82613d2d565b602082019050919050565b60006020820190508181036000830152613d9281613d56565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613dcf601b83613255565b9150613dda82613d99565b602082019050919050565b60006020820190508181036000830152613dfe81613dc2565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613e61602483613255565b9150613e6c82613e05565b604082019050919050565b60006020820190508181036000830152613e9081613e54565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613ef3602283613255565b9150613efe82613e97565b604082019050919050565b60006020820190508181036000830152613f2281613ee6565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613f85602583613255565b9150613f9082613f29565b604082019050919050565b60006020820190508181036000830152613fb481613f78565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614017602383613255565b915061402282613fbb565b604082019050919050565b600060208201905081810360008301526140468161400a565b9050919050565b60006140588261335f565b91506140638361335f565b925082820390508181111561407b5761407a6137c9565b5b92915050565b600081905092915050565b50565b600061409c600083614081565b91506140a78261408c565b600082019050919050565b60006140bd8261408f565b9150819050919050565b60006060820190506140dc6000830186613485565b6140e96020830185613485565b6140f66040830184613485565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061415a602183613255565b9150614165826140fe565b604082019050919050565b600060208201905081810360008301526141898161414d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506141fd81613333565b92915050565b600060208284031215614219576142186132fc565b5b6000614227848285016141ee565b91505092915050565b6000819050919050565b600061425561425061424b84614230565b61340b565b61335f565b9050919050565b6142658161423a565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6142a081613321565b82525050565b60006142b28383614297565b60208301905092915050565b6000602082019050919050565b60006142d68261426b565b6142e08185614276565b93506142eb83614287565b8060005b8381101561431c57815161430388826142a6565b975061430e836142be565b9250506001810190506142ef565b5085935050505092915050565b600060a08201905061433e6000830188613485565b61434b602083018761425c565b818103604083015261435d81866142cb565b905061436c6060830185613502565b6143796080830184613485565b9695505050505050565b600060c0820190506143986000830189613502565b6143a56020830188613485565b6143b2604083018761425c565b6143bf606083018661425c565b6143cc6080830185613502565b6143d960a0830184613485565b979650505050505050565b6000806000606084860312156143fd576143fc6132fc565b5b600061440b86828701613b82565b935050602061441c86828701613b82565b925050604061442d86828701613b82565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220d21a549d32d503a7e01e8523de67e6a363580068a7c503c5b71dc8ade11792f264736f6c63430008110033

Deployed Bytecode

0x6080604052600436106101fd5760003560e01c8063924de9b71161010d578063d257b34f116100a0578063e2f456051161006f578063e2f456051461077c578063e7ad9fcd146107a7578063f2fde38b146107d0578063f5648a4f146107f9578063fc1704411461081057610204565b8063d257b34f146106ae578063d85ba063146106eb578063dd62ed3e14610716578063e083e9221461075357610204565b8063a9059cbb116100dc578063a9059cbb146105e2578063aacebbe31461061f578063b62496f514610648578063c02466681461068557610204565b8063924de9b71461052857806395d89b41146105515780639a7a23d61461057c578063a457c2d7146105a557610204565b806339509351116101905780636ddd17131161015f5780636ddd17131461045357806370a082311461047e578063715018a6146104bb57806375f0a874146104d25780638da5cb5b146104fd57610204565b8063395093511461038357806349bd5a5e146103c05780634fbee193146103eb5780636a486a8e1461042857610204565b806323b872dd116101cc57806323b872dd146102c757806327c8f835146103045780632e6ed7ef1461032f578063313ce5671461035857610204565b806306fdde0314610209578063095ea7b3146102345780631694505e1461027157806318160ddd1461029c57610204565b3661020457005b600080fd5b34801561021557600080fd5b5061021e610839565b60405161022b91906132da565b60405180910390f35b34801561024057600080fd5b5061025b60048036038101906102569190613395565b6108cb565b60405161026891906133f0565b60405180910390f35b34801561027d57600080fd5b506102866108e9565b604051610293919061346a565b60405180910390f35b3480156102a857600080fd5b506102b161090d565b6040516102be9190613494565b60405180910390f35b3480156102d357600080fd5b506102ee60048036038101906102e991906134af565b610917565b6040516102fb91906133f0565b60405180910390f35b34801561031057600080fd5b506103196109f0565b6040516103269190613511565b60405180910390f35b34801561033b57600080fd5b506103566004803603810190610351919061352c565b6109f6565b005b34801561036457600080fd5b5061036d610b25565b60405161037a91906135af565b60405180910390f35b34801561038f57600080fd5b506103aa60048036038101906103a59190613395565b610b2e565b6040516103b791906133f0565b60405180910390f35b3480156103cc57600080fd5b506103d5610be1565b6040516103e29190613511565b60405180910390f35b3480156103f757600080fd5b50610412600480360381019061040d91906135ca565b610c05565b60405161041f91906133f0565b60405180910390f35b34801561043457600080fd5b5061043d610c5b565b60405161044a9190613494565b60405180910390f35b34801561045f57600080fd5b50610468610c61565b60405161047591906133f0565b60405180910390f35b34801561048a57600080fd5b506104a560048036038101906104a091906135ca565b610c74565b6040516104b29190613494565b60405180910390f35b3480156104c757600080fd5b506104d0610cbc565b005b3480156104de57600080fd5b506104e7610e14565b6040516104f49190613511565b60405180910390f35b34801561050957600080fd5b50610512610e3a565b60405161051f9190613511565b60405180910390f35b34801561053457600080fd5b5061054f600480360381019061054a9190613623565b610e64565b005b34801561055d57600080fd5b50610566610f18565b60405161057391906132da565b60405180910390f35b34801561058857600080fd5b506105a3600480360381019061059e9190613650565b610faa565b005b3480156105b157600080fd5b506105cc60048036038101906105c79190613395565b6110dd565b6040516105d991906133f0565b60405180910390f35b3480156105ee57600080fd5b5061060960048036038101906106049190613395565b6111aa565b60405161061691906133f0565b60405180910390f35b34801561062b57600080fd5b50610646600480360381019061064191906135ca565b6111c8565b005b34801561065457600080fd5b5061066f600480360381019061066a91906135ca565b61131f565b60405161067c91906133f0565b60405180910390f35b34801561069157600080fd5b506106ac60048036038101906106a79190613650565b61133f565b005b3480156106ba57600080fd5b506106d560048036038101906106d09190613690565b61147f565b6040516106e291906133f0565b60405180910390f35b3480156106f757600080fd5b50610700611602565b60405161070d9190613494565b60405180910390f35b34801561072257600080fd5b5061073d600480360381019061073891906136bd565b611608565b60405161074a9190613494565b60405180910390f35b34801561075f57600080fd5b5061077a600480360381019061077591906135ca565b61168f565b005b34801561078857600080fd5b50610791611952565b60405161079e9190613494565b60405180910390f35b3480156107b357600080fd5b506107ce60048036038101906107c9919061352c565b611958565b005b3480156107dc57600080fd5b506107f760048036038101906107f291906135ca565b611a86565b005b34801561080557600080fd5b5061080e611c4c565b005b34801561081c57600080fd5b50610837600480360381019061083291906135ca565b611d76565b005b6060600380546108489061372c565b80601f01602080910402602001604051908101604052809291908181526020018280546108749061372c565b80156108c15780601f10610896576101008083540402835291602001916108c1565b820191906000526020600020905b8154815290600101906020018083116108a457829003601f168201915b5050505050905090565b60006108df6108d8611f2b565b8484611f33565b6001905092915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b60006109248484846120fc565b6109e584610930611f2b565b6109e08560405180606001604052806028815260200161445e60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610996611f2b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127669092919063ffffffff16565b611f33565b600190509392505050565b61dead81565b6109fe611f2b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a84906137a9565b60405180910390fd5b83600b8190555082600c8190555081600d8190555080600e81905550600e54600d54600c54600b54610abf91906137f8565b610ac991906137f8565b610ad391906137f8565b600a81905550600f600a541115610b1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1690613878565b60405180910390fd5b50505050565b60006012905090565b6000610bd7610b3b611f2b565b84610bd28560016000610b4c611f2b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ecd90919063ffffffff16565b611f33565b6001905092915050565b7f000000000000000000000000efcc94dae91e2202330aa559687875c05d0847fc81565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600f5481565b600960009054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610cc4611f2b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4a906137a9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610e6c611f2b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610efb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef2906137a9565b60405180910390fd5b80600960006101000a81548160ff02191690831515021790555050565b606060048054610f279061372c565b80601f0160208091040260200160405190810160405280929190818152602001828054610f539061372c565b8015610fa05780601f10610f7557610100808354040283529160200191610fa0565b820191906000526020600020905b815481529060010190602001808311610f8357829003601f168201915b5050505050905090565b610fb2611f2b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611041576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611038906137a9565b60405180910390fd5b7f000000000000000000000000efcc94dae91e2202330aa559687875c05d0847fc73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036110cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c69061390a565b60405180910390fd5b6110d982826127ca565b5050565b60006111a06110ea611f2b565b8461119b856040518060600160405280602581526020016144866025913960016000611114611f2b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127669092919063ffffffff16565b611f33565b6001905092915050565b60006111be6111b7611f2b565b84846120fc565b6001905092915050565b6111d0611f2b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461125f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611256906137a9565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601a6020528060005260406000206000915054906101000a900460ff1681565b611347611f2b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113cd906137a9565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161147391906133f0565b60405180910390a25050565b6000611489611f2b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611518576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150f906137a9565b60405180910390fd5b620186a0600161152661090d565b611530919061392a565b61153a919061399b565b82101561157c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157390613a3e565b60405180910390fd5b6103e8600561158961090d565b611593919061392a565b61159d919061399b565b8211156115df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d690613ad0565b60405180910390fd5b670de0b6b3a7640000826115f3919061392a565b60088190555060019050919050565b600a5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611697611f2b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611726576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171d906137a9565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611794576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178b90613b62565b60405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016117cf9190613511565b602060405180830381865afa1580156117ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118109190613b97565b11611850576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184790613c10565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb611874610e3a565b8373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016118ad9190613511565b602060405180830381865afa1580156118ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ee9190613b97565b6040518363ffffffff1660e01b815260040161190b929190613c30565b6020604051808303816000875af115801561192a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061194e9190613c6e565b5050565b60085481565b611960611f2b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e6906137a9565b60405180910390fd5b83601081905550826011819055508160128190555080601381905550601354601254601154601054611a2191906137f8565b611a2b91906137f8565b611a3591906137f8565b600f81905550600f80541115611a80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7790613878565b60405180910390fd5b50505050565b611a8e611f2b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b14906137a9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611b8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8390613d0d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611c54611f2b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ce3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cda906137a9565b60405180910390fd5b60004711611d26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1d90613d79565b60405180910390fd5b611d2e610e3a565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611d73573d6000803e3d6000fd5b50565b611d7e611f2b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e04906137a9565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000808284611edc91906137f8565b905083811015611f21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1890613de5565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611fa2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9990613e77565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612011576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200890613f09565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516120ef9190613494565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361216b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216290613f9b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036121da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d19061402d565b60405180910390fd5b600081036121f3576121ee8383600061286b565b612761565b60006121fe30610c74565b9050600060085482101590508080156122235750600960009054906101000a900460ff165b801561223c5750600560149054906101000a900460ff16155b80156122925750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156122e85750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561233e5750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612382576001600560146101000a81548160ff021916908315150217905550612366612afe565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806124385750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561244257600090505b6000811561275157601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156124a557506000600f54115b156125a5576124d260646124c4600f5488612dbb90919063ffffffff16565b612e3590919063ffffffff16565b9050600f54601154826124e5919061392a565b6124ef919061399b565b6015600082825461250091906137f8565b92505081905550600f5460125482612518919061392a565b612522919061399b565b6016600082825461253391906137f8565b92505081905550600f546010548261254b919061392a565b612555919061399b565b6014600082825461256691906137f8565b92505081905550600f546013548261257e919061392a565b612588919061399b565b6017600082825461259991906137f8565b925050819055506126fd565b601a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561260057506000600a54115b156126fc5761262d606461261f600a5488612dbb90919063ffffffff16565b612e3590919063ffffffff16565b9050600a54600c5482612640919061392a565b61264a919061399b565b6015600082825461265b91906137f8565b92505081905550600a54600d5482612673919061392a565b61267d919061399b565b6016600082825461268e91906137f8565b92505081905550600a54600b54826126a6919061392a565b6126b0919061399b565b601460008282546126c191906137f8565b92505081905550600a54600e54826126d9919061392a565b6126e3919061399b565b601760008282546126f491906137f8565b925050819055505b5b600081111561271f5761271e873060175484612719919061404d565b61286b565b5b6000601754111561273a576127398761dead60175461286b565b5b6000601781905550808561274e919061404d565b94505b61275c87878761286b565b505050505b505050565b60008383111582906127ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a591906132da565b60405180910390fd5b50600083856127bd919061404d565b9050809150509392505050565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036128da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128d190613f9b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612949576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129409061402d565b60405180910390fd5b612954838383612e7f565b6129bf81604051806060016040528060268152602001614438602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127669092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612a52816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ecd90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612af19190613494565b60405180910390a3505050565b6000612b0930610c74565b90506000601654601454601554612b2091906137f8565b612b2a91906137f8565b90506000821480612b3b5750600081145b15612b47575050612db9565b600060028260155485612b5a919061392a565b612b64919061399b565b612b6e919061399b565b90506000612b858285612e8490919063ffffffff16565b90506000479050612b9582612ece565b6000612baa8247612e8490919063ffffffff16565b90506000612bd586612bc760145485612dbb90919063ffffffff16565b612e3590919063ffffffff16565b90506000612c0087612bf260165486612dbb90919063ffffffff16565b612e3590919063ffffffff16565b90506000818385612c11919061404d565b612c1b919061404d565b90506000601581905550600060148190555060006016819055506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1684604051612c7d906140b2565b60006040518083038185875af1925050503d8060008114612cba576040519150601f19603f3d011682016040523d82523d6000602084013e612cbf565b606091505b50509050600088118015612cd35750600082115b15612d2057612ce2888361310b565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618783601554604051612d17939291906140c7565b60405180910390a15b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051612d66906140b2565b60006040518083038185875af1925050503d8060008114612da3576040519150601f19603f3d011682016040523d82523d6000602084013e612da8565b606091505b505080915050505050505050505050505b565b6000808303612dcd5760009050612e2f565b60008284612ddb919061392a565b9050828482612dea919061399b565b14612e2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e2190614170565b60405180910390fd5b809150505b92915050565b6000612e7783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506131e7565b905092915050565b505050565b6000612ec683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612766565b905092915050565b6000600267ffffffffffffffff811115612eeb57612eea614190565b5b604051908082528060200260200182016040528015612f195781602001602082028036833780820191505090505b5090503081600081518110612f3157612f306141bf565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612fd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ffa9190614203565b8160018151811061300e5761300d6141bf565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613073307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611f33565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016130d5959493929190614329565b600060405180830381600087803b1580156130ef57600080fd5b505af1158015613103573d6000803e3d6000fd5b505050505050565b613136307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611f33565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b815260040161319d96959493929190614383565b60606040518083038185885af11580156131bb573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906131e091906143e4565b5050505050565b6000808311829061322e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161322591906132da565b60405180910390fd5b506000838561323d919061399b565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613284578082015181840152602081019050613269565b60008484015250505050565b6000601f19601f8301169050919050565b60006132ac8261324a565b6132b68185613255565b93506132c6818560208601613266565b6132cf81613290565b840191505092915050565b600060208201905081810360008301526132f481846132a1565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061332c82613301565b9050919050565b61333c81613321565b811461334757600080fd5b50565b60008135905061335981613333565b92915050565b6000819050919050565b6133728161335f565b811461337d57600080fd5b50565b60008135905061338f81613369565b92915050565b600080604083850312156133ac576133ab6132fc565b5b60006133ba8582860161334a565b92505060206133cb85828601613380565b9150509250929050565b60008115159050919050565b6133ea816133d5565b82525050565b600060208201905061340560008301846133e1565b92915050565b6000819050919050565b600061343061342b61342684613301565b61340b565b613301565b9050919050565b600061344282613415565b9050919050565b600061345482613437565b9050919050565b61346481613449565b82525050565b600060208201905061347f600083018461345b565b92915050565b61348e8161335f565b82525050565b60006020820190506134a96000830184613485565b92915050565b6000806000606084860312156134c8576134c76132fc565b5b60006134d68682870161334a565b93505060206134e78682870161334a565b92505060406134f886828701613380565b9150509250925092565b61350b81613321565b82525050565b60006020820190506135266000830184613502565b92915050565b60008060008060808587031215613546576135456132fc565b5b600061355487828801613380565b945050602061356587828801613380565b935050604061357687828801613380565b925050606061358787828801613380565b91505092959194509250565b600060ff82169050919050565b6135a981613593565b82525050565b60006020820190506135c460008301846135a0565b92915050565b6000602082840312156135e0576135df6132fc565b5b60006135ee8482850161334a565b91505092915050565b613600816133d5565b811461360b57600080fd5b50565b60008135905061361d816135f7565b92915050565b600060208284031215613639576136386132fc565b5b60006136478482850161360e565b91505092915050565b60008060408385031215613667576136666132fc565b5b60006136758582860161334a565b92505060206136868582860161360e565b9150509250929050565b6000602082840312156136a6576136a56132fc565b5b60006136b484828501613380565b91505092915050565b600080604083850312156136d4576136d36132fc565b5b60006136e28582860161334a565b92505060206136f38582860161334a565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061374457607f821691505b602082108103613757576137566136fd565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613793602083613255565b915061379e8261375d565b602082019050919050565b600060208201905081810360008301526137c281613786565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006138038261335f565b915061380e8361335f565b9250828201905080821115613826576138256137c9565b5b92915050565b7f4d757374206b656570206665657320617420313525206f72206c657373000000600082015250565b6000613862601d83613255565b915061386d8261382c565b602082019050919050565b6000602082019050818103600083015261389181613855565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006138f4603983613255565b91506138ff82613898565b604082019050919050565b60006020820190508181036000830152613923816138e7565b9050919050565b60006139358261335f565b91506139408361335f565b925082820261394e8161335f565b91508282048414831517613965576139646137c9565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006139a68261335f565b91506139b18361335f565b9250826139c1576139c061396c565b5b828204905092915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000613a28603583613255565b9150613a33826139cc565b604082019050919050565b60006020820190508181036000830152613a5781613a1b565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e312520746f74616c20737570706c792e000000000000000000000000602082015250565b6000613aba603483613255565b9150613ac582613a5e565b604082019050919050565b60006020820190508181036000830152613ae981613aad565b9050919050565b7f43616e277420776974686472617720746f6b656e732064657374696e6564206660008201527f6f72206c69717569646974790000000000000000000000000000000000000000602082015250565b6000613b4c602c83613255565b9150613b5782613af0565b604082019050919050565b60006020820190508181036000830152613b7b81613b3f565b9050919050565b600081519050613b9181613369565b92915050565b600060208284031215613bad57613bac6132fc565b5b6000613bbb84828501613b82565b91505092915050565b7f43616e2774207769746864726177203000000000000000000000000000000000600082015250565b6000613bfa601083613255565b9150613c0582613bc4565b602082019050919050565b60006020820190508181036000830152613c2981613bed565b9050919050565b6000604082019050613c456000830185613502565b613c526020830184613485565b9392505050565b600081519050613c68816135f7565b92915050565b600060208284031215613c8457613c836132fc565b5b6000613c9284828501613c59565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613cf7602683613255565b9150613d0282613c9b565b604082019050919050565b60006020820190508181036000830152613d2681613cea565b9050919050565b7f43616e2774207769746864726177206e65676174697665206f72207a65726f00600082015250565b6000613d63601f83613255565b9150613d6e82613d2d565b602082019050919050565b60006020820190508181036000830152613d9281613d56565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613dcf601b83613255565b9150613dda82613d99565b602082019050919050565b60006020820190508181036000830152613dfe81613dc2565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613e61602483613255565b9150613e6c82613e05565b604082019050919050565b60006020820190508181036000830152613e9081613e54565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613ef3602283613255565b9150613efe82613e97565b604082019050919050565b60006020820190508181036000830152613f2281613ee6565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613f85602583613255565b9150613f9082613f29565b604082019050919050565b60006020820190508181036000830152613fb481613f78565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614017602383613255565b915061402282613fbb565b604082019050919050565b600060208201905081810360008301526140468161400a565b9050919050565b60006140588261335f565b91506140638361335f565b925082820390508181111561407b5761407a6137c9565b5b92915050565b600081905092915050565b50565b600061409c600083614081565b91506140a78261408c565b600082019050919050565b60006140bd8261408f565b9150819050919050565b60006060820190506140dc6000830186613485565b6140e96020830185613485565b6140f66040830184613485565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061415a602183613255565b9150614165826140fe565b604082019050919050565b600060208201905081810360008301526141898161414d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506141fd81613333565b92915050565b600060208284031215614219576142186132fc565b5b6000614227848285016141ee565b91505092915050565b6000819050919050565b600061425561425061424b84614230565b61340b565b61335f565b9050919050565b6142658161423a565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6142a081613321565b82525050565b60006142b28383614297565b60208301905092915050565b6000602082019050919050565b60006142d68261426b565b6142e08185614276565b93506142eb83614287565b8060005b8381101561431c57815161430388826142a6565b975061430e836142be565b9250506001810190506142ef565b5085935050505092915050565b600060a08201905061433e6000830188613485565b61434b602083018761425c565b818103604083015261435d81866142cb565b905061436c6060830185613502565b6143796080830184613485565b9695505050505050565b600060c0820190506143986000830189613502565b6143a56020830188613485565b6143b2604083018761425c565b6143bf606083018661425c565b6143cc6080830185613502565b6143d960a0830184613485565b979650505050505050565b6000806000606084860312156143fd576143fc6132fc565b5b600061440b86828701613b82565b935050602061441c86828701613b82565b925050604061442d86828701613b82565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220d21a549d32d503a7e01e8523de67e6a363580068a7c503c5b71dc8ade11792f264736f6c63430008110033

Deployed Bytecode Sourcemap

18910:11622:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6391:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7309:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18986:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6716:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7486:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19089:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23105:432;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6615:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7849:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19044:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25029:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19524:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19298:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6832:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12276:148;;;;;;;;;;;;;:::i;:::-;;19181:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12062:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22992:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6501:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24190:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8075:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6967:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24638:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20003:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24000:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22588:392;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19343:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7150:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30190:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19256:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23549:443;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12432:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29988:194;;;;;;;;;;;;;:::i;:::-;;24858:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6391:100;6445:13;6478:5;6471:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6391:100;:::o;7309:169::-;7392:4;7409:39;7418:12;:10;:12::i;:::-;7432:7;7441:6;7409:8;:39::i;:::-;7466:4;7459:11;;7309:169;;;;:::o;18986:51::-;;;:::o;6716:108::-;6777:7;6804:12;;6797:19;;6716:108;:::o;7486:355::-;7626:4;7643:36;7653:6;7661:9;7672:6;7643:9;:36::i;:::-;7690:121;7699:6;7707:12;:10;:12::i;:::-;7721:89;7759:6;7721:89;;;;;;;;;;;;;;;;;:11;:19;7733:6;7721:19;;;;;;;;;;;;;;;:33;7741:12;:10;:12::i;:::-;7721:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;7690:8;:121::i;:::-;7829:4;7822:11;;7486:355;;;;;:::o;19089:53::-;19135:6;19089:53;:::o;23105:432::-;12199:12;:10;:12::i;:::-;12189:22;;:6;;;;;;;;;;;:22;;;12181:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23257:13:::1;23239:15;:31;;;;23299:13;23281:15;:31;;;;23335:7;23323:9;:19;;;;23366:8;23353:10;:21;;;;23448:10;;23436:9;;23418:15;;23400;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;:58;;;;:::i;:::-;23385:12;:73;;;;23493:2;23477:12;;:18;;23469:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;23105:432:::0;;;;:::o;6615:93::-;6673:5;6698:2;6691:9;;6615:93;:::o;7849:218::-;7937:4;7954:83;7963:12;:10;:12::i;:::-;7977:7;7986:50;8025:10;7986:11;:25;7998:12;:10;:12::i;:::-;7986:25;;;;;;;;;;;;;;;:34;8012:7;7986:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;7954:8;:83::i;:::-;8055:4;8048:11;;7849:218;;;;:::o;19044:38::-;;;:::o;25029:125::-;25094:4;25118:19;:28;25138:7;25118:28;;;;;;;;;;;;;;;;;;;;;;;;;25111:35;;25029:125;;;:::o;19524:28::-;;;;:::o;19298:30::-;;;;;;;;;;;;;:::o;6832:127::-;6906:7;6933:9;:18;6943:7;6933:18;;;;;;;;;;;;;;;;6926:25;;6832:127;;;:::o;12276:148::-;12199:12;:10;:12::i;:::-;12189:22;;:6;;;;;;;;;;;:22;;;12181:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;12383:1:::1;12346:40;;12367:6;;;;;;;;;;;12346:40;;;;;;;;;;;;12414:1;12397:6;;:19;;;;;;;;;;;;;;;;;;12276:148::o:0;19181:30::-;;;;;;;;;;;;;:::o;12062:79::-;12100:7;12127:6;;;;;;;;;;;12120:13;;12062:79;:::o;22992:101::-;12199:12;:10;:12::i;:::-;12189:22;;:6;;;;;;;;;;;:22;;;12181:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23078:7:::1;23064:11;;:21;;;;;;;;;;;;;;;;;;22992:101:::0;:::o;6501:104::-;6557:13;6590:7;6583:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6501:104;:::o;24190:244::-;12199:12;:10;:12::i;:::-;12189:22;;:6;;;;;;;;;;;:22;;;12181:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24297:13:::1;24289:21;;:4;:21;;::::0;24281:91:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;24385:41;24414:4;24420:5;24385:28;:41::i;:::-;24190:244:::0;;:::o;8075:269::-;8168:4;8185:129;8194:12;:10;:12::i;:::-;8208:7;8217:96;8256:15;8217:96;;;;;;;;;;;;;;;;;:11;:25;8229:12;:10;:12::i;:::-;8217:25;;;;;;;;;;;;;;;:34;8243:7;8217:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;8185:8;:129::i;:::-;8332:4;8325:11;;8075:269;;;;:::o;6967:175::-;7053:4;7070:42;7080:12;:10;:12::i;:::-;7094:9;7105:6;7070:9;:42::i;:::-;7130:4;7123:11;;6967:175;;;;:::o;24638:208::-;12199:12;:10;:12::i;:::-;12189:22;;:6;;;;;;;;;;;:22;;;12181:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24775:15:::1;;;;;;;;;;;24732:59;;24755:18;24732:59;;;;;;;;;;;;24820:18;24802:15;;:36;;;;;;;;;;;;;;;;;;24638:208:::0;:::o;20003:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;24000:182::-;12199:12;:10;:12::i;:::-;12189:22;;:6;;;;;;;;;;;:22;;;12181:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24116:8:::1;24085:19;:28;24105:7;24085:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;24156:7;24140:34;;;24165:8;24140:34;;;;;;:::i;:::-;;;;;;;;24000:182:::0;;:::o;22588:392::-;22669:4;12199:12;:10;:12::i;:::-;12189:22;;:6;;;;;;;;;;;:22;;;12181:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22725:6:::1;22721:1;22705:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;22692:9;:39;;22684:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;22840:4;22836:1;22820:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;22807:9;:37;;22799:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;22945:6;22932:9;:20;;;;:::i;:::-;22911:18;:41;;;;22969:4;22962:11;;22588:392:::0;;;:::o;19343:27::-;;;;:::o;7150:151::-;7239:7;7266:11;:18;7278:5;7266:18;;;;;;;;;;;;;;;:27;7285:7;7266:27;;;;;;;;;;;;;;;;7259:34;;7150:151;;;;:::o;30190:339::-;12199:12;:10;:12::i;:::-;12189:22;;:6;;;;;;;;;;;:22;;;12181:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30292:4:::1;30272:25;;:8;:25;;::::0;30264:82:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;30409:1;30372:8;30365:26;;;30400:4;30365:41;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:45;30357:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;30451:8;30444:25;;;30470:7;:5;:7::i;:::-;30486:8;30479:26;;;30514:4;30479:41;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30444:77;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30190:339:::0;:::o;19256:33::-;;;;:::o;23549:443::-;12199:12;:10;:12::i;:::-;12189:22;;:6;;;;;;;;;;;:22;;;12181:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23703:13:::1;23684:16;:32;;;;23746:13;23727:16;:32;;;;23783:7;23770:10;:20;;;;23815:8;23801:11;:22;;;;23901:11;;23888:10;;23869:16;;23850;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;:62;;;;:::i;:::-;23834:13;:78;;;;23948:2;23931:13:::0;::::1;:19;;23923:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;23549:443:::0;;;;:::o;12432:244::-;12199:12;:10;:12::i;:::-;12189:22;;:6;;;;;;;;;;;:22;;;12181:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;12541:1:::1;12521:22;;:8;:22;;::::0;12513:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;12631:8;12602:38;;12623:6;;;;;;;;;;;12602:38;;;;;;;;;;;;12660:8;12651:6;;:17;;;;;;;;;;;;;;;;;;12432:244:::0;:::o;29988:194::-;12199:12;:10;:12::i;:::-;12189:22;;:6;;;;;;;;;;;:22;;;12181:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30078:1:::1;30054:21;:25;30045:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;30134:7;:5;:7::i;:::-;30126:25;;:48;30152:21;30126:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;29988:194::o:0;24858:157::-;12199:12;:10;:12::i;:::-;12189:22;;:6;;;;;;;;;;;:22;;;12181:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24965:9:::1;;;;;;;;;;;24937:38;;24954:9;24937:38;;;;;;;;;;;;24998:9;24986;;:21;;;;;;;;;;;;;;;;;;24858:157:::0;:::o;10289:181::-;10347:7;10367:9;10383:1;10379;:5;;;;:::i;:::-;10367:17;;10408:1;10403;:6;;10395:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;10461:1;10454:8;;;10289:181;;;;:::o;1665:98::-;1718:7;1745:10;1738:17;;1665:98;:::o;9745:380::-;9898:1;9881:19;;:5;:19;;;9873:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9979:1;9960:21;;:7;:21;;;9952:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10063:6;10033:11;:18;10045:5;10033:18;;;;;;;;;;;;;;;:27;10052:7;10033:27;;;;;;;;;;;;;;;:36;;;;10101:7;10085:32;;10094:5;10085:32;;;10110:6;10085:32;;;;;;:::i;:::-;;;;;;;;9745:380;;;:::o;25216:2397::-;25364:1;25348:18;;:4;:18;;;25340:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25441:1;25427:16;;:2;:16;;;25419:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;25518:1;25508:6;:11;25505:92;;25536:28;25552:4;25558:2;25562:1;25536:15;:28::i;:::-;25579:7;;25505:92;25621:28;25652:24;25670:4;25652:9;:24::i;:::-;25621:55;;25697:12;25736:18;;25712:20;:42;;25697:57;;25785:7;:35;;;;;25809:11;;;;;;;;;;;25785:35;:61;;;;;25838:8;;;;;;;;;;;25837:9;25785:61;:110;;;;;25864:25;:31;25890:4;25864:31;;;;;;;;;;;;;;;;;;;;;;;;;25863:32;25785:110;:153;;;;;25913:19;:25;25933:4;25913:25;;;;;;;;;;;;;;;;;;;;;;;;;25912:26;25785:153;:194;;;;;25956:19;:23;25976:2;25956:23;;;;;;;;;;;;;;;;;;;;;;;;;25955:24;25785:194;25767:338;;;26017:4;26006:8;;:15;;;;;;;;;;;;;;;;;;26050:10;:8;:10::i;:::-;26088:5;26077:8;;:16;;;;;;;;;;;;;;;;;;25767:338;26125:12;26141:8;;;;;;;;;;;26140:9;26125:24;;26165:19;:25;26185:4;26165:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;26194:19;:23;26214:2;26194:23;;;;;;;;;;;;;;;;;;;;;;;;;26165:52;26162:99;;;26244:5;26234:15;;26162:99;26281:12;26311:7;26308:1252;;;26338:25;:29;26364:2;26338:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;26387:1;26371:13;;:17;26338:50;26334:863;;;26415:34;26445:3;26415:25;26426:13;;26415:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;26408:41;;26516:13;;26497:16;;26490:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;26468:18;;:61;;;;;;;:::i;:::-;;;;;;;;26584:13;;26571:10;;26564:4;:17;;;;:::i;:::-;:33;;;;:::i;:::-;26548:12;;:49;;;;;;;:::i;:::-;;;;;;;;26664:13;;26645:16;;26638:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;26616:18;;:61;;;;;;;:::i;:::-;;;;;;;;26734:13;;26720:11;;26713:4;:18;;;;:::i;:::-;:34;;;;:::i;:::-;26696:13;;:51;;;;;;;:::i;:::-;;;;;;;;26334:863;;;26785:25;:31;26811:4;26785:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;26835:1;26820:12;;:16;26785:51;26782:415;;;26861:33;26890:3;26861:24;26872:12;;26861:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;26854:40;;26957:12;;26939:15;;26932:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;26910:18;;:59;;;;;;;:::i;:::-;;;;;;;;27023:12;;27011:9;;27004:4;:16;;;;:::i;:::-;:31;;;;:::i;:::-;26988:12;;:47;;;;;;;:::i;:::-;;;;;;;;27101:12;;27083:15;;27076:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;27054:18;;:59;;;;;;;:::i;:::-;;;;;;;;27169:12;;27156:10;;27149:4;:17;;;;:::i;:::-;:32;;;;:::i;:::-;27132:13;;:49;;;;;;;:::i;:::-;;;;;;;;26782:415;26334:863;27235:1;27228:4;:8;27225:109;;;27260:58;27276:4;27290;27304:13;;27297:4;:20;;;;:::i;:::-;27260:15;:58::i;:::-;27225:109;27369:1;27353:13;;:17;27350:114;;;27390:58;27406:4;19135:6;27434:13;;27390:15;:58::i;:::-;27350:114;27496:1;27480:13;:17;;;;27544:4;27534:14;;;;;:::i;:::-;;;26308:1252;27572:33;27588:4;27594:2;27598:6;27572:15;:33::i;:::-;25329:2284;;;;25216:2397;;;;:::o;10622:192::-;10708:7;10741:1;10736;:6;;10744:12;10728:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;10768:9;10784:1;10780;:5;;;;:::i;:::-;10768:17;;10805:1;10798:8;;;10622:192;;;;;:::o;24442:188::-;24559:5;24525:25;:31;24551:4;24525:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;24616:5;24582:40;;24610:4;24582:40;;;;;;;;;;;;24442:188;;:::o;8352:573::-;8510:1;8492:20;;:6;:20;;;8484:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;8594:1;8573:23;;:9;:23;;;8565:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;8649:47;8670:6;8678:9;8689:6;8649:20;:47::i;:::-;8729:71;8751:6;8729:71;;;;;;;;;;;;;;;;;:9;:17;8739:6;8729:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;8709:9;:17;8719:6;8709:17;;;;;;;;;;;;;;;:91;;;;8834:32;8859:6;8834:9;:20;8844:9;8834:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;8811:9;:20;8821:9;8811:20;;;;;;;;;;;;;;;:55;;;;8899:9;8882:35;;8891:6;8882:35;;;8910:6;8882:35;;;;;;:::i;:::-;;;;;;;;8352:573;;;:::o;28510:1466::-;28549:23;28575:24;28593:4;28575:9;:24::i;:::-;28549:50;;28610:25;28680:12;;28659:18;;28638;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;28610:82;;28735:1;28716:15;:20;:46;;;;28761:1;28740:17;:22;28716:46;28713:60;;;28765:7;;;;28713:60;28789:23;28874:1;28854:17;28833:18;;28815:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;28789:86;;28886:26;28915:36;28935:15;28915;:19;;:36;;;;:::i;:::-;28886:65;;28972:25;29000:21;28972:49;;29034:36;29051:18;29034:16;:36::i;:::-;29092:18;29113:44;29139:17;29113:21;:25;;:44;;;;:::i;:::-;29092:65;;29178:23;29204:57;29243:17;29204:34;29219:18;;29204:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;29178:83;;29272:21;29296:51;29329:17;29296:28;29311:12;;29296:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;29272:75;;29378:23;29435:13;29417:15;29404:10;:28;;;;:::i;:::-;:44;;;;:::i;:::-;29378:70;;29500:1;29479:18;:22;;;;29533:1;29512:18;:22;;;;29560:1;29545:12;:16;;;;29583:12;29608:15;;;;;;;;;;;29600:29;;29637:15;29600:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29582:75;;;29689:1;29671:15;:19;:42;;;;;29712:1;29694:15;:19;29671:42;29668:210;;;29729:46;29742:15;29759;29729:12;:46::i;:::-;29795:71;29810:18;29830:15;29847:18;;29795:71;;;;;;;;:::i;:::-;;;;;;;;29668:210;29919:9;;;;;;;;;;;29911:23;;29942:21;29911:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29898:70;;;;;28538:1438;;;;;;;;;;28510:1466;:::o;10822:260::-;10880:7;10919:1;10914;:6;10910:47;;10944:1;10937:8;;;;10910:47;10969:9;10985:1;10981;:5;;;;:::i;:::-;10969:17;;11014:1;11009;11005;:5;;;;:::i;:::-;:10;10997:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;11073:1;11066:8;;;10822:260;;;;;:::o;11090:132::-;11148:7;11175:39;11179:1;11182;11175:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;11168:46;;11090:132;;;;:::o;10133:125::-;;;;:::o;10478:136::-;10536:7;10563:43;10567:1;10570;10563:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;10556:50;;10478:136;;;;:::o;27621:488::-;27689:21;27727:1;27713:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27689:40;;27758:4;27740;27745:1;27740:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;27784:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27774:4;27779:1;27774:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;27819:62;27836:4;27851:15;27869:11;27819:8;:62::i;:::-;27894:15;:66;;;27975:11;28001:1;28018:4;28045;28065:15;27894:197;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27676:433;27621:488;:::o;28133:369::-;28217:62;28234:4;28249:15;28267:11;28217:8;:62::i;:::-;28292:15;:31;;;28331:9;28364:4;28384:11;28410:1;28426;19135:6;28468:15;28292:202;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;28133:369;;:::o;11230:191::-;11316:7;11348:1;11344;:5;11351:12;11336:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;11375:9;11391:1;11387;:5;;;;:::i;:::-;11375:17;;11412:1;11405:8;;;11230:191;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:60::-;3474:3;3495:5;3488:12;;3446:60;;;:::o;3512:142::-;3562:9;3595:53;3613:34;3622:24;3640:5;3622:24;:::i;:::-;3613:34;:::i;:::-;3595:53;:::i;:::-;3582:66;;3512:142;;;:::o;3660:126::-;3710:9;3743:37;3774:5;3743:37;:::i;:::-;3730:50;;3660:126;;;:::o;3792:153::-;3869:9;3902:37;3933:5;3902:37;:::i;:::-;3889:50;;3792:153;;;:::o;3951:185::-;4065:64;4123:5;4065:64;:::i;:::-;4060:3;4053:77;3951:185;;:::o;4142:276::-;4262:4;4300:2;4289:9;4285:18;4277:26;;4313:98;4408:1;4397:9;4393:17;4384:6;4313:98;:::i;:::-;4142:276;;;;:::o;4424:118::-;4511:24;4529:5;4511:24;:::i;:::-;4506:3;4499:37;4424:118;;:::o;4548:222::-;4641:4;4679:2;4668:9;4664:18;4656:26;;4692:71;4760:1;4749:9;4745:17;4736:6;4692:71;:::i;:::-;4548:222;;;;:::o;4776:619::-;4853:6;4861;4869;4918:2;4906:9;4897:7;4893:23;4889:32;4886:119;;;4924:79;;:::i;:::-;4886:119;5044:1;5069:53;5114:7;5105:6;5094:9;5090:22;5069:53;:::i;:::-;5059:63;;5015:117;5171:2;5197:53;5242:7;5233:6;5222:9;5218:22;5197:53;:::i;:::-;5187:63;;5142:118;5299:2;5325:53;5370:7;5361:6;5350:9;5346:22;5325:53;:::i;:::-;5315:63;;5270:118;4776:619;;;;;:::o;5401:118::-;5488:24;5506:5;5488:24;:::i;:::-;5483:3;5476:37;5401:118;;:::o;5525:222::-;5618:4;5656:2;5645:9;5641:18;5633:26;;5669:71;5737:1;5726:9;5722:17;5713:6;5669:71;:::i;:::-;5525:222;;;;:::o;5753:765::-;5839:6;5847;5855;5863;5912:3;5900:9;5891:7;5887:23;5883:33;5880:120;;;5919:79;;:::i;:::-;5880:120;6039:1;6064:53;6109:7;6100:6;6089:9;6085:22;6064:53;:::i;:::-;6054:63;;6010:117;6166:2;6192:53;6237:7;6228:6;6217:9;6213:22;6192:53;:::i;:::-;6182:63;;6137:118;6294:2;6320:53;6365:7;6356:6;6345:9;6341:22;6320:53;:::i;:::-;6310:63;;6265:118;6422:2;6448:53;6493:7;6484:6;6473:9;6469:22;6448:53;:::i;:::-;6438:63;;6393:118;5753:765;;;;;;;:::o;6524:86::-;6559:7;6599:4;6592:5;6588:16;6577:27;;6524:86;;;:::o;6616:112::-;6699:22;6715:5;6699:22;:::i;:::-;6694:3;6687:35;6616:112;;:::o;6734:214::-;6823:4;6861:2;6850:9;6846:18;6838:26;;6874:67;6938:1;6927:9;6923:17;6914:6;6874:67;:::i;:::-;6734:214;;;;:::o;6954:329::-;7013:6;7062:2;7050:9;7041:7;7037:23;7033:32;7030:119;;;7068:79;;:::i;:::-;7030:119;7188:1;7213:53;7258:7;7249:6;7238:9;7234:22;7213:53;:::i;:::-;7203:63;;7159:117;6954:329;;;;:::o;7289:116::-;7359:21;7374:5;7359:21;:::i;:::-;7352:5;7349:32;7339:60;;7395:1;7392;7385:12;7339:60;7289:116;:::o;7411:133::-;7454:5;7492:6;7479:20;7470:29;;7508:30;7532:5;7508:30;:::i;:::-;7411:133;;;;:::o;7550:323::-;7606:6;7655:2;7643:9;7634:7;7630:23;7626:32;7623:119;;;7661:79;;:::i;:::-;7623:119;7781:1;7806:50;7848:7;7839:6;7828:9;7824:22;7806:50;:::i;:::-;7796:60;;7752:114;7550:323;;;;:::o;7879:468::-;7944:6;7952;8001:2;7989:9;7980:7;7976:23;7972:32;7969:119;;;8007:79;;:::i;:::-;7969:119;8127:1;8152:53;8197:7;8188:6;8177:9;8173:22;8152:53;:::i;:::-;8142:63;;8098:117;8254:2;8280:50;8322:7;8313:6;8302:9;8298:22;8280:50;:::i;:::-;8270:60;;8225:115;7879:468;;;;;:::o;8353:329::-;8412:6;8461:2;8449:9;8440:7;8436:23;8432:32;8429:119;;;8467:79;;:::i;:::-;8429:119;8587:1;8612:53;8657:7;8648:6;8637:9;8633:22;8612:53;:::i;:::-;8602:63;;8558:117;8353:329;;;;:::o;8688:474::-;8756:6;8764;8813:2;8801:9;8792:7;8788:23;8784:32;8781:119;;;8819:79;;:::i;:::-;8781:119;8939:1;8964:53;9009:7;9000:6;8989:9;8985:22;8964:53;:::i;:::-;8954:63;;8910:117;9066:2;9092:53;9137:7;9128:6;9117:9;9113:22;9092:53;:::i;:::-;9082:63;;9037:118;8688:474;;;;;:::o;9168:180::-;9216:77;9213:1;9206:88;9313:4;9310:1;9303:15;9337:4;9334:1;9327:15;9354:320;9398:6;9435:1;9429:4;9425:12;9415:22;;9482:1;9476:4;9472:12;9503:18;9493:81;;9559:4;9551:6;9547:17;9537:27;;9493:81;9621:2;9613:6;9610:14;9590:18;9587:38;9584:84;;9640:18;;:::i;:::-;9584:84;9405:269;9354:320;;;:::o;9680:182::-;9820:34;9816:1;9808:6;9804:14;9797:58;9680:182;:::o;9868:366::-;10010:3;10031:67;10095:2;10090:3;10031:67;:::i;:::-;10024:74;;10107:93;10196:3;10107:93;:::i;:::-;10225:2;10220:3;10216:12;10209:19;;9868:366;;;:::o;10240:419::-;10406:4;10444:2;10433:9;10429:18;10421:26;;10493:9;10487:4;10483:20;10479:1;10468:9;10464:17;10457:47;10521:131;10647:4;10521:131;:::i;:::-;10513:139;;10240:419;;;:::o;10665:180::-;10713:77;10710:1;10703:88;10810:4;10807:1;10800:15;10834:4;10831:1;10824:15;10851:191;10891:3;10910:20;10928:1;10910:20;:::i;:::-;10905:25;;10944:20;10962:1;10944:20;:::i;:::-;10939:25;;10987:1;10984;10980:9;10973:16;;11008:3;11005:1;11002:10;10999:36;;;11015:18;;:::i;:::-;10999:36;10851:191;;;;:::o;11048:179::-;11188:31;11184:1;11176:6;11172:14;11165:55;11048:179;:::o;11233:366::-;11375:3;11396:67;11460:2;11455:3;11396:67;:::i;:::-;11389:74;;11472:93;11561:3;11472:93;:::i;:::-;11590:2;11585:3;11581:12;11574:19;;11233:366;;;:::o;11605:419::-;11771:4;11809:2;11798:9;11794:18;11786:26;;11858:9;11852:4;11848:20;11844:1;11833:9;11829:17;11822:47;11886:131;12012:4;11886:131;:::i;:::-;11878:139;;11605:419;;;:::o;12030:244::-;12170:34;12166:1;12158:6;12154:14;12147:58;12239:27;12234:2;12226:6;12222:15;12215:52;12030:244;:::o;12280:366::-;12422:3;12443:67;12507:2;12502:3;12443:67;:::i;:::-;12436:74;;12519:93;12608:3;12519:93;:::i;:::-;12637:2;12632:3;12628:12;12621:19;;12280:366;;;:::o;12652:419::-;12818:4;12856:2;12845:9;12841:18;12833:26;;12905:9;12899:4;12895:20;12891:1;12880:9;12876:17;12869:47;12933:131;13059:4;12933:131;:::i;:::-;12925:139;;12652:419;;;:::o;13077:410::-;13117:7;13140:20;13158:1;13140:20;:::i;:::-;13135:25;;13174:20;13192:1;13174:20;:::i;:::-;13169:25;;13229:1;13226;13222:9;13251:30;13269:11;13251:30;:::i;:::-;13240:41;;13430:1;13421:7;13417:15;13414:1;13411:22;13391:1;13384:9;13364:83;13341:139;;13460:18;;:::i;:::-;13341:139;13125:362;13077:410;;;;:::o;13493:180::-;13541:77;13538:1;13531:88;13638:4;13635:1;13628:15;13662:4;13659:1;13652:15;13679:185;13719:1;13736:20;13754:1;13736:20;:::i;:::-;13731:25;;13770:20;13788:1;13770:20;:::i;:::-;13765:25;;13809:1;13799:35;;13814:18;;:::i;:::-;13799:35;13856:1;13853;13849:9;13844:14;;13679:185;;;;:::o;13870:240::-;14010:34;14006:1;13998:6;13994:14;13987:58;14079:23;14074:2;14066:6;14062:15;14055:48;13870:240;:::o;14116:366::-;14258:3;14279:67;14343:2;14338:3;14279:67;:::i;:::-;14272:74;;14355:93;14444:3;14355:93;:::i;:::-;14473:2;14468:3;14464:12;14457:19;;14116:366;;;:::o;14488:419::-;14654:4;14692:2;14681:9;14677:18;14669:26;;14741:9;14735:4;14731:20;14727:1;14716:9;14712:17;14705:47;14769:131;14895:4;14769:131;:::i;:::-;14761:139;;14488:419;;;:::o;14913:239::-;15053:34;15049:1;15041:6;15037:14;15030:58;15122:22;15117:2;15109:6;15105:15;15098:47;14913:239;:::o;15158:366::-;15300:3;15321:67;15385:2;15380:3;15321:67;:::i;:::-;15314:74;;15397:93;15486:3;15397:93;:::i;:::-;15515:2;15510:3;15506:12;15499:19;;15158:366;;;:::o;15530:419::-;15696:4;15734:2;15723:9;15719:18;15711:26;;15783:9;15777:4;15773:20;15769:1;15758:9;15754:17;15747:47;15811:131;15937:4;15811:131;:::i;:::-;15803:139;;15530:419;;;:::o;15955:231::-;16095:34;16091:1;16083:6;16079:14;16072:58;16164:14;16159:2;16151:6;16147:15;16140:39;15955:231;:::o;16192:366::-;16334:3;16355:67;16419:2;16414:3;16355:67;:::i;:::-;16348:74;;16431:93;16520:3;16431:93;:::i;:::-;16549:2;16544:3;16540:12;16533:19;;16192:366;;;:::o;16564:419::-;16730:4;16768:2;16757:9;16753:18;16745:26;;16817:9;16811:4;16807:20;16803:1;16792:9;16788:17;16781:47;16845:131;16971:4;16845:131;:::i;:::-;16837:139;;16564:419;;;:::o;16989:143::-;17046:5;17077:6;17071:13;17062:22;;17093:33;17120:5;17093:33;:::i;:::-;16989:143;;;;:::o;17138:351::-;17208:6;17257:2;17245:9;17236:7;17232:23;17228:32;17225:119;;;17263:79;;:::i;:::-;17225:119;17383:1;17408:64;17464:7;17455:6;17444:9;17440:22;17408:64;:::i;:::-;17398:74;;17354:128;17138:351;;;;:::o;17495:166::-;17635:18;17631:1;17623:6;17619:14;17612:42;17495:166;:::o;17667:366::-;17809:3;17830:67;17894:2;17889:3;17830:67;:::i;:::-;17823:74;;17906:93;17995:3;17906:93;:::i;:::-;18024:2;18019:3;18015:12;18008:19;;17667:366;;;:::o;18039:419::-;18205:4;18243:2;18232:9;18228:18;18220:26;;18292:9;18286:4;18282:20;18278:1;18267:9;18263:17;18256:47;18320:131;18446:4;18320:131;:::i;:::-;18312:139;;18039:419;;;:::o;18464:332::-;18585:4;18623:2;18612:9;18608:18;18600:26;;18636:71;18704:1;18693:9;18689:17;18680:6;18636:71;:::i;:::-;18717:72;18785:2;18774:9;18770:18;18761:6;18717:72;:::i;:::-;18464:332;;;;;:::o;18802:137::-;18856:5;18887:6;18881:13;18872:22;;18903:30;18927:5;18903:30;:::i;:::-;18802:137;;;;:::o;18945:345::-;19012:6;19061:2;19049:9;19040:7;19036:23;19032:32;19029:119;;;19067:79;;:::i;:::-;19029:119;19187:1;19212:61;19265:7;19256:6;19245:9;19241:22;19212:61;:::i;:::-;19202:71;;19158:125;18945:345;;;;:::o;19296:225::-;19436:34;19432:1;19424:6;19420:14;19413:58;19505:8;19500:2;19492:6;19488:15;19481:33;19296:225;:::o;19527:366::-;19669:3;19690:67;19754:2;19749:3;19690:67;:::i;:::-;19683:74;;19766:93;19855:3;19766:93;:::i;:::-;19884:2;19879:3;19875:12;19868:19;;19527:366;;;:::o;19899:419::-;20065:4;20103:2;20092:9;20088:18;20080:26;;20152:9;20146:4;20142:20;20138:1;20127:9;20123:17;20116:47;20180:131;20306:4;20180:131;:::i;:::-;20172:139;;19899:419;;;:::o;20324:181::-;20464:33;20460:1;20452:6;20448:14;20441:57;20324:181;:::o;20511:366::-;20653:3;20674:67;20738:2;20733:3;20674:67;:::i;:::-;20667:74;;20750:93;20839:3;20750:93;:::i;:::-;20868:2;20863:3;20859:12;20852:19;;20511:366;;;:::o;20883:419::-;21049:4;21087:2;21076:9;21072:18;21064:26;;21136:9;21130:4;21126:20;21122:1;21111:9;21107:17;21100:47;21164:131;21290:4;21164:131;:::i;:::-;21156:139;;20883:419;;;:::o;21308:177::-;21448:29;21444:1;21436:6;21432:14;21425:53;21308:177;:::o;21491:366::-;21633:3;21654:67;21718:2;21713:3;21654:67;:::i;:::-;21647:74;;21730:93;21819:3;21730:93;:::i;:::-;21848:2;21843:3;21839:12;21832:19;;21491:366;;;:::o;21863:419::-;22029:4;22067:2;22056:9;22052:18;22044:26;;22116:9;22110:4;22106:20;22102:1;22091:9;22087:17;22080:47;22144:131;22270:4;22144:131;:::i;:::-;22136:139;;21863:419;;;:::o;22288:223::-;22428:34;22424:1;22416:6;22412:14;22405:58;22497:6;22492:2;22484:6;22480:15;22473:31;22288:223;:::o;22517:366::-;22659:3;22680:67;22744:2;22739:3;22680:67;:::i;:::-;22673:74;;22756:93;22845:3;22756:93;:::i;:::-;22874:2;22869:3;22865:12;22858:19;;22517:366;;;:::o;22889:419::-;23055:4;23093:2;23082:9;23078:18;23070:26;;23142:9;23136:4;23132:20;23128:1;23117:9;23113:17;23106:47;23170:131;23296:4;23170:131;:::i;:::-;23162:139;;22889:419;;;:::o;23314:221::-;23454:34;23450:1;23442:6;23438:14;23431:58;23523:4;23518:2;23510:6;23506:15;23499:29;23314:221;:::o;23541:366::-;23683:3;23704:67;23768:2;23763:3;23704:67;:::i;:::-;23697:74;;23780:93;23869:3;23780:93;:::i;:::-;23898:2;23893:3;23889:12;23882:19;;23541:366;;;:::o;23913:419::-;24079:4;24117:2;24106:9;24102:18;24094:26;;24166:9;24160:4;24156:20;24152:1;24141:9;24137:17;24130:47;24194:131;24320:4;24194:131;:::i;:::-;24186:139;;23913:419;;;:::o;24338:224::-;24478:34;24474:1;24466:6;24462:14;24455:58;24547:7;24542:2;24534:6;24530:15;24523:32;24338:224;:::o;24568:366::-;24710:3;24731:67;24795:2;24790:3;24731:67;:::i;:::-;24724:74;;24807:93;24896:3;24807:93;:::i;:::-;24925:2;24920:3;24916:12;24909:19;;24568:366;;;:::o;24940:419::-;25106:4;25144:2;25133:9;25129:18;25121:26;;25193:9;25187:4;25183:20;25179:1;25168:9;25164:17;25157:47;25221:131;25347:4;25221:131;:::i;:::-;25213:139;;24940:419;;;:::o;25365:222::-;25505:34;25501:1;25493:6;25489:14;25482:58;25574:5;25569:2;25561:6;25557:15;25550:30;25365:222;:::o;25593:366::-;25735:3;25756:67;25820:2;25815:3;25756:67;:::i;:::-;25749:74;;25832:93;25921:3;25832:93;:::i;:::-;25950:2;25945:3;25941:12;25934:19;;25593:366;;;:::o;25965:419::-;26131:4;26169:2;26158:9;26154:18;26146:26;;26218:9;26212:4;26208:20;26204:1;26193:9;26189:17;26182:47;26246:131;26372:4;26246:131;:::i;:::-;26238:139;;25965:419;;;:::o;26390:194::-;26430:4;26450:20;26468:1;26450:20;:::i;:::-;26445:25;;26484:20;26502:1;26484:20;:::i;:::-;26479:25;;26528:1;26525;26521:9;26513:17;;26552:1;26546:4;26543:11;26540:37;;;26557:18;;:::i;:::-;26540:37;26390:194;;;;:::o;26590:147::-;26691:11;26728:3;26713:18;;26590:147;;;;:::o;26743:114::-;;:::o;26863:398::-;27022:3;27043:83;27124:1;27119:3;27043:83;:::i;:::-;27036:90;;27135:93;27224:3;27135:93;:::i;:::-;27253:1;27248:3;27244:11;27237:18;;26863:398;;;:::o;27267:379::-;27451:3;27473:147;27616:3;27473:147;:::i;:::-;27466:154;;27637:3;27630:10;;27267:379;;;:::o;27652:442::-;27801:4;27839:2;27828:9;27824:18;27816:26;;27852:71;27920:1;27909:9;27905:17;27896:6;27852:71;:::i;:::-;27933:72;28001:2;27990:9;27986:18;27977:6;27933:72;:::i;:::-;28015;28083:2;28072:9;28068:18;28059:6;28015:72;:::i;:::-;27652:442;;;;;;:::o;28100:220::-;28240:34;28236:1;28228:6;28224:14;28217:58;28309:3;28304:2;28296:6;28292:15;28285:28;28100:220;:::o;28326:366::-;28468:3;28489:67;28553:2;28548:3;28489:67;:::i;:::-;28482:74;;28565:93;28654:3;28565:93;:::i;:::-;28683:2;28678:3;28674:12;28667:19;;28326:366;;;:::o;28698:419::-;28864:4;28902:2;28891:9;28887:18;28879:26;;28951:9;28945:4;28941:20;28937:1;28926:9;28922:17;28915:47;28979:131;29105:4;28979:131;:::i;:::-;28971:139;;28698:419;;;:::o;29123:180::-;29171:77;29168:1;29161:88;29268:4;29265:1;29258:15;29292:4;29289:1;29282:15;29309:180;29357:77;29354:1;29347:88;29454:4;29451:1;29444:15;29478:4;29475:1;29468:15;29495:143;29552:5;29583:6;29577:13;29568:22;;29599:33;29626:5;29599:33;:::i;:::-;29495:143;;;;:::o;29644:351::-;29714:6;29763:2;29751:9;29742:7;29738:23;29734:32;29731:119;;;29769:79;;:::i;:::-;29731:119;29889:1;29914:64;29970:7;29961:6;29950:9;29946:22;29914:64;:::i;:::-;29904:74;;29860:128;29644:351;;;;:::o;30001:85::-;30046:7;30075:5;30064:16;;30001:85;;;:::o;30092:158::-;30150:9;30183:61;30201:42;30210:32;30236:5;30210:32;:::i;:::-;30201:42;:::i;:::-;30183:61;:::i;:::-;30170:74;;30092:158;;;:::o;30256:147::-;30351:45;30390:5;30351:45;:::i;:::-;30346:3;30339:58;30256:147;;:::o;30409:114::-;30476:6;30510:5;30504:12;30494:22;;30409:114;;;:::o;30529:184::-;30628:11;30662:6;30657:3;30650:19;30702:4;30697:3;30693:14;30678:29;;30529:184;;;;:::o;30719:132::-;30786:4;30809:3;30801:11;;30839:4;30834:3;30830:14;30822:22;;30719:132;;;:::o;30857:108::-;30934:24;30952:5;30934:24;:::i;:::-;30929:3;30922:37;30857:108;;:::o;30971:179::-;31040:10;31061:46;31103:3;31095:6;31061:46;:::i;:::-;31139:4;31134:3;31130:14;31116:28;;30971:179;;;;:::o;31156:113::-;31226:4;31258;31253:3;31249:14;31241:22;;31156:113;;;:::o;31305:732::-;31424:3;31453:54;31501:5;31453:54;:::i;:::-;31523:86;31602:6;31597:3;31523:86;:::i;:::-;31516:93;;31633:56;31683:5;31633:56;:::i;:::-;31712:7;31743:1;31728:284;31753:6;31750:1;31747:13;31728:284;;;31829:6;31823:13;31856:63;31915:3;31900:13;31856:63;:::i;:::-;31849:70;;31942:60;31995:6;31942:60;:::i;:::-;31932:70;;31788:224;31775:1;31772;31768:9;31763:14;;31728:284;;;31732:14;32028:3;32021:10;;31429:608;;;31305:732;;;;:::o;32043:831::-;32306:4;32344:3;32333:9;32329:19;32321:27;;32358:71;32426:1;32415:9;32411:17;32402:6;32358:71;:::i;:::-;32439:80;32515:2;32504:9;32500:18;32491:6;32439:80;:::i;:::-;32566:9;32560:4;32556:20;32551:2;32540:9;32536:18;32529:48;32594:108;32697:4;32688:6;32594:108;:::i;:::-;32586:116;;32712:72;32780:2;32769:9;32765:18;32756:6;32712:72;:::i;:::-;32794:73;32862:3;32851:9;32847:19;32838:6;32794:73;:::i;:::-;32043:831;;;;;;;;:::o;32880:807::-;33129:4;33167:3;33156:9;33152:19;33144:27;;33181:71;33249:1;33238:9;33234:17;33225:6;33181:71;:::i;:::-;33262:72;33330:2;33319:9;33315:18;33306:6;33262:72;:::i;:::-;33344:80;33420:2;33409:9;33405:18;33396:6;33344:80;:::i;:::-;33434;33510:2;33499:9;33495:18;33486:6;33434:80;:::i;:::-;33524:73;33592:3;33581:9;33577:19;33568:6;33524:73;:::i;:::-;33607;33675:3;33664:9;33660:19;33651:6;33607:73;:::i;:::-;32880:807;;;;;;;;;:::o;33693:663::-;33781:6;33789;33797;33846:2;33834:9;33825:7;33821:23;33817:32;33814:119;;;33852:79;;:::i;:::-;33814:119;33972:1;33997:64;34053:7;34044:6;34033:9;34029:22;33997:64;:::i;:::-;33987:74;;33943:128;34110:2;34136:64;34192:7;34183:6;34172:9;34168:22;34136:64;:::i;:::-;34126:74;;34081:129;34249:2;34275:64;34331:7;34322:6;34311:9;34307:22;34275:64;:::i;:::-;34265:74;;34220:129;33693:663;;;;;:::o

Swarm Source

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