ETH Price: $2,620.96 (+0.81%)
Gas: 2 Gwei

Token

XP (XP)
 

Overview

Max Total Supply

1,000,000,000 XP

Holders

41

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
8,609,158.528651305842419387 XP

Value
$0.00
0x18b5f62c3830668d64f859a5a71511b2132075f1
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:
XP

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-07-25
*/

// SPDX-License-Identifier: MIT  

pragma solidity 0.8.7;

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

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

interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}


contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

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

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);
    }

    function _createInitialSupply(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");
        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, 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);
    }
}

library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

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

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be 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);
    
    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    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);

    /**
     * @dev Multiplies two int256 variables and fails on overflow.
     */
    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;

        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    /**
     * @dev Division of two int256 variables and fails on overflow.
     */
    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);

        // Solidity already throws when dividing by 0.
        return a / b;
    }

    /**
     * @dev Subtracts two int256 variables and fails on overflow.
     */
    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;
    }

    /**
     * @dev Adds two int256 variables and fails on overflow.
     */
    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;
    }

    /**
     * @dev Converts to absolute value, and fails on overflow.
     */
    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 XP is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    bool private swapping;
    
    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;
    
    uint256 public liquidityActiveBlock = 0;
    uint256 public tradingActiveBlock = 0;
    
    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;
    
    uint256 public constant feeDivisor = 1000;

    uint256 public totalSellFees;
    uint256 public liquiditySellFee;
    
    uint256 public totalBuyFees;
    uint256 public liquidityBuyFee;
    
    uint256 public tokensForLiquidity;
    
    uint256 public gasForProcessing = 0;

    uint256 public lpWithdrawRequestTimestamp;
    uint256 public lpWithdrawRequestDuration = 3 days;
    bool public lpWithdrawRequestPending;
    uint256 public lpPercToWithDraw;

    // exlcude from fees and max transaction amount
    mapping (address => bool) private _isExcludedFromFees;

    mapping (address => bool) public _isExcludedMaxTransactionAmount;

    // store addresses that an automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping (address => bool) public automatedMarketMakerPairs;

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event ExcludedMaxTransactionAmount(address indexed account, bool isExcluded);

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

    event DevWalletUpdated(address indexed newWallet, address indexed oldWallet);

    event GasForProcessingUpdated(uint256 indexed newValue, uint256 indexed oldValue);
    
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );

    event RequestedLPWithdraw();
    
    event WithdrewLPForMigration();

    event CanceledLpWithdrawRequest();

    constructor() ERC20("XP", "XP") {

        uint256 totalSupply = 100 * 1e7 * 1e18;
        
        maxTransactionAmount = totalSupply * 20 / 1000;
        swapTokensAtAmount = totalSupply * 5 / 10000;
        maxWallet = totalSupply * 20 / 1000;

        liquidityBuyFee = 20;
        totalBuyFees = liquidityBuyFee;
        
        liquiditySellFee = 20;
        totalSellFees = liquiditySellFee;

    	IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); //0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
    	
         // Create a uniswap pair for this new token
        address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = _uniswapV2Pair;

        _setAutomatedMarketMakerPair(_uniswapV2Pair, true);
        
        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        excludeFromMaxTransaction(address(0xdead), true);

        _createInitialSupply(address(owner()), totalSupply);
    }

    receive() external payable {

  	}
    
    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        require(!tradingActive, "Cannot re-enable trading");
        tradingActive = true;
        swapEnabled = true;
        tradingActiveBlock = block.number;
    }
    
    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner(){
        swapEnabled = enabled;
    }

    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(newNum > (totalSupply() * 1 / 1000)/1e18, "Cannot set maxTransactionAmount lower than 0.1%");
        maxTransactionAmount = newNum * (10**18);
    }
    
    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(newNum > (totalSupply() * 1 / 100)/1e18, "Cannot set maxWallet lower than 1%");
        maxWallet = newNum * (10**18);
    }
    
    function updateBuyFees(uint256 _liquidityFee) external onlyOwner {
        liquidityBuyFee = _liquidityFee;
        totalBuyFees = liquidityBuyFee;
        require(totalBuyFees <= 100, "Must keep fees at 10% or less");
    }
    
    function updateSellFees(uint256 _liquidityFee) external onlyOwner {
        liquiditySellFee = _liquidityFee;
        totalSellFees = liquiditySellFee;
        require(totalSellFees <= 100, "Must keep fees at 10% or less");
    }

    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
        emit ExcludedMaxTransactionAmount(updAds, isEx);
    }

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

        emit ExcludeFromFees(account, excluded);
    }

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

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        excludeFromMaxTransaction(pair, value);

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateGasForProcessing(uint256 newValue) external onlyOwner {
        require(newValue >= 200000 && newValue <= 500000, " gasForProcessing must be between 200,000 and 500,000");
        require(newValue != gasForProcessing, "Cannot update gasForProcessing to same value");
        emit GasForProcessingUpdated(newValue, gasForProcessing);
        gasForProcessing = newValue;
    }

    function isExcludedFromFees(address account) external view returns(bool) {
        return _isExcludedFromFees[account];
    }
    
    function removeLimits() external onlyOwner returns (bool){
        limitsInEffect = false;
        return true;
    }
    
    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(!tradingActive){
            require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active yet.");
        }
        
        if(limitsInEffect){
            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, "Unable to exceed Max Wallet");
                } 
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                    require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
                else if(!_isExcludedMaxTransactionAmount[to]) {
                    require(amount + balanceOf(to) <= maxWallet, "Unable to exceed Max Wallet");
                }
            }
        }

		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 any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
        
        uint256 fees = 0;
        
        // no taxes on transfers (non buys/sells)
        if(takeFee){
            if(tradingActiveBlock + 1 >= block.number && (automatedMarketMakerPairs[to] || automatedMarketMakerPairs[from])){
                fees = amount.mul(99).div(100);
                tokensForLiquidity += fees * 33 / 99;
            }

            // on sell
            else if (automatedMarketMakerPairs[to] && totalSellFees > 0){
                fees = amount.mul(totalSellFees).div(feeDivisor);
                tokensForLiquidity += fees * liquiditySellFee / totalSellFees;
            }
            
            // on buy
            else if(automatedMarketMakerPairs[from] && totalBuyFees > 0) {
        	    fees = amount.mul(totalBuyFees).div(feeDivisor);
                tokensForLiquidity += fees * liquidityBuyFee / totalBuyFees;
            }

            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
        	
        	amount -= fees;
        }

        super._transfer(from, to, amount);

    }
    
    function swapTokensForEth(uint256 tokenAmount) private {

        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
        
    }
    
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

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

    }
    
    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity;
        
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}
        
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);
        
        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH); 
        
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
                
        uint256 ethForLiquidity = ethBalance;
        
        tokensForLiquidity = 0;
        
        
        
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }
        
    }

    function withdrawStuckEth() external onlyOwner {
        (bool success,) = address(msg.sender).call{value: address(this).balance}("");
        require(success, "failed to withdraw");
    }

  

    function nextAvailableLpWithdrawDate() public view returns (uint256){
        if(lpWithdrawRequestPending){
            return lpWithdrawRequestTimestamp + lpWithdrawRequestDuration;
        }
        else {
            return 0;  // 0 means no open requests
        }
    }

    function withdrawRequestedLP() external onlyOwner {
        require(block.timestamp >= nextAvailableLpWithdrawDate() && nextAvailableLpWithdrawDate() > 0, "Must request and wait.");
        lpWithdrawRequestTimestamp = 0;
        lpWithdrawRequestPending = false;

        uint256 amtToWithdraw = IERC20(address(uniswapV2Pair)).balanceOf(address(this)) * lpPercToWithDraw / 100;
        
        lpPercToWithDraw = 0;

        IERC20(uniswapV2Pair).transfer(msg.sender, amtToWithdraw);
    }

   
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"CanceledLpWithdrawRequest","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"DevWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludedMaxTransactionAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"GasForProcessingUpdated","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":[],"name":"RequestedLPWithdraw","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":"tokensIntoLiqudity","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":[],"name":"WithdrewLPForMigration","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":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"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":[],"name":"feeDivisor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gasForProcessing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityActiveBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquiditySellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPercToWithDraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpWithdrawRequestDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpWithdrawRequestPending","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpWithdrawRequestTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"nextAvailableLpWithdrawDate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"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":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBuyFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSellFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"updateGasForProcessing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawRequestedLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c060405260006009556000600a556001600b60006101000a81548160ff0219169083151502179055506000600b60016101000a81548160ff0219169083151502179055506000600b60026101000a81548160ff02191690831515021790555060006011556203f4806013553480156200007857600080fd5b506040518060400160405280600281526020017f58500000000000000000000000000000000000000000000000000000000000008152506040518060400160405280600281526020017f58500000000000000000000000000000000000000000000000000000000000008152508160039080519060200190620000fd92919062000a3d565b5080600490805190602001906200011692919062000a3d565b50505060006200012b6200056d60201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35060006b033b2e3c9fd0803ce800000090506103e8601482620001ed919062000d08565b620001f9919062000cd0565b60068190555061271060058262000211919062000d08565b6200021d919062000cd0565b6007819055506103e860148262000235919062000d08565b62000241919062000cd0565b6008819055506014600f81905550600f54600e819055506014600d81905550600d54600c819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620002cb57600080fd5b505afa158015620002e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000306919062000b04565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200036957600080fd5b505afa1580156200037e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003a4919062000b04565b6040518363ffffffff1660e01b8152600401620003c392919062000bb7565b602060405180830381600087803b158015620003de57600080fd5b505af1158015620003f3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000419919062000b04565b90508173ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b815250506200049c8160016200057560201b60201c565b620004be620004b06200062860201b60201c565b60016200065260201b60201c565b620004d13060016200065260201b60201c565b620004e661dead60016200065260201b60201c565b62000508620004fa6200062860201b60201c565b60016200079f60201b60201c565b6200051b3060016200079f60201b60201c565b6200052e8260016200079f60201b60201c565b6200054361dead60016200079f60201b60201c565b62000564620005576200062860201b60201c565b84620008ec60201b60201c565b50505062000ee7565b600033905090565b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620005de82826200079f60201b60201c565b8015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620006626200056d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620006f4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006eb9062000c01565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000793919062000be4565b60405180910390a25050565b620007af6200056d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000841576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008389062000c01565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f575f9d01836c9206322151b9e9ec3f2b77b87e71176933b9b44d2d732f768d9582604051620008e0919062000be4565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200095f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009569062000c23565b60405180910390fd5b806002600082825462000973919062000c73565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620009ca919062000c73565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000a31919062000c45565b60405180910390a35050565b82805462000a4b9062000db3565b90600052602060002090601f01602090048101928262000a6f576000855562000abb565b82601f1062000a8a57805160ff191683800117855562000abb565b8280016001018555821562000abb579182015b8281111562000aba57825182559160200191906001019062000a9d565b5b50905062000aca919062000ace565b5090565b5b8082111562000ae957600081600090555060010162000acf565b5090565b60008151905062000afe8162000ecd565b92915050565b60006020828403121562000b1d5762000b1c62000e76565b5b600062000b2d8482850162000aed565b91505092915050565b62000b418162000d69565b82525050565b62000b528162000d7d565b82525050565b600062000b6760208362000c62565b915062000b748262000e7b565b602082019050919050565b600062000b8e601f8362000c62565b915062000b9b8262000ea4565b602082019050919050565b62000bb18162000da9565b82525050565b600060408201905062000bce600083018562000b36565b62000bdd602083018462000b36565b9392505050565b600060208201905062000bfb600083018462000b47565b92915050565b6000602082019050818103600083015262000c1c8162000b58565b9050919050565b6000602082019050818103600083015262000c3e8162000b7f565b9050919050565b600060208201905062000c5c600083018462000ba6565b92915050565b600082825260208201905092915050565b600062000c808262000da9565b915062000c8d8362000da9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000cc55762000cc462000de9565b5b828201905092915050565b600062000cdd8262000da9565b915062000cea8362000da9565b92508262000cfd5762000cfc62000e18565b5b828204905092915050565b600062000d158262000da9565b915062000d228362000da9565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000d5e5762000d5d62000de9565b5b828202905092915050565b600062000d768262000d89565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000600282049050600182168062000dcc57607f821691505b6020821081141562000de35762000de262000e47565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b62000ed88162000d69565b811462000ee457600080fd5b50565b60805160601c60a05160601c61520c62000f4b60003960008181611009015281816116880152818161174f0152611dea015260008181610cff01528181613877015281816139670152818161398e01528181613a2a0152613a51015261520c6000f3fe6080604052600436106103035760003560e01c8063871c128d11610190578063c0246668116100dc578063e2f4560511610095578063ee44b44e1161006f578063ee44b44e14610b71578063f2fde38b14610b9c578063f8b45b0514610bc5578063fd361d0e14610bf05761030a565b8063e2f4560514610af2578063eba4c33314610b1d578063ee40166e14610b465761030a565b8063c0246668146109e2578063c18bc19514610a0b578063c8c8ebe414610a34578063ccb6135814610a5f578063d0a3981414610a8a578063dd62ed3e14610ab55761030a565b80639a7a23d611610149578063a9059cbb11610123578063a9059cbb14610912578063b62496f51461094f578063b9e937001461098c578063bbc0c742146109b75761030a565b80639a7a23d6146108815780639c1b8af5146108aa578063a457c2d7146108d55761030a565b8063871c128d146107975780638a8c523c146107c05780638da5cb5b146107d7578063924de9b71461080257806395d89b411461082b5780639a36f932146108565761030a565b806349bd5a5e1161024f578063715018a6116102085780637571336a116101e25780637571336a14610715578063763cef491461073e578063783102eb146107555780637fa787ba146107805761030a565b8063715018a6146106aa57806371fc4688146106c1578063751039fc146106ea5761030a565b806349bd5a5e146105845780634a62bb65146105af5780634fbee193146105da5780636ddd17131461061757806370a0823114610642578063712c29851461067f5761030a565b80631694505e116102bc578063203e727e11610296578063203e727e146104b657806323b872dd146104df578063313ce5671461051c57806339509351146105475761030a565b80631694505e1461043557806318160ddd146104605780631a8145bb1461048b5761030a565b8063058054c91461030f57806306fdde031461033a578063095ea7b314610365578063099d0d30146103a25780630f4432e3146103cd57806310d5de53146103f85761030a565b3661030a57005b600080fd5b34801561031b57600080fd5b50610324610c1b565b604051610331919061471a565b60405180910390f35b34801561034657600080fd5b5061034f610c21565b60405161035c9190614418565b60405180910390f35b34801561037157600080fd5b5061038c60048036038101906103879190613d81565b610cb3565b60405161039991906143e2565b60405180910390f35b3480156103ae57600080fd5b506103b7610cd1565b6040516103c4919061471a565b60405180910390f35b3480156103d957600080fd5b506103e2610cd7565b6040516103ef919061471a565b60405180910390f35b34801561040457600080fd5b5061041f600480360381019061041a9190613c54565b610cdd565b60405161042c91906143e2565b60405180910390f35b34801561044157600080fd5b5061044a610cfd565b60405161045791906143fd565b60405180910390f35b34801561046c57600080fd5b50610475610d21565b604051610482919061471a565b60405180910390f35b34801561049757600080fd5b506104a0610d2b565b6040516104ad919061471a565b60405180910390f35b3480156104c257600080fd5b506104dd60048036038101906104d89190613e1b565b610d31565b005b3480156104eb57600080fd5b5061050660048036038101906105019190613cee565b610e5a565b60405161051391906143e2565b60405180910390f35b34801561052857600080fd5b50610531610f52565b60405161053e91906147c6565b60405180910390f35b34801561055357600080fd5b5061056e60048036038101906105699190613d81565b610f5b565b60405161057b91906143e2565b60405180910390f35b34801561059057600080fd5b50610599611007565b6040516105a6919061433d565b60405180910390f35b3480156105bb57600080fd5b506105c461102b565b6040516105d191906143e2565b60405180910390f35b3480156105e657600080fd5b5061060160048036038101906105fc9190613c54565b61103e565b60405161060e91906143e2565b60405180910390f35b34801561062357600080fd5b5061062c611094565b60405161063991906143e2565b60405180910390f35b34801561064e57600080fd5b5061066960048036038101906106649190613c54565b6110a7565b604051610676919061471a565b60405180910390f35b34801561068b57600080fd5b506106946110ef565b6040516106a1919061471a565b60405180910390f35b3480156106b657600080fd5b506106bf611125565b005b3480156106cd57600080fd5b506106e860048036038101906106e39190613e1b565b61127d565b005b3480156106f657600080fd5b506106ff61136d565b60405161070c91906143e2565b60405180910390f35b34801561072157600080fd5b5061073c60048036038101906107379190613d41565b611428565b005b34801561074a57600080fd5b50610753611568565b005b34801561076157600080fd5b5061076a6117fe565b604051610777919061471a565b60405180910390f35b34801561078c57600080fd5b50610795611804565b005b3480156107a357600080fd5b506107be60048036038101906107b99190613e1b565b61194a565b005b3480156107cc57600080fd5b506107d5611ab5565b005b3480156107e357600080fd5b506107ec611bdb565b6040516107f9919061433d565b60405180910390f35b34801561080e57600080fd5b5061082960048036038101906108249190613dc1565b611c05565b005b34801561083757600080fd5b50610840611cb9565b60405161084d9190614418565b60405180910390f35b34801561086257600080fd5b5061086b611d4b565b604051610878919061471a565b60405180910390f35b34801561088d57600080fd5b506108a860048036038101906108a39190613d41565b611d51565b005b3480156108b657600080fd5b506108bf611e85565b6040516108cc919061471a565b60405180910390f35b3480156108e157600080fd5b506108fc60048036038101906108f79190613d81565b611e8b565b60405161090991906143e2565b60405180910390f35b34801561091e57600080fd5b5061093960048036038101906109349190613d81565b611f76565b60405161094691906143e2565b60405180910390f35b34801561095b57600080fd5b5061097660048036038101906109719190613c54565b611f94565b60405161098391906143e2565b60405180910390f35b34801561099857600080fd5b506109a1611fb4565b6040516109ae919061471a565b60405180910390f35b3480156109c357600080fd5b506109cc611fba565b6040516109d991906143e2565b60405180910390f35b3480156109ee57600080fd5b50610a096004803603810190610a049190613d41565b611fcd565b005b348015610a1757600080fd5b50610a326004803603810190610a2d9190613e1b565b61210d565b005b348015610a4057600080fd5b50610a49612235565b604051610a56919061471a565b60405180910390f35b348015610a6b57600080fd5b50610a7461223b565b604051610a81919061471a565b60405180910390f35b348015610a9657600080fd5b50610a9f612241565b604051610aac919061471a565b60405180910390f35b348015610ac157600080fd5b50610adc6004803603810190610ad79190613cae565b612247565b604051610ae9919061471a565b60405180910390f35b348015610afe57600080fd5b50610b076122ce565b604051610b14919061471a565b60405180910390f35b348015610b2957600080fd5b50610b446004803603810190610b3f9190613e1b565b6122d4565b005b348015610b5257600080fd5b50610b5b6123c4565b604051610b68919061471a565b60405180910390f35b348015610b7d57600080fd5b50610b866123ca565b604051610b93919061471a565b60405180910390f35b348015610ba857600080fd5b50610bc36004803603810190610bbe9190613c54565b6123d0565b005b348015610bd157600080fd5b50610bda612597565b604051610be7919061471a565b60405180910390f35b348015610bfc57600080fd5b50610c0561259d565b604051610c1291906143e2565b60405180910390f35b60125481565b606060038054610c3090614a26565b80601f0160208091040260200160405190810160405280929190818152602001828054610c5c90614a26565b8015610ca95780601f10610c7e57610100808354040283529160200191610ca9565b820191906000526020600020905b815481529060010190602001808311610c8c57829003601f168201915b5050505050905090565b6000610cc7610cc06125b0565b84846125b8565b6001905092915050565b600d5481565b60095481565b60176020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b60105481565b610d396125b0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610dc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbf906145da565b60405180910390fd5b670de0b6b3a76400006103e86001610dde610d21565b610de891906148c8565b610df29190614897565b610dfc9190614897565b8111610e3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e34906146fa565b60405180910390fd5b670de0b6b3a764000081610e5191906148c8565b60068190555050565b6000610e67848484612783565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610eb26125b0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610f32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f29906145ba565b60405180910390fd5b610f4685610f3e6125b0565b8584036125b8565b60019150509392505050565b60006012905090565b6000610ffd610f686125b0565b848460016000610f766125b0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ff89190614841565b6125b8565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b60009054906101000a900460ff1681565b6000601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000601460009054906101000a900460ff161561111d576013546012546111169190614841565b9050611122565b600090505b90565b61112d6125b0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b3906145da565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6112856125b0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611314576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130b906145da565b60405180910390fd5b80600f81905550600f54600e819055506064600e54111561136a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113619061447a565b60405180910390fd5b50565b60006113776125b0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611406576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fd906145da565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b6114306125b0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b6906145da565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f575f9d01836c9206322151b9e9ec3f2b77b87e71176933b9b44d2d732f768d958260405161155c91906143e2565b60405180910390a25050565b6115706125b0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f6906145da565b60405180910390fd5b6116076110ef565b421015801561161d5750600061161b6110ef565b115b61165c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116539061469a565b60405180910390fd5b60006012819055506000601460006101000a81548160ff021916908315150217905550600060646015547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016116df919061433d565b60206040518083038186803b1580156116f757600080fd5b505afa15801561170b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061172f9190613e48565b61173991906148c8565b6117439190614897565b905060006015819055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016117a8929190614358565b602060405180830381600087803b1580156117c257600080fd5b505af11580156117d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117fa9190613dee565b5050565b60155481565b61180c6125b0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461189b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611892906145da565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff16476040516118c190614328565b60006040518083038185875af1925050503d80600081146118fe576040519150601f19603f3d011682016040523d82523d6000602084013e611903565b606091505b5050905080611947576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193e906145fa565b60405180910390fd5b50565b6119526125b0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d8906145da565b60405180910390fd5b62030d4081101580156119f757506207a1208111155b611a36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2d9061467a565b60405180910390fd5b601154811415611a7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a72906144da565b60405180910390fd5b601154817f40d7e40e79af4e8e5a9b3c57030d8ea93f13d669c06d448c4d631d4ae7d23db760405160405180910390a38060118190555050565b611abd6125b0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b43906145da565b60405180910390fd5b600b60019054906101000a900460ff1615611b9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b939061455a565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff02191690831515021790555043600a81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611c0d6125b0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c93906145da565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b606060048054611cc890614a26565b80601f0160208091040260200160405190810160405280929190818152602001828054611cf490614a26565b8015611d415780601f10611d1657610100808354040283529160200191611d41565b820191906000526020600020905b815481529060010190602001808311611d2457829003601f168201915b5050505050905090565b6103e881565b611d596125b0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611de8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ddf906145da565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6e9061443a565b60405180910390fd5b611e8182826132ab565b5050565b60115481565b60008060016000611e9a6125b0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611f57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4e906146ba565b60405180910390fd5b611f6b611f626125b0565b858584036125b8565b600191505092915050565b6000611f8a611f836125b0565b8484612783565b6001905092915050565b60186020528060005260406000206000915054906101000a900460ff1681565b600e5481565b600b60019054906101000a900460ff1681565b611fd56125b0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612064576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205b906145da565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161210191906143e2565b60405180910390a25050565b6121156125b0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219b906145da565b60405180910390fd5b670de0b6b3a7640000606460016121b9610d21565b6121c391906148c8565b6121cd9190614897565b6121d79190614897565b8111612218576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220f906144fa565b60405180910390fd5b670de0b6b3a76400008161222c91906148c8565b60088190555050565b60065481565b600f5481565b600c5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60075481565b6122dc6125b0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461236b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612362906145da565b60405180910390fd5b80600d81905550600d54600c819055506064600c5411156123c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b89061447a565b60405180910390fd5b50565b600a5481565b60135481565b6123d86125b0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612467576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245e906145da565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156124d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ce9061449a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60085481565b601460009054906101000a900460ff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612628576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261f9061465a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268f906144ba565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612776919061471a565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156127f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ea9061463a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612863576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285a9061445a565b60405180910390fd5b600081141561287d5761287883836000613356565b6132a6565b600b60019054906101000a900460ff1661297257601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806129325750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612971576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612968906146da565b60405180910390fd5b5b600b60009054906101000a900460ff1615612d785761298f611bdb565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156129fd57506129cd611bdb565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a365750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a70575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a895750600560149054906101000a900460ff16155b15612d7757601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612b315750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612bd857600654811115612b7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b729061457a565b60405180910390fd5b600854612b87836110a7565b82612b929190614841565b1115612bd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bca9061461a565b60405180910390fd5b612d76565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612c7b5750601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612cca57600654811115612cc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cbc9061453a565b60405180910390fd5b612d75565b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612d7457600854612d27836110a7565b82612d329190614841565b1115612d73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d6a9061461a565b60405180910390fd5b5b5b5b5b5b6000612d83306110a7565b905060006007548210159050808015612da85750600b60029054906101000a900460ff165b8015612dc15750600560149054906101000a900460ff16155b8015612e175750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e6d5750601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612ec35750601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612f07576001600560146101000a81548160ff021916908315150217905550612eeb6135c1565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612fbd5750601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612fc757600090505b6000811561329657436001600a54612fdf9190614841565b1015801561308a5750601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806130895750601860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b5b156130ee576130b660646130a86063886136c990919063ffffffff16565b61374490919063ffffffff16565b905060636021826130c791906148c8565b6130d19190614897565b601060008282546130e29190614841565b92505081905550613272565b601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561314957506000600c54115b156131b1576131776103e8613169600c54886136c990919063ffffffff16565b61374490919063ffffffff16565b9050600c54600d548261318a91906148c8565b6131949190614897565b601060008282546131a59190614841565b92505081905550613271565b601860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561320c57506000600e54115b156132705761323a6103e861322c600e54886136c990919063ffffffff16565b61374490919063ffffffff16565b9050600e54600f548261324d91906148c8565b6132579190614897565b601060008282546132689190614841565b925050819055505b5b5b600081111561328757613286873083613356565b5b80856132939190614922565b94505b6132a1878787613356565b505050505b505050565b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061330c8282611428565b8015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156133c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133bd9061463a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613436576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161342d9061445a565b60405180910390fd5b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156134bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134b39061451a565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461354f9190614841565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516135b3919061471a565b60405180910390a350505050565b60006135cc306110a7565b90506000601054905060008214806135e45750600081145b156135f05750506136c7565b60006002826010548561360391906148c8565b61360d9190614897565b6136179190614897565b9050600061362e828561378e90919063ffffffff16565b9050600047905061363e826137d8565b6000613653824761378e90919063ffffffff16565b9050600081905060006010819055506000851180156136725750600081115b156136bf576136818582613a24565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56184826010546040516136b69392919061478f565b60405180910390a15b505050505050505b565b6000808314156136dc576000905061373e565b600082846136ea91906148c8565b90508284826136f99190614897565b14613739576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137309061459a565b60405180910390fd5b809150505b92915050565b600061378683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613b0f565b905092915050565b60006137d083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613b72565b905092915050565b6000600267ffffffffffffffff8111156137f5576137f4614b14565b5b6040519080825280602002602001820160405280156138235781602001602082028036833780820191505090505b509050308160008151811061383b5761383a614ae5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156138db57600080fd5b505afa1580156138ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139139190613c81565b8160018151811061392757613926614ae5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061398c307f0000000000000000000000000000000000000000000000000000000000000000846125b8565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016139ee959493929190614735565b600060405180830381600087803b158015613a0857600080fd5b505af1158015613a1c573d6000803e3d6000fd5b505050505050565b613a4f307f0000000000000000000000000000000000000000000000000000000000000000846125b8565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b8152600401613ab696959493929190614381565b6060604051808303818588803b158015613acf57600080fd5b505af1158015613ae3573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613b089190613e75565b5050505050565b60008083118290613b56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b4d9190614418565b60405180910390fd5b5060008385613b659190614897565b9050809150509392505050565b6000838311158290613bba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bb19190614418565b60405180910390fd5b5060008385613bc99190614922565b9050809150509392505050565b600081359050613be581615191565b92915050565b600081519050613bfa81615191565b92915050565b600081359050613c0f816151a8565b92915050565b600081519050613c24816151a8565b92915050565b600081359050613c39816151bf565b92915050565b600081519050613c4e816151bf565b92915050565b600060208284031215613c6a57613c69614b43565b5b6000613c7884828501613bd6565b91505092915050565b600060208284031215613c9757613c96614b43565b5b6000613ca584828501613beb565b91505092915050565b60008060408385031215613cc557613cc4614b43565b5b6000613cd385828601613bd6565b9250506020613ce485828601613bd6565b9150509250929050565b600080600060608486031215613d0757613d06614b43565b5b6000613d1586828701613bd6565b9350506020613d2686828701613bd6565b9250506040613d3786828701613c2a565b9150509250925092565b60008060408385031215613d5857613d57614b43565b5b6000613d6685828601613bd6565b9250506020613d7785828601613c00565b9150509250929050565b60008060408385031215613d9857613d97614b43565b5b6000613da685828601613bd6565b9250506020613db785828601613c2a565b9150509250929050565b600060208284031215613dd757613dd6614b43565b5b6000613de584828501613c00565b91505092915050565b600060208284031215613e0457613e03614b43565b5b6000613e1284828501613c15565b91505092915050565b600060208284031215613e3157613e30614b43565b5b6000613e3f84828501613c2a565b91505092915050565b600060208284031215613e5e57613e5d614b43565b5b6000613e6c84828501613c3f565b91505092915050565b600080600060608486031215613e8e57613e8d614b43565b5b6000613e9c86828701613c3f565b9350506020613ead86828701613c3f565b9250506040613ebe86828701613c3f565b9150509250925092565b6000613ed48383613ee0565b60208301905092915050565b613ee981614956565b82525050565b613ef881614956565b82525050565b6000613f09826147f1565b613f138185614814565b9350613f1e836147e1565b8060005b83811015613f4f578151613f368882613ec8565b9750613f4183614807565b925050600181019050613f22565b5085935050505092915050565b613f6581614968565b82525050565b613f74816149ab565b82525050565b613f83816149bd565b82525050565b6000613f94826147fc565b613f9e8185614830565b9350613fae8185602086016149f3565b613fb781614b48565b840191505092915050565b6000613fcf604583614830565b9150613fda82614b59565b606082019050919050565b6000613ff2602383614830565b9150613ffd82614bce565b604082019050919050565b6000614015601d83614830565b915061402082614c1d565b602082019050919050565b6000614038602683614830565b915061404382614c46565b604082019050919050565b600061405b602283614830565b915061406682614c95565b604082019050919050565b600061407e602c83614830565b915061408982614ce4565b604082019050919050565b60006140a1602283614830565b91506140ac82614d33565b604082019050919050565b60006140c4602683614830565b91506140cf82614d82565b604082019050919050565b60006140e7603683614830565b91506140f282614dd1565b604082019050919050565b600061410a601883614830565b915061411582614e20565b602082019050919050565b600061412d603583614830565b915061413882614e49565b604082019050919050565b6000614150602183614830565b915061415b82614e98565b604082019050919050565b6000614173602883614830565b915061417e82614ee7565b604082019050919050565b6000614196602083614830565b91506141a182614f36565b602082019050919050565b60006141b9601283614830565b91506141c482614f5f565b602082019050919050565b60006141dc601b83614830565b91506141e782614f88565b602082019050919050565b60006141ff602583614830565b915061420a82614fb1565b604082019050919050565b6000614222600083614825565b915061422d82615000565b600082019050919050565b6000614245602483614830565b915061425082615003565b604082019050919050565b6000614268603583614830565b915061427382615052565b604082019050919050565b600061428b601683614830565b9150614296826150a1565b602082019050919050565b60006142ae602583614830565b91506142b9826150ca565b604082019050919050565b60006142d1601a83614830565b91506142dc82615119565b602082019050919050565b60006142f4602f83614830565b91506142ff82615142565b604082019050919050565b61431381614994565b82525050565b6143228161499e565b82525050565b600061433382614215565b9150819050919050565b60006020820190506143526000830184613eef565b92915050565b600060408201905061436d6000830185613eef565b61437a602083018461430a565b9392505050565b600060c0820190506143966000830189613eef565b6143a3602083018861430a565b6143b06040830187613f7a565b6143bd6060830186613f7a565b6143ca6080830185613eef565b6143d760a083018461430a565b979650505050505050565b60006020820190506143f76000830184613f5c565b92915050565b60006020820190506144126000830184613f6b565b92915050565b600060208201905081810360008301526144328184613f89565b905092915050565b6000602082019050818103600083015261445381613fc2565b9050919050565b6000602082019050818103600083015261447381613fe5565b9050919050565b6000602082019050818103600083015261449381614008565b9050919050565b600060208201905081810360008301526144b38161402b565b9050919050565b600060208201905081810360008301526144d38161404e565b9050919050565b600060208201905081810360008301526144f381614071565b9050919050565b6000602082019050818103600083015261451381614094565b9050919050565b60006020820190508181036000830152614533816140b7565b9050919050565b60006020820190508181036000830152614553816140da565b9050919050565b60006020820190508181036000830152614573816140fd565b9050919050565b6000602082019050818103600083015261459381614120565b9050919050565b600060208201905081810360008301526145b381614143565b9050919050565b600060208201905081810360008301526145d381614166565b9050919050565b600060208201905081810360008301526145f381614189565b9050919050565b60006020820190508181036000830152614613816141ac565b9050919050565b60006020820190508181036000830152614633816141cf565b9050919050565b60006020820190508181036000830152614653816141f2565b9050919050565b6000602082019050818103600083015261467381614238565b9050919050565b600060208201905081810360008301526146938161425b565b9050919050565b600060208201905081810360008301526146b38161427e565b9050919050565b600060208201905081810360008301526146d3816142a1565b9050919050565b600060208201905081810360008301526146f3816142c4565b9050919050565b60006020820190508181036000830152614713816142e7565b9050919050565b600060208201905061472f600083018461430a565b92915050565b600060a08201905061474a600083018861430a565b6147576020830187613f7a565b81810360408301526147698186613efe565b90506147786060830185613eef565b614785608083018461430a565b9695505050505050565b60006060820190506147a4600083018661430a565b6147b1602083018561430a565b6147be604083018461430a565b949350505050565b60006020820190506147db6000830184614319565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600061484c82614994565b915061485783614994565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561488c5761488b614a58565b5b828201905092915050565b60006148a282614994565b91506148ad83614994565b9250826148bd576148bc614a87565b5b828204905092915050565b60006148d382614994565b91506148de83614994565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561491757614916614a58565b5b828202905092915050565b600061492d82614994565b915061493883614994565b92508282101561494b5761494a614a58565b5b828203905092915050565b600061496182614974565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006149b6826149cf565b9050919050565b60006149c882614994565b9050919050565b60006149da826149e1565b9050919050565b60006149ec82614974565b9050919050565b60005b83811015614a115780820151818401526020810190506149f6565b83811115614a20576000848401525b50505050565b60006002820490506001821680614a3e57607f821691505b60208210811415614a5257614a51614ab6565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f5468652050616e63616b655377617020706169722063616e6e6f74206265207260008201527f656d6f7665642066726f6d206175746f6d617465644d61726b65744d616b657260208201527f5061697273000000000000000000000000000000000000000000000000000000604082015250565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f4d757374206b656570206665657320617420313025206f72206c657373000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f43616e6e6f742075706461746520676173466f7250726f63657373696e67207460008201527f6f2073616d652076616c75650000000000000000000000000000000000000000602082015250565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b7f43616e6e6f742072652d656e61626c652074726164696e670000000000000000600082015250565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f6661696c656420746f2077697468647261770000000000000000000000000000600082015250565b7f556e61626c6520746f20657863656564204d61782057616c6c65740000000000600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b50565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f20676173466f7250726f63657373696e67206d7573742062652062657477656560008201527f6e203230302c30303020616e64203530302c3030300000000000000000000000602082015250565b7f4d757374207265717565737420616e6420776169742e00000000000000000000600082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f54726164696e67206973206e6f7420616374697665207965742e000000000000600082015250565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b61519a81614956565b81146151a557600080fd5b50565b6151b181614968565b81146151bc57600080fd5b50565b6151c881614994565b81146151d357600080fd5b5056fea2646970667358221220679a874f154d6eeabbb7a98f61187eb65f21c2e6f1a484073b0a0360761ae0f564736f6c63430008070033

