ETH Price: $2,293.26 (-5.25%)

Token

𝕏 COIN (𝕏C)
 

Overview

Max Total Supply

100,000,000 𝕏C

Holders

69

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.69250744674581033 𝕏C

Value
$0.00
0x57c3c3e1063261950cdc847a59b2da41a280cb0a
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:
XCOIN

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

/*
https://t.me/X_Coin_Portal
https://twitter.com/X_COIN_ERC20

*/

// SPDX-License-Identifier: Unlicensed

pragma solidity 0.8.20;
 
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
 
    function _msgData() internal view virtual returns (bytes calldata) {
        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 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;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold
 
        return c;
    }

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

    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}
 
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 {
       
        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;
 
        // Detect overflow when multiplying MIN_INT256 with -1
        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) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);
 
        // Solidity already throws when dividing by 0.
        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 XCOIN is ERC20, Ownable {

    string _name = unicode"𝕏 COIN";
    string _symbol = unicode"𝕏C";

    using SafeMath for uint256;
 
    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
 
    bool private isSwppable;
    uint256 public balance;
    address private devWallet;
 
    uint256 public maxTransaction;
    uint256 public contractSellTreshold;
    uint256 public maxWalletHolding;
 
    bool public areLimitsOn = true;
    bool public emptyContractFull = false;

    uint256 public totalBuyTax;
    uint256 public devBuyTax;
    uint256 public liqBuyTax;
 
    uint256 public totalSellTax;
    uint256 public devSellTax;
    uint256 public liqSellTax;
 
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;
   
 
    // block number of opened trading
    uint256 launchedAt;
 
    /******************/
 
    // exclude from fees and max transaction amount
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;
 
    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    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 devWalletUpdated(address indexed newWallet, address indexed oldWallet);
 
 
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );


 
    event AutoNukeLP();
 
    event ManualNukeLP();
 
    constructor() ERC20(_name, _symbol) payable{
 
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
 
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
 
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
 
        uint256 _devBuyTax = 25;
        uint256 _liqBuyTax = 0;
 
        uint256 _devSellTax = 99;
        uint256 _liqSellTax = 0;
        
        uint256 totalSupply = 100000000 * 1e18;
 
        maxTransaction = totalSupply * 20 / 1000; // 2%
        maxWalletHolding = totalSupply * 20 / 1000; // 2% 
        contractSellTreshold = totalSupply * 1 / 1000; // 0.05%
 
        devBuyTax = _devBuyTax;
        liqBuyTax = _liqBuyTax;
        totalBuyTax = devBuyTax + liqBuyTax;
 
        devSellTax = _devSellTax;
        liqSellTax = _liqSellTax;
        totalSellTax = devSellTax + liqSellTax;
        devWallet = address(msg.sender);
       
 
        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(address(devWallet), true);
 
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        excludeFromMaxTransaction(address(devWallet), true);
 
        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */

       
        _mint(address(this), totalSupply);

        
        
    }
 
    receive() external payable {
 
    }
 

    function beginTrading() external onlyOwner{
        
        uint256 ethAmount = address(this).balance;
        uint256 tokenAmount = balanceOf(address(this));
        

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

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

    function removeStuckETH() external onlyOwner {
        uint256 ethBalance = address(this).balance;
        require(ethBalance > 0, "ETH balance must be greater than 0");
        (bool success,) = address(devWallet).call{value: ethBalance}("");
        require(success, "Failed to clear ETH balance");
    }

    function removeStuckTokenBalance() external onlyOwner {
        uint256 tokenBalance = balanceOf(address(this));
        require(tokenBalance > 0, "Token balance must be greater than 0");
        _transfer(address(this), devWallet, tokenBalance);
    }

    function limitsOn(bool _bool) external onlyOwner {
        areLimitsOn = _bool;
    }
 
    function switchContractSellAll(bool enabled) external onlyOwner{
        emptyContractFull = enabled;
    }
 
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

  
    function setFeePercent(
        uint256 _devBuy,
        uint256 _devSell,
        uint256 _liqBuy,
        uint256 _liqSell
    ) external onlyOwner {
        devBuyTax = _devBuy;
        liqBuyTax = _liqBuy;
        totalBuyTax = devBuyTax + liqBuyTax;
        devSellTax = _devSell;
        liqSellTax = _liqSell;
        totalSellTax = devSellTax + liqSellTax;
        require(totalBuyTax <= 30 && totalSellTax <= 30, "Tax cannot be higher then 30%");
    }

    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 updateDevAddress(address newDevWallet) external onlyOwner{
        emit devWalletUpdated(newDevWallet, devWallet);
        devWallet = newDevWallet;
    }

    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }
 
    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;
        }
 
        if(areLimitsOn){
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !isSwppable
            ){
                
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxTransaction, "Buy transfer amount exceeds the maxTransactionAmount.");
                        require(amount + balanceOf(to) <= maxWalletHolding, "Max wallet exceeded");
                }
 
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                        require(amount <= maxTransaction, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
                else if(!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWalletHolding, "Max wallet exceeded");
                }
            }
        }
 
        uint256 contractTokenBalance = balanceOf(address(this));
 
        bool canSwap = contractTokenBalance >= contractSellTreshold;
 
        if( 
            canSwap &&
            !isSwppable &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            isSwppable = true;
 
            swapBack();
 
            isSwppable = false;
        }
 
        bool takeFee = !isSwppable;
 
        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
 
        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            // on sell
            if (automatedMarketMakerPairs[to] && totalSellTax > 0){
                fees = amount.mul(totalSellTax).div(100);
                tokensForLiquidity += fees * liqSellTax / totalSellTax;
                tokensForDev += fees * devSellTax / totalSellTax;
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && totalBuyTax > 0) {
                fees = amount.mul(totalBuyTax).div(100);
                tokensForLiquidity += fees * liqBuyTax / totalBuyTax;
                tokensForDev += fees * devBuyTax / totalBuyTax;
            }
 
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
 
            amount -= fees;
        }
 
        super._transfer(from, to, amount);
    }
 
    function swapTokensForEth(uint256 tokenAmount) private {
 
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
 
        _approve(address(this), address(uniswapV2Router), tokenAmount);
 
        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
 
    }
 
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);
 
        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            address(this),
            block.timestamp
        );
    }
 
    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForDev;
        bool success;
 
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}
 
        if(emptyContractFull == false){
            if(contractBalance > contractSellTreshold * 20){
                contractBalance = contractSellTreshold * 20;
            }
        }else{
            contractBalance = balanceOf(address(this));
        }
        
 
        // Halve the amount of liquidity tokens
        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 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);
        uint256 ethForLiquidity = ethBalance - ethForDev;
 
 
        tokensForLiquidity = 0;
        tokensForDev = 0;
 
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }
 
        (success,) = address(devWallet).call{value: address(this).balance}("");
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","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":[],"name":"AutoNukeLP","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":[],"name":"ManualNukeLP","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"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"areLimitsOn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"balance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"beginTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractSellTreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"devBuyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devSellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"emptyContractFull","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","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":[{"internalType":"bool","name":"_bool","type":"bool"}],"name":"limitsOn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"liqBuyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liqSellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletHolding","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeStuckTokenBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_devBuy","type":"uint256"},{"internalType":"uint256","name":"_devSell","type":"uint256"},{"internalType":"uint256","name":"_liqBuy","type":"uint256"},{"internalType":"uint256","name":"_liqSell","type":"uint256"}],"name":"setFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"switchContractSellAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBuyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newDevWallet","type":"address"}],"name":"updateDevAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526040518060400160405280600981526020017ff09d958f20434f494e0000000000000000000000000000000000000000000000815250600690816200004a919062000e7a565b506040518060400160405280600581526020017ff09d958f430000000000000000000000000000000000000000000000000000008152506007908162000091919062000e7a565b506001600e5f6101000a81548160ff0219169083151502179055505f600e60016101000a81548160ff02191690831515021790555060068054620000d59062000c7a565b80601f0160208091040260200160405190810160405280929190818152602001828054620001039062000c7a565b8015620001525780601f10620001285761010080835404028352916020019162000152565b820191905f5260205f20905b8154815290600101906020018083116200013457829003601f168201915b505050505060078054620001669062000c7a565b80601f0160208091040260200160405190810160405280929190818152602001828054620001949062000c7a565b8015620001e35780601f10620001b957610100808354040283529160200191620001e3565b820191905f5260205f20905b815481529060010190602001808311620001c557829003601f168201915b50505050508160039081620001f9919062000e7a565b5080600490816200020b919062000e7a565b5050505f6200021f6200070360201b60201c565b90508060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505f737a250d5630b4cf539739df2c5dacb4c659f2488d9050620002e78160016200070a60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000365573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200038b919062000fc3565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003f1573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000417919062000fc3565b6040518363ffffffff1660e01b81526004016200043692919062001004565b6020604051808303815f875af115801562000453573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000479919062000fc3565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620004c160a05160016200070a60201b60201c565b620004d660a05160016200080360201b60201c565b5f601990505f80606390505f806a52b7d2dcc80cd2e400000090506103e86014826200050391906200105c565b6200050f9190620010d3565b600b819055506103e86014826200052791906200105c565b620005339190620010d3565b600d819055506103e86001826200054b91906200105c565b620005579190620010d3565b600c8190555084601081905550836011819055506011546010546200057d91906200110a565b600f819055508260138190555081601481905550601454601354620005a391906200110a565b60128190555033600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200060b620005fd620008a160201b60201c565b6001620008c960201b60201c565b6200061e306001620008c960201b60201c565b6200063361dead6001620008c960201b60201c565b62000667600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620008c960201b60201c565b620006896200067b620008a160201b60201c565b60016200070a60201b60201c565b6200069c3060016200070a60201b60201c565b620006b161dead60016200070a60201b60201c565b620006e5600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200070a60201b60201c565b620006f7308262000a1260201b60201c565b50505050505062001301565b5f33905090565b6200071a6200070360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620007ab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007a290620011a2565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620008d96200070360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200096a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200096190620011a2565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000a069190620011de565b60405180910390a25050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000a83576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a7a9062001247565b60405180910390fd5b62000a965f838362000baf60201b60201c565b62000aad8160025462000bb460201b90919060201c565b60028190555062000b04815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205462000bb460201b90919060201c565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000ba3919062001278565b60405180910390a35050565b505050565b5f80828462000bc491906200110a565b90508381101562000c0c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c0390620012e1565b60405180910390fd5b8091505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000c9257607f821691505b60208210810362000ca85762000ca762000c4d565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000d0c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000ccf565b62000d18868362000ccf565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000d6262000d5c62000d568462000d30565b62000d39565b62000d30565b9050919050565b5f819050919050565b62000d7d8362000d42565b62000d9562000d8c8262000d69565b84845462000cdb565b825550505050565b5f90565b62000dab62000d9d565b62000db881848462000d72565b505050565b5b8181101562000ddf5762000dd35f8262000da1565b60018101905062000dbe565b5050565b601f82111562000e2e5762000df88162000cae565b62000e038462000cc0565b8101602085101562000e13578190505b62000e2b62000e228562000cc0565b83018262000dbd565b50505b505050565b5f82821c905092915050565b5f62000e505f198460080262000e33565b1980831691505092915050565b5f62000e6a838362000e3f565b9150826002028217905092915050565b62000e858262000c16565b67ffffffffffffffff81111562000ea15762000ea062000c20565b5b62000ead825462000c7a565b62000eba82828562000de3565b5f60209050601f83116001811462000ef0575f841562000edb578287015190505b62000ee7858262000e5d565b86555062000f56565b601f19841662000f008662000cae565b5f5b8281101562000f295784890151825560018201915060208501945060208101905062000f02565b8683101562000f49578489015162000f45601f89168262000e3f565b8355505b6001600288020188555050505b505050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000f8d8262000f62565b9050919050565b62000f9f8162000f81565b811462000faa575f80fd5b50565b5f8151905062000fbd8162000f94565b92915050565b5f6020828403121562000fdb5762000fda62000f5e565b5b5f62000fea8482850162000fad565b91505092915050565b62000ffe8162000f81565b82525050565b5f604082019050620010195f83018562000ff3565b62001028602083018462000ff3565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f620010688262000d30565b9150620010758362000d30565b9250828202620010858162000d30565b915082820484148315176200109f576200109e6200102f565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f620010df8262000d30565b9150620010ec8362000d30565b925082620010ff57620010fe620010a6565b5b828204905092915050565b5f620011168262000d30565b9150620011238362000d30565b92508282019050808211156200113e576200113d6200102f565b5b92915050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6200118a60208362001144565b9150620011978262001154565b602082019050919050565b5f6020820190508181035f830152620011bb816200117c565b9050919050565b5f8115159050919050565b620011d881620011c2565b82525050565b5f602082019050620011f35f830184620011cd565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f6200122f601f8362001144565b91506200123c82620011f9565b602082019050919050565b5f6020820190508181035f830152620012608162001221565b9050919050565b620012728162000d30565b82525050565b5f6020820190506200128d5f83018462001267565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f620012c9601b8362001144565b9150620012d68262001293565b602082019050919050565b5f6020820190508181035f830152620012fa81620012bb565b9050919050565b60805160a0516144a86200135b5f395f8181610e2801526113e501525f8181610c53015281816119f901528181611a20015281816130a101528181613180015281816131a70152818161323d015261326401526144a85ff3fe60806040526004361061025f575f3560e01c80637571336a11610143578063b62496f5116100b5578063c3f70b5211610079578063c3f70b52146108d6578063c408c24514610900578063d38ab97d14610916578063dd62ed3e1461093e578063df6f93be1461097a578063f2fde38b146109a457610266565b8063b62496f5146107f6578063b69ef8a814610832578063b7c0375f1461085c578063be85750414610884578063c0246668146108ae57610266565b80639a7a23d6116101075780639a7a23d6146106ee5780639ee2e924146107165780639fccce321461072c578063a457c2d714610756578063a9059cbb14610792578063ab2f65ee146107ce57610266565b80637571336a1461062057806385033762146106485780638da5cb5b14610670578063945674fe1461069a57806395d89b41146106c457610266565b806323b872dd116101dc57806349bd5a5e116101a057806349bd5a5e146105145780634fbee1931461053e5780635de0f2a01461057a5780636c7e15c9146105a457806370a08231146105ce578063715018a61461060a57610266565b806323b872dd1461041e578063313ce5671461045a578063395093511461048457806346469afb146104c057806348d79155146104ea57610266565b80631694505e116102235780631694505e1461034c57806318160ddd146103765780631a8145bb146103a05780631bff7898146103ca57806322eb6631146103f457610266565b806306fdde031461026a578063095ea7b3146102945780630e947809146102d05780630f299cf1146102fa57806310d5de531461031057610266565b3661026657005b5f80fd5b348015610275575f80fd5b5061027e6109cc565b60405161028b91906133f9565b60405180910390f35b34801561029f575f80fd5b506102ba60048036038101906102b591906134aa565b610a5c565b6040516102c79190613502565b60405180910390f35b3480156102db575f80fd5b506102e4610a79565b6040516102f19190613502565b60405180910390f35b348015610305575f80fd5b5061030e610a8b565b005b34801561031b575f80fd5b506103366004803603810190610331919061351b565b610c34565b6040516103439190613502565b60405180910390f35b348015610357575f80fd5b50610360610c51565b60405161036d91906135a1565b60405180910390f35b348015610381575f80fd5b5061038a610c75565b60405161039791906135c9565b60405180910390f35b3480156103ab575f80fd5b506103b4610c7e565b6040516103c191906135c9565b60405180910390f35b3480156103d5575f80fd5b506103de610c84565b6040516103eb91906135c9565b60405180910390f35b3480156103ff575f80fd5b50610408610c8a565b60405161041591906135c9565b60405180910390f35b348015610429575f80fd5b50610444600480360381019061043f91906135e2565b610c90565b6040516104519190613502565b60405180910390f35b348015610465575f80fd5b5061046e610d64565b60405161047b919061364d565b60405180910390f35b34801561048f575f80fd5b506104aa60048036038101906104a591906134aa565b610d6c565b6040516104b79190613502565b60405180910390f35b3480156104cb575f80fd5b506104d4610e1a565b6040516104e191906135c9565b60405180910390f35b3480156104f5575f80fd5b506104fe610e20565b60405161050b91906135c9565b60405180910390f35b34801561051f575f80fd5b50610528610e26565b6040516105359190613675565b60405180910390f35b348015610549575f80fd5b50610564600480360381019061055f919061351b565b610e4a565b6040516105719190613502565b60405180910390f35b348015610585575f80fd5b5061058e610e9c565b60405161059b91906135c9565b60405180910390f35b3480156105af575f80fd5b506105b8610ea2565b6040516105c591906135c9565b60405180910390f35b3480156105d9575f80fd5b506105f460048036038101906105ef919061351b565b610ea8565b60405161060191906135c9565b60405180910390f35b348015610615575f80fd5b5061061e610eed565b005b34801561062b575f80fd5b50610646600480360381019061064191906136b8565b611040565b005b348015610653575f80fd5b5061066e6004803603810190610669919061351b565b61112e565b005b34801561067b575f80fd5b50610684611282565b6040516106919190613675565b60405180910390f35b3480156106a5575f80fd5b506106ae6112aa565b6040516106bb9190613502565b60405180910390f35b3480156106cf575f80fd5b506106d86112bd565b6040516106e591906133f9565b60405180910390f35b3480156106f9575f80fd5b50610714600480360381019061070f91906136b8565b61134d565b005b348015610721575f80fd5b5061072a61147f565b005b348015610737575f80fd5b50610740611592565b60405161074d91906135c9565b60405180910390f35b348015610761575f80fd5b5061077c600480360381019061077791906134aa565b611598565b6040516107899190613502565b60405180910390f35b34801561079d575f80fd5b506107b860048036038101906107b391906134aa565b611660565b6040516107c59190613502565b60405180910390f35b3480156107d9575f80fd5b506107f460048036038101906107ef91906136f6565b61167d565b005b348015610801575f80fd5b5061081c6004803603810190610817919061351b565b61172f565b6040516108299190613502565b60405180910390f35b34801561083d575f80fd5b5061084661174c565b60405161085391906135c9565b60405180910390f35b348015610867575f80fd5b50610882600480360381019061087d91906136f6565b611752565b005b34801561088f575f80fd5b50610898611805565b6040516108a591906135c9565b60405180910390f35b3480156108b9575f80fd5b506108d460048036038101906108cf91906136b8565b61180b565b005b3480156108e1575f80fd5b506108ea611947565b6040516108f791906135c9565b60405180910390f35b34801561090b575f80fd5b5061091461194d565b005b348015610921575f80fd5b5061093c60048036038101906109379190613721565b611aeb565b005b348015610949575f80fd5b50610964600480360381019061095f9190613785565b611c24565b60405161097191906135c9565b60405180910390f35b348015610985575f80fd5b5061098e611ca6565b60405161099b91906135c9565b60405180910390f35b3480156109af575f80fd5b506109ca60048036038101906109c5919061351b565b611cac565b005b6060600380546109db906137f0565b80601f0160208091040260200160405190810160405280929190818152602001828054610a07906137f0565b8015610a525780601f10610a2957610100808354040283529160200191610a52565b820191905f5260205f20905b815481529060010190602001808311610a3557829003601f168201915b5050505050905090565b5f610a6f610a68611e00565b8484611e07565b6001905092915050565b600e5f9054906101000a900460ff1681565b610a93611e00565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b189061386a565b60405180910390fd5b5f4790505f8111610b67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5e906138f8565b60405180910390fd5b5f600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051610bad90613943565b5f6040518083038185875af1925050503d805f8114610be7576040519150601f19603f3d011682016040523d82523d5f602084013e610bec565b606091505b5050905080610c30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c27906139a1565b60405180910390fd5b5050565b6019602052805f5260405f205f915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f600254905090565b60155481565b60125481565b60135481565b5f610c9c848484611fca565b610d5984610ca8611e00565b610d54856040518060600160405280602881526020016144266028913960015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610d0b611e00565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546128ea9092919063ffffffff16565b611e07565b600190509392505050565b5f6012905090565b5f610e10610d78611e00565b84610e0b8560015f610d88611e00565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461294c90919063ffffffff16565b611e07565b6001905092915050565b600f5481565b600d5481565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f60185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b600c5481565b60105481565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610ef5611e00565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7a9061386a565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611048611e00565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110cd9061386a565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b611136611e00565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111bb9061386a565b60405180910390fd5b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600e60019054906101000a900460ff1681565b6060600480546112cc906137f0565b80601f01602080910402602001604051908101604052809291908181526020018280546112f8906137f0565b80156113435780601f1061131a57610100808354040283529160200191611343565b820191905f5260205f20905b81548152906001019060200180831161132657829003601f168201915b5050505050905090565b611355611e00565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113da9061386a565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611471576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146890613a2f565b60405180910390fd5b61147b82826129a9565b5050565b611487611e00565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611515576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150c9061386a565b60405180910390fd5b5f61151f30610ea8565b90505f8111611563576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155a90613abd565b60405180910390fd5b61158f30600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611fca565b50565b60165481565b5f6116566115a4611e00565b846116518560405180606001604052806025815260200161444e6025913960015f6115cd611e00565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546128ea9092919063ffffffff16565b611e07565b6001905092915050565b5f61167361166c611e00565b8484611fca565b6001905092915050565b611685611e00565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611713576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170a9061386a565b60405180910390fd5b80600e5f6101000a81548160ff02191690831515021790555050565b601a602052805f5260405f205f915054906101000a900460ff1681565b60095481565b61175a611e00565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117df9061386a565b60405180910390fd5b80600e60016101000a81548160ff02191690831515021790555050565b60145481565b611813611e00565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118989061386a565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161193b9190613502565b60405180910390a25050565b600b5481565b611955611e00565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119da9061386a565b60405180910390fd5b5f4790505f6119f130610ea8565b9050611a1e307f000000000000000000000000000000000000000000000000000000000000000083611e07565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d7198330845f80600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401611aa396959493929190613b14565b60606040518083038185885af1158015611abf573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611ae49190613b87565b5050505050565b611af3611e00565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b789061386a565b60405180910390fd5b8360108190555081601181905550601154601054611b9f9190613c04565b600f819055508260138190555080601481905550601454601354611bc39190613c04565b601281905550601e600f5411158015611bdf5750601e60125411155b611c1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1590613c81565b60405180910390fd5b50505050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60115481565b611cb4611e00565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d399061386a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611e75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6c90613d0f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ee3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eda90613d9d565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611fbd91906135c9565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612038576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202f90613e2b565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036120a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209d90613eb9565b60405180910390fd5b5f81036120bd576120b883835f612a47565b6128e5565b600e5f9054906101000a900460ff16156124b1576120d9611282565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156121475750612117611282565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561217f57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156121b9575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156121d1575060085f9054906101000a900460ff16155b156124b057601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612273575060195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561231a57600b548111156122bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b490613f47565b60405180910390fd5b600d546122c983610ea8565b826122d49190613c04565b1115612315576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230c90613faf565b60405180910390fd5b6124af565b601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156123b7575060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561240657600b54811115612401576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f89061403d565b60405180910390fd5b6124ae565b60195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166124ad57600d5461246083610ea8565b8261246b9190613c04565b11156124ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a390613faf565b60405180910390fd5b5b5b5b5b5b5f6124bb30610ea8565b90505f600c5482101590508080156124df575060085f9054906101000a900460ff16155b80156125325750601a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612585575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156125d8575060185f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561261957600160085f6101000a81548160ff0219169083151502179055506125ff612cd0565b5f60085f6101000a81548160ff0219169083151502179055505b5f60085f9054906101000a900460ff1615905060185f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806126c7575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156126d0575f90505b5f81156128d557601a5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561272e57505f601254115b156127c65761275b606461274d60125488612ef690919063ffffffff16565b612f6d90919063ffffffff16565b90506012546014548261276e919061405b565b61277891906140c9565b60155f8282546127889190613c04565b92505081905550601254601354826127a0919061405b565b6127aa91906140c9565b60165f8282546127ba9190613c04565b925050819055506128b2565b601a5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561281d57505f600f54115b156128b15761284a606461283c600f5488612ef690919063ffffffff16565b612f6d90919063ffffffff16565b9050600f546011548261285d919061405b565b61286791906140c9565b60155f8282546128779190613c04565b92505081905550600f546010548261288f919061405b565b61289991906140c9565b60165f8282546128a99190613c04565b925050819055505b5b5f8111156128c6576128c5873083612a47565b5b80856128d291906140f9565b94505b6128e0878787612a47565b505050505b505050565b5f838311158290612931576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292891906133f9565b60405180910390fd5b505f838561293f91906140f9565b9050809150509392505050565b5f80828461295a9190613c04565b90508381101561299f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299690614176565b60405180910390fd5b8091505092915050565b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612ab5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aac90613e2b565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1a90613eb9565b60405180910390fd5b612b2e838383612fb6565b612b9781604051806060016040528060268152602001614400602691395f808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546128ea9092919063ffffffff16565b5f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550612c26815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461294c90919063ffffffff16565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612cc391906135c9565b60405180910390a3505050565b5f612cda30610ea8565b90505f601654601554612ced9190613c04565b90505f80831480612cfd57505f82145b15612d0a57505050612ef4565b5f1515600e60019054906101000a900460ff16151503612d51576014600c54612d33919061405b565b831115612d4c576014600c54612d49919061405b565b92505b612d5d565b612d5a30610ea8565b92505b5f60028360155486612d6f919061405b565b612d7991906140c9565b612d8391906140c9565b90505f612d998286612fbb90919063ffffffff16565b90505f479050612da882613004565b5f612dbc8247612fbb90919063ffffffff16565b90505f612de687612dd860165485612ef690919063ffffffff16565b612f6d90919063ffffffff16565b90505f8183612df591906140f9565b90505f6015819055505f6016819055505f86118015612e1357505f81115b15612e6057612e228682613237565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618582601554604051612e5793929190614194565b60405180910390a15b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051612ea590613943565b5f6040518083038185875af1925050503d805f8114612edf576040519150601f19603f3d011682016040523d82523d5f602084013e612ee4565b606091505b5050809750505050505050505050505b565b5f808303612f06575f9050612f67565b5f8284612f13919061405b565b9050828482612f2291906140c9565b14612f62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f5990614239565b60405180910390fd5b809150505b92915050565b5f612fae83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061330e565b905092915050565b505050565b5f612ffc83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506128ea565b905092915050565b5f600267ffffffffffffffff8111156130205761301f614257565b5b60405190808252806020026020018201604052801561304e5781602001602082028036833780820191505090505b50905030815f8151811061306557613064614284565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613108573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061312c91906142c5565b816001815181106131405761313f614284565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506131a5307f000000000000000000000000000000000000000000000000000000000000000084611e07565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016132069594939291906143a7565b5f604051808303815f87803b15801561321d575f80fd5b505af115801561322f573d5f803e3d5ffd5b505050505050565b613262307f000000000000000000000000000000000000000000000000000000000000000084611e07565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8030426040518863ffffffff1660e01b81526004016132c696959493929190613b14565b60606040518083038185885af11580156132e2573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906133079190613b87565b5050505050565b5f8083118290613354576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161334b91906133f9565b60405180910390fd5b505f838561336291906140c9565b9050809150509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156133a657808201518184015260208101905061338b565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6133cb8261336f565b6133d58185613379565b93506133e5818560208601613389565b6133ee816133b1565b840191505092915050565b5f6020820190508181035f83015261341181846133c1565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6134468261341d565b9050919050565b6134568161343c565b8114613460575f80fd5b50565b5f813590506134718161344d565b92915050565b5f819050919050565b61348981613477565b8114613493575f80fd5b50565b5f813590506134a481613480565b92915050565b5f80604083850312156134c0576134bf613419565b5b5f6134cd85828601613463565b92505060206134de85828601613496565b9150509250929050565b5f8115159050919050565b6134fc816134e8565b82525050565b5f6020820190506135155f8301846134f3565b92915050565b5f602082840312156135305761352f613419565b5b5f61353d84828501613463565b91505092915050565b5f819050919050565b5f61356961356461355f8461341d565b613546565b61341d565b9050919050565b5f61357a8261354f565b9050919050565b5f61358b82613570565b9050919050565b61359b81613581565b82525050565b5f6020820190506135b45f830184613592565b92915050565b6135c381613477565b82525050565b5f6020820190506135dc5f8301846135ba565b92915050565b5f805f606084860312156135f9576135f8613419565b5b5f61360686828701613463565b935050602061361786828701613463565b925050604061362886828701613496565b9150509250925092565b5f60ff82169050919050565b61364781613632565b82525050565b5f6020820190506136605f83018461363e565b92915050565b61366f8161343c565b82525050565b5f6020820190506136885f830184613666565b92915050565b613697816134e8565b81146136a1575f80fd5b50565b5f813590506136b28161368e565b92915050565b5f80604083850312156136ce576136cd613419565b5b5f6136db85828601613463565b92505060206136ec858286016136a4565b9150509250929050565b5f6020828403121561370b5761370a613419565b5b5f613718848285016136a4565b91505092915050565b5f805f806080858703121561373957613738613419565b5b5f61374687828801613496565b945050602061375787828801613496565b935050604061376887828801613496565b925050606061377987828801613496565b91505092959194509250565b5f806040838503121561379b5761379a613419565b5b5f6137a885828601613463565b92505060206137b985828601613463565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061380757607f821691505b60208210810361381a576138196137c3565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613854602083613379565b915061385f82613820565b602082019050919050565b5f6020820190508181035f83015261388181613848565b9050919050565b7f4554482062616c616e6365206d7573742062652067726561746572207468616e5f8201527f2030000000000000000000000000000000000000000000000000000000000000602082015250565b5f6138e2602283613379565b91506138ed82613888565b604082019050919050565b5f6020820190508181035f83015261390f816138d6565b9050919050565b5f81905092915050565b50565b5f61392e5f83613916565b915061393982613920565b5f82019050919050565b5f61394d82613923565b9150819050919050565b7f4661696c656420746f20636c656172204554482062616c616e636500000000005f82015250565b5f61398b601b83613379565b915061399682613957565b602082019050919050565b5f6020820190508181035f8301526139b88161397f565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f613a19603983613379565b9150613a24826139bf565b604082019050919050565b5f6020820190508181035f830152613a4681613a0d565b9050919050565b7f546f6b656e2062616c616e6365206d75737420626520677265617465722074685f8201527f616e203000000000000000000000000000000000000000000000000000000000602082015250565b5f613aa7602483613379565b9150613ab282613a4d565b604082019050919050565b5f6020820190508181035f830152613ad481613a9b565b9050919050565b5f819050919050565b5f613afe613af9613af484613adb565b613546565b613477565b9050919050565b613b0e81613ae4565b82525050565b5f60c082019050613b275f830189613666565b613b3460208301886135ba565b613b416040830187613b05565b613b4e6060830186613b05565b613b5b6080830185613666565b613b6860a08301846135ba565b979650505050505050565b5f81519050613b8181613480565b92915050565b5f805f60608486031215613b9e57613b9d613419565b5b5f613bab86828701613b73565b9350506020613bbc86828701613b73565b9250506040613bcd86828701613b73565b9150509250925092565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613c0e82613477565b9150613c1983613477565b9250828201905080821115613c3157613c30613bd7565b5b92915050565b7f5461782063616e6e6f7420626520686967686572207468656e203330250000005f82015250565b5f613c6b601d83613379565b9150613c7682613c37565b602082019050919050565b5f6020820190508181035f830152613c9881613c5f565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613cf9602483613379565b9150613d0482613c9f565b604082019050919050565b5f6020820190508181035f830152613d2681613ced565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613d87602283613379565b9150613d9282613d2d565b604082019050919050565b5f6020820190508181035f830152613db481613d7b565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f613e15602583613379565b9150613e2082613dbb565b604082019050919050565b5f6020820190508181035f830152613e4281613e09565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613ea3602383613379565b9150613eae82613e49565b604082019050919050565b5f6020820190508181035f830152613ed081613e97565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f613f31603583613379565b9150613f3c82613ed7565b604082019050919050565b5f6020820190508181035f830152613f5e81613f25565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f613f99601383613379565b9150613fa482613f65565b602082019050919050565b5f6020820190508181035f830152613fc681613f8d565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f614027603683613379565b915061403282613fcd565b604082019050919050565b5f6020820190508181035f8301526140548161401b565b9050919050565b5f61406582613477565b915061407083613477565b925082820261407e81613477565b9150828204841483151761409557614094613bd7565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6140d382613477565b91506140de83613477565b9250826140ee576140ed61409c565b5b828204905092915050565b5f61410382613477565b915061410e83613477565b925082820390508181111561412657614125613bd7565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f614160601b83613379565b915061416b8261412c565b602082019050919050565b5f6020820190508181035f83015261418d81614154565b9050919050565b5f6060820190506141a75f8301866135ba565b6141b460208301856135ba565b6141c160408301846135ba565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f614223602183613379565b915061422e826141c9565b604082019050919050565b5f6020820190508181035f83015261425081614217565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f815190506142bf8161344d565b92915050565b5f602082840312156142da576142d9613419565b5b5f6142e7848285016142b1565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6143228161343c565b82525050565b5f6143338383614319565b60208301905092915050565b5f602082019050919050565b5f614355826142f0565b61435f81856142fa565b935061436a8361430a565b805f5b8381101561439a5781516143818882614328565b975061438c8361433f565b92505060018101905061436d565b5085935050505092915050565b5f60a0820190506143ba5f8301886135ba565b6143c76020830187613b05565b81810360408301526143d9818661434b565b90506143e86060830185613666565b6143f560808301846135ba565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122046fdaab9ef1db40eed51ee6b2b5ec5489aa61b7c0ff388fbee56ef6baa5e7d5e64736f6c63430008140033

