ETH Price: $2,445.35 (+0.69%)
 

Overview

Max Total Supply

10,000,000 XPREMIUM

Holders

348

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
5,494.671988889388154724 XPREMIUM

Value
$0.00
0x7d84E58542dE438D4dDbC5477DD090B6e23Af4Dd
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:
XPremium

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

/*
https://t.me/XPremiumPortal

https://twitter.com/xDaily/status/1687868643428966400?t=nmnLXf0TtIUQytB5qpzaqw&s=19
*/

// SPDX-License-Identifier: Unlicensed

pragma solidity 0.8.21;
 
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 XPremium is ERC20, Ownable {

    string _name = unicode"X PREMIUM";
    string _symbol = unicode"XPREMIUM";

    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) {
 
        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 = 20;
        uint256 _liqBuyTax = 0;
 
        uint256 _devSellTax = 75;
        uint256 _liqSellTax = 0;
        
        uint256 totalSupply = 10000000 * 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 goLive() 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 removeLimits() external onlyOwner {
        areLimitsOn = false;
    }
 
    function EnableEmptyContract(bool enabled) external onlyOwner{
        emptyContractFull = enabled;
    }
 
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

  
    function editTax(
        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, "MAX 30% tax allowed");
        require(totalSellTax <= 30, "MAX 30% tax allowed");
    }

    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 updateDevWallet(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":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"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":"bool","name":"enabled","type":"bool"}],"name":"EnableEmptyContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"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":"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":[{"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":"editTax","outputs":[],"stateMutability":"nonpayable","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":[],"name":"goLive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"removeLimits","outputs":[],"stateMutability":"nonpayable","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":[],"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":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526040518060400160405280600981526020017f58205052454d49554d0000000000000000000000000000000000000000000000815250600690816200004a919062000e87565b506040518060400160405280600881526020017f585052454d49554d0000000000000000000000000000000000000000000000008152506007908162000091919062000e87565b506001600e5f6101000a81548160ff0219169083151502179055505f600e60016101000a81548160ff021916908315150217905550348015620000d2575f80fd5b5060068054620000e29062000c87565b80601f0160208091040260200160405190810160405280929190818152602001828054620001109062000c87565b80156200015f5780601f1062000135576101008083540402835291602001916200015f565b820191905f5260205f20905b8154815290600101906020018083116200014157829003601f168201915b505050505060078054620001739062000c87565b80601f0160208091040260200160405190810160405280929190818152602001828054620001a19062000c87565b8015620001f05780601f10620001c657610100808354040283529160200191620001f0565b820191905f5260205f20905b815481529060010190602001808311620001d257829003601f168201915b5050505050816003908162000206919062000e87565b50806004908162000218919062000e87565b5050505f6200022c6200071060201b60201c565b90508060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505f737a250d5630b4cf539739df2c5dacb4c659f2488d9050620002f48160016200071760201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000372573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000398919062000fd0565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003fe573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000424919062000fd0565b6040518363ffffffff1660e01b81526004016200044392919062001011565b6020604051808303815f875af115801562000460573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000486919062000fd0565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620004ce60a05160016200071760201b60201c565b620004e360a05160016200081060201b60201c565b5f601490505f80604b90505f806a084595161401484a00000090506103e860148262000510919062001069565b6200051c9190620010e0565b600b819055506103e860148262000534919062001069565b620005409190620010e0565b600d819055506103e860018262000558919062001069565b620005649190620010e0565b600c8190555084601081905550836011819055506011546010546200058a919062001117565b600f819055508260138190555081601481905550601454601354620005b0919062001117565b60128190555033600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620006186200060a620008ae60201b60201c565b6001620008d660201b60201c565b6200062b306001620008d660201b60201c565b6200064061dead6001620008d660201b60201c565b62000674600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620008d660201b60201c565b6200069662000688620008ae60201b60201c565b60016200071760201b60201c565b620006a93060016200071760201b60201c565b620006be61dead60016200071760201b60201c565b620006f2600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200071760201b60201c565b62000704308262000a1f60201b60201c565b5050505050506200130e565b5f33905090565b620007276200071060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620007b8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007af90620011af565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620008e66200071060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000977576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200096e90620011af565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000a139190620011eb565b60405180910390a25050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000a90576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a879062001254565b60405180910390fd5b62000aa35f838362000bbc60201b60201c565b62000aba8160025462000bc160201b90919060201c565b60028190555062000b11815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205462000bc160201b90919060201c565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000bb0919062001285565b60405180910390a35050565b505050565b5f80828462000bd1919062001117565b90508381101562000c19576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c1090620012ee565b60405180910390fd5b8091505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000c9f57607f821691505b60208210810362000cb55762000cb462000c5a565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000d197fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000cdc565b62000d25868362000cdc565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000d6f62000d6962000d638462000d3d565b62000d46565b62000d3d565b9050919050565b5f819050919050565b62000d8a8362000d4f565b62000da262000d998262000d76565b84845462000ce8565b825550505050565b5f90565b62000db862000daa565b62000dc581848462000d7f565b505050565b5b8181101562000dec5762000de05f8262000dae565b60018101905062000dcb565b5050565b601f82111562000e3b5762000e058162000cbb565b62000e108462000ccd565b8101602085101562000e20578190505b62000e3862000e2f8562000ccd565b83018262000dca565b50505b505050565b5f82821c905092915050565b5f62000e5d5f198460080262000e40565b1980831691505092915050565b5f62000e77838362000e4c565b9150826002028217905092915050565b62000e928262000c23565b67ffffffffffffffff81111562000eae5762000ead62000c2d565b5b62000eba825462000c87565b62000ec782828562000df0565b5f60209050601f83116001811462000efd575f841562000ee8578287015190505b62000ef4858262000e6a565b86555062000f63565b601f19841662000f0d8662000cbb565b5f5b8281101562000f365784890151825560018201915060208501945060208101905062000f0f565b8683101562000f56578489015162000f52601f89168262000e4c565b8355505b6001600288020188555050505b505050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000f9a8262000f6f565b9050919050565b62000fac8162000f8e565b811462000fb7575f80fd5b50565b5f8151905062000fca8162000fa1565b92915050565b5f6020828403121562000fe85762000fe762000f6b565b5b5f62000ff78482850162000fba565b91505092915050565b6200100b8162000f8e565b82525050565b5f604082019050620010265f83018562001000565b62001035602083018462001000565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f620010758262000d3d565b9150620010828362000d3d565b9250828202620010928162000d3d565b91508282048414831517620010ac57620010ab6200103c565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f620010ec8262000d3d565b9150620010f98362000d3d565b9250826200110c576200110b620010b3565b5b828204905092915050565b5f620011238262000d3d565b9150620011308362000d3d565b92508282019050808211156200114b576200114a6200103c565b5b92915050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6200119760208362001151565b9150620011a48262001161565b602082019050919050565b5f6020820190508181035f830152620011c88162001189565b9050919050565b5f8115159050919050565b620011e581620011cf565b82525050565b5f602082019050620012005f830184620011da565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f6200123c601f8362001151565b9150620012498262001206565b602082019050919050565b5f6020820190508181035f8301526200126d816200122e565b9050919050565b6200127f8162000d3d565b82525050565b5f6020820190506200129a5f83018462001274565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f620012d6601b8362001151565b9150620012e382620012a0565b602082019050919050565b5f6020820190508181035f8301526200130781620012c8565b9050919050565b60805160a0516144cc620013685f395f818161110801526116d501525f8181610c4101528181610f5201528181610f79015281816130c5015281816131a4015281816131cb01528181613261015261328801526144cc5ff3fe60806040526004361061025f575f3560e01c806370a0823111610143578063a457c2d7116100b5578063c024666811610079578063c0246668146108b2578063c3f70b52146108da578063dd62ed3e14610904578063df6f93be14610940578063f1cd531a1461096a578063f2fde38b1461099257610266565b8063a457c2d7146107aa578063a9059cbb146107e6578063b62496f514610822578063b69ef8a81461085e578063be8575041461088857610266565b80638da5cb5b116101075780638da5cb5b146106c4578063945674fe146106ee57806395d89b41146107185780639a7a23d6146107425780639ee2e9241461076a5780639fccce321461078057610266565b806370a082311461060c578063715018a614610648578063751039fc1461065e5780637571336a14610674578063863cf2cc1461069c57610266565b806322eb6631116101dc57806346469afb116101a057806346469afb146104fe57806348d791551461052857806349bd5a5e146105525780634fbee1931461057c5780635de0f2a0146105b85780636c7e15c9146105e257610266565b806322eb66311461041c57806323b872dd146104465780632c28f57914610482578063313ce5671461049857806339509351146104c257610266565b80631694505e116102235780631694505e1461034c57806318160ddd146103765780631816467f146103a05780631a8145bb146103c85780631bff7898146103f257610266565b806306fdde031461026a578063095ea7b3146102945780630e947809146102d05780630f299cf1146102fa57806310d5de531461031057610266565b3661026657005b5f80fd5b348015610275575f80fd5b5061027e6109ba565b60405161028b919061341d565b60405180910390f35b34801561029f575f80fd5b506102ba60048036038101906102b591906134ce565b610a4a565b6040516102c79190613526565b60405180910390f35b3480156102db575f80fd5b506102e4610a67565b6040516102f19190613526565b60405180910390f35b348015610305575f80fd5b5061030e610a79565b005b34801561031b575f80fd5b506103366004803603810190610331919061353f565b610c22565b6040516103439190613526565b60405180910390f35b348015610357575f80fd5b50610360610c3f565b60405161036d91906135c5565b60405180910390f35b348015610381575f80fd5b5061038a610c63565b60405161039791906135ed565b60405180910390f35b3480156103ab575f80fd5b506103c660048036038101906103c1919061353f565b610c6c565b005b3480156103d3575f80fd5b506103dc610dc0565b6040516103e991906135ed565b60405180910390f35b3480156103fd575f80fd5b50610406610dc6565b60405161041391906135ed565b60405180910390f35b348015610427575f80fd5b50610430610dcc565b60405161043d91906135ed565b60405180910390f35b348015610451575f80fd5b5061046c60048036038101906104679190613606565b610dd2565b6040516104799190613526565b60405180910390f35b34801561048d575f80fd5b50610496610ea6565b005b3480156104a3575f80fd5b506104ac611044565b6040516104b99190613671565b60405180910390f35b3480156104cd575f80fd5b506104e860048036038101906104e391906134ce565b61104c565b6040516104f59190613526565b60405180910390f35b348015610509575f80fd5b506105126110fa565b60405161051f91906135ed565b60405180910390f35b348015610533575f80fd5b5061053c611100565b60405161054991906135ed565b60405180910390f35b34801561055d575f80fd5b50610566611106565b6040516105739190613699565b60405180910390f35b348015610587575f80fd5b506105a2600480360381019061059d919061353f565b61112a565b6040516105af9190613526565b60405180910390f35b3480156105c3575f80fd5b506105cc61117c565b6040516105d991906135ed565b60405180910390f35b3480156105ed575f80fd5b506105f6611182565b60405161060391906135ed565b60405180910390f35b348015610617575f80fd5b50610632600480360381019061062d919061353f565b611188565b60405161063f91906135ed565b60405180910390f35b348015610653575f80fd5b5061065c6111cd565b005b348015610669575f80fd5b50610672611320565b005b34801561067f575f80fd5b5061069a600480360381019061069591906136dc565b6113d1565b005b3480156106a7575f80fd5b506106c260048036038101906106bd919061371a565b6114bf565b005b3480156106cf575f80fd5b506106d8611572565b6040516106e59190613699565b60405180910390f35b3480156106f9575f80fd5b5061070261159a565b60405161070f9190613526565b60405180910390f35b348015610723575f80fd5b5061072c6115ad565b604051610739919061341d565b60405180910390f35b34801561074d575f80fd5b50610768600480360381019061076391906136dc565b61163d565b005b348015610775575f80fd5b5061077e61176f565b005b34801561078b575f80fd5b50610794611882565b6040516107a191906135ed565b60405180910390f35b3480156107b5575f80fd5b506107d060048036038101906107cb91906134ce565b611888565b6040516107dd9190613526565b60405180910390f35b3480156107f1575f80fd5b5061080c600480360381019061080791906134ce565b611950565b6040516108199190613526565b60405180910390f35b34801561082d575f80fd5b506108486004803603810190610843919061353f565b61196d565b6040516108559190613526565b60405180910390f35b348015610869575f80fd5b5061087261198a565b60405161087f91906135ed565b60405180910390f35b348015610893575f80fd5b5061089c611990565b6040516108a991906135ed565b60405180910390f35b3480156108bd575f80fd5b506108d860048036038101906108d391906136dc565b611996565b005b3480156108e5575f80fd5b506108ee611ad2565b6040516108fb91906135ed565b60405180910390f35b34801561090f575f80fd5b5061092a60048036038101906109259190613745565b611ad8565b60405161093791906135ed565b60405180910390f35b34801561094b575f80fd5b50610954611b5a565b60405161096191906135ed565b60405180910390f35b348015610975575f80fd5b50610990600480360381019061098b9190613783565b611b60565b005b34801561099d575f80fd5b506109b860048036038101906109b3919061353f565b611cd0565b005b6060600380546109c990613814565b80601f01602080910402602001604051908101604052809291908181526020018280546109f590613814565b8015610a405780601f10610a1757610100808354040283529160200191610a40565b820191905f5260205f20905b815481529060010190602001808311610a2357829003601f168201915b5050505050905090565b5f610a5d610a56611e24565b8484611e2b565b6001905092915050565b600e5f9054906101000a900460ff1681565b610a81611e24565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b069061388e565b60405180910390fd5b5f4790505f8111610b55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4c9061391c565b60405180910390fd5b5f600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051610b9b90613967565b5f6040518083038185875af1925050503d805f8114610bd5576040519150601f19603f3d011682016040523d82523d5f602084013e610bda565b606091505b5050905080610c1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c15906139c5565b60405180910390fd5b5050565b6019602052805f5260405f205f915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f600254905090565b610c74611e24565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf99061388e565b60405180910390fd5b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60155481565b60125481565b60135481565b5f610dde848484611fee565b610e9b84610dea611e24565b610e968560405180606001604052806028815260200161444a6028913960015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610e4d611e24565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461290e9092919063ffffffff16565b611e2b565b600190509392505050565b610eae611e24565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f339061388e565b60405180910390fd5b5f4790505f610f4a30611188565b9050610f77307f000000000000000000000000000000000000000000000000000000000000000083611e2b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d7198330845f80600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401610ffc96959493929190613a1c565b60606040518083038185885af1158015611018573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061103d9190613a8f565b5050505050565b5f6012905090565b5f6110f0611058611e24565b846110eb8560015f611068611e24565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461297090919063ffffffff16565b611e2b565b6001905092915050565b600f5481565b600d5481565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f60185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b600c5481565b60105481565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6111d5611e24565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611263576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125a9061388e565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611328611e24565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ad9061388e565b60405180910390fd5b5f600e5f6101000a81548160ff021916908315150217905550565b6113d9611e24565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611467576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145e9061388e565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b6114c7611e24565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611555576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154c9061388e565b60405180910390fd5b80600e60016101000a81548160ff02191690831515021790555050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600e60019054906101000a900460ff1681565b6060600480546115bc90613814565b80601f01602080910402602001604051908101604052809291908181526020018280546115e890613814565b80156116335780601f1061160a57610100808354040283529160200191611633565b820191905f5260205f20905b81548152906001019060200180831161161657829003601f168201915b5050505050905090565b611645611e24565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ca9061388e565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611761576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175890613b4f565b60405180910390fd5b61176b82826129cd565b5050565b611777611e24565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611805576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117fc9061388e565b60405180910390fd5b5f61180f30611188565b90505f8111611853576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184a90613bdd565b60405180910390fd5b61187f30600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611fee565b50565b60165481565b5f611946611894611e24565b84611941856040518060600160405280602581526020016144726025913960015f6118bd611e24565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461290e9092919063ffffffff16565b611e2b565b6001905092915050565b5f61196361195c611e24565b8484611fee565b6001905092915050565b601a602052805f5260405f205f915054906101000a900460ff1681565b60095481565b60145481565b61199e611e24565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a239061388e565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611ac69190613526565b60405180910390a25050565b600b5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60115481565b611b68611e24565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bed9061388e565b60405180910390fd5b8360108190555081601181905550601154601054611c149190613c28565b600f819055508260138190555080601481905550601454601354611c389190613c28565b601281905550601e600f541115611c84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7b90613ca5565b60405180910390fd5b601e6012541115611cca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc190613ca5565b60405180910390fd5b50505050565b611cd8611e24565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5d9061388e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611e99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9090613d33565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611efe90613dc1565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611fe191906135ed565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361205c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205390613e4f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036120ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c190613edd565b60405180910390fd5b5f81036120e1576120dc83835f612a6b565b612909565b600e5f9054906101000a900460ff16156124d5576120fd611572565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561216b575061213b611572565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156121a357505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156121dd575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156121f5575060085f9054906101000a900460ff16155b156124d457601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612297575060195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561233e57600b548111156122e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d890613f6b565b60405180910390fd5b600d546122ed83611188565b826122f89190613c28565b1115612339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233090613fd3565b60405180910390fd5b6124d3565b601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156123db575060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561242a57600b54811115612425576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241c90614061565b60405180910390fd5b6124d2565b60195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166124d157600d5461248483611188565b8261248f9190613c28565b11156124d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c790613fd3565b60405180910390fd5b5b5b5b5b5b5f6124df30611188565b90505f600c548210159050808015612503575060085f9054906101000a900460ff16155b80156125565750601a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156125a9575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156125fc575060185f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561263d57600160085f6101000a81548160ff021916908315150217905550612623612cf4565b5f60085f6101000a81548160ff0219169083151502179055505b5f60085f9054906101000a900460ff1615905060185f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806126eb575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156126f4575f90505b5f81156128f957601a5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561275257505f601254115b156127ea5761277f606461277160125488612f1a90919063ffffffff16565b612f9190919063ffffffff16565b905060125460145482612792919061407f565b61279c91906140ed565b60155f8282546127ac9190613c28565b92505081905550601254601354826127c4919061407f565b6127ce91906140ed565b60165f8282546127de9190613c28565b925050819055506128d6565b601a5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561284157505f600f54115b156128d55761286e6064612860600f5488612f1a90919063ffffffff16565b612f9190919063ffffffff16565b9050600f5460115482612881919061407f565b61288b91906140ed565b60155f82825461289b9190613c28565b92505081905550600f54601054826128b3919061407f565b6128bd91906140ed565b60165f8282546128cd9190613c28565b925050819055505b5b5f8111156128ea576128e9873083612a6b565b5b80856128f6919061411d565b94505b612904878787612a6b565b505050505b505050565b5f838311158290612955576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294c919061341d565b60405180910390fd5b505f8385612963919061411d565b9050809150509392505050565b5f80828461297e9190613c28565b9050838110156129c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ba9061419a565b60405180910390fd5b8091505092915050565b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612ad9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ad090613e4f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b3e90613edd565b60405180910390fd5b612b52838383612fda565b612bbb81604051806060016040528060268152602001614424602691395f808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461290e9092919063ffffffff16565b5f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550612c4a815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461297090919063ffffffff16565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612ce791906135ed565b60405180910390a3505050565b5f612cfe30611188565b90505f601654601554612d119190613c28565b90505f80831480612d2157505f82145b15612d2e57505050612f18565b5f1515600e60019054906101000a900460ff16151503612d75576014600c54612d57919061407f565b831115612d70576014600c54612d6d919061407f565b92505b612d81565b612d7e30611188565b92505b5f60028360155486612d93919061407f565b612d9d91906140ed565b612da791906140ed565b90505f612dbd8286612fdf90919063ffffffff16565b90505f479050612dcc82613028565b5f612de08247612fdf90919063ffffffff16565b90505f612e0a87612dfc60165485612f1a90919063ffffffff16565b612f9190919063ffffffff16565b90505f8183612e19919061411d565b90505f6015819055505f6016819055505f86118015612e3757505f81115b15612e8457612e46868261325b565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618582601554604051612e7b939291906141b8565b60405180910390a15b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051612ec990613967565b5f6040518083038185875af1925050503d805f8114612f03576040519150601f19603f3d011682016040523d82523d5f602084013e612f08565b606091505b5050809750505050505050505050505b565b5f808303612f2a575f9050612f8b565b5f8284612f37919061407f565b9050828482612f4691906140ed565b14612f86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f7d9061425d565b60405180910390fd5b809150505b92915050565b5f612fd283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613332565b905092915050565b505050565b5f61302083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061290e565b905092915050565b5f600267ffffffffffffffff8111156130445761304361427b565b5b6040519080825280602002602001820160405280156130725781602001602082028036833780820191505090505b50905030815f81518110613089576130886142a8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561312c573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061315091906142e9565b81600181518110613164576131636142a8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506131c9307f000000000000000000000000000000000000000000000000000000000000000084611e2b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b815260040161322a9594939291906143cb565b5f604051808303815f87803b158015613241575f80fd5b505af1158015613253573d5f803e3d5ffd5b505050505050565b613286307f000000000000000000000000000000000000000000000000000000000000000084611e2b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8030426040518863ffffffff1660e01b81526004016132ea96959493929190613a1c565b60606040518083038185885af1158015613306573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061332b9190613a8f565b5050505050565b5f8083118290613378576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161336f919061341d565b60405180910390fd5b505f838561338691906140ed565b9050809150509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156133ca5780820151818401526020810190506133af565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6133ef82613393565b6133f9818561339d565b93506134098185602086016133ad565b613412816133d5565b840191505092915050565b5f6020820190508181035f83015261343581846133e5565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61346a82613441565b9050919050565b61347a81613460565b8114613484575f80fd5b50565b5f8135905061349581613471565b92915050565b5f819050919050565b6134ad8161349b565b81146134b7575f80fd5b50565b5f813590506134c8816134a4565b92915050565b5f80604083850312156134e4576134e361343d565b5b5f6134f185828601613487565b9250506020613502858286016134ba565b9150509250929050565b5f8115159050919050565b6135208161350c565b82525050565b5f6020820190506135395f830184613517565b92915050565b5f602082840312156135545761355361343d565b5b5f61356184828501613487565b91505092915050565b5f819050919050565b5f61358d61358861358384613441565b61356a565b613441565b9050919050565b5f61359e82613573565b9050919050565b5f6135af82613594565b9050919050565b6135bf816135a5565b82525050565b5f6020820190506135d85f8301846135b6565b92915050565b6135e78161349b565b82525050565b5f6020820190506136005f8301846135de565b92915050565b5f805f6060848603121561361d5761361c61343d565b5b5f61362a86828701613487565b935050602061363b86828701613487565b925050604061364c868287016134ba565b9150509250925092565b5f60ff82169050919050565b61366b81613656565b82525050565b5f6020820190506136845f830184613662565b92915050565b61369381613460565b82525050565b5f6020820190506136ac5f83018461368a565b92915050565b6136bb8161350c565b81146136c5575f80fd5b50565b5f813590506136d6816136b2565b92915050565b5f80604083850312156136f2576136f161343d565b5b5f6136ff85828601613487565b9250506020613710858286016136c8565b9150509250929050565b5f6020828403121561372f5761372e61343d565b5b5f61373c848285016136c8565b91505092915050565b5f806040838503121561375b5761375a61343d565b5b5f61376885828601613487565b925050602061377985828601613487565b9150509250929050565b5f805f806080858703121561379b5761379a61343d565b5b5f6137a8878288016134ba565b94505060206137b9878288016134ba565b93505060406137ca878288016134ba565b92505060606137db878288016134ba565b91505092959194509250565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061382b57607f821691505b60208210810361383e5761383d6137e7565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61387860208361339d565b915061388382613844565b602082019050919050565b5f6020820190508181035f8301526138a58161386c565b9050919050565b7f4554482062616c616e6365206d7573742062652067726561746572207468616e5f8201527f2030000000000000000000000000000000000000000000000000000000000000602082015250565b5f61390660228361339d565b9150613911826138ac565b604082019050919050565b5f6020820190508181035f830152613933816138fa565b9050919050565b5f81905092915050565b50565b5f6139525f8361393a565b915061395d82613944565b5f82019050919050565b5f61397182613947565b9150819050919050565b7f4661696c656420746f20636c656172204554482062616c616e636500000000005f82015250565b5f6139af601b8361339d565b91506139ba8261397b565b602082019050919050565b5f6020820190508181035f8301526139dc816139a3565b9050919050565b5f819050919050565b5f613a06613a016139fc846139e3565b61356a565b61349b565b9050919050565b613a16816139ec565b82525050565b5f60c082019050613a2f5f83018961368a565b613a3c60208301886135de565b613a496040830187613a0d565b613a566060830186613a0d565b613a63608083018561368a565b613a7060a08301846135de565b979650505050505050565b5f81519050613a89816134a4565b92915050565b5f805f60608486031215613aa657613aa561343d565b5b5f613ab386828701613a7b565b9350506020613ac486828701613a7b565b9250506040613ad586828701613a7b565b9150509250925092565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f613b3960398361339d565b9150613b4482613adf565b604082019050919050565b5f6020820190508181035f830152613b6681613b2d565b9050919050565b7f546f6b656e2062616c616e6365206d75737420626520677265617465722074685f8201527f616e203000000000000000000000000000000000000000000000000000000000602082015250565b5f613bc760248361339d565b9150613bd282613b6d565b604082019050919050565b5f6020820190508181035f830152613bf481613bbb565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613c328261349b565b9150613c3d8361349b565b9250828201905080821115613c5557613c54613bfb565b5b92915050565b7f4d4158203330252074617820616c6c6f776564000000000000000000000000005f82015250565b5f613c8f60138361339d565b9150613c9a82613c5b565b602082019050919050565b5f6020820190508181035f830152613cbc81613c83565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613d1d60248361339d565b9150613d2882613cc3565b604082019050919050565b5f6020820190508181035f830152613d4a81613d11565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613dab60228361339d565b9150613db682613d51565b604082019050919050565b5f6020820190508181035f830152613dd881613d9f565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f613e3960258361339d565b9150613e4482613ddf565b604082019050919050565b5f6020820190508181035f830152613e6681613e2d565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613ec760238361339d565b9150613ed282613e6d565b604082019050919050565b5f6020820190508181035f830152613ef481613ebb565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f613f5560358361339d565b9150613f6082613efb565b604082019050919050565b5f6020820190508181035f830152613f8281613f49565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f613fbd60138361339d565b9150613fc882613f89565b602082019050919050565b5f6020820190508181035f830152613fea81613fb1565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f61404b60368361339d565b915061405682613ff1565b604082019050919050565b5f6020820190508181035f8301526140788161403f565b9050919050565b5f6140898261349b565b91506140948361349b565b92508282026140a28161349b565b915082820484148315176140b9576140b8613bfb565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6140f78261349b565b91506141028361349b565b925082614112576141116140c0565b5b828204905092915050565b5f6141278261349b565b91506141328361349b565b925082820390508181111561414a57614149613bfb565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f614184601b8361339d565b915061418f82614150565b602082019050919050565b5f6020820190508181035f8301526141b181614178565b9050919050565b5f6060820190506141cb5f8301866135de565b6141d860208301856135de565b6141e560408301846135de565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f61424760218361339d565b9150614252826141ed565b604082019050919050565b5f6020820190508181035f8301526142748161423b565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f815190506142e381613471565b92915050565b5f602082840312156142fe576142fd61343d565b5b5f61430b848285016142d5565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61434681613460565b82525050565b5f614357838361433d565b60208301905092915050565b5f602082019050919050565b5f61437982614314565b614383818561431e565b935061438e8361432e565b805f5b838110156143be5781516143a5888261434c565b97506143b083614363565b925050600181019050614391565b5085935050505092915050565b5f60a0820190506143de5f8301886135de565b6143eb6020830187613a0d565b81810360408301526143fd818661436f565b905061440c606083018561368a565b61441960808301846135de565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220a12f37df2919db7e13ab62a2b941fe0a8b034a6987fc05f9e0bf4a21ed1eda9564736f6c63430008150033

Deployed Bytecode

0x60806040526004361061025f575f3560e01c806370a0823111610143578063a457c2d7116100b5578063c024666811610079578063c0246668146108b2578063c3f70b52146108da578063dd62ed3e14610904578063df6f93be14610940578063f1cd531a1461096a578063f2fde38b1461099257610266565b8063a457c2d7146107aa578063a9059cbb146107e6578063b62496f514610822578063b69ef8a81461085e578063be8575041461088857610266565b80638da5cb5b116101075780638da5cb5b146106c4578063945674fe146106ee57806395d89b41146107185780639a7a23d6146107425780639ee2e9241461076a5780639fccce321461078057610266565b806370a082311461060c578063715018a614610648578063751039fc1461065e5780637571336a14610674578063863cf2cc1461069c57610266565b806322eb6631116101dc57806346469afb116101a057806346469afb146104fe57806348d791551461052857806349bd5a5e146105525780634fbee1931461057c5780635de0f2a0146105b85780636c7e15c9146105e257610266565b806322eb66311461041c57806323b872dd146104465780632c28f57914610482578063313ce5671461049857806339509351146104c257610266565b80631694505e116102235780631694505e1461034c57806318160ddd146103765780631816467f146103a05780631a8145bb146103c85780631bff7898146103f257610266565b806306fdde031461026a578063095ea7b3146102945780630e947809146102d05780630f299cf1146102fa57806310d5de531461031057610266565b3661026657005b5f80fd5b348015610275575f80fd5b5061027e6109ba565b60405161028b919061341d565b60405180910390f35b34801561029f575f80fd5b506102ba60048036038101906102b591906134ce565b610a4a565b6040516102c79190613526565b60405180910390f35b3480156102db575f80fd5b506102e4610a67565b6040516102f19190613526565b60405180910390f35b348015610305575f80fd5b5061030e610a79565b005b34801561031b575f80fd5b506103366004803603810190610331919061353f565b610c22565b6040516103439190613526565b60405180910390f35b348015610357575f80fd5b50610360610c3f565b60405161036d91906135c5565b60405180910390f35b348015610381575f80fd5b5061038a610c63565b60405161039791906135ed565b60405180910390f35b3480156103ab575f80fd5b506103c660048036038101906103c1919061353f565b610c6c565b005b3480156103d3575f80fd5b506103dc610dc0565b6040516103e991906135ed565b60405180910390f35b3480156103fd575f80fd5b50610406610dc6565b60405161041391906135ed565b60405180910390f35b348015610427575f80fd5b50610430610dcc565b60405161043d91906135ed565b60405180910390f35b348015610451575f80fd5b5061046c60048036038101906104679190613606565b610dd2565b6040516104799190613526565b60405180910390f35b34801561048d575f80fd5b50610496610ea6565b005b3480156104a3575f80fd5b506104ac611044565b6040516104b99190613671565b60405180910390f35b3480156104cd575f80fd5b506104e860048036038101906104e391906134ce565b61104c565b6040516104f59190613526565b60405180910390f35b348015610509575f80fd5b506105126110fa565b60405161051f91906135ed565b60405180910390f35b348015610533575f80fd5b5061053c611100565b60405161054991906135ed565b60405180910390f35b34801561055d575f80fd5b50610566611106565b6040516105739190613699565b60405180910390f35b348015610587575f80fd5b506105a2600480360381019061059d919061353f565b61112a565b6040516105af9190613526565b60405180910390f35b3480156105c3575f80fd5b506105cc61117c565b6040516105d991906135ed565b60405180910390f35b3480156105ed575f80fd5b506105f6611182565b60405161060391906135ed565b60405180910390f35b348015610617575f80fd5b50610632600480360381019061062d919061353f565b611188565b60405161063f91906135ed565b60405180910390f35b348015610653575f80fd5b5061065c6111cd565b005b348015610669575f80fd5b50610672611320565b005b34801561067f575f80fd5b5061069a600480360381019061069591906136dc565b6113d1565b005b3480156106a7575f80fd5b506106c260048036038101906106bd919061371a565b6114bf565b005b3480156106cf575f80fd5b506106d8611572565b6040516106e59190613699565b60405180910390f35b3480156106f9575f80fd5b5061070261159a565b60405161070f9190613526565b60405180910390f35b348015610723575f80fd5b5061072c6115ad565b604051610739919061341d565b60405180910390f35b34801561074d575f80fd5b50610768600480360381019061076391906136dc565b61163d565b005b348015610775575f80fd5b5061077e61176f565b005b34801561078b575f80fd5b50610794611882565b6040516107a191906135ed565b60405180910390f35b3480156107b5575f80fd5b506107d060048036038101906107cb91906134ce565b611888565b6040516107dd9190613526565b60405180910390f35b3480156107f1575f80fd5b5061080c600480360381019061080791906134ce565b611950565b6040516108199190613526565b60405180910390f35b34801561082d575f80fd5b506108486004803603810190610843919061353f565b61196d565b6040516108559190613526565b60405180910390f35b348015610869575f80fd5b5061087261198a565b60405161087f91906135ed565b60405180910390f35b348015610893575f80fd5b5061089c611990565b6040516108a991906135ed565b60405180910390f35b3480156108bd575f80fd5b506108d860048036038101906108d391906136dc565b611996565b005b3480156108e5575f80fd5b506108ee611ad2565b6040516108fb91906135ed565b60405180910390f35b34801561090f575f80fd5b5061092a60048036038101906109259190613745565b611ad8565b60405161093791906135ed565b60405180910390f35b34801561094b575f80fd5b50610954611b5a565b60405161096191906135ed565b60405180910390f35b348015610975575f80fd5b50610990600480360381019061098b9190613783565b611b60565b005b34801561099d575f80fd5b506109b860048036038101906109b3919061353f565b611cd0565b005b6060600380546109c990613814565b80601f01602080910402602001604051908101604052809291908181526020018280546109f590613814565b8015610a405780601f10610a1757610100808354040283529160200191610a40565b820191905f5260205f20905b815481529060010190602001808311610a2357829003601f168201915b5050505050905090565b5f610a5d610a56611e24565b8484611e2b565b6001905092915050565b600e5f9054906101000a900460ff1681565b610a81611e24565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b069061388e565b60405180910390fd5b5f4790505f8111610b55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4c9061391c565b60405180910390fd5b5f600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051610b9b90613967565b5f6040518083038185875af1925050503d805f8114610bd5576040519150601f19603f3d011682016040523d82523d5f602084013e610bda565b606091505b5050905080610c1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c15906139c5565b60405180910390fd5b5050565b6019602052805f5260405f205f915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f600254905090565b610c74611e24565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf99061388e565b60405180910390fd5b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60155481565b60125481565b60135481565b5f610dde848484611fee565b610e9b84610dea611e24565b610e968560405180606001604052806028815260200161444a6028913960015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610e4d611e24565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461290e9092919063ffffffff16565b611e2b565b600190509392505050565b610eae611e24565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f339061388e565b60405180910390fd5b5f4790505f610f4a30611188565b9050610f77307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d83611e2b565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d7198330845f80600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401610ffc96959493929190613a1c565b60606040518083038185885af1158015611018573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061103d9190613a8f565b5050505050565b5f6012905090565b5f6110f0611058611e24565b846110eb8560015f611068611e24565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461297090919063ffffffff16565b611e2b565b6001905092915050565b600f5481565b600d5481565b7f000000000000000000000000454feafd7304e390fdb847276333677739b4385b81565b5f60185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b600c5481565b60105481565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6111d5611e24565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611263576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125a9061388e565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611328611e24565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ad9061388e565b60405180910390fd5b5f600e5f6101000a81548160ff021916908315150217905550565b6113d9611e24565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611467576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145e9061388e565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b6114c7611e24565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611555576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154c9061388e565b60405180910390fd5b80600e60016101000a81548160ff02191690831515021790555050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600e60019054906101000a900460ff1681565b6060600480546115bc90613814565b80601f01602080910402602001604051908101604052809291908181526020018280546115e890613814565b80156116335780601f1061160a57610100808354040283529160200191611633565b820191905f5260205f20905b81548152906001019060200180831161161657829003601f168201915b5050505050905090565b611645611e24565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ca9061388e565b60405180910390fd5b7f000000000000000000000000454feafd7304e390fdb847276333677739b4385b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611761576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175890613b4f565b60405180910390fd5b61176b82826129cd565b5050565b611777611e24565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611805576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117fc9061388e565b60405180910390fd5b5f61180f30611188565b90505f8111611853576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184a90613bdd565b60405180910390fd5b61187f30600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611fee565b50565b60165481565b5f611946611894611e24565b84611941856040518060600160405280602581526020016144726025913960015f6118bd611e24565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461290e9092919063ffffffff16565b611e2b565b6001905092915050565b5f61196361195c611e24565b8484611fee565b6001905092915050565b601a602052805f5260405f205f915054906101000a900460ff1681565b60095481565b60145481565b61199e611e24565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a239061388e565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611ac69190613526565b60405180910390a25050565b600b5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60115481565b611b68611e24565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bed9061388e565b60405180910390fd5b8360108190555081601181905550601154601054611c149190613c28565b600f819055508260138190555080601481905550601454601354611c389190613c28565b601281905550601e600f541115611c84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7b90613ca5565b60405180910390fd5b601e6012541115611cca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc190613ca5565b60405180910390fd5b50505050565b611cd8611e24565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5d9061388e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611e99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9090613d33565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611efe90613dc1565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611fe191906135ed565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361205c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205390613e4f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036120ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c190613edd565b60405180910390fd5b5f81036120e1576120dc83835f612a6b565b612909565b600e5f9054906101000a900460ff16156124d5576120fd611572565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561216b575061213b611572565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156121a357505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156121dd575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156121f5575060085f9054906101000a900460ff16155b156124d457601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612297575060195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561233e57600b548111156122e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d890613f6b565b60405180910390fd5b600d546122ed83611188565b826122f89190613c28565b1115612339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233090613fd3565b60405180910390fd5b6124d3565b601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156123db575060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561242a57600b54811115612425576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241c90614061565b60405180910390fd5b6124d2565b60195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166124d157600d5461248483611188565b8261248f9190613c28565b11156124d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c790613fd3565b60405180910390fd5b5b5b5b5b5b5f6124df30611188565b90505f600c548210159050808015612503575060085f9054906101000a900460ff16155b80156125565750601a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156125a9575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156125fc575060185f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561263d57600160085f6101000a81548160ff021916908315150217905550612623612cf4565b5f60085f6101000a81548160ff0219169083151502179055505b5f60085f9054906101000a900460ff1615905060185f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806126eb575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156126f4575f90505b5f81156128f957601a5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561275257505f601254115b156127ea5761277f606461277160125488612f1a90919063ffffffff16565b612f9190919063ffffffff16565b905060125460145482612792919061407f565b61279c91906140ed565b60155f8282546127ac9190613c28565b92505081905550601254601354826127c4919061407f565b6127ce91906140ed565b60165f8282546127de9190613c28565b925050819055506128d6565b601a5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561284157505f600f54115b156128d55761286e6064612860600f5488612f1a90919063ffffffff16565b612f9190919063ffffffff16565b9050600f5460115482612881919061407f565b61288b91906140ed565b60155f82825461289b9190613c28565b92505081905550600f54601054826128b3919061407f565b6128bd91906140ed565b60165f8282546128cd9190613c28565b925050819055505b5b5f8111156128ea576128e9873083612a6b565b5b80856128f6919061411d565b94505b612904878787612a6b565b505050505b505050565b5f838311158290612955576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294c919061341d565b60405180910390fd5b505f8385612963919061411d565b9050809150509392505050565b5f80828461297e9190613c28565b9050838110156129c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ba9061419a565b60405180910390fd5b8091505092915050565b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612ad9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ad090613e4f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b3e90613edd565b60405180910390fd5b612b52838383612fda565b612bbb81604051806060016040528060268152602001614424602691395f808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461290e9092919063ffffffff16565b5f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550612c4a815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461297090919063ffffffff16565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612ce791906135ed565b60405180910390a3505050565b5f612cfe30611188565b90505f601654601554612d119190613c28565b90505f80831480612d2157505f82145b15612d2e57505050612f18565b5f1515600e60019054906101000a900460ff16151503612d75576014600c54612d57919061407f565b831115612d70576014600c54612d6d919061407f565b92505b612d81565b612d7e30611188565b92505b5f60028360155486612d93919061407f565b612d9d91906140ed565b612da791906140ed565b90505f612dbd8286612fdf90919063ffffffff16565b90505f479050612dcc82613028565b5f612de08247612fdf90919063ffffffff16565b90505f612e0a87612dfc60165485612f1a90919063ffffffff16565b612f9190919063ffffffff16565b90505f8183612e19919061411d565b90505f6015819055505f6016819055505f86118015612e3757505f81115b15612e8457612e46868261325b565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618582601554604051612e7b939291906141b8565b60405180910390a15b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051612ec990613967565b5f6040518083038185875af1925050503d805f8114612f03576040519150601f19603f3d011682016040523d82523d5f602084013e612f08565b606091505b5050809750505050505050505050505b565b5f808303612f2a575f9050612f8b565b5f8284612f37919061407f565b9050828482612f4691906140ed565b14612f86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f7d9061425d565b60405180910390fd5b809150505b92915050565b5f612fd283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613332565b905092915050565b505050565b5f61302083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061290e565b905092915050565b5f600267ffffffffffffffff8111156130445761304361427b565b5b6040519080825280602002602001820160405280156130725781602001602082028036833780820191505090505b50905030815f81518110613089576130886142a8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561312c573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061315091906142e9565b81600181518110613164576131636142a8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506131c9307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611e2b565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b815260040161322a9594939291906143cb565b5f604051808303815f87803b158015613241575f80fd5b505af1158015613253573d5f803e3d5ffd5b505050505050565b613286307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611e2b565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8030426040518863ffffffff1660e01b81526004016132ea96959493929190613a1c565b60606040518083038185885af1158015613306573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061332b9190613a8f565b5050505050565b5f8083118290613378576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161336f919061341d565b60405180910390fd5b505f838561338691906140ed565b9050809150509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156133ca5780820151818401526020810190506133af565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6133ef82613393565b6133f9818561339d565b93506134098185602086016133ad565b613412816133d5565b840191505092915050565b5f6020820190508181035f83015261343581846133e5565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61346a82613441565b9050919050565b61347a81613460565b8114613484575f80fd5b50565b5f8135905061349581613471565b92915050565b5f819050919050565b6134ad8161349b565b81146134b7575f80fd5b50565b5f813590506134c8816134a4565b92915050565b5f80604083850312156134e4576134e361343d565b5b5f6134f185828601613487565b9250506020613502858286016134ba565b9150509250929050565b5f8115159050919050565b6135208161350c565b82525050565b5f6020820190506135395f830184613517565b92915050565b5f602082840312156135545761355361343d565b5b5f61356184828501613487565b91505092915050565b5f819050919050565b5f61358d61358861358384613441565b61356a565b613441565b9050919050565b5f61359e82613573565b9050919050565b5f6135af82613594565b9050919050565b6135bf816135a5565b82525050565b5f6020820190506135d85f8301846135b6565b92915050565b6135e78161349b565b82525050565b5f6020820190506136005f8301846135de565b92915050565b5f805f6060848603121561361d5761361c61343d565b5b5f61362a86828701613487565b935050602061363b86828701613487565b925050604061364c868287016134ba565b9150509250925092565b5f60ff82169050919050565b61366b81613656565b82525050565b5f6020820190506136845f830184613662565b92915050565b61369381613460565b82525050565b5f6020820190506136ac5f83018461368a565b92915050565b6136bb8161350c565b81146136c5575f80fd5b50565b5f813590506136d6816136b2565b92915050565b5f80604083850312156136f2576136f161343d565b5b5f6136ff85828601613487565b9250506020613710858286016136c8565b9150509250929050565b5f6020828403121561372f5761372e61343d565b5b5f61373c848285016136c8565b91505092915050565b5f806040838503121561375b5761375a61343d565b5b5f61376885828601613487565b925050602061377985828601613487565b9150509250929050565b5f805f806080858703121561379b5761379a61343d565b5b5f6137a8878288016134ba565b94505060206137b9878288016134ba565b93505060406137ca878288016134ba565b92505060606137db878288016134ba565b91505092959194509250565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061382b57607f821691505b60208210810361383e5761383d6137e7565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61387860208361339d565b915061388382613844565b602082019050919050565b5f6020820190508181035f8301526138a58161386c565b9050919050565b7f4554482062616c616e6365206d7573742062652067726561746572207468616e5f8201527f2030000000000000000000000000000000000000000000000000000000000000602082015250565b5f61390660228361339d565b9150613911826138ac565b604082019050919050565b5f6020820190508181035f830152613933816138fa565b9050919050565b5f81905092915050565b50565b5f6139525f8361393a565b915061395d82613944565b5f82019050919050565b5f61397182613947565b9150819050919050565b7f4661696c656420746f20636c656172204554482062616c616e636500000000005f82015250565b5f6139af601b8361339d565b91506139ba8261397b565b602082019050919050565b5f6020820190508181035f8301526139dc816139a3565b9050919050565b5f819050919050565b5f613a06613a016139fc846139e3565b61356a565b61349b565b9050919050565b613a16816139ec565b82525050565b5f60c082019050613a2f5f83018961368a565b613a3c60208301886135de565b613a496040830187613a0d565b613a566060830186613a0d565b613a63608083018561368a565b613a7060a08301846135de565b979650505050505050565b5f81519050613a89816134a4565b92915050565b5f805f60608486031215613aa657613aa561343d565b5b5f613ab386828701613a7b565b9350506020613ac486828701613a7b565b9250506040613ad586828701613a7b565b9150509250925092565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f613b3960398361339d565b9150613b4482613adf565b604082019050919050565b5f6020820190508181035f830152613b6681613b2d565b9050919050565b7f546f6b656e2062616c616e6365206d75737420626520677265617465722074685f8201527f616e203000000000000000000000000000000000000000000000000000000000602082015250565b5f613bc760248361339d565b9150613bd282613b6d565b604082019050919050565b5f6020820190508181035f830152613bf481613bbb565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613c328261349b565b9150613c3d8361349b565b9250828201905080821115613c5557613c54613bfb565b5b92915050565b7f4d4158203330252074617820616c6c6f776564000000000000000000000000005f82015250565b5f613c8f60138361339d565b9150613c9a82613c5b565b602082019050919050565b5f6020820190508181035f830152613cbc81613c83565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613d1d60248361339d565b9150613d2882613cc3565b604082019050919050565b5f6020820190508181035f830152613d4a81613d11565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613dab60228361339d565b9150613db682613d51565b604082019050919050565b5f6020820190508181035f830152613dd881613d9f565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f613e3960258361339d565b9150613e4482613ddf565b604082019050919050565b5f6020820190508181035f830152613e6681613e2d565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613ec760238361339d565b9150613ed282613e6d565b604082019050919050565b5f6020820190508181035f830152613ef481613ebb565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f613f5560358361339d565b9150613f6082613efb565b604082019050919050565b5f6020820190508181035f830152613f8281613f49565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f613fbd60138361339d565b9150613fc882613f89565b602082019050919050565b5f6020820190508181035f830152613fea81613fb1565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f61404b60368361339d565b915061405682613ff1565b604082019050919050565b5f6020820190508181035f8301526140788161403f565b9050919050565b5f6140898261349b565b91506140948361349b565b92508282026140a28161349b565b915082820484148315176140b9576140b8613bfb565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6140f78261349b565b91506141028361349b565b925082614112576141116140c0565b5b828204905092915050565b5f6141278261349b565b91506141328361349b565b925082820390508181111561414a57614149613bfb565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f614184601b8361339d565b915061418f82614150565b602082019050919050565b5f6020820190508181035f8301526141b181614178565b9050919050565b5f6060820190506141cb5f8301866135de565b6141d860208301856135de565b6141e560408301846135de565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f61424760218361339d565b9150614252826141ed565b604082019050919050565b5f6020820190508181035f8301526142748161423b565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f815190506142e381613471565b92915050565b5f602082840312156142fe576142fd61343d565b5b5f61430b848285016142d5565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61434681613460565b82525050565b5f614357838361433d565b60208301905092915050565b5f602082019050919050565b5f61437982614314565b614383818561431e565b935061438e8361432e565b805f5b838110156143be5781516143a5888261434c565b97506143b083614363565b925050600181019050614391565b5085935050505092915050565b5f60a0820190506143de5f8301886135de565b6143eb6020830187613a0d565b81810360408301526143fd818661436f565b905061440c606083018561368a565b61441960808301846135de565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220a12f37df2919db7e13ab62a2b941fe0a8b034a6987fc05f9e0bf4a21ed1eda9564736f6c63430008150033

Deployed Bytecode Sourcemap

17613:12552:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4876:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5790:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18096:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22030:311;;;;;;;;;;;;;:::i;:::-;;18669:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17777:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5197:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24122:165;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18378:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18277:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18311:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5967:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21491:531;;;;;;;;;;;;;:::i;:::-;;5096:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6330:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18179:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18055:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17835:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24295:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18013:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18212:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5313:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10857:148;;;;;;;;;;;;;:::i;:::-;;22613:81;;;;;;;;;;;;;:::i;:::-;;22819:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22703:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10643:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18133:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4984:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23671:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22349:256;;;;;;;;;;;;;:::i;:::-;;18418:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6556:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5448:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18892:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17913:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18343:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23480:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17977:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5631:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18243:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22975:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11013:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4876:100;4930:13;4963:5;4956:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4876:100;:::o;5790:169::-;5873:4;5890:39;5899:12;:10;:12::i;:::-;5913:7;5922:6;5890:8;:39::i;:::-;5947:4;5940:11;;5790:169;;;;:::o;18096:30::-;;;;;;;;;;;;;:::o;22030:311::-;10780:12;:10;:12::i;:::-;10770:22;;:6;;;;;;;;;;;:22;;;10762:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22086:18:::1;22107:21;22086:42;;22160:1;22147:10;:14;22139:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;22212:12;22237:9;;;;;;;;;;;22229:23;;22260:10;22229:46;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22211:64;;;22294:7;22286:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;22075:266;;22030:311::o:0;18669:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;17777:51::-;;;:::o;5197:108::-;5258:7;5285:12;;5278:19;;5197:108;:::o;24122:165::-;10780:12;:10;:12::i;:::-;10770:22;;:6;;;;;;;;;;;:22;;;10762:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24234:9:::1;;;;;;;;;;;24203:41;;24220:12;24203:41;;;;;;;;;;;;24267:12;24255:9;;:24;;;;;;;;;;;;;;;;;;24122:165:::0;:::o;18378:33::-;;;;:::o;18277:27::-;;;;:::o;18311:25::-;;;;:::o;5967:355::-;6107:4;6124:36;6134:6;6142:9;6153:6;6124:9;:36::i;:::-;6171:121;6180:6;6188:12;:10;:12::i;:::-;6202:89;6240:6;6202:89;;;;;;;;;;;;;;;;;:11;:19;6214:6;6202:19;;;;;;;;;;;;;;;:33;6222:12;:10;:12::i;:::-;6202:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;6171:8;:121::i;:::-;6310:4;6303:11;;5967:355;;;;;:::o;21491:531::-;10780:12;:10;:12::i;:::-;10770:22;;:6;;;;;;;;;;;:22;;;10762:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21548:17:::1;21568:21;21548:41;;21600:19;21622:24;21640:4;21622:9;:24::i;:::-;21600:46;;21677:62;21694:4;21709:15;21727:11;21677:8;:62::i;:::-;21752:15;:31;;;21791:9;21824:4;21844:11;21874:1;21921::::0;21964:9:::1;;;;;;;;;;;21988:15;21752:262;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;21527:495;;21491:531::o:0;5096:93::-;5154:5;5179:2;5172:9;;5096:93;:::o;6330:218::-;6418:4;6435:83;6444:12;:10;:12::i;:::-;6458:7;6467:50;6506:10;6467:11;:25;6479:12;:10;:12::i;:::-;6467:25;;;;;;;;;;;;;;;:34;6493:7;6467:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;6435:8;:83::i;:::-;6536:4;6529:11;;6330:218;;;;:::o;18179:26::-;;;;:::o;18055:31::-;;;;:::o;17835:38::-;;;:::o;24295:125::-;24360:4;24384:19;:28;24404:7;24384:28;;;;;;;;;;;;;;;;;;;;;;;;;24377:35;;24295:125;;;:::o;18013:35::-;;;;:::o;18212:24::-;;;;:::o;5313:127::-;5387:7;5414:9;:18;5424:7;5414:18;;;;;;;;;;;;;;;;5407:25;;5313:127;;;:::o;10857:148::-;10780:12;:10;:12::i;:::-;10770:22;;:6;;;;;;;;;;;:22;;;10762:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;10964:1:::1;10927:40;;10948:6;;;;;;;;;;;10927:40;;;;;;;;;;;;10995:1;10978:6;;:19;;;;;;;;;;;;;;;;;;10857:148::o:0;22613:81::-;10780:12;:10;:12::i;:::-;10770:22;;:6;;;;;;;;;;;:22;;;10762:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22681:5:::1;22667:11;;:19;;;;;;;;;;;;;;;;;;22613:81::o:0;22819:144::-;10780:12;:10;:12::i;:::-;10770:22;;:6;;;;;;;;;;;:22;;;10762:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22951:4:::1;22909:31;:39;22941:6;22909:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;22819:144:::0;;:::o;22703:107::-;10780:12;:10;:12::i;:::-;10770:22;;:6;;;;;;;;;;;:22;;;10762:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22795:7:::1;22775:17;;:27;;;;;;;;;;;;;;;;;;22703:107:::0;:::o;10643:79::-;10681:7;10708:6;;;;;;;;;;;10701:13;;10643:79;:::o;18133:37::-;;;;;;;;;;;;;:::o;4984:104::-;5040:13;5073:7;5066:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4984:104;:::o;23671:245::-;10780:12;:10;:12::i;:::-;10770:22;;:6;;;;;;;;;;;:22;;;10762:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23778:13:::1;23770:21;;:4;:21;;::::0;23762:91:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;23867:41;23896:4;23902:5;23867:28;:41::i;:::-;23671:245:::0;;:::o;22349:256::-;10780:12;:10;:12::i;:::-;10770:22;;:6;;;;;;;;;;;:22;;;10762:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22414:20:::1;22437:24;22455:4;22437:9;:24::i;:::-;22414:47;;22495:1;22480:12;:16;22472:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;22548:49;22566:4;22573:9;;;;;;;;;;;22584:12;22548:9;:49::i;:::-;22403:202;22349:256::o:0;18418:27::-;;;;:::o;6556:269::-;6649:4;6666:129;6675:12;:10;:12::i;:::-;6689:7;6698:96;6737:15;6698:96;;;;;;;;;;;;;;;;;:11;:25;6710:12;:10;:12::i;:::-;6698:25;;;;;;;;;;;;;;;:34;6724:7;6698:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;6666:8;:129::i;:::-;6813:4;6806:11;;6556:269;;;;:::o;5448:175::-;5534:4;5551:42;5561:12;:10;:12::i;:::-;5575:9;5586:6;5551:9;:42::i;:::-;5611:4;5604:11;;5448:175;;;;:::o;18892:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;17913:22::-;;;;:::o;18343:25::-;;;;:::o;23480:182::-;10780:12;:10;:12::i;:::-;10770:22;;:6;;;;;;;;;;;:22;;;10762:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23596:8:::1;23565:19;:28;23585:7;23565:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;23636:7;23620:34;;;23645:8;23620:34;;;;;;:::i;:::-;;;;;;;;23480:182:::0;;:::o;17977:29::-;;;;:::o;5631:151::-;5720:7;5747:11;:18;5759:5;5747:18;;;;;;;;;;;;;;;:27;5766:7;5747:27;;;;;;;;;;;;;;;;5740:34;;5631:151;;;;:::o;18243:24::-;;;;:::o;22975:497::-;10780:12;:10;:12::i;:::-;10770:22;;:6;;;;;;;;;;;:22;;;10762:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23147:7:::1;23135:9;:19;;;;23177:7;23165:9;:19;;;;23221:9;;23209;;:21;;;;:::i;:::-;23195:11;:35;;;;23254:8;23241:10;:21;;;;23286:8;23273:10;:21;;;;23333:10;;23320;;:23;;;;:::i;:::-;23305:12;:38;;;;23377:2;23362:11;;:17;;23354:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;23438:2;23422:12;;:18;;23414:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;22975:497:::0;;;;:::o;11013:169::-;10780:12;:10;:12::i;:::-;10770:22;;:6;;;;;;;;;;;:22;;;10762:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;11137:8:::1;11108:38;;11129:6;;;;;;;;;;;11108:38;;;;;;;;;;;;11166:8;11157:6;;:17;;;;;;;;;;;;;;;;;;11013:169:::0;:::o;229:98::-;282:7;309:10;302:17;;229:98;:::o;8232:381::-;8385:1;8368:19;;:5;:19;;;8360:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8466:1;8447:21;;:7;:21;;;8439:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8551:6;8521:11;:18;8533:5;8521:18;;;;;;;;;;;;;;;:27;8540:7;8521:27;;;;;;;;;;;;;;;:36;;;;8589:7;8573:32;;8582:5;8573:32;;;8598:6;8573:32;;;;;;:::i;:::-;;;;;;;;8232:381;;;:::o;24429:3112::-;24577:1;24561:18;;:4;:18;;;24553:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24654:1;24640:16;;:2;:16;;;24632:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;24721:1;24711:6;:11;24708:92;;24739:28;24755:4;24761:2;24765:1;24739:15;:28::i;:::-;24782:7;;24708:92;24816:11;;;;;;;;;;;24813:1083;;;24873:7;:5;:7::i;:::-;24865:15;;:4;:15;;;;:49;;;;;24907:7;:5;:7::i;:::-;24901:13;;:2;:13;;;;24865:49;:86;;;;;24949:1;24935:16;;:2;:16;;;;24865:86;:128;;;;;24986:6;24972:21;;:2;:21;;;;24865:128;:160;;;;;25015:10;;;;;;;;;;;25014:11;24865:160;24843:1042;;;25109:25;:31;25135:4;25109:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;25145:31;:35;25177:2;25145:35;;;;;;;;;;;;;;;;;;;;;;;;;25144:36;25109:71;25105:765;;;25227:14;;25217:6;:24;;25209:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;25360:16;;25343:13;25353:2;25343:9;:13::i;:::-;25334:6;:22;;;;:::i;:::-;:42;;25326:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25105:765;;;25479:25;:29;25505:2;25479:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;25513:31;:37;25545:4;25513:37;;;;;;;;;;;;;;;;;;;;;;;;;25512:38;25479:71;25475:395;;;25597:14;;25587:6;:24;;25579:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;25475:395;;;25717:31;:35;25749:2;25717:35;;;;;;;;;;;;;;;;;;;;;;;;;25713:157;;25810:16;;25793:13;25803:2;25793:9;:13::i;:::-;25784:6;:22;;;;:::i;:::-;:42;;25776:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25713:157;25475:395;25105:765;24843:1042;24813:1083;25909:28;25940:24;25958:4;25940:9;:24::i;:::-;25909:55;;25978:12;26017:20;;25993;:44;;25978:59;;26069:7;:35;;;;;26094:10;;;;;;;;;;;26093:11;26069:35;:84;;;;;26122:25;:31;26148:4;26122:31;;;;;;;;;;;;;;;;;;;;;;;;;26121:32;26069:84;:127;;;;;26171:19;:25;26191:4;26171:25;;;;;;;;;;;;;;;;;;;;;;;;;26170:26;26069:127;:168;;;;;26214:19;:23;26234:2;26214:23;;;;;;;;;;;;;;;;;;;;;;;;;26213:24;26069:168;26051:306;;;26277:4;26264:10;;:17;;;;;;;;;;;;;;;;;;26299:10;:8;:10::i;:::-;26340:5;26327:10;;:18;;;;;;;;;;;;;;;;;;26051:306;26370:12;26386:10;;;;;;;;;;;26385:11;26370:26;;26498:19;:25;26518:4;26498:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;26527:19;:23;26547:2;26527:23;;;;;;;;;;;;;;;;;;;;;;;;;26498:52;26495:99;;;26577:5;26567:15;;26495:99;26607:12;26711:7;26708:779;;;26762:25;:29;26788:2;26762:29;;;;;;;;;;;;;;;;;;;;;;;;;:49;;;;;26810:1;26795:12;;:16;26762:49;26758:576;;;26838:33;26867:3;26838:24;26849:12;;26838:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;26831:40;;26932:12;;26919:10;;26912:4;:17;;;;:::i;:::-;:32;;;;:::i;:::-;26890:18;;:54;;;;;;;:::i;:::-;;;;;;;;26999:12;;26986:10;;26979:4;:17;;;;:::i;:::-;:32;;;;:::i;:::-;26963:12;;:48;;;;;;;:::i;:::-;;;;;;;;26758:576;;;27072:25;:31;27098:4;27072:31;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;27121:1;27107:11;;:15;27072:50;27069:265;;;27150:32;27178:3;27150:23;27161:11;;27150:6;:10;;:23;;;;:::i;:::-;:27;;:32;;;;:::i;:::-;27143:39;;27242:11;;27230:9;;27223:4;:16;;;;:::i;:::-;:30;;;;:::i;:::-;27201:18;;:52;;;;;;;:::i;:::-;;;;;;;;27307:11;;27295:9;;27288:4;:16;;;;:::i;:::-;:30;;;;:::i;:::-;27272:12;;:46;;;;;;;:::i;:::-;;;;;;;;27069:265;26758:576;27361:1;27354:4;:8;27351:93;;;27386:42;27402:4;27416;27423;27386:15;:42::i;:::-;27351:93;27471:4;27461:14;;;;;:::i;:::-;;;26708:779;27500:33;27516:4;27522:2;27526:6;27500:15;:33::i;:::-;24542:2999;;;;24429:3112;;;;:::o;9120:193::-;9206:7;9239:1;9234;:6;;9242:12;9226:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9266:9;9282:1;9278;:5;;;;:::i;:::-;9266:17;;9304:1;9297:8;;;9120:193;;;;;:::o;8786:182::-;8844:7;8864:9;8880:1;8876;:5;;;;:::i;:::-;8864:17;;8905:1;8900;:6;;8892:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;8959:1;8952:8;;;8786:182;;;;:::o;23925:189::-;24042:5;24008:25;:31;24034:4;24008:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;24100:5;24066:40;;24094:4;24066:40;;;;;;;;;;;;23925:189;;:::o;6833:575::-;6991:1;6973:20;;:6;:20;;;6965:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;7075:1;7054:23;;:9;:23;;;7046:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;7131:47;7152:6;7160:9;7171:6;7131:20;:47::i;:::-;7212:71;7234:6;7212:71;;;;;;;;;;;;;;;;;:9;:17;7222:6;7212:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;7192:9;:17;7202:6;7192:17;;;;;;;;;;;;;;;:91;;;;7317:32;7342:6;7317:9;:20;7327:9;7317:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;7294:9;:20;7304:9;7294:20;;;;;;;;;;;;;;;:55;;;;7382:9;7365:35;;7374:6;7365:35;;;7393:6;7365:35;;;;;;:::i;:::-;;;;;;;;6833:575;;;:::o;28685:1477::-;28724:23;28750:24;28768:4;28750:9;:24::i;:::-;28724:50;;28785:25;28834:12;;28813:18;;:33;;;;:::i;:::-;28785:61;;28857:12;28905:1;28886:15;:20;:46;;;;28931:1;28910:17;:22;28886:46;28883:60;;;28935:7;;;;;28883:60;28980:5;28959:26;;:17;;;;;;;;;;;:26;;;28956:254;;29045:2;29022:20;;:25;;;;:::i;:::-;29004:15;:43;29001:125;;;29108:2;29085:20;;:25;;;;:::i;:::-;29067:43;;29001:125;28956:254;;;29174:24;29192:4;29174:9;:24::i;:::-;29156:42;;28956:254;29282:23;29367:1;29347:17;29326:18;;29308:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;29282:86;;29379:26;29408:36;29428:15;29408;:19;;:36;;;;:::i;:::-;29379:65;;29458:25;29486:21;29458:49;;29521:36;29538:18;29521:16;:36::i;:::-;29572:18;29593:44;29619:17;29593:21;:25;;:44;;;;:::i;:::-;29572:65;;29651:17;29671:51;29704:17;29671:28;29686:12;;29671:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;29651:71;;29733:23;29772:9;29759:10;:22;;;;:::i;:::-;29733:48;;29819:1;29798:18;:22;;;;29846:1;29831:12;:16;;;;29882:1;29864:15;:19;:42;;;;;29905:1;29887:15;:19;29864:42;29861:210;;;29922:46;29935:15;29952;29922:12;:46::i;:::-;29988:71;30003:18;30023:15;30040:18;;29988:71;;;;;;;;:::i;:::-;;;;;;;;29861:210;30105:9;;;;;;;;;;;30097:23;;30128:21;30097:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30084:70;;;;;28713:1449;;;;;;;;;28685:1477;:::o;9321:254::-;9379:7;9410:1;9405;:6;9401:47;;9435:1;9428:8;;;;9401:47;9461:9;9477:1;9473;:5;;;;:::i;:::-;9461:17;;9506:1;9501;9497;:5;;;;:::i;:::-;:10;9489:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;9566:1;9559:8;;;9321:254;;;;;:::o;9583:132::-;9641:7;9668:39;9672:1;9675;9668:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;9661:46;;9583:132;;;;:::o;8621:125::-;;;;:::o;8976:136::-;9034:7;9061:43;9065:1;9068;9061:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;9054:50;;8976:136;;;;:::o;27550:597::-;27679:21;27717:1;27703:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27679:40;;27748:4;27730;27735:1;27730:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;27774:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27764:4;27769:1;27764:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;27810:62;27827:4;27842:15;27860:11;27810:8;:62::i;:::-;27912:15;:66;;;27993:11;28019:1;28063:4;28090;28110:15;27912:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27605:542;27550:597;:::o;28156:520::-;28304:62;28321:4;28336:15;28354:11;28304:8;:62::i;:::-;28410:15;:31;;;28449:9;28482:4;28502:11;28528:1;28571;28622:4;28642:15;28410:258;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;28156:520;;:::o;9723:279::-;9809:7;9841:1;9837;:5;9844:12;9829:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9868:9;9884:1;9880;:5;;;;:::i;:::-;9868:17;;9993:1;9986:8;;;9723: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:474::-;7650:6;7658;7707:2;7695:9;7686:7;7682:23;7678:32;7675:119;;;7713:79;;:::i;:::-;7675:119;7833:1;7858:53;7903:7;7894:6;7883:9;7879:22;7858:53;:::i;:::-;7848:63;;7804:117;7960:2;7986:53;8031:7;8022:6;8011:9;8007:22;7986:53;:::i;:::-;7976:63;;7931:118;7582:474;;;;;:::o;8062:765::-;8148:6;8156;8164;8172;8221:3;8209:9;8200:7;8196:23;8192:33;8189:120;;;8228:79;;:::i;:::-;8189:120;8348:1;8373:53;8418:7;8409:6;8398:9;8394:22;8373:53;:::i;:::-;8363:63;;8319:117;8475:2;8501:53;8546:7;8537:6;8526:9;8522:22;8501:53;:::i;:::-;8491:63;;8446:118;8603:2;8629:53;8674:7;8665:6;8654:9;8650:22;8629:53;:::i;:::-;8619:63;;8574:118;8731:2;8757:53;8802:7;8793:6;8782:9;8778:22;8757:53;:::i;:::-;8747:63;;8702:118;8062:765;;;;;;;:::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:85::-;13441:7;13470:5;13459:16;;13396:85;;;:::o;13487:158::-;13545:9;13578:61;13596:42;13605:32;13631:5;13605:32;:::i;:::-;13596:42;:::i;:::-;13578:61;:::i;:::-;13565:74;;13487:158;;;:::o;13651:147::-;13746:45;13785:5;13746:45;:::i;:::-;13741:3;13734:58;13651:147;;:::o;13804:807::-;14053:4;14091:3;14080:9;14076:19;14068:27;;14105:71;14173:1;14162:9;14158:17;14149:6;14105:71;:::i;:::-;14186:72;14254:2;14243:9;14239:18;14230:6;14186:72;:::i;:::-;14268:80;14344:2;14333:9;14329:18;14320:6;14268:80;:::i;:::-;14358;14434:2;14423:9;14419:18;14410:6;14358:80;:::i;:::-;14448:73;14516:3;14505:9;14501:19;14492:6;14448:73;:::i;:::-;14531;14599:3;14588:9;14584:19;14575:6;14531:73;:::i;:::-;13804:807;;;;;;;;;:::o;14617:143::-;14674:5;14705:6;14699:13;14690:22;;14721:33;14748:5;14721:33;:::i;:::-;14617:143;;;;:::o;14766:663::-;14854:6;14862;14870;14919:2;14907:9;14898:7;14894:23;14890:32;14887:119;;;14925:79;;:::i;:::-;14887:119;15045:1;15070:64;15126:7;15117:6;15106:9;15102:22;15070:64;:::i;:::-;15060:74;;15016:128;15183:2;15209:64;15265:7;15256:6;15245:9;15241:22;15209:64;:::i;:::-;15199:74;;15154:129;15322:2;15348:64;15404:7;15395:6;15384:9;15380:22;15348:64;:::i;:::-;15338:74;;15293:129;14766:663;;;;;:::o;15435:244::-;15575:34;15571:1;15563:6;15559:14;15552:58;15644:27;15639:2;15631:6;15627:15;15620:52;15435:244;:::o;15685:366::-;15827:3;15848:67;15912:2;15907:3;15848:67;:::i;:::-;15841:74;;15924:93;16013:3;15924:93;:::i;:::-;16042:2;16037:3;16033:12;16026:19;;15685:366;;;:::o;16057:419::-;16223:4;16261:2;16250:9;16246:18;16238:26;;16310:9;16304:4;16300:20;16296:1;16285:9;16281:17;16274:47;16338:131;16464:4;16338:131;:::i;:::-;16330:139;;16057:419;;;:::o;16482:223::-;16622:34;16618:1;16610:6;16606:14;16599:58;16691:6;16686:2;16678:6;16674:15;16667:31;16482:223;:::o;16711:366::-;16853:3;16874:67;16938:2;16933:3;16874:67;:::i;:::-;16867:74;;16950:93;17039:3;16950:93;:::i;:::-;17068:2;17063:3;17059:12;17052:19;;16711:366;;;:::o;17083:419::-;17249:4;17287:2;17276:9;17272:18;17264:26;;17336:9;17330:4;17326:20;17322:1;17311:9;17307:17;17300:47;17364:131;17490:4;17364:131;:::i;:::-;17356:139;;17083:419;;;:::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:169::-;18031:21;18027:1;18019:6;18015:14;18008:45;17891:169;:::o;18066:366::-;18208:3;18229:67;18293:2;18288:3;18229:67;:::i;:::-;18222:74;;18305:93;18394:3;18305:93;:::i;:::-;18423:2;18418:3;18414:12;18407:19;;18066:366;;;:::o;18438:419::-;18604:4;18642:2;18631:9;18627:18;18619:26;;18691:9;18685:4;18681:20;18677:1;18666:9;18662:17;18655:47;18719:131;18845:4;18719:131;:::i;:::-;18711:139;;18438:419;;;:::o;18863:223::-;19003:34;18999:1;18991:6;18987:14;18980:58;19072:6;19067:2;19059:6;19055:15;19048:31;18863:223;:::o;19092:366::-;19234:3;19255:67;19319:2;19314:3;19255:67;:::i;:::-;19248:74;;19331:93;19420:3;19331:93;:::i;:::-;19449:2;19444:3;19440:12;19433:19;;19092:366;;;:::o;19464:419::-;19630:4;19668:2;19657:9;19653:18;19645:26;;19717:9;19711:4;19707:20;19703:1;19692:9;19688:17;19681:47;19745:131;19871:4;19745:131;:::i;:::-;19737:139;;19464:419;;;:::o;19889:221::-;20029:34;20025:1;20017:6;20013:14;20006:58;20098:4;20093:2;20085:6;20081:15;20074:29;19889:221;:::o;20116:366::-;20258:3;20279:67;20343:2;20338:3;20279:67;:::i;:::-;20272:74;;20355:93;20444:3;20355:93;:::i;:::-;20473:2;20468:3;20464:12;20457:19;;20116:366;;;:::o;20488:419::-;20654:4;20692:2;20681:9;20677:18;20669:26;;20741:9;20735:4;20731:20;20727:1;20716:9;20712:17;20705:47;20769:131;20895:4;20769:131;:::i;:::-;20761:139;;20488:419;;;:::o;20913:224::-;21053:34;21049:1;21041:6;21037:14;21030:58;21122:7;21117:2;21109:6;21105:15;21098:32;20913:224;:::o;21143:366::-;21285:3;21306:67;21370:2;21365:3;21306:67;:::i;:::-;21299:74;;21382:93;21471:3;21382:93;:::i;:::-;21500:2;21495:3;21491:12;21484:19;;21143:366;;;:::o;21515:419::-;21681:4;21719:2;21708:9;21704:18;21696:26;;21768:9;21762:4;21758:20;21754:1;21743:9;21739:17;21732:47;21796:131;21922:4;21796:131;:::i;:::-;21788:139;;21515:419;;;:::o;21940:222::-;22080:34;22076:1;22068:6;22064:14;22057:58;22149:5;22144:2;22136:6;22132:15;22125:30;21940:222;:::o;22168:366::-;22310:3;22331:67;22395:2;22390:3;22331:67;:::i;:::-;22324:74;;22407:93;22496:3;22407:93;:::i;:::-;22525:2;22520:3;22516:12;22509:19;;22168:366;;;:::o;22540:419::-;22706:4;22744:2;22733:9;22729:18;22721:26;;22793:9;22787:4;22783:20;22779:1;22768:9;22764:17;22757:47;22821:131;22947:4;22821:131;:::i;:::-;22813:139;;22540:419;;;:::o;22965:240::-;23105:34;23101:1;23093:6;23089:14;23082:58;23174:23;23169:2;23161:6;23157:15;23150:48;22965:240;:::o;23211:366::-;23353:3;23374:67;23438:2;23433:3;23374:67;:::i;:::-;23367:74;;23450:93;23539:3;23450:93;:::i;:::-;23568:2;23563:3;23559:12;23552:19;;23211:366;;;:::o;23583:419::-;23749:4;23787:2;23776:9;23772:18;23764:26;;23836:9;23830:4;23826:20;23822:1;23811:9;23807:17;23800:47;23864:131;23990:4;23864:131;:::i;:::-;23856:139;;23583:419;;;:::o;24008:169::-;24148:21;24144:1;24136:6;24132:14;24125:45;24008:169;:::o;24183:366::-;24325:3;24346:67;24410:2;24405:3;24346:67;:::i;:::-;24339:74;;24422:93;24511:3;24422:93;:::i;:::-;24540:2;24535:3;24531:12;24524:19;;24183:366;;;:::o;24555:419::-;24721:4;24759:2;24748:9;24744:18;24736:26;;24808:9;24802:4;24798:20;24794:1;24783:9;24779:17;24772:47;24836:131;24962:4;24836:131;:::i;:::-;24828:139;;24555:419;;;:::o;24980:241::-;25120:34;25116:1;25108:6;25104:14;25097:58;25189:24;25184:2;25176:6;25172:15;25165:49;24980:241;:::o;25227:366::-;25369:3;25390:67;25454:2;25449:3;25390:67;:::i;:::-;25383:74;;25466:93;25555:3;25466:93;:::i;:::-;25584:2;25579:3;25575:12;25568:19;;25227:366;;;:::o;25599:419::-;25765:4;25803:2;25792:9;25788:18;25780:26;;25852:9;25846:4;25842:20;25838:1;25827:9;25823:17;25816:47;25880:131;26006:4;25880:131;:::i;:::-;25872:139;;25599:419;;;:::o;26024:410::-;26064:7;26087:20;26105:1;26087:20;:::i;:::-;26082:25;;26121:20;26139:1;26121:20;:::i;:::-;26116:25;;26176:1;26173;26169:9;26198:30;26216:11;26198:30;:::i;:::-;26187:41;;26377:1;26368:7;26364:15;26361:1;26358:22;26338:1;26331:9;26311:83;26288:139;;26407:18;;:::i;:::-;26288:139;26072:362;26024:410;;;;:::o;26440:180::-;26488:77;26485:1;26478:88;26585:4;26582:1;26575:15;26609:4;26606:1;26599:15;26626:185;26666:1;26683:20;26701:1;26683:20;:::i;:::-;26678:25;;26717:20;26735:1;26717:20;:::i;:::-;26712:25;;26756:1;26746:35;;26761:18;;:::i;:::-;26746:35;26803:1;26800;26796:9;26791:14;;26626:185;;;;:::o;26817:194::-;26857:4;26877:20;26895:1;26877:20;:::i;:::-;26872:25;;26911:20;26929:1;26911:20;:::i;:::-;26906:25;;26955:1;26952;26948:9;26940:17;;26979:1;26973:4;26970:11;26967:37;;;26984:18;;:::i;:::-;26967:37;26817:194;;;;:::o;27017:177::-;27157:29;27153:1;27145:6;27141:14;27134:53;27017:177;:::o;27200:366::-;27342:3;27363:67;27427:2;27422:3;27363:67;:::i;:::-;27356:74;;27439:93;27528:3;27439:93;:::i;:::-;27557:2;27552:3;27548:12;27541:19;;27200:366;;;:::o;27572:419::-;27738:4;27776:2;27765:9;27761:18;27753:26;;27825:9;27819:4;27815:20;27811:1;27800:9;27796:17;27789:47;27853:131;27979:4;27853:131;:::i;:::-;27845:139;;27572:419;;;:::o;27997:442::-;28146:4;28184:2;28173:9;28169:18;28161:26;;28197:71;28265:1;28254:9;28250:17;28241:6;28197:71;:::i;:::-;28278:72;28346:2;28335:9;28331:18;28322:6;28278:72;:::i;:::-;28360;28428:2;28417:9;28413:18;28404:6;28360:72;:::i;:::-;27997:442;;;;;;:::o;28445:220::-;28585:34;28581:1;28573:6;28569:14;28562:58;28654:3;28649:2;28641:6;28637:15;28630:28;28445:220;:::o;28671:366::-;28813:3;28834:67;28898:2;28893:3;28834:67;:::i;:::-;28827:74;;28910:93;28999:3;28910:93;:::i;:::-;29028:2;29023:3;29019:12;29012:19;;28671:366;;;:::o;29043:419::-;29209:4;29247:2;29236:9;29232:18;29224:26;;29296:9;29290:4;29286:20;29282:1;29271:9;29267:17;29260:47;29324:131;29450:4;29324:131;:::i;:::-;29316:139;;29043:419;;;:::o;29468:180::-;29516:77;29513:1;29506:88;29613:4;29610:1;29603:15;29637:4;29634:1;29627:15;29654:180;29702:77;29699:1;29692:88;29799:4;29796:1;29789:15;29823:4;29820:1;29813:15;29840:143;29897:5;29928:6;29922:13;29913:22;;29944:33;29971:5;29944:33;:::i;:::-;29840:143;;;;:::o;29989:351::-;30059:6;30108:2;30096:9;30087:7;30083:23;30079:32;30076:119;;;30114:79;;:::i;:::-;30076:119;30234:1;30259:64;30315:7;30306:6;30295:9;30291:22;30259:64;:::i;:::-;30249:74;;30205:128;29989:351;;;;:::o;30346:114::-;30413:6;30447:5;30441:12;30431:22;;30346:114;;;:::o;30466:184::-;30565:11;30599:6;30594:3;30587:19;30639:4;30634:3;30630:14;30615:29;;30466:184;;;;:::o;30656:132::-;30723:4;30746:3;30738:11;;30776:4;30771:3;30767:14;30759:22;;30656:132;;;:::o;30794:108::-;30871:24;30889:5;30871:24;:::i;:::-;30866:3;30859:37;30794:108;;:::o;30908:179::-;30977:10;30998:46;31040:3;31032:6;30998:46;:::i;:::-;31076:4;31071:3;31067:14;31053:28;;30908:179;;;;:::o;31093:113::-;31163:4;31195;31190:3;31186:14;31178:22;;31093:113;;;:::o;31242:732::-;31361:3;31390:54;31438:5;31390:54;:::i;:::-;31460:86;31539:6;31534:3;31460:86;:::i;:::-;31453:93;;31570:56;31620:5;31570:56;:::i;:::-;31649:7;31680:1;31665:284;31690:6;31687:1;31684:13;31665:284;;;31766:6;31760:13;31793:63;31852:3;31837:13;31793:63;:::i;:::-;31786:70;;31879:60;31932:6;31879:60;:::i;:::-;31869:70;;31725:224;31712:1;31709;31705:9;31700:14;;31665:284;;;31669:14;31965:3;31958:10;;31366:608;;;31242:732;;;;:::o;31980:831::-;32243:4;32281:3;32270:9;32266:19;32258:27;;32295:71;32363:1;32352:9;32348:17;32339:6;32295:71;:::i;:::-;32376:80;32452:2;32441:9;32437:18;32428:6;32376:80;:::i;:::-;32503:9;32497:4;32493:20;32488:2;32477:9;32473:18;32466:48;32531:108;32634:4;32625:6;32531:108;:::i;:::-;32523:116;;32649:72;32717:2;32706:9;32702:18;32693:6;32649:72;:::i;:::-;32731:73;32799:3;32788:9;32784:19;32775:6;32731:73;:::i;:::-;31980:831;;;;;;;;:::o

Swarm Source

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