Deployed Bytecode

0x6080604052600436106103035760003560e01c8063871c128d11610190578063c0246668116100dc578063e2f4560511610095578063ee44b44e1161006f578063ee44b44e14610b71578063f2fde38b14610b9c578063f8b45b0514610bc5578063fd361d0e14610bf05761030a565b8063e2f4560514610af2578063eba4c33314610b1d578063ee40166e14610b465761030a565b8063c0246668146109e2578063c18bc19514610a0b578063c8c8ebe414610a34578063ccb6135814610a5f578063d0a3981414610a8a578063dd62ed3e14610ab55761030a565b80639a7a23d611610149578063a9059cbb11610123578063a9059cbb14610912578063b62496f51461094f578063b9e937001461098c578063bbc0c742146109b75761030a565b80639a7a23d6146108815780639c1b8af5146108aa578063a457c2d7146108d55761030a565b8063871c128d146107975780638a8c523c146107c05780638da5cb5b146107d7578063924de9b71461080257806395d89b411461082b5780639a36f932146108565761030a565b806349bd5a5e1161024f578063715018a6116102085780637571336a116101e25780637571336a14610715578063763cef491461073e578063783102eb146107555780637fa787ba146107805761030a565b8063715018a6146106aa57806371fc4688146106c1578063751039fc146106ea5761030a565b806349bd5a5e146105845780634a62bb65146105af5780634fbee193146105da5780636ddd17131461061757806370a0823114610642578063712c29851461067f5761030a565b80631694505e116102bc578063203e727e11610296578063203e727e146104b657806323b872dd146104df578063313ce5671461051c57806339509351146105475761030a565b80631694505e1461043557806318160ddd146104605780631a8145bb1461048b5761030a565b8063058054c91461030f57806306fdde031461033a578063095ea7b314610365578063099d0d30146103a25780630f4432e3146103cd57806310d5de53146103f85761030a565b3661030a57005b600080fd5b34801561031b57600080fd5b50610324610c1b565b604051610331919061471a565b60405180910390f35b34801561034657600080fd5b5061034f610c21565b60405161035c9190614418565b60405180910390f35b34801561037157600080fd5b5061038c60048036038101906103879190613d81565b610cb3565b60405161039991906143e2565b60405180910390f35b3480156103ae57600080fd5b506103b7610cd1565b6040516103c4919061471a565b60405180910390f35b3480156103d957600080fd5b506103e2610cd7565b6040516103ef919061471a565b60405180910390f35b34801561040457600080fd5b5061041f600480360381019061041a9190613c54565b610cdd565b60405161042c91906143e2565b60405180910390f35b34801561044157600080fd5b5061044a610cfd565b60405161045791906143fd565b60405180910390f35b34801561046c57600080fd5b50610475610d21565b604051610482919061471a565b60405180910390f35b34801561049757600080fd5b506104a0610d2b565b6040516104ad919061471a565b60405180910390f35b3480156104c257600080fd5b506104dd60048036038101906104d89190613e1b565b610d31565b005b3480156104eb57600080fd5b5061050660048036038101906105019190613cee565b610e5a565b60405161051391906143e2565b60405180910390f35b34801561052857600080fd5b50610531610f52565b60405161053e91906147c6565b60405180910390f35b34801561055357600080fd5b5061056e60048036038101906105699190613d81565b610f5b565b60405161057b91906143e2565b60405180910390f35b34801561059057600080fd5b50610599611007565b6040516105a6919061433d565b60405180910390f35b3480156105bb57600080fd5b506105c461102b565b6040516105d191906143e2565b60405180910390f35b3480156105e657600080fd5b5061060160048036038101906105fc9190613c54565b61103e565b60405161060e91906143e2565b60405180910390f35b34801561062357600080fd5b5061062c611094565b60405161063991906143e2565b60405180910390f35b34801561064e57600080fd5b5061066960048036038101906106649190613c54565b6110a7565b604051610676919061471a565b60405180910390f35b34801561068b57600080fd5b506106946110ef565b6040516106a1919061471a565b60405180910390f35b3480156106b657600080fd5b506106bf611125565b005b3480156106cd57600080fd5b506106e860048036038101906106e39190613e1b565b61127d565b005b3480156106f657600080fd5b506106ff61136d565b60405161070c91906143e2565b60405180910390f35b34801561072157600080fd5b5061073c60048036038101906107379190613d41565b611428565b005b34801561074a57600080fd5b50610753611568565b005b34801561076157600080fd5b5061076a6117fe565b604051610777919061471a565b60405180910390f35b34801561078c57600080fd5b50610795611804565b005b3480156107a357600080fd5b506107be60048036038101906107b99190613e1b565b61194a565b005b3480156107cc57600080fd5b506107d5611ab5565b005b3480156107e357600080fd5b506107ec611bdb565b6040516107f9919061433d565b60405180910390f35b34801561080e57600080fd5b5061082960048036038101906108249190613dc1565b611c05565b005b34801561083757600080fd5b50610840611cb9565b60405161084d9190614418565b60405180910390f35b34801561086257600080fd5b5061086b611d4b565b604051610878919061471a565b60405180910390f35b34801561088d57600080fd5b506108a860048036038101906108a39190613d41565b611d51565b005b3480156108b657600080fd5b506108bf611e85565b6040516108cc919061471a565b60405180910390f35b3480156108e157600080fd5b506108fc60048036038101906108f79190613d81565b611e8b565b60405161090991906143e2565b60405180910390f35b34801561091e57600080fd5b5061093960048036038101906109349190613d81565b611f76565b60405161094691906143e2565b60405180910390f35b34801561095b57600080fd5b5061097660048036038101906109719190613c54565b611f94565b60405161098391906143e2565b60405180910390f35b34801561099857600080fd5b506109a1611fb4565b6040516109ae919061471a565b60405180910390f35b3480156109c357600080fd5b506109cc611fba565b6040516109d991906143e2565b60405180910390f35b3480156109ee57600080fd5b50610a096004803603810190610a049190613d41565b611fcd565b005b348015610a1757600080fd5b50610a326004803603810190610a2d9190613e1b565b61210d565b005b348015610a4057600080fd5b50610a49612235565b604051610a56919061471a565b60405180910390f35b348015610a6b57600080fd5b50610a7461223b565b604051610a81919061471a565b60405180910390f35b348015610a9657600080fd5b50610a9f612241565b604051610aac919061471a565b60405180910390f35b348015610ac157600080fd5b50610adc6004803603810190610ad79190613cae565b612247565b604051610ae9919061471a565b60405180910390f35b348015610afe57600080fd5b50610b076122ce565b604051610b14919061471a565b60405180910390f35b348015610b2957600080fd5b50610b446004803603810190610b3f9190613e1b565b6122d4565b005b348015610b5257600080fd5b50610b5b6123c4565b604051610b68919061471a565b60405180910390f35b348015610b7d57600080fd5b50610b866123ca565b604051610b93919061471a565b60405180910390f35b348015610ba857600080fd5b50610bc36004803603810190610bbe9190613c54565b6123d0565b005b348015610bd157600080fd5b50610bda612597565b604051610be7919061471a565b60405180910390f35b348015610bfc57600080fd5b50610c0561259d565b604051610c1291906143e2565b60405180910390f35b60125481565b606060038054610c3090614a26565b80601f0160208091040260200160405190810160405280929190818152602001828054610c5c90614a26565b8015610ca95780601f10610c7e57610100808354040283529160200191610ca9565b820191906000526020600020905b815481529060010190602001808311610c8c57829003601f168201915b5050505050905090565b6000610cc7610cc06125b0565b84846125b8565b6001905092915050565b600d5481565b60095481565b60176020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b60105481565b610d396125b0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610dc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbf906145da565b60405180910390fd5b670de0b6b3a76400006103e86001610dde610d21565b610de891906148c8565b610df29190614897565b610dfc9190614897565b8111610e3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e34906146fa565b60405180910390fd5b670de0b6b3a764000081610e5191906148c8565b60068190555050565b6000610e67848484612783565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610eb26125b0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610f32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f29906145ba565b60405180910390fd5b610f4685610f3e6125b0565b8584036125b8565b60019150509392505050565b60006012905090565b6000610ffd610f686125b0565b848460016000610f766125b0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ff89190614841565b6125b8565b6001905092915050565b7f00000000000000000000000069221565c56741f97bef75c7adb73d584fc72f7b81565b600b60009054906101000a900460ff1681565b6000601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000601460009054906101000a900460ff161561111d576013546012546111169190614841565b9050611122565b600090505b90565b61112d6125b0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b3906145da565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6112856125b0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611314576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130b906145da565b60405180910390fd5b80600f81905550600f54600e819055506064600e54111561136a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113619061447a565b60405180910390fd5b50565b60006113776125b0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611406576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fd906145da565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b6114306125b0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b6906145da565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f575f9d01836c9206322151b9e9ec3f2b77b87e71176933b9b44d2d732f768d958260405161155c91906143e2565b60405180910390a25050565b6115706125b0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f6906145da565b60405180910390fd5b6116076110ef565b421015801561161d5750600061161b6110ef565b115b61165c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116539061469a565b60405180910390fd5b60006012819055506000601460006101000a81548160ff021916908315150217905550600060646015547f00000000000000000000000069221565c56741f97bef75c7adb73d584fc72f7b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016116df919061433d565b60206040518083038186803b1580156116f757600080fd5b505afa15801561170b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061172f9190613e48565b61173991906148c8565b6117439190614897565b905060006015819055507f00000000000000000000000069221565c56741f97bef75c7adb73d584fc72f7b73ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016117a8929190614358565b602060405180830381600087803b1580156117c257600080fd5b505af11580156117d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117fa9190613dee565b5050565b60155481565b61180c6125b0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461189b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611892906145da565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff16476040516118c190614328565b60006040518083038185875af1925050503d80600081146118fe576040519150601f19603f3d011682016040523d82523d6000602084013e611903565b606091505b5050905080611947576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193e906145fa565b60405180910390fd5b50565b6119526125b0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d8906145da565b60405180910390fd5b62030d4081101580156119f757506207a1208111155b611a36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2d9061467a565b60405180910390fd5b601154811415611a7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a72906144da565b60405180910390fd5b601154817f40d7e40e79af4e8e5a9b3c57030d8ea93f13d669c06d448c4d631d4ae7d23db760405160405180910390a38060118190555050565b611abd6125b0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b43906145da565b60405180910390fd5b600b60019054906101000a900460ff1615611b9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b939061455a565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff02191690831515021790555043600a81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611c0d6125b0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c93906145da565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b606060048054611cc890614a26565b80601f0160208091040260200160405190810160405280929190818152602001828054611cf490614a26565b8015611d415780601f10611d1657610100808354040283529160200191611d41565b820191906000526020600020905b815481529060010190602001808311611d2457829003601f168201915b5050505050905090565b6103e881565b611d596125b0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611de8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ddf906145da565b60405180910390fd5b7f00000000000000000000000069221565c56741f97bef75c7adb73d584fc72f7b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6e9061443a565b60405180910390fd5b611e8182826132ab565b5050565b60115481565b60008060016000611e9a6125b0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611f57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4e906146ba565b60405180910390fd5b611f6b611f626125b0565b858584036125b8565b600191505092915050565b6000611f8a611f836125b0565b8484612783565b6001905092915050565b60186020528060005260406000206000915054906101000a900460ff1681565b600e5481565b600b60019054906101000a900460ff1681565b611fd56125b0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612064576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205b906145da565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161210191906143e2565b60405180910390a25050565b6121156125b0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219b906145da565b60405180910390fd5b670de0b6b3a7640000606460016121b9610d21565b6121c391906148c8565b6121cd9190614897565b6121d79190614897565b8111612218576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220f906144fa565b60405180910390fd5b670de0b6b3a76400008161222c91906148c8565b60088190555050565b60065481565b600f5481565b600c5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60075481565b6122dc6125b0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461236b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612362906145da565b60405180910390fd5b80600d81905550600d54600c819055506064600c5411156123c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b89061447a565b60405180910390fd5b50565b600a5481565b60135481565b6123d86125b0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612467576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245e906145da565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156124d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ce9061449a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60085481565b601460009054906101000a900460ff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612628576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261f9061465a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268f906144ba565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612776919061471a565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156127f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ea9061463a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612863576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285a9061445a565b60405180910390fd5b600081141561287d5761287883836000613356565b6132a6565b600b60019054906101000a900460ff1661297257601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806129325750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612971576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612968906146da565b60405180910390fd5b5b600b60009054906101000a900460ff1615612d785761298f611bdb565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156129fd57506129cd611bdb565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a365750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a70575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a895750600560149054906101000a900460ff16155b15612d7757601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612b315750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612bd857600654811115612b7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b729061457a565b60405180910390fd5b600854612b87836110a7565b82612b929190614841565b1115612bd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bca9061461a565b60405180910390fd5b612d76565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612c7b5750601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612cca57600654811115612cc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cbc9061453a565b60405180910390fd5b612d75565b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612d7457600854612d27836110a7565b82612d329190614841565b1115612d73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d6a9061461a565b60405180910390fd5b5b5b5b5b5b6000612d83306110a7565b905060006007548210159050808015612da85750600b60029054906101000a900460ff165b8015612dc15750600560149054906101000a900460ff16155b8015612e175750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e6d5750601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612ec35750601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612f07576001600560146101000a81548160ff021916908315150217905550612eeb6135c1565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612fbd5750601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612fc757600090505b6000811561329657436001600a54612fdf9190614841565b1015801561308a5750601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806130895750601860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b5b156130ee576130b660646130a86063886136c990919063ffffffff16565b61374490919063ffffffff16565b905060636021826130c791906148c8565b6130d19190614897565b601060008282546130e29190614841565b92505081905550613272565b601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561314957506000600c54115b156131b1576131776103e8613169600c54886136c990919063ffffffff16565b61374490919063ffffffff16565b9050600c54600d548261318a91906148c8565b6131949190614897565b601060008282546131a59190614841565b92505081905550613271565b601860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561320c57506000600e54115b156132705761323a6103e861322c600e54886136c990919063ffffffff16565b61374490919063ffffffff16565b9050600e54600f548261324d91906148c8565b6132579190614897565b601060008282546132689190614841565b925050819055505b5b5b600081111561328757613286873083613356565b5b80856132939190614922565b94505b6132a1878787613356565b505050505b505050565b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061330c8282611428565b8015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156133c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133bd9061463a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613436576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161342d9061445a565b60405180910390fd5b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156134bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134b39061451a565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461354f9190614841565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516135b3919061471a565b60405180910390a350505050565b60006135cc306110a7565b90506000601054905060008214806135e45750600081145b156135f05750506136c7565b60006002826010548561360391906148c8565b61360d9190614897565b6136179190614897565b9050600061362e828561378e90919063ffffffff16565b9050600047905061363e826137d8565b6000613653824761378e90919063ffffffff16565b9050600081905060006010819055506000851180156136725750600081115b156136bf576136818582613a24565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56184826010546040516136b69392919061478f565b60405180910390a15b505050505050505b565b6000808314156136dc576000905061373e565b600082846136ea91906148c8565b90508284826136f99190614897565b14613739576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137309061459a565b60405180910390fd5b809150505b92915050565b600061378683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613b0f565b905092915050565b60006137d083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613b72565b905092915050565b6000600267ffffffffffffffff8111156137f5576137f4614b14565b5b6040519080825280602002602001820160405280156138235781602001602082028036833780820191505090505b509050308160008151811061383b5761383a614ae5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156138db57600080fd5b505afa1580156138ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139139190613c81565b8160018151811061392757613926614ae5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061398c307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846125b8565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016139ee959493929190614735565b600060405180830381600087803b158015613a0857600080fd5b505af1158015613a1c573d6000803e3d6000fd5b505050505050565b613a4f307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846125b8565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b8152600401613ab696959493929190614381565b6060604051808303818588803b158015613acf57600080fd5b505af1158015613ae3573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613b089190613e75565b5050505050565b60008083118290613b56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b4d9190614418565b60405180910390fd5b5060008385613b659190614897565b9050809150509392505050565b6000838311158290613bba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bb19190614418565b60405180910390fd5b5060008385613bc99190614922565b9050809150509392505050565b600081359050613be581615191565b92915050565b600081519050613bfa81615191565b92915050565b600081359050613c0f816151a8565b92915050565b600081519050613c24816151a8565b92915050565b600081359050613c39816151bf565b92915050565b600081519050613c4e816151bf565b92915050565b600060208284031215613c6a57613c69614b43565b5b6000613c7884828501613bd6565b91505092915050565b600060208284031215613c9757613c96614b43565b5b6000613ca584828501613beb565b91505092915050565b60008060408385031215613cc557613cc4614b43565b5b6000613cd385828601613bd6565b9250506020613ce485828601613bd6565b9150509250929050565b600080600060608486031215613d0757613d06614b43565b5b6000613d1586828701613bd6565b9350506020613d2686828701613bd6565b9250506040613d3786828701613c2a565b9150509250925092565b60008060408385031215613d5857613d57614b43565b5b6000613d6685828601613bd6565b9250506020613d7785828601613c00565b9150509250929050565b60008060408385031215613d9857613d97614b43565b5b6000613da685828601613bd6565b9250506020613db785828601613c2a565b9150509250929050565b600060208284031215613dd757613dd6614b43565b5b6000613de584828501613c00565b91505092915050565b600060208284031215613e0457613e03614b43565b5b6000613e1284828501613c15565b91505092915050565b600060208284031215613e3157613e30614b43565b5b6000613e3f84828501613c2a565b91505092915050565b600060208284031215613e5e57613e5d614b43565b5b6000613e6c84828501613c3f565b91505092915050565b600080600060608486031215613e8e57613e8d614b43565b5b6000613e9c86828701613c3f565b9350506020613ead86828701613c3f565b9250506040613ebe86828701613c3f565b9150509250925092565b6000613ed48383613ee0565b60208301905092915050565b613ee981614956565b82525050565b613ef881614956565b82525050565b6000613f09826147f1565b613f138185614814565b9350613f1e836147e1565b8060005b83811015613f4f578151613f368882613ec8565b9750613f4183614807565b925050600181019050613f22565b5085935050505092915050565b613f6581614968565b82525050565b613f74816149ab565b82525050565b613f83816149bd565b82525050565b6000613f94826147fc565b613f9e8185614830565b9350613fae8185602086016149f3565b613fb781614b48565b840191505092915050565b6000613fcf604583614830565b9150613fda82614b59565b606082019050919050565b6000613ff2602383614830565b9150613ffd82614bce565b604082019050919050565b6000614015601d83614830565b915061402082614c1d565b602082019050919050565b6000614038602683614830565b915061404382614c46565b604082019050919050565b600061405b602283614830565b915061406682614c95565b604082019050919050565b600061407e602c83614830565b915061408982614ce4565b604082019050919050565b60006140a1602283614830565b91506140ac82614d33565b604082019050919050565b60006140c4602683614830565b91506140cf82614d82565b604082019050919050565b60006140e7603683614830565b91506140f282614dd1565b604082019050919050565b600061410a601883614830565b915061411582614e20565b602082019050919050565b600061412d603583614830565b915061413882614e49565b604082019050919050565b6000614150602183614830565b915061415b82614e98565b604082019050919050565b6000614173602883614830565b915061417e82614ee7565b604082019050919050565b6000614196602083614830565b91506141a182614f36565b602082019050919050565b60006141b9601283614830565b91506141c482614f5f565b602082019050919050565b60006141dc601b83614830565b91506141e782614f88565b602082019050919050565b60006141ff602583614830565b915061420a82614fb1565b604082019050919050565b6000614222600083614825565b915061422d82615000565b600082019050919050565b6000614245602483614830565b915061425082615003565b604082019050919050565b6000614268603583614830565b915061427382615052565b604082019050919050565b600061428b601683614830565b9150614296826150a1565b602082019050919050565b60006142ae602583614830565b91506142b9826150ca565b604082019050919050565b60006142d1601a83614830565b91506142dc82615119565b602082019050919050565b60006142f4602f83614830565b91506142ff82615142565b604082019050919050565b61431381614994565b82525050565b6143228161499e565b82525050565b600061433382614215565b9150819050919050565b60006020820190506143526000830184613eef565b92915050565b600060408201905061436d6000830185613eef565b61437a602083018461430a565b9392505050565b600060c0820190506143966000830189613eef565b6143a3602083018861430a565b6143b06040830187613f7a565b6143bd6060830186613f7a565b6143ca6080830185613eef565b6143d760a083018461430a565b979650505050505050565b60006020820190506143f76000830184613f5c565b92915050565b60006020820190506144126000830184613f6b565b92915050565b600060208201905081810360008301526144328184613f89565b905092915050565b6000602082019050818103600083015261445381613fc2565b9050919050565b6000602082019050818103600083015261447381613fe5565b9050919050565b6000602082019050818103600083015261449381614008565b9050919050565b600060208201905081810360008301526144b38161402b565b9050919050565b600060208201905081810360008301526144d38161404e565b9050919050565b600060208201905081810360008301526144f381614071565b9050919050565b6000602082019050818103600083015261451381614094565b9050919050565b60006020820190508181036000830152614533816140b7565b9050919050565b60006020820190508181036000830152614553816140da565b9050919050565b60006020820190508181036000830152614573816140fd565b9050919050565b6000602082019050818103600083015261459381614120565b9050919050565b600060208201905081810360008301526145b381614143565b9050919050565b600060208201905081810360008301526145d381614166565b9050919050565b600060208201905081810360008301526145f381614189565b9050919050565b60006020820190508181036000830152614613816141ac565b9050919050565b60006020820190508181036000830152614633816141cf565b9050919050565b60006020820190508181036000830152614653816141f2565b9050919050565b6000602082019050818103600083015261467381614238565b9050919050565b600060208201905081810360008301526146938161425b565b9050919050565b600060208201905081810360008301526146b38161427e565b9050919050565b600060208201905081810360008301526146d3816142a1565b9050919050565b600060208201905081810360008301526146f3816142c4565b9050919050565b60006020820190508181036000830152614713816142e7565b9050919050565b600060208201905061472f600083018461430a565b92915050565b600060a08201905061474a600083018861430a565b6147576020830187613f7a565b81810360408301526147698186613efe565b90506147786060830185613eef565b614785608083018461430a565b9695505050505050565b60006060820190506147a4600083018661430a565b6147b1602083018561430a565b6147be604083018461430a565b949350505050565b60006020820190506147db6000830184614319565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600061484c82614994565b915061485783614994565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561488c5761488b614a58565b5b828201905092915050565b60006148a282614994565b91506148ad83614994565b9250826148bd576148bc614a87565b5b828204905092915050565b60006148d382614994565b91506148de83614994565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561491757614916614a58565b5b828202905092915050565b600061492d82614994565b915061493883614994565b92508282101561494b5761494a614a58565b5b828203905092915050565b600061496182614974565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006149b6826149cf565b9050919050565b60006149c882614994565b9050919050565b60006149da826149e1565b9050919050565b60006149ec82614974565b9050919050565b60005b83811015614a115780820151818401526020810190506149f6565b83811115614a20576000848401525b50505050565b60006002820490506001821680614a3e57607f821691505b60208210811415614a5257614a51614ab6565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f5468652050616e63616b655377617020706169722063616e6e6f74206265207260008201527f656d6f7665642066726f6d206175746f6d617465644d61726b65744d616b657260208201527f5061697273000000000000000000000000000000000000000000000000000000604082015250565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f4d757374206b656570206665657320617420313025206f72206c657373000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f43616e6e6f742075706461746520676173466f7250726f63657373696e67207460008201527f6f2073616d652076616c75650000000000000000000000000000000000000000602082015250565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b7f43616e6e6f742072652d656e61626c652074726164696e670000000000000000600082015250565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f6661696c656420746f2077697468647261770000000000000000000000000000600082015250565b7f556e61626c6520746f20657863656564204d61782057616c6c65740000000000600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b50565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f20676173466f7250726f63657373696e67206d7573742062652062657477656560008201527f6e203230302c30303020616e64203530302c3030300000000000000000000000602082015250565b7f4d757374207265717565737420616e6420776169742e00000000000000000000600082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f54726164696e67206973206e6f7420616374697665207965742e000000000000600082015250565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b61519a81614956565b81146151a557600080fd5b50565b6151b181614968565b81146151bc57600080fd5b50565b6151c881614994565b81146151d357600080fd5b5056fea2646970667358221220679a874f154d6eeabbb7a98f61187eb65f21c2e6f1a484073b0a0360761ae0f564736f6c63430008070033