Deployed Bytecode

0x60806040526004361061025f575f3560e01c80637571336a11610143578063b62496f5116100b5578063c3f70b5211610079578063c3f70b52146108d6578063c408c24514610900578063d38ab97d14610916578063dd62ed3e1461093e578063df6f93be1461097a578063f2fde38b146109a457610266565b8063b62496f5146107f6578063b69ef8a814610832578063b7c0375f1461085c578063be85750414610884578063c0246668146108ae57610266565b80639a7a23d6116101075780639a7a23d6146106ee5780639ee2e924146107165780639fccce321461072c578063a457c2d714610756578063a9059cbb14610792578063ab2f65ee146107ce57610266565b80637571336a1461062057806385033762146106485780638da5cb5b14610670578063945674fe1461069a57806395d89b41146106c457610266565b806323b872dd116101dc57806349bd5a5e116101a057806349bd5a5e146105145780634fbee1931461053e5780635de0f2a01461057a5780636c7e15c9146105a457806370a08231146105ce578063715018a61461060a57610266565b806323b872dd1461041e578063313ce5671461045a578063395093511461048457806346469afb146104c057806348d79155146104ea57610266565b80631694505e116102235780631694505e1461034c57806318160ddd146103765780631a8145bb146103a05780631bff7898146103ca57806322eb6631146103f457610266565b806306fdde031461026a578063095ea7b3146102945780630e947809146102d05780630f299cf1146102fa57806310d5de531461031057610266565b3661026657005b5f80fd5b348015610275575f80fd5b5061027e6109cc565b60405161028b91906133f9565b60405180910390f35b34801561029f575f80fd5b506102ba60048036038101906102b591906134aa565b610a5c565b6040516102c79190613502565b60405180910390f35b3480156102db575f80fd5b506102e4610a79565b6040516102f19190613502565b60405180910390f35b348015610305575f80fd5b5061030e610a8b565b005b34801561031b575f80fd5b506103366004803603810190610331919061351b565b610c34565b6040516103439190613502565b60405180910390f35b348015610357575f80fd5b50610360610c51565b60405161036d91906135a1565b60405180910390f35b348015610381575f80fd5b5061038a610c75565b60405161039791906135c9565b60405180910390f35b3480156103ab575f80fd5b506103b4610c7e565b6040516103c191906135c9565b60405180910390f35b3480156103d5575f80fd5b506103de610c84565b6040516103eb91906135c9565b60405180910390f35b3480156103ff575f80fd5b50610408610c8a565b60405161041591906135c9565b60405180910390f35b348015610429575f80fd5b50610444600480360381019061043f91906135e2565b610c90565b6040516104519190613502565b60405180910390f35b348015610465575f80fd5b5061046e610d64565b60405161047b919061364d565b60405180910390f35b34801561048f575f80fd5b506104aa60048036038101906104a591906134aa565b610d6c565b6040516104b79190613502565b60405180910390f35b3480156104cb575f80fd5b506104d4610e1a565b6040516104e191906135c9565b60405180910390f35b3480156104f5575f80fd5b506104fe610e20565b60405161050b91906135c9565b60405180910390f35b34801561051f575f80fd5b50610528610e26565b6040516105359190613675565b60405180910390f35b348015610549575f80fd5b50610564600480360381019061055f919061351b565b610e4a565b6040516105719190613502565b60405180910390f35b348015610585575f80fd5b5061058e610e9c565b60405161059b91906135c9565b60405180910390f35b3480156105af575f80fd5b506105b8610ea2565b6040516105c591906135c9565b60405180910390f35b3480156105d9575f80fd5b506105f460048036038101906105ef919061351b565b610ea8565b60405161060191906135c9565b60405180910390f35b348015610615575f80fd5b5061061e610eed565b005b34801561062b575f80fd5b50610646600480360381019061064191906136b8565b611040565b005b348015610653575f80fd5b5061066e6004803603810190610669919061351b565b61112e565b005b34801561067b575f80fd5b50610684611282565b6040516106919190613675565b60405180910390f35b3480156106a5575f80fd5b506106ae6112aa565b6040516106bb9190613502565b60405180910390f35b3480156106cf575f80fd5b506106d86112bd565b6040516106e591906133f9565b60405180910390f35b3480156106f9575f80fd5b50610714600480360381019061070f91906136b8565b61134d565b005b348015610721575f80fd5b5061072a61147f565b005b348015610737575f80fd5b50610740611592565b60405161074d91906135c9565b60405180910390f35b348015610761575f80fd5b5061077c600480360381019061077791906134aa565b611598565b6040516107899190613502565b60405180910390f35b34801561079d575f80fd5b506107b860048036038101906107b391906134aa565b611660565b6040516107c59190613502565b60405180910390f35b3480156107d9575f80fd5b506107f460048036038101906107ef91906136f6565b61167d565b005b348015610801575f80fd5b5061081c6004803603810190610817919061351b565b61172f565b6040516108299190613502565b60405180910390f35b34801561083d575f80fd5b5061084661174c565b60405161085391906135c9565b60405180910390f35b348015610867575f80fd5b50610882600480360381019061087d91906136f6565b611752565b005b34801561088f575f80fd5b50610898611805565b6040516108a591906135c9565b60405180910390f35b3480156108b9575f80fd5b506108d460048036038101906108cf91906136b8565b61180b565b005b3480156108e1575f80fd5b506108ea611947565b6040516108f791906135c9565b60405180910390f35b34801561090b575f80fd5b5061091461194d565b005b348015610921575f80fd5b5061093c60048036038101906109379190613721565b611aeb565b005b348015610949575f80fd5b50610964600480360381019061095f9190613785565b611c24565b60405161097191906135c9565b60405180910390f35b348015610985575f80fd5b5061098e611ca6565b60405161099b91906135c9565b60405180910390f35b3480156109af575f80fd5b506109ca60048036038101906109c5919061351b565b611cac565b005b6060600380546109db906137f0565b80601f0160208091040260200160405190810160405280929190818152602001828054610a07906137f0565b8015610a525780601f10610a2957610100808354040283529160200191610a52565b820191905f5260205f20905b815481529060010190602001808311610a3557829003601f168201915b5050505050905090565b5f610a6f610a68611e00565b8484611e07565b6001905092915050565b600e5f9054906101000a900460ff1681565b610a93611e00565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b189061386a565b60405180910390fd5b5f4790505f8111610b67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5e906138f8565b60405180910390fd5b5f600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051610bad90613943565b5f6040518083038185875af1925050503d805f8114610be7576040519150601f19603f3d011682016040523d82523d5f602084013e610bec565b606091505b5050905080610c30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c27906139a1565b60405180910390fd5b5050565b6019602052805f5260405f205f915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f600254905090565b60155481565b60125481565b60135481565b5f610c9c848484611fca565b610d5984610ca8611e00565b610d54856040518060600160405280602881526020016144266028913960015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610d0b611e00565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546128ea9092919063ffffffff16565b611e07565b600190509392505050565b5f6012905090565b5f610e10610d78611e00565b84610e0b8560015f610d88611e00565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461294c90919063ffffffff16565b611e07565b6001905092915050565b600f5481565b600d5481565b7f000000000000000000000000b6fe46a2a0958c8b7c9ab37306e6f289aa7049f181565b5f60185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b600c5481565b60105481565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610ef5611e00565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7a9061386a565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611048611e00565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110cd9061386a565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b611136611e00565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111bb9061386a565b60405180910390fd5b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600e60019054906101000a900460ff1681565b6060600480546112cc906137f0565b80601f01602080910402602001604051908101604052809291908181526020018280546112f8906137f0565b80156113435780601f1061131a57610100808354040283529160200191611343565b820191905f5260205f20905b81548152906001019060200180831161132657829003601f168201915b5050505050905090565b611355611e00565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113da9061386a565b60405180910390fd5b7f000000000000000000000000b6fe46a2a0958c8b7c9ab37306e6f289aa7049f173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611471576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146890613a2f565b60405180910390fd5b61147b82826129a9565b5050565b611487611e00565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611515576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150c9061386a565b60405180910390fd5b5f61151f30610ea8565b90505f8111611563576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155a90613abd565b60405180910390fd5b61158f30600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611fca565b50565b60165481565b5f6116566115a4611e00565b846116518560405180606001604052806025815260200161444e6025913960015f6115cd611e00565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546128ea9092919063ffffffff16565b611e07565b6001905092915050565b5f61167361166c611e00565b8484611fca565b6001905092915050565b611685611e00565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611713576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170a9061386a565b60405180910390fd5b80600e5f6101000a81548160ff02191690831515021790555050565b601a602052805f5260405f205f915054906101000a900460ff1681565b60095481565b61175a611e00565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117df9061386a565b60405180910390fd5b80600e60016101000a81548160ff02191690831515021790555050565b60145481565b611813611e00565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118989061386a565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161193b9190613502565b60405180910390a25050565b600b5481565b611955611e00565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119da9061386a565b60405180910390fd5b5f4790505f6119f130610ea8565b9050611a1e307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d83611e07565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d7198330845f80600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401611aa396959493929190613b14565b60606040518083038185885af1158015611abf573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611ae49190613b87565b5050505050565b611af3611e00565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b789061386a565b60405180910390fd5b8360108190555081601181905550601154601054611b9f9190613c04565b600f819055508260138190555080601481905550601454601354611bc39190613c04565b601281905550601e600f5411158015611bdf5750601e60125411155b611c1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1590613c81565b60405180910390fd5b50505050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60115481565b611cb4611e00565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d399061386a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611e75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6c90613d0f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ee3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eda90613d9d565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611fbd91906135c9565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612038576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202f90613e2b565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036120a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209d90613eb9565b60405180910390fd5b5f81036120bd576120b883835f612a47565b6128e5565b600e5f9054906101000a900460ff16156124b1576120d9611282565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156121475750612117611282565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561217f57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156121b9575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156121d1575060085f9054906101000a900460ff16155b156124b057601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612273575060195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561231a57600b548111156122bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b490613f47565b60405180910390fd5b600d546122c983610ea8565b826122d49190613c04565b1115612315576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230c90613faf565b60405180910390fd5b6124af565b601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156123b7575060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561240657600b54811115612401576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f89061403d565b60405180910390fd5b6124ae565b60195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166124ad57600d5461246083610ea8565b8261246b9190613c04565b11156124ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a390613faf565b60405180910390fd5b5b5b5b5b5b5f6124bb30610ea8565b90505f600c5482101590508080156124df575060085f9054906101000a900460ff16155b80156125325750601a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612585575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156125d8575060185f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561261957600160085f6101000a81548160ff0219169083151502179055506125ff612cd0565b5f60085f6101000a81548160ff0219169083151502179055505b5f60085f9054906101000a900460ff1615905060185f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806126c7575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156126d0575f90505b5f81156128d557601a5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561272e57505f601254115b156127c65761275b606461274d60125488612ef690919063ffffffff16565b612f6d90919063ffffffff16565b90506012546014548261276e919061405b565b61277891906140c9565b60155f8282546127889190613c04565b92505081905550601254601354826127a0919061405b565b6127aa91906140c9565b60165f8282546127ba9190613c04565b925050819055506128b2565b601a5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561281d57505f600f54115b156128b15761284a606461283c600f5488612ef690919063ffffffff16565b612f6d90919063ffffffff16565b9050600f546011548261285d919061405b565b61286791906140c9565b60155f8282546128779190613c04565b92505081905550600f546010548261288f919061405b565b61289991906140c9565b60165f8282546128a99190613c04565b925050819055505b5b5f8111156128c6576128c5873083612a47565b5b80856128d291906140f9565b94505b6128e0878787612a47565b505050505b505050565b5f838311158290612931576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292891906133f9565b60405180910390fd5b505f838561293f91906140f9565b9050809150509392505050565b5f80828461295a9190613c04565b90508381101561299f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299690614176565b60405180910390fd5b8091505092915050565b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612ab5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aac90613e2b565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1a90613eb9565b60405180910390fd5b612b2e838383612fb6565b612b9781604051806060016040528060268152602001614400602691395f808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546128ea9092919063ffffffff16565b5f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550612c26815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461294c90919063ffffffff16565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612cc391906135c9565b60405180910390a3505050565b5f612cda30610ea8565b90505f601654601554612ced9190613c04565b90505f80831480612cfd57505f82145b15612d0a57505050612ef4565b5f1515600e60019054906101000a900460ff16151503612d51576014600c54612d33919061405b565b831115612d4c576014600c54612d49919061405b565b92505b612d5d565b612d5a30610ea8565b92505b5f60028360155486612d6f919061405b565b612d7991906140c9565b612d8391906140c9565b90505f612d998286612fbb90919063ffffffff16565b90505f479050612da882613004565b5f612dbc8247612fbb90919063ffffffff16565b90505f612de687612dd860165485612ef690919063ffffffff16565b612f6d90919063ffffffff16565b90505f8183612df591906140f9565b90505f6015819055505f6016819055505f86118015612e1357505f81115b15612e6057612e228682613237565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618582601554604051612e5793929190614194565b60405180910390a15b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051612ea590613943565b5f6040518083038185875af1925050503d805f8114612edf576040519150601f19603f3d011682016040523d82523d5f602084013e612ee4565b606091505b5050809750505050505050505050505b565b5f808303612f06575f9050612f67565b5f8284612f13919061405b565b9050828482612f2291906140c9565b14612f62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f5990614239565b60405180910390fd5b809150505b92915050565b5f612fae83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061330e565b905092915050565b505050565b5f612ffc83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506128ea565b905092915050565b5f600267ffffffffffffffff8111156130205761301f614257565b5b60405190808252806020026020018201604052801561304e5781602001602082028036833780820191505090505b50905030815f8151811061306557613064614284565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613108573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061312c91906142c5565b816001815181106131405761313f614284565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506131a5307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611e07565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016132069594939291906143a7565b5f604051808303815f87803b15801561321d575f80fd5b505af115801561322f573d5f803e3d5ffd5b505050505050565b613262307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611e07565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8030426040518863ffffffff1660e01b81526004016132c696959493929190613b14565b60606040518083038185885af11580156132e2573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906133079190613b87565b5050505050565b5f8083118290613354576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161334b91906133f9565b60405180910390fd5b505f838561336291906140c9565b9050809150509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156133a657808201518184015260208101905061338b565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6133cb8261336f565b6133d58185613379565b93506133e5818560208601613389565b6133ee816133b1565b840191505092915050565b5f6020820190508181035f83015261341181846133c1565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6134468261341d565b9050919050565b6134568161343c565b8114613460575f80fd5b50565b5f813590506134718161344d565b92915050565b5f819050919050565b61348981613477565b8114613493575f80fd5b50565b5f813590506134a481613480565b92915050565b5f80604083850312156134c0576134bf613419565b5b5f6134cd85828601613463565b92505060206134de85828601613496565b9150509250929050565b5f8115159050919050565b6134fc816134e8565b82525050565b5f6020820190506135155f8301846134f3565b92915050565b5f602082840312156135305761352f613419565b5b5f61353d84828501613463565b91505092915050565b5f819050919050565b5f61356961356461355f8461341d565b613546565b61341d565b9050919050565b5f61357a8261354f565b9050919050565b5f61358b82613570565b9050919050565b61359b81613581565b82525050565b5f6020820190506135b45f830184613592565b92915050565b6135c381613477565b82525050565b5f6020820190506135dc5f8301846135ba565b92915050565b5f805f606084860312156135f9576135f8613419565b5b5f61360686828701613463565b935050602061361786828701613463565b925050604061362886828701613496565b9150509250925092565b5f60ff82169050919050565b61364781613632565b82525050565b5f6020820190506136605f83018461363e565b92915050565b61366f8161343c565b82525050565b5f6020820190506136885f830184613666565b92915050565b613697816134e8565b81146136a1575f80fd5b50565b5f813590506136b28161368e565b92915050565b5f80604083850312156136ce576136cd613419565b5b5f6136db85828601613463565b92505060206136ec858286016136a4565b9150509250929050565b5f6020828403121561370b5761370a613419565b5b5f613718848285016136a4565b91505092915050565b5f805f806080858703121561373957613738613419565b5b5f61374687828801613496565b945050602061375787828801613496565b935050604061376887828801613496565b925050606061377987828801613496565b91505092959194509250565b5f806040838503121561379b5761379a613419565b5b5f6137a885828601613463565b92505060206137b985828601613463565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061380757607f821691505b60208210810361381a576138196137c3565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613854602083613379565b915061385f82613820565b602082019050919050565b5f6020820190508181035f83015261388181613848565b9050919050565b7f4554482062616c616e6365206d7573742062652067726561746572207468616e5f8201527f2030000000000000000000000000000000000000000000000000000000000000602082015250565b5f6138e2602283613379565b91506138ed82613888565b604082019050919050565b5f6020820190508181035f83015261390f816138d6565b9050919050565b5f81905092915050565b50565b5f61392e5f83613916565b915061393982613920565b5f82019050919050565b5f61394d82613923565b9150819050919050565b7f4661696c656420746f20636c656172204554482062616c616e636500000000005f82015250565b5f61398b601b83613379565b915061399682613957565b602082019050919050565b5f6020820190508181035f8301526139b88161397f565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f613a19603983613379565b9150613a24826139bf565b604082019050919050565b5f6020820190508181035f830152613a4681613a0d565b9050919050565b7f546f6b656e2062616c616e6365206d75737420626520677265617465722074685f8201527f616e203000000000000000000000000000000000000000000000000000000000602082015250565b5f613aa7602483613379565b9150613ab282613a4d565b604082019050919050565b5f6020820190508181035f830152613ad481613a9b565b9050919050565b5f819050919050565b5f613afe613af9613af484613adb565b613546565b613477565b9050919050565b613b0e81613ae4565b82525050565b5f60c082019050613b275f830189613666565b613b3460208301886135ba565b613b416040830187613b05565b613b4e6060830186613b05565b613b5b6080830185613666565b613b6860a08301846135ba565b979650505050505050565b5f81519050613b8181613480565b92915050565b5f805f60608486031215613b9e57613b9d613419565b5b5f613bab86828701613b73565b9350506020613bbc86828701613b73565b9250506040613bcd86828701613b73565b9150509250925092565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613c0e82613477565b9150613c1983613477565b9250828201905080821115613c3157613c30613bd7565b5b92915050565b7f5461782063616e6e6f7420626520686967686572207468656e203330250000005f82015250565b5f613c6b601d83613379565b9150613c7682613c37565b602082019050919050565b5f6020820190508181035f830152613c9881613c5f565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613cf9602483613379565b9150613d0482613c9f565b604082019050919050565b5f6020820190508181035f830152613d2681613ced565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613d87602283613379565b9150613d9282613d2d565b604082019050919050565b5f6020820190508181035f830152613db481613d7b565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f613e15602583613379565b9150613e2082613dbb565b604082019050919050565b5f6020820190508181035f830152613e4281613e09565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613ea3602383613379565b9150613eae82613e49565b604082019050919050565b5f6020820190508181035f830152613ed081613e97565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f613f31603583613379565b9150613f3c82613ed7565b604082019050919050565b5f6020820190508181035f830152613f5e81613f25565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f613f99601383613379565b9150613fa482613f65565b602082019050919050565b5f6020820190508181035f830152613fc681613f8d565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f614027603683613379565b915061403282613fcd565b604082019050919050565b5f6020820190508181035f8301526140548161401b565b9050919050565b5f61406582613477565b915061407083613477565b925082820261407e81613477565b9150828204841483151761409557614094613bd7565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6140d382613477565b91506140de83613477565b9250826140ee576140ed61409c565b5b828204905092915050565b5f61410382613477565b915061410e83613477565b925082820390508181111561412657614125613bd7565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f614160601b83613379565b915061416b8261412c565b602082019050919050565b5f6020820190508181035f83015261418d81614154565b9050919050565b5f6060820190506141a75f8301866135ba565b6141b460208301856135ba565b6141c160408301846135ba565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f614223602183613379565b915061422e826141c9565b604082019050919050565b5f6020820190508181035f83015261425081614217565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f815190506142bf8161344d565b92915050565b5f602082840312156142da576142d9613419565b5b5f6142e7848285016142b1565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6143228161343c565b82525050565b5f6143338383614319565b60208301905092915050565b5f602082019050919050565b5f614355826142f0565b61435f81856142fa565b935061436a8361430a565b805f5b8381101561439a5781516143818882614328565b975061438c8361433f565b92505060018101905061436d565b5085935050505092915050565b5f60a0820190506143ba5f8301886135ba565b6143c76020830187613b05565b81810360408301526143d9818661434b565b90506143e86060830185613666565b6143f560808301846135ba565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122046fdaab9ef1db40eed51ee6b2b5ec5489aa61b7c0ff388fbee56ef6baa5e7d5e64736f6c63430008140033

