ETH Price: $2,307.21 (+1.09%)

Token

DexSpy (SPY)
 

Overview

Max Total Supply

1,000,000,000 SPY

Holders

73

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
9,986,450.254901383 SPY

Value
$0.00
0x764f83275a33a1a1374decaa123e7e4c6be97b4b
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:
SPY

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-01-21
*/

// SPDX-License-Identifier: MIT                                                                               
/*

dexspy.io
https://t.me/DexSpyETH

*/
pragma solidity 0.8.9;

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

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

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);

    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);

    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;


    function initialize(address, address) external;
    }

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

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

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);

}
contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    uint256 private _totalSupply;
    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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


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

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

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

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

    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
        ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        _beforeTokenTransfer(sender, recipient, amount);
        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

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

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

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);

        emit Transfer(address(0), account, amount);
    }

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

        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);

        emit Transfer(account, address(0), amount);
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

}

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

        return c;
    }

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

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

        return c;

    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }
         uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

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

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;

    }
}

contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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

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

        return c;
    }

    function div(int256 a, int256 b) internal pure returns (int256) {
        require(b != -1 || a != MIN_INT256);
        return a / b;
    }

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

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

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

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

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
     function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,

        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
         function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable

        returns (uint[] memory amounts);
    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline

    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline

        ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}