Deployed Bytecode Sourcemap

20867:13301:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21713:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4075:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4989:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21502:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21197:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22015:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20939:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4396:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21623:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24958:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5166:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4295:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5666:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20997:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21293:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27225:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21373:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4512:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33368:281;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13477:148;;;;;;;;;;;;;:::i;:::-;;25426:228;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27364:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25907:202;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33657:501;;;;;;;;;;;;;:::i;:::-;;21860:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33163:191;;;;;;;;;;;;;:::i;:::-;;26822:395;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24531:218;;;;;;;;;;;;;:::i;:::-;;12835:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24849:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4183:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21417:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26309:258;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21669:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5889:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4647:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22238:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21546:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21333:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26117:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25203:211;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21078:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21580:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21467:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4830:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21120:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25666:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21243:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21761:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13780:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21160:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21817:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21713:41;;;;:::o;4075:100::-;4129:13;4162:5;4155:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4075:100;:::o;4989:169::-;5072:4;5089:39;5098:12;:10;:12::i;:::-;5112:7;5121:6;5089:8;:39::i;:::-;5146:4;5139:11;;4989:169;;;;:::o;21502:31::-;;;;:::o;21197:39::-;;;;:::o;22015:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;20939:51::-;;;:::o;4396:108::-;4457:7;4484:12;;4477:19;;4396:108;:::o;21623:33::-;;;;:::o;24958:233::-;13057:12;:10;:12::i;:::-;13047:22;;:6;;;;;;;;;;;:22;;;13039:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25076:4:::1;25070;25066:1;25050:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;25049:31;;;;:::i;:::-;25040:6;:40;25032:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;25176:6;25166;:17;;;;:::i;:::-;25143:20;:40;;;;24958:233:::0;:::o;5166:492::-;5306:4;5323:36;5333:6;5341:9;5352:6;5323:9;:36::i;:::-;5372:24;5399:11;:19;5411:6;5399:19;;;;;;;;;;;;;;;:33;5419:12;:10;:12::i;:::-;5399:33;;;;;;;;;;;;;;;;5372:60;;5471:6;5451:16;:26;;5443:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;5558:57;5567:6;5575:12;:10;:12::i;:::-;5608:6;5589:16;:25;5558:8;:57::i;:::-;5646:4;5639:11;;;5166:492;;;;;:::o;4295:93::-;4353:5;4378:2;4371:9;;4295:93;:::o;5666:215::-;5754:4;5771:80;5780:12;:10;:12::i;:::-;5794:7;5840:10;5803:11;:25;5815:12;:10;:12::i;:::-;5803:25;;;;;;;;;;;;;;;:34;5829:7;5803:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;5771:8;:80::i;:::-;5869:4;5862:11;;5666:215;;;;:::o;20997:38::-;;;:::o;21293:33::-;;;;;;;;;;;;;:::o;27225:127::-;27292:4;27316:19;:28;27336:7;27316:28;;;;;;;;;;;;;;;;;;;;;;;;;27309:35;;27225:127;;;:::o;21373:31::-;;;;;;;;;;;;;:::o;4512:127::-;4586:7;4613:9;:18;4623:7;4613:18;;;;;;;;;;;;;;;;4606:25;;4512:127;;;:::o;33368:281::-;33428:7;33450:24;;;;;;;;;;;33447:195;;;33526:25;;33497:26;;:54;;;;:::i;:::-;33490:61;;;;33447:195;33600:1;33593:8;;33368:281;;:::o;13477:148::-;13057:12;:10;:12::i;:::-;13047:22;;:6;;;;;;;;;;;:22;;;13039:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;13584:1:::1;13547:40;;13568:6;;;;;;;;;;;13547:40;;;;;;;;;;;;13615:1;13598:6;;:19;;;;;;;;;;;;;;;;;;13477:148::o:0;25426:228::-;13057:12;:10;:12::i;:::-;13047:22;;:6;;;;;;;;;;;:22;;;13039:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25520:13:::1;25502:15;:31;;;;25559:15;;25544:12;:30;;;;25609:3;25593:12;;:19;;25585:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;25426:228:::0;:::o;27364:120::-;27416:4;13057:12;:10;:12::i;:::-;13047:22;;:6;;;;;;;;;;;:22;;;13039:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27449:5:::1;27432:14;;:22;;;;;;;;;;;;;;;;;;27472:4;27465:11;;27364:120:::0;:::o;25907:202::-;13057:12;:10;:12::i;:::-;13047:22;;:6;;;;;;;;;;;:22;;;13039:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26039:4:::1;25997:31;:39;26029:6;25997:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;26088:6;26059:42;;;26096:4;26059:42;;;;;;:::i;:::-;;;;;;;;25907:202:::0;;:::o;33657:501::-;13057:12;:10;:12::i;:::-;13047:22;;:6;;;;;;;;;;;:22;;;13039:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33745:29:::1;:27;:29::i;:::-;33726:15;:48;;:85;;;;;33810:1;33778:29;:27;:29::i;:::-;:33;33726:85;33718:120;;;;;;;;;;;;:::i;:::-;;;;;;;;;33878:1;33849:26;:30;;;;33917:5;33890:24;;:32;;;;;;;;;;;;;;;;;;33935:21;34036:3;34017:16;;33974:13;33959:40;;;34008:4;33959:55;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:74;;;;:::i;:::-;:80;;;;:::i;:::-;33935:104;;34079:1;34060:16;:20;;;;34100:13;34093:30;;;34124:10;34136:13;34093:57;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33707:451;33657:501::o:0;21860:31::-;;;;:::o;33163:191::-;13057:12;:10;:12::i;:::-;13047:22;;:6;;;;;;;;;;;:22;;;13039:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33222:12:::1;33247:10;33239:24;;33271:21;33239:58;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33221:76;;;33316:7;33308:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;33210:144;33163:191::o:0;26822:395::-;13057:12;:10;:12::i;:::-;13047:22;;:6;;;;;;;;;;;:22;;;13039:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26922:6:::1;26910:8;:18;;:40;;;;;26944:6;26932:8;:18;;26910:40;26902:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;27039:16;;27027:8;:28;;27019:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;27154:16;;27144:8;27120:51;;;;;;;;;;27201:8;27182:16;:27;;;;26822:395:::0;:::o;24531:218::-;13057:12;:10;:12::i;:::-;13047:22;;:6;;;;;;;;;;;:22;;;13039:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24595:13:::1;;;;;;;;;;;24594:14;24586:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;24664:4;24648:13;;:20;;;;;;;;;;;;;;;;;;24693:4;24679:11;;:18;;;;;;;;;;;;;;;;;;24729:12;24708:18;:33;;;;24531:218::o:0;12835:79::-;12873:7;12900:6;;;;;;;;;;;12893:13;;12835:79;:::o;24849:101::-;13057:12;:10;:12::i;:::-;13047:22;;:6;;;;;;;;;;;:22;;;13039:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24935:7:::1;24921:11;;:21;;;;;;;;;;;;;;;;;;24849:101:::0;:::o;4183:104::-;4239:13;4272:7;4265:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4183:104;:::o;21417:41::-;21454:4;21417:41;:::o;26309:258::-;13057:12;:10;:12::i;:::-;13047:22;;:6;;;;;;;;;;;:22;;;13039:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26418:13:::1;26410:21;;:4;:21;;;;26402:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;26518:41;26547:4;26553:5;26518:28;:41::i;:::-;26309:258:::0;;:::o;21669:35::-;;;;:::o;5889:413::-;5982:4;5999:24;6026:11;:25;6038:12;:10;:12::i;:::-;6026:25;;;;;;;;;;;;;;;:34;6052:7;6026:34;;;;;;;;;;;;;;;;5999:61;;6099:15;6079:16;:35;;6071:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;6192:67;6201:12;:10;:12::i;:::-;6215:7;6243:15;6224:16;:34;6192:8;:67::i;:::-;6290:4;6283:11;;;5889:413;;;;:::o;4647:175::-;4733:4;4750:42;4760:12;:10;:12::i;:::-;4774:9;4785:6;4750:9;:42::i;:::-;4810:4;4803:11;;4647:175;;;;:::o;22238:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;21546:27::-;;;;:::o;21333:33::-;;;;;;;;;;;;;:::o;26117:184::-;13057:12;:10;:12::i;:::-;13047:22;;:6;;;;;;;;;;;:22;;;13039:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26233:8:::1;26202:19;:28;26222:7;26202:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;26275:7;26259:34;;;26284:8;26259:34;;;;;;:::i;:::-;;;;;;;;26117:184:::0;;:::o;25203:211::-;13057:12;:10;:12::i;:::-;13047:22;;:6;;;;;;;;;;;:22;;;13039:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25323:4:::1;25318:3;25314:1;25298:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:23;;;;:::i;:::-;25297:30;;;;:::i;:::-;25288:6;:39;25280:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;25399:6;25389;:17;;;;:::i;:::-;25377:9;:29;;;;25203:211:::0;:::o;21078:35::-;;;;:::o;21580:30::-;;;;:::o;21467:28::-;;;;:::o;4830:151::-;4919:7;4946:11;:18;4958:5;4946:18;;;;;;;;;;;;;;;:27;4965:7;4946:27;;;;;;;;;;;;;;;;4939:34;;4830:151;;;;:::o;21120:33::-;;;;:::o;25666:233::-;13057:12;:10;:12::i;:::-;13047:22;;:6;;;;;;;;;;;:22;;;13039:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25762:13:::1;25743:16;:32;;;;25802:16;;25786:13;:32;;;;25854:3;25837:13;;:20;;25829:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;25666:233:::0;:::o;21243:37::-;;;;:::o;21761:49::-;;;;:::o;13780:244::-;13057:12;:10;:12::i;:::-;13047:22;;:6;;;;;;;;;;;:22;;;13039:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;13889:1:::1;13869:22;;:8;:22;;;;13861:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;13979:8;13950:38;;13971:6;;;;;;;;;;;13950:38;;;;;;;;;;;;14008:8;13999:6;;:17;;;;;;;;;;;;;;;;;;13780:244:::0;:::o;21160:24::-;;;;:::o;21817:36::-;;;;;;;;;;;;;:::o;96:98::-;149:7;176:10;169:17;;96:98;:::o;7229:380::-;7382:1;7365:19;;:5;:19;;;;7357:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7463:1;7444:21;;:7;:21;;;;7436:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7547:6;7517:11;:18;7529:5;7517:18;;;;;;;;;;;;;;;:27;7536:7;7517:27;;;;;;;;;;;;;;;:36;;;;7585:7;7569:32;;7578:5;7569:32;;;7594:6;7569:32;;;;;;:::i;:::-;;;;;;;;7229:380;;;:::o;27496:3459::-;27644:1;27628:18;;:4;:18;;;;27620:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27721:1;27707:16;;:2;:16;;;;27699:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;27798:1;27788:6;:11;27785:92;;;27816:28;27832:4;27838:2;27842:1;27816:15;:28::i;:::-;27859:7;;27785:92;27901:13;;;;;;;;;;;27897:136;;27938:19;:25;27958:4;27938:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;27967:19;:23;27987:2;27967:23;;;;;;;;;;;;;;;;;;;;;;;;;27938:52;27930:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;27897:136;28056:14;;;;;;;;;;;28053:1085;;;28116:7;:5;:7::i;:::-;28108:15;;:4;:15;;;;:49;;;;;28150:7;:5;:7::i;:::-;28144:13;;:2;:13;;;;28108:49;:86;;;;;28192:1;28178:16;;:2;:16;;;;28108:86;:128;;;;;28229:6;28215:21;;:2;:21;;;;28108:128;:158;;;;;28258:8;;;;;;;;;;;28257:9;28108:158;28086:1041;;;28350:25;:31;28376:4;28350:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;28386:31;:35;28418:2;28386:35;;;;;;;;;;;;;;;;;;;;;;;;;28385:36;28350:71;28346:766;;;28464:20;;28454:6;:30;;28446:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;28599:9;;28582:13;28592:2;28582:9;:13::i;:::-;28573:6;:22;;;;:::i;:::-;:35;;28565:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;28346:766;;;28717:25;:29;28743:2;28717:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;28751:31;:37;28783:4;28751:37;;;;;;;;;;;;;;;;;;;;;;;;;28750:38;28717:71;28713:399;;;28831:20;;28821:6;:30;;28813:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;28713:399;;;28957:31;:35;28989:2;28957:35;;;;;;;;;;;;;;;;;;;;;;;;;28953:159;;29051:9;;29034:13;29044:2;29034:9;:13::i;:::-;29025:6;:22;;;;:::i;:::-;:35;;29017:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;28953:159;28713:399;28346:766;28086:1041;28053:1085;29144:28;29175:24;29193:4;29175:9;:24::i;:::-;29144:55;;29220:12;29259:18;;29235:20;:42;;29220:57;;29308:7;:35;;;;;29332:11;;;;;;;;;;;29308:35;:61;;;;;29361:8;;;;;;;;;;;29360:9;29308:61;:110;;;;;29387:25;:31;29413:4;29387:31;;;;;;;;;;;;;;;;;;;;;;;;;29386:32;29308:110;:153;;;;;29436:19;:25;29456:4;29436:25;;;;;;;;;;;;;;;;;;;;;;;;;29435:26;29308:153;:194;;;;;29479:19;:23;29499:2;29479:23;;;;;;;;;;;;;;;;;;;;;;;;;29478:24;29308:194;29290:322;;;29540:4;29529:8;;:15;;;;;;;;;;;;;;;;;;29559:10;:8;:10::i;:::-;29595:5;29584:8;;:16;;;;;;;;;;;;;;;;;;29290:322;29624:12;29640:8;;;;;;;;;;;29639:9;29624:24;;29749:19;:25;29769:4;29749:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;29778:19;:23;29798:2;29778:23;;;;;;;;;;;;;;;;;;;;;;;;;29749:52;29746:99;;;29828:5;29818:15;;29746:99;29865:12;29956:7;29953:947;;;30008:12;30003:1;29982:18;;:22;;;;:::i;:::-;:38;;:108;;;;;30025:25;:29;30051:2;30025:29;;;;;;;;;;;;;;;;;;;;;;;;;:64;;;;30058:25;:31;30084:4;30058:31;;;;;;;;;;;;;;;;;;;;;;;;;30025:64;29982:108;29979:764;;;30117:23;30136:3;30117:14;30128:2;30117:6;:10;;:14;;;;:::i;:::-;:18;;:23;;;;:::i;:::-;30110:30;;30193:2;30188;30181:4;:9;;;;:::i;:::-;:14;;;;:::i;:::-;30159:18;;:36;;;;;;;:::i;:::-;;;;;;;;29979:764;;;30260:25;:29;30286:2;30260:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;30309:1;30293:13;;:17;30260:50;30256:487;;;30337:41;21454:4;30337:25;30348:13;;30337:6;:10;;:25;;;;:::i;:::-;:29;;:41;;;;:::i;:::-;30330:48;;30445:13;;30426:16;;30419:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;30397:18;;:61;;;;;;;:::i;:::-;;;;;;;;30256:487;;;30533:25;:31;30559:4;30533:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;30583:1;30568:12;;:16;30533:51;30530:213;;;30609:40;21454:4;30609:24;30620:12;;30609:6;:10;;:24;;;;:::i;:::-;:28;;:40;;;;:::i;:::-;30602:47;;30715:12;;30697:15;;30690:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;30668:18;;:59;;;;;;;:::i;:::-;;;;;;;;30530:213;30256:487;29979:764;30769:1;30762:4;:8;30759:93;;;30794:42;30810:4;30824;30831;30794:15;:42::i;:::-;30759:93;30884:4;30874:14;;;;;:::i;:::-;;;29953:947;30912:33;30928:4;30934:2;30938:6;30912:15;:33::i;:::-;27609:3346;;;;27496:3459;;;;:::o;26575:239::-;26692:5;26658:25;:31;26684:4;26658:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;26710:38;26736:4;26742:5;26710:25;:38::i;:::-;26800:5;26766:40;;26794:4;26766:40;;;;;;;;;;;;26575:239;;:::o;6310:614::-;6468:1;6450:20;;:6;:20;;;;6442:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;6552:1;6531:23;;:9;:23;;;;6523:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;6607:21;6631:9;:17;6641:6;6631:17;;;;;;;;;;;;;;;;6607:41;;6684:6;6667:13;:23;;6659:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;6805:6;6789:13;:22;6769:9;:17;6779:6;6769:17;;;;;;;;;;;;;;;:42;;;;6857:6;6833:9;:20;6843:9;6833:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;6898:9;6881:35;;6890:6;6881:35;;;6909:6;6881:35;;;;;;:::i;:::-;;;;;;;;6431:493;6310:614;;;:::o;32115:1040::-;32154:23;32180:24;32198:4;32180:9;:24::i;:::-;32154:50;;32215:25;32243:18;;32215:46;;32304:1;32285:15;:20;:46;;;;32330:1;32309:17;:22;32285:46;32282:60;;;32334:7;;;;32282:60;32411:23;32496:1;32476:17;32455:18;;32437:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;32411:86;;32508:26;32537:36;32557:15;32537;:19;;:36;;;;:::i;:::-;32508:65;;32594:25;32622:21;32594:49;;32656:36;32673:18;32656:16;:36::i;:::-;32714:18;32735:44;32761:17;32735:21;:25;;:44;;;;:::i;:::-;32714:65;;32808:23;32834:10;32808:36;;32886:1;32865:18;:22;;;;32949:1;32931:15;:19;:42;;;;;32972:1;32954:15;:19;32931:42;32928:210;;;32989:46;33002:15;33019;32989:12;:46::i;:::-;33055:71;33070:18;33090:15;33107:18;;33055:71;;;;;;;;:::i;:::-;;;;;;;;32928:210;32143:1012;;;;;;;32115:1040;:::o;9233:471::-;9291:7;9541:1;9536;:6;9532:47;;;9566:1;9559:8;;;;9532:47;9591:9;9607:1;9603;:5;;;;:::i;:::-;9591:17;;9636:1;9631;9627;:5;;;;:::i;:::-;:10;9619:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;9695:1;9688:8;;;9233:471;;;;;:::o;10180:132::-;10238:7;10265:39;10269:1;10272;10265:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;10258:46;;10180:132;;;;:::o;8343:136::-;8401:7;8428:43;8432:1;8435;8428:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;8421:50;;8343:136;;;;:::o;30967:601::-;31095:21;31133:1;31119:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31095:40;;31164:4;31146;31151:1;31146:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;31190:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31180:4;31185:1;31180:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;31225:62;31242:4;31257:15;31275:11;31225:8;:62::i;:::-;31326:15;:66;;;31407:11;31433:1;31477:4;31504;31524:15;31326:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31022:546;30967:601;:::o;31580:523::-;31728:62;31745:4;31760:15;31778:11;31728:8;:62::i;:::-;31833:15;:31;;;31872:9;31905:4;31925:11;31951:1;31994;32045:6;32067:15;31833:260;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;31580:523;;:::o;10808:278::-;10894:7;10926:1;10922;:5;10929:12;10914:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;10953:9;10969:1;10965;:5;;;;:::i;:::-;10953:17;;11077:1;11070:8;;;10808:278;;;;;:::o;8782:192::-;8868:7;8901:1;8896;:6;;8904:12;8888:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;8928:9;8944:1;8940;:5;;;;:::i;:::-;8928:17;;8965:1;8958:8;;;8782:192;;;;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;7:139;;;;:::o;152:143::-;209:5;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;152:143;;;;:::o;301:133::-;344:5;382:6;369:20;360:29;;398:30;422:5;398:30;:::i;:::-;301:133;;;;:::o;440:137::-;494:5;525:6;519:13;510:22;;541:30;565:5;541:30;:::i;:::-;440:137;;;;:::o;583:139::-;629:5;667:6;654:20;645:29;;683:33;710:5;683:33;:::i;:::-;583:139;;;;:::o;728:143::-;785:5;816:6;810:13;801:22;;832:33;859:5;832:33;:::i;:::-;728:143;;;;:::o;877:329::-;936:6;985:2;973:9;964:7;960:23;956:32;953:119;;;991:79;;:::i;:::-;953:119;1111:1;1136:53;1181:7;1172:6;1161:9;1157:22;1136:53;:::i;:::-;1126:63;;1082:117;877:329;;;;:::o;1212:351::-;1282:6;1331:2;1319:9;1310:7;1306:23;1302:32;1299:119;;;1337:79;;:::i;:::-;1299:119;1457:1;1482:64;1538:7;1529:6;1518:9;1514:22;1482:64;:::i;:::-;1472:74;;1428:128;1212:351;;;;:::o;1569:474::-;1637:6;1645;1694:2;1682:9;1673:7;1669:23;1665:32;1662:119;;;1700:79;;:::i;:::-;1662:119;1820:1;1845:53;1890:7;1881:6;1870:9;1866:22;1845:53;:::i;:::-;1835:63;;1791:117;1947:2;1973:53;2018:7;2009:6;1998:9;1994:22;1973:53;:::i;:::-;1963:63;;1918:118;1569:474;;;;;:::o;2049:619::-;2126:6;2134;2142;2191:2;2179:9;2170:7;2166:23;2162:32;2159:119;;;2197:79;;:::i;:::-;2159:119;2317:1;2342:53;2387:7;2378:6;2367:9;2363:22;2342:53;:::i;:::-;2332:63;;2288:117;2444:2;2470:53;2515:7;2506:6;2495:9;2491:22;2470:53;:::i;:::-;2460:63;;2415:118;2572:2;2598:53;2643:7;2634:6;2623:9;2619:22;2598:53;:::i;:::-;2588:63;;2543:118;2049:619;;;;;:::o;2674:468::-;2739:6;2747;2796:2;2784:9;2775:7;2771:23;2767:32;2764:119;;;2802:79;;:::i;:::-;2764:119;2922:1;2947:53;2992:7;2983:6;2972:9;2968:22;2947:53;:::i;:::-;2937:63;;2893:117;3049:2;3075:50;3117:7;3108:6;3097:9;3093:22;3075:50;:::i;:::-;3065:60;;3020:115;2674:468;;;;;:::o;3148:474::-;3216:6;3224;3273:2;3261:9;3252:7;3248:23;3244:32;3241:119;;;3279:79;;:::i;:::-;3241:119;3399:1;3424:53;3469:7;3460:6;3449:9;3445:22;3424:53;:::i;:::-;3414:63;;3370:117;3526:2;3552:53;3597:7;3588:6;3577:9;3573:22;3552:53;:::i;:::-;3542:63;;3497:118;3148:474;;;;;:::o;3628:323::-;3684:6;3733:2;3721:9;3712:7;3708:23;3704:32;3701:119;;;3739:79;;:::i;:::-;3701:119;3859:1;3884:50;3926:7;3917:6;3906:9;3902:22;3884:50;:::i;:::-;3874:60;;3830:114;3628:323;;;;:::o;3957:345::-;4024:6;4073:2;4061:9;4052:7;4048:23;4044:32;4041:119;;;4079:79;;:::i;:::-;4041:119;4199:1;4224:61;4277:7;4268:6;4257:9;4253:22;4224:61;:::i;:::-;4214:71;;4170:125;3957:345;;;;:::o;4308:329::-;4367:6;4416:2;4404:9;4395:7;4391:23;4387:32;4384:119;;;4422:79;;:::i;:::-;4384:119;4542:1;4567:53;4612:7;4603:6;4592:9;4588:22;4567:53;:::i;:::-;4557:63;;4513:117;4308:329;;;;:::o;4643:351::-;4713:6;4762:2;4750:9;4741:7;4737:23;4733:32;4730:119;;;4768:79;;:::i;:::-;4730:119;4888:1;4913:64;4969:7;4960:6;4949:9;4945:22;4913:64;:::i;:::-;4903:74;;4859:128;4643:351;;;;:::o;5000:663::-;5088:6;5096;5104;5153:2;5141:9;5132:7;5128:23;5124:32;5121:119;;;5159:79;;:::i;:::-;5121:119;5279:1;5304:64;5360:7;5351:6;5340:9;5336:22;5304:64;:::i;:::-;5294:74;;5250:128;5417:2;5443:64;5499:7;5490:6;5479:9;5475:22;5443:64;:::i;:::-;5433:74;;5388:129;5556:2;5582:64;5638:7;5629:6;5618:9;5614:22;5582:64;:::i;:::-;5572:74;;5527:129;5000:663;;;;;:::o;5669:179::-;5738:10;5759:46;5801:3;5793:6;5759:46;:::i;:::-;5837:4;5832:3;5828:14;5814:28;;5669:179;;;;:::o;5854:108::-;5931:24;5949:5;5931:24;:::i;:::-;5926:3;5919:37;5854:108;;:::o;5968:118::-;6055:24;6073:5;6055:24;:::i;:::-;6050:3;6043:37;5968:118;;:::o;6122:732::-;6241:3;6270:54;6318:5;6270:54;:::i;:::-;6340:86;6419:6;6414:3;6340:86;:::i;:::-;6333:93;;6450:56;6500:5;6450:56;:::i;:::-;6529:7;6560:1;6545:284;6570:6;6567:1;6564:13;6545:284;;;6646:6;6640:13;6673:63;6732:3;6717:13;6673:63;:::i;:::-;6666:70;;6759:60;6812:6;6759:60;:::i;:::-;6749:70;;6605:224;6592:1;6589;6585:9;6580:14;;6545:284;;;6549:14;6845:3;6838:10;;6246:608;;;6122:732;;;;:::o;6860:109::-;6941:21;6956:5;6941:21;:::i;:::-;6936:3;6929:34;6860:109;;:::o;6975:185::-;7089:64;7147:5;7089:64;:::i;:::-;7084:3;7077:77;6975:185;;:::o;7166:147::-;7261:45;7300:5;7261:45;:::i;:::-;7256:3;7249:58;7166:147;;:::o;7319:364::-;7407:3;7435:39;7468:5;7435:39;:::i;:::-;7490:71;7554:6;7549:3;7490:71;:::i;:::-;7483:78;;7570:52;7615:6;7610:3;7603:4;7596:5;7592:16;7570:52;:::i;:::-;7647:29;7669:6;7647:29;:::i;:::-;7642:3;7638:39;7631:46;;7411:272;7319:364;;;;:::o;7689:366::-;7831:3;7852:67;7916:2;7911:3;7852:67;:::i;:::-;7845:74;;7928:93;8017:3;7928:93;:::i;:::-;8046:2;8041:3;8037:12;8030:19;;7689:366;;;:::o;8061:::-;8203:3;8224:67;8288:2;8283:3;8224:67;:::i;:::-;8217:74;;8300:93;8389:3;8300:93;:::i;:::-;8418:2;8413:3;8409:12;8402:19;;8061:366;;;:::o;8433:::-;8575:3;8596:67;8660:2;8655:3;8596:67;:::i;:::-;8589:74;;8672:93;8761:3;8672:93;:::i;:::-;8790:2;8785:3;8781:12;8774:19;;8433:366;;;:::o;8805:::-;8947:3;8968:67;9032:2;9027:3;8968:67;:::i;:::-;8961:74;;9044:93;9133:3;9044:93;:::i;:::-;9162:2;9157:3;9153:12;9146:19;;8805:366;;;:::o;9177:::-;9319:3;9340:67;9404:2;9399:3;9340:67;:::i;:::-;9333:74;;9416:93;9505:3;9416:93;:::i;:::-;9534:2;9529:3;9525:12;9518:19;;9177:366;;;:::o;9549:::-;9691:3;9712:67;9776:2;9771:3;9712:67;:::i;:::-;9705:74;;9788:93;9877:3;9788:93;:::i;:::-;9906:2;9901:3;9897:12;9890:19;;9549:366;;;:::o;9921:::-;10063:3;10084:67;10148:2;10143:3;10084:67;:::i;:::-;10077:74;;10160:93;10249:3;10160:93;:::i;:::-;10278:2;10273:3;10269:12;10262:19;;9921:366;;;:::o;10293:::-;10435:3;10456:67;10520:2;10515:3;10456:67;:::i;:::-;10449:74;;10532:93;10621:3;10532:93;:::i;:::-;10650:2;10645:3;10641:12;10634:19;;10293:366;;;:::o;10665:::-;10807:3;10828:67;10892:2;10887:3;10828:67;:::i;:::-;10821:74;;10904:93;10993:3;10904:93;:::i;:::-;11022:2;11017:3;11013:12;11006:19;;10665:366;;;:::o;11037:::-;11179:3;11200:67;11264:2;11259:3;11200:67;:::i;:::-;11193:74;;11276:93;11365:3;11276:93;:::i;:::-;11394:2;11389:3;11385:12;11378:19;;11037:366;;;:::o;11409:::-;11551:3;11572:67;11636:2;11631:3;11572:67;:::i;:::-;11565:74;;11648:93;11737:3;11648:93;:::i;:::-;11766:2;11761:3;11757:12;11750:19;;11409:366;;;:::o;11781:::-;11923:3;11944:67;12008:2;12003:3;11944:67;:::i;:::-;11937:74;;12020:93;12109:3;12020:93;:::i;:::-;12138:2;12133:3;12129:12;12122:19;;11781:366;;;:::o;12153:::-;12295:3;12316:67;12380:2;12375:3;12316:67;:::i;:::-;12309:74;;12392:93;12481:3;12392:93;:::i;:::-;12510:2;12505:3;12501:12;12494:19;;12153:366;;;:::o;12525:::-;12667:3;12688:67;12752:2;12747:3;12688:67;:::i;:::-;12681:74;;12764:93;12853:3;12764:93;:::i;:::-;12882:2;12877:3;12873:12;12866:19;;12525:366;;;:::o;12897:::-;13039:3;13060:67;13124:2;13119:3;13060:67;:::i;:::-;13053:74;;13136:93;13225:3;13136:93;:::i;:::-;13254:2;13249:3;13245:12;13238:19;;12897:366;;;:::o;13269:::-;13411:3;13432:67;13496:2;13491:3;13432:67;:::i;:::-;13425:74;;13508:93;13597:3;13508:93;:::i;:::-;13626:2;13621:3;13617:12;13610:19;;13269:366;;;:::o;13641:::-;13783:3;13804:67;13868:2;13863:3;13804:67;:::i;:::-;13797:74;;13880:93;13969:3;13880:93;:::i;:::-;13998:2;13993:3;13989:12;13982:19;;13641:366;;;:::o;14013:398::-;14172:3;14193:83;14274:1;14269:3;14193:83;:::i;:::-;14186:90;;14285:93;14374:3;14285:93;:::i;:::-;14403:1;14398:3;14394:11;14387:18;;14013:398;;;:::o;14417:366::-;14559:3;14580:67;14644:2;14639:3;14580:67;:::i;:::-;14573:74;;14656:93;14745:3;14656:93;:::i;:::-;14774:2;14769:3;14765:12;14758:19;;14417:366;;;:::o;14789:::-;14931:3;14952:67;15016:2;15011:3;14952:67;:::i;:::-;14945:74;;15028:93;15117:3;15028:93;:::i;:::-;15146:2;15141:3;15137:12;15130:19;;14789:366;;;:::o;15161:::-;15303:3;15324:67;15388:2;15383:3;15324:67;:::i;:::-;15317:74;;15400:93;15489:3;15400:93;:::i;:::-;15518:2;15513:3;15509:12;15502:19;;15161:366;;;:::o;15533:::-;15675:3;15696:67;15760:2;15755:3;15696:67;:::i;:::-;15689:74;;15772:93;15861:3;15772:93;:::i;:::-;15890:2;15885:3;15881:12;15874:19;;15533:366;;;:::o;15905:::-;16047:3;16068:67;16132:2;16127:3;16068:67;:::i;:::-;16061:74;;16144:93;16233:3;16144:93;:::i;:::-;16262:2;16257:3;16253:12;16246:19;;15905:366;;;:::o;16277:::-;16419:3;16440:67;16504:2;16499:3;16440:67;:::i;:::-;16433:74;;16516:93;16605:3;16516:93;:::i;:::-;16634:2;16629:3;16625:12;16618:19;;16277:366;;;:::o;16649:118::-;16736:24;16754:5;16736:24;:::i;:::-;16731:3;16724:37;16649:118;;:::o;16773:112::-;16856:22;16872:5;16856:22;:::i;:::-;16851:3;16844:35;16773:112;;:::o;16891:379::-;17075:3;17097:147;17240:3;17097:147;:::i;:::-;17090:154;;17261:3;17254:10;;16891:379;;;:::o;17276:222::-;17369:4;17407:2;17396:9;17392:18;17384:26;;17420:71;17488:1;17477:9;17473:17;17464:6;17420:71;:::i;:::-;17276:222;;;;:::o;17504:332::-;17625:4;17663:2;17652:9;17648:18;17640:26;;17676:71;17744:1;17733:9;17729:17;17720:6;17676:71;:::i;:::-;17757:72;17825:2;17814:9;17810:18;17801:6;17757:72;:::i;:::-;17504:332;;;;;:::o;17842:807::-;18091:4;18129:3;18118:9;18114:19;18106:27;;18143:71;18211:1;18200:9;18196:17;18187:6;18143:71;:::i;:::-;18224:72;18292:2;18281:9;18277:18;18268:6;18224:72;:::i;:::-;18306:80;18382:2;18371:9;18367:18;18358:6;18306:80;:::i;:::-;18396;18472:2;18461:9;18457:18;18448:6;18396:80;:::i;:::-;18486:73;18554:3;18543:9;18539:19;18530:6;18486:73;:::i;:::-;18569;18637:3;18626:9;18622:19;18613:6;18569:73;:::i;:::-;17842:807;;;;;;;;;:::o;18655:210::-;18742:4;18780:2;18769:9;18765:18;18757:26;;18793:65;18855:1;18844:9;18840:17;18831:6;18793:65;:::i;:::-;18655:210;;;;:::o;18871:276::-;18991:4;19029:2;19018:9;19014:18;19006:26;;19042:98;19137:1;19126:9;19122:17;19113:6;19042:98;:::i;:::-;18871:276;;;;:::o;19153:313::-;19266:4;19304:2;19293:9;19289:18;19281:26;;19353:9;19347:4;19343:20;19339:1;19328:9;19324:17;19317:47;19381:78;19454:4;19445:6;19381:78;:::i;:::-;19373:86;;19153:313;;;;:::o;19472:419::-;19638:4;19676:2;19665:9;19661:18;19653:26;;19725:9;19719:4;19715:20;19711:1;19700:9;19696:17;19689:47;19753:131;19879:4;19753:131;:::i;:::-;19745:139;;19472:419;;;:::o;19897:::-;20063:4;20101:2;20090:9;20086:18;20078:26;;20150:9;20144:4;20140:20;20136:1;20125:9;20121:17;20114:47;20178:131;20304:4;20178:131;:::i;:::-;20170:139;;19897:419;;;:::o;20322:::-;20488:4;20526:2;20515:9;20511:18;20503:26;;20575:9;20569:4;20565:20;20561:1;20550:9;20546:17;20539:47;20603:131;20729:4;20603:131;:::i;:::-;20595:139;;20322:419;;;:::o;20747:::-;20913:4;20951:2;20940:9;20936:18;20928:26;;21000:9;20994:4;20990:20;20986:1;20975:9;20971:17;20964:47;21028:131;21154:4;21028:131;:::i;:::-;21020:139;;20747:419;;;:::o;21172:::-;21338:4;21376:2;21365:9;21361:18;21353:26;;21425:9;21419:4;21415:20;21411:1;21400:9;21396:17;21389:47;21453:131;21579:4;21453:131;:::i;:::-;21445:139;;21172:419;;;:::o;21597:::-;21763:4;21801:2;21790:9;21786:18;21778:26;;21850:9;21844:4;21840:20;21836:1;21825:9;21821:17;21814:47;21878:131;22004:4;21878:131;:::i;:::-;21870:139;;21597:419;;;:::o;22022:::-;22188:4;22226:2;22215:9;22211:18;22203:26;;22275:9;22269:4;22265:20;22261:1;22250:9;22246:17;22239:47;22303:131;22429:4;22303:131;:::i;:::-;22295:139;;22022:419;;;:::o;22447:::-;22613:4;22651:2;22640:9;22636:18;22628:26;;22700:9;22694:4;22690:20;22686:1;22675:9;22671:17;22664:47;22728:131;22854:4;22728:131;:::i;:::-;22720:139;;22447:419;;;:::o;22872:::-;23038:4;23076:2;23065:9;23061:18;23053:26;;23125:9;23119:4;23115:20;23111:1;23100:9;23096:17;23089:47;23153:131;23279:4;23153:131;:::i;:::-;23145:139;;22872:419;;;:::o;23297:::-;23463:4;23501:2;23490:9;23486:18;23478:26;;23550:9;23544:4;23540:20;23536:1;23525:9;23521:17;23514:47;23578:131;23704:4;23578:131;:::i;:::-;23570:139;;23297:419;;;:::o;23722:::-;23888:4;23926:2;23915:9;23911:18;23903:26;;23975:9;23969:4;23965:20;23961:1;23950:9;23946:17;23939:47;24003:131;24129:4;24003:131;:::i;:::-;23995:139;;23722:419;;;:::o;24147:::-;24313:4;24351:2;24340:9;24336:18;24328:26;;24400:9;24394:4;24390:20;24386:1;24375:9;24371:17;24364:47;24428:131;24554:4;24428:131;:::i;:::-;24420:139;;24147:419;;;:::o;24572:::-;24738:4;24776:2;24765:9;24761:18;24753:26;;24825:9;24819:4;24815:20;24811:1;24800:9;24796:17;24789:47;24853:131;24979:4;24853:131;:::i;:::-;24845:139;;24572:419;;;:::o;24997:::-;25163:4;25201:2;25190:9;25186:18;25178:26;;25250:9;25244:4;25240:20;25236:1;25225:9;25221:17;25214:47;25278:131;25404:4;25278:131;:::i;:::-;25270:139;;24997:419;;;:::o;25422:::-;25588:4;25626:2;25615:9;25611:18;25603:26;;25675:9;25669:4;25665:20;25661:1;25650:9;25646:17;25639:47;25703:131;25829:4;25703:131;:::i;:::-;25695:139;;25422:419;;;:::o;25847:::-;26013:4;26051:2;26040:9;26036:18;26028:26;;26100:9;26094:4;26090:20;26086:1;26075:9;26071:17;26064:47;26128:131;26254:4;26128:131;:::i;:::-;26120:139;;25847:419;;;:::o;26272:::-;26438:4;26476:2;26465:9;26461:18;26453:26;;26525:9;26519:4;26515:20;26511:1;26500:9;26496:17;26489:47;26553:131;26679:4;26553:131;:::i;:::-;26545:139;;26272:419;;;:::o;26697:::-;26863:4;26901:2;26890:9;26886:18;26878:26;;26950:9;26944:4;26940:20;26936:1;26925:9;26921:17;26914:47;26978:131;27104:4;26978:131;:::i;:::-;26970:139;;26697:419;;;:::o;27122:::-;27288:4;27326:2;27315:9;27311:18;27303:26;;27375:9;27369:4;27365:20;27361:1;27350:9;27346:17;27339:47;27403:131;27529:4;27403:131;:::i;:::-;27395:139;;27122:419;;;:::o;27547:::-;27713:4;27751:2;27740:9;27736:18;27728:26;;27800:9;27794:4;27790:20;27786:1;27775:9;27771:17;27764:47;27828:131;27954:4;27828:131;:::i;:::-;27820:139;;27547:419;;;:::o;27972:::-;28138:4;28176:2;28165:9;28161:18;28153:26;;28225:9;28219:4;28215:20;28211:1;28200:9;28196:17;28189:47;28253:131;28379:4;28253:131;:::i;:::-;28245:139;;27972:419;;;:::o;28397:::-;28563:4;28601:2;28590:9;28586:18;28578:26;;28650:9;28644:4;28640:20;28636:1;28625:9;28621:17;28614:47;28678:131;28804:4;28678:131;:::i;:::-;28670:139;;28397:419;;;:::o;28822:::-;28988:4;29026:2;29015:9;29011:18;29003:26;;29075:9;29069:4;29065:20;29061:1;29050:9;29046:17;29039:47;29103:131;29229:4;29103:131;:::i;:::-;29095:139;;28822:419;;;:::o;29247:222::-;29340:4;29378:2;29367:9;29363:18;29355:26;;29391:71;29459:1;29448:9;29444:17;29435:6;29391:71;:::i;:::-;29247:222;;;;:::o;29475:831::-;29738:4;29776:3;29765:9;29761:19;29753:27;;29790:71;29858:1;29847:9;29843:17;29834:6;29790:71;:::i;:::-;29871:80;29947:2;29936:9;29932:18;29923:6;29871:80;:::i;:::-;29998:9;29992:4;29988:20;29983:2;29972:9;29968:18;29961:48;30026:108;30129:4;30120:6;30026:108;:::i;:::-;30018:116;;30144:72;30212:2;30201:9;30197:18;30188:6;30144:72;:::i;:::-;30226:73;30294:3;30283:9;30279:19;30270:6;30226:73;:::i;:::-;29475:831;;;;;;;;:::o;30312:442::-;30461:4;30499:2;30488:9;30484:18;30476:26;;30512:71;30580:1;30569:9;30565:17;30556:6;30512:71;:::i;:::-;30593:72;30661:2;30650:9;30646:18;30637:6;30593:72;:::i;:::-;30675;30743:2;30732:9;30728:18;30719:6;30675:72;:::i;:::-;30312:442;;;;;;:::o;30760:214::-;30849:4;30887:2;30876:9;30872:18;30864:26;;30900:67;30964:1;30953:9;30949:17;30940:6;30900:67;:::i;:::-;30760:214;;;;:::o;31061:132::-;31128:4;31151:3;31143:11;;31181:4;31176:3;31172:14;31164:22;;31061:132;;;:::o;31199:114::-;31266:6;31300:5;31294:12;31284:22;;31199:114;;;:::o;31319:99::-;31371:6;31405:5;31399:12;31389:22;;31319:99;;;:::o;31424:113::-;31494:4;31526;31521:3;31517:14;31509:22;;31424:113;;;:::o;31543:184::-;31642:11;31676:6;31671:3;31664:19;31716:4;31711:3;31707:14;31692:29;;31543:184;;;;:::o;31733:147::-;31834:11;31871:3;31856:18;;31733:147;;;;:::o;31886:169::-;31970:11;32004:6;31999:3;31992:19;32044:4;32039:3;32035:14;32020:29;;31886:169;;;;:::o;32061:305::-;32101:3;32120:20;32138:1;32120:20;:::i;:::-;32115:25;;32154:20;32172:1;32154:20;:::i;:::-;32149:25;;32308:1;32240:66;32236:74;32233:1;32230:81;32227:107;;;32314:18;;:::i;:::-;32227:107;32358:1;32355;32351:9;32344:16;;32061:305;;;;:::o;32372:185::-;32412:1;32429:20;32447:1;32429:20;:::i;:::-;32424:25;;32463:20;32481:1;32463:20;:::i;:::-;32458:25;;32502:1;32492:35;;32507:18;;:::i;:::-;32492:35;32549:1;32546;32542:9;32537:14;;32372:185;;;;:::o;32563:348::-;32603:7;32626:20;32644:1;32626:20;:::i;:::-;32621:25;;32660:20;32678:1;32660:20;:::i;:::-;32655:25;;32848:1;32780:66;32776:74;32773:1;32770:81;32765:1;32758:9;32751:17;32747:105;32744:131;;;32855:18;;:::i;:::-;32744:131;32903:1;32900;32896:9;32885:20;;32563:348;;;;:::o;32917:191::-;32957:4;32977:20;32995:1;32977:20;:::i;:::-;32972:25;;33011:20;33029:1;33011:20;:::i;:::-;33006:25;;33050:1;33047;33044:8;33041:34;;;33055:18;;:::i;:::-;33041:34;33100:1;33097;33093:9;33085:17;;32917:191;;;;:::o;33114:96::-;33151:7;33180:24;33198:5;33180:24;:::i;:::-;33169:35;;33114:96;;;:::o;33216:90::-;33250:7;33293:5;33286:13;33279:21;33268:32;;33216:90;;;:::o;33312:126::-;33349:7;33389:42;33382:5;33378:54;33367:65;;33312:126;;;:::o;33444:77::-;33481:7;33510:5;33499:16;;33444:77;;;:::o;33527:86::-;33562:7;33602:4;33595:5;33591:16;33580:27;;33527:86;;;:::o;33619:153::-;33696:9;33729:37;33760:5;33729:37;:::i;:::-;33716:50;;33619:153;;;:::o;33778:121::-;33836:9;33869:24;33887:5;33869:24;:::i;:::-;33856:37;;33778:121;;;:::o;33905:126::-;33955:9;33988:37;34019:5;33988:37;:::i;:::-;33975:50;;33905:126;;;:::o;34037:113::-;34087:9;34120:24;34138:5;34120:24;:::i;:::-;34107:37;;34037:113;;;:::o;34156:307::-;34224:1;34234:113;34248:6;34245:1;34242:13;34234:113;;;34333:1;34328:3;34324:11;34318:18;34314:1;34309:3;34305:11;34298:39;34270:2;34267:1;34263:10;34258:15;;34234:113;;;34365:6;34362:1;34359:13;34356:101;;;34445:1;34436:6;34431:3;34427:16;34420:27;34356:101;34205:258;34156:307;;;:::o;34469:320::-;34513:6;34550:1;34544:4;34540:12;34530:22;;34597:1;34591:4;34587:12;34618:18;34608:81;;34674:4;34666:6;34662:17;34652:27;;34608:81;34736:2;34728:6;34725:14;34705:18;34702:38;34699:84;;;34755:18;;:::i;:::-;34699:84;34520:269;34469:320;;;:::o;34795:180::-;34843:77;34840:1;34833:88;34940:4;34937:1;34930:15;34964:4;34961:1;34954:15;34981:180;35029:77;35026:1;35019:88;35126:4;35123:1;35116:15;35150:4;35147:1;35140:15;35167:180;35215:77;35212:1;35205:88;35312:4;35309:1;35302:15;35336:4;35333:1;35326:15;35353:180;35401:77;35398:1;35391:88;35498:4;35495:1;35488:15;35522:4;35519:1;35512:15;35539:180;35587:77;35584:1;35577:88;35684:4;35681:1;35674:15;35708:4;35705:1;35698:15;35848:117;35957:1;35954;35947:12;35971:102;36012:6;36063:2;36059:7;36054:2;36047:5;36043:14;36039:28;36029:38;;35971:102;;;:::o;36079:293::-;36219:34;36215:1;36207:6;36203:14;36196:58;36288:34;36283:2;36275:6;36271:15;36264:59;36357:7;36352:2;36344:6;36340:15;36333:32;36079:293;:::o;36378:222::-;36518:34;36514:1;36506:6;36502:14;36495:58;36587:5;36582:2;36574:6;36570:15;36563:30;36378:222;:::o;36606:179::-;36746:31;36742:1;36734:6;36730:14;36723:55;36606:179;:::o;36791:225::-;36931:34;36927:1;36919:6;36915:14;36908:58;37000:8;36995:2;36987:6;36983:15;36976:33;36791:225;:::o;37022:221::-;37162:34;37158:1;37150:6;37146:14;37139:58;37231:4;37226:2;37218:6;37214:15;37207:29;37022:221;:::o;37249:231::-;37389:34;37385:1;37377:6;37373:14;37366:58;37458:14;37453:2;37445:6;37441:15;37434:39;37249:231;:::o;37486:221::-;37626:34;37622:1;37614:6;37610:14;37603:58;37695:4;37690:2;37682:6;37678:15;37671:29;37486:221;:::o;37713:225::-;37853:34;37849:1;37841:6;37837:14;37830:58;37922:8;37917:2;37909:6;37905:15;37898:33;37713:225;:::o;37944:241::-;38084:34;38080:1;38072:6;38068:14;38061:58;38153:24;38148:2;38140:6;38136:15;38129:49;37944:241;:::o;38191:174::-;38331:26;38327:1;38319:6;38315:14;38308:50;38191:174;:::o;38371:240::-;38511:34;38507:1;38499:6;38495:14;38488:58;38580:23;38575:2;38567:6;38563:15;38556:48;38371:240;:::o;38617:220::-;38757:34;38753:1;38745:6;38741:14;38734:58;38826:3;38821:2;38813:6;38809:15;38802:28;38617:220;:::o;38843:227::-;38983:34;38979:1;38971:6;38967:14;38960:58;39052:10;39047:2;39039:6;39035:15;39028:35;38843:227;:::o;39076:182::-;39216:34;39212:1;39204:6;39200:14;39193:58;39076:182;:::o;39264:168::-;39404:20;39400:1;39392:6;39388:14;39381:44;39264:168;:::o;39438:177::-;39578:29;39574:1;39566:6;39562:14;39555:53;39438:177;:::o;39621:224::-;39761:34;39757:1;39749:6;39745:14;39738:58;39830:7;39825:2;39817:6;39813:15;39806:32;39621:224;:::o;39851:114::-;;:::o;39971:223::-;40111:34;40107:1;40099:6;40095:14;40088:58;40180:6;40175:2;40167:6;40163:15;40156:31;39971:223;:::o;40200:240::-;40340:34;40336:1;40328:6;40324:14;40317:58;40409:23;40404:2;40396:6;40392:15;40385:48;40200:240;:::o;40446:172::-;40586:24;40582:1;40574:6;40570:14;40563:48;40446:172;:::o;40624:224::-;40764:34;40760:1;40752:6;40748:14;40741:58;40833:7;40828:2;40820:6;40816:15;40809:32;40624:224;:::o;40854:176::-;40994:28;40990:1;40982:6;40978:14;40971:52;40854:176;:::o;41036:234::-;41176:34;41172:1;41164:6;41160:14;41153:58;41245:17;41240:2;41232:6;41228:15;41221:42;41036:234;:::o;41276:122::-;41349:24;41367:5;41349:24;:::i;:::-;41342:5;41339:35;41329:63;;41388:1;41385;41378:12;41329:63;41276:122;:::o;41404:116::-;41474:21;41489:5;41474:21;:::i;:::-;41467:5;41464:32;41454:60;;41510:1;41507;41500:12;41454:60;41404:116;:::o;41526:122::-;41599:24;41617:5;41599:24;:::i;:::-;41592:5;41589:35;41579:63;;41638:1;41635;41628:12;41579:63;41526:122;:::o

Swarm Source

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