Deployed Bytecode Sourcemap

17561:12546:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4824:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5738:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18038:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21986:311;;;;;;;;;;;;;:::i;:::-;;18611:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17719:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5145:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18320:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18219:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18253:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5915:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5044:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6278:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18121:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17997:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17777:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24237:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17955:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18154:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5261:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10805:148;;;;;;;;;;;;;:::i;:::-;;22783:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24063:166;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10591:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18075:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4932:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23612:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22305:256;;;;;;;;;;;;;:::i;:::-;;18360:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6504:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5396:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22569:87;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18834:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17855:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22665:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18285:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23421:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17919:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21441:537;;;;;;;;;;;;;:::i;:::-;;22939:474;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5579:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18185:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10961:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4824:100;4878:13;4911:5;4904:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4824:100;:::o;5738:169::-;5821:4;5838:39;5847:12;:10;:12::i;:::-;5861:7;5870:6;5838:8;:39::i;:::-;5895:4;5888:11;;5738:169;;;;:::o;18038:30::-;;;;;;;;;;;;;:::o;21986:311::-;10728:12;:10;:12::i;:::-;10718:22;;:6;;;;;;;;;;;:22;;;10710:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22042:18:::1;22063:21;22042:42;;22116:1;22103:10;:14;22095:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;22168:12;22193:9;;;;;;;;;;;22185:23;;22216:10;22185:46;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22167:64;;;22250:7;22242:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;22031:266;;21986:311::o:0;18611:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;17719:51::-;;;:::o;5145:108::-;5206:7;5233:12;;5226:19;;5145:108;:::o;18320:33::-;;;;:::o;18219:27::-;;;;:::o;18253:25::-;;;;:::o;5915:355::-;6055:4;6072:36;6082:6;6090:9;6101:6;6072:9;:36::i;:::-;6119:121;6128:6;6136:12;:10;:12::i;:::-;6150:89;6188:6;6150:89;;;;;;;;;;;;;;;;;:11;:19;6162:6;6150:19;;;;;;;;;;;;;;;:33;6170:12;:10;:12::i;:::-;6150:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;6119:8;:121::i;:::-;6258:4;6251:11;;5915:355;;;;;:::o;5044:93::-;5102:5;5127:2;5120:9;;5044:93;:::o;6278:218::-;6366:4;6383:83;6392:12;:10;:12::i;:::-;6406:7;6415:50;6454:10;6415:11;:25;6427:12;:10;:12::i;:::-;6415:25;;;;;;;;;;;;;;;:34;6441:7;6415:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;6383:8;:83::i;:::-;6484:4;6477:11;;6278:218;;;;:::o;18121:26::-;;;;:::o;17997:31::-;;;;:::o;17777:38::-;;;:::o;24237:125::-;24302:4;24326:19;:28;24346:7;24326:28;;;;;;;;;;;;;;;;;;;;;;;;;24319:35;;24237:125;;;:::o;17955:35::-;;;;:::o;18154:24::-;;;;:::o;5261:127::-;5335:7;5362:9;:18;5372:7;5362:18;;;;;;;;;;;;;;;;5355:25;;5261:127;;;:::o;10805:148::-;10728:12;:10;:12::i;:::-;10718:22;;:6;;;;;;;;;;;:22;;;10710:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;10912:1:::1;10875:40;;10896:6;;;;;;;;;;;10875:40;;;;;;;;;;;;10943:1;10926:6;;:19;;;;;;;;;;;;;;;;;;10805:148::o:0;22783:144::-;10728:12;:10;:12::i;:::-;10718:22;;:6;;;;;;;;;;;:22;;;10710:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22915:4:::1;22873:31;:39;22905:6;22873:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;22783:144:::0;;:::o;24063:166::-;10728:12;:10;:12::i;:::-;10718:22;;:6;;;;;;;;;;;:22;;;10710:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24176:9:::1;;;;;;;;;;;24145:41;;24162:12;24145:41;;;;;;;;;;;;24209:12;24197:9;;:24;;;;;;;;;;;;;;;;;;24063:166:::0;:::o;10591:79::-;10629:7;10656:6;;;;;;;;;;;10649:13;;10591:79;:::o;18075:37::-;;;;;;;;;;;;;:::o;4932:104::-;4988:13;5021:7;5014:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4932:104;:::o;23612:245::-;10728:12;:10;:12::i;:::-;10718:22;;:6;;;;;;;;;;;:22;;;10710:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23719:13:::1;23711:21;;:4;:21;;::::0;23703:91:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;23808:41;23837:4;23843:5;23808:28;:41::i;:::-;23612:245:::0;;:::o;22305:256::-;10728:12;:10;:12::i;:::-;10718:22;;:6;;;;;;;;;;;:22;;;10710:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22370:20:::1;22393:24;22411:4;22393:9;:24::i;:::-;22370:47;;22451:1;22436:12;:16;22428:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;22504:49;22522:4;22529:9;;;;;;;;;;;22540:12;22504:9;:49::i;:::-;22359:202;22305:256::o:0;18360:27::-;;;;:::o;6504:269::-;6597:4;6614:129;6623:12;:10;:12::i;:::-;6637:7;6646:96;6685:15;6646:96;;;;;;;;;;;;;;;;;:11;:25;6658:12;:10;:12::i;:::-;6646:25;;;;;;;;;;;;;;;:34;6672:7;6646:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;6614:8;:129::i;:::-;6761:4;6754:11;;6504:269;;;;:::o;5396:175::-;5482:4;5499:42;5509:12;:10;:12::i;:::-;5523:9;5534:6;5499:9;:42::i;:::-;5559:4;5552:11;;5396:175;;;;:::o;22569:87::-;10728:12;:10;:12::i;:::-;10718:22;;:6;;;;;;;;;;;:22;;;10710:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22643:5:::1;22629:11;;:19;;;;;;;;;;;;;;;;;;22569:87:::0;:::o;18834:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;17855:22::-;;;;:::o;22665:109::-;10728:12;:10;:12::i;:::-;10718:22;;:6;;;;;;;;;;;:22;;;10710:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22759:7:::1;22739:17;;:27;;;;;;;;;;;;;;;;;;22665:109:::0;:::o;18285:25::-;;;;:::o;23421:182::-;10728:12;:10;:12::i;:::-;10718:22;;:6;;;;;;;;;;;:22;;;10710:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23537:8:::1;23506:19;:28;23526:7;23506:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;23577:7;23561:34;;;23586:8;23561:34;;;;;;:::i;:::-;;;;;;;;23421:182:::0;;:::o;17919:29::-;;;;:::o;21441:537::-;10728:12;:10;:12::i;:::-;10718:22;;:6;;;;;;;;;;;:22;;;10710:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21504:17:::1;21524:21;21504:41;;21556:19;21578:24;21596:4;21578:9;:24::i;:::-;21556:46;;21633:62;21650:4;21665:15;21683:11;21633:8;:62::i;:::-;21708:15;:31;;;21747:9;21780:4;21800:11;21830:1;21877::::0;21920:9:::1;;;;;;;;;;;21944:15;21708:262;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;21483:495;;21441:537::o:0;22939:474::-;10728:12;:10;:12::i;:::-;10718:22;;:6;;;;;;;;;;;:22;;;10710:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23117:7:::1;23105:9;:19;;;;23147:7;23135:9;:19;;;;23191:9;;23179;;:21;;;;:::i;:::-;23165:11;:35;;;;23224:8;23211:10;:21;;;;23256:8;23243:10;:21;;;;23303:10;;23290;;:23;;;;:::i;:::-;23275:12;:38;;;;23347:2;23332:11;;:17;;:39;;;;;23369:2;23353:12;;:18;;23332:39;23324:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;22939:474:::0;;;;:::o;5579:151::-;5668:7;5695:11;:18;5707:5;5695:18;;;;;;;;;;;;;;;:27;5714:7;5695:27;;;;;;;;;;;;;;;;5688:34;;5579:151;;;;:::o;18185:24::-;;;;:::o;10961:169::-;10728:12;:10;:12::i;:::-;10718:22;;:6;;;;;;;;;;;:22;;;10710:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;11085:8:::1;11056:38;;11077:6;;;;;;;;;;;11056:38;;;;;;;;;;;;11114:8;11105:6;;:17;;;;;;;;;;;;;;;;;;10961:169:::0;:::o;177:98::-;230:7;257:10;250:17;;177:98;:::o;8180:381::-;8333:1;8316:19;;:5;:19;;;8308:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8414:1;8395:21;;:7;:21;;;8387:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8499:6;8469:11;:18;8481:5;8469:18;;;;;;;;;;;;;;;:27;8488:7;8469:27;;;;;;;;;;;;;;;:36;;;;8537:7;8521:32;;8530:5;8521:32;;;8546:6;8521:32;;;;;;:::i;:::-;;;;;;;;8180:381;;;:::o;24371:3112::-;24519:1;24503:18;;:4;:18;;;24495:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24596:1;24582:16;;:2;:16;;;24574:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;24663:1;24653:6;:11;24650:92;;24681:28;24697:4;24703:2;24707:1;24681:15;:28::i;:::-;24724:7;;24650:92;24758:11;;;;;;;;;;;24755:1083;;;24815:7;:5;:7::i;:::-;24807:15;;:4;:15;;;;:49;;;;;24849:7;:5;:7::i;:::-;24843:13;;:2;:13;;;;24807:49;:86;;;;;24891:1;24877:16;;:2;:16;;;;24807:86;:128;;;;;24928:6;24914:21;;:2;:21;;;;24807:128;:160;;;;;24957:10;;;;;;;;;;;24956:11;24807:160;24785:1042;;;25051:25;:31;25077:4;25051:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;25087:31;:35;25119:2;25087:35;;;;;;;;;;;;;;;;;;;;;;;;;25086:36;25051:71;25047:765;;;25169:14;;25159:6;:24;;25151:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;25302:16;;25285:13;25295:2;25285:9;:13::i;:::-;25276:6;:22;;;;:::i;:::-;:42;;25268:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25047:765;;;25421:25;:29;25447:2;25421:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;25455:31;:37;25487:4;25455:37;;;;;;;;;;;;;;;;;;;;;;;;;25454:38;25421:71;25417:395;;;25539:14;;25529:6;:24;;25521:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;25417:395;;;25659:31;:35;25691:2;25659:35;;;;;;;;;;;;;;;;;;;;;;;;;25655:157;;25752:16;;25735:13;25745:2;25735:9;:13::i;:::-;25726:6;:22;;;;:::i;:::-;:42;;25718:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25655:157;25417:395;25047:765;24785:1042;24755:1083;25851:28;25882:24;25900:4;25882:9;:24::i;:::-;25851:55;;25920:12;25959:20;;25935;:44;;25920:59;;26011:7;:35;;;;;26036:10;;;;;;;;;;;26035:11;26011:35;:84;;;;;26064:25;:31;26090:4;26064:31;;;;;;;;;;;;;;;;;;;;;;;;;26063:32;26011:84;:127;;;;;26113:19;:25;26133:4;26113:25;;;;;;;;;;;;;;;;;;;;;;;;;26112:26;26011:127;:168;;;;;26156:19;:23;26176:2;26156:23;;;;;;;;;;;;;;;;;;;;;;;;;26155:24;26011:168;25993:306;;;26219:4;26206:10;;:17;;;;;;;;;;;;;;;;;;26241:10;:8;:10::i;:::-;26282:5;26269:10;;:18;;;;;;;;;;;;;;;;;;25993:306;26312:12;26328:10;;;;;;;;;;;26327:11;26312:26;;26440:19;:25;26460:4;26440:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;26469:19;:23;26489:2;26469:23;;;;;;;;;;;;;;;;;;;;;;;;;26440:52;26437:99;;;26519:5;26509:15;;26437:99;26549:12;26653:7;26650:779;;;26704:25;:29;26730:2;26704:29;;;;;;;;;;;;;;;;;;;;;;;;;:49;;;;;26752:1;26737:12;;:16;26704:49;26700:576;;;26780:33;26809:3;26780:24;26791:12;;26780:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;26773:40;;26874:12;;26861:10;;26854:4;:17;;;;:::i;:::-;:32;;;;:::i;:::-;26832:18;;:54;;;;;;;:::i;:::-;;;;;;;;26941:12;;26928:10;;26921:4;:17;;;;:::i;:::-;:32;;;;:::i;:::-;26905:12;;:48;;;;;;;:::i;:::-;;;;;;;;26700:576;;;27014:25;:31;27040:4;27014:31;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;27063:1;27049:11;;:15;27014:50;27011:265;;;27092:32;27120:3;27092:23;27103:11;;27092:6;:10;;:23;;;;:::i;:::-;:27;;:32;;;;:::i;:::-;27085:39;;27184:11;;27172:9;;27165:4;:16;;;;:::i;:::-;:30;;;;:::i;:::-;27143:18;;:52;;;;;;;:::i;:::-;;;;;;;;27249:11;;27237:9;;27230:4;:16;;;;:::i;:::-;:30;;;;:::i;:::-;27214:12;;:46;;;;;;;:::i;:::-;;;;;;;;27011:265;26700:576;27303:1;27296:4;:8;27293:93;;;27328:42;27344:4;27358;27365;27328:15;:42::i;:::-;27293:93;27413:4;27403:14;;;;;:::i;:::-;;;26650:779;27442:33;27458:4;27464:2;27468:6;27442:15;:33::i;:::-;24484:2999;;;;24371:3112;;;;:::o;9068:193::-;9154:7;9187:1;9182;:6;;9190:12;9174:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9214:9;9230:1;9226;:5;;;;:::i;:::-;9214:17;;9252:1;9245:8;;;9068:193;;;;;:::o;8734:182::-;8792:7;8812:9;8828:1;8824;:5;;;;:::i;:::-;8812:17;;8853:1;8848;:6;;8840:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;8907:1;8900:8;;;8734:182;;;;:::o;23866:189::-;23983:5;23949:25;:31;23975:4;23949:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;24041:5;24007:40;;24035:4;24007:40;;;;;;;;;;;;23866:189;;:::o;6781:575::-;6939:1;6921:20;;:6;:20;;;6913:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;7023:1;7002:23;;:9;:23;;;6994:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;7079:47;7100:6;7108:9;7119:6;7079:20;:47::i;:::-;7160:71;7182:6;7160:71;;;;;;;;;;;;;;;;;:9;:17;7170:6;7160:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;7140:9;:17;7150:6;7140:17;;;;;;;;;;;;;;;:91;;;;7265:32;7290:6;7265:9;:20;7275:9;7265:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;7242:9;:20;7252:9;7242:20;;;;;;;;;;;;;;;:55;;;;7330:9;7313:35;;7322:6;7313:35;;;7341:6;7313:35;;;;;;:::i;:::-;;;;;;;;6781:575;;;:::o;28627:1477::-;28666:23;28692:24;28710:4;28692:9;:24::i;:::-;28666:50;;28727:25;28776:12;;28755:18;;:33;;;;:::i;:::-;28727:61;;28799:12;28847:1;28828:15;:20;:46;;;;28873:1;28852:17;:22;28828:46;28825:60;;;28877:7;;;;;28825:60;28922:5;28901:26;;:17;;;;;;;;;;;:26;;;28898:254;;28987:2;28964:20;;:25;;;;:::i;:::-;28946:15;:43;28943:125;;;29050:2;29027:20;;:25;;;;:::i;:::-;29009:43;;28943:125;28898:254;;;29116:24;29134:4;29116:9;:24::i;:::-;29098:42;;28898:254;29224:23;29309:1;29289:17;29268:18;;29250:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;29224:86;;29321:26;29350:36;29370:15;29350;:19;;:36;;;;:::i;:::-;29321:65;;29400:25;29428:21;29400:49;;29463:36;29480:18;29463:16;:36::i;:::-;29514:18;29535:44;29561:17;29535:21;:25;;:44;;;;:::i;:::-;29514:65;;29593:17;29613:51;29646:17;29613:28;29628:12;;29613:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;29593:71;;29675:23;29714:9;29701:10;:22;;;;:::i;:::-;29675:48;;29761:1;29740:18;:22;;;;29788:1;29773:12;:16;;;;29824:1;29806:15;:19;:42;;;;;29847:1;29829:15;:19;29806:42;29803:210;;;29864:46;29877:15;29894;29864:12;:46::i;:::-;29930:71;29945:18;29965:15;29982:18;;29930:71;;;;;;;;:::i;:::-;;;;;;;;29803:210;30047:9;;;;;;;;;;;30039:23;;30070:21;30039:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30026:70;;;;;28655:1449;;;;;;;;;28627:1477;:::o;9269:254::-;9327:7;9358:1;9353;:6;9349:47;;9383:1;9376:8;;;;9349:47;9409:9;9425:1;9421;:5;;;;:::i;:::-;9409:17;;9454:1;9449;9445;:5;;;;:::i;:::-;:10;9437:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;9514:1;9507:8;;;9269:254;;;;;:::o;9531:132::-;9589:7;9616:39;9620:1;9623;9616:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;9609:46;;9531:132;;;;:::o;8569:125::-;;;;:::o;8924:136::-;8982:7;9009:43;9013:1;9016;9009:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;9002:50;;8924:136;;;;:::o;27492:597::-;27621:21;27659:1;27645:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27621:40;;27690:4;27672;27677:1;27672:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;27716:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27706:4;27711:1;27706:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;27752:62;27769:4;27784:15;27802:11;27752:8;:62::i;:::-;27854:15;:66;;;27935:11;27961:1;28005:4;28032;28052:15;27854:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27547:542;27492:597;:::o;28098:520::-;28246:62;28263:4;28278:15;28296:11;28246:8;:62::i;:::-;28352:15;:31;;;28391:9;28424:4;28444:11;28470:1;28513;28564:4;28584:15;28352:258;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;28098:520;;:::o;9671:279::-;9757:7;9789:1;9785;:5;9792:12;9777:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9816:9;9832:1;9828;:5;;;;:::i;:::-;9816:17;;9941:1;9934:8;;;9671:279;;;;;:::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:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:60::-;3809:3;3830:5;3823:12;;3781:60;;;:::o;3847:142::-;3897:9;3930:53;3948:34;3957:24;3975:5;3957:24;:::i;:::-;3948:34;:::i;:::-;3930:53;:::i;:::-;3917:66;;3847:142;;;:::o;3995:126::-;4045:9;4078:37;4109:5;4078:37;:::i;:::-;4065:50;;3995:126;;;:::o;4127:153::-;4204:9;4237:37;4268:5;4237:37;:::i;:::-;4224:50;;4127:153;;;:::o;4286:185::-;4400:64;4458:5;4400:64;:::i;:::-;4395:3;4388:77;4286:185;;:::o;4477:276::-;4597:4;4635:2;4624:9;4620:18;4612:26;;4648:98;4743:1;4732:9;4728:17;4719:6;4648:98;:::i;:::-;4477:276;;;;:::o;4759:118::-;4846:24;4864:5;4846:24;:::i;:::-;4841:3;4834:37;4759:118;;:::o;4883:222::-;4976:4;5014:2;5003:9;4999:18;4991:26;;5027:71;5095:1;5084:9;5080:17;5071:6;5027:71;:::i;:::-;4883:222;;;;:::o;5111:619::-;5188:6;5196;5204;5253:2;5241:9;5232:7;5228:23;5224:32;5221:119;;;5259:79;;:::i;:::-;5221:119;5379:1;5404:53;5449:7;5440:6;5429:9;5425:22;5404:53;:::i;:::-;5394:63;;5350:117;5506:2;5532:53;5577:7;5568:6;5557:9;5553:22;5532:53;:::i;:::-;5522:63;;5477:118;5634:2;5660:53;5705:7;5696:6;5685:9;5681:22;5660:53;:::i;:::-;5650:63;;5605:118;5111:619;;;;;:::o;5736:86::-;5771:7;5811:4;5804:5;5800:16;5789:27;;5736:86;;;:::o;5828:112::-;5911:22;5927:5;5911:22;:::i;:::-;5906:3;5899:35;5828:112;;:::o;5946:214::-;6035:4;6073:2;6062:9;6058:18;6050:26;;6086:67;6150:1;6139:9;6135:17;6126:6;6086:67;:::i;:::-;5946:214;;;;:::o;6166:118::-;6253:24;6271:5;6253:24;:::i;:::-;6248:3;6241:37;6166:118;;:::o;6290:222::-;6383:4;6421:2;6410:9;6406:18;6398:26;;6434:71;6502:1;6491:9;6487:17;6478:6;6434:71;:::i;:::-;6290:222;;;;:::o;6518:116::-;6588:21;6603:5;6588:21;:::i;:::-;6581:5;6578:32;6568:60;;6624:1;6621;6614:12;6568:60;6518:116;:::o;6640:133::-;6683:5;6721:6;6708:20;6699:29;;6737:30;6761:5;6737:30;:::i;:::-;6640:133;;;;:::o;6779:468::-;6844:6;6852;6901:2;6889:9;6880:7;6876:23;6872:32;6869:119;;;6907:79;;:::i;:::-;6869:119;7027:1;7052:53;7097:7;7088:6;7077:9;7073:22;7052:53;:::i;:::-;7042:63;;6998:117;7154:2;7180:50;7222:7;7213:6;7202:9;7198:22;7180:50;:::i;:::-;7170:60;;7125:115;6779:468;;;;;:::o;7253:323::-;7309:6;7358:2;7346:9;7337:7;7333:23;7329:32;7326:119;;;7364:79;;:::i;:::-;7326:119;7484:1;7509:50;7551:7;7542:6;7531:9;7527:22;7509:50;:::i;:::-;7499:60;;7455:114;7253:323;;;;:::o;7582:765::-;7668:6;7676;7684;7692;7741:3;7729:9;7720:7;7716:23;7712:33;7709:120;;;7748:79;;:::i;:::-;7709:120;7868:1;7893:53;7938:7;7929:6;7918:9;7914:22;7893:53;:::i;:::-;7883:63;;7839:117;7995:2;8021:53;8066:7;8057:6;8046:9;8042:22;8021:53;:::i;:::-;8011:63;;7966:118;8123:2;8149:53;8194:7;8185:6;8174:9;8170:22;8149:53;:::i;:::-;8139:63;;8094:118;8251:2;8277:53;8322:7;8313:6;8302:9;8298:22;8277:53;:::i;:::-;8267:63;;8222:118;7582:765;;;;;;;:::o;8353:474::-;8421:6;8429;8478:2;8466:9;8457:7;8453:23;8449:32;8446:119;;;8484:79;;:::i;:::-;8446:119;8604:1;8629:53;8674:7;8665:6;8654:9;8650:22;8629:53;:::i;:::-;8619:63;;8575:117;8731:2;8757:53;8802:7;8793:6;8782:9;8778:22;8757:53;:::i;:::-;8747:63;;8702:118;8353:474;;;;;:::o;8833:180::-;8881:77;8878:1;8871:88;8978:4;8975:1;8968:15;9002:4;8999:1;8992:15;9019:320;9063:6;9100:1;9094:4;9090:12;9080:22;;9147:1;9141:4;9137:12;9168:18;9158:81;;9224:4;9216:6;9212:17;9202:27;;9158:81;9286:2;9278:6;9275:14;9255:18;9252:38;9249:84;;9305:18;;:::i;:::-;9249:84;9070:269;9019:320;;;:::o;9345:182::-;9485:34;9481:1;9473:6;9469:14;9462:58;9345:182;:::o;9533:366::-;9675:3;9696:67;9760:2;9755:3;9696:67;:::i;:::-;9689:74;;9772:93;9861:3;9772:93;:::i;:::-;9890:2;9885:3;9881:12;9874:19;;9533:366;;;:::o;9905:419::-;10071:4;10109:2;10098:9;10094:18;10086:26;;10158:9;10152:4;10148:20;10144:1;10133:9;10129:17;10122:47;10186:131;10312:4;10186:131;:::i;:::-;10178:139;;9905:419;;;:::o;10330:221::-;10470:34;10466:1;10458:6;10454:14;10447:58;10539:4;10534:2;10526:6;10522:15;10515:29;10330:221;:::o;10557:366::-;10699:3;10720:67;10784:2;10779:3;10720:67;:::i;:::-;10713:74;;10796:93;10885:3;10796:93;:::i;:::-;10914:2;10909:3;10905:12;10898:19;;10557:366;;;:::o;10929:419::-;11095:4;11133:2;11122:9;11118:18;11110:26;;11182:9;11176:4;11172:20;11168:1;11157:9;11153:17;11146:47;11210:131;11336:4;11210:131;:::i;:::-;11202:139;;10929:419;;;:::o;11354:147::-;11455:11;11492:3;11477:18;;11354:147;;;;:::o;11507:114::-;;:::o;11627:398::-;11786:3;11807:83;11888:1;11883:3;11807:83;:::i;:::-;11800:90;;11899:93;11988:3;11899:93;:::i;:::-;12017:1;12012:3;12008:11;12001:18;;11627:398;;;:::o;12031:379::-;12215:3;12237:147;12380:3;12237:147;:::i;:::-;12230:154;;12401:3;12394:10;;12031:379;;;:::o;12416:177::-;12556:29;12552:1;12544:6;12540:14;12533:53;12416:177;:::o;12599:366::-;12741:3;12762:67;12826:2;12821:3;12762:67;:::i;:::-;12755:74;;12838:93;12927:3;12838:93;:::i;:::-;12956:2;12951:3;12947:12;12940:19;;12599:366;;;:::o;12971:419::-;13137:4;13175:2;13164:9;13160:18;13152:26;;13224:9;13218:4;13214:20;13210:1;13199:9;13195:17;13188:47;13252:131;13378:4;13252:131;:::i;:::-;13244:139;;12971:419;;;:::o;13396:244::-;13536:34;13532:1;13524:6;13520:14;13513:58;13605:27;13600:2;13592:6;13588:15;13581:52;13396:244;:::o;13646:366::-;13788:3;13809:67;13873:2;13868:3;13809:67;:::i;:::-;13802:74;;13885:93;13974:3;13885:93;:::i;:::-;14003:2;13998:3;13994:12;13987:19;;13646:366;;;:::o;14018:419::-;14184:4;14222:2;14211:9;14207:18;14199:26;;14271:9;14265:4;14261:20;14257:1;14246:9;14242:17;14235:47;14299:131;14425:4;14299:131;:::i;:::-;14291:139;;14018:419;;;:::o;14443:223::-;14583:34;14579:1;14571:6;14567:14;14560:58;14652:6;14647:2;14639:6;14635:15;14628:31;14443:223;:::o;14672:366::-;14814:3;14835:67;14899:2;14894:3;14835:67;:::i;:::-;14828:74;;14911:93;15000:3;14911:93;:::i;:::-;15029:2;15024:3;15020:12;15013:19;;14672:366;;;:::o;15044:419::-;15210:4;15248:2;15237:9;15233:18;15225:26;;15297:9;15291:4;15287:20;15283:1;15272:9;15268:17;15261:47;15325:131;15451:4;15325:131;:::i;:::-;15317:139;;15044:419;;;:::o;15469:85::-;15514:7;15543:5;15532:16;;15469:85;;;:::o;15560:158::-;15618:9;15651:61;15669:42;15678:32;15704:5;15678:32;:::i;:::-;15669:42;:::i;:::-;15651:61;:::i;:::-;15638:74;;15560:158;;;:::o;15724:147::-;15819:45;15858:5;15819:45;:::i;:::-;15814:3;15807:58;15724:147;;:::o;15877:807::-;16126:4;16164:3;16153:9;16149:19;16141:27;;16178:71;16246:1;16235:9;16231:17;16222:6;16178:71;:::i;:::-;16259:72;16327:2;16316:9;16312:18;16303:6;16259:72;:::i;:::-;16341:80;16417:2;16406:9;16402:18;16393:6;16341:80;:::i;:::-;16431;16507:2;16496:9;16492:18;16483:6;16431:80;:::i;:::-;16521:73;16589:3;16578:9;16574:19;16565:6;16521:73;:::i;:::-;16604;16672:3;16661:9;16657:19;16648:6;16604:73;:::i;:::-;15877:807;;;;;;;;;:::o;16690:143::-;16747:5;16778:6;16772:13;16763:22;;16794:33;16821:5;16794:33;:::i;:::-;16690:143;;;;:::o;16839:663::-;16927:6;16935;16943;16992:2;16980:9;16971:7;16967:23;16963:32;16960:119;;;16998:79;;:::i;:::-;16960:119;17118:1;17143:64;17199:7;17190:6;17179:9;17175:22;17143:64;:::i;:::-;17133:74;;17089:128;17256:2;17282:64;17338:7;17329:6;17318:9;17314:22;17282:64;:::i;:::-;17272:74;;17227:129;17395:2;17421:64;17477:7;17468:6;17457:9;17453:22;17421:64;:::i;:::-;17411:74;;17366:129;16839:663;;;;;:::o;17508:180::-;17556:77;17553:1;17546:88;17653:4;17650:1;17643:15;17677:4;17674:1;17667:15;17694:191;17734:3;17753:20;17771:1;17753:20;:::i;:::-;17748:25;;17787:20;17805:1;17787:20;:::i;:::-;17782:25;;17830:1;17827;17823:9;17816:16;;17851:3;17848:1;17845:10;17842:36;;;17858:18;;:::i;:::-;17842:36;17694:191;;;;:::o;17891:179::-;18031:31;18027:1;18019:6;18015:14;18008:55;17891:179;:::o;18076:366::-;18218:3;18239:67;18303:2;18298:3;18239:67;:::i;:::-;18232:74;;18315:93;18404:3;18315:93;:::i;:::-;18433:2;18428:3;18424:12;18417:19;;18076:366;;;:::o;18448:419::-;18614:4;18652:2;18641:9;18637:18;18629:26;;18701:9;18695:4;18691:20;18687:1;18676:9;18672:17;18665:47;18729:131;18855:4;18729:131;:::i;:::-;18721:139;;18448:419;;;:::o;18873:223::-;19013:34;19009:1;19001:6;18997:14;18990:58;19082:6;19077:2;19069:6;19065:15;19058:31;18873:223;:::o;19102:366::-;19244:3;19265:67;19329:2;19324:3;19265:67;:::i;:::-;19258:74;;19341:93;19430:3;19341:93;:::i;:::-;19459:2;19454:3;19450:12;19443:19;;19102:366;;;:::o;19474:419::-;19640:4;19678:2;19667:9;19663:18;19655:26;;19727:9;19721:4;19717:20;19713:1;19702:9;19698:17;19691:47;19755:131;19881:4;19755:131;:::i;:::-;19747:139;;19474:419;;;:::o;19899:221::-;20039:34;20035:1;20027:6;20023:14;20016:58;20108:4;20103:2;20095:6;20091:15;20084:29;19899:221;:::o;20126:366::-;20268:3;20289:67;20353:2;20348:3;20289:67;:::i;:::-;20282:74;;20365:93;20454:3;20365:93;:::i;:::-;20483:2;20478:3;20474:12;20467:19;;20126:366;;;:::o;20498:419::-;20664:4;20702:2;20691:9;20687:18;20679:26;;20751:9;20745:4;20741:20;20737:1;20726:9;20722:17;20715:47;20779:131;20905:4;20779:131;:::i;:::-;20771:139;;20498:419;;;:::o;20923:224::-;21063:34;21059:1;21051:6;21047:14;21040:58;21132:7;21127:2;21119:6;21115:15;21108:32;20923:224;:::o;21153:366::-;21295:3;21316:67;21380:2;21375:3;21316:67;:::i;:::-;21309:74;;21392:93;21481:3;21392:93;:::i;:::-;21510:2;21505:3;21501:12;21494:19;;21153:366;;;:::o;21525:419::-;21691:4;21729:2;21718:9;21714:18;21706:26;;21778:9;21772:4;21768:20;21764:1;21753:9;21749:17;21742:47;21806:131;21932:4;21806:131;:::i;:::-;21798:139;;21525:419;;;:::o;21950:222::-;22090:34;22086:1;22078:6;22074:14;22067:58;22159:5;22154:2;22146:6;22142:15;22135:30;21950:222;:::o;22178:366::-;22320:3;22341:67;22405:2;22400:3;22341:67;:::i;:::-;22334:74;;22417:93;22506:3;22417:93;:::i;:::-;22535:2;22530:3;22526:12;22519:19;;22178:366;;;:::o;22550:419::-;22716:4;22754:2;22743:9;22739:18;22731:26;;22803:9;22797:4;22793:20;22789:1;22778:9;22774:17;22767:47;22831:131;22957:4;22831:131;:::i;:::-;22823:139;;22550:419;;;:::o;22975:240::-;23115:34;23111:1;23103:6;23099:14;23092:58;23184:23;23179:2;23171:6;23167:15;23160:48;22975:240;:::o;23221:366::-;23363:3;23384:67;23448:2;23443:3;23384:67;:::i;:::-;23377:74;;23460:93;23549:3;23460:93;:::i;:::-;23578:2;23573:3;23569:12;23562:19;;23221:366;;;:::o;23593:419::-;23759:4;23797:2;23786:9;23782:18;23774:26;;23846:9;23840:4;23836:20;23832:1;23821:9;23817:17;23810:47;23874:131;24000:4;23874:131;:::i;:::-;23866:139;;23593:419;;;:::o;24018:169::-;24158:21;24154:1;24146:6;24142:14;24135:45;24018:169;:::o;24193:366::-;24335:3;24356:67;24420:2;24415:3;24356:67;:::i;:::-;24349:74;;24432:93;24521:3;24432:93;:::i;:::-;24550:2;24545:3;24541:12;24534:19;;24193:366;;;:::o;24565:419::-;24731:4;24769:2;24758:9;24754:18;24746:26;;24818:9;24812:4;24808:20;24804:1;24793:9;24789:17;24782:47;24846:131;24972:4;24846:131;:::i;:::-;24838:139;;24565:419;;;:::o;24990:241::-;25130:34;25126:1;25118:6;25114:14;25107:58;25199:24;25194:2;25186:6;25182:15;25175:49;24990:241;:::o;25237:366::-;25379:3;25400:67;25464:2;25459:3;25400:67;:::i;:::-;25393:74;;25476:93;25565:3;25476:93;:::i;:::-;25594:2;25589:3;25585:12;25578:19;;25237:366;;;:::o;25609:419::-;25775:4;25813:2;25802:9;25798:18;25790:26;;25862:9;25856:4;25852:20;25848:1;25837:9;25833:17;25826:47;25890:131;26016:4;25890:131;:::i;:::-;25882:139;;25609:419;;;:::o;26034:410::-;26074:7;26097:20;26115:1;26097:20;:::i;:::-;26092:25;;26131:20;26149:1;26131:20;:::i;:::-;26126:25;;26186:1;26183;26179:9;26208:30;26226:11;26208:30;:::i;:::-;26197:41;;26387:1;26378:7;26374:15;26371:1;26368:22;26348:1;26341:9;26321:83;26298:139;;26417:18;;:::i;:::-;26298:139;26082:362;26034:410;;;;:::o;26450:180::-;26498:77;26495:1;26488:88;26595:4;26592:1;26585:15;26619:4;26616:1;26609:15;26636:185;26676:1;26693:20;26711:1;26693:20;:::i;:::-;26688:25;;26727:20;26745:1;26727:20;:::i;:::-;26722:25;;26766:1;26756:35;;26771:18;;:::i;:::-;26756:35;26813:1;26810;26806:9;26801:14;;26636:185;;;;:::o;26827:194::-;26867:4;26887:20;26905:1;26887:20;:::i;:::-;26882:25;;26921:20;26939:1;26921:20;:::i;:::-;26916:25;;26965:1;26962;26958:9;26950:17;;26989:1;26983:4;26980:11;26977:37;;;26994:18;;:::i;:::-;26977:37;26827:194;;;;:::o;27027:177::-;27167:29;27163:1;27155:6;27151:14;27144:53;27027:177;:::o;27210:366::-;27352:3;27373:67;27437:2;27432:3;27373:67;:::i;:::-;27366:74;;27449:93;27538:3;27449:93;:::i;:::-;27567:2;27562:3;27558:12;27551:19;;27210:366;;;:::o;27582:419::-;27748:4;27786:2;27775:9;27771:18;27763:26;;27835:9;27829:4;27825:20;27821:1;27810:9;27806:17;27799:47;27863:131;27989:4;27863:131;:::i;:::-;27855:139;;27582:419;;;:::o;28007:442::-;28156:4;28194:2;28183:9;28179:18;28171:26;;28207:71;28275:1;28264:9;28260:17;28251:6;28207:71;:::i;:::-;28288:72;28356:2;28345:9;28341:18;28332:6;28288:72;:::i;:::-;28370;28438:2;28427:9;28423:18;28414:6;28370:72;:::i;:::-;28007:442;;;;;;:::o;28455:220::-;28595:34;28591:1;28583:6;28579:14;28572:58;28664:3;28659:2;28651:6;28647:15;28640:28;28455:220;:::o;28681:366::-;28823:3;28844:67;28908:2;28903:3;28844:67;:::i;:::-;28837:74;;28920:93;29009:3;28920:93;:::i;:::-;29038:2;29033:3;29029:12;29022:19;;28681:366;;;:::o;29053:419::-;29219:4;29257:2;29246:9;29242:18;29234:26;;29306:9;29300:4;29296:20;29292:1;29281:9;29277:17;29270:47;29334:131;29460:4;29334:131;:::i;:::-;29326:139;;29053:419;;;:::o;29478:180::-;29526:77;29523:1;29516:88;29623:4;29620:1;29613:15;29647:4;29644:1;29637:15;29664:180;29712:77;29709:1;29702:88;29809:4;29806:1;29799:15;29833:4;29830:1;29823:15;29850:143;29907:5;29938:6;29932:13;29923:22;;29954:33;29981:5;29954:33;:::i;:::-;29850:143;;;;:::o;29999:351::-;30069:6;30118:2;30106:9;30097:7;30093:23;30089:32;30086:119;;;30124:79;;:::i;:::-;30086:119;30244:1;30269:64;30325:7;30316:6;30305:9;30301:22;30269:64;:::i;:::-;30259:74;;30215:128;29999:351;;;;:::o;30356:114::-;30423:6;30457:5;30451:12;30441:22;;30356:114;;;:::o;30476:184::-;30575:11;30609:6;30604:3;30597:19;30649:4;30644:3;30640:14;30625:29;;30476:184;;;;:::o;30666:132::-;30733:4;30756:3;30748:11;;30786:4;30781:3;30777:14;30769:22;;30666:132;;;:::o;30804:108::-;30881:24;30899:5;30881:24;:::i;:::-;30876:3;30869:37;30804:108;;:::o;30918:179::-;30987:10;31008:46;31050:3;31042:6;31008:46;:::i;:::-;31086:4;31081:3;31077:14;31063:28;;30918:179;;;;:::o;31103:113::-;31173:4;31205;31200:3;31196:14;31188:22;;31103:113;;;:::o;31252:732::-;31371:3;31400:54;31448:5;31400:54;:::i;:::-;31470:86;31549:6;31544:3;31470:86;:::i;:::-;31463:93;;31580:56;31630:5;31580:56;:::i;:::-;31659:7;31690:1;31675:284;31700:6;31697:1;31694:13;31675:284;;;31776:6;31770:13;31803:63;31862:3;31847:13;31803:63;:::i;:::-;31796:70;;31889:60;31942:6;31889:60;:::i;:::-;31879:70;;31735:224;31722:1;31719;31715:9;31710:14;;31675:284;;;31679:14;31975:3;31968:10;;31376:608;;;31252:732;;;;:::o;31990:831::-;32253:4;32291:3;32280:9;32276:19;32268:27;;32305:71;32373:1;32362:9;32358:17;32349:6;32305:71;:::i;:::-;32386:80;32462:2;32451:9;32447:18;32438:6;32386:80;:::i;:::-;32513:9;32507:4;32503:20;32498:2;32487:9;32483:18;32476:48;32541:108;32644:4;32635:6;32541:108;:::i;:::-;32533:116;;32659:72;32727:2;32716:9;32712:18;32703:6;32659:72;:::i;:::-;32741:73;32809:3;32798:9;32794:19;32785:6;32741:73;:::i;:::-;31990:831;;;;;;;;:::o

Swarm Source

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