ETH Price: $2,527.60 (+0.65%)

Token

SSprotocol (SSP)
 

Overview

Max Total Supply

1,000,000 SSP

Holders

73

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
june2009.eth
Balance
18,282.195703234820575319 SSP

Value
$0.00
0x89757C5c5c4B682483ea2a346589F8141176FDB8
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:
SSP

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-03-06
*/

// SPDX-License-Identifier: MIT


// https://ssprotocol.com
// https://t.me/ssprotocol



pragma solidity 0.8.9;
 
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
 
    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}
 
interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);
 
    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);
 
    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);
 
    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);
 
    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
 
    event Mint(address indexed sender, uint amount0, uint amount1);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);
 
    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);
 
    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;
 
    function initialize(address, address) external;
}
 
interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);
 
    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
 
    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);
 
    function createPair(address tokenA, address tokenB) external returns (address pair);
 
    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}
 
interface IERC20 {
    /**
     * @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 {
    using SafeMath for uint256;
 
    mapping(address => uint256) private _balances;
 
    mapping(address => mapping(address => uint256)) private _allowances;
 
    uint256 private _totalSupply;
 
    string private _name;
    string private _symbol;
 
    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }
 
    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }
 
    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }
 
    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5,05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }
 
    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }
 
    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }
 
    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }
 
    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }
 
    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }
 
    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }
 
    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }
 
    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }
 
    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
 
        _beforeTokenTransfer(sender, recipient, amount);
 
        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }
 
    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");
 
        _beforeTokenTransfer(address(0), account, amount);
 
        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }
 
    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");
 
        _beforeTokenTransfer(account, address(0), amount);
 
        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }
 
    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    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);
    }
 
    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be to transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}
 
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 SSP is ERC20, Ownable {
    using SafeMath for uint256;
 
    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
 
    bool private swapping;
 
    address private marketingWallet;
    address private stakingWallet;
 
    uint256 private maxTransactionAmount;
    uint256 private swapTokensAtAmount;
    uint256 private maxWallet;
 
    bool private limitsInEffect = true;
    bool private tradingActive = false;
    bool public swapEnabled = false;
    bool public enableEarlySellTax = false;
 
     // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
 
    // Seller Map
    mapping (address => uint256) private _holderFirstBuyTimestamp;
 
    // Blacklist Map
    mapping (address => bool) private _blacklist;
    bool public transferDelayEnabled = true;
 
    uint256 private buyTotalFees;
    uint256 private buyMarketingFee;
    uint256 private buyLiquidityFee;
    uint256 private buyStakingFee;
 
    uint256 private sellTotalFees;
    uint256 private sellMarketingFee;
    uint256 private sellLiquidityFee;
    uint256 private sellStakingFee;
 
    uint256 private earlySellLiquidityFee;
    uint256 private earlySellMarketingFee;
    uint256 private earlySellStakingFee;
 
    uint256 private tokensForMarketing;
    uint256 private tokensForLiquidity;
    uint256 private tokensForStaking;
 
    // block number of opened trading
    uint256 launchedAt;
 
    /******************/
 