contract SPY is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable uniswapV2Router;

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

    bool private swapping;
    bool private botsShaken;

    address public marketingWallet;
    address public lpLocker;
    
    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

    bool public swapEnabled = true;

    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyBurnFee;
    
    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellBurnFee;
    
    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;

    uint256 public tokensForBurn;

    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;

    mapping (address => bool) public automatedMarketMakerPairs;
    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);
    event ExcludeFromFees(address indexed account, bool isExcluded);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event marketingWalletUpdated(address indexed newWallet, address indexed oldWallet);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );
    event BuyBackTriggered(uint256 amount);


    constructor() ERC20("DexSpy", "SPY") {
        address newOwner = address(owner());
        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 _buyMarketingFee = 20;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyBurnFee = 0;
    
        uint256 _sellMarketingFee = 40;
        uint256 _sellLiquidityFee = 0;
        uint256 _sellBurnFee = 0;
        
        uint256 totalSupply = 1 * 1e9 * 1e9;
        
        maxTransactionAmount = (totalSupply * 2 / 100) + (1 * 1e9); // 2% maxTransactionAmountTxn
        swapTokensAtAmount = totalSupply * 25 / 100000; // 0.025% swap wallet

        maxWallet = (totalSupply * 2 / 100) + (1 * 1e9); // 2% max wallet

        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyBurnFee = _buyBurnFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyBurnFee;
        
        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellBurnFee = _sellBurnFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellBurnFee;
        
    	marketingWallet = address(0x38BC42d66543B0B3D08d86e98Fe045337a5C06D0); // Marketing / Development wallet
        lpLocker = address(0x663A5C229c09b049E36dCc11a9B0d4a8Eb9db214); // LP Locker CA (Unicrypt)

        excludeFromFees(newOwner, true); // Owner address
        excludeFromFees(address(this), true); // CA
        excludeFromFees(address(0xdead), true); // Burn address
        excludeFromFees(marketingWallet, true); // Marketing / Development wallet
        excludeFromFees(lpLocker, true); // LP Locker
        
        excludeFromMaxTransaction(newOwner, true); // Owner address
        excludeFromMaxTransaction(address(this), true); // CA
        excludeFromMaxTransaction(address(0xdead), true); // Burn address
        excludeFromMaxTransaction(marketingWallet, true); // Marketing / Development wallet
        excludeFromMaxTransaction(lpLocker, true); // LP Locker

        _mint(newOwner, totalSupply);
        transferOwnership(newOwner);
    }

    receive() external payable {
  	}

    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){
  	    require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
  	    require(newAmount <= totalSupply() * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply.");
  	    swapTokensAtAmount = newAmount;

  	    return true;
          }
    
    function updateMaxTxAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 100)/1e9, "Cannot set maxTransactionAmount lower than 1%");
        maxTransactionAmount = (newNum * 1e9) + (1 * 1e9) ;
    }
    
    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 2 / 100)/1e9, "Cannot set maxWalletAmount lower than 2%");
        maxWallet = (newNum * 1e9) + (1 * 1e9);
    }

    function updateLimits(uint256 _maxTransactionAmount, uint256 _maxWallet) external onlyOwner {
        require(_maxTransactionAmount >= (totalSupply() * 1 / 100)/1e9, "Cannot set maxTransactionAmount lower than 1%");
        require(_maxWallet >= (totalSupply() * 2 / 100)/1e9, "Cannot set maxWallet lower than 2%");
        maxTransactionAmount = (_maxTransactionAmount * 1e9) + (1 * 1e9) ;
        maxWallet = (_maxWallet * 1e9) + (1 * 1e9);
    }

    function removeLimits() external onlyOwner {
        maxTransactionAmount = totalSupply();
        maxWallet = totalSupply();
    }
    
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    function updateSwapEnabled(bool enabled) external onlyOwner(){
        swapEnabled = enabled;
    }

    function updateFees(uint256 _buyMarketingFee, uint256 _buyLiquidityFee, uint256 _buyBurnFee, uint256 _sellMarketingFee, 
    uint256 _sellLiquidityFee, uint256 _sellBurnFee) external onlyOwner {
        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyBurnFee = _buyBurnFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyBurnFee;
        sellMarketingFee = _sellMarketingFee;

        sellLiquidityFee = _sellLiquidityFee;
        sellBurnFee = _sellBurnFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellBurnFee;
    }
    function updateBuyFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _burnFee) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyBurnFee = _burnFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyBurnFee;
    }

    function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _burnFee) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellBurnFee = _burnFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellBurnFee;
    }

    function shakeBots() external onlyOwner(){
        sellMarketingFee = 99;
        botsShaken = true;
    }

    function unshakeBots() external onlyOwner(){
        sellMarketingFee = 40;
        require(botsShaken = true, "Must shake bots before unshake");
    }

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

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

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

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

    function 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 (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ){
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
                        require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");

                }
                
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {

                        require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
            }
		uint256 contractTokenBalance = balanceOf(address(this));
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

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

                tokensForBurn += fees * buyBurnFee / buyTotalFees;
            }
            
            if(fees > 0){    
                super._transfer(from, address(this), (fees - tokensForBurn));
            }

            if(tokensForBurn > 0){
                super._transfer(from, deadAddress, tokensForBurn);
                tokensForBurn = 0;
            }
        	amount -= fees;
        }
        super._transfer(from, to, amount);
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,

            0,
            deadAddress,
            block.timestamp
        );
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing;
        
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);
        uint256 initialETHBalance = address(this).balance;
        swapTokensForEth(amountToSwapForETH); 
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap);
        uint256 ethForLiquidity = ethBalance - ethForMarketing;

        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        
        (bool success,) = address(marketingWallet).call{value: ethForMarketing}("");
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }

        (success,) = address(marketingWallet).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":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BuyBackTriggered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpLocker","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"shakeBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForBurn","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":"tokensForMarketing","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":[],"name":"unshakeBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyMarketingFee","type":"uint256"},{"internalType":"uint256","name":"_buyLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"_buyBurnFee","type":"uint256"},{"internalType":"uint256","name":"_sellMarketingFee","type":"uint256"},{"internalType":"uint256","name":"_sellLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"_sellBurnFee","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTransactionAmount","type":"uint256"},{"internalType":"uint256","name":"_maxWallet","type":"uint256"}],"name":"updateLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600b60006101000a81548160ff0219169083151502179055503480156200002c57600080fd5b506040518060400160405280600681526020017f44657853707900000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f53505900000000000000000000000000000000000000000000000000000000008152508160039080519060200190620000b192919062000e37565b508060049080519060200190620000ca92919062000e37565b5050506000620000df6200072e60201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000620001906200073660201b60201c565b90506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001be8160016200076060201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200023957600080fd5b505afa1580156200024e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000274919062000f51565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620002d757600080fd5b505afa158015620002ec573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000312919062000f51565b6040518363ffffffff1660e01b81526004016200033192919062000f94565b602060405180830381600087803b1580156200034c57600080fd5b505af115801562000361573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000387919062000f51565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620003cf60a05160016200076060201b60201c565b620003e460a05160016200085d60201b60201c565b6000601490506000806000602890506000806000670de0b6b3a76400009050633b9aca00606460028362000419919062000ffa565b6200042591906200108a565b620004319190620010c2565b600881905550620186a06019826200044a919062000ffa565b6200045691906200108a565b600981905550633b9aca00606460028362000472919062000ffa565b6200047e91906200108a565b6200048a9190620010c2565b600a8190555086600d8190555085600e8190555084600f81905550600f54600e54600d54620004ba9190620010c2565b620004c69190620010c2565b600c81905550836011819055508260128190555081601381905550601354601254601154620004f69190620010c2565b620005029190620010c2565b6010819055507338bc42d66543b0b3d08d86e98fe045337a5c06d0600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073663a5c229c09b049e36dcc11a9b0d4a8eb9db214600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005c5896001620008fe60201b60201c565b620005d8306001620008fe60201b60201c565b620005ed61dead6001620008fe60201b60201c565b62000622600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620008fe60201b60201c565b62000657600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620008fe60201b60201c565b6200066a8960016200076060201b60201c565b6200067d3060016200076060201b60201c565b6200069261dead60016200076060201b60201c565b620006c7600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200076060201b60201c565b620006fc600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200076060201b60201c565b6200070e898262000a4b60201b60201c565b6200071f8962000bfa60201b60201c565b505050505050505050620013eb565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620007706200072e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000802576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007f99062001180565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6200090e6200072e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620009a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009979062001180565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000a3f9190620011bf565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000abe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ab5906200122c565b60405180910390fd5b62000ad26000838362000dcf60201b60201c565b62000aee8160025462000dd460201b620025be1790919060201c565b60028190555062000b4c816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000dd460201b620025be1790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000bee91906200125f565b60405180910390a35050565b62000c0a6200072e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000c9c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c939062001180565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141562000d0f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000d0690620012f2565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b505050565b600080828462000de59190620010c2565b90508381101562000e2d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000e249062001364565b60405180910390fd5b8091505092915050565b82805462000e4590620013b5565b90600052602060002090601f01602090048101928262000e69576000855562000eb5565b82601f1062000e8457805160ff191683800117855562000eb5565b8280016001018555821562000eb5579182015b8281111562000eb457825182559160200191906001019062000e97565b5b50905062000ec4919062000ec8565b5090565b5b8082111562000ee357600081600090555060010162000ec9565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000f198262000eec565b9050919050565b62000f2b8162000f0c565b811462000f3757600080fd5b50565b60008151905062000f4b8162000f20565b92915050565b60006020828403121562000f6a5762000f6962000ee7565b5b600062000f7a8482850162000f3a565b91505092915050565b62000f8e8162000f0c565b82525050565b600060408201905062000fab600083018562000f83565b62000fba602083018462000f83565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620010078262000fc1565b9150620010148362000fc1565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562001050576200104f62000fcb565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620010978262000fc1565b9150620010a48362000fc1565b925082620010b757620010b66200105b565b5b828204905092915050565b6000620010cf8262000fc1565b9150620010dc8362000fc1565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562001114576200111362000fcb565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620011686020836200111f565b9150620011758262001130565b602082019050919050565b600060208201905081810360008301526200119b8162001159565b9050919050565b60008115159050919050565b620011b981620011a2565b82525050565b6000602082019050620011d66000830184620011ae565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001214601f836200111f565b91506200122182620011dc565b602082019050919050565b60006020820190508181036000830152620012478162001205565b9050919050565b620012598162000fc1565b82525050565b60006020820190506200127660008301846200124e565b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000620012da6026836200111f565b9150620012e7826200127c565b604082019050919050565b600060208201905081810360008301526200130d81620012cb565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006200134c601b836200111f565b9150620013598262001314565b602082019050919050565b600060208201905081810360008301526200137f816200133d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620013ce57607f821691505b60208210811415620013e557620013e462001386565b5b50919050565b60805160a0516150c76200143b60003960008181610ff601526119d4015260008181610d21015281816138f5015281816139e501528181613a0c01528181613aa80152613acf01526150c76000f3fe6080604052600436106103035760003560e01c80638095d56411610190578063c0246668116100dc578063dd62ed3e11610095578063f11a24d31161006f578063f11a24d314610b7f578063f2fde38b14610baa578063f637434214610bd3578063f8b45b0514610bfe5761030a565b8063dd62ed3e14610aec578063e2f4560514610b29578063e71dc3f514610b545761030a565b8063c0246668146109de578063c17b5b8c14610a07578063c18bc19514610a30578063c8c8ebe414610a59578063d257b34f14610a84578063d85ba06314610ac15761030a565b80639a7a23d611610149578063a9059cbb11610123578063a9059cbb14610910578063aacebbe31461094d578063adb873bd14610976578063b62496f5146109a15761030a565b80639a7a23d614610881578063a2240e19146108aa578063a457c2d7146108d35761030a565b80638095d564146107855780638da5cb5b146107ae57806392136913146107d9578063924de9b71461080457806395d89b411461082d578063992c58e4146108585761030a565b8063395093511161024f5780636ddd171311610208578063751039fc116101e2578063751039fc146106ef5780637571336a1461070657806375f0a8741461072f5780637bce5a041461075a5761030a565b80636ddd17131461067057806370a082311461069b578063715018a6146106d85761030a565b8063395093511461056057806349bd5a5e1461059d5780634fbee193146105c85780636256d18114610605578063648ae08f1461062e5780636a486a8e146106455761030a565b80631a8145bb116102bc5780631f3fed8f116102965780631f3fed8f146104a257806323b872dd146104cd57806327c8f8351461050a578063313ce567146105355761030a565b80631a8145bb146104355780631cd58a02146104605780631d777856146104775761030a565b806303fc20131461030f57806306fdde031461033a578063095ea7b31461036557806310d5de53146103a25780631694505e146103df57806318160ddd1461040a5761030a565b3661030a57005b600080fd5b34801561031b57600080fd5b50610324610c29565b6040516103319190613c31565b60405180910390f35b34801561034657600080fd5b5061034f610c4f565b60405161035c9190613ce5565b60405180910390f35b34801561037157600080fd5b5061038c60048036038101906103879190613d6e565b610ce1565b6040516103999190613dc9565b60405180910390f35b3480156103ae57600080fd5b506103c960048036038101906103c49190613de4565b610cff565b6040516103d69190613dc9565b60405180910390f35b3480156103eb57600080fd5b506103f4610d1f565b6040516104019190613e70565b60405180910390f35b34801561041657600080fd5b5061041f610d43565b60405161042c9190613e9a565b60405180910390f35b34801561044157600080fd5b5061044a610d4d565b6040516104579190613e9a565b60405180910390f35b34801561046c57600080fd5b50610475610d53565b005b34801561048357600080fd5b5061048c610e4d565b6040516104999190613e9a565b60405180910390f35b3480156104ae57600080fd5b506104b7610e53565b6040516104c49190613e9a565b60405180910390f35b3480156104d957600080fd5b506104f460048036038101906104ef9190613eb5565b610e59565b6040516105019190613dc9565b60405180910390f35b34801561051657600080fd5b5061051f610f32565b60405161052c9190613c31565b60405180910390f35b34801561054157600080fd5b5061054a610f38565b6040516105579190613f24565b60405180910390f35b34801561056c57600080fd5b5061058760048036038101906105829190613d6e565b610f41565b6040516105949190613dc9565b60405180910390f35b3480156105a957600080fd5b506105b2610ff4565b6040516105bf9190613c31565b60405180910390f35b3480156105d457600080fd5b506105ef60048036038101906105ea9190613de4565b611018565b6040516105fc9190613dc9565b60405180910390f35b34801561061157600080fd5b5061062c60048036038101906106279190613f3f565b61106e565b005b34801561063a57600080fd5b5061064361119a565b005b34801561065157600080fd5b5061065a611256565b6040516106679190613e9a565b60405180910390f35b34801561067c57600080fd5b5061068561125c565b6040516106929190613dc9565b60405180910390f35b3480156106a757600080fd5b506106c260048036038101906106bd9190613de4565b61126f565b6040516106cf9190613e9a565b60405180910390f35b3480156106e457600080fd5b506106ed6112b7565b005b3480156106fb57600080fd5b5061070461140f565b005b34801561071257600080fd5b5061072d60048036038101906107289190613f98565b6114c4565b005b34801561073b57600080fd5b506107446115b6565b6040516107519190613c31565b60405180910390f35b34801561076657600080fd5b5061076f6115dc565b60405161077c9190613e9a565b60405180910390f35b34801561079157600080fd5b506107ac60048036038101906107a79190613fd8565b6115e2565b005b3480156107ba57600080fd5b506107c36116b6565b6040516107d09190613c31565b60405180910390f35b3480156107e557600080fd5b506107ee6116e0565b6040516107fb9190613e9a565b60405180910390f35b34801561081057600080fd5b5061082b6004803603810190610826919061402b565b6116e6565b005b34801561083957600080fd5b5061084261179a565b60405161084f9190613ce5565b60405180910390f35b34801561086457600080fd5b5061087f600480360381019061087a9190614058565b61182c565b005b34801561088d57600080fd5b506108a860048036038101906108a39190613f98565b61193b565b005b3480156108b657600080fd5b506108d160048036038101906108cc91906140e5565b611a6f565b005b3480156108df57600080fd5b506108fa60048036038101906108f59190613d6e565b611c2e565b6040516109079190613dc9565b60405180910390f35b34801561091c57600080fd5b5061093760048036038101906109329190613d6e565b611cfb565b6040516109449190613dc9565b60405180910390f35b34801561095957600080fd5b50610974600480360381019061096f9190613de4565b611d19565b005b34801561098257600080fd5b5061098b611e70565b6040516109989190613e9a565b60405180910390f35b3480156109ad57600080fd5b506109c860048036038101906109c39190613de4565b611e76565b6040516109d59190613dc9565b60405180910390f35b3480156109ea57600080fd5b50610a056004803603810190610a009190613f98565b611e96565b005b348015610a1357600080fd5b50610a2e6004803603810190610a299190613fd8565b611fd6565b005b348015610a3c57600080fd5b50610a576004803603810190610a529190613f3f565b6120aa565b005b348015610a6557600080fd5b50610a6e6121d6565b604051610a7b9190613e9a565b60405180910390f35b348015610a9057600080fd5b50610aab6004803603810190610aa69190613f3f565b6121dc565b604051610ab89190613dc9565b60405180910390f35b348015610acd57600080fd5b50610ad661234c565b604051610ae39190613e9a565b60405180910390f35b348015610af857600080fd5b50610b136004803603810190610b0e9190614125565b612352565b604051610b209190613e9a565b60405180910390f35b348015610b3557600080fd5b50610b3e6123d9565b604051610b4b9190613e9a565b60405180910390f35b348015610b6057600080fd5b50610b696123df565b604051610b769190613e9a565b60405180910390f35b348015610b8b57600080fd5b50610b946123e5565b604051610ba19190613e9a565b60405180910390f35b348015610bb657600080fd5b50610bd16004803603810190610bcc9190613de4565b6123eb565b005b348015610bdf57600080fd5b50610be86125b2565b604051610bf59190613e9a565b60405180910390f35b348015610c0a57600080fd5b50610c136125b8565b604051610c209190613e9a565b60405180910390f35b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060038054610c5e90614194565b80601f0160208091040260200160405190810160405280929190818152602001828054610c8a90614194565b8015610cd75780601f10610cac57610100808354040283529160200191610cd7565b820191906000526020600020905b815481529060010190602001808311610cba57829003601f168201915b5050505050905090565b6000610cf5610cee61261c565b8484612624565b6001905092915050565b60186020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b60155481565b610d5b61261c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610dea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de190614212565b60405180910390fd5b60286011819055506001600560156101000a81548160ff0219169083151502179055610e4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e429061427e565b60405180910390fd5b565b60165481565b60145481565b6000610e668484846127ef565b610f2784610e7261261c565b610f228560405180606001604052806028815260200161504560289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610ed861261c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131379092919063ffffffff16565b612624565b600190509392505050565b61dead81565b60006009905090565b6000610fea610f4e61261c565b84610fe58560016000610f5f61261c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125be90919063ffffffff16565b612624565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61107661261c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611105576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fc90614212565b60405180910390fd5b633b9aca0060646001611116610d43565b61112091906142cd565b61112a9190614356565b6111349190614356565b811015611176576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116d906143f9565b60405180910390fd5b633b9aca00808261118791906142cd565b6111919190614419565b60088190555050565b6111a261261c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611231576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122890614212565b60405180910390fd5b60636011819055506001600560156101000a81548160ff021916908315150217905550565b60105481565b600b60009054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112bf61261c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461134e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134590614212565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61141761261c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149d90614212565b60405180910390fd5b6114ae610d43565b6008819055506114bc610d43565b600a81905550565b6114cc61261c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461155b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155290614212565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d5481565b6115ea61261c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611679576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167090614212565b60405180910390fd5b82600d8190555081600e8190555080600f81905550600f54600e54600d546116a19190614419565b6116ab9190614419565b600c81905550505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60115481565b6116ee61261c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461177d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177490614212565b60405180910390fd5b80600b60006101000a81548160ff02191690831515021790555050565b6060600480546117a990614194565b80601f01602080910402602001604051908101604052809291908181526020018280546117d590614194565b80156118225780601f106117f757610100808354040283529160200191611822565b820191906000526020600020905b81548152906001019060200180831161180557829003601f168201915b5050505050905090565b61183461261c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ba90614212565b60405180910390fd5b85600d8190555084600e8190555083600f81905550600f54600e54600d546118eb9190614419565b6118f59190614419565b600c819055508260118190555081601281905550806013819055506013546012546011546119239190614419565b61192d9190614419565b601081905550505050505050565b61194361261c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c990614212565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a58906144e1565b60405180910390fd5b611a6b828261319b565b5050565b611a7761261c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611afd90614212565b60405180910390fd5b633b9aca0060646001611b17610d43565b611b2191906142cd565b611b2b9190614356565b611b359190614356565b821015611b77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6e906143f9565b60405180910390fd5b633b9aca0060646002611b88610d43565b611b9291906142cd565b611b9c9190614356565b611ba69190614356565b811015611be8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bdf90614573565b60405180910390fd5b633b9aca008083611bf991906142cd565b611c039190614419565b600881905550633b9aca008082611c1a91906142cd565b611c249190614419565b600a819055505050565b6000611cf1611c3b61261c565b84611cec8560405180606001604052806025815260200161506d6025913960016000611c6561261c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131379092919063ffffffff16565b612624565b6001905092915050565b6000611d0f611d0861261c565b84846127ef565b6001905092915050565b611d2161261c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611db0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da790614212565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60135481565b60196020528060005260406000206000915054906101000a900460ff1681565b611e9e61261c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2490614212565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611fca9190613dc9565b60405180910390a25050565b611fde61261c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461206d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206490614212565b60405180910390fd5b8260118190555081601281905550806013819055506013546012546011546120959190614419565b61209f9190614419565b601081905550505050565b6120b261261c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612141576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213890614212565b60405180910390fd5b633b9aca0060646002612152610d43565b61215c91906142cd565b6121669190614356565b6121709190614356565b8110156121b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a990614605565b60405180910390fd5b633b9aca0080826121c391906142cd565b6121cd9190614419565b600a8190555050565b60085481565b60006121e661261c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612275576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226c90614212565b60405180910390fd5b620186a06001612283610d43565b61228d91906142cd565b6122979190614356565b8210156122d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d090614697565b60405180910390fd5b6103e860056122e6610d43565b6122f091906142cd565b6122fa9190614356565b82111561233c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233390614729565b60405180910390fd5b8160098190555060019050919050565b600c5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b600f5481565b600e5481565b6123f361261c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612482576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247990614212565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156124f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e9906147bb565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60125481565b600a5481565b60008082846125cd9190614419565b905083811015612612576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260990614827565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612694576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268b906148b9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612704576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126fb9061494b565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516127e29190613e9a565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561285f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612856906149dd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c690614a6f565b60405180910390fd5b60008114156128e9576128e48383600061323c565b613132565b6128f16116b6565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561295f575061292f6116b6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129985750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129d2575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129eb5750600560149054906101000a900460ff16155b15612c2a57601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a935750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b3a57600854811115612add576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ad490614b01565b60405180910390fd5b600a54612ae98361126f565b82612af49190614419565b1115612b35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2c90614b6d565b60405180910390fd5b612c29565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612bdd5750601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c2857600854811115612c27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c1e90614bff565b60405180910390fd5b5b5b5b6000612c353061126f565b905060006009548210159050808015612c5a5750600b60009054906101000a900460ff165b8015612c735750600560149054906101000a900460ff16155b8015612cc95750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612d1f5750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612d755750601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612db9576001600560146101000a81548160ff021916908315150217905550612d9d6134d1565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612e6f5750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612e7957600090505b6000811561312257601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612edc57506000601054115b15612fa957612f096064612efb6010548861374290919063ffffffff16565b6137bd90919063ffffffff16565b905060105460125482612f1c91906142cd565b612f269190614356565b60156000828254612f379190614419565b9250508190555060105460115482612f4f91906142cd565b612f599190614356565b60146000828254612f6a9190614419565b9250508190555060105460135482612f8291906142cd565b612f8c9190614356565b60166000828254612f9d9190614419565b925050819055506130ce565b601960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561300457506000600c54115b156130cd576130316064613023600c548861374290919063ffffffff16565b6137bd90919063ffffffff16565b9050600c54600e548261304491906142cd565b61304e9190614356565b6015600082825461305f9190614419565b92505081905550600c54600d548261307791906142cd565b6130819190614356565b601460008282546130929190614419565b92505081905550600c54600f54826130aa91906142cd565b6130b49190614356565b601660008282546130c59190614419565b925050819055505b5b60008111156130f0576130ef8730601654846130ea9190614c1f565b61323c565b5b600060165411156131135761310a8761dead60165461323c565b60006016819055505b808561311f9190614c1f565b94505b61312d87878761323c565b505050505b505050565b600083831115829061317f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131769190613ce5565b60405180910390fd5b506000838561318e9190614c1f565b9050809150509392505050565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156132ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132a3906149dd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561331c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161331390614a6f565b60405180910390fd5b613327838383613807565b6133928160405180606001604052806026815260200161501f602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131379092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613425816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125be90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516134c49190613e9a565b60405180910390a3505050565b60006134dc3061126f565b905060006014546015546134f09190614419565b905060008214806135015750600081145b1561350d575050613740565b60006002826015548561352091906142cd565b61352a9190614356565b6135349190614356565b9050600061354b828561380c90919063ffffffff16565b9050600047905061355b82613856565b6000613570824761380c90919063ffffffff16565b9050600061359b8661358d6014548561374290919063ffffffff16565b6137bd90919063ffffffff16565b9050600081836135ab9190614c1f565b9050600060158190555060006014819055506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168360405161360590614c84565b60006040518083038185875af1925050503d8060008114613642576040519150601f19603f3d011682016040523d82523d6000602084013e613647565b606091505b5050905060008711801561365b5750600082115b156136a85761366a8783613aa2565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561868360155460405161369f93929190614c99565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516136ee90614c84565b60006040518083038185875af1925050503d806000811461372b576040519150601f19603f3d011682016040523d82523d6000602084013e613730565b606091505b5050809150505050505050505050505b565b60008083141561375557600090506137b7565b6000828461376391906142cd565b90508284826137729190614356565b146137b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137a990614d42565b60405180910390fd5b809150505b92915050565b60006137ff83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613b8d565b905092915050565b505050565b600061384e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613137565b905092915050565b6000600267ffffffffffffffff81111561387357613872614d62565b5b6040519080825280602002602001820160405280156138a15781602001602082028036833780820191505090505b50905030816000815181106138b9576138b8614d91565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561395957600080fd5b505afa15801561396d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139919190614dd5565b816001815181106139a5576139a4614d91565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613a0a307f000000000000000000000000000000000000000000000000000000000000000084612624565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613a6c959493929190614efb565b600060405180830381600087803b158015613a8657600080fd5b505af1158015613a9a573d6000803e3d6000fd5b505050505050565b613acd307f000000000000000000000000000000000000000000000000000000000000000084612624565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b8152600401613b3496959493929190614f55565b6060604051808303818588803b158015613b4d57600080fd5b505af1158015613b61573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613b869190614fcb565b5050505050565b60008083118290613bd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bcb9190613ce5565b60405180910390fd5b5060008385613be39190614356565b9050809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613c1b82613bf0565b9050919050565b613c2b81613c10565b82525050565b6000602082019050613c466000830184613c22565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613c86578082015181840152602081019050613c6b565b83811115613c95576000848401525b50505050565b6000601f19601f8301169050919050565b6000613cb782613c4c565b613cc18185613c57565b9350613cd1818560208601613c68565b613cda81613c9b565b840191505092915050565b60006020820190508181036000830152613cff8184613cac565b905092915050565b600080fd5b613d1581613c10565b8114613d2057600080fd5b50565b600081359050613d3281613d0c565b92915050565b6000819050919050565b613d4b81613d38565b8114613d5657600080fd5b50565b600081359050613d6881613d42565b92915050565b60008060408385031215613d8557613d84613d07565b5b6000613d9385828601613d23565b9250506020613da485828601613d59565b9150509250929050565b60008115159050919050565b613dc381613dae565b82525050565b6000602082019050613dde6000830184613dba565b92915050565b600060208284031215613dfa57613df9613d07565b5b6000613e0884828501613d23565b91505092915050565b6000819050919050565b6000613e36613e31613e2c84613bf0565b613e11565b613bf0565b9050919050565b6000613e4882613e1b565b9050919050565b6000613e5a82613e3d565b9050919050565b613e6a81613e4f565b82525050565b6000602082019050613e856000830184613e61565b92915050565b613e9481613d38565b82525050565b6000602082019050613eaf6000830184613e8b565b92915050565b600080600060608486031215613ece57613ecd613d07565b5b6000613edc86828701613d23565b9350506020613eed86828701613d23565b9250506040613efe86828701613d59565b9150509250925092565b600060ff82169050919050565b613f1e81613f08565b82525050565b6000602082019050613f396000830184613f15565b92915050565b600060208284031215613f5557613f54613d07565b5b6000613f6384828501613d59565b91505092915050565b613f7581613dae565b8114613f8057600080fd5b50565b600081359050613f9281613f6c565b92915050565b60008060408385031215613faf57613fae613d07565b5b6000613fbd85828601613d23565b9250506020613fce85828601613f83565b9150509250929050565b600080600060608486031215613ff157613ff0613d07565b5b6000613fff86828701613d59565b935050602061401086828701613d59565b925050604061402186828701613d59565b9150509250925092565b60006020828403121561404157614040613d07565b5b600061404f84828501613f83565b91505092915050565b60008060008060008060c0878903121561407557614074613d07565b5b600061408389828a01613d59565b965050602061409489828a01613d59565b95505060406140a589828a01613d59565b94505060606140b689828a01613d59565b93505060806140c789828a01613d59565b92505060a06140d889828a01613d59565b9150509295509295509295565b600080604083850312156140fc576140fb613d07565b5b600061410a85828601613d59565b925050602061411b85828601613d59565b9150509250929050565b6000806040838503121561413c5761413b613d07565b5b600061414a85828601613d23565b925050602061415b85828601613d23565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806141ac57607f821691505b602082108114156141c0576141bf614165565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006141fc602083613c57565b9150614207826141c6565b602082019050919050565b6000602082019050818103600083015261422b816141ef565b9050919050565b7f4d757374207368616b6520626f7473206265666f726520756e7368616b650000600082015250565b6000614268601e83613c57565b915061427382614232565b602082019050919050565b600060208201905081810360008301526142978161425b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006142d882613d38565b91506142e383613d38565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561431c5761431b61429e565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061436182613d38565b915061436c83613d38565b92508261437c5761437b614327565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20312500000000000000000000000000000000000000602082015250565b60006143e3602d83613c57565b91506143ee82614387565b604082019050919050565b60006020820190508181036000830152614412816143d6565b9050919050565b600061442482613d38565b915061442f83613d38565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156144645761446361429e565b5b828201905092915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006144cb603983613c57565b91506144d68261446f565b604082019050919050565b600060208201905081810360008301526144fa816144be565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f3225000000000000000000000000000000000000000000000000000000000000602082015250565b600061455d602283613c57565b915061456882614501565b604082019050919050565b6000602082019050818103600083015261458c81614550565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574416d6f756e74206c6f77657260008201527f207468616e203225000000000000000000000000000000000000000000000000602082015250565b60006145ef602883613c57565b91506145fa82614593565b604082019050919050565b6000602082019050818103600083015261461e816145e2565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614681603583613c57565b915061468c82614625565b604082019050919050565b600060208201905081810360008301526146b081614674565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614713603483613c57565b915061471e826146b7565b604082019050919050565b6000602082019050818103600083015261474281614706565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006147a5602683613c57565b91506147b082614749565b604082019050919050565b600060208201905081810360008301526147d481614798565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614811601b83613c57565b915061481c826147db565b602082019050919050565b6000602082019050818103600083015261484081614804565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006148a3602483613c57565b91506148ae82614847565b604082019050919050565b600060208201905081810360008301526148d281614896565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614935602283613c57565b9150614940826148d9565b604082019050919050565b6000602082019050818103600083015261496481614928565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006149c7602583613c57565b91506149d28261496b565b604082019050919050565b600060208201905081810360008301526149f6816149ba565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614a59602383613c57565b9150614a64826149fd565b604082019050919050565b60006020820190508181036000830152614a8881614a4c565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614aeb603583613c57565b9150614af682614a8f565b604082019050919050565b60006020820190508181036000830152614b1a81614ade565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614b57601383613c57565b9150614b6282614b21565b602082019050919050565b60006020820190508181036000830152614b8681614b4a565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614be9603683613c57565b9150614bf482614b8d565b604082019050919050565b60006020820190508181036000830152614c1881614bdc565b9050919050565b6000614c2a82613d38565b9150614c3583613d38565b925082821015614c4857614c4761429e565b5b828203905092915050565b600081905092915050565b50565b6000614c6e600083614c53565b9150614c7982614c5e565b600082019050919050565b6000614c8f82614c61565b9150819050919050565b6000606082019050614cae6000830186613e8b565b614cbb6020830185613e8b565b614cc86040830184613e8b565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614d2c602183613c57565b9150614d3782614cd0565b604082019050919050565b60006020820190508181036000830152614d5b81614d1f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614dcf81613d0c565b92915050565b600060208284031215614deb57614dea613d07565b5b6000614df984828501614dc0565b91505092915050565b6000819050919050565b6000614e27614e22614e1d84614e02565b613e11565b613d38565b9050919050565b614e3781614e0c565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614e7281613c10565b82525050565b6000614e848383614e69565b60208301905092915050565b6000602082019050919050565b6000614ea882614e3d565b614eb28185614e48565b9350614ebd83614e59565b8060005b83811015614eee578151614ed58882614e78565b9750614ee083614e90565b925050600181019050614ec1565b5085935050505092915050565b600060a082019050614f106000830188613e8b565b614f1d6020830187614e2e565b8181036040830152614f2f8186614e9d565b9050614f3e6060830185613c22565b614f4b6080830184613e8b565b9695505050505050565b600060c082019050614f6a6000830189613c22565b614f776020830188613e8b565b614f846040830187614e2e565b614f916060830186614e2e565b614f9e6080830185613c22565b614fab60a0830184613e8b565b979650505050505050565b600081519050614fc581613d42565b92915050565b600080600060608486031215614fe457614fe3613d07565b5b6000614ff286828701614fb6565b935050602061500386828701614fb6565b925050604061501486828701614fb6565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122029ff912bda811a03f2321c1ed25ea165e7b82773123bbe57eee096fe5b2c3eff64736f6c63430008090033

Deployed Bytecode

0x6080604052600436106103035760003560e01c80638095d56411610190578063c0246668116100dc578063dd62ed3e11610095578063f11a24d31161006f578063f11a24d314610b7f578063f2fde38b14610baa578063f637434214610bd3578063f8b45b0514610bfe5761030a565b8063dd62ed3e14610aec578063e2f4560514610b29578063e71dc3f514610b545761030a565b8063c0246668146109de578063c17b5b8c14610a07578063c18bc19514610a30578063c8c8ebe414610a59578063d257b34f14610a84578063d85ba06314610ac15761030a565b80639a7a23d611610149578063a9059cbb11610123578063a9059cbb14610910578063aacebbe31461094d578063adb873bd14610976578063b62496f5146109a15761030a565b80639a7a23d614610881578063a2240e19146108aa578063a457c2d7146108d35761030a565b80638095d564146107855780638da5cb5b146107ae57806392136913146107d9578063924de9b71461080457806395d89b411461082d578063992c58e4146108585761030a565b8063395093511161024f5780636ddd171311610208578063751039fc116101e2578063751039fc146106ef5780637571336a1461070657806375f0a8741461072f5780637bce5a041461075a5761030a565b80636ddd17131461067057806370a082311461069b578063715018a6146106d85761030a565b8063395093511461056057806349bd5a5e1461059d5780634fbee193146105c85780636256d18114610605578063648ae08f1461062e5780636a486a8e146106455761030a565b80631a8145bb116102bc5780631f3fed8f116102965780631f3fed8f146104a257806323b872dd146104cd57806327c8f8351461050a578063313ce567146105355761030a565b80631a8145bb146104355780631cd58a02146104605780631d777856146104775761030a565b806303fc20131461030f57806306fdde031461033a578063095ea7b31461036557806310d5de53146103a25780631694505e146103df57806318160ddd1461040a5761030a565b3661030a57005b600080fd5b34801561031b57600080fd5b50610324610c29565b6040516103319190613c31565b60405180910390f35b34801561034657600080fd5b5061034f610c4f565b60405161035c9190613ce5565b60405180910390f35b34801561037157600080fd5b5061038c60048036038101906103879190613d6e565b610ce1565b6040516103999190613dc9565b60405180910390f35b3480156103ae57600080fd5b506103c960048036038101906103c49190613de4565b610cff565b6040516103d69190613dc9565b60405180910390f35b3480156103eb57600080fd5b506103f4610d1f565b6040516104019190613e70565b60405180910390f35b34801561041657600080fd5b5061041f610d43565b60405161042c9190613e9a565b60405180910390f35b34801561044157600080fd5b5061044a610d4d565b6040516104579190613e9a565b60405180910390f35b34801561046c57600080fd5b50610475610d53565b005b34801561048357600080fd5b5061048c610e4d565b6040516104999190613e9a565b60405180910390f35b3480156104ae57600080fd5b506104b7610e53565b6040516104c49190613e9a565b60405180910390f35b3480156104d957600080fd5b506104f460048036038101906104ef9190613eb5565b610e59565b6040516105019190613dc9565b60405180910390f35b34801561051657600080fd5b5061051f610f32565b60405161052c9190613c31565b60405180910390f35b34801561054157600080fd5b5061054a610f38565b6040516105579190613f24565b60405180910390f35b34801561056c57600080fd5b5061058760048036038101906105829190613d6e565b610f41565b6040516105949190613dc9565b60405180910390f35b3480156105a957600080fd5b506105b2610ff4565b6040516105bf9190613c31565b60405180910390f35b3480156105d457600080fd5b506105ef60048036038101906105ea9190613de4565b611018565b6040516105fc9190613dc9565b60405180910390f35b34801561061157600080fd5b5061062c60048036038101906106279190613f3f565b61106e565b005b34801561063a57600080fd5b5061064361119a565b005b34801561065157600080fd5b5061065a611256565b6040516106679190613e9a565b60405180910390f35b34801561067c57600080fd5b5061068561125c565b6040516106929190613dc9565b60405180910390f35b3480156106a757600080fd5b506106c260048036038101906106bd9190613de4565b61126f565b6040516106cf9190613e9a565b60405180910390f35b3480156106e457600080fd5b506106ed6112b7565b005b3480156106fb57600080fd5b5061070461140f565b005b34801561071257600080fd5b5061072d60048036038101906107289190613f98565b6114c4565b005b34801561073b57600080fd5b506107446115b6565b6040516107519190613c31565b60405180910390f35b34801561076657600080fd5b5061076f6115dc565b60405161077c9190613e9a565b60405180910390f35b34801561079157600080fd5b506107ac60048036038101906107a79190613fd8565b6115e2565b005b3480156107ba57600080fd5b506107c36116b6565b6040516107d09190613c31565b60405180910390f35b3480156107e557600080fd5b506107ee6116e0565b6040516107fb9190613e9a565b60405180910390f35b34801561081057600080fd5b5061082b6004803603810190610826919061402b565b6116e6565b005b34801561083957600080fd5b5061084261179a565b60405161084f9190613ce5565b60405180910390f35b34801561086457600080fd5b5061087f600480360381019061087a9190614058565b61182c565b005b34801561088d57600080fd5b506108a860048036038101906108a39190613f98565b61193b565b005b3480156108b657600080fd5b506108d160048036038101906108cc91906140e5565b611a6f565b005b3480156108df57600080fd5b506108fa60048036038101906108f59190613d6e565b611c2e565b6040516109079190613dc9565b60405180910390f35b34801561091c57600080fd5b5061093760048036038101906109329190613d6e565b611cfb565b6040516109449190613dc9565b60405180910390f35b34801561095957600080fd5b50610974600480360381019061096f9190613de4565b611d19565b005b34801561098257600080fd5b5061098b611e70565b6040516109989190613e9a565b60405180910390f35b3480156109ad57600080fd5b506109c860048036038101906109c39190613de4565b611e76565b6040516109d59190613dc9565b60405180910390f35b3480156109ea57600080fd5b50610a056004803603810190610a009190613f98565b611e96565b005b348015610a1357600080fd5b50610a2e6004803603810190610a299190613fd8565b611fd6565b005b348015610a3c57600080fd5b50610a576004803603810190610a529190613f3f565b6120aa565b005b348015610a6557600080fd5b50610a6e6121d6565b604051610a7b9190613e9a565b60405180910390f35b348015610a9057600080fd5b50610aab6004803603810190610aa69190613f3f565b6121dc565b604051610ab89190613dc9565b60405180910390f35b348015610acd57600080fd5b50610ad661234c565b604051610ae39190613e9a565b60405180910390f35b348015610af857600080fd5b50610b136004803603810190610b0e9190614125565b612352565b604051610b209190613e9a565b60405180910390f35b348015610b3557600080fd5b50610b3e6123d9565b604051610b4b9190613e9a565b60405180910390f35b348015610b6057600080fd5b50610b696123df565b604051610b769190613e9a565b60405180910390f35b348015610b8b57600080fd5b50610b946123e5565b604051610ba19190613e9a565b60405180910390f35b348015610bb657600080fd5b50610bd16004803603810190610bcc9190613de4565b6123eb565b005b348015610bdf57600080fd5b50610be86125b2565b604051610bf59190613e9a565b60405180910390f35b348015610c0a57600080fd5b50610c136125b8565b604051610c209190613e9a565b60405180910390f35b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060038054610c5e90614194565b80601f0160208091040260200160405190810160405280929190818152602001828054610c8a90614194565b8015610cd75780601f10610cac57610100808354040283529160200191610cd7565b820191906000526020600020905b815481529060010190602001808311610cba57829003601f168201915b5050505050905090565b6000610cf5610cee61261c565b8484612624565b6001905092915050565b60186020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b60155481565b610d5b61261c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610dea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de190614212565b60405180910390fd5b60286011819055506001600560156101000a81548160ff0219169083151502179055610e4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e429061427e565b60405180910390fd5b565b60165481565b60145481565b6000610e668484846127ef565b610f2784610e7261261c565b610f228560405180606001604052806028815260200161504560289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610ed861261c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131379092919063ffffffff16565b612624565b600190509392505050565b61dead81565b60006009905090565b6000610fea610f4e61261c565b84610fe58560016000610f5f61261c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125be90919063ffffffff16565b612624565b6001905092915050565b7f0000000000000000000000005580aadce8637adbcf6cdcc9f3732fa696456b2481565b6000601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61107661261c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611105576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fc90614212565b60405180910390fd5b633b9aca0060646001611116610d43565b61112091906142cd565b61112a9190614356565b6111349190614356565b811015611176576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116d906143f9565b60405180910390fd5b633b9aca00808261118791906142cd565b6111919190614419565b60088190555050565b6111a261261c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611231576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122890614212565b60405180910390fd5b60636011819055506001600560156101000a81548160ff021916908315150217905550565b60105481565b600b60009054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112bf61261c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461134e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134590614212565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61141761261c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149d90614212565b60405180910390fd5b6114ae610d43565b6008819055506114bc610d43565b600a81905550565b6114cc61261c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461155b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155290614212565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d5481565b6115ea61261c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611679576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167090614212565b60405180910390fd5b82600d8190555081600e8190555080600f81905550600f54600e54600d546116a19190614419565b6116ab9190614419565b600c81905550505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60115481565b6116ee61261c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461177d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177490614212565b60405180910390fd5b80600b60006101000a81548160ff02191690831515021790555050565b6060600480546117a990614194565b80601f01602080910402602001604051908101604052809291908181526020018280546117d590614194565b80156118225780601f106117f757610100808354040283529160200191611822565b820191906000526020600020905b81548152906001019060200180831161180557829003601f168201915b5050505050905090565b61183461261c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ba90614212565b60405180910390fd5b85600d8190555084600e8190555083600f81905550600f54600e54600d546118eb9190614419565b6118f59190614419565b600c819055508260118190555081601281905550806013819055506013546012546011546119239190614419565b61192d9190614419565b601081905550505050505050565b61194361261c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c990614212565b60405180910390fd5b7f0000000000000000000000005580aadce8637adbcf6cdcc9f3732fa696456b2473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a58906144e1565b60405180910390fd5b611a6b828261319b565b5050565b611a7761261c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611afd90614212565b60405180910390fd5b633b9aca0060646001611b17610d43565b611b2191906142cd565b611b2b9190614356565b611b359190614356565b821015611b77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6e906143f9565b60405180910390fd5b633b9aca0060646002611b88610d43565b611b9291906142cd565b611b9c9190614356565b611ba69190614356565b811015611be8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bdf90614573565b60405180910390fd5b633b9aca008083611bf991906142cd565b611c039190614419565b600881905550633b9aca008082611c1a91906142cd565b611c249190614419565b600a819055505050565b6000611cf1611c3b61261c565b84611cec8560405180606001604052806025815260200161506d6025913960016000611c6561261c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131379092919063ffffffff16565b612624565b6001905092915050565b6000611d0f611d0861261c565b84846127ef565b6001905092915050565b611d2161261c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611db0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da790614212565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60135481565b60196020528060005260406000206000915054906101000a900460ff1681565b611e9e61261c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2490614212565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611fca9190613dc9565b60405180910390a25050565b611fde61261c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461206d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206490614212565b60405180910390fd5b8260118190555081601281905550806013819055506013546012546011546120959190614419565b61209f9190614419565b601081905550505050565b6120b261261c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612141576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213890614212565b60405180910390fd5b633b9aca0060646002612152610d43565b61215c91906142cd565b6121669190614356565b6121709190614356565b8110156121b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a990614605565b60405180910390fd5b633b9aca0080826121c391906142cd565b6121cd9190614419565b600a8190555050565b60085481565b60006121e661261c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612275576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226c90614212565b60405180910390fd5b620186a06001612283610d43565b61228d91906142cd565b6122979190614356565b8210156122d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d090614697565b60405180910390fd5b6103e860056122e6610d43565b6122f091906142cd565b6122fa9190614356565b82111561233c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233390614729565b60405180910390fd5b8160098190555060019050919050565b600c5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b600f5481565b600e5481565b6123f361261c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612482576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247990614212565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156124f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e9906147bb565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60125481565b600a5481565b60008082846125cd9190614419565b905083811015612612576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260990614827565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612694576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268b906148b9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612704576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126fb9061494b565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516127e29190613e9a565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561285f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612856906149dd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c690614a6f565b60405180910390fd5b60008114156128e9576128e48383600061323c565b613132565b6128f16116b6565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561295f575061292f6116b6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129985750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129d2575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129eb5750600560149054906101000a900460ff16155b15612c2a57601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a935750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b3a57600854811115612add576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ad490614b01565b60405180910390fd5b600a54612ae98361126f565b82612af49190614419565b1115612b35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2c90614b6d565b60405180910390fd5b612c29565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612bdd5750601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c2857600854811115612c27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c1e90614bff565b60405180910390fd5b5b5b5b6000612c353061126f565b905060006009548210159050808015612c5a5750600b60009054906101000a900460ff165b8015612c735750600560149054906101000a900460ff16155b8015612cc95750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612d1f5750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612d755750601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612db9576001600560146101000a81548160ff021916908315150217905550612d9d6134d1565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612e6f5750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612e7957600090505b6000811561312257601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612edc57506000601054115b15612fa957612f096064612efb6010548861374290919063ffffffff16565b6137bd90919063ffffffff16565b905060105460125482612f1c91906142cd565b612f269190614356565b60156000828254612f379190614419565b9250508190555060105460115482612f4f91906142cd565b612f599190614356565b60146000828254612f6a9190614419565b9250508190555060105460135482612f8291906142cd565b612f8c9190614356565b60166000828254612f9d9190614419565b925050819055506130ce565b601960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561300457506000600c54115b156130cd576130316064613023600c548861374290919063ffffffff16565b6137bd90919063ffffffff16565b9050600c54600e548261304491906142cd565b61304e9190614356565b6015600082825461305f9190614419565b92505081905550600c54600d548261307791906142cd565b6130819190614356565b601460008282546130929190614419565b92505081905550600c54600f54826130aa91906142cd565b6130b49190614356565b601660008282546130c59190614419565b925050819055505b5b60008111156130f0576130ef8730601654846130ea9190614c1f565b61323c565b5b600060165411156131135761310a8761dead60165461323c565b60006016819055505b808561311f9190614c1f565b94505b61312d87878761323c565b505050505b505050565b600083831115829061317f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131769190613ce5565b60405180910390fd5b506000838561318e9190614c1f565b9050809150509392505050565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156132ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132a3906149dd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561331c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161331390614a6f565b60405180910390fd5b613327838383613807565b6133928160405180606001604052806026815260200161501f602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131379092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613425816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125be90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516134c49190613e9a565b60405180910390a3505050565b60006134dc3061126f565b905060006014546015546134f09190614419565b905060008214806135015750600081145b1561350d575050613740565b60006002826015548561352091906142cd565b61352a9190614356565b6135349190614356565b9050600061354b828561380c90919063ffffffff16565b9050600047905061355b82613856565b6000613570824761380c90919063ffffffff16565b9050600061359b8661358d6014548561374290919063ffffffff16565b6137bd90919063ffffffff16565b9050600081836135ab9190614c1f565b9050600060158190555060006014819055506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168360405161360590614c84565b60006040518083038185875af1925050503d8060008114613642576040519150601f19603f3d011682016040523d82523d6000602084013e613647565b606091505b5050905060008711801561365b5750600082115b156136a85761366a8783613aa2565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561868360155460405161369f93929190614c99565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516136ee90614c84565b60006040518083038185875af1925050503d806000811461372b576040519150601f19603f3d011682016040523d82523d6000602084013e613730565b606091505b5050809150505050505050505050505b565b60008083141561375557600090506137b7565b6000828461376391906142cd565b90508284826137729190614356565b146137b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137a990614d42565b60405180910390fd5b809150505b92915050565b60006137ff83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613b8d565b905092915050565b505050565b600061384e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613137565b905092915050565b6000600267ffffffffffffffff81111561387357613872614d62565b5b6040519080825280602002602001820160405280156138a15781602001602082028036833780820191505090505b50905030816000815181106138b9576138b8614d91565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561395957600080fd5b505afa15801561396d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139919190614dd5565b816001815181106139a5576139a4614d91565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613a0a307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612624565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613a6c959493929190614efb565b600060405180830381600087803b158015613a8657600080fd5b505af1158015613a9a573d6000803e3d6000fd5b505050505050565b613acd307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612624565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b8152600401613b3496959493929190614f55565b6060604051808303818588803b158015613b4d57600080fd5b505af1158015613b61573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613b869190614fcb565b5050505050565b60008083118290613bd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bcb9190613ce5565b60405180910390fd5b5060008385613be39190614356565b9050809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613c1b82613bf0565b9050919050565b613c2b81613c10565b82525050565b6000602082019050613c466000830184613c22565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613c86578082015181840152602081019050613c6b565b83811115613c95576000848401525b50505050565b6000601f19601f8301169050919050565b6000613cb782613c4c565b613cc18185613c57565b9350613cd1818560208601613c68565b613cda81613c9b565b840191505092915050565b60006020820190508181036000830152613cff8184613cac565b905092915050565b600080fd5b613d1581613c10565b8114613d2057600080fd5b50565b600081359050613d3281613d0c565b92915050565b6000819050919050565b613d4b81613d38565b8114613d5657600080fd5b50565b600081359050613d6881613d42565b92915050565b60008060408385031215613d8557613d84613d07565b5b6000613d9385828601613d23565b9250506020613da485828601613d59565b9150509250929050565b60008115159050919050565b613dc381613dae565b82525050565b6000602082019050613dde6000830184613dba565b92915050565b600060208284031215613dfa57613df9613d07565b5b6000613e0884828501613d23565b91505092915050565b6000819050919050565b6000613e36613e31613e2c84613bf0565b613e11565b613bf0565b9050919050565b6000613e4882613e1b565b9050919050565b6000613e5a82613e3d565b9050919050565b613e6a81613e4f565b82525050565b6000602082019050613e856000830184613e61565b92915050565b613e9481613d38565b82525050565b6000602082019050613eaf6000830184613e8b565b92915050565b600080600060608486031215613ece57613ecd613d07565b5b6000613edc86828701613d23565b9350506020613eed86828701613d23565b9250506040613efe86828701613d59565b9150509250925092565b600060ff82169050919050565b613f1e81613f08565b82525050565b6000602082019050613f396000830184613f15565b92915050565b600060208284031215613f5557613f54613d07565b5b6000613f6384828501613d59565b91505092915050565b613f7581613dae565b8114613f8057600080fd5b50565b600081359050613f9281613f6c565b92915050565b60008060408385031215613faf57613fae613d07565b5b6000613fbd85828601613d23565b9250506020613fce85828601613f83565b9150509250929050565b600080600060608486031215613ff157613ff0613d07565b5b6000613fff86828701613d59565b935050602061401086828701613d59565b925050604061402186828701613d59565b9150509250925092565b60006020828403121561404157614040613d07565b5b600061404f84828501613f83565b91505092915050565b60008060008060008060c0878903121561407557614074613d07565b5b600061408389828a01613d59565b965050602061409489828a01613d59565b95505060406140a589828a01613d59565b94505060606140b689828a01613d59565b93505060806140c789828a01613d59565b92505060a06140d889828a01613d59565b9150509295509295509295565b600080604083850312156140fc576140fb613d07565b5b600061410a85828601613d59565b925050602061411b85828601613d59565b9150509250929050565b6000806040838503121561413c5761413b613d07565b5b600061414a85828601613d23565b925050602061415b85828601613d23565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806141ac57607f821691505b602082108114156141c0576141bf614165565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006141fc602083613c57565b9150614207826141c6565b602082019050919050565b6000602082019050818103600083015261422b816141ef565b9050919050565b7f4d757374207368616b6520626f7473206265666f726520756e7368616b650000600082015250565b6000614268601e83613c57565b915061427382614232565b602082019050919050565b600060208201905081810360008301526142978161425b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006142d882613d38565b91506142e383613d38565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561431c5761431b61429e565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061436182613d38565b915061436c83613d38565b92508261437c5761437b614327565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20312500000000000000000000000000000000000000602082015250565b60006143e3602d83613c57565b91506143ee82614387565b604082019050919050565b60006020820190508181036000830152614412816143d6565b9050919050565b600061442482613d38565b915061442f83613d38565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156144645761446361429e565b5b828201905092915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006144cb603983613c57565b91506144d68261446f565b604082019050919050565b600060208201905081810360008301526144fa816144be565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f3225000000000000000000000000000000000000000000000000000000000000602082015250565b600061455d602283613c57565b915061456882614501565b604082019050919050565b6000602082019050818103600083015261458c81614550565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574416d6f756e74206c6f77657260008201527f207468616e203225000000000000000000000000000000000000000000000000602082015250565b60006145ef602883613c57565b91506145fa82614593565b604082019050919050565b6000602082019050818103600083015261461e816145e2565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614681603583613c57565b915061468c82614625565b604082019050919050565b600060208201905081810360008301526146b081614674565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614713603483613c57565b915061471e826146b7565b604082019050919050565b6000602082019050818103600083015261474281614706565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006147a5602683613c57565b91506147b082614749565b604082019050919050565b600060208201905081810360008301526147d481614798565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614811601b83613c57565b915061481c826147db565b602082019050919050565b6000602082019050818103600083015261484081614804565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006148a3602483613c57565b91506148ae82614847565b604082019050919050565b600060208201905081810360008301526148d281614896565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614935602283613c57565b9150614940826148d9565b604082019050919050565b6000602082019050818103600083015261496481614928565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006149c7602583613c57565b91506149d28261496b565b604082019050919050565b600060208201905081810360008301526149f6816149ba565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614a59602383613c57565b9150614a64826149fd565b604082019050919050565b60006020820190508181036000830152614a8881614a4c565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614aeb603583613c57565b9150614af682614a8f565b604082019050919050565b60006020820190508181036000830152614b1a81614ade565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614b57601383613c57565b9150614b6282614b21565b602082019050919050565b60006020820190508181036000830152614b8681614b4a565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614be9603683613c57565b9150614bf482614b8d565b604082019050919050565b60006020820190508181036000830152614c1881614bdc565b9050919050565b6000614c2a82613d38565b9150614c3583613d38565b925082821015614c4857614c4761429e565b5b828203905092915050565b600081905092915050565b50565b6000614c6e600083614c53565b9150614c7982614c5e565b600082019050919050565b6000614c8f82614c61565b9150819050919050565b6000606082019050614cae6000830186613e8b565b614cbb6020830185613e8b565b614cc86040830184613e8b565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614d2c602183613c57565b9150614d3782614cd0565b604082019050919050565b60006020820190508181036000830152614d5b81614d1f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614dcf81613d0c565b92915050565b600060208284031215614deb57614dea613d07565b5b6000614df984828501614dc0565b91505092915050565b6000819050919050565b6000614e27614e22614e1d84614e02565b613e11565b613d38565b9050919050565b614e3781614e0c565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614e7281613c10565b82525050565b6000614e848383614e69565b60208301905092915050565b6000602082019050919050565b6000614ea882614e3d565b614eb28185614e48565b9350614ebd83614e59565b8060005b83811015614eee578151614ed58882614e78565b9750614ee083614e90565b925050600181019050614ec1565b5085935050505092915050565b600060a082019050614f106000830188613e8b565b614f1d6020830187614e2e565b8181036040830152614f2f8186614e9d565b9050614f3e6060830185613c22565b614f4b6080830184613e8b565b9695505050505050565b600060c082019050614f6a6000830189613c22565b614f776020830188613e8b565b614f846040830187614e2e565b614f916060830186614e2e565b614f9e6080830185613c22565b614fab60a0830184613e8b565b979650505050505050565b600081519050614fc581613d42565b92915050565b600080600060608486031215614fe457614fe3613d07565b5b6000614ff286828701614fb6565b935050602061500386828701614fb6565b925050604061501486828701614fb6565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122029ff912bda811a03f2321c1ed25ea165e7b82773123bbe57eee096fe5b2c3eff64736f6c63430008090033

Deployed Bytecode Sourcemap

17432:13673:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17769:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4924:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5839:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18434:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17505:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5244:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18295:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24798:154;;;;;;;;;;;;;:::i;:::-;;18337:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18255:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6016:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17610:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5144:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6379:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17565:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25812:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22086:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24681:109;;;;;;;;;;;;;:::i;:::-;;18105:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17920:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5360:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10798:148;;;;;;;;;;;;;:::i;:::-;;23032:134;;;;;;;;;;;;;:::i;:::-;;23178:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17732:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17993;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24053:302;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10584:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18140:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23330:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5032:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23439:608;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25150:242;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22571:453;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6605:271;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5495:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25596:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18216:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18507:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24960:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24363:310;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22337:226;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17805:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21684:390;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17959:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5678:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17847:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18067:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18030:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10952:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18178:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17887:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17769:23;;;;;;;;;;;;;:::o;4924:100::-;4978:13;5011:5;5004:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4924:100;:::o;5839:169::-;5922:4;5939:39;5948:12;:10;:12::i;:::-;5962:7;5971:6;5939:8;:39::i;:::-;5996:4;5989:11;;5839:169;;;;:::o;18434:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;17505:51::-;;;:::o;5244:108::-;5305:7;5332:12;;5325:19;;5244:108;:::o;18295:33::-;;;;:::o;24798:154::-;10721:12;:10;:12::i;:::-;10711:22;;:6;;;;;;;;;;;:22;;;10703:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24871:2:::1;24852:16;:21;;;;24905:4;24892:10;;:17;;;;;;;;;;;;;;;;;24884:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;24798:154::o:0;18337:28::-;;;;:::o;18255:33::-;;;;:::o;6016:355::-;6156:4;6173:36;6183:6;6191:9;6202:6;6173:9;:36::i;:::-;6220:121;6229:6;6237:12;:10;:12::i;:::-;6251:89;6289:6;6251:89;;;;;;;;;;;;;;;;;:11;:19;6263:6;6251:19;;;;;;;;;;;;;;;:33;6271:12;:10;:12::i;:::-;6251:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;6220:8;:121::i;:::-;6359:4;6352:11;;6016:355;;;;;:::o;17610:53::-;17656:6;17610:53;:::o;5144:92::-;5202:5;5227:1;5220:8;;5144:92;:::o;6379:218::-;6467:4;6484:83;6493:12;:10;:12::i;:::-;6507:7;6516:50;6555:10;6516:11;:25;6528:12;:10;:12::i;:::-;6516:25;;;;;;;;;;;;;;;:34;6542:7;6516:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;6484:8;:83::i;:::-;6585:4;6578:11;;6379:218;;;;:::o;17565:38::-;;;:::o;25812:125::-;25877:4;25901:19;:28;25921:7;25901:28;;;;;;;;;;;;;;;;;;;;;;;;;25894:35;;25812:125;;;:::o;22086:239::-;10721:12;:10;:12::i;:::-;10711:22;;:6;;;;;;;;;;;:22;;;10703:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22203:3:::1;22198;22194:1;22178:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:23;;;;:::i;:::-;22177:29;;;;:::i;:::-;22167:6;:39;;22159:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;22308:7;22300:3:::0;22291:6:::1;:12;;;;:::i;:::-;22290:26;;;;:::i;:::-;22267:20;:49;;;;22086:239:::0;:::o;24681:109::-;10721:12;:10;:12::i;:::-;10711:22;;:6;;;;;;;;;;;:22;;;10703:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24752:2:::1;24733:16;:21;;;;24778:4;24765:10;;:17;;;;;;;;;;;;;;;;;;24681:109::o:0;18105:28::-;;;;:::o;17920:30::-;;;;;;;;;;;;;:::o;5360:127::-;5434:7;5461:9;:18;5471:7;5461:18;;;;;;;;;;;;;;;;5454:25;;5360:127;;;:::o;10798:148::-;10721:12;:10;:12::i;:::-;10711:22;;:6;;;;;;;;;;;:22;;;10703:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;10905:1:::1;10868:40;;10889:6;;;;;;;;;;;10868:40;;;;;;;;;;;;10936:1;10919:6;;:19;;;;;;;;;;;;;;;;;;10798:148::o:0;23032:134::-;10721:12;:10;:12::i;:::-;10711:22;;:6;;;;;;;;;;;:22;;;10703:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23109:13:::1;:11;:13::i;:::-;23086:20;:36;;;;23145:13;:11;:13::i;:::-;23133:9;:25;;;;23032:134::o:0;23178:144::-;10721:12;:10;:12::i;:::-;10711:22;;:6;;;;;;;;;;;:22;;;10703:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23310:4:::1;23268:31;:39;23300:6;23268:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;23178:144:::0;;:::o;17732:30::-;;;;;;;;;;;;;:::o;17993:::-;;;;:::o;24053:302::-;10721:12;:10;:12::i;:::-;10711:22;;:6;;;;;;;;;;;:22;;;10703:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24188:13:::1;24170:15;:31;;;;24230:13;24212:15;:31;;;;24267:8;24254:10;:21;;;;24337:10;;24319:15;;24301;;:33;;;;:::i;:::-;:46;;;;:::i;:::-;24286:12;:61;;;;24053:302:::0;;;:::o;10584:79::-;10622:7;10649:6;;;;;;;;;;;10642:13;;10584:79;:::o;18140:31::-;;;;:::o;23330:101::-;10721:12;:10;:12::i;:::-;10711:22;;:6;;;;;;;;;;;:22;;;10703:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23416:7:::1;23402:11;;:21;;;;;;;;;;;;;;;;;;23330:101:::0;:::o;5032:104::-;5088:13;5121:7;5114:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5032:104;:::o;23439:608::-;10721:12;:10;:12::i;:::-;10711:22;;:6;;;;;;;;;;;:22;;;10703:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23662:16:::1;23644:15;:34;;;;23707:16;23689:15;:34;;;;23747:11;23734:10;:24;;;;23820:10;;23802:15;;23784;;:33;;;;:::i;:::-;:46;;;;:::i;:::-;23769:12;:61;;;;23860:17;23841:16;:36;;;;23909:17;23890:16;:36;;;;23951:12;23937:11;:26;;;;24028:11;;24009:16;;23990;;:35;;;;:::i;:::-;:49;;;;:::i;:::-;23974:13;:65;;;;23439:608:::0;;;;;;:::o;25150:242::-;10721:12;:10;:12::i;:::-;10711:22;;:6;;;;;;;;;;;:22;;;10703:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25257:13:::1;25249:21;;:4;:21;;;;25241:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;25343:41;25372:4;25378:5;25343:28;:41::i;:::-;25150:242:::0;;:::o;22571:453::-;10721:12;:10;:12::i;:::-;10711:22;;:6;;;;;;;;;;;:22;;;10703:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22733:3:::1;22728;22724:1;22708:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:23;;;;:::i;:::-;22707:29;;;;:::i;:::-;22682:21;:54;;22674:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;22845:3;22840;22836:1;22820:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:23;;;;:::i;:::-;22819:29;;;;:::i;:::-;22805:10;:43;;22797:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;22954:7;22946:3:::0;22922:21:::1;:27;;;;:::i;:::-;22921:41;;;;:::i;:::-;22898:20;:64;;;;23008:7;23000:3:::0;22987:10:::1;:16;;;;:::i;:::-;22986:30;;;;:::i;:::-;22974:9;:42;;;;22571:453:::0;;:::o;6605:271::-;6698:4;6715:129;6724:12;:10;:12::i;:::-;6738:7;6747:96;6786:15;6747:96;;;;;;;;;;;;;;;;;:11;:25;6759:12;:10;:12::i;:::-;6747:25;;;;;;;;;;;;;;;:34;6773:7;6747:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;6715:8;:129::i;:::-;6862:4;6855:11;;6605:271;;;;:::o;5495:175::-;5581:4;5598:42;5608:12;:10;:12::i;:::-;5622:9;5633:6;5598:9;:42::i;:::-;5658:4;5651:11;;5495:175;;;;:::o;25596:208::-;10721:12;:10;:12::i;:::-;10711:22;;:6;;;;;;;;;;;:22;;;10703:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25733:15:::1;;;;;;;;;;;25690:59;;25713:18;25690:59;;;;;;;;;;;;25778:18;25760:15;;:36;;;;;;;;;;;;;;;;;;25596:208:::0;:::o;18216:26::-;;;;:::o;18507:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;24960:182::-;10721:12;:10;:12::i;:::-;10711:22;;:6;;;;;;;;;;;:22;;;10703:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25076:8:::1;25045:19;:28;25065:7;25045:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;25116:7;25100:34;;;25125:8;25100:34;;;;;;:::i;:::-;;;;;;;;24960:182:::0;;:::o;24363:310::-;10721:12;:10;:12::i;:::-;10711:22;;:6;;;;;;;;;;;:22;;;10703:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24500:13:::1;24481:16;:32;;;;24543:13;24524:16;:32;;;;24581:8;24567:11;:22;;;;24654:11;;24635:16;;24616;;:35;;;;:::i;:::-;:49;;;;:::i;:::-;24600:13;:65;;;;24363:310:::0;;;:::o;22337:226::-;10721:12;:10;:12::i;:::-;10711:22;;:6;;;;;;;;;;;:22;;;10703:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22458:3:::1;22453;22449:1;22433:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:23;;;;:::i;:::-;22432:29;;;;:::i;:::-;22422:6;:39;;22414:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;22547:7;22539:3:::0;22530:6:::1;:12;;;;:::i;:::-;22529:26;;;;:::i;:::-;22517:9;:38;;;;22337:226:::0;:::o;17805:35::-;;;;:::o;21684:390::-;21765:4;10721:12;:10;:12::i;:::-;10711:22;;:6;;;;;;;;;;;:22;;;10703:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21821:6:::1;21817:1;21801:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;21788:9;:39;;21780:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;21936:4;21932:1;21916:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;21903:9;:37;;21895:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;22028:9;22007:18;:30;;;;22056:4;22049:11;;21684:390:::0;;;:::o;17959:27::-;;;;:::o;5678:151::-;5767:7;5794:11;:18;5806:5;5794:18;;;;;;;;;;;;;;;:27;5813:7;5794:27;;;;;;;;;;;;;;;;5787:34;;5678:151;;;;:::o;17847:33::-;;;;:::o;18067:25::-;;;;:::o;18030:30::-;;;;:::o;10952:244::-;10721:12;:10;:12::i;:::-;10711:22;;:6;;;;;;;;;;;:22;;;10703:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;11061:1:::1;11041:22;;:8;:22;;;;11033:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;11151:8;11122:38;;11143:6;;;;;;;;;;;11122:38;;;;;;;;;;;;11180:8;11171:6;;:17;;;;;;;;;;;;;;;;;;10952:244:::0;:::o;18178:31::-;;;;:::o;17887:24::-;;;;:::o;8824:181::-;8882:7;8902:9;8918:1;8914;:5;;;;:::i;:::-;8902:17;;8943:1;8938;:6;;8930:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;8996:1;8989:8;;;8824:181;;;;:::o;218:98::-;271:7;298:10;291:17;;218:98;:::o;8272:380::-;8425:1;8408:19;;:5;:19;;;;8400:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8506:1;8487:21;;:7;:21;;;;8479:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8590:6;8560:11;:18;8572:5;8560:18;;;;;;;;;;;;;;;:27;8579:7;8560:27;;;;;;;;;;;;;;;:36;;;;8628:7;8612:32;;8621:5;8612:32;;;8637:6;8612:32;;;;;;:::i;:::-;;;;;;;;8272:380;;;:::o;25945:3048::-;26093:1;26077:18;;:4;:18;;;;26069:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26170:1;26156:16;;:2;:16;;;;26148:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;26247:1;26237:6;:11;26234:92;;;26265:28;26281:4;26287:2;26291:1;26265:15;:28::i;:::-;26308:7;;26234:92;26370:7;:5;:7::i;:::-;26362:15;;:4;:15;;;;:49;;;;;26404:7;:5;:7::i;:::-;26398:13;;:2;:13;;;;26362:49;:86;;;;;26446:1;26432:16;;:2;:16;;;;26362:86;:128;;;;;26483:6;26469:21;;:2;:21;;;;26362:128;:158;;;;;26512:8;;;;;;;;;;;26511:9;26362:158;26340:866;;;26586:25;:31;26612:4;26586:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;26622:31;:35;26654:2;26622:35;;;;;;;;;;;;;;;;;;;;;;;;;26621:36;26586:71;26582:609;;;26704:20;;26694:6;:30;;26686:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;26843:9;;26826:13;26836:2;26826:9;:13::i;:::-;26817:6;:22;;;;:::i;:::-;:35;;26809:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26582:609;;;26972:25;:29;26998:2;26972:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;27006:31;:37;27038:4;27006:37;;;;;;;;;;;;;;;;;;;;;;;;;27005:38;26972:71;26968:223;;;27092:20;;27082:6;:30;;27074:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;26968:223;26582:609;26340:866;27210:28;27241:24;27259:4;27241:9;:24::i;:::-;27210:55;;27276:12;27315:18;;27291:20;:42;;27276:57;;27364:7;:35;;;;;27388:11;;;;;;;;;;;27364:35;:61;;;;;27417:8;;;;;;;;;;;27416:9;27364:61;:110;;;;;27443:25;:31;27469:4;27443:31;;;;;;;;;;;;;;;;;;;;;;;;;27442:32;27364:110;:153;;;;;27492:19;:25;27512:4;27492:25;;;;;;;;;;;;;;;;;;;;;;;;;27491:26;27364:153;:194;;;;;27535:19;:23;27555:2;27535:23;;;;;;;;;;;;;;;;;;;;;;;;;27534:24;27364:194;27346:323;;;27596:4;27585:8;;:15;;;;;;;;;;;;;;;;;;27616:10;:8;:10::i;:::-;27652:5;27641:8;;:16;;;;;;;;;;;;;;;;;;27346:323;27679:12;27695:8;;;;;;;;;;;27694:9;27679:24;;27719:19;:25;27739:4;27719:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;27748:19;:23;27768:2;27748:23;;;;;;;;;;;;;;;;;;;;;;;;;27719:52;27716:99;;;27798:5;27788:15;;27716:99;27825:12;27855:7;27852:1090;;;27882:25;:29;27908:2;27882:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;27931:1;27915:13;;:17;27882:50;27878:731;;;27959:34;27989:3;27959:25;27970:13;;27959:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;27952:41;;28060:13;;28041:16;;28034:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;28012:18;;:61;;;;;;;:::i;:::-;;;;;;;;28140:13;;28121:16;;28114:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;28092:18;;:61;;;;;;;:::i;:::-;;;;;;;;28210:13;;28196:11;;28189:4;:18;;;;:::i;:::-;:34;;;;:::i;:::-;28172:13;;:51;;;;;;;:::i;:::-;;;;;;;;27878:731;;;28261:25;:31;28287:4;28261:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;28311:1;28296:12;;:16;28261:51;28258:351;;;28337:33;28366:3;28337:24;28348:12;;28337:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;28330:40;;28433:12;;28415:15;;28408:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;28386:18;;:59;;;;;;;:::i;:::-;;;;;;;;28511:12;;28493:15;;28486:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;28464:18;;:59;;;;;;;:::i;:::-;;;;;;;;28581:12;;28568:10;;28561:4;:17;;;;:::i;:::-;:32;;;;:::i;:::-;28544:13;;:49;;;;;;;:::i;:::-;;;;;;;;28258:351;27878:731;28647:1;28640:4;:8;28637:111;;;28672:60;28688:4;28702;28717:13;;28710:4;:20;;;;:::i;:::-;28672:15;:60::i;:::-;28637:111;28783:1;28767:13;;:17;28764:141;;;28804:49;28820:4;17656:6;28839:13;;28804:15;:49::i;:::-;28888:1;28872:13;:17;;;;28764:141;28926:4;28916:14;;;;;:::i;:::-;;;27852:1090;28952:33;28968:4;28974:2;28978:6;28952:15;:33::i;:::-;26058:2935;;;;25945:3048;;;;:::o;9157:194::-;9243:7;9276:1;9271;:6;;9279:12;9263:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9303:9;9319:1;9315;:5;;;;:::i;:::-;9303:17;;9340:1;9333:8;;;9157:194;;;;;:::o;25400:188::-;25517:5;25483:25;:31;25509:4;25483:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;25574:5;25540:40;;25568:4;25540:40;;;;;;;;;;;;25400:188;;:::o;6884:573::-;7046:1;7028:20;;:6;:20;;;;7020:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;7130:1;7109:23;;:9;:23;;;;7101:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;7183:47;7204:6;7212:9;7223:6;7183:20;:47::i;:::-;7261:71;7283:6;7261:71;;;;;;;;;;;;;;;;;:9;:17;7271:6;7261:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;7241:9;:17;7251:6;7241:17;;;;;;;;;;;;;;;:91;;;;7366:32;7391:6;7366:9;:20;7376:9;7366:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;7343:9;:20;7353:9;7343:20;;;;;;;;;;;;;;;:55;;;;7431:9;7414:35;;7423:6;7414:35;;;7442:6;7414:35;;;;;;:::i;:::-;;;;;;;;6884:573;;;:::o;29852:1244::-;29891:23;29917:24;29935:4;29917:9;:24::i;:::-;29891:50;;29952:25;30001:18;;29980;;:39;;;;:::i;:::-;29952:67;;30062:1;30043:15;:20;:46;;;;30088:1;30067:17;:22;30043:46;30040:60;;;30092:7;;;;30040:60;30110:23;30195:1;30175:17;30154:18;;30136:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;30110:86;;30207:26;30236:36;30256:15;30236;:19;;:36;;;;:::i;:::-;30207:65;;30283:25;30311:21;30283:49;;30343:36;30360:18;30343:16;:36::i;:::-;30391:18;30412:44;30438:17;30412:21;:25;;:44;;;;:::i;:::-;30391:65;;30467:23;30493:57;30532:17;30493:34;30508:18;;30493:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;30467:83;;30561:23;30600:15;30587:10;:28;;;;:::i;:::-;30561:54;;30649:1;30628:18;:22;;;;30682:1;30661:18;:22;;;;30705:12;30730:15;;;;;;;;;;;30722:29;;30759:15;30722:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30704:75;;;30811:1;30793:15;:19;:42;;;;;30834:1;30816:15;:19;30793:42;30790:210;;;30851:46;30864:15;30881;30851:12;:46::i;:::-;30917:71;30932:18;30952:15;30969:18;;30917:71;;;;;;;;:::i;:::-;;;;;;;;30790:210;31033:15;;;;;;;;;;;31025:29;;31062:21;31025:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31012:76;;;;;29880:1216;;;;;;;;;29852:1244;:::o;9359:249::-;9417:7;9446:1;9441;:6;9437:47;;;9471:1;9464:8;;;;9437:47;9495:9;9511:1;9507;:5;;;;:::i;:::-;9495:17;;9540:1;9535;9531;:5;;;;:::i;:::-;:10;9523:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;9599:1;9592:8;;;9359:249;;;;;:::o;9616:132::-;9674:7;9701:39;9705:1;9708;9701:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;9694:46;;9616:132;;;;:::o;8660:125::-;;;;:::o;9013:136::-;9071:7;9098:43;9102:1;9105;9098:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;9091:50;;9013:136;;;;:::o;29001:471::-;29067:21;29105:1;29091:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29067:40;;29136:4;29118;29123:1;29118:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;29162:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29152:4;29157:1;29152:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;29195:62;29212:4;29227:15;29245:11;29195:8;:62::i;:::-;29268:15;:66;;;29349:11;29375:1;29391:4;29418;29438:15;29268:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29056:416;29001:471;:::o;29478:366::-;29559:62;29576:4;29591:15;29609:11;29559:8;:62::i;:::-;29632:15;:31;;;29671:9;29704:4;29724:11;29750:1;29768;17656:6;29810:15;29632:204;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;29478:366;;:::o;9756:189::-;9842:7;9874:1;9870;:5;9877:12;9862:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9901:9;9917:1;9913;:5;;;;:::i;:::-;9901:17;;9936:1;9929:8;;;9756:189;;;;;:::o;7:126:1:-;44:7;84:42;77:5;73:54;62:65;;7:126;;;:::o;139:96::-;176:7;205:24;223:5;205:24;:::i;:::-;194:35;;139:96;;;:::o;241:118::-;328:24;346:5;328:24;:::i;:::-;323:3;316:37;241:118;;:::o;365:222::-;458:4;496:2;485:9;481:18;473:26;;509:71;577:1;566:9;562:17;553:6;509:71;:::i;:::-;365:222;;;;:::o;593:99::-;645:6;679:5;673:12;663:22;;593:99;;;:::o;698:169::-;782:11;816:6;811:3;804:19;856:4;851:3;847:14;832:29;;698:169;;;;:::o;873:307::-;941:1;951:113;965:6;962:1;959:13;951:113;;;1050:1;1045:3;1041:11;1035:18;1031:1;1026:3;1022:11;1015:39;987:2;984:1;980:10;975:15;;951:113;;;1082:6;1079:1;1076:13;1073:101;;;1162:1;1153:6;1148:3;1144:16;1137:27;1073:101;922:258;873:307;;;:::o;1186:102::-;1227:6;1278:2;1274:7;1269:2;1262:5;1258:14;1254:28;1244:38;;1186:102;;;:::o;1294:364::-;1382:3;1410:39;1443:5;1410:39;:::i;:::-;1465:71;1529:6;1524:3;1465:71;:::i;:::-;1458:78;;1545:52;1590:6;1585:3;1578:4;1571:5;1567:16;1545:52;:::i;:::-;1622:29;1644:6;1622:29;:::i;:::-;1617:3;1613:39;1606:46;;1386:272;1294:364;;;;:::o;1664:313::-;1777:4;1815:2;1804:9;1800:18;1792:26;;1864:9;1858:4;1854:20;1850:1;1839:9;1835:17;1828:47;1892:78;1965:4;1956:6;1892:78;:::i;:::-;1884:86;;1664:313;;;;:::o;2064:117::-;2173:1;2170;2163:12;2310:122;2383:24;2401:5;2383:24;:::i;:::-;2376:5;2373:35;2363:63;;2422:1;2419;2412:12;2363:63;2310:122;:::o;2438:139::-;2484:5;2522:6;2509:20;2500:29;;2538:33;2565:5;2538:33;:::i;:::-;2438:139;;;;:::o;2583:77::-;2620:7;2649:5;2638:16;;2583:77;;;:::o;2666:122::-;2739:24;2757:5;2739:24;:::i;:::-;2732:5;2729:35;2719:63;;2778:1;2775;2768:12;2719:63;2666:122;:::o;2794:139::-;2840:5;2878:6;2865:20;2856:29;;2894:33;2921:5;2894:33;:::i;:::-;2794:139;;;;:::o;2939:474::-;3007:6;3015;3064:2;3052:9;3043:7;3039:23;3035:32;3032:119;;;3070:79;;:::i;:::-;3032:119;3190:1;3215:53;3260:7;3251:6;3240:9;3236:22;3215:53;:::i;:::-;3205:63;;3161:117;3317:2;3343:53;3388:7;3379:6;3368:9;3364:22;3343:53;:::i;:::-;3333:63;;3288:118;2939:474;;;;;:::o;3419:90::-;3453:7;3496:5;3489:13;3482:21;3471:32;;3419:90;;;:::o;3515:109::-;3596:21;3611:5;3596:21;:::i;:::-;3591:3;3584:34;3515:109;;:::o;3630:210::-;3717:4;3755:2;3744:9;3740:18;3732:26;;3768:65;3830:1;3819:9;3815:17;3806:6;3768:65;:::i;:::-;3630:210;;;;:::o;3846:329::-;3905:6;3954:2;3942:9;3933:7;3929:23;3925:32;3922:119;;;3960:79;;:::i;:::-;3922:119;4080:1;4105:53;4150:7;4141:6;4130:9;4126:22;4105:53;:::i;:::-;4095:63;;4051:117;3846:329;;;;:::o;4181:60::-;4209:3;4230:5;4223:12;;4181:60;;;:::o;4247:142::-;4297:9;4330:53;4348:34;4357:24;4375:5;4357:24;:::i;:::-;4348:34;:::i;:::-;4330:53;:::i;:::-;4317:66;;4247:142;;;:::o;4395:126::-;4445:9;4478:37;4509:5;4478:37;:::i;:::-;4465:50;;4395:126;;;:::o;4527:153::-;4604:9;4637:37;4668:5;4637:37;:::i;:::-;4624:50;;4527:153;;;:::o;4686:185::-;4800:64;4858:5;4800:64;:::i;:::-;4795:3;4788:77;4686:185;;:::o;4877:276::-;4997:4;5035:2;5024:9;5020:18;5012:26;;5048:98;5143:1;5132:9;5128:17;5119:6;5048:98;:::i;:::-;4877:276;;;;:::o;5159:118::-;5246:24;5264:5;5246:24;:::i;:::-;5241:3;5234:37;5159:118;;:::o;5283:222::-;5376:4;5414:2;5403:9;5399:18;5391:26;;5427:71;5495:1;5484:9;5480:17;5471:6;5427:71;:::i;:::-;5283:222;;;;:::o;5511:619::-;5588:6;5596;5604;5653:2;5641:9;5632:7;5628:23;5624:32;5621:119;;;5659:79;;:::i;:::-;5621:119;5779:1;5804:53;5849:7;5840:6;5829:9;5825:22;5804:53;:::i;:::-;5794:63;;5750:117;5906:2;5932:53;5977:7;5968:6;5957:9;5953:22;5932:53;:::i;:::-;5922:63;;5877:118;6034:2;6060:53;6105:7;6096:6;6085:9;6081:22;6060:53;:::i;:::-;6050:63;;6005:118;5511:619;;;;;:::o;6136:86::-;6171:7;6211:4;6204:5;6200:16;6189:27;;6136:86;;;:::o;6228:112::-;6311:22;6327:5;6311:22;:::i;:::-;6306:3;6299:35;6228:112;;:::o;6346:214::-;6435:4;6473:2;6462:9;6458:18;6450:26;;6486:67;6550:1;6539:9;6535:17;6526:6;6486:67;:::i;:::-;6346:214;;;;:::o;6566:329::-;6625:6;6674:2;6662:9;6653:7;6649:23;6645:32;6642:119;;;6680:79;;:::i;:::-;6642:119;6800:1;6825:53;6870:7;6861:6;6850:9;6846:22;6825:53;:::i;:::-;6815:63;;6771:117;6566:329;;;;:::o;6901:116::-;6971:21;6986:5;6971:21;:::i;:::-;6964:5;6961:32;6951:60;;7007:1;7004;6997:12;6951:60;6901:116;:::o;7023:133::-;7066:5;7104:6;7091:20;7082:29;;7120:30;7144:5;7120:30;:::i;:::-;7023:133;;;;:::o;7162:468::-;7227:6;7235;7284:2;7272:9;7263:7;7259:23;7255:32;7252:119;;;7290:79;;:::i;:::-;7252:119;7410:1;7435:53;7480:7;7471:6;7460:9;7456:22;7435:53;:::i;:::-;7425:63;;7381:117;7537:2;7563:50;7605:7;7596:6;7585:9;7581:22;7563:50;:::i;:::-;7553:60;;7508:115;7162:468;;;;;:::o;7636:619::-;7713:6;7721;7729;7778:2;7766:9;7757:7;7753:23;7749:32;7746:119;;;7784:79;;:::i;:::-;7746:119;7904:1;7929:53;7974:7;7965:6;7954:9;7950:22;7929:53;:::i;:::-;7919:63;;7875:117;8031:2;8057:53;8102:7;8093:6;8082:9;8078:22;8057:53;:::i;:::-;8047:63;;8002:118;8159:2;8185:53;8230:7;8221:6;8210:9;8206:22;8185:53;:::i;:::-;8175:63;;8130:118;7636:619;;;;;:::o;8261:323::-;8317:6;8366:2;8354:9;8345:7;8341:23;8337:32;8334:119;;;8372:79;;:::i;:::-;8334:119;8492:1;8517:50;8559:7;8550:6;8539:9;8535:22;8517:50;:::i;:::-;8507:60;;8463:114;8261:323;;;;:::o;8590:1057::-;8694:6;8702;8710;8718;8726;8734;8783:3;8771:9;8762:7;8758:23;8754:33;8751:120;;;8790:79;;:::i;:::-;8751:120;8910:1;8935:53;8980:7;8971:6;8960:9;8956:22;8935:53;:::i;:::-;8925:63;;8881:117;9037:2;9063:53;9108:7;9099:6;9088:9;9084:22;9063:53;:::i;:::-;9053:63;;9008:118;9165:2;9191:53;9236:7;9227:6;9216:9;9212:22;9191:53;:::i;:::-;9181:63;;9136:118;9293:2;9319:53;9364:7;9355:6;9344:9;9340:22;9319:53;:::i;:::-;9309:63;;9264:118;9421:3;9448:53;9493:7;9484:6;9473:9;9469:22;9448:53;:::i;:::-;9438:63;;9392:119;9550:3;9577:53;9622:7;9613:6;9602:9;9598:22;9577:53;:::i;:::-;9567:63;;9521:119;8590:1057;;;;;;;;:::o;9653:474::-;9721:6;9729;9778:2;9766:9;9757:7;9753:23;9749:32;9746:119;;;9784:79;;:::i;:::-;9746:119;9904:1;9929:53;9974:7;9965:6;9954:9;9950:22;9929:53;:::i;:::-;9919:63;;9875:117;10031:2;10057:53;10102:7;10093:6;10082:9;10078:22;10057:53;:::i;:::-;10047:63;;10002:118;9653:474;;;;;:::o;10133:::-;10201:6;10209;10258:2;10246:9;10237:7;10233:23;10229:32;10226:119;;;10264:79;;:::i;:::-;10226:119;10384:1;10409:53;10454:7;10445:6;10434:9;10430:22;10409:53;:::i;:::-;10399:63;;10355:117;10511:2;10537:53;10582:7;10573:6;10562:9;10558:22;10537:53;:::i;:::-;10527:63;;10482:118;10133:474;;;;;:::o;10613:180::-;10661:77;10658:1;10651:88;10758:4;10755:1;10748:15;10782:4;10779:1;10772:15;10799:320;10843:6;10880:1;10874:4;10870:12;10860:22;;10927:1;10921:4;10917:12;10948:18;10938:81;;11004:4;10996:6;10992:17;10982:27;;10938:81;11066:2;11058:6;11055:14;11035:18;11032:38;11029:84;;;11085:18;;:::i;:::-;11029:84;10850:269;10799:320;;;:::o;11125:182::-;11265:34;11261:1;11253:6;11249:14;11242:58;11125:182;:::o;11313:366::-;11455:3;11476:67;11540:2;11535:3;11476:67;:::i;:::-;11469:74;;11552:93;11641:3;11552:93;:::i;:::-;11670:2;11665:3;11661:12;11654:19;;11313:366;;;:::o;11685:419::-;11851:4;11889:2;11878:9;11874:18;11866:26;;11938:9;11932:4;11928:20;11924:1;11913:9;11909:17;11902:47;11966:131;12092:4;11966:131;:::i;:::-;11958:139;;11685:419;;;:::o;12110:180::-;12250:32;12246:1;12238:6;12234:14;12227:56;12110:180;:::o;12296:366::-;12438:3;12459:67;12523:2;12518:3;12459:67;:::i;:::-;12452:74;;12535:93;12624:3;12535:93;:::i;:::-;12653:2;12648:3;12644:12;12637:19;;12296:366;;;:::o;12668:419::-;12834:4;12872:2;12861:9;12857:18;12849:26;;12921:9;12915:4;12911:20;12907:1;12896:9;12892:17;12885:47;12949:131;13075:4;12949:131;:::i;:::-;12941:139;;12668:419;;;:::o;13093:180::-;13141:77;13138:1;13131:88;13238:4;13235:1;13228:15;13262:4;13259:1;13252:15;13279:348;13319:7;13342:20;13360:1;13342:20;:::i;:::-;13337:25;;13376:20;13394:1;13376:20;:::i;:::-;13371:25;;13564:1;13496:66;13492:74;13489:1;13486:81;13481:1;13474:9;13467:17;13463:105;13460:131;;;13571:18;;:::i;:::-;13460:131;13619:1;13616;13612:9;13601:20;;13279:348;;;;:::o;13633:180::-;13681:77;13678:1;13671:88;13778:4;13775:1;13768:15;13802:4;13799:1;13792:15;13819:185;13859:1;13876:20;13894:1;13876:20;:::i;:::-;13871:25;;13910:20;13928:1;13910:20;:::i;:::-;13905:25;;13949:1;13939:35;;13954:18;;:::i;:::-;13939:35;13996:1;13993;13989:9;13984:14;;13819:185;;;;:::o;14010:232::-;14150:34;14146:1;14138:6;14134:14;14127:58;14219:15;14214:2;14206:6;14202:15;14195:40;14010:232;:::o;14248:366::-;14390:3;14411:67;14475:2;14470:3;14411:67;:::i;:::-;14404:74;;14487:93;14576:3;14487:93;:::i;:::-;14605:2;14600:3;14596:12;14589:19;;14248:366;;;:::o;14620:419::-;14786:4;14824:2;14813:9;14809:18;14801:26;;14873:9;14867:4;14863:20;14859:1;14848:9;14844:17;14837:47;14901:131;15027:4;14901:131;:::i;:::-;14893:139;;14620:419;;;:::o;15045:305::-;15085:3;15104:20;15122:1;15104:20;:::i;:::-;15099:25;;15138:20;15156:1;15138:20;:::i;:::-;15133:25;;15292:1;15224:66;15220:74;15217:1;15214:81;15211:107;;;15298:18;;:::i;:::-;15211:107;15342:1;15339;15335:9;15328:16;;15045:305;;;;:::o;15356:244::-;15496:34;15492:1;15484:6;15480:14;15473:58;15565:27;15560:2;15552:6;15548:15;15541:52;15356:244;:::o;15606:366::-;15748:3;15769:67;15833:2;15828:3;15769:67;:::i;:::-;15762:74;;15845:93;15934:3;15845:93;:::i;:::-;15963:2;15958:3;15954:12;15947:19;;15606:366;;;:::o;15978:419::-;16144:4;16182:2;16171:9;16167:18;16159:26;;16231:9;16225:4;16221:20;16217:1;16206:9;16202:17;16195:47;16259:131;16385:4;16259:131;:::i;:::-;16251:139;;15978:419;;;:::o;16403:221::-;16543:34;16539:1;16531:6;16527:14;16520:58;16612:4;16607:2;16599:6;16595:15;16588:29;16403:221;:::o;16630:366::-;16772:3;16793:67;16857:2;16852:3;16793:67;:::i;:::-;16786:74;;16869:93;16958:3;16869:93;:::i;:::-;16987:2;16982:3;16978:12;16971:19;;16630:366;;;:::o;17002:419::-;17168:4;17206:2;17195:9;17191:18;17183:26;;17255:9;17249:4;17245:20;17241:1;17230:9;17226:17;17219:47;17283:131;17409:4;17283:131;:::i;:::-;17275:139;;17002:419;;;:::o;17427:227::-;17567:34;17563:1;17555:6;17551:14;17544:58;17636:10;17631:2;17623:6;17619:15;17612:35;17427:227;:::o;17660:366::-;17802:3;17823:67;17887:2;17882:3;17823:67;:::i;:::-;17816:74;;17899:93;17988:3;17899:93;:::i;:::-;18017:2;18012:3;18008:12;18001:19;;17660:366;;;:::o;18032:419::-;18198:4;18236:2;18225:9;18221:18;18213:26;;18285:9;18279:4;18275:20;18271:1;18260:9;18256:17;18249:47;18313:131;18439:4;18313:131;:::i;:::-;18305:139;;18032:419;;;:::o;18457:240::-;18597:34;18593:1;18585:6;18581:14;18574:58;18666:23;18661:2;18653:6;18649:15;18642:48;18457:240;:::o;18703:366::-;18845:3;18866:67;18930:2;18925:3;18866:67;:::i;:::-;18859:74;;18942:93;19031:3;18942:93;:::i;:::-;19060:2;19055:3;19051:12;19044:19;;18703:366;;;:::o;19075:419::-;19241:4;19279:2;19268:9;19264:18;19256:26;;19328:9;19322:4;19318:20;19314:1;19303:9;19299:17;19292:47;19356:131;19482:4;19356:131;:::i;:::-;19348:139;;19075:419;;;:::o;19500:239::-;19640:34;19636:1;19628:6;19624:14;19617:58;19709:22;19704:2;19696:6;19692:15;19685:47;19500:239;:::o;19745:366::-;19887:3;19908:67;19972:2;19967:3;19908:67;:::i;:::-;19901:74;;19984:93;20073:3;19984:93;:::i;:::-;20102:2;20097:3;20093:12;20086:19;;19745:366;;;:::o;20117:419::-;20283:4;20321:2;20310:9;20306:18;20298:26;;20370:9;20364:4;20360:20;20356:1;20345:9;20341:17;20334:47;20398:131;20524:4;20398:131;:::i;:::-;20390:139;;20117:419;;;:::o;20542:225::-;20682:34;20678:1;20670:6;20666:14;20659:58;20751:8;20746:2;20738:6;20734:15;20727:33;20542:225;:::o;20773:366::-;20915:3;20936:67;21000:2;20995:3;20936:67;:::i;:::-;20929:74;;21012:93;21101:3;21012:93;:::i;:::-;21130:2;21125:3;21121:12;21114:19;;20773:366;;;:::o;21145:419::-;21311:4;21349:2;21338:9;21334:18;21326:26;;21398:9;21392:4;21388:20;21384:1;21373:9;21369:17;21362:47;21426:131;21552:4;21426:131;:::i;:::-;21418:139;;21145:419;;;:::o;21570:177::-;21710:29;21706:1;21698:6;21694:14;21687:53;21570:177;:::o;21753:366::-;21895:3;21916:67;21980:2;21975:3;21916:67;:::i;:::-;21909:74;;21992:93;22081:3;21992:93;:::i;:::-;22110:2;22105:3;22101:12;22094:19;;21753:366;;;:::o;22125:419::-;22291:4;22329:2;22318:9;22314:18;22306:26;;22378:9;22372:4;22368:20;22364:1;22353:9;22349:17;22342:47;22406:131;22532:4;22406:131;:::i;:::-;22398:139;;22125:419;;;:::o;22550:223::-;22690:34;22686:1;22678:6;22674:14;22667:58;22759:6;22754:2;22746:6;22742:15;22735:31;22550:223;:::o;22779:366::-;22921:3;22942:67;23006:2;23001:3;22942:67;:::i;:::-;22935:74;;23018:93;23107:3;23018:93;:::i;:::-;23136:2;23131:3;23127:12;23120:19;;22779:366;;;:::o;23151:419::-;23317:4;23355:2;23344:9;23340:18;23332:26;;23404:9;23398:4;23394:20;23390:1;23379:9;23375:17;23368:47;23432:131;23558:4;23432:131;:::i;:::-;23424:139;;23151:419;;;:::o;23576:221::-;23716:34;23712:1;23704:6;23700:14;23693:58;23785:4;23780:2;23772:6;23768:15;23761:29;23576:221;:::o;23803:366::-;23945:3;23966:67;24030:2;24025:3;23966:67;:::i;:::-;23959:74;;24042:93;24131:3;24042:93;:::i;:::-;24160:2;24155:3;24151:12;24144:19;;23803:366;;;:::o;24175:419::-;24341:4;24379:2;24368:9;24364:18;24356:26;;24428:9;24422:4;24418:20;24414:1;24403:9;24399:17;24392:47;24456:131;24582:4;24456:131;:::i;:::-;24448:139;;24175:419;;;:::o;24600:224::-;24740:34;24736:1;24728:6;24724:14;24717:58;24809:7;24804:2;24796:6;24792:15;24785:32;24600:224;:::o;24830:366::-;24972:3;24993:67;25057:2;25052:3;24993:67;:::i;:::-;24986:74;;25069:93;25158:3;25069:93;:::i;:::-;25187:2;25182:3;25178:12;25171:19;;24830:366;;;:::o;25202:419::-;25368:4;25406:2;25395:9;25391:18;25383:26;;25455:9;25449:4;25445:20;25441:1;25430:9;25426:17;25419:47;25483:131;25609:4;25483:131;:::i;:::-;25475:139;;25202:419;;;:::o;25627:222::-;25767:34;25763:1;25755:6;25751:14;25744:58;25836:5;25831:2;25823:6;25819:15;25812:30;25627:222;:::o;25855:366::-;25997:3;26018:67;26082:2;26077:3;26018:67;:::i;:::-;26011:74;;26094:93;26183:3;26094:93;:::i;:::-;26212:2;26207:3;26203:12;26196:19;;25855:366;;;:::o;26227:419::-;26393:4;26431:2;26420:9;26416:18;26408:26;;26480:9;26474:4;26470:20;26466:1;26455:9;26451:17;26444:47;26508:131;26634:4;26508:131;:::i;:::-;26500:139;;26227:419;;;:::o;26652:240::-;26792:34;26788:1;26780:6;26776:14;26769:58;26861:23;26856:2;26848:6;26844:15;26837:48;26652:240;:::o;26898:366::-;27040:3;27061:67;27125:2;27120:3;27061:67;:::i;:::-;27054:74;;27137:93;27226:3;27137:93;:::i;:::-;27255:2;27250:3;27246:12;27239:19;;26898:366;;;:::o;27270:419::-;27436:4;27474:2;27463:9;27459:18;27451:26;;27523:9;27517:4;27513:20;27509:1;27498:9;27494:17;27487:47;27551:131;27677:4;27551:131;:::i;:::-;27543:139;;27270:419;;;:::o;27695:169::-;27835:21;27831:1;27823:6;27819:14;27812:45;27695:169;:::o;27870:366::-;28012:3;28033:67;28097:2;28092:3;28033:67;:::i;:::-;28026:74;;28109:93;28198:3;28109:93;:::i;:::-;28227:2;28222:3;28218:12;28211:19;;27870:366;;;:::o;28242:419::-;28408:4;28446:2;28435:9;28431:18;28423:26;;28495:9;28489:4;28485:20;28481:1;28470:9;28466:17;28459:47;28523:131;28649:4;28523:131;:::i;:::-;28515:139;;28242:419;;;:::o;28667:241::-;28807:34;28803:1;28795:6;28791:14;28784:58;28876:24;28871:2;28863:6;28859:15;28852:49;28667:241;:::o;28914:366::-;29056:3;29077:67;29141:2;29136:3;29077:67;:::i;:::-;29070:74;;29153:93;29242:3;29153:93;:::i;:::-;29271:2;29266:3;29262:12;29255:19;;28914:366;;;:::o;29286:419::-;29452:4;29490:2;29479:9;29475:18;29467:26;;29539:9;29533:4;29529:20;29525:1;29514:9;29510:17;29503:47;29567:131;29693:4;29567:131;:::i;:::-;29559:139;;29286:419;;;:::o;29711:191::-;29751:4;29771:20;29789:1;29771:20;:::i;:::-;29766:25;;29805:20;29823:1;29805:20;:::i;:::-;29800:25;;29844:1;29841;29838:8;29835:34;;;29849:18;;:::i;:::-;29835:34;29894:1;29891;29887:9;29879:17;;29711:191;;;;:::o;29908:147::-;30009:11;30046:3;30031:18;;29908:147;;;;:::o;30061:114::-;;:::o;30181:398::-;30340:3;30361:83;30442:1;30437:3;30361:83;:::i;:::-;30354:90;;30453:93;30542:3;30453:93;:::i;:::-;30571:1;30566:3;30562:11;30555:18;;30181:398;;;:::o;30585:379::-;30769:3;30791:147;30934:3;30791:147;:::i;:::-;30784:154;;30955:3;30948:10;;30585:379;;;:::o;30970:442::-;31119:4;31157:2;31146:9;31142:18;31134:26;;31170:71;31238:1;31227:9;31223:17;31214:6;31170:71;:::i;:::-;31251:72;31319:2;31308:9;31304:18;31295:6;31251:72;:::i;:::-;31333;31401:2;31390:9;31386:18;31377:6;31333:72;:::i;:::-;30970:442;;;;;;:::o;31418:220::-;31558:34;31554:1;31546:6;31542:14;31535:58;31627:3;31622:2;31614:6;31610:15;31603:28;31418:220;:::o;31644:366::-;31786:3;31807:67;31871:2;31866:3;31807:67;:::i;:::-;31800:74;;31883:93;31972:3;31883:93;:::i;:::-;32001:2;31996:3;31992:12;31985:19;;31644:366;;;:::o;32016:419::-;32182:4;32220:2;32209:9;32205:18;32197:26;;32269:9;32263:4;32259:20;32255:1;32244:9;32240:17;32233:47;32297:131;32423:4;32297:131;:::i;:::-;32289:139;;32016:419;;;:::o;32441:180::-;32489:77;32486:1;32479:88;32586:4;32583:1;32576:15;32610:4;32607:1;32600:15;32627:180;32675:77;32672:1;32665:88;32772:4;32769:1;32762:15;32796:4;32793:1;32786:15;32813:143;32870:5;32901:6;32895:13;32886:22;;32917:33;32944:5;32917:33;:::i;:::-;32813:143;;;;:::o;32962:351::-;33032:6;33081:2;33069:9;33060:7;33056:23;33052:32;33049:119;;;33087:79;;:::i;:::-;33049:119;33207:1;33232:64;33288:7;33279:6;33268:9;33264:22;33232:64;:::i;:::-;33222:74;;33178:128;32962:351;;;;:::o;33319:85::-;33364:7;33393:5;33382:16;;33319:85;;;:::o;33410:158::-;33468:9;33501:61;33519:42;33528:32;33554:5;33528:32;:::i;:::-;33519:42;:::i;:::-;33501:61;:::i;:::-;33488:74;;33410:158;;;:::o;33574:147::-;33669:45;33708:5;33669:45;:::i;:::-;33664:3;33657:58;33574:147;;:::o;33727:114::-;33794:6;33828:5;33822:12;33812:22;;33727:114;;;:::o;33847:184::-;33946:11;33980:6;33975:3;33968:19;34020:4;34015:3;34011:14;33996:29;;33847:184;;;;:::o;34037:132::-;34104:4;34127:3;34119:11;;34157:4;34152:3;34148:14;34140:22;;34037:132;;;:::o;34175:108::-;34252:24;34270:5;34252:24;:::i;:::-;34247:3;34240:37;34175:108;;:::o;34289:179::-;34358:10;34379:46;34421:3;34413:6;34379:46;:::i;:::-;34457:4;34452:3;34448:14;34434:28;;34289:179;;;;:::o;34474:113::-;34544:4;34576;34571:3;34567:14;34559:22;;34474:113;;;:::o;34623:732::-;34742:3;34771:54;34819:5;34771:54;:::i;:::-;34841:86;34920:6;34915:3;34841:86;:::i;:::-;34834:93;;34951:56;35001:5;34951:56;:::i;:::-;35030:7;35061:1;35046:284;35071:6;35068:1;35065:13;35046:284;;;35147:6;35141:13;35174:63;35233:3;35218:13;35174:63;:::i;:::-;35167:70;;35260:60;35313:6;35260:60;:::i;:::-;35250:70;;35106:224;35093:1;35090;35086:9;35081:14;;35046:284;;;35050:14;35346:3;35339:10;;34747:608;;;34623:732;;;;:::o;35361:831::-;35624:4;35662:3;35651:9;35647:19;35639:27;;35676:71;35744:1;35733:9;35729:17;35720:6;35676:71;:::i;:::-;35757:80;35833:2;35822:9;35818:18;35809:6;35757:80;:::i;:::-;35884:9;35878:4;35874:20;35869:2;35858:9;35854:18;35847:48;35912:108;36015:4;36006:6;35912:108;:::i;:::-;35904:116;;36030:72;36098:2;36087:9;36083:18;36074:6;36030:72;:::i;:::-;36112:73;36180:3;36169:9;36165:19;36156:6;36112:73;:::i;:::-;35361:831;;;;;;;;:::o;36198:807::-;36447:4;36485:3;36474:9;36470:19;36462:27;;36499:71;36567:1;36556:9;36552:17;36543:6;36499:71;:::i;:::-;36580:72;36648:2;36637:9;36633:18;36624:6;36580:72;:::i;:::-;36662:80;36738:2;36727:9;36723:18;36714:6;36662:80;:::i;:::-;36752;36828:2;36817:9;36813:18;36804:6;36752:80;:::i;:::-;36842:73;36910:3;36899:9;36895:19;36886:6;36842:73;:::i;:::-;36925;36993:3;36982:9;36978:19;36969:6;36925:73;:::i;:::-;36198:807;;;;;;;;;:::o;37011:143::-;37068:5;37099:6;37093:13;37084:22;;37115:33;37142:5;37115:33;:::i;:::-;37011:143;;;;:::o;37160:663::-;37248:6;37256;37264;37313:2;37301:9;37292:7;37288:23;37284:32;37281:119;;;37319:79;;:::i;:::-;37281:119;37439:1;37464:64;37520:7;37511:6;37500:9;37496:22;37464:64;:::i;:::-;37454:74;;37410:128;37577:2;37603:64;37659:7;37650:6;37639:9;37635:22;37603:64;:::i;:::-;37593:74;;37548:129;37716:2;37742:64;37798:7;37789:6;37778:9;37774:22;37742:64;:::i;:::-;37732:74;;37687:129;37160:663;;;;;:::o

Swarm Source

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