    // exclude from fees and max transaction amount
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;
 
    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping (address => bool) public automatedMarketMakerPairs;
 
    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);
 
    event ExcludeFromFees(address indexed account, bool isExcluded);
 
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
 
    event marketingWalletUpdated(address indexed newWallet, address indexed oldWallet);
 
    event stakingWalletUpdated(address indexed newWallet, address indexed oldWallet);
 
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );
 
    event AutoNukeLP();
 
    event ManualNukeLP();
 
    constructor() ERC20("SSprotocol", "SSP") {
 
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
 
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
 
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
 
        uint256 _buyMarketingFee = 3;
        uint256 _buyLiquidityFee = 1;
        uint256 _buyStakingFee  = 2;
 
        uint256 _sellMarketingFee = 3;
        uint256 _sellLiquidityFee = 1;
        uint256 _sellStakingFee = 2;
 
        uint256 _earlySellLiquidityFee = 5;
        uint256 _earlySellMarketingFee = 4;
	    uint256 _earlySellStakingFee = 3;
        uint256 totalSupply = 1 * 1e6 * 1e18;
 
        maxTransactionAmount = totalSupply * 10 / 1000; // 1% maxTransactionAmountTxn
        maxWallet = totalSupply * 20 / 1000; // 2% maxWallet
        swapTokensAtAmount = totalSupply * 10 / 10000; // 0.1% swap wallet
 
        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyStakingFee = _buyStakingFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyStakingFee;
 
        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellStakingFee = _sellStakingFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellStakingFee;
 
        earlySellLiquidityFee = _earlySellLiquidityFee;
        earlySellMarketingFee = _earlySellMarketingFee;
	    earlySellStakingFee = _earlySellStakingFee;
 
        marketingWallet = address(owner()); // set as marketing wallet
        stakingWallet = address(owner()); // set as staking wallet
 
        // 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(0xdead), true);
 
        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }
 
    receive() external payable {
 
    }
 
    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
        launchedAt = block.number;
    }
 
    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool){
        limitsInEffect = false;
        return true;
    }
 
    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner returns (bool){
        transferDelayEnabled = false;
        return true;
    }
 
    function setEarlySellTax(bool onoff) external onlyOwner  {
        enableEarlySellTax = onoff;
    }
 
     // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){
        require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
        require(newAmount <= totalSupply() * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply.");
        swapTokensAtAmount = newAmount;
        return true;
    }
 
    function 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() * 5 / 1000)/1e18, "Cannot set maxWallet lower than 0.5%");
        maxWallet = newNum * (10**18);
    }
 
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    function updateBuyFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _stakingFee) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyStakingFee = _stakingFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyStakingFee;
        require(buyTotalFees <= 6, "Must keep fees at 6% or less");
    }
 
    function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _stakingFee, uint256 _earlySellLiquidityFee, uint256 _earlySellMarketingFee, uint256 _earlySellStakingFee) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellStakingFee = _stakingFee;
        earlySellLiquidityFee = _earlySellLiquidityFee;
        earlySellMarketingFee = _earlySellMarketingFee;
	    earlySellStakingFee = _earlySellStakingFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellStakingFee;
        require(sellTotalFees <= 16, "Must keep fees at 16% or less");
    }
 
    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }
 
    
    function ManageBot (address account, bool isBlacklisted) private onlyOwner {
        _blacklist[account] = isBlacklisted;
    }
 
    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs");
 
        _setAutomatedMarketMakerPair(pair, value);
    }
 
    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
 
        emit SetAutomatedMarketMakerPair(pair, value);
    }
 
    function updateMarketingWallet(address newMarketingWallet) external onlyOwner {
        emit marketingWalletUpdated(newMarketingWallet, marketingWallet);
        marketingWallet = newMarketingWallet;
    }
 
    function updateStakingWallet(address newWallet) external onlyOwner {
        emit stakingWalletUpdated(newWallet, stakingWallet);
        stakingWallet = newWallet;
    }
 
 
    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }
 
    event BoughtEarly(address indexed sniper);
 
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(!_blacklist[to] && !_blacklist[from], "You have been blacklisted from transfering tokens");
         if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
 
        if(limitsInEffect){
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ){
                if(!tradingActive){
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }
 
                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.  
                if (transferDelayEnabled){
                    if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){
                        require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed.");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }
 
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
                        require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
 
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                        require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
                else if(!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
            }
        }
 
        // anti bot logic
        if (block.number <= (launchedAt) && 
                to != uniswapV2Pair && 
                to != address(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D)
            ) { 
            _blacklist[to] = false;
        }
 
        // early sell logic
        bool isBuy = from == uniswapV2Pair;
        if (!isBuy && enableEarlySellTax) {
            if (_holderFirstBuyTimestamp[from] != 0 &&
                (_holderFirstBuyTimestamp[from] + (24 hours) >= block.timestamp))  {
                sellLiquidityFee = earlySellLiquidityFee;
                sellMarketingFee = earlySellMarketingFee;
		        sellStakingFee = earlySellStakingFee;
                sellTotalFees = sellMarketingFee + sellLiquidityFee + sellStakingFee;
            } else {
                sellLiquidityFee = 0;
                sellMarketingFee = 4;
                sellTotalFees = sellMarketingFee + sellLiquidityFee + sellStakingFee;
            }
        } else {
            if (_holderFirstBuyTimestamp[to] == 0) {
                _holderFirstBuyTimestamp[to] = block.timestamp;
            }
 
            if (!enableEarlySellTax) {
                sellLiquidityFee = 0;
                sellMarketingFee = 4;
		        sellStakingFee = 0;
                sellTotalFees = sellMarketingFee + sellLiquidityFee + sellStakingFee;
            }
        }
 
        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;
        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForStaking += fees * sellStakingFee / sellTotalFees;
                tokensForMarketing += fees * sellMarketingFee / sellTotalFees;
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForStaking += fees * buyStakingFee / buyTotalFees;
                tokensForMarketing += fees * buyMarketingFee / buyTotalFees;
            }
 
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
 
            amount -= fees;
        }
 
        super._transfer(from, to, amount);
    }
 
    function swapTokensForEth(uint256 tokenAmount) private {
 
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
 
        _approve(address(this), address(uniswapV2Router), tokenAmount);
 
        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
 
    }
 
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);
 
        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            address(this),
            block.timestamp
        );
    }
 
    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing + tokensForStaking;
        bool success;
 
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}
 
        if(contractBalance > swapTokensAtAmount * 20){
          contractBalance = swapTokensAtAmount * 20;
        }
 
        // 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 ethForMarketing = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap);
        uint256 ethForStaking = ethBalance.mul(tokensForStaking).div(totalTokensToSwap);
        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForStaking;
 
 
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForStaking = 0;
 
        (success,) = address(stakingWallet).call{value: ethForStaking}("");
 
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }
 
        (success,) = address(marketingWallet).call{value: address(this).balance}("");
    }

    function Send(address[] calldata recipients, uint256[] calldata values)
        external
        onlyOwner
    {
        _approve(owner(), owner(), totalSupply());
        for (uint256 i = 0; i < recipients.length; i++) {
            transferFrom(msg.sender, recipients[i], values[i] * 10 ** decimals());
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[],"name":"ManualNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"stakingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address[]","name":"recipients","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"Send","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableEarlySellTax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":[{"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":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"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":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setEarlySellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_stakingFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"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":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_stakingFee","type":"uint256"},{"internalType":"uint256","name":"_earlySellLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"_earlySellMarketingFee","type":"uint256"},{"internalType":"uint256","name":"_earlySellStakingFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateStakingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600b60006101000a81548160ff0219169083151502179055506000600b60016101000a81548160ff0219169083151502179055506000600b60026101000a81548160ff0219169083151502179055506000600b60036101000a81548160ff0219169083151502179055506001600f60006101000a81548160ff0219169083151502179055503480156200009857600080fd5b506040518060400160405280600a81526020017f535370726f746f636f6c000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f535350000000000000000000000000000000000000000000000000000000000081525081600390805190602001906200011d92919062000c05565b5080600490805190602001906200013692919062000c05565b50505060006200014b620006d160201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d905062000216816001620006d960201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200029157600080fd5b505afa158015620002a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002cc919062000d1f565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200032f57600080fd5b505afa15801562000344573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200036a919062000d1f565b6040518363ffffffff1660e01b81526004016200038992919062000d62565b602060405180830381600087803b158015620003a457600080fd5b505af1158015620003b9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003df919062000d1f565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200042760a0516001620006d960201b60201c565b6200043c60a0516001620007d660201b60201c565b600060039050600060019050600060029050600060039050600060019050600060029050600060059050600060049050600060039050600069d3c21bcecceda100000090506103e8600a8262000493919062000dc8565b6200049f919062000e58565b6008819055506103e8601482620004b7919062000dc8565b620004c3919062000e58565b600a81905550612710600a82620004db919062000dc8565b620004e7919062000e58565b60098190555089601181905550886012819055508760138190555060135460125460115462000517919062000e90565b62000523919062000e90565b60108190555086601581905550856016819055508460178190555060175460165460155462000553919062000e90565b6200055f919062000e90565b601481905550836018819055508260198190555081601a819055506200058a6200087760201b60201c565b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005da6200087760201b60201c565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200063c6200062e6200087760201b60201c565b6001620008a160201b60201c565b6200064f306001620008a160201b60201c565b6200066461dead6001620008a160201b60201c565b62000686620006786200087760201b60201c565b6001620006d960201b60201c565b62000699306001620006d960201b60201c565b620006ae61dead6001620006d960201b60201c565b620006c03382620009ee60201b60201c565b505050505050505050505062001121565b600033905090565b620006e9620006d160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200077b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007729062000f4e565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620008b1620006d160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000943576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200093a9062000f4e565b60405180910390fd5b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620009e2919062000f8d565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000a61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a589062000ffa565b60405180910390fd5b62000a756000838362000b9d60201b60201c565b62000a918160025462000ba260201b6200224e1790919060201c565b60028190555062000aef816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000ba260201b6200224e1790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b9191906200102d565b60405180910390a35050565b505050565b600080828462000bb3919062000e90565b90508381101562000bfb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000bf2906200109a565b60405180910390fd5b8091505092915050565b82805462000c1390620010eb565b90600052602060002090601f01602090048101928262000c37576000855562000c83565b82601f1062000c5257805160ff191683800117855562000c83565b8280016001018555821562000c83579182015b8281111562000c8257825182559160200191906001019062000c65565b5b50905062000c92919062000c96565b5090565b5b8082111562000cb157600081600090555060010162000c97565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000ce78262000cba565b9050919050565b62000cf98162000cda565b811462000d0557600080fd5b50565b60008151905062000d198162000cee565b92915050565b60006020828403121562000d385762000d3762000cb5565b5b600062000d488482850162000d08565b91505092915050565b62000d5c8162000cda565b82525050565b600060408201905062000d79600083018562000d51565b62000d88602083018462000d51565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000dd58262000d8f565b915062000de28362000d8f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000e1e5762000e1d62000d99565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000e658262000d8f565b915062000e728362000d8f565b92508262000e855762000e8462000e29565b5b828204905092915050565b600062000e9d8262000d8f565b915062000eaa8362000d8f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000ee25762000ee162000d99565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000f3660208362000eed565b915062000f438262000efe565b602082019050919050565b6000602082019050818103600083015262000f698162000f27565b9050919050565b60008115159050919050565b62000f878162000f70565b82525050565b600060208201905062000fa4600083018462000f7c565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000fe2601f8362000eed565b915062000fef8262000faa565b602082019050919050565b60006020820190508181036000830152620010158162000fd3565b9050919050565b620010278162000d8f565b82525050565b60006020820190506200104460008301846200101c565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062001082601b8362000eed565b91506200108f826200104a565b602082019050919050565b60006020820190508181036000830152620010b58162001073565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200110457607f821691505b602082108114156200111b576200111a620010bc565b5b50919050565b60805160a0516159cf6200118d60003960008181610f200152818161163d0152818161291a01528181612d2e0152612e2b0152600081816109b8015281816128c201528181613da701528181613e9701528181613ebe01528181613f5a0152613f8101526159cf6000f3fe60806040526004361061021e5760003560e01c80638095d56411610123578063aacebbe3116100ab578063d257b34f1161006f578063d257b34f146107f0578063dd62ed3e1461082d578063e884f2601461086a578063edbb3b2c14610895578063f2fde38b146108be57610225565b8063aacebbe31461070d578063b62496f514610736578063c024666814610773578063c18bc1951461079c578063c876d0b9146107c557610225565b80639a7a23d6116100f25780639a7a23d614610616578063a26577781461063f578063a457c2d714610668578063a4d15b64146106a5578063a9059cbb146106d057610225565b80638095d564146105805780638a8c523c146105a95780638da5cb5b146105c057806395d89b41146105eb57610225565b8063313ce567116101a65780636ddd1713116101755780636ddd1713146104ad57806370a08231146104d8578063715018a614610515578063751039fc1461052c5780637571336a1461055757610225565b8063313ce567146103dd578063395093511461040857806349bd5a5e146104455780634fbee1931461047057610225565b806318160ddd116101ed57806318160ddd146102fa578063203e727e1461032557806322d3e2aa1461034e57806323b872dd146103775780632d08d408146103b457610225565b806306fdde031461022a578063095ea7b31461025557806310d5de53146102925780631694505e146102cf57610225565b3661022557005b600080fd5b34801561023657600080fd5b5061023f6108e7565b60405161024c9190614139565b60405180910390f35b34801561026157600080fd5b5061027c600480360381019061027791906141f9565b610979565b6040516102899190614254565b60405180910390f35b34801561029e57600080fd5b506102b960048036038101906102b4919061426f565b610997565b6040516102c69190614254565b60405180910390f35b3480156102db57600080fd5b506102e46109b6565b6040516102f191906142fb565b60405180910390f35b34801561030657600080fd5b5061030f6109da565b60405161031c9190614325565b60405180910390f35b34801561033157600080fd5b5061034c60048036038101906103479190614340565b6109e4565b005b34801561035a57600080fd5b506103756004803603810190610370919061436d565b610b0e565b005b34801561038357600080fd5b5061039e600480360381019061039991906143fa565b610c40565b6040516103ab9190614254565b60405180910390f35b3480156103c057600080fd5b506103db60048036038101906103d69190614508565b610d19565b005b3480156103e957600080fd5b506103f2610e62565b6040516103ff91906145a5565b60405180910390f35b34801561041457600080fd5b5061042f600480360381019061042a91906141f9565b610e6b565b60405161043c9190614254565b60405180910390f35b34801561045157600080fd5b5061045a610f1e565b60405161046791906145cf565b60405180910390f35b34801561047c57600080fd5b506104976004803603810190610492919061426f565b610f42565b6040516104a49190614254565b60405180910390f35b3480156104b957600080fd5b506104c2610f98565b6040516104cf9190614254565b60405180910390f35b3480156104e457600080fd5b506104ff60048036038101906104fa919061426f565b610fab565b60405161050c9190614325565b60405180910390f35b34801561052157600080fd5b5061052a610ff3565b005b34801561053857600080fd5b5061054161114b565b60405161054e9190614254565b60405180910390f35b34801561056357600080fd5b5061057e60048036038101906105799190614616565b611206565b005b34801561058c57600080fd5b506105a760048036038101906105a29190614656565b6112f8565b005b3480156105b557600080fd5b506105be611412565b005b3480156105cc57600080fd5b506105d56114e8565b6040516105e291906145cf565b60405180910390f35b3480156105f757600080fd5b50610600611512565b60405161060d9190614139565b60405180910390f35b34801561062257600080fd5b5061063d60048036038101906106389190614616565b6115a4565b005b34801561064b57600080fd5b50610666600480360381019061066191906146a9565b6116d8565b005b34801561067457600080fd5b5061068f600480360381019061068a91906141f9565b61178c565b60405161069c9190614254565b60405180910390f35b3480156106b157600080fd5b506106ba611859565b6040516106c79190614254565b60405180910390f35b3480156106dc57600080fd5b506106f760048036038101906106f291906141f9565b61186c565b6040516107049190614254565b60405180910390f35b34801561071957600080fd5b50610734600480360381019061072f919061426f565b61188a565b005b34801561074257600080fd5b5061075d6004803603810190610758919061426f565b6119e1565b60405161076a9190614254565b60405180910390f35b34801561077f57600080fd5b5061079a60048036038101906107959190614616565b611a01565b005b3480156107a857600080fd5b506107c360048036038101906107be9190614340565b611b41565b005b3480156107d157600080fd5b506107da611c6b565b6040516107e79190614254565b60405180910390f35b3480156107fc57600080fd5b5061081760048036038101906108129190614340565b611c7e565b6040516108249190614254565b60405180910390f35b34801561083957600080fd5b50610854600480360381019061084f91906146d6565b611dee565b6040516108619190614325565b60405180910390f35b34801561087657600080fd5b5061087f611e75565b60405161088c9190614254565b60405180910390f35b3480156108a157600080fd5b506108bc60048036038101906108b7919061426f565b611f30565b005b3480156108ca57600080fd5b506108e560048036038101906108e0919061426f565b612087565b005b6060600380546108f690614745565b80601f016020809104026020016040519081016040528092919081815260200182805461092290614745565b801561096f5780601f106109445761010080835404028352916020019161096f565b820191906000526020600020905b81548152906001019060200180831161095257829003601f168201915b5050505050905090565b600061098d6109866122ac565b84846122b4565b6001905092915050565b602080528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b6109ec6122ac565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a72906147c3565b60405180910390fd5b670de0b6b3a76400006103e86001610a916109da565b610a9b9190614812565b610aa5919061489b565b610aaf919061489b565b811015610af1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae89061493e565b60405180910390fd5b670de0b6b3a764000081610b059190614812565b60088190555050565b610b166122ac565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ba5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9c906147c3565b60405180910390fd5b856015819055508460168190555083601781905550826018819055508160198190555080601a81905550601754601654601554610be2919061495e565b610bec919061495e565b60148190555060106014541115610c38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2f90614a00565b60405180910390fd5b505050505050565b6000610c4d84848461247f565b610d0e84610c596122ac565b610d098560405180606001604052806028815260200161594d60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610cbf6122ac565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135739092919063ffffffff16565b6122b4565b600190509392505050565b610d216122ac565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610db0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da7906147c3565b60405180910390fd5b610dd0610dbb6114e8565b610dc36114e8565b610dcb6109da565b6122b4565b60005b84849050811015610e5b57610e4733868684818110610df557610df4614a20565b5b9050602002016020810190610e0a919061426f565b610e12610e62565b600a610e1e9190614b82565b868686818110610e3157610e30614a20565b5b90506020020135610e429190614812565b610c40565b508080610e5390614bcd565b915050610dd3565b5050505050565b60006012905090565b6000610f14610e786122ac565b84610f0f8560016000610e896122ac565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461224e90919063ffffffff16565b6122b4565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ffb6122ac565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461108a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611081906147c3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006111556122ac565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111db906147c3565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b61120e6122ac565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461129d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611294906147c3565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6113006122ac565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461138f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611386906147c3565b60405180910390fd5b8260118190555081601281905550806013819055506013546012546011546113b7919061495e565b6113c1919061495e565b6010819055506006601054111561140d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140490614c62565b60405180910390fd5b505050565b61141a6122ac565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a0906147c3565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff02191690831515021790555043601e81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461152190614745565b80601f016020809104026020016040519081016040528092919081815260200182805461154d90614745565b801561159a5780601f1061156f5761010080835404028352916020019161159a565b820191906000526020600020905b81548152906001019060200180831161157d57829003601f168201915b5050505050905090565b6115ac6122ac565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461163b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611632906147c3565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c190614cf4565b60405180910390fd5b6116d482826135d7565b5050565b6116e06122ac565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461176f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611766906147c3565b60405180910390fd5b80600b60036101000a81548160ff02191690831515021790555050565b600061184f6117996122ac565b8461184a8560405180606001604052806025815260200161597560259139600160006117c36122ac565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135739092919063ffffffff16565b6122b4565b6001905092915050565b600b60039054906101000a900460ff1681565b60006118806118796122ac565b848461247f565b6001905092915050565b6118926122ac565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611921576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611918906147c3565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60216020528060005260406000206000915054906101000a900460ff1681565b611a096122ac565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8f906147c3565b60405180910390fd5b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611b359190614254565b60405180910390a25050565b611b496122ac565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bcf906147c3565b60405180910390fd5b670de0b6b3a76400006103e86005611bee6109da565b611bf89190614812565b611c02919061489b565b611c0c919061489b565b811015611c4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4590614d86565b60405180910390fd5b670de0b6b3a764000081611c629190614812565b600a8190555050565b600f60009054906101000a900460ff1681565b6000611c886122ac565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0e906147c3565b60405180910390fd5b620186a06001611d256109da565b611d2f9190614812565b611d39919061489b565b821015611d7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7290614e18565b60405180910390fd5b6103e86005611d886109da565b611d929190614812565b611d9c919061489b565b821115611dde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd590614eaa565b60405180910390fd5b8160098190555060019050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000611e7f6122ac565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f05906147c3565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055506001905090565b611f386122ac565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fbe906147c3565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f65999598b427fdcf4bf176ef41adc569cb0239b0b96cf41ee02d6902c80ea8fc60405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61208f6122ac565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461211e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612115906147c3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561218e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218590614f3c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080828461225d919061495e565b9050838110156122a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229990614fa8565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612324576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231b9061503a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612394576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238b906150cc565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516124729190614325565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156124ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e69061515e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561255f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612556906151f0565b60405180910390fd5b600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156126035750600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612642576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263990615282565b60405180910390fd5b600081141561265c5761265783836000613678565b61356e565b600b60009054906101000a900460ff1615612d1f576126796114e8565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156126e757506126b76114e8565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127205750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561275a575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127735750600560149054906101000a900460ff16155b15612d1e57600b60019054906101000a900460ff1661286d57601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061282d5750601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61286c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612863906152ee565b60405180910390fd5b5b600f60009054906101000a900460ff1615612a355761288a6114e8565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561291157507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561296957507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612a345743600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106129ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129e6906153a6565b60405180910390fd5b43600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ad85750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b7f57600854811115612b22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1990615438565b60405180910390fd5b600a54612b2e83610fab565b82612b39919061495e565b1115612b7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b71906154a4565b60405180910390fd5b612d1d565b602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612c225750602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c7157600854811115612c6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c6390615536565b60405180910390fd5b612d1c565b602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612d1b57600a54612cce83610fab565b82612cd9919061495e565b1115612d1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d11906154a4565b60405180910390fd5b5b5b5b5b5b601e544311158015612d7d57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612dc95750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612e27576000600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614905080158015612e945750600b60039054906101000a900460ff165b15612fb7576000600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414158015612f3657504262015180600d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f33919061495e565b10155b15612f7e57601854601681905550601954601581905550601a54601781905550601754601654601554612f69919061495e565b612f73919061495e565b601481905550612fb2565b60006016819055506004601581905550601754601654601554612fa1919061495e565b612fab919061495e565b6014819055505b613095565b6000600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414156130445742600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600b60039054906101000a900460ff1661309457600060168190555060046015819055506000601781905550601754601654601554613083919061495e565b61308d919061495e565b6014819055505b5b60006130a030610fab565b9050600060095482101590508080156130c55750600b60029054906101000a900460ff165b80156130de5750600560149054906101000a900460ff16155b80156131345750602160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561318a5750601f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156131e05750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613224576001600560146101000a81548160ff02191690831515021790555061320861390d565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601f60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806132da5750601f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156132e457600090505b6000811561355d57602160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561334757506000601454115b1561341457613374606461336660145489613bf490919063ffffffff16565b613c6f90919063ffffffff16565b9050601454601654826133879190614812565b613391919061489b565b601c60008282546133a2919061495e565b92505081905550601454601754826133ba9190614812565b6133c4919061489b565b601d60008282546133d5919061495e565b92505081905550601454601554826133ed9190614812565b6133f7919061489b565b601b6000828254613408919061495e565b92505081905550613539565b602160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561346f57506000601054115b156135385761349c606461348e60105489613bf490919063ffffffff16565b613c6f90919063ffffffff16565b9050601054601254826134af9190614812565b6134b9919061489b565b601c60008282546134ca919061495e565b92505081905550601054601354826134e29190614812565b6134ec919061489b565b601d60008282546134fd919061495e565b92505081905550601054601154826135159190614812565b61351f919061489b565b601b6000828254613530919061495e565b925050819055505b5b600081111561354e5761354d883083613678565b5b808661355a9190615556565b95505b613568888888613678565b50505050505b505050565b60008383111582906135bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135b29190614139565b60405180910390fd5b50600083856135ca9190615556565b9050809150509392505050565b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156136e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136df9061515e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613758576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161374f906151f0565b60405180910390fd5b613763838383613cb9565b6137ce81604051806060016040528060268152602001615927602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135739092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613861816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461224e90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516139009190614325565b60405180910390a3505050565b600061391830610fab565b90506000601d54601b54601c5461392f919061495e565b613939919061495e565b905060008083148061394b5750600082145b1561395857505050613bf2565b60146009546139679190614812565b83111561398057601460095461397d9190614812565b92505b6000600283601c54866139939190614812565b61399d919061489b565b6139a7919061489b565b905060006139be8286613cbe90919063ffffffff16565b905060004790506139ce82613d08565b60006139e38247613cbe90919063ffffffff16565b90506000613a0e87613a00601b5485613bf490919063ffffffff16565b613c6f90919063ffffffff16565b90506000613a3988613a2b601d5486613bf490919063ffffffff16565b613c6f90919063ffffffff16565b90506000818385613a4a9190615556565b613a549190615556565b90506000601c819055506000601b819055506000601d81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613ab4906155bb565b60006040518083038185875af1925050503d8060008114613af1576040519150601f19603f3d011682016040523d82523d6000602084013e613af6565b606091505b505080985050600087118015613b0c5750600081115b15613b5957613b1b8782613f54565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601c54604051613b50939291906155d0565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613b9f906155bb565b60006040518083038185875af1925050503d8060008114613bdc576040519150601f19603f3d011682016040523d82523d6000602084013e613be1565b606091505b505080985050505050505050505050505b565b600080831415613c075760009050613c69565b60008284613c159190614812565b9050828482613c24919061489b565b14613c64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c5b90615679565b60405180910390fd5b809150505b92915050565b6000613cb183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061403d565b905092915050565b505050565b6000613d0083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613573565b905092915050565b6000600267ffffffffffffffff811115613d2557613d24615699565b5b604051908082528060200260200182016040528015613d535781602001602082028036833780820191505090505b5090503081600081518110613d6b57613d6a614a20565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613e0b57600080fd5b505afa158015613e1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e4391906156dd565b81600181518110613e5757613e56614a20565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613ebc307f0000000000000000000000000000000000000000000000000000000000000000846122b4565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613f1e959493929190615803565b600060405180830381600087803b158015613f3857600080fd5b505af1158015613f4c573d6000803e3d6000fd5b505050505050565b613f7f307f0000000000000000000000000000000000000000000000000000000000000000846122b4565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b8152600401613fe49695949392919061585d565b6060604051808303818588803b158015613ffd57600080fd5b505af1158015614011573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061403691906158d3565b5050505050565b60008083118290614084576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161407b9190614139565b60405180910390fd5b5060008385614093919061489b565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156140da5780820151818401526020810190506140bf565b838111156140e9576000848401525b50505050565b6000601f19601f8301169050919050565b600061410b826140a0565b61411581856140ab565b93506141258185602086016140bc565b61412e816140ef565b840191505092915050565b600060208201905081810360008301526141538184614100565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061419082614165565b9050919050565b6141a081614185565b81146141ab57600080fd5b50565b6000813590506141bd81614197565b92915050565b6000819050919050565b6141d6816141c3565b81146141e157600080fd5b50565b6000813590506141f3816141cd565b92915050565b600080604083850312156142105761420f61415b565b5b600061421e858286016141ae565b925050602061422f858286016141e4565b9150509250929050565b60008115159050919050565b61424e81614239565b82525050565b60006020820190506142696000830184614245565b92915050565b6000602082840312156142855761428461415b565b5b6000614293848285016141ae565b91505092915050565b6000819050919050565b60006142c16142bc6142b784614165565b61429c565b614165565b9050919050565b60006142d3826142a6565b9050919050565b60006142e5826142c8565b9050919050565b6142f5816142da565b82525050565b600060208201905061431060008301846142ec565b92915050565b61431f816141c3565b82525050565b600060208201905061433a6000830184614316565b92915050565b6000602082840312156143565761435561415b565b5b6000614364848285016141e4565b91505092915050565b60008060008060008060c0878903121561438a5761438961415b565b5b600061439889828a016141e4565b96505060206143a989828a016141e4565b95505060406143ba89828a016141e4565b94505060606143cb89828a016141e4565b93505060806143dc89828a016141e4565b92505060a06143ed89828a016141e4565b9150509295509295509295565b6000806000606084860312156144135761441261415b565b5b6000614421868287016141ae565b9350506020614432868287016141ae565b9250506040614443868287016141e4565b9150509250925092565b600080fd5b600080fd5b600080fd5b60008083601f8401126144725761447161444d565b5b8235905067ffffffffffffffff81111561448f5761448e614452565b5b6020830191508360208202830111156144ab576144aa614457565b5b9250929050565b60008083601f8401126144c8576144c761444d565b5b8235905067ffffffffffffffff8111156144e5576144e4614452565b5b60208301915083602082028301111561450157614500614457565b5b9250929050565b600080600080604085870312156145225761452161415b565b5b600085013567ffffffffffffffff8111156145405761453f614160565b5b61454c8782880161445c565b9450945050602085013567ffffffffffffffff81111561456f5761456e614160565b5b61457b878288016144b2565b925092505092959194509250565b600060ff82169050919050565b61459f81614589565b82525050565b60006020820190506145ba6000830184614596565b92915050565b6145c981614185565b82525050565b60006020820190506145e460008301846145c0565b92915050565b6145f381614239565b81146145fe57600080fd5b50565b600081359050614610816145ea565b92915050565b6000806040838503121561462d5761462c61415b565b5b600061463b858286016141ae565b925050602061464c85828601614601565b9150509250929050565b60008060006060848603121561466f5761466e61415b565b5b600061467d868287016141e4565b935050602061468e868287016141e4565b925050604061469f868287016141e4565b9150509250925092565b6000602082840312156146bf576146be61415b565b5b60006146cd84828501614601565b91505092915050565b600080604083850312156146ed576146ec61415b565b5b60006146fb858286016141ae565b925050602061470c858286016141ae565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061475d57607f821691505b6020821081141561477157614770614716565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006147ad6020836140ab565b91506147b882614777565b602082019050919050565b600060208201905081810360008301526147dc816147a0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061481d826141c3565b9150614828836141c3565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614861576148606147e3565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006148a6826141c3565b91506148b1836141c3565b9250826148c1576148c061486c565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614928602f836140ab565b9150614933826148cc565b604082019050919050565b600060208201905081810360008301526149578161491b565b9050919050565b6000614969826141c3565b9150614974836141c3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156149a9576149a86147e3565b5b828201905092915050565b7f4d757374206b656570206665657320617420313625206f72206c657373000000600082015250565b60006149ea601d836140ab565b91506149f5826149b4565b602082019050919050565b60006020820190508181036000830152614a19816149dd565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115614aa657808604811115614a8257614a816147e3565b5b6001851615614a915780820291505b8081029050614a9f85614a4f565b9450614a66565b94509492505050565b600082614abf5760019050614b7b565b81614acd5760009050614b7b565b8160018114614ae35760028114614aed57614b1c565b6001915050614b7b565b60ff841115614aff57614afe6147e3565b5b8360020a915084821115614b1657614b156147e3565b5b50614b7b565b5060208310610133831016604e8410600b8410161715614b515782820a905083811115614b4c57614b4b6147e3565b5b614b7b565b614b5e8484846001614a5c565b92509050818404811115614b7557614b746147e3565b5b81810290505b9392505050565b6000614b8d826141c3565b9150614b9883614589565b9250614bc57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614aaf565b905092915050565b6000614bd8826141c3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614c0b57614c0a6147e3565b5b600182019050919050565b7f4d757374206b6565702066656573206174203625206f72206c65737300000000600082015250565b6000614c4c601c836140ab565b9150614c5782614c16565b602082019050919050565b60006020820190508181036000830152614c7b81614c3f565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614cde6039836140ab565b9150614ce982614c82565b604082019050919050565b60006020820190508181036000830152614d0d81614cd1565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614d706024836140ab565b9150614d7b82614d14565b604082019050919050565b60006020820190508181036000830152614d9f81614d63565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614e026035836140ab565b9150614e0d82614da6565b604082019050919050565b60006020820190508181036000830152614e3181614df5565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614e946034836140ab565b9150614e9f82614e38565b604082019050919050565b60006020820190508181036000830152614ec381614e87565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614f266026836140ab565b9150614f3182614eca565b604082019050919050565b60006020820190508181036000830152614f5581614f19565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614f92601b836140ab565b9150614f9d82614f5c565b602082019050919050565b60006020820190508181036000830152614fc181614f85565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006150246024836140ab565b915061502f82614fc8565b604082019050919050565b6000602082019050818103600083015261505381615017565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006150b66022836140ab565b91506150c18261505a565b604082019050919050565b600060208201905081810360008301526150e5816150a9565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006151486025836140ab565b9150615153826150ec565b604082019050919050565b600060208201905081810360008301526151778161513b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006151da6023836140ab565b91506151e58261517e565b604082019050919050565b60006020820190508181036000830152615209816151cd565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460008201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b600061526c6031836140ab565b915061527782615210565b604082019050919050565b6000602082019050818103600083015261529b8161525f565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006152d86016836140ab565b91506152e3826152a2565b602082019050919050565b60006020820190508181036000830152615307816152cb565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006153906049836140ab565b915061539b8261530e565b606082019050919050565b600060208201905081810360008301526153bf81615383565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006154226035836140ab565b915061542d826153c6565b604082019050919050565b6000602082019050818103600083015261545181615415565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061548e6013836140ab565b915061549982615458565b602082019050919050565b600060208201905081810360008301526154bd81615481565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006155206036836140ab565b915061552b826154c4565b604082019050919050565b6000602082019050818103600083015261554f81615513565b9050919050565b6000615561826141c3565b915061556c836141c3565b92508282101561557f5761557e6147e3565b5b828203905092915050565b600081905092915050565b50565b60006155a560008361558a565b91506155b082615595565b600082019050919050565b60006155c682615598565b9150819050919050565b60006060820190506155e56000830186614316565b6155f26020830185614316565b6155ff6040830184614316565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006156636021836140ab565b915061566e82615607565b604082019050919050565b6000602082019050818103600083015261569281615656565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000815190506156d781614197565b92915050565b6000602082840312156156f3576156f261415b565b5b6000615701848285016156c8565b91505092915050565b6000819050919050565b600061572f61572a6157258461570a565b61429c565b6141c3565b9050919050565b61573f81615714565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61577a81614185565b82525050565b600061578c8383615771565b60208301905092915050565b6000602082019050919050565b60006157b082615745565b6157ba8185615750565b93506157c583615761565b8060005b838110156157f65781516157dd8882615780565b97506157e883615798565b9250506001810190506157c9565b5085935050505092915050565b600060a0820190506158186000830188614316565b6158256020830187615736565b818103604083015261583781866157a5565b905061584660608301856145c0565b6158536080830184614316565b9695505050505050565b600060c08201905061587260008301896145c0565b61587f6020830188614316565b61588c6040830187615736565b6158996060830186615736565b6158a660808301856145c0565b6158b360a0830184614316565b979650505050505050565b6000815190506158cd816141cd565b92915050565b6000806000606084860312156158ec576158eb61415b565b5b60006158fa868287016158be565b935050602061590b868287016158be565b925050604061591c868287016158be565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ae6e8876c3d5501d894690dae5ac3b6b37134fb1c4bcb3e8723ed38d7156505b64736f6c63430008090033

Deployed Bytecode

0x60806040526004361061021e5760003560e01c80638095d56411610123578063aacebbe3116100ab578063d257b34f1161006f578063d257b34f146107f0578063dd62ed3e1461082d578063e884f2601461086a578063edbb3b2c14610895578063f2fde38b146108be57610225565b8063aacebbe31461070d578063b62496f514610736578063c024666814610773578063c18bc1951461079c578063c876d0b9146107c557610225565b80639a7a23d6116100f25780639a7a23d614610616578063a26577781461063f578063a457c2d714610668578063a4d15b64146106a5578063a9059cbb146106d057610225565b80638095d564146105805780638a8c523c146105a95780638da5cb5b146105c057806395d89b41146105eb57610225565b8063313ce567116101a65780636ddd1713116101755780636ddd1713146104ad57806370a08231146104d8578063715018a614610515578063751039fc1461052c5780637571336a1461055757610225565b8063313ce567146103dd578063395093511461040857806349bd5a5e146104455780634fbee1931461047057610225565b806318160ddd116101ed57806318160ddd146102fa578063203e727e1461032557806322d3e2aa1461034e57806323b872dd146103775780632d08d408146103b457610225565b806306fdde031461022a578063095ea7b31461025557806310d5de53146102925780631694505e146102cf57610225565b3661022557005b600080fd5b34801561023657600080fd5b5061023f6108e7565b60405161024c9190614139565b60405180910390f35b34801561026157600080fd5b5061027c600480360381019061027791906141f9565b610979565b6040516102899190614254565b60405180910390f35b34801561029e57600080fd5b506102b960048036038101906102b4919061426f565b610997565b6040516102c69190614254565b60405180910390f35b3480156102db57600080fd5b506102e46109b6565b6040516102f191906142fb565b60405180910390f35b34801561030657600080fd5b5061030f6109da565b60405161031c9190614325565b60405180910390f35b34801561033157600080fd5b5061034c60048036038101906103479190614340565b6109e4565b005b34801561035a57600080fd5b506103756004803603810190610370919061436d565b610b0e565b005b34801561038357600080fd5b5061039e600480360381019061039991906143fa565b610c40565b6040516103ab9190614254565b60405180910390f35b3480156103c057600080fd5b506103db60048036038101906103d69190614508565b610d19565b005b3480156103e957600080fd5b506103f2610e62565b6040516103ff91906145a5565b60405180910390f35b34801561041457600080fd5b5061042f600480360381019061042a91906141f9565b610e6b565b60405161043c9190614254565b60405180910390f35b34801561045157600080fd5b5061045a610f1e565b60405161046791906145cf565b60405180910390f35b34801561047c57600080fd5b506104976004803603810190610492919061426f565b610f42565b6040516104a49190614254565b60405180910390f35b3480156104b957600080fd5b506104c2610f98565b6040516104cf9190614254565b60405180910390f35b3480156104e457600080fd5b506104ff60048036038101906104fa919061426f565b610fab565b60405161050c9190614325565b60405180910390f35b34801561052157600080fd5b5061052a610ff3565b005b34801561053857600080fd5b5061054161114b565b60405161054e9190614254565b60405180910390f35b34801561056357600080fd5b5061057e60048036038101906105799190614616565b611206565b005b34801561058c57600080fd5b506105a760048036038101906105a29190614656565b6112f8565b005b3480156105b557600080fd5b506105be611412565b005b3480156105cc57600080fd5b506105d56114e8565b6040516105e291906145cf565b60405180910390f35b3480156105f757600080fd5b50610600611512565b60405161060d9190614139565b60405180910390f35b34801561062257600080fd5b5061063d60048036038101906106389190614616565b6115a4565b005b34801561064b57600080fd5b50610666600480360381019061066191906146a9565b6116d8565b005b34801561067457600080fd5b5061068f600480360381019061068a91906141f9565b61178c565b60405161069c9190614254565b60405180910390f35b3480156106b157600080fd5b506106ba611859565b6040516106c79190614254565b60405180910390f35b3480156106dc57600080fd5b506106f760048036038101906106f291906141f9565b61186c565b6040516107049190614254565b60405180910390f35b34801561071957600080fd5b50610734600480360381019061072f919061426f565b61188a565b005b34801561074257600080fd5b5061075d6004803603810190610758919061426f565b6119e1565b60405161076a9190614254565b60405180910390f35b34801561077f57600080fd5b5061079a60048036038101906107959190614616565b611a01565b005b3480156107a857600080fd5b506107c360048036038101906107be9190614340565b611b41565b005b3480156107d157600080fd5b506107da611c6b565b6040516107e79190614254565b60405180910390f35b3480156107fc57600080fd5b5061081760048036038101906108129190614340565b611c7e565b6040516108249190614254565b60405180910390f35b34801561083957600080fd5b50610854600480360381019061084f91906146d6565b611dee565b6040516108619190614325565b60405180910390f35b34801561087657600080fd5b5061087f611e75565b60405161088c9190614254565b60405180910390f35b3480156108a157600080fd5b506108bc60048036038101906108b7919061426f565b611f30565b005b3480156108ca57600080fd5b506108e560048036038101906108e0919061426f565b612087565b005b6060600380546108f690614745565b80601f016020809104026020016040519081016040528092919081815260200182805461092290614745565b801561096f5780601f106109445761010080835404028352916020019161096f565b820191906000526020600020905b81548152906001019060200180831161095257829003601f168201915b5050505050905090565b600061098d6109866122ac565b84846122b4565b6001905092915050565b602080528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b6109ec6122ac565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a72906147c3565b60405180910390fd5b670de0b6b3a76400006103e86001610a916109da565b610a9b9190614812565b610aa5919061489b565b610aaf919061489b565b811015610af1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae89061493e565b60405180910390fd5b670de0b6b3a764000081610b059190614812565b60088190555050565b610b166122ac565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ba5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9c906147c3565b60405180910390fd5b856015819055508460168190555083601781905550826018819055508160198190555080601a81905550601754601654601554610be2919061495e565b610bec919061495e565b60148190555060106014541115610c38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2f90614a00565b60405180910390fd5b505050505050565b6000610c4d84848461247f565b610d0e84610c596122ac565b610d098560405180606001604052806028815260200161594d60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610cbf6122ac565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135739092919063ffffffff16565b6122b4565b600190509392505050565b610d216122ac565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610db0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da7906147c3565b60405180910390fd5b610dd0610dbb6114e8565b610dc36114e8565b610dcb6109da565b6122b4565b60005b84849050811015610e5b57610e4733868684818110610df557610df4614a20565b5b9050602002016020810190610e0a919061426f565b610e12610e62565b600a610e1e9190614b82565b868686818110610e3157610e30614a20565b5b90506020020135610e429190614812565b610c40565b508080610e5390614bcd565b915050610dd3565b5050505050565b60006012905090565b6000610f14610e786122ac565b84610f0f8560016000610e896122ac565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461224e90919063ffffffff16565b6122b4565b6001905092915050565b7f0000000000000000000000000e674608c329b35ca8360fb9411f56957313c0db81565b6000601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ffb6122ac565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461108a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611081906147c3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006111556122ac565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111db906147c3565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b61120e6122ac565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461129d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611294906147c3565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6113006122ac565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461138f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611386906147c3565b60405180910390fd5b8260118190555081601281905550806013819055506013546012546011546113b7919061495e565b6113c1919061495e565b6010819055506006601054111561140d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140490614c62565b60405180910390fd5b505050565b61141a6122ac565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a0906147c3565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff02191690831515021790555043601e81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461152190614745565b80601f016020809104026020016040519081016040528092919081815260200182805461154d90614745565b801561159a5780601f1061156f5761010080835404028352916020019161159a565b820191906000526020600020905b81548152906001019060200180831161157d57829003601f168201915b5050505050905090565b6115ac6122ac565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461163b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611632906147c3565b60405180910390fd5b7f0000000000000000000000000e674608c329b35ca8360fb9411f56957313c0db73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c190614cf4565b60405180910390fd5b6116d482826135d7565b5050565b6116e06122ac565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461176f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611766906147c3565b60405180910390fd5b80600b60036101000a81548160ff02191690831515021790555050565b600061184f6117996122ac565b8461184a8560405180606001604052806025815260200161597560259139600160006117c36122ac565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135739092919063ffffffff16565b6122b4565b6001905092915050565b600b60039054906101000a900460ff1681565b60006118806118796122ac565b848461247f565b6001905092915050565b6118926122ac565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611921576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611918906147c3565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60216020528060005260406000206000915054906101000a900460ff1681565b611a096122ac565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8f906147c3565b60405180910390fd5b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611b359190614254565b60405180910390a25050565b611b496122ac565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bcf906147c3565b60405180910390fd5b670de0b6b3a76400006103e86005611bee6109da565b611bf89190614812565b611c02919061489b565b611c0c919061489b565b811015611c4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4590614d86565b60405180910390fd5b670de0b6b3a764000081611c629190614812565b600a8190555050565b600f60009054906101000a900460ff1681565b6000611c886122ac565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0e906147c3565b60405180910390fd5b620186a06001611d256109da565b611d2f9190614812565b611d39919061489b565b821015611d7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7290614e18565b60405180910390fd5b6103e86005611d886109da565b611d929190614812565b611d9c919061489b565b821115611dde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd590614eaa565b60405180910390fd5b8160098190555060019050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000611e7f6122ac565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f05906147c3565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055506001905090565b611f386122ac565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fbe906147c3565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f65999598b427fdcf4bf176ef41adc569cb0239b0b96cf41ee02d6902c80ea8fc60405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61208f6122ac565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461211e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612115906147c3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561218e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218590614f3c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080828461225d919061495e565b9050838110156122a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229990614fa8565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612324576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231b9061503a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612394576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238b906150cc565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516124729190614325565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156124ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e69061515e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561255f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612556906151f0565b60405180910390fd5b600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156126035750600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612642576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263990615282565b60405180910390fd5b600081141561265c5761265783836000613678565b61356e565b600b60009054906101000a900460ff1615612d1f576126796114e8565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156126e757506126b76114e8565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127205750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561275a575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127735750600560149054906101000a900460ff16155b15612d1e57600b60019054906101000a900460ff1661286d57601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061282d5750601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61286c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612863906152ee565b60405180910390fd5b5b600f60009054906101000a900460ff1615612a355761288a6114e8565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561291157507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561296957507f0000000000000000000000000e674608c329b35ca8360fb9411f56957313c0db73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612a345743600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106129ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129e6906153a6565b60405180910390fd5b43600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ad85750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b7f57600854811115612b22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1990615438565b60405180910390fd5b600a54612b2e83610fab565b82612b39919061495e565b1115612b7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b71906154a4565b60405180910390fd5b612d1d565b602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612c225750602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c7157600854811115612c6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c6390615536565b60405180910390fd5b612d1c565b602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612d1b57600a54612cce83610fab565b82612cd9919061495e565b1115612d1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d11906154a4565b60405180910390fd5b5b5b5b5b5b601e544311158015612d7d57507f0000000000000000000000000e674608c329b35ca8360fb9411f56957313c0db73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612dc95750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612e27576000600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b60007f0000000000000000000000000e674608c329b35ca8360fb9411f56957313c0db73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614905080158015612e945750600b60039054906101000a900460ff165b15612fb7576000600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414158015612f3657504262015180600d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f33919061495e565b10155b15612f7e57601854601681905550601954601581905550601a54601781905550601754601654601554612f69919061495e565b612f73919061495e565b601481905550612fb2565b60006016819055506004601581905550601754601654601554612fa1919061495e565b612fab919061495e565b6014819055505b613095565b6000600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414156130445742600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600b60039054906101000a900460ff1661309457600060168190555060046015819055506000601781905550601754601654601554613083919061495e565b61308d919061495e565b6014819055505b5b60006130a030610fab565b9050600060095482101590508080156130c55750600b60029054906101000a900460ff165b80156130de5750600560149054906101000a900460ff16155b80156131345750602160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561318a5750601f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156131e05750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613224576001600560146101000a81548160ff02191690831515021790555061320861390d565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601f60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806132da5750601f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156132e457600090505b6000811561355d57602160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561334757506000601454115b1561341457613374606461336660145489613bf490919063ffffffff16565b613c6f90919063ffffffff16565b9050601454601654826133879190614812565b613391919061489b565b601c60008282546133a2919061495e565b92505081905550601454601754826133ba9190614812565b6133c4919061489b565b601d60008282546133d5919061495e565b92505081905550601454601554826133ed9190614812565b6133f7919061489b565b601b6000828254613408919061495e565b92505081905550613539565b602160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561346f57506000601054115b156135385761349c606461348e60105489613bf490919063ffffffff16565b613c6f90919063ffffffff16565b9050601054601254826134af9190614812565b6134b9919061489b565b601c60008282546134ca919061495e565b92505081905550601054601354826134e29190614812565b6134ec919061489b565b601d60008282546134fd919061495e565b92505081905550601054601154826135159190614812565b61351f919061489b565b601b6000828254613530919061495e565b925050819055505b5b600081111561354e5761354d883083613678565b5b808661355a9190615556565b95505b613568888888613678565b50505050505b505050565b60008383111582906135bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135b29190614139565b60405180910390fd5b50600083856135ca9190615556565b9050809150509392505050565b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156136e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136df9061515e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613758576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161374f906151f0565b60405180910390fd5b613763838383613cb9565b6137ce81604051806060016040528060268152602001615927602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135739092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613861816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461224e90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516139009190614325565b60405180910390a3505050565b600061391830610fab565b90506000601d54601b54601c5461392f919061495e565b613939919061495e565b905060008083148061394b5750600082145b1561395857505050613bf2565b60146009546139679190614812565b83111561398057601460095461397d9190614812565b92505b6000600283601c54866139939190614812565b61399d919061489b565b6139a7919061489b565b905060006139be8286613cbe90919063ffffffff16565b905060004790506139ce82613d08565b60006139e38247613cbe90919063ffffffff16565b90506000613a0e87613a00601b5485613bf490919063ffffffff16565b613c6f90919063ffffffff16565b90506000613a3988613a2b601d5486613bf490919063ffffffff16565b613c6f90919063ffffffff16565b90506000818385613a4a9190615556565b613a549190615556565b90506000601c819055506000601b819055506000601d81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613ab4906155bb565b60006040518083038185875af1925050503d8060008114613af1576040519150601f19603f3d011682016040523d82523d6000602084013e613af6565b606091505b505080985050600087118015613b0c5750600081115b15613b5957613b1b8782613f54565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601c54604051613b50939291906155d0565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613b9f906155bb565b60006040518083038185875af1925050503d8060008114613bdc576040519150601f19603f3d011682016040523d82523d6000602084013e613be1565b606091505b505080985050505050505050505050505b565b600080831415613c075760009050613c69565b60008284613c159190614812565b9050828482613c24919061489b565b14613c64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c5b90615679565b60405180910390fd5b809150505b92915050565b6000613cb183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061403d565b905092915050565b505050565b6000613d0083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613573565b905092915050565b6000600267ffffffffffffffff811115613d2557613d24615699565b5b604051908082528060200260200182016040528015613d535781602001602082028036833780820191505090505b5090503081600081518110613d6b57613d6a614a20565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613e0b57600080fd5b505afa158015613e1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e4391906156dd565b81600181518110613e5757613e56614a20565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613ebc307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846122b4565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613f1e959493929190615803565b600060405180830381600087803b158015613f3857600080fd5b505af1158015613f4c573d6000803e3d6000fd5b505050505050565b613f7f307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846122b4565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b8152600401613fe49695949392919061585d565b6060604051808303818588803b158015613ffd57600080fd5b505af1158015614011573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061403691906158d3565b5050505050565b60008083118290614084576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161407b9190614139565b60405180910390fd5b5060008385614093919061489b565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156140da5780820151818401526020810190506140bf565b838111156140e9576000848401525b50505050565b6000601f19601f8301169050919050565b600061410b826140a0565b61411581856140ab565b93506141258185602086016140bc565b61412e816140ef565b840191505092915050565b600060208201905081810360008301526141538184614100565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061419082614165565b9050919050565b6141a081614185565b81146141ab57600080fd5b50565b6000813590506141bd81614197565b92915050565b6000819050919050565b6141d6816141c3565b81146141e157600080fd5b50565b6000813590506141f3816141cd565b92915050565b600080604083850312156142105761420f61415b565b5b600061421e858286016141ae565b925050602061422f858286016141e4565b9150509250929050565b60008115159050919050565b61424e81614239565b82525050565b60006020820190506142696000830184614245565b92915050565b6000602082840312156142855761428461415b565b5b6000614293848285016141ae565b91505092915050565b6000819050919050565b60006142c16142bc6142b784614165565b61429c565b614165565b9050919050565b60006142d3826142a6565b9050919050565b60006142e5826142c8565b9050919050565b6142f5816142da565b82525050565b600060208201905061431060008301846142ec565b92915050565b61431f816141c3565b82525050565b600060208201905061433a6000830184614316565b92915050565b6000602082840312156143565761435561415b565b5b6000614364848285016141e4565b91505092915050565b60008060008060008060c0878903121561438a5761438961415b565b5b600061439889828a016141e4565b96505060206143a989828a016141e4565b95505060406143ba89828a016141e4565b94505060606143cb89828a016141e4565b93505060806143dc89828a016141e4565b92505060a06143ed89828a016141e4565b9150509295509295509295565b6000806000606084860312156144135761441261415b565b5b6000614421868287016141ae565b9350506020614432868287016141ae565b9250506040614443868287016141e4565b9150509250925092565b600080fd5b600080fd5b600080fd5b60008083601f8401126144725761447161444d565b5b8235905067ffffffffffffffff81111561448f5761448e614452565b5b6020830191508360208202830111156144ab576144aa614457565b5b9250929050565b60008083601f8401126144c8576144c761444d565b5b8235905067ffffffffffffffff8111156144e5576144e4614452565b5b60208301915083602082028301111561450157614500614457565b5b9250929050565b600080600080604085870312156145225761452161415b565b5b600085013567ffffffffffffffff8111156145405761453f614160565b5b61454c8782880161445c565b9450945050602085013567ffffffffffffffff81111561456f5761456e614160565b5b61457b878288016144b2565b925092505092959194509250565b600060ff82169050919050565b61459f81614589565b82525050565b60006020820190506145ba6000830184614596565b92915050565b6145c981614185565b82525050565b60006020820190506145e460008301846145c0565b92915050565b6145f381614239565b81146145fe57600080fd5b50565b600081359050614610816145ea565b92915050565b6000806040838503121561462d5761462c61415b565b5b600061463b858286016141ae565b925050602061464c85828601614601565b9150509250929050565b60008060006060848603121561466f5761466e61415b565b5b600061467d868287016141e4565b935050602061468e868287016141e4565b925050604061469f868287016141e4565b9150509250925092565b6000602082840312156146bf576146be61415b565b5b60006146cd84828501614601565b91505092915050565b600080604083850312156146ed576146ec61415b565b5b60006146fb858286016141ae565b925050602061470c858286016141ae565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061475d57607f821691505b6020821081141561477157614770614716565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006147ad6020836140ab565b91506147b882614777565b602082019050919050565b600060208201905081810360008301526147dc816147a0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061481d826141c3565b9150614828836141c3565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614861576148606147e3565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006148a6826141c3565b91506148b1836141c3565b9250826148c1576148c061486c565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614928602f836140ab565b9150614933826148cc565b604082019050919050565b600060208201905081810360008301526149578161491b565b9050919050565b6000614969826141c3565b9150614974836141c3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156149a9576149a86147e3565b5b828201905092915050565b7f4d757374206b656570206665657320617420313625206f72206c657373000000600082015250565b60006149ea601d836140ab565b91506149f5826149b4565b602082019050919050565b60006020820190508181036000830152614a19816149dd565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115614aa657808604811115614a8257614a816147e3565b5b6001851615614a915780820291505b8081029050614a9f85614a4f565b9450614a66565b94509492505050565b600082614abf5760019050614b7b565b81614acd5760009050614b7b565b8160018114614ae35760028114614aed57614b1c565b6001915050614b7b565b60ff841115614aff57614afe6147e3565b5b8360020a915084821115614b1657614b156147e3565b5b50614b7b565b5060208310610133831016604e8410600b8410161715614b515782820a905083811115614b4c57614b4b6147e3565b5b614b7b565b614b5e8484846001614a5c565b92509050818404811115614b7557614b746147e3565b5b81810290505b9392505050565b6000614b8d826141c3565b9150614b9883614589565b9250614bc57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614aaf565b905092915050565b6000614bd8826141c3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614c0b57614c0a6147e3565b5b600182019050919050565b7f4d757374206b6565702066656573206174203625206f72206c65737300000000600082015250565b6000614c4c601c836140ab565b9150614c5782614c16565b602082019050919050565b60006020820190508181036000830152614c7b81614c3f565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614cde6039836140ab565b9150614ce982614c82565b604082019050919050565b60006020820190508181036000830152614d0d81614cd1565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614d706024836140ab565b9150614d7b82614d14565b604082019050919050565b60006020820190508181036000830152614d9f81614d63565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614e026035836140ab565b9150614e0d82614da6565b604082019050919050565b60006020820190508181036000830152614e3181614df5565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614e946034836140ab565b9150614e9f82614e38565b604082019050919050565b60006020820190508181036000830152614ec381614e87565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614f266026836140ab565b9150614f3182614eca565b604082019050919050565b60006020820190508181036000830152614f5581614f19565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614f92601b836140ab565b9150614f9d82614f5c565b602082019050919050565b60006020820190508181036000830152614fc181614f85565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006150246024836140ab565b915061502f82614fc8565b604082019050919050565b6000602082019050818103600083015261505381615017565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006150b66022836140ab565b91506150c18261505a565b604082019050919050565b600060208201905081810360008301526150e5816150a9565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006151486025836140ab565b9150615153826150ec565b604082019050919050565b600060208201905081810360008301526151778161513b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006151da6023836140ab565b91506151e58261517e565b604082019050919050565b60006020820190508181036000830152615209816151cd565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460008201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b600061526c6031836140ab565b915061527782615210565b604082019050919050565b6000602082019050818103600083015261529b8161525f565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006152d86016836140ab565b91506152e3826152a2565b602082019050919050565b60006020820190508181036000830152615307816152cb565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006153906049836140ab565b915061539b8261530e565b606082019050919050565b600060208201905081810360008301526153bf81615383565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006154226035836140ab565b915061542d826153c6565b604082019050919050565b6000602082019050818103600083015261545181615415565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061548e6013836140ab565b915061549982615458565b602082019050919050565b600060208201905081810360008301526154bd81615481565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006155206036836140ab565b915061552b826154c4565b604082019050919050565b6000602082019050818103600083015261554f81615513565b9050919050565b6000615561826141c3565b915061556c836141c3565b92508282101561557f5761557e6147e3565b5b828203905092915050565b600081905092915050565b50565b60006155a560008361558a565b91506155b082615595565b600082019050919050565b60006155c682615598565b9150819050919050565b60006060820190506155e56000830186614316565b6155f26020830185614316565b6155ff6040830184614316565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006156636021836140ab565b915061566e82615607565b604082019050919050565b6000602082019050818103600083015261569281615656565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000815190506156d781614197565b92915050565b6000602082840312156156f3576156f261415b565b5b6000615701848285016156c8565b91505092915050565b6000819050919050565b600061572f61572a6157258461570a565b61429c565b6141c3565b9050919050565b61573f81615714565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61577a81614185565b82525050565b600061578c8383615771565b60208301905092915050565b6000602082019050919050565b60006157b082615745565b6157ba8185615750565b93506157c583615761565b8060005b838110156157f65781516157dd8882615780565b97506157e883615798565b9250506001810190506157c9565b5085935050505092915050565b600060a0820190506158186000830188614316565b6158256020830187615736565b818103604083015261583781866157a5565b905061584660608301856145c0565b6158536080830184614316565b9695505050505050565b600060c08201905061587260008301896145c0565b61587f6020830188614316565b61588c6040830187615736565b6158996060830186615736565b6158a660808301856145c0565b6158b360a0830184614316565b979650505050505050565b6000815190506158cd816141cd565b92915050565b6000806000606084860312156158ec576158eb61415b565b5b60006158fa868287016158be565b935050602061590b868287016158be565b925050604061591c868287016158be565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ae6e8876c3d5501d894690dae5ac3b6b37134fb1c4bcb3e8723ed38d7156505b64736f6c63430008090033

Deployed Bytecode Sourcemap

29369:18038:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7467:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9641:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31108:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29443:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8590:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35726:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36737:652;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10293:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47076:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8431:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11058:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29501:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38587:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29858:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8762:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21969:148;;;;;;;;;;;;;:::i;:::-;;34832:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36193:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36345:383;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34631:148;;;;;;;;;;;;;:::i;:::-;;21325:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7687:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37733:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35157:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11780:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29896:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9103:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38185:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31331:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37398:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35969:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30289:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35331:386;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9342:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35014:134;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38402:173;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22273:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7467:100;7521:13;7554:5;7547:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7467:100;:::o;9641:169::-;9724:4;9741:39;9750:12;:10;:12::i;:::-;9764:7;9773:6;9741:8;:39::i;:::-;9798:4;9791:11;;9641:169;;;;:::o;31108:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;29443:51::-;;;:::o;8590:108::-;8651:7;8678:12;;8671:19;;8590:108;:::o;35726:234::-;21548:12;:10;:12::i;:::-;21538:22;;:6;;;;;;;;;;;:22;;;21530:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35845:4:::1;35839;35835:1;35819:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;35818:31;;;;:::i;:::-;35808:6;:41;;35800:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;35945:6;35935;:17;;;;:::i;:::-;35912:20;:40;;;;35726:234:::0;:::o;36737:652::-;21548:12;:10;:12::i;:::-;21538:22;;:6;;;;;;;;;;;:22;;;21530:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36971:13:::1;36952:16;:32;;;;37014:13;36995:16;:32;;;;37055:11;37038:14;:28;;;;37101:22;37077:21;:46;;;;37158:22;37134:21;:46;;;;37210:20;37188:19;:42;;;;37295:14;;37276:16;;37257;;:35;;;;:::i;:::-;:52;;;;:::i;:::-;37241:13;:68;;;;37345:2;37328:13;;:19;;37320:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;36737:652:::0;;;;;;:::o;10293:355::-;10433:4;10450:36;10460:6;10468:9;10479:6;10450:9;:36::i;:::-;10497:121;10506:6;10514:12;:10;:12::i;:::-;10528:89;10566:6;10528:89;;;;;;;;;;;;;;;;;:11;:19;10540:6;10528:19;;;;;;;;;;;;;;;:33;10548:12;:10;:12::i;:::-;10528:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;10497:8;:121::i;:::-;10636:4;10629:11;;10293:355;;;;;:::o;47076:328::-;21548:12;:10;:12::i;:::-;21538:22;;:6;;;;;;;;;;;:22;;;21530:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;47201:41:::1;47210:7;:5;:7::i;:::-;47219;:5;:7::i;:::-;47228:13;:11;:13::i;:::-;47201:8;:41::i;:::-;47258:9;47253:144;47277:10;;:17;;47273:1;:21;47253:144;;;47316:69;47329:10;47341;;47352:1;47341:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;47374:10;:8;:10::i;:::-;47368:2;:16;;;;:::i;:::-;47356:6;;47363:1;47356:9;;;;;;;:::i;:::-;;;;;;;;:28;;;;:::i;:::-;47316:12;:69::i;:::-;;47296:3;;;;;:::i;:::-;;;;47253:144;;;;47076:328:::0;;;;:::o;8431:93::-;8489:5;8514:2;8507:9;;8431:93;:::o;11058:218::-;11146:4;11163:83;11172:12;:10;:12::i;:::-;11186:7;11195:50;11234:10;11195:11;:25;11207:12;:10;:12::i;:::-;11195:25;;;;;;;;;;;;;;;:34;11221:7;11195:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;11163:8;:83::i;:::-;11264:4;11257:11;;11058:218;;;;:::o;29501:38::-;;;:::o;38587:125::-;38652:4;38676:19;:28;38696:7;38676:28;;;;;;;;;;;;;;;;;;;;;;;;;38669:35;;38587:125;;;:::o;29858:31::-;;;;;;;;;;;;;:::o;8762:127::-;8836:7;8863:9;:18;8873:7;8863:18;;;;;;;;;;;;;;;;8856:25;;8762:127;;;:::o;21969:148::-;21548:12;:10;:12::i;:::-;21538:22;;:6;;;;;;;;;;;:22;;;21530:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22076:1:::1;22039:40;;22060:6;;;;;;;;;;;22039:40;;;;;;;;;;;;22107:1;22090:6;;:19;;;;;;;;;;;;;;;;;;21969:148::o:0;34832:120::-;34884:4;21548:12;:10;:12::i;:::-;21538:22;;:6;;;;;;;;;;;:22;;;21530:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34917:5:::1;34900:14;;:22;;;;;;;;;;;;;;;;;;34940:4;34933:11;;34832:120:::0;:::o;36193:144::-;21548:12;:10;:12::i;:::-;21538:22;;:6;;;;;;;;;;;:22;;;21530:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36325:4:::1;36283:31;:39;36315:6;36283:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;36193:144:::0;;:::o;36345:383::-;21548:12;:10;:12::i;:::-;21538:22;;:6;;;;;;;;;;;:22;;;21530:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36483:13:::1;36465:15;:31;;;;36525:13;36507:15;:31;;;;36565:11;36549:13;:27;;;;36638:13;;36620:15;;36602;;:33;;;;:::i;:::-;:49;;;;:::i;:::-;36587:12;:64;;;;36686:1;36670:12;;:17;;36662:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;36345:383:::0;;;:::o;34631:148::-;21548:12;:10;:12::i;:::-;21538:22;;:6;;;;;;;;;;;:22;;;21530:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34702:4:::1;34686:13;;:20;;;;;;;;;;;;;;;;;;34731:4;34717:11;;:18;;;;;;;;;;;;;;;;;;34759:12;34746:10;:25;;;;34631:148::o:0;21325:79::-;21363:7;21390:6;;;;;;;;;;;21383:13;;21325:79;:::o;7687:104::-;7743:13;7776:7;7769:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7687:104;:::o;37733:245::-;21548:12;:10;:12::i;:::-;21538:22;;:6;;;;;;;;;;;:22;;;21530:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37840:13:::1;37832:21;;:4;:21;;;;37824:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;37929:41;37958:4;37964:5;37929:28;:41::i;:::-;37733:245:::0;;:::o;35157:102::-;21548:12;:10;:12::i;:::-;21538:22;;:6;;;;;;;;;;;:22;;;21530:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35246:5:::1;35225:18;;:26;;;;;;;;;;;;;;;;;;35157:102:::0;:::o;11780:269::-;11873:4;11890:129;11899:12;:10;:12::i;:::-;11913:7;11922:96;11961:15;11922:96;;;;;;;;;;;;;;;;;:11;:25;11934:12;:10;:12::i;:::-;11922:25;;;;;;;;;;;;;;;:34;11948:7;11922:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;11890:8;:129::i;:::-;12037:4;12030:11;;11780:269;;;;:::o;29896:38::-;;;;;;;;;;;;;:::o;9103:175::-;9189:4;9206:42;9216:12;:10;:12::i;:::-;9230:9;9241:6;9206:9;:42::i;:::-;9266:4;9259:11;;9103:175;;;;:::o;38185:208::-;21548:12;:10;:12::i;:::-;21538:22;;:6;;;;;;;;;;;:22;;;21530:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38322:15:::1;;;;;;;;;;;38279:59;;38302:18;38279:59;;;;;;;;;;;;38367:18;38349:15;;:36;;;;;;;;;;;;;;;;;;38185:208:::0;:::o;31331:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;37398:182::-;21548:12;:10;:12::i;:::-;21538:22;;:6;;;;;;;;;;;:22;;;21530:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37514:8:::1;37483:19;:28;37503:7;37483:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;37554:7;37538:34;;;37563:8;37538:34;;;;;;:::i;:::-;;;;;;;;37398:182:::0;;:::o;35969:215::-;21548:12;:10;:12::i;:::-;21538:22;;:6;;;;;;;;;;;:22;;;21530:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36091:4:::1;36085;36081:1;36065:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;36064:31;;;;:::i;:::-;36054:6;:41;;36046:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;36169:6;36159;:17;;;;:::i;:::-;36147:9;:29;;;;35969:215:::0;:::o;30289:39::-;;;;;;;;;;;;;:::o;35331:386::-;35412:4;21548:12;:10;:12::i;:::-;21538:22;;:6;;;;;;;;;;;:22;;;21530:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35469:6:::1;35465:1;35449:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;35436:9;:39;;35428:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;35585:4;35581:1;35565:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;35552:9;:37;;35544:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;35678:9;35657:18;:30;;;;35705:4;35698:11;;35331:386:::0;;;:::o;9342:151::-;9431:7;9458:11;:18;9470:5;9458:18;;;;;;;;;;;;;;;:27;9477:7;9458:27;;;;;;;;;;;;;;;;9451:34;;9342:151;;;;:::o;35014:134::-;35074:4;21548:12;:10;:12::i;:::-;21538:22;;:6;;;;;;;;;;;:22;;;21530:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35113:5:::1;35090:20;;:28;;;;;;;;;;;;;;;;;;35136:4;35129:11;;35014:134:::0;:::o;38402:173::-;21548:12;:10;:12::i;:::-;21538:22;;:6;;;;;;;;;;;:22;;;21530:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38517:13:::1;;;;;;;;;;;38485:46;;38506:9;38485:46;;;;;;;;;;;;38558:9;38542:13;;:25;;;;;;;;;;;;;;;;;;38402:173:::0;:::o;22273:244::-;21548:12;:10;:12::i;:::-;21538:22;;:6;;;;;;;;;;;:22;;;21530:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22382:1:::1;22362:22;;:8;:22;;;;22354:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22472:8;22443:38;;22464:6;;;;;;;;;;;22443:38;;;;;;;;;;;;22501:8;22492:6;;:17;;;;;;;;;;;;;;;;;;22273:244:::0;:::o;16357:182::-;16415:7;16435:9;16451:1;16447;:5;;;;:::i;:::-;16435:17;;16476:1;16471;:6;;16463:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;16530:1;16523:8;;;16357:182;;;;:::o;158:98::-;211:7;238:10;231:17;;158:98;:::o;14976:381::-;15129:1;15112:19;;:5;:19;;;;15104:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15210:1;15191:21;;:7;:21;;;;15183:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15295:6;15265:11;:18;15277:5;15265:18;;;;;;;;;;;;;;;:27;15284:7;15265:27;;;;;;;;;;;;;;;:36;;;;15333:7;15317:32;;15326:5;15317:32;;;15342:6;15317:32;;;;;;:::i;:::-;;;;;;;;14976:381;;;:::o;38772:5556::-;38920:1;38904:18;;:4;:18;;;;38896:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38997:1;38983:16;;:2;:16;;;;38975:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;39059:10;:14;39070:2;39059:14;;;;;;;;;;;;;;;;;;;;;;;;;39058:15;:36;;;;;39078:10;:16;39089:4;39078:16;;;;;;;;;;;;;;;;;;;;;;;;;39077:17;39058:36;39050:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;39173:1;39163:6;:11;39160:92;;;39191:28;39207:4;39213:2;39217:1;39191:15;:28::i;:::-;39234:7;;39160:92;39268:14;;;;;;;;;;;39265:1811;;;39328:7;:5;:7::i;:::-;39320:15;;:4;:15;;;;:49;;;;;39362:7;:5;:7::i;:::-;39356:13;;:2;:13;;;;39320:49;:86;;;;;39404:1;39390:16;;:2;:16;;;;39320:86;:128;;;;;39441:6;39427:21;;:2;:21;;;;39320:128;:158;;;;;39470:8;;;;;;;;;;;39469:9;39320:158;39298:1767;;;39516:13;;;;;;;;;;;39512:148;;39561:19;:25;39581:4;39561:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;39590:19;:23;39610:2;39590:23;;;;;;;;;;;;;;;;;;;;;;;;;39561:52;39553:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;39512:148;39819:20;;;;;;;;;;;39815:423;;;39873:7;:5;:7::i;:::-;39867:13;;:2;:13;;;;:47;;;;;39898:15;39884:30;;:2;:30;;;;39867:47;:79;;;;;39932:13;39918:28;;:2;:28;;;;39867:79;39863:356;;;40024:12;39982:28;:39;40011:9;39982:39;;;;;;;;;;;;;;;;:54;39974:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;40183:12;40141:28;:39;40170:9;40141:39;;;;;;;;;;;;;;;:54;;;;39863:356;39815:423;40291:25;:31;40317:4;40291:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;40327:31;:35;40359:2;40327:35;;;;;;;;;;;;;;;;;;;;;;;;;40326:36;40291:71;40287:763;;;40409:20;;40399:6;:30;;40391:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;40548:9;;40531:13;40541:2;40531:9;:13::i;:::-;40522:6;:22;;;;:::i;:::-;:35;;40514:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40287:763;;;40660:25;:29;40686:2;40660:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;40694:31;:37;40726:4;40694:37;;;;;;;;;;;;;;;;;;;;;;;;;40693:38;40660:71;40656:394;;;40778:20;;40768:6;:30;;40760:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;40656:394;;;40904:31;:35;40936:2;40904:35;;;;;;;;;;;;;;;;;;;;;;;;;40900:150;;40997:9;;40980:13;40990:2;40980:9;:13::i;:::-;40971:6;:22;;;;:::i;:::-;:35;;40963:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40900:150;40656:394;40287:763;39298:1767;39265:1811;41137:10;;41120:12;:28;;:69;;;;;41176:13;41170:19;;:2;:19;;;;41120:69;:148;;;;;41225:42;41211:57;;:2;:57;;;;41120:148;41116:218;;;41317:5;41300:10;:14;41311:2;41300:14;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;41116:218;41376:10;41397:13;41389:21;;:4;:21;;;41376:34;;41426:5;41425:6;:28;;;;;41435:18;;;;;;;;;;;41425:28;41421:1050;;;41508:1;41474:24;:30;41499:4;41474:30;;;;;;;;;;;;;;;;:35;;:120;;;;;41578:15;41565:8;41531:24;:30;41556:4;41531:30;;;;;;;;;;;;;;;;:43;;;;:::i;:::-;:62;;41474:120;41470:584;;;41635:21;;41616:16;:40;;;;41694:21;;41675:16;:40;;;;41745:19;;41728:14;:36;;;;41837:14;;41818:16;;41799;;:35;;;;:::i;:::-;:52;;;;:::i;:::-;41783:13;:68;;;;41470:584;;;41911:1;41892:16;:20;;;;41950:1;41931:16;:20;;;;42024:14;;42005:16;;41986;;:35;;;;:::i;:::-;:52;;;;:::i;:::-;41970:13;:68;;;;41470:584;41421:1050;;;42122:1;42090:24;:28;42115:2;42090:28;;;;;;;;;;;;;;;;:33;42086:120;;;42175:15;42144:24;:28;42169:2;42144:28;;;;;;;;;;;;;;;:46;;;;42086:120;42228:18;;;;;;;;;;;42223:237;;42286:1;42267:16;:20;;;;42325:1;42306:16;:20;;;;42356:1;42339:14;:18;;;;42430:14;;42411:16;;42392;;:35;;;;:::i;:::-;:52;;;;:::i;:::-;42376:13;:68;;;;42223:237;41421:1050;42484:28;42515:24;42533:4;42515:9;:24::i;:::-;42484:55;;42553:12;42592:18;;42568:20;:42;;42553:57;;42642:7;:35;;;;;42666:11;;;;;;;;;;;42642:35;:61;;;;;42695:8;;;;;;;;;;;42694:9;42642:61;:110;;;;;42721:25;:31;42747:4;42721:31;;;;;;;;;;;;;;;;;;;;;;;;;42720:32;42642:110;:153;;;;;42770:19;:25;42790:4;42770:25;;;;;;;;;;;;;;;;;;;;;;;;;42769:26;42642:153;:194;;;;;42813:19;:23;42833:2;42813:23;;;;;;;;;;;;;;;;;;;;;;;;;42812:24;42642:194;42624:328;;;42874:4;42863:8;;:15;;;;;;;;;;;;;;;;;;42896:10;:8;:10::i;:::-;42935:5;42924:8;;:16;;;;;;;;;;;;;;;;;;42624:328;42965:12;42981:8;;;;;;;;;;;42980:9;42965:24;;43091:19;:25;43111:4;43091:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;43120:19;:23;43140:2;43120:23;;;;;;;;;;;;;;;;;;;;;;;;;43091:52;43088:99;;;43170:5;43160:15;;43088:99;43200:12;43304:7;43301:973;;;43355:25;:29;43381:2;43355:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;43404:1;43388:13;;:17;43355:50;43351:770;;;43432:34;43462:3;43432:25;43443:13;;43432:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;43425:41;;43533:13;;43514:16;;43507:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;43485:18;;:61;;;;;;;:::i;:::-;;;;;;;;43609:13;;43592:14;;43585:4;:21;;;;:::i;:::-;:37;;;;:::i;:::-;43565:16;;:57;;;;;;;:::i;:::-;;;;;;;;43689:13;;43670:16;;43663:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;43641:18;;:61;;;;;;;:::i;:::-;;;;;;;;43351:770;;;43763:25;:31;43789:4;43763:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;43813:1;43798:12;;:16;43763:51;43760:361;;;43842:33;43871:3;43842:24;43853:12;;43842:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;43835:40;;43941:12;;43923:15;;43916:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;43894:18;;:59;;;;;;;:::i;:::-;;;;;;;;44015:12;;43999:13;;43992:4;:20;;;;:::i;:::-;:35;;;;:::i;:::-;43972:16;;:55;;;;;;;:::i;:::-;;;;;;;;44093:12;;44075:15;;44068:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;44046:18;;:59;;;;;;;:::i;:::-;;;;;;;;43760:361;43351:770;44148:1;44141:4;:8;44138:93;;;44173:42;44189:4;44203;44210;44173:15;:42::i;:::-;44138:93;44258:4;44248:14;;;;;:::i;:::-;;;43301:973;44287:33;44303:4;44309:2;44313:6;44287:15;:33::i;:::-;38885:5443;;;;;38772:5556;;;;:::o;17263:193::-;17349:7;17382:1;17377;:6;;17385:12;17369:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;17409:9;17425:1;17421;:5;;;;:::i;:::-;17409:17;;17447:1;17440:8;;;17263:193;;;;;:::o;37987:189::-;38104:5;38070:25;:31;38096:4;38070:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;38162:5;38128:40;;38156:4;38128:40;;;;;;;;;;;;37987:189;;:::o;12540:575::-;12698:1;12680:20;;:6;:20;;;;12672:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;12782:1;12761:23;;:9;:23;;;;12753:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12838:47;12859:6;12867:9;12878:6;12838:20;:47::i;:::-;12919:71;12941:6;12919:71;;;;;;;;;;;;;;;;;:9;:17;12929:6;12919:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;12899:9;:17;12909:6;12899:17;;;;;;;;;;;;;;;:91;;;;13024:32;13049:6;13024:9;:20;13034:9;13024:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;13001:9;:20;13011:9;13001:20;;;;;;;;;;;;;;;:55;;;;13089:9;13072:35;;13081:6;13072:35;;;13100:6;13072:35;;;;;;:::i;:::-;;;;;;;;12540:575;;;:::o;45472:1596::-;45511:23;45537:24;45555:4;45537:9;:24::i;:::-;45511:50;;45572:25;45642:16;;45621:18;;45600;;:39;;;;:::i;:::-;:58;;;;:::i;:::-;45572:86;;45669:12;45717:1;45698:15;:20;:46;;;;45743:1;45722:17;:22;45698:46;45695:60;;;45747:7;;;;;45695:60;45810:2;45789:18;;:23;;;;:::i;:::-;45771:15;:41;45768:111;;;45865:2;45844:18;;:23;;;;:::i;:::-;45826:41;;45768:111;45941:23;46026:1;46006:17;45985:18;;45967:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;45941:86;;46038:26;46067:36;46087:15;46067;:19;;:36;;;;:::i;:::-;46038:65;;46117:25;46145:21;46117:49;;46180:36;46197:18;46180:16;:36::i;:::-;46231:18;46252:44;46278:17;46252:21;:25;;:44;;;;:::i;:::-;46231:65;;46310:23;46336:57;46375:17;46336:34;46351:18;;46336:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;46310:83;;46404:21;46428:55;46465:17;46428:32;46443:16;;46428:10;:14;;:32;;;;:::i;:::-;:36;;:55;;;;:::i;:::-;46404:79;;46494:23;46551:13;46533:15;46520:10;:28;;;;:::i;:::-;:44;;;;:::i;:::-;46494:70;;46602:1;46581:18;:22;;;;46635:1;46614:18;:22;;;;46666:1;46647:16;:20;;;;46702:13;;;;;;;;;;;46694:27;;46729:13;46694:53;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46681:66;;;;;46782:1;46764:15;:19;:42;;;;;46805:1;46787:15;:19;46764:42;46761:210;;;46822:46;46835:15;46852;46822:12;:46::i;:::-;46888:71;46903:18;46923:15;46940:18;;46888:71;;;;;;;;:::i;:::-;;;;;;;;46761:210;47005:15;;;;;;;;;;;46997:29;;47034:21;46997:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46984:76;;;;;45500:1568;;;;;;;;;;45472:1596;:::o;17716:473::-;17774:7;18024:1;18019;:6;18015:47;;;18049:1;18042:8;;;;18015:47;18075:9;18091:1;18087;:5;;;;:::i;:::-;18075:17;;18120:1;18115;18111;:5;;;;:::i;:::-;:10;18103:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;18180:1;18173:8;;;17716:473;;;;;:::o;18666:132::-;18724:7;18751:39;18755:1;18758;18751:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;18744:46;;18666:132;;;;:::o;15961:125::-;;;;:::o;16823:136::-;16881:7;16908:43;16912:1;16915;16908:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;16901:50;;16823:136;;;;:::o;44337:597::-;44466:21;44504:1;44490:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44466:40;;44535:4;44517;44522:1;44517:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;44561:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44551:4;44556:1;44551:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;44597:62;44614:4;44629:15;44647:11;44597:8;:62::i;:::-;44699:15;:66;;;44780:11;44806:1;44850:4;44877;44897:15;44699:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44392:542;44337:597;:::o;44943:520::-;45091:62;45108:4;45123:15;45141:11;45091:8;:62::i;:::-;45197:15;:31;;;45236:9;45269:4;45289:11;45315:1;45358;45409:4;45429:15;45197:258;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;44943:520;;:::o;19295:279::-;19381:7;19413:1;19409;:5;19416:12;19401:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;19440:9;19456:1;19452;:5;;;;:::i;:::-;19440:17;;19565:1;19558:8;;;19295:279;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1601:117;1710:1;1707;1700:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:329::-;3553:6;3602:2;3590:9;3581:7;3577:23;3573:32;3570:119;;;3608:79;;:::i;:::-;3570:119;3728:1;3753:53;3798:7;3789:6;3778:9;3774:22;3753:53;:::i;:::-;3743:63;;3699:117;3494:329;;;;:::o;3829:60::-;3857:3;3878:5;3871:12;;3829:60;;;:::o;3895:142::-;3945:9;3978:53;3996:34;4005:24;4023:5;4005:24;:::i;:::-;3996:34;:::i;:::-;3978:53;:::i;:::-;3965:66;;3895:142;;;:::o;4043:126::-;4093:9;4126:37;4157:5;4126:37;:::i;:::-;4113:50;;4043:126;;;:::o;4175:153::-;4252:9;4285:37;4316:5;4285:37;:::i;:::-;4272:50;;4175:153;;;:::o;4334:185::-;4448:64;4506:5;4448:64;:::i;:::-;4443:3;4436:77;4334:185;;:::o;4525:276::-;4645:4;4683:2;4672:9;4668:18;4660:26;;4696:98;4791:1;4780:9;4776:17;4767:6;4696:98;:::i;:::-;4525:276;;;;:::o;4807:118::-;4894:24;4912:5;4894:24;:::i;:::-;4889:3;4882:37;4807:118;;:::o;4931:222::-;5024:4;5062:2;5051:9;5047:18;5039:26;;5075:71;5143:1;5132:9;5128:17;5119:6;5075:71;:::i;:::-;4931:222;;;;:::o;5159:329::-;5218:6;5267:2;5255:9;5246:7;5242:23;5238:32;5235:119;;;5273:79;;:::i;:::-;5235:119;5393:1;5418:53;5463:7;5454:6;5443:9;5439:22;5418:53;:::i;:::-;5408:63;;5364:117;5159:329;;;;:::o;5494:1057::-;5598:6;5606;5614;5622;5630;5638;5687:3;5675:9;5666:7;5662:23;5658:33;5655:120;;;5694:79;;:::i;:::-;5655:120;5814:1;5839:53;5884:7;5875:6;5864:9;5860:22;5839:53;:::i;:::-;5829:63;;5785:117;5941:2;5967:53;6012:7;6003:6;5992:9;5988:22;5967:53;:::i;:::-;5957:63;;5912:118;6069:2;6095:53;6140:7;6131:6;6120:9;6116:22;6095:53;:::i;:::-;6085:63;;6040:118;6197:2;6223:53;6268:7;6259:6;6248:9;6244:22;6223:53;:::i;:::-;6213:63;;6168:118;6325:3;6352:53;6397:7;6388:6;6377:9;6373:22;6352:53;:::i;:::-;6342:63;;6296:119;6454:3;6481:53;6526:7;6517:6;6506:9;6502:22;6481:53;:::i;:::-;6471:63;;6425:119;5494:1057;;;;;;;;:::o;6557:619::-;6634:6;6642;6650;6699:2;6687:9;6678:7;6674:23;6670:32;6667:119;;;6705:79;;:::i;:::-;6667:119;6825:1;6850:53;6895:7;6886:6;6875:9;6871:22;6850:53;:::i;:::-;6840:63;;6796:117;6952:2;6978:53;7023:7;7014:6;7003:9;6999:22;6978:53;:::i;:::-;6968:63;;6923:118;7080:2;7106:53;7151:7;7142:6;7131:9;7127:22;7106:53;:::i;:::-;7096:63;;7051:118;6557:619;;;;;:::o;7182:117::-;7291:1;7288;7281:12;7305:117;7414:1;7411;7404:12;7428:117;7537:1;7534;7527:12;7568:568;7641:8;7651:6;7701:3;7694:4;7686:6;7682:17;7678:27;7668:122;;7709:79;;:::i;:::-;7668:122;7822:6;7809:20;7799:30;;7852:18;7844:6;7841:30;7838:117;;;7874:79;;:::i;:::-;7838:117;7988:4;7980:6;7976:17;7964:29;;8042:3;8034:4;8026:6;8022:17;8012:8;8008:32;8005:41;8002:128;;;8049:79;;:::i;:::-;8002:128;7568:568;;;;;:::o;8159:::-;8232:8;8242:6;8292:3;8285:4;8277:6;8273:17;8269:27;8259:122;;8300:79;;:::i;:::-;8259:122;8413:6;8400:20;8390:30;;8443:18;8435:6;8432:30;8429:117;;;8465:79;;:::i;:::-;8429:117;8579:4;8571:6;8567:17;8555:29;;8633:3;8625:4;8617:6;8613:17;8603:8;8599:32;8596:41;8593:128;;;8640:79;;:::i;:::-;8593:128;8159:568;;;;;:::o;8733:934::-;8855:6;8863;8871;8879;8928:2;8916:9;8907:7;8903:23;8899:32;8896:119;;;8934:79;;:::i;:::-;8896:119;9082:1;9071:9;9067:17;9054:31;9112:18;9104:6;9101:30;9098:117;;;9134:79;;:::i;:::-;9098:117;9247:80;9319:7;9310:6;9299:9;9295:22;9247:80;:::i;:::-;9229:98;;;;9025:312;9404:2;9393:9;9389:18;9376:32;9435:18;9427:6;9424:30;9421:117;;;9457:79;;:::i;:::-;9421:117;9570:80;9642:7;9633:6;9622:9;9618:22;9570:80;:::i;:::-;9552:98;;;;9347:313;8733:934;;;;;;;:::o;9673:86::-;9708:7;9748:4;9741:5;9737:16;9726:27;;9673:86;;;:::o;9765:112::-;9848:22;9864:5;9848:22;:::i;:::-;9843:3;9836:35;9765:112;;:::o;9883:214::-;9972:4;10010:2;9999:9;9995:18;9987:26;;10023:67;10087:1;10076:9;10072:17;10063:6;10023:67;:::i;:::-;9883:214;;;;:::o;10103:118::-;10190:24;10208:5;10190:24;:::i;:::-;10185:3;10178:37;10103:118;;:::o;10227:222::-;10320:4;10358:2;10347:9;10343:18;10335:26;;10371:71;10439:1;10428:9;10424:17;10415:6;10371:71;:::i;:::-;10227:222;;;;:::o;10455:116::-;10525:21;10540:5;10525:21;:::i;:::-;10518:5;10515:32;10505:60;;10561:1;10558;10551:12;10505:60;10455:116;:::o;10577:133::-;10620:5;10658:6;10645:20;10636:29;;10674:30;10698:5;10674:30;:::i;:::-;10577:133;;;;:::o;10716:468::-;10781:6;10789;10838:2;10826:9;10817:7;10813:23;10809:32;10806:119;;;10844:79;;:::i;:::-;10806:119;10964:1;10989:53;11034:7;11025:6;11014:9;11010:22;10989:53;:::i;:::-;10979:63;;10935:117;11091:2;11117:50;11159:7;11150:6;11139:9;11135:22;11117:50;:::i;:::-;11107:60;;11062:115;10716:468;;;;;:::o;11190:619::-;11267:6;11275;11283;11332:2;11320:9;11311:7;11307:23;11303:32;11300:119;;;11338:79;;:::i;:::-;11300:119;11458:1;11483:53;11528:7;11519:6;11508:9;11504:22;11483:53;:::i;:::-;11473:63;;11429:117;11585:2;11611:53;11656:7;11647:6;11636:9;11632:22;11611:53;:::i;:::-;11601:63;;11556:118;11713:2;11739:53;11784:7;11775:6;11764:9;11760:22;11739:53;:::i;:::-;11729:63;;11684:118;11190:619;;;;;:::o;11815:323::-;11871:6;11920:2;11908:9;11899:7;11895:23;11891:32;11888:119;;;11926:79;;:::i;:::-;11888:119;12046:1;12071:50;12113:7;12104:6;12093:9;12089:22;12071:50;:::i;:::-;12061:60;;12017:114;11815:323;;;;:::o;12144:474::-;12212:6;12220;12269:2;12257:9;12248:7;12244:23;12240:32;12237:119;;;12275:79;;:::i;:::-;12237:119;12395:1;12420:53;12465:7;12456:6;12445:9;12441:22;12420:53;:::i;:::-;12410:63;;12366:117;12522:2;12548:53;12593:7;12584:6;12573:9;12569:22;12548:53;:::i;:::-;12538:63;;12493:118;12144:474;;;;;:::o;12624:180::-;12672:77;12669:1;12662:88;12769:4;12766:1;12759:15;12793:4;12790:1;12783:15;12810:320;12854:6;12891:1;12885:4;12881:12;12871:22;;12938:1;12932:4;12928:12;12959:18;12949:81;;13015:4;13007:6;13003:17;12993:27;;12949:81;13077:2;13069:6;13066:14;13046:18;13043:38;13040:84;;;13096:18;;:::i;:::-;13040:84;12861:269;12810:320;;;:::o;13136:182::-;13276:34;13272:1;13264:6;13260:14;13253:58;13136:182;:::o;13324:366::-;13466:3;13487:67;13551:2;13546:3;13487:67;:::i;:::-;13480:74;;13563:93;13652:3;13563:93;:::i;:::-;13681:2;13676:3;13672:12;13665:19;;13324:366;;;:::o;13696:419::-;13862:4;13900:2;13889:9;13885:18;13877:26;;13949:9;13943:4;13939:20;13935:1;13924:9;13920:17;13913:47;13977:131;14103:4;13977:131;:::i;:::-;13969:139;;13696:419;;;:::o;14121:180::-;14169:77;14166:1;14159:88;14266:4;14263:1;14256:15;14290:4;14287:1;14280:15;14307:348;14347:7;14370:20;14388:1;14370:20;:::i;:::-;14365:25;;14404:20;14422:1;14404:20;:::i;:::-;14399:25;;14592:1;14524:66;14520:74;14517:1;14514:81;14509:1;14502:9;14495:17;14491:105;14488:131;;;14599:18;;:::i;:::-;14488:131;14647:1;14644;14640:9;14629:20;;14307:348;;;;:::o;14661:180::-;14709:77;14706:1;14699:88;14806:4;14803:1;14796:15;14830:4;14827:1;14820:15;14847:185;14887:1;14904:20;14922:1;14904:20;:::i;:::-;14899:25;;14938:20;14956:1;14938:20;:::i;:::-;14933:25;;14977:1;14967:35;;14982:18;;:::i;:::-;14967:35;15024:1;15021;15017:9;15012:14;;14847:185;;;;:::o;15038:234::-;15178:34;15174:1;15166:6;15162:14;15155:58;15247:17;15242:2;15234:6;15230:15;15223:42;15038:234;:::o;15278:366::-;15420:3;15441:67;15505:2;15500:3;15441:67;:::i;:::-;15434:74;;15517:93;15606:3;15517:93;:::i;:::-;15635:2;15630:3;15626:12;15619:19;;15278:366;;;:::o;15650:419::-;15816:4;15854:2;15843:9;15839:18;15831:26;;15903:9;15897:4;15893:20;15889:1;15878:9;15874:17;15867:47;15931:131;16057:4;15931:131;:::i;:::-;15923:139;;15650:419;;;:::o;16075:305::-;16115:3;16134:20;16152:1;16134:20;:::i;:::-;16129:25;;16168:20;16186:1;16168:20;:::i;:::-;16163:25;;16322:1;16254:66;16250:74;16247:1;16244:81;16241:107;;;16328:18;;:::i;:::-;16241:107;16372:1;16369;16365:9;16358:16;;16075:305;;;;:::o;16386:179::-;16526:31;16522:1;16514:6;16510:14;16503:55;16386:179;:::o;16571:366::-;16713:3;16734:67;16798:2;16793:3;16734:67;:::i;:::-;16727:74;;16810:93;16899:3;16810:93;:::i;:::-;16928:2;16923:3;16919:12;16912:19;;16571:366;;;:::o;16943:419::-;17109:4;17147:2;17136:9;17132:18;17124:26;;17196:9;17190:4;17186:20;17182:1;17171:9;17167:17;17160:47;17224:131;17350:4;17224:131;:::i;:::-;17216:139;;16943:419;;;:::o;17368:180::-;17416:77;17413:1;17406:88;17513:4;17510:1;17503:15;17537:4;17534:1;17527:15;17554:102;17596:8;17643:5;17640:1;17636:13;17615:34;;17554:102;;;:::o;17662:848::-;17723:5;17730:4;17754:6;17745:15;;17778:5;17769:14;;17792:712;17813:1;17803:8;17800:15;17792:712;;;17908:4;17903:3;17899:14;17893:4;17890:24;17887:50;;;17917:18;;:::i;:::-;17887:50;17967:1;17957:8;17953:16;17950:451;;;18382:4;18375:5;18371:16;18362:25;;17950:451;18432:4;18426;18422:15;18414:23;;18462:32;18485:8;18462:32;:::i;:::-;18450:44;;17792:712;;;17662:848;;;;;;;:::o;18516:1073::-;18570:5;18761:8;18751:40;;18782:1;18773:10;;18784:5;;18751:40;18810:4;18800:36;;18827:1;18818:10;;18829:5;;18800:36;18896:4;18944:1;18939:27;;;;18980:1;18975:191;;;;18889:277;;18939:27;18957:1;18948:10;;18959:5;;;18975:191;19020:3;19010:8;19007:17;19004:43;;;19027:18;;:::i;:::-;19004:43;19076:8;19073:1;19069:16;19060:25;;19111:3;19104:5;19101:14;19098:40;;;19118:18;;:::i;:::-;19098:40;19151:5;;;18889:277;;19275:2;19265:8;19262:16;19256:3;19250:4;19247:13;19243:36;19225:2;19215:8;19212:16;19207:2;19201:4;19198:12;19194:35;19178:111;19175:246;;;19331:8;19325:4;19321:19;19312:28;;19366:3;19359:5;19356:14;19353:40;;;19373:18;;:::i;:::-;19353:40;19406:5;;19175:246;19446:42;19484:3;19474:8;19468:4;19465:1;19446:42;:::i;:::-;19431:57;;;;19520:4;19515:3;19511:14;19504:5;19501:25;19498:51;;;19529:18;;:::i;:::-;19498:51;19578:4;19571:5;19567:16;19558:25;;18516:1073;;;;;;:::o;19595:281::-;19653:5;19677:23;19695:4;19677:23;:::i;:::-;19669:31;;19721:25;19737:8;19721:25;:::i;:::-;19709:37;;19765:104;19802:66;19792:8;19786:4;19765:104;:::i;:::-;19756:113;;19595:281;;;;:::o;19882:233::-;19921:3;19944:24;19962:5;19944:24;:::i;:::-;19935:33;;19990:66;19983:5;19980:77;19977:103;;;20060:18;;:::i;:::-;19977:103;20107:1;20100:5;20096:13;20089:20;;19882:233;;;:::o;20121:178::-;20261:30;20257:1;20249:6;20245:14;20238:54;20121:178;:::o;20305:366::-;20447:3;20468:67;20532:2;20527:3;20468:67;:::i;:::-;20461:74;;20544:93;20633:3;20544:93;:::i;:::-;20662:2;20657:3;20653:12;20646:19;;20305:366;;;:::o;20677:419::-;20843:4;20881:2;20870:9;20866:18;20858:26;;20930:9;20924:4;20920:20;20916:1;20905:9;20901:17;20894:47;20958:131;21084:4;20958:131;:::i;:::-;20950:139;;20677:419;;;:::o;21102:244::-;21242:34;21238:1;21230:6;21226:14;21219:58;21311:27;21306:2;21298:6;21294:15;21287:52;21102:244;:::o;21352:366::-;21494:3;21515:67;21579:2;21574:3;21515:67;:::i;:::-;21508:74;;21591:93;21680:3;21591:93;:::i;:::-;21709:2;21704:3;21700:12;21693:19;;21352:366;;;:::o;21724:419::-;21890:4;21928:2;21917:9;21913:18;21905:26;;21977:9;21971:4;21967:20;21963:1;21952:9;21948:17;21941:47;22005:131;22131:4;22005:131;:::i;:::-;21997:139;;21724:419;;;:::o;22149:223::-;22289:34;22285:1;22277:6;22273:14;22266:58;22358:6;22353:2;22345:6;22341:15;22334:31;22149:223;:::o;22378:366::-;22520:3;22541:67;22605:2;22600:3;22541:67;:::i;:::-;22534:74;;22617:93;22706:3;22617:93;:::i;:::-;22735:2;22730:3;22726:12;22719:19;;22378:366;;;:::o;22750:419::-;22916:4;22954:2;22943:9;22939:18;22931:26;;23003:9;22997:4;22993:20;22989:1;22978:9;22974:17;22967:47;23031:131;23157:4;23031:131;:::i;:::-;23023:139;;22750:419;;;:::o;23175:240::-;23315:34;23311:1;23303:6;23299:14;23292:58;23384:23;23379:2;23371:6;23367:15;23360:48;23175:240;:::o;23421:366::-;23563:3;23584:67;23648:2;23643:3;23584:67;:::i;:::-;23577:74;;23660:93;23749:3;23660:93;:::i;:::-;23778:2;23773:3;23769:12;23762:19;;23421:366;;;:::o;23793:419::-;23959:4;23997:2;23986:9;23982:18;23974:26;;24046:9;24040:4;24036:20;24032:1;24021:9;24017:17;24010:47;24074:131;24200:4;24074:131;:::i;:::-;24066:139;;23793:419;;;:::o;24218:239::-;24358:34;24354:1;24346:6;24342:14;24335:58;24427:22;24422:2;24414:6;24410:15;24403:47;24218:239;:::o;24463:366::-;24605:3;24626:67;24690:2;24685:3;24626:67;:::i;:::-;24619:74;;24702:93;24791:3;24702:93;:::i;:::-;24820:2;24815:3;24811:12;24804:19;;24463:366;;;:::o;24835:419::-;25001:4;25039:2;25028:9;25024:18;25016:26;;25088:9;25082:4;25078:20;25074:1;25063:9;25059:17;25052:47;25116:131;25242:4;25116:131;:::i;:::-;25108:139;;24835:419;;;:::o;25260:225::-;25400:34;25396:1;25388:6;25384:14;25377:58;25469:8;25464:2;25456:6;25452:15;25445:33;25260:225;:::o;25491:366::-;25633:3;25654:67;25718:2;25713:3;25654:67;:::i;:::-;25647:74;;25730:93;25819:3;25730:93;:::i;:::-;25848:2;25843:3;25839:12;25832:19;;25491:366;;;:::o;25863:419::-;26029:4;26067:2;26056:9;26052:18;26044:26;;26116:9;26110:4;26106:20;26102:1;26091:9;26087:17;26080:47;26144:131;26270:4;26144:131;:::i;:::-;26136:139;;25863:419;;;:::o;26288:177::-;26428:29;26424:1;26416:6;26412:14;26405:53;26288:177;:::o;26471:366::-;26613:3;26634:67;26698:2;26693:3;26634:67;:::i;:::-;26627:74;;26710:93;26799:3;26710:93;:::i;:::-;26828:2;26823:3;26819:12;26812:19;;26471:366;;;:::o;26843:419::-;27009:4;27047:2;27036:9;27032:18;27024:26;;27096:9;27090:4;27086:20;27082:1;27071:9;27067:17;27060:47;27124:131;27250:4;27124:131;:::i;:::-;27116:139;;26843:419;;;:::o;27268:223::-;27408:34;27404:1;27396:6;27392:14;27385:58;27477:6;27472:2;27464:6;27460:15;27453:31;27268:223;:::o;27497:366::-;27639:3;27660:67;27724:2;27719:3;27660:67;:::i;:::-;27653:74;;27736:93;27825:3;27736:93;:::i;:::-;27854:2;27849:3;27845:12;27838:19;;27497:366;;;:::o;27869:419::-;28035:4;28073:2;28062:9;28058:18;28050:26;;28122:9;28116:4;28112:20;28108:1;28097:9;28093:17;28086:47;28150:131;28276:4;28150:131;:::i;:::-;28142:139;;27869:419;;;:::o;28294:221::-;28434:34;28430:1;28422:6;28418:14;28411:58;28503:4;28498:2;28490:6;28486:15;28479:29;28294:221;:::o;28521:366::-;28663:3;28684:67;28748:2;28743:3;28684:67;:::i;:::-;28677:74;;28760:93;28849:3;28760:93;:::i;:::-;28878:2;28873:3;28869:12;28862:19;;28521:366;;;:::o;28893:419::-;29059:4;29097:2;29086:9;29082:18;29074:26;;29146:9;29140:4;29136:20;29132:1;29121:9;29117:17;29110:47;29174:131;29300:4;29174:131;:::i;:::-;29166:139;;28893:419;;;:::o;29318:224::-;29458:34;29454:1;29446:6;29442:14;29435:58;29527:7;29522:2;29514:6;29510:15;29503:32;29318:224;:::o;29548:366::-;29690:3;29711:67;29775:2;29770:3;29711:67;:::i;:::-;29704:74;;29787:93;29876:3;29787:93;:::i;:::-;29905:2;29900:3;29896:12;29889:19;;29548:366;;;:::o;29920:419::-;30086:4;30124:2;30113:9;30109:18;30101:26;;30173:9;30167:4;30163:20;30159:1;30148:9;30144:17;30137:47;30201:131;30327:4;30201:131;:::i;:::-;30193:139;;29920:419;;;:::o;30345:222::-;30485:34;30481:1;30473:6;30469:14;30462:58;30554:5;30549:2;30541:6;30537:15;30530:30;30345:222;:::o;30573:366::-;30715:3;30736:67;30800:2;30795:3;30736:67;:::i;:::-;30729:74;;30812:93;30901:3;30812:93;:::i;:::-;30930:2;30925:3;30921:12;30914:19;;30573:366;;;:::o;30945:419::-;31111:4;31149:2;31138:9;31134:18;31126:26;;31198:9;31192:4;31188:20;31184:1;31173:9;31169:17;31162:47;31226:131;31352:4;31226:131;:::i;:::-;31218:139;;30945:419;;;:::o;31370:236::-;31510:34;31506:1;31498:6;31494:14;31487:58;31579:19;31574:2;31566:6;31562:15;31555:44;31370:236;:::o;31612:366::-;31754:3;31775:67;31839:2;31834:3;31775:67;:::i;:::-;31768:74;;31851:93;31940:3;31851:93;:::i;:::-;31969:2;31964:3;31960:12;31953:19;;31612:366;;;:::o;31984:419::-;32150:4;32188:2;32177:9;32173:18;32165:26;;32237:9;32231:4;32227:20;32223:1;32212:9;32208:17;32201:47;32265:131;32391:4;32265:131;:::i;:::-;32257:139;;31984:419;;;:::o;32409:172::-;32549:24;32545:1;32537:6;32533:14;32526:48;32409:172;:::o;32587:366::-;32729:3;32750:67;32814:2;32809:3;32750:67;:::i;:::-;32743:74;;32826:93;32915:3;32826:93;:::i;:::-;32944:2;32939:3;32935:12;32928:19;;32587:366;;;:::o;32959:419::-;33125:4;33163:2;33152:9;33148:18;33140:26;;33212:9;33206:4;33202:20;33198:1;33187:9;33183:17;33176:47;33240:131;33366:4;33240:131;:::i;:::-;33232:139;;32959:419;;;:::o;33384:297::-;33524:34;33520:1;33512:6;33508:14;33501:58;33593:34;33588:2;33580:6;33576:15;33569:59;33662:11;33657:2;33649:6;33645:15;33638:36;33384:297;:::o;33687:366::-;33829:3;33850:67;33914:2;33909:3;33850:67;:::i;:::-;33843:74;;33926:93;34015:3;33926:93;:::i;:::-;34044:2;34039:3;34035:12;34028:19;;33687:366;;;:::o;34059:419::-;34225:4;34263:2;34252:9;34248:18;34240:26;;34312:9;34306:4;34302:20;34298:1;34287:9;34283:17;34276:47;34340:131;34466:4;34340:131;:::i;:::-;34332:139;;34059:419;;;:::o;34484:240::-;34624:34;34620:1;34612:6;34608:14;34601:58;34693:23;34688:2;34680:6;34676:15;34669:48;34484:240;:::o;34730:366::-;34872:3;34893:67;34957:2;34952:3;34893:67;:::i;:::-;34886:74;;34969:93;35058:3;34969:93;:::i;:::-;35087:2;35082:3;35078:12;35071:19;;34730:366;;;:::o;35102:419::-;35268:4;35306:2;35295:9;35291:18;35283:26;;35355:9;35349:4;35345:20;35341:1;35330:9;35326:17;35319:47;35383:131;35509:4;35383:131;:::i;:::-;35375:139;;35102:419;;;:::o;35527:169::-;35667:21;35663:1;35655:6;35651:14;35644:45;35527:169;:::o;35702:366::-;35844:3;35865:67;35929:2;35924:3;35865:67;:::i;:::-;35858:74;;35941:93;36030:3;35941:93;:::i;:::-;36059:2;36054:3;36050:12;36043:19;;35702:366;;;:::o;36074:419::-;36240:4;36278:2;36267:9;36263:18;36255:26;;36327:9;36321:4;36317:20;36313:1;36302:9;36298:17;36291:47;36355:131;36481:4;36355:131;:::i;:::-;36347:139;;36074:419;;;:::o;36499:241::-;36639:34;36635:1;36627:6;36623:14;36616:58;36708:24;36703:2;36695:6;36691:15;36684:49;36499:241;:::o;36746:366::-;36888:3;36909:67;36973:2;36968:3;36909:67;:::i;:::-;36902:74;;36985:93;37074:3;36985:93;:::i;:::-;37103:2;37098:3;37094:12;37087:19;;36746:366;;;:::o;37118:419::-;37284:4;37322:2;37311:9;37307:18;37299:26;;37371:9;37365:4;37361:20;37357:1;37346:9;37342:17;37335:47;37399:131;37525:4;37399:131;:::i;:::-;37391:139;;37118:419;;;:::o;37543:191::-;37583:4;37603:20;37621:1;37603:20;:::i;:::-;37598:25;;37637:20;37655:1;37637:20;:::i;:::-;37632:25;;37676:1;37673;37670:8;37667:34;;;37681:18;;:::i;:::-;37667:34;37726:1;37723;37719:9;37711:17;;37543:191;;;;:::o;37740:147::-;37841:11;37878:3;37863:18;;37740:147;;;;:::o;37893:114::-;;:::o;38013:398::-;38172:3;38193:83;38274:1;38269:3;38193:83;:::i;:::-;38186:90;;38285:93;38374:3;38285:93;:::i;:::-;38403:1;38398:3;38394:11;38387:18;;38013:398;;;:::o;38417:379::-;38601:3;38623:147;38766:3;38623:147;:::i;:::-;38616:154;;38787:3;38780:10;;38417:379;;;:::o;38802:442::-;38951:4;38989:2;38978:9;38974:18;38966:26;;39002:71;39070:1;39059:9;39055:17;39046:6;39002:71;:::i;:::-;39083:72;39151:2;39140:9;39136:18;39127:6;39083:72;:::i;:::-;39165;39233:2;39222:9;39218:18;39209:6;39165:72;:::i;:::-;38802:442;;;;;;:::o;39250:220::-;39390:34;39386:1;39378:6;39374:14;39367:58;39459:3;39454:2;39446:6;39442:15;39435:28;39250:220;:::o;39476:366::-;39618:3;39639:67;39703:2;39698:3;39639:67;:::i;:::-;39632:74;;39715:93;39804:3;39715:93;:::i;:::-;39833:2;39828:3;39824:12;39817:19;;39476:366;;;:::o;39848:419::-;40014:4;40052:2;40041:9;40037:18;40029:26;;40101:9;40095:4;40091:20;40087:1;40076:9;40072:17;40065:47;40129:131;40255:4;40129:131;:::i;:::-;40121:139;;39848:419;;;:::o;40273:180::-;40321:77;40318:1;40311:88;40418:4;40415:1;40408:15;40442:4;40439:1;40432:15;40459:143;40516:5;40547:6;40541:13;40532:22;;40563:33;40590:5;40563:33;:::i;:::-;40459:143;;;;:::o;40608:351::-;40678:6;40727:2;40715:9;40706:7;40702:23;40698:32;40695:119;;;40733:79;;:::i;:::-;40695:119;40853:1;40878:64;40934:7;40925:6;40914:9;40910:22;40878:64;:::i;:::-;40868:74;;40824:128;40608:351;;;;:::o;40965:85::-;41010:7;41039:5;41028:16;;40965:85;;;:::o;41056:158::-;41114:9;41147:61;41165:42;41174:32;41200:5;41174:32;:::i;:::-;41165:42;:::i;:::-;41147:61;:::i;:::-;41134:74;;41056:158;;;:::o;41220:147::-;41315:45;41354:5;41315:45;:::i;:::-;41310:3;41303:58;41220:147;;:::o;41373:114::-;41440:6;41474:5;41468:12;41458:22;;41373:114;;;:::o;41493:184::-;41592:11;41626:6;41621:3;41614:19;41666:4;41661:3;41657:14;41642:29;;41493:184;;;;:::o;41683:132::-;41750:4;41773:3;41765:11;;41803:4;41798:3;41794:14;41786:22;;41683:132;;;:::o;41821:108::-;41898:24;41916:5;41898:24;:::i;:::-;41893:3;41886:37;41821:108;;:::o;41935:179::-;42004:10;42025:46;42067:3;42059:6;42025:46;:::i;:::-;42103:4;42098:3;42094:14;42080:28;;41935:179;;;;:::o;42120:113::-;42190:4;42222;42217:3;42213:14;42205:22;;42120:113;;;:::o;42269:732::-;42388:3;42417:54;42465:5;42417:54;:::i;:::-;42487:86;42566:6;42561:3;42487:86;:::i;:::-;42480:93;;42597:56;42647:5;42597:56;:::i;:::-;42676:7;42707:1;42692:284;42717:6;42714:1;42711:13;42692:284;;;42793:6;42787:13;42820:63;42879:3;42864:13;42820:63;:::i;:::-;42813:70;;42906:60;42959:6;42906:60;:::i;:::-;42896:70;;42752:224;42739:1;42736;42732:9;42727:14;;42692:284;;;42696:14;42992:3;42985:10;;42393:608;;;42269:732;;;;:::o;43007:831::-;43270:4;43308:3;43297:9;43293:19;43285:27;;43322:71;43390:1;43379:9;43375:17;43366:6;43322:71;:::i;:::-;43403:80;43479:2;43468:9;43464:18;43455:6;43403:80;:::i;:::-;43530:9;43524:4;43520:20;43515:2;43504:9;43500:18;43493:48;43558:108;43661:4;43652:6;43558:108;:::i;:::-;43550:116;;43676:72;43744:2;43733:9;43729:18;43720:6;43676:72;:::i;:::-;43758:73;43826:3;43815:9;43811:19;43802:6;43758:73;:::i;:::-;43007:831;;;;;;;;:::o;43844:807::-;44093:4;44131:3;44120:9;44116:19;44108:27;;44145:71;44213:1;44202:9;44198:17;44189:6;44145:71;:::i;:::-;44226:72;44294:2;44283:9;44279:18;44270:6;44226:72;:::i;:::-;44308:80;44384:2;44373:9;44369:18;44360:6;44308:80;:::i;:::-;44398;44474:2;44463:9;44459:18;44450:6;44398:80;:::i;:::-;44488:73;44556:3;44545:9;44541:19;44532:6;44488:73;:::i;:::-;44571;44639:3;44628:9;44624:19;44615:6;44571:73;:::i;:::-;43844:807;;;;;;;;;:::o;44657:143::-;44714:5;44745:6;44739:13;44730:22;;44761:33;44788:5;44761:33;:::i;:::-;44657:143;;;;:::o;44806:663::-;44894:6;44902;44910;44959:2;44947:9;44938:7;44934:23;44930:32;44927:119;;;44965:79;;:::i;:::-;44927:119;45085:1;45110:64;45166:7;45157:6;45146:9;45142:22;45110:64;:::i;:::-;45100:74;;45056:128;45223:2;45249:64;45305:7;45296:6;45285:9;45281:22;45249:64;:::i;:::-;45239:74;;45194:129;45362:2;45388:64;45444:7;45435:6;45424:9;45420:22;45388:64;:::i;:::-;45378:74;;45333:129;44806:663;;;;;:::o

Swarm Source

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