ETH Price: $3,923.53 (+0.31%)

Token

Titanium Games (TTG)
 

Overview

Max Total Supply

1,000,000,000 TTG

Holders

653

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
61,394.60292 TTG

Value
$0.00
0x34efd26bc24ab23b9a1c8c1326b95cefb328a243
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Titanium Games ($TTG) is a platform revolutionizing blockchain gaming with seamless crypto payments, NFTs, and in-game asset distribution.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
TTG

Compiler Version
v0.8.25+commit.b61c2a91

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-12-02
*/

// SPDX-License-Identifier: MIT
/**
----------------------------------------------------------------------------------
----------------------------------------------------------------------------------
----------------------------------------------------------------------------------                                                             
TITANIUM GAMES | $TTG

Where Gaming Meets Blockchain. 

Pure Fvcking Utility

Twitter- https://x.com/Ti22_io
Telegram- https://t.me/Ti22_io
Website- https://Ti22.io
By SevenDevs

----------------------------------------------------------------------------------
----------------------------------------------------------------------------------
----------------------------------------------------------------------------------
 */
pragma solidity ^0.8.19;

// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

// pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

// pragma solidity ^0.8.0;

// import "../utils/Context.sol";

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract 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() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby disabling any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(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"
        );
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

// pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @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
    );

    /**
     * @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 `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, 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 `from` to `to` 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 from,
        address to,
        uint256 amount
    ) external returns (bool);
}

// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

// pragma solidity ^0.8.0;

// import "../IERC20.sol";

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
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);
}

// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol)

// pragma solidity ^0.8.0;

// import "./IERC20.sol";
// import "./extensions/IERC20Metadata.sol";
// import "../../utils/Context.sol";

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * The default value of {decimals} is 18. To change this, you should override
 * this function so it returns a different value.
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * 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 default value returned by this function, unless
     * it's 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:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address to, uint256 amount)
        public
        virtual
        override
        returns (bool)
    {
        address owner = _msgSender();
        _transfer(owner, to, 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}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount)
        public
        virtual
        override
        returns (bool)
    {
        address owner = _msgSender();
        _approve(owner, 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}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        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)
    {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + 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)
    {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(
            currentAllowance >= subtractedValue,
            "ERC20: decreased allowance below zero"
        );
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `from` to `to`.
     *
     * This 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:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(
            fromBalance >= amount,
            "ERC20: transfer amount exceeds balance"
        );
        unchecked {
            _balances[from] = fromBalance - amount;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _balances[to] += amount;
        }

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, 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 += amount;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _balances[account] += amount;
        }
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(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);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _totalSupply -= amount;
        }

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

        _afterTokenTransfer(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 Updates `owner` s allowance for `spender` based on spent `amount`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(
                currentAllowance >= amount,
                "ERC20: insufficient allowance"
            );
            unchecked {
                _approve(owner, spender, currentAllowance - 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 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 {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been 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 _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

// OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol)

// pragma solidity ^0.8.0;

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            // 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 (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @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) {
        return a + b;
    }

    /**
     * @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 a - b;
    }

    /**
     * @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) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting 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 a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting 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) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * 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) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

// pragma solidity >=0.5.0;

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

    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(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

// pragma solidity >=0.6.2;

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

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETH(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountToken, uint256 amountETH);

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);

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

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactETHForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function swapTokensForExactETH(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactTokensForETH(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapETHForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function quote(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    ) external pure returns (uint256 amountB);

    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountOut);

    function getAmountIn(
        uint256 amountOut,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountIn);

    function getAmountsOut(uint256 amountIn, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);

    function getAmountsIn(uint256 amountOut, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);
}

// pragma solidity >=0.6.2;

// import './IUniswapV2Router01.sol';

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountETH);

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

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

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}

contract TTG is ERC20, Ownable {
    using SafeMath for uint256;
    address private _operator;
    error UnauthorizedOperator(address account);

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public uniswapV2Pair;

    address public treasuryWallet;
    address public constant deadAddress = address(0xdead);

    bool public tradingActive;
    bool public swapEnabled;
    bool private _swapping;

    uint256 public maxTransaction;
    uint256 public maxWallet;
    uint256 public swapTokensAtAmount;
    uint256 private _buyLiquidityFee;
    uint256 private _sellLiquidityFee;
    uint256 public _tokenSwapAmount = 1_000_000 ether;

    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) private _isExcludedFromMaxTransaction;
    mapping(address => bool) private _automatedMarketMakerPairs;

    bool public transferDelayEnabled = true;

    event ExcludeFromLimits(address indexed account, bool isExcluded);

    event ExcludeFromFees(address indexed account, bool isExcluded);

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

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

    event operatorAccessTransferred(address indexed previousOperator, address indexed newOperator);

    mapping(address => uint256) private _holderLastTransferTimestamp;

    constructor() ERC20("Titanium Games", "TTG") {
        uint256 totalSupply = 1_000_000_000 * 1e18;

        address mainWallet = 0xA4c08322211BDCfaF7c432494efd680b838397Bf ;

        uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
            // use mainnet uniswap v2 replace
        );
        _approve(address(this), address(uniswapV2Router), type(uint256).max);

        maxTransaction = totalSupply;
        maxWallet = totalSupply;
        swapTokensAtAmount = 1_500_000 ether;

        _buyLiquidityFee = 1500;

        _sellLiquidityFee = 1500;
        _operator = 0x3afA251b110234bc45813B66a593b452E5353f1e ;

        treasuryWallet = 0xd6A59b80a1BF7a8eaF195a56A3EFf25f9e475E48 ; // replace with collector wallet

        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(deadAddress, true);
        excludeFromFees(mainWallet, true);

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(deadAddress, true);
        excludeFromMaxTransaction(address(uniswapV2Router), true);
        excludeFromMaxTransaction(mainWallet, true);

        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    function burn(uint256 amount) public {
        _burn(msg.sender, amount);
    }

    function addLiquidity() public onlyOwner {
        require(!tradingActive, "Trading already active.");

        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(
            address(this),
            uniswapV2Router.WETH()
        );
        _approve(address(this), address(uniswapV2Pair), type(uint256).max);
        IERC20(uniswapV2Pair).approve(
            address(uniswapV2Router),
            type(uint256).max
        );

        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
        excludeFromMaxTransaction(address(uniswapV2Pair), true);

        uniswapV2Router.addLiquidityETH{value: address(this).balance}(
            address(this),
            balanceOf(address(this)),
            0,
            0,
            treasuryWallet,
            block.timestamp
        );
    }

    function enableTrading() public onlyOperator {
        require(!tradingActive, "Trading already active.");
        tradingActive = true;
        swapEnabled = true;
    }

    function setTokenLiqSwapAmount(uint256 __tokenSwapAmount) public onlyOwner {
        _tokenSwapAmount = __tokenSwapAmount;
    }

    function setSwapEnabled(bool value) public onlyOwner {
        swapEnabled = value;
    }

    function setSwapTokensAtAmount(uint256 amount) public onlyOwner {
        require(
            amount >= (totalSupply() * 1) / 100000,
            "ERC20: Swap amount cannot be lower than 0.001% total supply."
        );
        swapTokensAtAmount = amount;
    }

    function setMaxWalletAndMaxTransaction(
        uint256 _maxTransaction,
        uint256 _maxWallet
    ) public onlyOwner {
        require(
            _maxTransaction >= ((totalSupply() * 5) / 1000),
            "ERC20: Cannot set maxTxn lower than 0.5%"
        );
        require(
            _maxWallet >= ((totalSupply() * 5) / 1000),
            "ERC20: Cannot set maxWallet lower than 0.5%"
        );
        maxTransaction = _maxTransaction;
        maxWallet = _maxWallet;
    }

    function setBuyFees(uint256 _liquidityFee) public onlyOwner {
        require(_liquidityFee <= 1500, "ERC20: Must keep fees at 15% or less");
        _buyLiquidityFee = _liquidityFee;
    }

    function setSellFees(uint256 _liquidityFee) public onlyOwner {
        require(_liquidityFee <= 1500, "ERC20: Must keep fees at 15% or less");
        _sellLiquidityFee = _liquidityFee;
    }

    function settreasuryWallet(address _treasuryWallet) public onlyOwner {
        require(_treasuryWallet != address(0), "ERC20: Address 0");
        address oldWallet = treasuryWallet;
        treasuryWallet = _treasuryWallet;
        emit treasuryWalletUpdated(treasuryWallet, oldWallet);
    }

    function excludeFromMaxTransaction(address account, bool value)
        public
        onlyOwner
    {
        _isExcludedFromMaxTransaction[account] = value;
        emit ExcludeFromLimits(account, value);
    }

    function bulkExcludeFromMaxTransaction(
        address[] calldata accounts,
        bool value
    ) public onlyOwner {
        for (uint256 i = 0; i < accounts.length; i++) {
            _isExcludedFromMaxTransaction[accounts[i]] = value;
            emit ExcludeFromLimits(accounts[i], value);
        }
    }

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

    function bulkExcludeFromFees(address[] calldata accounts, bool value)
        public
        onlyOwner
    {
        for (uint256 i = 0; i < accounts.length; i++) {
            _isExcludedFromFees[accounts[i]] = value;
            emit ExcludeFromFees(accounts[i], value);
        }
    }

    function withdrawStuckTokens(address tkn) public onlyOwner {
        bool success;
        if (tkn == address(0))
            (success, ) = address(msg.sender).call{
                value: address(this).balance
            }("");
        else {
            require(IERC20(tkn).balanceOf(address(this)) > 0, "No tokens");
            uint256 amount = IERC20(tkn).balanceOf(address(this));
            IERC20(tkn).transfer(msg.sender, amount);
        }
    }

    function withdrawStuckETH() public onlyOwner {
        bool success;
        (success, ) = address(msg.sender).call{value: address(this).balance}(
            ""
        );
    }

    function isExcludedFromMaxTransaction(address account)
        public
        view
        returns (bool)
    {
        return _isExcludedFromMaxTransaction[account];
    }

    function isExcludedFromFees(address account) public view returns (bool) {
        return _isExcludedFromFees[account];
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) internal {
        _automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if (
            from != owner() &&
            to != owner() &&
            !_isExcludedFromFees[from] &&
            to != address(0) &&
            to != deadAddress &&
            !_swapping
        ) {

            if (transferDelayEnabled) { // Check if the transfer delay feature is active
                if (
                    from != owner() && // Exclude the owner address from the delay
                    to != owner() &&
                    from != address(uniswapV2Router) && // Exclude Uniswap Router from the delay
                    to != address(uniswapV2Router) &&
                    !_isExcludedFromFees[from] && // Exclude specific operational address
                    !_isExcludedFromFees[to]
                ) {
                    // For sells (to AMM pairs), enforce the 10-block delay
                    if (_automatedMarketMakerPairs[to]) {
                        require(
                            _holderLastTransferTimestamp[tx.origin] < block.number - 10,
                            "_transfer: Transfer Delay active. Try again later."
                        );
                    }

                     // Update the user's last transfer timestamp for all transactions
                    _holderLastTransferTimestamp[tx.origin] = block.number;
                }
            }

            if (!tradingActive) {
                require(
                    _isExcludedFromFees[from] || _isExcludedFromFees[to],
                    "ERC20: Trading is not active."
                );
            }

            //when buy
            if (
                _automatedMarketMakerPairs[from] &&
                !_isExcludedFromMaxTransaction[to]
            ) {
                require(
                    amount <= maxTransaction,
                    "ERC20: Buy transfer amount exceeds the maxTransaction."
                );
                require(
                    amount + balanceOf(to) <= maxWallet,
                    "ERC20: Max wallet exceeded"
                );
            }
            //when sell
            else if (
                _automatedMarketMakerPairs[to] &&
                !_isExcludedFromMaxTransaction[from]
            ) {
                require(
                    amount <= maxTransaction,
                    "ERC20: Sell transfer amount exceeds the maxTransaction."
                );
            } else if (!_isExcludedFromMaxTransaction[to]) {
                require(
                    amount + balanceOf(to) <= maxWallet,
                    "ERC20: Max wallet exceeded"
                );
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap &&
            swapEnabled &&
            !_swapping &&
            _automatedMarketMakerPairs[to] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to] &&
            !_automatedMarketMakerPairs[from]
        ) {
            _swapping = true;

            _swapBack();

            _swapping = false;
        }

        bool takeFee = !_swapping;

        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;

        if (takeFee) {
            // on sell
            if (_automatedMarketMakerPairs[to]) {
                fees = amount.div(10000) * _sellLiquidityFee;
            }
            // on buy
            else if (_automatedMarketMakerPairs[from]) {
                fees = amount.div(10000) * _buyLiquidityFee;
            }

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

            amount -= fees;
        }

        super._transfer(from, to, amount);
    }

    function _swapTokensForETH(uint256 tokenAmount) internal {
        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,
            path,
            address(this),
            block.timestamp
        );
    }

    function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) internal {
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            treasuryWallet,
            block.timestamp
        );
    }

    function _swapBack() internal {
        uint256 contractBalance = balanceOf(address(this));
        bool success;
        if (contractBalance >= swapTokensAtAmount) {
            uint256 amountToSwapForETH = _tokenSwapAmount;

            _swapTokensForETH(amountToSwapForETH);

            uint256 ethBalance = address(this).balance;

            uint256 ethForLiquidity = ethBalance;

            (success, ) = address(treasuryWallet).call{value: ethForLiquidity}(
                ""
            );
        } else {
            return;
        }
    }

    modifier onlyOperator() {
        _checkOperator();
        _;
    }

    function operator() public view virtual returns (address) {
        return _operator;
    }

    function _checkOperator() internal view virtual {
        if (operator() != _msgSender()) {
            revert UnauthorizedOperator(_msgSender());
        }
    }

    function transferOperatorAccess(address _NewOperator) public onlyOwner{
        address oldOperator = _operator;
        _operator = _NewOperator;
        emit operatorAccessTransferred(oldOperator, _NewOperator);
    }

    function disableTransferDelay() external onlyOwner {
        transferDelayEnabled = false;
    }


    // multi send for airdrop
     function multiSend(
        address[] calldata recipients,
        uint256[] calldata amounts
    ) external onlyOwner{
        require(recipients.length == amounts.length, "Recipients and amounts length mismatch");

        uint256 totalAmount = 0;
        for (uint256 i = 0; i < amounts.length; i++) {
            totalAmount += amounts[i];
        }

        require(allowance(msg.sender, address(this)) >= totalAmount, "Insufficient allowance");

        for (uint256 i = 0; i < recipients.length; i++) {
            require(transferFrom(msg.sender, recipients[i], amounts[i]), "Transfer failed");
        }
        
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"UnauthorizedOperator","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromLimits","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":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":"previousOperator","type":"address"},{"indexed":true,"internalType":"address","name":"newOperator","type":"address"}],"name":"operatorAccessTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"treasuryWalletUpdated","type":"event"},{"inputs":[],"name":"_tokenSwapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"addLiquidity","outputs":[],"stateMutability":"nonpayable","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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"value","type":"bool"}],"name":"bulkExcludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"value","type":"bool"}],"name":"bulkExcludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxTransaction","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"recipients","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"multiSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTransaction","type":"uint256"},{"internalType":"uint256","name":"_maxWallet","type":"uint256"}],"name":"setMaxWalletAndMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"__tokenSwapAmount","type":"uint256"}],"name":"setTokenLiqSwapAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_treasuryWallet","type":"address"}],"name":"settreasuryWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","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":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_NewOperator","type":"address"}],"name":"transferOperatorAccess","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tkn","type":"address"}],"name":"withdrawStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a060405269d3c21bcecceda1000000600e55600160125f6101000a81548160ff021916908315150217905550348015610037575f80fd5b506040518060400160405280600e81526020017f546974616e69756d2047616d65730000000000000000000000000000000000008152506040518060400160405280600381526020017f545447000000000000000000000000000000000000000000000000000000000081525081600390816100b39190610b74565b5080600490816100c39190610b74565b5050506100e26100d761032f60201b60201c565b61033660201b60201c565b5f6b033b2e3c9fd0803ce800000090505f73a4c08322211bdcfaf7c432494efd680b838397bf9050737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050610185306080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6103f960201b60201c565b8160098190555081600a819055506a013da329b6336471800000600b819055506105dc600c819055506105dc600d81905550733afa251b110234bc45813b66a593b452e5353f1e60065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073d6a59b80a1bf7a8eaf195a56a3eff25f9e475e4860085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061027d6102706105bc60201b60201c565b60016105e460201b60201c565b61028e3060016105e460201b60201c565b6102a161dead60016105e460201b60201c565b6102b28160016105e460201b60201c565b6102d06102c36105bc60201b60201c565b600161069860201b60201c565b6102e130600161069860201b60201c565b6102f461dead600161069860201b60201c565b610307608051600161069860201b60201c565b61031881600161069860201b60201c565b610328338361074c60201b60201c565b5050610efa565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610467576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161045e90610cc3565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036104d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104cc90610d51565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516105af9190610d7e565b60405180910390a3505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6105f26108a660201b60201c565b80600f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161068c9190610db1565b60405180910390a25050565b6106a66108a660201b60201c565b8060105f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc92826040516107409190610db1565b60405180910390a25050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036107ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b190610e14565b60405180910390fd5b6107cb5f838361093060201b60201c565b8060025f8282546107dc9190610e5f565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516108899190610d7e565b60405180910390a36108a25f838361093560201b60201c565b5050565b6108b461032f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166108d86105bc60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161461092e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092590610edc565b60405180910390fd5b565b505050565b505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806109b557607f821691505b6020821081036109c8576109c7610971565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302610a2a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826109ef565b610a3486836109ef565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f610a78610a73610a6e84610a4c565b610a55565b610a4c565b9050919050565b5f819050919050565b610a9183610a5e565b610aa5610a9d82610a7f565b8484546109fb565b825550505050565b5f90565b610ab9610aad565b610ac4818484610a88565b505050565b5b81811015610ae757610adc5f82610ab1565b600181019050610aca565b5050565b601f821115610b2c57610afd816109ce565b610b06846109e0565b81016020851015610b15578190505b610b29610b21856109e0565b830182610ac9565b50505b505050565b5f82821c905092915050565b5f610b4c5f1984600802610b31565b1980831691505092915050565b5f610b648383610b3d565b9150826002028217905092915050565b610b7d8261093a565b67ffffffffffffffff811115610b9657610b95610944565b5b610ba0825461099e565b610bab828285610aeb565b5f60209050601f831160018114610bdc575f8415610bca578287015190505b610bd48582610b59565b865550610c3b565b601f198416610bea866109ce565b5f5b82811015610c1157848901518255600182019150602085019450602081019050610bec565b86831015610c2e5784890151610c2a601f891682610b3d565b8355505b6001600288020188555050505b505050505050565b5f82825260208201905092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f610cad602483610c43565b9150610cb882610c53565b604082019050919050565b5f6020820190508181035f830152610cda81610ca1565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f610d3b602283610c43565b9150610d4682610ce1565b604082019050919050565b5f6020820190508181035f830152610d6881610d2f565b9050919050565b610d7881610a4c565b82525050565b5f602082019050610d915f830184610d6f565b92915050565b5f8115159050919050565b610dab81610d97565b82525050565b5f602082019050610dc45f830184610da2565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f610dfe601f83610c43565b9150610e0982610dca565b602082019050919050565b5f6020820190508181035f830152610e2b81610df2565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610e6982610a4c565b9150610e7483610a4c565b9250828201905080821115610e8c57610e8b610e32565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f610ec6602083610c43565b9150610ed182610e92565b602082019050919050565b5f6020820190508181035f830152610ef381610eba565b9050919050565b60805161527a610f515f395f8181610c3601528181611c1201528181611cbb01528181611e6d01528181611f6501528181612708015281816127600152818161389901528181613978015261399f015261527a5ff3fe60806040526004361061028b575f3560e01c806395d89b4111610159578063cb963728116100c0578063e2f4560511610079578063e2f45605146109ac578063e8078d94146109d6578063e884f260146109ec578063f2fde38b14610a02578063f5648a4f14610a2a578063f8b45b0514610a4057610292565b8063cb963728146108a6578063d7d1d10e146108ce578063db69d887146108f6578063dcf7aef314610920578063dd62ed3e14610948578063e01af92c1461098457610292565b8063bb4c9f0b11610112578063bb4c9f0b146107b0578063bbc0c742146107d8578063c024666814610802578063c24a7a8c1461082a578063c3f70b5214610852578063c876d0b91461087c57610292565b806395d89b4114610696578063a07b1e84146106c0578063a457c2d7146106e8578063a637af6514610724578063a9059cbb1461074c578063afa4f3b21461078857610292565b806342966c68116101fd57806370a08231116101b657806370a08231146105b4578063715018a6146105f05780637571336a146106065780638a8c523c1461062e5780638da5cb5b1461064457806395927c251461066e57610292565b806342966c68146104a85780634626402b146104d057806349bd5a5e146104fa5780634fbee19314610524578063570ca735146105605780636ddd17131461058a57610292565b806318d9ceae1161024f57806318d9ceae1461037857806323b872dd146103b457806327c8f835146103f05780632fa327a81461041a578063313ce56714610442578063395093511461046c57610292565b806306fdde0314610296578063095ea7b3146102c0578063155ca7c1146102fc5780631694505e1461032457806318160ddd1461034e57610292565b3661029257005b5f80fd5b3480156102a1575f80fd5b506102aa610a6a565b6040516102b79190613a9f565b60405180910390f35b3480156102cb575f80fd5b506102e660048036038101906102e19190613b54565b610afa565b6040516102f39190613bac565b60405180910390f35b348015610307575f80fd5b50610322600480360381019061031d9190613c50565b610b1c565b005b34801561032f575f80fd5b50610338610c34565b6040516103459190613d08565b60405180910390f35b348015610359575f80fd5b50610362610c58565b60405161036f9190613d30565b60405180910390f35b348015610383575f80fd5b5061039e60048036038101906103999190613d49565b610c61565b6040516103ab9190613bac565b60405180910390f35b3480156103bf575f80fd5b506103da60048036038101906103d59190613d74565b610cb3565b6040516103e79190613bac565b60405180910390f35b3480156103fb575f80fd5b50610404610ce1565b6040516104119190613dd3565b60405180910390f35b348015610425575f80fd5b50610440600480360381019061043b9190613d49565b610ce7565b005b34801561044d575f80fd5b50610456610e41565b6040516104639190613e07565b60405180910390f35b348015610477575f80fd5b50610492600480360381019061048d9190613b54565b610e49565b60405161049f9190613bac565b60405180910390f35b3480156104b3575f80fd5b506104ce60048036038101906104c99190613e20565b610e7f565b005b3480156104db575f80fd5b506104e4610e8c565b6040516104f19190613dd3565b60405180910390f35b348015610505575f80fd5b5061050e610eb1565b60405161051b9190613dd3565b60405180910390f35b34801561052f575f80fd5b5061054a60048036038101906105459190613d49565b610ed6565b6040516105579190613bac565b60405180910390f35b34801561056b575f80fd5b50610574610f28565b6040516105819190613dd3565b60405180910390f35b348015610595575f80fd5b5061059e610f50565b6040516105ab9190613bac565b60405180910390f35b3480156105bf575f80fd5b506105da60048036038101906105d59190613d49565b610f63565b6040516105e79190613d30565b60405180910390f35b3480156105fb575f80fd5b50610604610fa8565b005b348015610611575f80fd5b5061062c60048036038101906106279190613e4b565b610fbb565b005b348015610639575f80fd5b50610642611069565b005b34801561064f575f80fd5b506106586110f9565b6040516106659190613dd3565b60405180910390f35b348015610679575f80fd5b50610694600480360381019061068f9190613e20565b611121565b005b3480156106a1575f80fd5b506106aa611178565b6040516106b79190613a9f565b60405180910390f35b3480156106cb575f80fd5b506106e660048036038101906106e19190613e20565b611208565b005b3480156106f3575f80fd5b5061070e60048036038101906107099190613b54565b61121a565b60405161071b9190613bac565b60405180910390f35b34801561072f575f80fd5b5061074a60048036038101906107459190613d49565b61128f565b005b348015610757575f80fd5b50610772600480360381019061076d9190613b54565b61135a565b60405161077f9190613bac565b60405180910390f35b348015610793575f80fd5b506107ae60048036038101906107a99190613e20565b61137c565b005b3480156107bb575f80fd5b506107d660048036038101906107d19190613ede565b6113f2565b005b3480156107e3575f80fd5b506107ec61157d565b6040516107f99190613bac565b60405180910390f35b34801561080d575f80fd5b5061082860048036038101906108239190613e4b565b611590565b005b348015610835575f80fd5b50610850600480360381019061084b9190613f5c565b61163e565b005b34801561085d575f80fd5b5061086661171e565b6040516108739190613d30565b60405180910390f35b348015610887575f80fd5b50610890611724565b60405161089d9190613bac565b60405180910390f35b3480156108b1575f80fd5b506108cc60048036038101906108c79190613d49565b611736565b005b3480156108d9575f80fd5b506108f460048036038101906108ef9190613c50565b611996565b005b348015610901575f80fd5b5061090a611aae565b6040516109179190613d30565b60405180910390f35b34801561092b575f80fd5b5061094660048036038101906109419190613e20565b611ab4565b005b348015610953575f80fd5b5061096e60048036038101906109699190613f9a565b611b0b565b60405161097b9190613d30565b60405180910390f35b34801561098f575f80fd5b506109aa60048036038101906109a59190613fd8565b611b8d565b005b3480156109b7575f80fd5b506109c0611bb2565b6040516109cd9190613d30565b60405180910390f35b3480156109e1575f80fd5b506109ea611bb8565b005b3480156109f7575f80fd5b50610a00612036565b005b348015610a0d575f80fd5b50610a286004803603810190610a239190613d49565b612059565b005b348015610a35575f80fd5b50610a3e6120db565b005b348015610a4b575f80fd5b50610a54612150565b604051610a619190613d30565b60405180910390f35b606060038054610a7990614030565b80601f0160208091040260200160405190810160405280929190818152602001828054610aa590614030565b8015610af05780601f10610ac757610100808354040283529160200191610af0565b820191905f5260205f20905b815481529060010190602001808311610ad357829003601f168201915b5050505050905090565b5f80610b04612156565b9050610b1181858561215d565b600191505092915050565b610b24612320565b5f5b83839050811015610c2e5781600f5f868685818110610b4857610b47614060565b5b9050602002016020810190610b5d9190613d49565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550838382818110610bbf57610bbe614060565b5b9050602002016020810190610bd49190613d49565b73ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df783604051610c199190613bac565b60405180910390a28080600101915050610b26565b50505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f600254905090565b5f60105f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f80610cbd612156565b9050610cca85828561239e565b610cd5858585612429565b60019150509392505050565b61dead81565b610cef612320565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610d5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d54906140d7565b60405180910390fd5b5f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1660085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f02f8a1483978974a6412ba3a67040b4daa4fc0dfe9439a7295f9a9538394f63560405160405180910390a35050565b5f6012905090565b5f80610e53612156565b9050610e74818585610e658589611b0b565b610e6f9190614122565b61215d565b600191505092915050565b610e8933826130fb565b50565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600860159054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610fb0612320565b610fb95f6132be565b565b610fc3612320565b8060105f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc928260405161105d9190613bac565b60405180910390a25050565b611071613381565b600860149054906101000a900460ff16156110c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b89061419f565b60405180910390fd5b6001600860146101000a81548160ff0219169083151502179055506001600860156101000a81548160ff021916908315150217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611129612320565b6105dc81111561116e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111659061422d565b60405180910390fd5b80600d8190555050565b60606004805461118790614030565b80601f01602080910402602001604051908101604052809291908181526020018280546111b390614030565b80156111fe5780601f106111d5576101008083540402835291602001916111fe565b820191905f5260205f20905b8154815290600101906020018083116111e157829003601f168201915b5050505050905090565b611210612320565b80600e8190555050565b5f80611224612156565b90505f6112318286611b0b565b905083811015611276576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126d906142bb565b60405180910390fd5b611283828686840361215d565b60019250505092915050565b611297612320565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167ff002d44a556911dfb26c3439289ffc2278c02f7eb8c658179333ab5c4afda22860405160405180910390a35050565b5f80611364612156565b9050611371818585612429565b600191505092915050565b611384612320565b620186a06001611392610c58565b61139c91906142d9565b6113a69190614347565b8110156113e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113df906143e7565b60405180910390fd5b80600b8190555050565b6113fa612320565b818190508484905014611442576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143990614475565b60405180910390fd5b5f805b838390508110156114845783838281811061146357611462614060565b5b90506020020135826114759190614122565b91508080600101915050611445565b50806114903330611b0b565b10156114d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c8906144dd565b60405180910390fd5b5f5b8585905081101561157557611529338787848181106114f5576114f4614060565b5b905060200201602081019061150a9190613d49565b86868581811061151d5761151c614060565b5b90506020020135610cb3565b611568576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155f90614545565b60405180910390fd5b80806001019150506114d3565b505050505050565b600860149054906101000a900460ff1681565b611598612320565b80600f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516116329190613bac565b60405180910390a25050565b611646612320565b6103e86005611653610c58565b61165d91906142d9565b6116679190614347565b8210156116a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a0906145d3565b60405180910390fd5b6103e860056116b6610c58565b6116c091906142d9565b6116ca9190614347565b81101561170c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170390614661565b60405180910390fd5b8160098190555080600a819055505050565b60095481565b60125f9054906101000a900460ff1681565b61173e612320565b5f8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036117e0573373ffffffffffffffffffffffffffffffffffffffff1647604051611796906146ac565b5f6040518083038185875af1925050503d805f81146117d0576040519150601f19603f3d011682016040523d82523d5f602084013e6117d5565b606091505b505080915050611992565b5f8273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161181a9190613dd3565b602060405180830381865afa158015611835573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061185991906146d4565b11611899576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189090614749565b60405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016118d39190613dd3565b602060405180830381865afa1580156118ee573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061191291906146d4565b90508273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b815260040161194f929190614767565b6020604051808303815f875af115801561196b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061198f91906147a2565b50505b5050565b61199e612320565b5f5b83839050811015611aa8578160105f8686858181106119c2576119c1614060565b5b90506020020160208101906119d79190613d49565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550838382818110611a3957611a38614060565b5b9050602002016020810190611a4e9190613d49565b73ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc9283604051611a939190613bac565b60405180910390a280806001019150506119a0565b50505050565b600e5481565b611abc612320565b6105dc811115611b01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af89061422d565b60405180910390fd5b80600c8190555050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b611b95612320565b80600860156101000a81548160ff02191690831515021790555050565b600b5481565b611bc0612320565b600860149054906101000a900460ff1615611c10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c079061419f565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c79573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c9d91906147e1565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396307f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d22573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d4691906147e1565b6040518363ffffffff1660e01b8152600401611d6392919061480c565b6020604051808303815f875af1158015611d7f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611da391906147e1565b60075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611e2e3060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61215d565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b37f00000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611eca929190614767565b6020604051808303815f875af1158015611ee6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f0a91906147a2565b50611f3760075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001613408565b611f6360075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001610fbb565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d7194730611faa30610f63565b5f8060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401611ff09695949392919061486c565b60606040518083038185885af115801561200c573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061203191906148cb565b505050565b61203e612320565b5f60125f6101000a81548160ff021916908315150217905550565b612061612320565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036120cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c69061498b565b60405180910390fd5b6120d8816132be565b50565b6120e3612320565b5f3373ffffffffffffffffffffffffffffffffffffffff1647604051612108906146ac565b5f6040518083038185875af1925050503d805f8114612142576040519150601f19603f3d011682016040523d82523d5f602084013e612147565b606091505b50508091505050565b600a5481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036121cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c290614a19565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612239576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223090614aa7565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516123139190613d30565b60405180910390a3505050565b612328612156565b73ffffffffffffffffffffffffffffffffffffffff166123466110f9565b73ffffffffffffffffffffffffffffffffffffffff161461239c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239390614b0f565b60405180910390fd5b565b5f6123a98484611b0b565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146124235781811015612415576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240c90614b77565b60405180910390fd5b612422848484840361215d565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612497576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248e90614c05565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612505576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124fc90614c93565b60405180910390fd5b5f810361251c5761251783835f6134a6565b6130f6565b6125246110f9565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561259257506125626110f9565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156125e55750600f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b801561261d57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612657575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156126705750600860169054906101000a900460ff16155b15612d425760125f9054906101000a900460ff1615612979576126916110f9565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156126ff57506126cf6110f9565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561275757507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156127af57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156128025750600f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156128555750600f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156129785760115f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161561293557600a436128b69190614cb1565b60135f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410612934576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292b90614d54565b60405180910390fd5b5b4360135f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5b600860149054906101000a900460ff16612a6857600f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612a285750600f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612a67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5e90614dbc565b60405180910390fd5b5b60115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612b05575060105f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612bac57600954811115612b4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4690614e4a565b60405180910390fd5b600a54612b5b83610f63565b82612b669190614122565b1115612ba7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9e90614eb2565b60405180910390fd5b612d41565b60115f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612c49575060105f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612c9857600954811115612c93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c8a90614f40565b60405180910390fd5b612d40565b60105f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612d3f57600a54612cf283610f63565b82612cfd9190614122565b1115612d3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3590614eb2565b60405180910390fd5b5b5b5b5b5f612d4c30610f63565b90505f600b548210159050808015612d705750600860159054906101000a900460ff165b8015612d895750600860169054906101000a900460ff16155b8015612ddb575060115f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b8015612e2e5750600f5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612e815750600f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612ed4575060115f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612f17576001600860166101000a81548160ff021916908315150217905550612efc613712565b5f600860166101000a81548160ff0219169083151502179055505b5f600860169054906101000a900460ff16159050600f5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612fc65750600f5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612fcf575f90505b5f81156130e65760115f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161561304e57600d5461303d612710876137dd90919063ffffffff16565b61304791906142d9565b90506130c3565b60115f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156130c257600c546130b5612710876137dd90919063ffffffff16565b6130bf91906142d9565b90505b5b5f8111156130d7576130d68730836134a6565b5b80856130e39190614cb1565b94505b6130f18787876134a6565b505050505b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613169576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161316090614fce565b60405180910390fd5b613174825f836137f2565b5f805f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156131f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131ee9061505c565b60405180910390fd5b8181035f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160025f82825403925050819055505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516132a69190613d30565b60405180910390a36132b9835f846137f7565b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b613389612156565b73ffffffffffffffffffffffffffffffffffffffff166133a7610f28565b73ffffffffffffffffffffffffffffffffffffffff1614613406576133ca612156565b6040517f740fbe610000000000000000000000000000000000000000000000000000000081526004016133fd9190613dd3565b60405180910390fd5b565b8060115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613514576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161350b90614c05565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613582576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161357990614c93565b60405180910390fd5b61358d8383836137f2565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015613610576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613607906150ea565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516136f99190613d30565b60405180910390a361370c8484846137f7565b50505050565b5f61371c30610f63565b90505f600b5482106137d1575f600e549050613737816137fc565b5f4790505f81905060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051613784906146ac565b5f6040518083038185875af1925050503d805f81146137be576040519150601f19603f3d011682016040523d82523d5f602084013e6137c3565b606091505b5050809450505050506137d8565b50506137db565b50505b565b5f81836137ea9190614347565b905092915050565b505050565b505050565b5f600267ffffffffffffffff81111561381857613817615108565b5b6040519080825280602002602001820160405280156138465781602001602082028036833780820191505090505b50905030815f8151811061385d5761385c614060565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613900573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061392491906147e1565b8160018151811061393857613937614060565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061399d307f00000000000000000000000000000000000000000000000000000000000000008461215d565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016139fe9594939291906151ec565b5f604051808303815f87803b158015613a15575f80fd5b505af1158015613a27573d5f803e3d5ffd5b505050505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f613a7182613a2f565b613a7b8185613a39565b9350613a8b818560208601613a49565b613a9481613a57565b840191505092915050565b5f6020820190508181035f830152613ab78184613a67565b905092915050565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613af082613ac7565b9050919050565b613b0081613ae6565b8114613b0a575f80fd5b50565b5f81359050613b1b81613af7565b92915050565b5f819050919050565b613b3381613b21565b8114613b3d575f80fd5b50565b5f81359050613b4e81613b2a565b92915050565b5f8060408385031215613b6a57613b69613abf565b5b5f613b7785828601613b0d565b9250506020613b8885828601613b40565b9150509250929050565b5f8115159050919050565b613ba681613b92565b82525050565b5f602082019050613bbf5f830184613b9d565b92915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f840112613be657613be5613bc5565b5b8235905067ffffffffffffffff811115613c0357613c02613bc9565b5b602083019150836020820283011115613c1f57613c1e613bcd565b5b9250929050565b613c2f81613b92565b8114613c39575f80fd5b50565b5f81359050613c4a81613c26565b92915050565b5f805f60408486031215613c6757613c66613abf565b5b5f84013567ffffffffffffffff811115613c8457613c83613ac3565b5b613c9086828701613bd1565b93509350506020613ca386828701613c3c565b9150509250925092565b5f819050919050565b5f613cd0613ccb613cc684613ac7565b613cad565b613ac7565b9050919050565b5f613ce182613cb6565b9050919050565b5f613cf282613cd7565b9050919050565b613d0281613ce8565b82525050565b5f602082019050613d1b5f830184613cf9565b92915050565b613d2a81613b21565b82525050565b5f602082019050613d435f830184613d21565b92915050565b5f60208284031215613d5e57613d5d613abf565b5b5f613d6b84828501613b0d565b91505092915050565b5f805f60608486031215613d8b57613d8a613abf565b5b5f613d9886828701613b0d565b9350506020613da986828701613b0d565b9250506040613dba86828701613b40565b9150509250925092565b613dcd81613ae6565b82525050565b5f602082019050613de65f830184613dc4565b92915050565b5f60ff82169050919050565b613e0181613dec565b82525050565b5f602082019050613e1a5f830184613df8565b92915050565b5f60208284031215613e3557613e34613abf565b5b5f613e4284828501613b40565b91505092915050565b5f8060408385031215613e6157613e60613abf565b5b5f613e6e85828601613b0d565b9250506020613e7f85828601613c3c565b9150509250929050565b5f8083601f840112613e9e57613e9d613bc5565b5b8235905067ffffffffffffffff811115613ebb57613eba613bc9565b5b602083019150836020820283011115613ed757613ed6613bcd565b5b9250929050565b5f805f8060408587031215613ef657613ef5613abf565b5b5f85013567ffffffffffffffff811115613f1357613f12613ac3565b5b613f1f87828801613bd1565b9450945050602085013567ffffffffffffffff811115613f4257613f41613ac3565b5b613f4e87828801613e89565b925092505092959194509250565b5f8060408385031215613f7257613f71613abf565b5b5f613f7f85828601613b40565b9250506020613f9085828601613b40565b9150509250929050565b5f8060408385031215613fb057613faf613abf565b5b5f613fbd85828601613b0d565b9250506020613fce85828601613b0d565b9150509250929050565b5f60208284031215613fed57613fec613abf565b5b5f613ffa84828501613c3c565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061404757607f821691505b60208210810361405a57614059614003565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f45524332303a20416464726573732030000000000000000000000000000000005f82015250565b5f6140c1601083613a39565b91506140cc8261408d565b602082019050919050565b5f6020820190508181035f8301526140ee816140b5565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61412c82613b21565b915061413783613b21565b925082820190508082111561414f5761414e6140f5565b5b92915050565b7f54726164696e6720616c7265616479206163746976652e0000000000000000005f82015250565b5f614189601783613a39565b915061419482614155565b602082019050919050565b5f6020820190508181035f8301526141b68161417d565b9050919050565b7f45524332303a204d757374206b656570206665657320617420313525206f72205f8201527f6c65737300000000000000000000000000000000000000000000000000000000602082015250565b5f614217602483613a39565b9150614222826141bd565b604082019050919050565b5f6020820190508181035f8301526142448161420b565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6142a5602583613a39565b91506142b08261424b565b604082019050919050565b5f6020820190508181035f8301526142d281614299565b9050919050565b5f6142e382613b21565b91506142ee83613b21565b92508282026142fc81613b21565b91508282048414831517614313576143126140f5565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61435182613b21565b915061435c83613b21565b92508261436c5761436b61431a565b5b828204905092915050565b7f45524332303a205377617020616d6f756e742063616e6e6f74206265206c6f775f8201527f6572207468616e20302e3030312520746f74616c20737570706c792e00000000602082015250565b5f6143d1603c83613a39565b91506143dc82614377565b604082019050919050565b5f6020820190508181035f8301526143fe816143c5565b9050919050565b7f526563697069656e747320616e6420616d6f756e7473206c656e677468206d695f8201527f736d617463680000000000000000000000000000000000000000000000000000602082015250565b5f61445f602683613a39565b915061446a82614405565b604082019050919050565b5f6020820190508181035f83015261448c81614453565b9050919050565b7f496e73756666696369656e7420616c6c6f77616e6365000000000000000000005f82015250565b5f6144c7601683613a39565b91506144d282614493565b602082019050919050565b5f6020820190508181035f8301526144f4816144bb565b9050919050565b7f5472616e73666572206661696c656400000000000000000000000000000000005f82015250565b5f61452f600f83613a39565b915061453a826144fb565b602082019050919050565b5f6020820190508181035f83015261455c81614523565b9050919050565b7f45524332303a2043616e6e6f7420736574206d617854786e206c6f77657220745f8201527f68616e20302e3525000000000000000000000000000000000000000000000000602082015250565b5f6145bd602883613a39565b91506145c882614563565b604082019050919050565b5f6020820190508181035f8301526145ea816145b1565b9050919050565b7f45524332303a2043616e6e6f7420736574206d617857616c6c6574206c6f77655f8201527f72207468616e20302e3525000000000000000000000000000000000000000000602082015250565b5f61464b602b83613a39565b9150614656826145f1565b604082019050919050565b5f6020820190508181035f8301526146788161463f565b9050919050565b5f81905092915050565b50565b5f6146975f8361467f565b91506146a282614689565b5f82019050919050565b5f6146b68261468c565b9150819050919050565b5f815190506146ce81613b2a565b92915050565b5f602082840312156146e9576146e8613abf565b5b5f6146f6848285016146c0565b91505092915050565b7f4e6f20746f6b656e7300000000000000000000000000000000000000000000005f82015250565b5f614733600983613a39565b915061473e826146ff565b602082019050919050565b5f6020820190508181035f83015261476081614727565b9050919050565b5f60408201905061477a5f830185613dc4565b6147876020830184613d21565b9392505050565b5f8151905061479c81613c26565b92915050565b5f602082840312156147b7576147b6613abf565b5b5f6147c48482850161478e565b91505092915050565b5f815190506147db81613af7565b92915050565b5f602082840312156147f6576147f5613abf565b5b5f614803848285016147cd565b91505092915050565b5f60408201905061481f5f830185613dc4565b61482c6020830184613dc4565b9392505050565b5f819050919050565b5f61485661485161484c84614833565b613cad565b613b21565b9050919050565b6148668161483c565b82525050565b5f60c08201905061487f5f830189613dc4565b61488c6020830188613d21565b614899604083018761485d565b6148a6606083018661485d565b6148b36080830185613dc4565b6148c060a0830184613d21565b979650505050505050565b5f805f606084860312156148e2576148e1613abf565b5b5f6148ef868287016146c0565b9350506020614900868287016146c0565b9250506040614911868287016146c0565b9150509250925092565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f614975602683613a39565b91506149808261491b565b604082019050919050565b5f6020820190508181035f8301526149a281614969565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f614a03602483613a39565b9150614a0e826149a9565b604082019050919050565b5f6020820190508181035f830152614a30816149f7565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f614a91602283613a39565b9150614a9c82614a37565b604082019050919050565b5f6020820190508181035f830152614abe81614a85565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f614af9602083613a39565b9150614b0482614ac5565b602082019050919050565b5f6020820190508181035f830152614b2681614aed565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f614b61601d83613a39565b9150614b6c82614b2d565b602082019050919050565b5f6020820190508181035f830152614b8e81614b55565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f614bef602583613a39565b9150614bfa82614b95565b604082019050919050565b5f6020820190508181035f830152614c1c81614be3565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f614c7d602383613a39565b9150614c8882614c23565b604082019050919050565b5f6020820190508181035f830152614caa81614c71565b9050919050565b5f614cbb82613b21565b9150614cc683613b21565b9250828203905081811115614cde57614cdd6140f5565b5b92915050565b7f5f7472616e736665723a205472616e736665722044656c6179206163746976655f8201527f2e2054727920616761696e206c617465722e0000000000000000000000000000602082015250565b5f614d3e603283613a39565b9150614d4982614ce4565b604082019050919050565b5f6020820190508181035f830152614d6b81614d32565b9050919050565b7f45524332303a2054726164696e67206973206e6f74206163746976652e0000005f82015250565b5f614da6601d83613a39565b9150614db182614d72565b602082019050919050565b5f6020820190508181035f830152614dd381614d9a565b9050919050565b7f45524332303a20427579207472616e7366657220616d6f756e742065786365655f8201527f647320746865206d61785472616e73616374696f6e2e00000000000000000000602082015250565b5f614e34603683613a39565b9150614e3f82614dda565b604082019050919050565b5f6020820190508181035f830152614e6181614e28565b9050919050565b7f45524332303a204d61782077616c6c65742065786365656465640000000000005f82015250565b5f614e9c601a83613a39565b9150614ea782614e68565b602082019050919050565b5f6020820190508181035f830152614ec981614e90565b9050919050565b7f45524332303a2053656c6c207472616e7366657220616d6f756e7420657863655f8201527f65647320746865206d61785472616e73616374696f6e2e000000000000000000602082015250565b5f614f2a603783613a39565b9150614f3582614ed0565b604082019050919050565b5f6020820190508181035f830152614f5781614f1e565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f206164647265735f8201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b5f614fb8602183613a39565b9150614fc382614f5e565b604082019050919050565b5f6020820190508181035f830152614fe581614fac565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e5f8201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b5f615046602283613a39565b915061505182614fec565b604082019050919050565b5f6020820190508181035f8301526150738161503a565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f6150d4602683613a39565b91506150df8261507a565b604082019050919050565b5f6020820190508181035f830152615101816150c8565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61516781613ae6565b82525050565b5f615178838361515e565b60208301905092915050565b5f602082019050919050565b5f61519a82615135565b6151a4818561513f565b93506151af8361514f565b805f5b838110156151df5781516151c6888261516d565b97506151d183615184565b9250506001810190506151b2565b5085935050505092915050565b5f60a0820190506151ff5f830188613d21565b61520c602083018761485d565b818103604083015261521e8186615190565b905061522d6060830185613dc4565b61523a6080830184613d21565b969550505050505056fea2646970667358221220e7c4faf11025830dcb4666d744cc3c073e949877409789039219ed9eef122e2464736f6c63430008190033

Deployed Bytecode

0x60806040526004361061028b575f3560e01c806395d89b4111610159578063cb963728116100c0578063e2f4560511610079578063e2f45605146109ac578063e8078d94146109d6578063e884f260146109ec578063f2fde38b14610a02578063f5648a4f14610a2a578063f8b45b0514610a4057610292565b8063cb963728146108a6578063d7d1d10e146108ce578063db69d887146108f6578063dcf7aef314610920578063dd62ed3e14610948578063e01af92c1461098457610292565b8063bb4c9f0b11610112578063bb4c9f0b146107b0578063bbc0c742146107d8578063c024666814610802578063c24a7a8c1461082a578063c3f70b5214610852578063c876d0b91461087c57610292565b806395d89b4114610696578063a07b1e84146106c0578063a457c2d7146106e8578063a637af6514610724578063a9059cbb1461074c578063afa4f3b21461078857610292565b806342966c68116101fd57806370a08231116101b657806370a08231146105b4578063715018a6146105f05780637571336a146106065780638a8c523c1461062e5780638da5cb5b1461064457806395927c251461066e57610292565b806342966c68146104a85780634626402b146104d057806349bd5a5e146104fa5780634fbee19314610524578063570ca735146105605780636ddd17131461058a57610292565b806318d9ceae1161024f57806318d9ceae1461037857806323b872dd146103b457806327c8f835146103f05780632fa327a81461041a578063313ce56714610442578063395093511461046c57610292565b806306fdde0314610296578063095ea7b3146102c0578063155ca7c1146102fc5780631694505e1461032457806318160ddd1461034e57610292565b3661029257005b5f80fd5b3480156102a1575f80fd5b506102aa610a6a565b6040516102b79190613a9f565b60405180910390f35b3480156102cb575f80fd5b506102e660048036038101906102e19190613b54565b610afa565b6040516102f39190613bac565b60405180910390f35b348015610307575f80fd5b50610322600480360381019061031d9190613c50565b610b1c565b005b34801561032f575f80fd5b50610338610c34565b6040516103459190613d08565b60405180910390f35b348015610359575f80fd5b50610362610c58565b60405161036f9190613d30565b60405180910390f35b348015610383575f80fd5b5061039e60048036038101906103999190613d49565b610c61565b6040516103ab9190613bac565b60405180910390f35b3480156103bf575f80fd5b506103da60048036038101906103d59190613d74565b610cb3565b6040516103e79190613bac565b60405180910390f35b3480156103fb575f80fd5b50610404610ce1565b6040516104119190613dd3565b60405180910390f35b348015610425575f80fd5b50610440600480360381019061043b9190613d49565b610ce7565b005b34801561044d575f80fd5b50610456610e41565b6040516104639190613e07565b60405180910390f35b348015610477575f80fd5b50610492600480360381019061048d9190613b54565b610e49565b60405161049f9190613bac565b60405180910390f35b3480156104b3575f80fd5b506104ce60048036038101906104c99190613e20565b610e7f565b005b3480156104db575f80fd5b506104e4610e8c565b6040516104f19190613dd3565b60405180910390f35b348015610505575f80fd5b5061050e610eb1565b60405161051b9190613dd3565b60405180910390f35b34801561052f575f80fd5b5061054a60048036038101906105459190613d49565b610ed6565b6040516105579190613bac565b60405180910390f35b34801561056b575f80fd5b50610574610f28565b6040516105819190613dd3565b60405180910390f35b348015610595575f80fd5b5061059e610f50565b6040516105ab9190613bac565b60405180910390f35b3480156105bf575f80fd5b506105da60048036038101906105d59190613d49565b610f63565b6040516105e79190613d30565b60405180910390f35b3480156105fb575f80fd5b50610604610fa8565b005b348015610611575f80fd5b5061062c60048036038101906106279190613e4b565b610fbb565b005b348015610639575f80fd5b50610642611069565b005b34801561064f575f80fd5b506106586110f9565b6040516106659190613dd3565b60405180910390f35b348015610679575f80fd5b50610694600480360381019061068f9190613e20565b611121565b005b3480156106a1575f80fd5b506106aa611178565b6040516106b79190613a9f565b60405180910390f35b3480156106cb575f80fd5b506106e660048036038101906106e19190613e20565b611208565b005b3480156106f3575f80fd5b5061070e60048036038101906107099190613b54565b61121a565b60405161071b9190613bac565b60405180910390f35b34801561072f575f80fd5b5061074a60048036038101906107459190613d49565b61128f565b005b348015610757575f80fd5b50610772600480360381019061076d9190613b54565b61135a565b60405161077f9190613bac565b60405180910390f35b348015610793575f80fd5b506107ae60048036038101906107a99190613e20565b61137c565b005b3480156107bb575f80fd5b506107d660048036038101906107d19190613ede565b6113f2565b005b3480156107e3575f80fd5b506107ec61157d565b6040516107f99190613bac565b60405180910390f35b34801561080d575f80fd5b5061082860048036038101906108239190613e4b565b611590565b005b348015610835575f80fd5b50610850600480360381019061084b9190613f5c565b61163e565b005b34801561085d575f80fd5b5061086661171e565b6040516108739190613d30565b60405180910390f35b348015610887575f80fd5b50610890611724565b60405161089d9190613bac565b60405180910390f35b3480156108b1575f80fd5b506108cc60048036038101906108c79190613d49565b611736565b005b3480156108d9575f80fd5b506108f460048036038101906108ef9190613c50565b611996565b005b348015610901575f80fd5b5061090a611aae565b6040516109179190613d30565b60405180910390f35b34801561092b575f80fd5b5061094660048036038101906109419190613e20565b611ab4565b005b348015610953575f80fd5b5061096e60048036038101906109699190613f9a565b611b0b565b60405161097b9190613d30565b60405180910390f35b34801561098f575f80fd5b506109aa60048036038101906109a59190613fd8565b611b8d565b005b3480156109b7575f80fd5b506109c0611bb2565b6040516109cd9190613d30565b60405180910390f35b3480156109e1575f80fd5b506109ea611bb8565b005b3480156109f7575f80fd5b50610a00612036565b005b348015610a0d575f80fd5b50610a286004803603810190610a239190613d49565b612059565b005b348015610a35575f80fd5b50610a3e6120db565b005b348015610a4b575f80fd5b50610a54612150565b604051610a619190613d30565b60405180910390f35b606060038054610a7990614030565b80601f0160208091040260200160405190810160405280929190818152602001828054610aa590614030565b8015610af05780601f10610ac757610100808354040283529160200191610af0565b820191905f5260205f20905b815481529060010190602001808311610ad357829003601f168201915b5050505050905090565b5f80610b04612156565b9050610b1181858561215d565b600191505092915050565b610b24612320565b5f5b83839050811015610c2e5781600f5f868685818110610b4857610b47614060565b5b9050602002016020810190610b5d9190613d49565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550838382818110610bbf57610bbe614060565b5b9050602002016020810190610bd49190613d49565b73ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df783604051610c199190613bac565b60405180910390a28080600101915050610b26565b50505050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f600254905090565b5f60105f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f80610cbd612156565b9050610cca85828561239e565b610cd5858585612429565b60019150509392505050565b61dead81565b610cef612320565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610d5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d54906140d7565b60405180910390fd5b5f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1660085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f02f8a1483978974a6412ba3a67040b4daa4fc0dfe9439a7295f9a9538394f63560405160405180910390a35050565b5f6012905090565b5f80610e53612156565b9050610e74818585610e658589611b0b565b610e6f9190614122565b61215d565b600191505092915050565b610e8933826130fb565b50565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600860159054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610fb0612320565b610fb95f6132be565b565b610fc3612320565b8060105f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc928260405161105d9190613bac565b60405180910390a25050565b611071613381565b600860149054906101000a900460ff16156110c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b89061419f565b60405180910390fd5b6001600860146101000a81548160ff0219169083151502179055506001600860156101000a81548160ff021916908315150217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611129612320565b6105dc81111561116e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111659061422d565b60405180910390fd5b80600d8190555050565b60606004805461118790614030565b80601f01602080910402602001604051908101604052809291908181526020018280546111b390614030565b80156111fe5780601f106111d5576101008083540402835291602001916111fe565b820191905f5260205f20905b8154815290600101906020018083116111e157829003601f168201915b5050505050905090565b611210612320565b80600e8190555050565b5f80611224612156565b90505f6112318286611b0b565b905083811015611276576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126d906142bb565b60405180910390fd5b611283828686840361215d565b60019250505092915050565b611297612320565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167ff002d44a556911dfb26c3439289ffc2278c02f7eb8c658179333ab5c4afda22860405160405180910390a35050565b5f80611364612156565b9050611371818585612429565b600191505092915050565b611384612320565b620186a06001611392610c58565b61139c91906142d9565b6113a69190614347565b8110156113e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113df906143e7565b60405180910390fd5b80600b8190555050565b6113fa612320565b818190508484905014611442576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143990614475565b60405180910390fd5b5f805b838390508110156114845783838281811061146357611462614060565b5b90506020020135826114759190614122565b91508080600101915050611445565b50806114903330611b0b565b10156114d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c8906144dd565b60405180910390fd5b5f5b8585905081101561157557611529338787848181106114f5576114f4614060565b5b905060200201602081019061150a9190613d49565b86868581811061151d5761151c614060565b5b90506020020135610cb3565b611568576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155f90614545565b60405180910390fd5b80806001019150506114d3565b505050505050565b600860149054906101000a900460ff1681565b611598612320565b80600f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516116329190613bac565b60405180910390a25050565b611646612320565b6103e86005611653610c58565b61165d91906142d9565b6116679190614347565b8210156116a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a0906145d3565b60405180910390fd5b6103e860056116b6610c58565b6116c091906142d9565b6116ca9190614347565b81101561170c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170390614661565b60405180910390fd5b8160098190555080600a819055505050565b60095481565b60125f9054906101000a900460ff1681565b61173e612320565b5f8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036117e0573373ffffffffffffffffffffffffffffffffffffffff1647604051611796906146ac565b5f6040518083038185875af1925050503d805f81146117d0576040519150601f19603f3d011682016040523d82523d5f602084013e6117d5565b606091505b505080915050611992565b5f8273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161181a9190613dd3565b602060405180830381865afa158015611835573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061185991906146d4565b11611899576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189090614749565b60405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016118d39190613dd3565b602060405180830381865afa1580156118ee573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061191291906146d4565b90508273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b815260040161194f929190614767565b6020604051808303815f875af115801561196b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061198f91906147a2565b50505b5050565b61199e612320565b5f5b83839050811015611aa8578160105f8686858181106119c2576119c1614060565b5b90506020020160208101906119d79190613d49565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550838382818110611a3957611a38614060565b5b9050602002016020810190611a4e9190613d49565b73ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc9283604051611a939190613bac565b60405180910390a280806001019150506119a0565b50505050565b600e5481565b611abc612320565b6105dc811115611b01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af89061422d565b60405180910390fd5b80600c8190555050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b611b95612320565b80600860156101000a81548160ff02191690831515021790555050565b600b5481565b611bc0612320565b600860149054906101000a900460ff1615611c10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c079061419f565b60405180910390fd5b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c79573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c9d91906147e1565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d22573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d4691906147e1565b6040518363ffffffff1660e01b8152600401611d6392919061480c565b6020604051808303815f875af1158015611d7f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611da391906147e1565b60075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611e2e3060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61215d565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b37f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611eca929190614767565b6020604051808303815f875af1158015611ee6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f0a91906147a2565b50611f3760075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001613408565b611f6360075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001610fbb565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d7194730611faa30610f63565b5f8060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401611ff09695949392919061486c565b60606040518083038185885af115801561200c573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061203191906148cb565b505050565b61203e612320565b5f60125f6101000a81548160ff021916908315150217905550565b612061612320565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036120cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c69061498b565b60405180910390fd5b6120d8816132be565b50565b6120e3612320565b5f3373ffffffffffffffffffffffffffffffffffffffff1647604051612108906146ac565b5f6040518083038185875af1925050503d805f8114612142576040519150601f19603f3d011682016040523d82523d5f602084013e612147565b606091505b50508091505050565b600a5481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036121cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c290614a19565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612239576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223090614aa7565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516123139190613d30565b60405180910390a3505050565b612328612156565b73ffffffffffffffffffffffffffffffffffffffff166123466110f9565b73ffffffffffffffffffffffffffffffffffffffff161461239c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239390614b0f565b60405180910390fd5b565b5f6123a98484611b0b565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146124235781811015612415576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240c90614b77565b60405180910390fd5b612422848484840361215d565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612497576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248e90614c05565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612505576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124fc90614c93565b60405180910390fd5b5f810361251c5761251783835f6134a6565b6130f6565b6125246110f9565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561259257506125626110f9565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156125e55750600f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b801561261d57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612657575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156126705750600860169054906101000a900460ff16155b15612d425760125f9054906101000a900460ff1615612979576126916110f9565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156126ff57506126cf6110f9565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561275757507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156127af57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156128025750600f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156128555750600f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156129785760115f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161561293557600a436128b69190614cb1565b60135f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410612934576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292b90614d54565b60405180910390fd5b5b4360135f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5b600860149054906101000a900460ff16612a6857600f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612a285750600f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612a67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5e90614dbc565b60405180910390fd5b5b60115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612b05575060105f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612bac57600954811115612b4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4690614e4a565b60405180910390fd5b600a54612b5b83610f63565b82612b669190614122565b1115612ba7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9e90614eb2565b60405180910390fd5b612d41565b60115f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612c49575060105f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612c9857600954811115612c93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c8a90614f40565b60405180910390fd5b612d40565b60105f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612d3f57600a54612cf283610f63565b82612cfd9190614122565b1115612d3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3590614eb2565b60405180910390fd5b5b5b5b5b5f612d4c30610f63565b90505f600b548210159050808015612d705750600860159054906101000a900460ff165b8015612d895750600860169054906101000a900460ff16155b8015612ddb575060115f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b8015612e2e5750600f5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612e815750600f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612ed4575060115f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612f17576001600860166101000a81548160ff021916908315150217905550612efc613712565b5f600860166101000a81548160ff0219169083151502179055505b5f600860169054906101000a900460ff16159050600f5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612fc65750600f5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612fcf575f90505b5f81156130e65760115f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161561304e57600d5461303d612710876137dd90919063ffffffff16565b61304791906142d9565b90506130c3565b60115f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156130c257600c546130b5612710876137dd90919063ffffffff16565b6130bf91906142d9565b90505b5b5f8111156130d7576130d68730836134a6565b5b80856130e39190614cb1565b94505b6130f18787876134a6565b505050505b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613169576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161316090614fce565b60405180910390fd5b613174825f836137f2565b5f805f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156131f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131ee9061505c565b60405180910390fd5b8181035f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160025f82825403925050819055505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516132a69190613d30565b60405180910390a36132b9835f846137f7565b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b613389612156565b73ffffffffffffffffffffffffffffffffffffffff166133a7610f28565b73ffffffffffffffffffffffffffffffffffffffff1614613406576133ca612156565b6040517f740fbe610000000000000000000000000000000000000000000000000000000081526004016133fd9190613dd3565b60405180910390fd5b565b8060115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613514576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161350b90614c05565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613582576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161357990614c93565b60405180910390fd5b61358d8383836137f2565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015613610576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613607906150ea565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516136f99190613d30565b60405180910390a361370c8484846137f7565b50505050565b5f61371c30610f63565b90505f600b5482106137d1575f600e549050613737816137fc565b5f4790505f81905060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051613784906146ac565b5f6040518083038185875af1925050503d805f81146137be576040519150601f19603f3d011682016040523d82523d5f602084013e6137c3565b606091505b5050809450505050506137d8565b50506137db565b50505b565b5f81836137ea9190614347565b905092915050565b505050565b505050565b5f600267ffffffffffffffff81111561381857613817615108565b5b6040519080825280602002602001820160405280156138465781602001602082028036833780820191505090505b50905030815f8151811061385d5761385c614060565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613900573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061392491906147e1565b8160018151811061393857613937614060565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061399d307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461215d565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016139fe9594939291906151ec565b5f604051808303815f87803b158015613a15575f80fd5b505af1158015613a27573d5f803e3d5ffd5b505050505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f613a7182613a2f565b613a7b8185613a39565b9350613a8b818560208601613a49565b613a9481613a57565b840191505092915050565b5f6020820190508181035f830152613ab78184613a67565b905092915050565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613af082613ac7565b9050919050565b613b0081613ae6565b8114613b0a575f80fd5b50565b5f81359050613b1b81613af7565b92915050565b5f819050919050565b613b3381613b21565b8114613b3d575f80fd5b50565b5f81359050613b4e81613b2a565b92915050565b5f8060408385031215613b6a57613b69613abf565b5b5f613b7785828601613b0d565b9250506020613b8885828601613b40565b9150509250929050565b5f8115159050919050565b613ba681613b92565b82525050565b5f602082019050613bbf5f830184613b9d565b92915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f840112613be657613be5613bc5565b5b8235905067ffffffffffffffff811115613c0357613c02613bc9565b5b602083019150836020820283011115613c1f57613c1e613bcd565b5b9250929050565b613c2f81613b92565b8114613c39575f80fd5b50565b5f81359050613c4a81613c26565b92915050565b5f805f60408486031215613c6757613c66613abf565b5b5f84013567ffffffffffffffff811115613c8457613c83613ac3565b5b613c9086828701613bd1565b93509350506020613ca386828701613c3c565b9150509250925092565b5f819050919050565b5f613cd0613ccb613cc684613ac7565b613cad565b613ac7565b9050919050565b5f613ce182613cb6565b9050919050565b5f613cf282613cd7565b9050919050565b613d0281613ce8565b82525050565b5f602082019050613d1b5f830184613cf9565b92915050565b613d2a81613b21565b82525050565b5f602082019050613d435f830184613d21565b92915050565b5f60208284031215613d5e57613d5d613abf565b5b5f613d6b84828501613b0d565b91505092915050565b5f805f60608486031215613d8b57613d8a613abf565b5b5f613d9886828701613b0d565b9350506020613da986828701613b0d565b9250506040613dba86828701613b40565b9150509250925092565b613dcd81613ae6565b82525050565b5f602082019050613de65f830184613dc4565b92915050565b5f60ff82169050919050565b613e0181613dec565b82525050565b5f602082019050613e1a5f830184613df8565b92915050565b5f60208284031215613e3557613e34613abf565b5b5f613e4284828501613b40565b91505092915050565b5f8060408385031215613e6157613e60613abf565b5b5f613e6e85828601613b0d565b9250506020613e7f85828601613c3c565b9150509250929050565b5f8083601f840112613e9e57613e9d613bc5565b5b8235905067ffffffffffffffff811115613ebb57613eba613bc9565b5b602083019150836020820283011115613ed757613ed6613bcd565b5b9250929050565b5f805f8060408587031215613ef657613ef5613abf565b5b5f85013567ffffffffffffffff811115613f1357613f12613ac3565b5b613f1f87828801613bd1565b9450945050602085013567ffffffffffffffff811115613f4257613f41613ac3565b5b613f4e87828801613e89565b925092505092959194509250565b5f8060408385031215613f7257613f71613abf565b5b5f613f7f85828601613b40565b9250506020613f9085828601613b40565b9150509250929050565b5f8060408385031215613fb057613faf613abf565b5b5f613fbd85828601613b0d565b9250506020613fce85828601613b0d565b9150509250929050565b5f60208284031215613fed57613fec613abf565b5b5f613ffa84828501613c3c565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061404757607f821691505b60208210810361405a57614059614003565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f45524332303a20416464726573732030000000000000000000000000000000005f82015250565b5f6140c1601083613a39565b91506140cc8261408d565b602082019050919050565b5f6020820190508181035f8301526140ee816140b5565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61412c82613b21565b915061413783613b21565b925082820190508082111561414f5761414e6140f5565b5b92915050565b7f54726164696e6720616c7265616479206163746976652e0000000000000000005f82015250565b5f614189601783613a39565b915061419482614155565b602082019050919050565b5f6020820190508181035f8301526141b68161417d565b9050919050565b7f45524332303a204d757374206b656570206665657320617420313525206f72205f8201527f6c65737300000000000000000000000000000000000000000000000000000000602082015250565b5f614217602483613a39565b9150614222826141bd565b604082019050919050565b5f6020820190508181035f8301526142448161420b565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6142a5602583613a39565b91506142b08261424b565b604082019050919050565b5f6020820190508181035f8301526142d281614299565b9050919050565b5f6142e382613b21565b91506142ee83613b21565b92508282026142fc81613b21565b91508282048414831517614313576143126140f5565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61435182613b21565b915061435c83613b21565b92508261436c5761436b61431a565b5b828204905092915050565b7f45524332303a205377617020616d6f756e742063616e6e6f74206265206c6f775f8201527f6572207468616e20302e3030312520746f74616c20737570706c792e00000000602082015250565b5f6143d1603c83613a39565b91506143dc82614377565b604082019050919050565b5f6020820190508181035f8301526143fe816143c5565b9050919050565b7f526563697069656e747320616e6420616d6f756e7473206c656e677468206d695f8201527f736d617463680000000000000000000000000000000000000000000000000000602082015250565b5f61445f602683613a39565b915061446a82614405565b604082019050919050565b5f6020820190508181035f83015261448c81614453565b9050919050565b7f496e73756666696369656e7420616c6c6f77616e6365000000000000000000005f82015250565b5f6144c7601683613a39565b91506144d282614493565b602082019050919050565b5f6020820190508181035f8301526144f4816144bb565b9050919050565b7f5472616e73666572206661696c656400000000000000000000000000000000005f82015250565b5f61452f600f83613a39565b915061453a826144fb565b602082019050919050565b5f6020820190508181035f83015261455c81614523565b9050919050565b7f45524332303a2043616e6e6f7420736574206d617854786e206c6f77657220745f8201527f68616e20302e3525000000000000000000000000000000000000000000000000602082015250565b5f6145bd602883613a39565b91506145c882614563565b604082019050919050565b5f6020820190508181035f8301526145ea816145b1565b9050919050565b7f45524332303a2043616e6e6f7420736574206d617857616c6c6574206c6f77655f8201527f72207468616e20302e3525000000000000000000000000000000000000000000602082015250565b5f61464b602b83613a39565b9150614656826145f1565b604082019050919050565b5f6020820190508181035f8301526146788161463f565b9050919050565b5f81905092915050565b50565b5f6146975f8361467f565b91506146a282614689565b5f82019050919050565b5f6146b68261468c565b9150819050919050565b5f815190506146ce81613b2a565b92915050565b5f602082840312156146e9576146e8613abf565b5b5f6146f6848285016146c0565b91505092915050565b7f4e6f20746f6b656e7300000000000000000000000000000000000000000000005f82015250565b5f614733600983613a39565b915061473e826146ff565b602082019050919050565b5f6020820190508181035f83015261476081614727565b9050919050565b5f60408201905061477a5f830185613dc4565b6147876020830184613d21565b9392505050565b5f8151905061479c81613c26565b92915050565b5f602082840312156147b7576147b6613abf565b5b5f6147c48482850161478e565b91505092915050565b5f815190506147db81613af7565b92915050565b5f602082840312156147f6576147f5613abf565b5b5f614803848285016147cd565b91505092915050565b5f60408201905061481f5f830185613dc4565b61482c6020830184613dc4565b9392505050565b5f819050919050565b5f61485661485161484c84614833565b613cad565b613b21565b9050919050565b6148668161483c565b82525050565b5f60c08201905061487f5f830189613dc4565b61488c6020830188613d21565b614899604083018761485d565b6148a6606083018661485d565b6148b36080830185613dc4565b6148c060a0830184613d21565b979650505050505050565b5f805f606084860312156148e2576148e1613abf565b5b5f6148ef868287016146c0565b9350506020614900868287016146c0565b9250506040614911868287016146c0565b9150509250925092565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f614975602683613a39565b91506149808261491b565b604082019050919050565b5f6020820190508181035f8301526149a281614969565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f614a03602483613a39565b9150614a0e826149a9565b604082019050919050565b5f6020820190508181035f830152614a30816149f7565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f614a91602283613a39565b9150614a9c82614a37565b604082019050919050565b5f6020820190508181035f830152614abe81614a85565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f614af9602083613a39565b9150614b0482614ac5565b602082019050919050565b5f6020820190508181035f830152614b2681614aed565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f614b61601d83613a39565b9150614b6c82614b2d565b602082019050919050565b5f6020820190508181035f830152614b8e81614b55565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f614bef602583613a39565b9150614bfa82614b95565b604082019050919050565b5f6020820190508181035f830152614c1c81614be3565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f614c7d602383613a39565b9150614c8882614c23565b604082019050919050565b5f6020820190508181035f830152614caa81614c71565b9050919050565b5f614cbb82613b21565b9150614cc683613b21565b9250828203905081811115614cde57614cdd6140f5565b5b92915050565b7f5f7472616e736665723a205472616e736665722044656c6179206163746976655f8201527f2e2054727920616761696e206c617465722e0000000000000000000000000000602082015250565b5f614d3e603283613a39565b9150614d4982614ce4565b604082019050919050565b5f6020820190508181035f830152614d6b81614d32565b9050919050565b7f45524332303a2054726164696e67206973206e6f74206163746976652e0000005f82015250565b5f614da6601d83613a39565b9150614db182614d72565b602082019050919050565b5f6020820190508181035f830152614dd381614d9a565b9050919050565b7f45524332303a20427579207472616e7366657220616d6f756e742065786365655f8201527f647320746865206d61785472616e73616374696f6e2e00000000000000000000602082015250565b5f614e34603683613a39565b9150614e3f82614dda565b604082019050919050565b5f6020820190508181035f830152614e6181614e28565b9050919050565b7f45524332303a204d61782077616c6c65742065786365656465640000000000005f82015250565b5f614e9c601a83613a39565b9150614ea782614e68565b602082019050919050565b5f6020820190508181035f830152614ec981614e90565b9050919050565b7f45524332303a2053656c6c207472616e7366657220616d6f756e7420657863655f8201527f65647320746865206d61785472616e73616374696f6e2e000000000000000000602082015250565b5f614f2a603783613a39565b9150614f3582614ed0565b604082019050919050565b5f6020820190508181035f830152614f5781614f1e565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f206164647265735f8201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b5f614fb8602183613a39565b9150614fc382614f5e565b604082019050919050565b5f6020820190508181035f830152614fe581614fac565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e5f8201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b5f615046602283613a39565b915061505182614fec565b604082019050919050565b5f6020820190508181035f8301526150738161503a565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f6150d4602683613a39565b91506150df8261507a565b604082019050919050565b5f6020820190508181035f830152615101816150c8565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61516781613ae6565b82525050565b5f615178838361515e565b60208301905092915050565b5f602082019050919050565b5f61519a82615135565b6151a4818561513f565b93506151af8361514f565b805f5b838110156151df5781516151c6888261516d565b97506151d183615184565b9250506001810190506151b2565b5085935050505092915050565b5f60a0820190506151ff5f830188613d21565b61520c602083018761485d565b818103604083015261521e8186615190565b905061522d6060830185613dc4565b61523a6080830184613d21565b969550505050505056fea2646970667358221220e7c4faf11025830dcb4666d744cc3c073e949877409789039219ed9eef122e2464736f6c63430008190033

Deployed Bytecode Sourcemap

35433:15033:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10168:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12669:242;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41827:296;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35588:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11297:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42798:178;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13491:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35719:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40786:298;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11139:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14195:270;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38230:81;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35683:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35646:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42984:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49173:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35813:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11468:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3548:103;;;;;;;;;;;;;:::i;:::-;;41092:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39176:174;;;;;;;;;;;;;:::i;:::-;;2907:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40584:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10387:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39358:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14968:505;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49448:223;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11851:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39595:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49819:644;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35781:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41646:173;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39872:504;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35874:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36314:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42131:468;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41318:320;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36060:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40384:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12148:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39496:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35941:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38319:849;;;;;;;;;;;;;:::i;:::-;;49679:98;;;;;;;;;;;;;:::i;:::-;;3806:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42607:183;;;;;;;;;;;;;:::i;:::-;;35910:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10168:100;10222:13;10255:5;10248:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10168:100;:::o;12669:242::-;12788:4;12810:13;12826:12;:10;:12::i;:::-;12810:28;;12849:32;12858:5;12865:7;12874:6;12849:8;:32::i;:::-;12899:4;12892:11;;;12669:242;;;;:::o;41827:296::-;2793:13;:11;:13::i;:::-;41953:9:::1;41948:168;41972:8;;:15;;41968:1;:19;41948:168;;;42044:5;42009:19;:32;42029:8;;42038:1;42029:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;42009:32;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;42085:8;;42094:1;42085:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;42069:35;;;42098:5;42069:35;;;;;;:::i;:::-;;;;;;;;41989:3;;;;;;;41948:168;;;;41827:296:::0;;;:::o;35588:51::-;;;:::o;11297:108::-;11358:7;11385:12;;11378:19;;11297:108;:::o;42798:178::-;42901:4;42930:29;:38;42960:7;42930:38;;;;;;;;;;;;;;;;;;;;;;;;;42923:45;;42798:178;;;:::o;13491:295::-;13622:4;13639:15;13657:12;:10;:12::i;:::-;13639:30;;13680:38;13696:4;13702:7;13711:6;13680:15;:38::i;:::-;13729:27;13739:4;13745:2;13749:6;13729:9;:27::i;:::-;13774:4;13767:11;;;13491:295;;;;;:::o;35719:53::-;35765:6;35719:53;:::o;40786:298::-;2793:13;:11;:13::i;:::-;40901:1:::1;40874:29;;:15;:29;;::::0;40866:58:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;40935:17;40955:14;;;;;;;;;;;40935:34;;40997:15;40980:14;;:32;;;;;;;;;;;;;;;;;;41066:9;41028:48;;41050:14;;;;;;;;;;;41028:48;;;;;;;;;;;;40855:229;40786:298:::0;:::o;11139:93::-;11197:5;11222:2;11215:9;;11139:93;:::o;14195:270::-;14310:4;14332:13;14348:12;:10;:12::i;:::-;14332:28;;14371:64;14380:5;14387:7;14424:10;14396:25;14406:5;14413:7;14396:9;:25::i;:::-;:38;;;;:::i;:::-;14371:8;:64::i;:::-;14453:4;14446:11;;;14195:270;;;;:::o;38230:81::-;38278:25;38284:10;38296:6;38278:5;:25::i;:::-;38230:81;:::o;35683:29::-;;;;;;;;;;;;;:::o;35646:28::-;;;;;;;;;;;;;:::o;42984:126::-;43050:4;43074:19;:28;43094:7;43074:28;;;;;;;;;;;;;;;;;;;;;;;;;43067:35;;42984:126;;;:::o;49173:93::-;49222:7;49249:9;;;;;;;;;;;49242:16;;49173:93;:::o;35813:23::-;;;;;;;;;;;;;:::o;11468:177::-;11587:7;11619:9;:18;11629:7;11619:18;;;;;;;;;;;;;;;;11612:25;;11468:177;;;:::o;3548:103::-;2793:13;:11;:13::i;:::-;3613:30:::1;3640:1;3613:18;:30::i;:::-;3548:103::o:0;41092:218::-;2793:13;:11;:13::i;:::-;41248:5:::1;41207:29;:38;41237:7;41207:38;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;41287:7;41269:33;;;41296:5;41269:33;;;;;;:::i;:::-;;;;;;;;41092:218:::0;;:::o;39176:174::-;49129:16;:14;:16::i;:::-;39241:13:::1;;;;;;;;;;;39240:14;39232:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;39309:4;39293:13;;:20;;;;;;;;;;;;;;;;;;39338:4;39324:11;;:18;;;;;;;;;;;;;;;;;;39176:174::o:0;2907:87::-;2953:7;2980:6;;;;;;;;;;;2973:13;;2907:87;:::o;40584:194::-;2793:13;:11;:13::i;:::-;40681:4:::1;40664:13;:21;;40656:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;40757:13;40737:17;:33;;;;40584:194:::0;:::o;10387:104::-;10443:13;10476:7;10469:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10387:104;:::o;39358:130::-;2793:13;:11;:13::i;:::-;39463:17:::1;39444:16;:36;;;;39358:130:::0;:::o;14968:505::-;15088:4;15110:13;15126:12;:10;:12::i;:::-;15110:28;;15149:24;15176:25;15186:5;15193:7;15176:9;:25::i;:::-;15149:52;;15254:15;15234:16;:35;;15212:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;15370:60;15379:5;15386:7;15414:15;15395:16;:34;15370:8;:60::i;:::-;15461:4;15454:11;;;;14968:505;;;;:::o;49448:223::-;2793:13;:11;:13::i;:::-;49529:19:::1;49551:9;;;;;;;;;;;49529:31;;49583:12;49571:9;;:24;;;;;;;;;;;;;;;;;;49650:12;49611:52;;49637:11;49611:52;;;;;;;;;;;;49518:153;49448:223:::0;:::o;11851:234::-;11966:4;11988:13;12004:12;:10;:12::i;:::-;11988:28;;12027;12037:5;12044:2;12048:6;12027:9;:28::i;:::-;12073:4;12066:11;;;11851:234;;;;:::o;39595:269::-;2793:13;:11;:13::i;:::-;39724:6:::1;39719:1;39703:13;:11;:13::i;:::-;:17;;;;:::i;:::-;39702:28;;;;:::i;:::-;39692:6;:38;;39670:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;39850:6;39829:18;:27;;;;39595:269:::0;:::o;49819:644::-;2793:13;:11;:13::i;:::-;49980:7:::1;;:14;;49959:10;;:17;;:35;49951:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;50050:19;50089:9:::0;50084:97:::1;50108:7;;:14;;50104:1;:18;50084:97;;;50159:7;;50167:1;50159:10;;;;;;;:::i;:::-;;;;;;;;50144:25;;;;;:::i;:::-;;;50124:3;;;;;;;50084:97;;;;50241:11;50201:36;50211:10;50231:4;50201:9;:36::i;:::-;:51;;50193:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;50297:9;50292:154;50316:10;;:17;;50312:1;:21;50292:154;;;50363:51;50376:10;50388;;50399:1;50388:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;50403:7;;50411:1;50403:10;;;;;;;:::i;:::-;;;;;;;;50363:12;:51::i;:::-;50355:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;50335:3;;;;;;;50292:154;;;;49940:523;49819:644:::0;;;;:::o;35781:25::-;;;;;;;;;;;;;:::o;41646:173::-;2793:13;:11;:13::i;:::-;41759:5:::1;41728:19;:28;41748:7;41728:28;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;41796:7;41780:31;;;41805:5;41780:31;;;;;;:::i;:::-;;;;;;;;41646:173:::0;;:::o;39872:504::-;2793:13;:11;:13::i;:::-;40073:4:::1;40068:1;40052:13;:11;:13::i;:::-;:17;;;;:::i;:::-;40051:26;;;;:::i;:::-;40031:15;:47;;40009:137;;;;;;;;;;;;:::i;:::-;;;;;;;;;40216:4;40211:1;40195:13;:11;:13::i;:::-;:17;;;;:::i;:::-;40194:26;;;;:::i;:::-;40179:10;:42;;40157:135;;;;;;;;;;;;:::i;:::-;;;;;;;;;40320:15;40303:14;:32;;;;40358:10;40346:9;:22;;;;39872:504:::0;;:::o;35874:29::-;;;;:::o;36314:39::-;;;;;;;;;;;;;:::o;42131:468::-;2793:13;:11;:13::i;:::-;42201:12:::1;42243:1:::0;42228:17:::1;;:3;:17;;::::0;42224:368:::1;;42282:10;42274:24;;42324:21;42274:90;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42260:104;;;;;42224:368;;;42442:1;42410:3;42403:21;;;42433:4;42403:36;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:40;42395:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;42472:14;42496:3;42489:21;;;42519:4;42489:36;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42472:53;;42547:3;42540:20;;;42561:10;42573:6;42540:40;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;42380:212;42224:368;42190:409;42131:468:::0;:::o;41318:320::-;2793:13;:11;:13::i;:::-;41456:9:::1;41451:180;41475:8;;:15;;41471:1;:19;41451:180;;;41557:5;41512:29;:42;41542:8;;41551:1;41542:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;41512:42;;;;;;;;;;;;;;;;:50;;;;;;;;;;;;;;;;;;41600:8;;41609:1;41600:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;41582:37;;;41613:5;41582:37;;;;;;:::i;:::-;;;;;;;;41492:3;;;;;;;41451:180;;;;41318:320:::0;;;:::o;36060:49::-;;;;:::o;40384:192::-;2793:13;:11;:13::i;:::-;40480:4:::1;40463:13;:21;;40455:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;40555:13;40536:16;:32;;;;40384:192:::0;:::o;12148:201::-;12282:7;12314:11;:18;12326:5;12314:18;;;;;;;;;;;;;;;:27;12333:7;12314:27;;;;;;;;;;;;;;;;12307:34;;12148:201;;;;:::o;39496:91::-;2793:13;:11;:13::i;:::-;39574:5:::1;39560:11;;:19;;;;;;;;;;;;;;;;;;39496:91:::0;:::o;35941:33::-;;;;:::o;38319:849::-;2793:13;:11;:13::i;:::-;38380::::1;;;;;;;;;;;38379:14;38371:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;38468:15;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38450:55;;;38528:4;38548:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38450:131;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38434:13;;:147;;;;;;;;;;;;;;;;;;38592:66;38609:4;38624:13;;;;;;;;;;;38640:17;38592:8;:66::i;:::-;38676:13;;;;;;;;;;;38669:29;;;38721:15;38752:17;38669:111;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;38793:58;38830:13;;;;;;;;;;;38846:4;38793:28;:58::i;:::-;38862:55;38896:13;;;;;;;;;;;38912:4;38862:25;:55::i;:::-;38930:15;:31;;;38969:21;39014:4;39034:24;39052:4;39034:9;:24::i;:::-;39073:1;39089::::0;39105:14:::1;;;;;;;;;;;39134:15;38930:230;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;38319:849::o:0;49679:98::-;2793:13;:11;:13::i;:::-;49764:5:::1;49741:20;;:28;;;;;;;;;;;;;;;;;;49679:98::o:0;3806:238::-;2793:13;:11;:13::i;:::-;3929:1:::1;3909:22;;:8;:22;;::::0;3887:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;4008:28;4027:8;4008:18;:28::i;:::-;3806:238:::0;:::o;42607:183::-;2793:13;:11;:13::i;:::-;42663:12:::1;42708:10;42700:24;;42732:21;42700:82;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42686:96;;;;;42652:138;42607:183::o:0;35910:24::-;;;;:::o;1452:98::-;1505:7;1532:10;1525:17;;1452:98;:::o;19101:380::-;19254:1;19237:19;;:5;:19;;;19229:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19335:1;19316:21;;:7;:21;;;19308:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19419:6;19389:11;:18;19401:5;19389:18;;;;;;;;;;;;;;;:27;19408:7;19389:27;;;;;;;;;;;;;;;:36;;;;19457:7;19441:32;;19450:5;19441:32;;;19466:6;19441:32;;;;;;:::i;:::-;;;;;;;;19101:380;;;:::o;3072:132::-;3147:12;:10;:12::i;:::-;3136:23;;:7;:5;:7::i;:::-;:23;;;3128:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3072:132::o;19772:502::-;19907:24;19934:25;19944:5;19951:7;19934:9;:25::i;:::-;19907:52;;19994:17;19974:16;:37;19970:297;;20074:6;20054:16;:26;;20028:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;20189:51;20198:5;20205:7;20233:6;20214:16;:25;20189:8;:51::i;:::-;19970:297;19896:378;19772:502;;;:::o;43316:4301::-;43464:1;43448:18;;:4;:18;;;43440:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43541:1;43527:16;;:2;:16;;;43519:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;43610:1;43600:6;:11;43596:93;;43628:28;43644:4;43650:2;43654:1;43628:15;:28::i;:::-;43671:7;;43596:93;43727:7;:5;:7::i;:::-;43719:15;;:4;:15;;;;:45;;;;;43757:7;:5;:7::i;:::-;43751:13;;:2;:13;;;;43719:45;:88;;;;;43782:19;:25;43802:4;43782:25;;;;;;;;;;;;;;;;;;;;;;;;;43781:26;43719:88;:121;;;;;43838:1;43824:16;;:2;:16;;;;43719:121;:155;;;;;35765:6;43857:17;;:2;:17;;;;43719:155;:182;;;;;43892:9;;;;;;;;;;;43891:10;43719:182;43701:2670;;;43934:20;;;;;;;;;;;43930:1125;;;44058:7;:5;:7::i;:::-;44050:15;;:4;:15;;;;:97;;;;;44140:7;:5;:7::i;:::-;44134:13;;:2;:13;;;;44050:97;:154;;;;;44188:15;44172:32;;:4;:32;;;;44050:154;:250;;;;;44284:15;44270:30;;:2;:30;;;;44050:250;:301;;;;;44326:19;:25;44346:4;44326:25;;;;;;;;;;;;;;;;;;;;;;;;;44325:26;44050:301;:390;;;;;44417:19;:23;44437:2;44417:23;;;;;;;;;;;;;;;;;;;;;;;;;44416:24;44050:390;44024:1016;;;44564:26;:30;44591:2;44564:30;;;;;;;;;;;;;;;;;;;;;;;;;44560:294;;;44718:2;44703:12;:17;;;;:::i;:::-;44661:28;:39;44690:9;44661:39;;;;;;;;;;;;;;;;:59;44623:207;;;;;;;;;;;;:::i;:::-;;;;;;;;;44560:294;45008:12;44966:28;:39;44995:9;44966:39;;;;;;;;;;;;;;;:54;;;;44024:1016;43930:1125;45076:13;;;;;;;;;;;45071:210;;45140:19;:25;45160:4;45140:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;45169:19;:23;45189:2;45169:23;;;;;;;;;;;;;;;;;;;;;;;;;45140:52;45110:155;;;;;;;;;;;;:::i;:::-;;;;;;;;;45071:210;45343:26;:32;45370:4;45343:32;;;;;;;;;;;;;;;;;;;;;;;;;:87;;;;;45397:29;:33;45427:2;45397:33;;;;;;;;;;;;;;;;;;;;;;;;;45396:34;45343:87;45321:1039;;;45505:14;;45495:6;:24;;45465:152;;;;;;;;;;;;:::i;:::-;;;;;;;;;45692:9;;45675:13;45685:2;45675:9;:13::i;:::-;45666:6;:22;;;;:::i;:::-;:35;;45636:135;;;;;;;;;;;;:::i;:::-;;;;;;;;;45321:1039;;;45853:26;:30;45880:2;45853:30;;;;;;;;;;;;;;;;;;;;;;;;;:87;;;;;45905:29;:35;45935:4;45905:35;;;;;;;;;;;;;;;;;;;;;;;;;45904:36;45853:87;45831:529;;;46015:14;;46005:6;:24;;45975:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;45831:529;;;46155:29;:33;46185:2;46155:33;;;;;;;;;;;;;;;;;;;;;;;;;46150:210;;46265:9;;46248:13;46258:2;46248:9;:13::i;:::-;46239:6;:22;;;;:::i;:::-;:35;;46209:135;;;;;;;;;;;;:::i;:::-;;;;;;;;;46150:210;45831:529;45321:1039;43701:2670;46383:28;46414:24;46432:4;46414:9;:24::i;:::-;46383:55;;46451:12;46490:18;;46466:20;:42;;46451:57;;46539:7;:35;;;;;46563:11;;;;;;;;;;;46539:35;:62;;;;;46592:9;;;;;;;;;;;46591:10;46539:62;:109;;;;;46618:26;:30;46645:2;46618:30;;;;;;;;;;;;;;;;;;;;;;;;;46539:109;:152;;;;;46666:19;:25;46686:4;46666:25;;;;;;;;;;;;;;;;;;;;;;;;;46665:26;46539:152;:193;;;;;46709:19;:23;46729:2;46709:23;;;;;;;;;;;;;;;;;;;;;;;;;46708:24;46539:193;:243;;;;;46750:26;:32;46777:4;46750:32;;;;;;;;;;;;;;;;;;;;;;;;;46749:33;46539:243;46521:378;;;46821:4;46809:9;;:16;;;;;;;;;;;;;;;;;;46842:11;:9;:11::i;:::-;46882:5;46870:9;;:17;;;;;;;;;;;;;;;;;;46521:378;46911:12;46927:9;;;;;;;;;;;46926:10;46911:25;;46953:19;:25;46973:4;46953:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;46982:19;:23;47002:2;46982:23;;;;;;;;;;;;;;;;;;;;;;;;;46953:52;46949:100;;;47032:5;47022:15;;46949:100;47061:12;47094:7;47090:474;;;47146:26;:30;47173:2;47146:30;;;;;;;;;;;;;;;;;;;;;;;;;47142:273;;;47224:17;;47204;47215:5;47204:6;:10;;:17;;;;:::i;:::-;:37;;;;:::i;:::-;47197:44;;47142:273;;;47303:26;:32;47330:4;47303:32;;;;;;;;;;;;;;;;;;;;;;;;;47299:116;;;47383:16;;47363:17;47374:5;47363:6;:10;;:17;;;;:::i;:::-;:36;;;;:::i;:::-;47356:43;;47299:116;47142:273;47442:1;47435:4;:8;47431:91;;;47464:42;47480:4;47494;47501;47464:15;:42::i;:::-;47431:91;47548:4;47538:14;;;;;:::i;:::-;;;47090:474;47576:33;47592:4;47598:2;47602:6;47576:15;:33::i;:::-;43429:4188;;;;43316:4301;;;;:::o;17988:675::-;18091:1;18072:21;;:7;:21;;;18064:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18144:49;18165:7;18182:1;18186:6;18144:20;:49::i;:::-;18206:22;18231:9;:18;18241:7;18231:18;;;;;;;;;;;;;;;;18206:43;;18286:6;18268:14;:24;;18260:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;18405:6;18388:14;:23;18367:9;:18;18377:7;18367:18;;;;;;;;;;;;;;;:44;;;;18522:6;18506:12;;:22;;;;;;;;;;;18583:1;18557:37;;18566:7;18557:37;;;18587:6;18557:37;;;;;;:::i;:::-;;;;;;;;18607:48;18627:7;18644:1;18648:6;18607:19;:48::i;:::-;18053:610;17988:675;;:::o;4204:191::-;4278:16;4297:6;;;;;;;;;;;4278:25;;4323:8;4314:6;;:17;;;;;;;;;;;;;;;;;;4378:8;4347:40;;4368:8;4347:40;;;;;;;;;;;;4267:128;4204:191;:::o;49274:166::-;49351:12;:10;:12::i;:::-;49337:26;;:10;:8;:10::i;:::-;:26;;;49333:100;;49408:12;:10;:12::i;:::-;49387:34;;;;;;;;;;;:::i;:::-;;;;;;;;49333:100;49274:166::o;43118:190::-;43237:5;43202:26;:32;43229:4;43202:32;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;43294:5;43260:40;;43288:4;43260:40;;;;;;;;;;;;43118:190;;:::o;15943:877::-;16090:1;16074:18;;:4;:18;;;16066:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16167:1;16153:16;;:2;:16;;;16145:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;16222:38;16243:4;16249:2;16253:6;16222:20;:38::i;:::-;16273:19;16295:9;:15;16305:4;16295:15;;;;;;;;;;;;;;;;16273:37;;16358:6;16343:11;:21;;16321:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;16498:6;16484:11;:20;16466:9;:15;16476:4;16466:15;;;;;;;;;;;;;;;:38;;;;16701:6;16684:9;:13;16694:2;16684:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;16751:2;16736:26;;16745:4;16736:26;;;16755:6;16736:26;;;;;;:::i;:::-;;;;;;;;16775:37;16795:4;16801:2;16805:6;16775:19;:37::i;:::-;16055:765;15943:877;;;:::o;48515:571::-;48556:23;48582:24;48600:4;48582:9;:24::i;:::-;48556:50;;48617:12;48663:18;;48644:15;:37;48640:439;;48698:26;48727:16;;48698:45;;48760:37;48778:18;48760:17;:37::i;:::-;48814:18;48835:21;48814:42;;48873:23;48899:10;48873:36;;48948:14;;;;;;;;;;;48940:28;;48976:15;48940:88;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48926:102;;;;;48683:357;;;48640:439;;;49061:7;;;;48640:439;48545:541;;48515:571;:::o;25848:98::-;25906:7;25937:1;25933;:5;;;;:::i;:::-;25926:12;;25848:98;;;;:::o;20874:125::-;;;;:::o;21603:124::-;;;;:::o;47625:503::-;47693:21;47731:1;47717:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47693:40;;47762:4;47744;47749:1;47744:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;47788:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47778:4;47783:1;47778:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;47823:62;47840:4;47855:15;47873:11;47823:8;:62::i;:::-;47924:15;:66;;;48005:11;48031:1;48047:4;48074;48094:15;47924:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47682:446;47625:503;:::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:139::-;376:6;371:3;366;360:23;417:1;408:6;403:3;399:16;392:27;287:139;;;:::o;432:102::-;473:6;524:2;520:7;515:2;508:5;504:14;500:28;490:38;;432:102;;;:::o;540:377::-;628:3;656:39;689:5;656:39;:::i;:::-;711:71;775:6;770:3;711:71;:::i;:::-;704:78;;791:65;849:6;844:3;837:4;830:5;826:16;791:65;:::i;:::-;881:29;903:6;881:29;:::i;:::-;876:3;872:39;865:46;;632:285;540:377;;;;:::o;923:313::-;1036:4;1074:2;1063:9;1059:18;1051:26;;1123:9;1117:4;1113:20;1109:1;1098:9;1094:17;1087:47;1151:78;1224:4;1215:6;1151:78;:::i;:::-;1143:86;;923:313;;;;:::o;1323:117::-;1432:1;1429;1422:12;1446:117;1555:1;1552;1545:12;1569:126;1606:7;1646:42;1639:5;1635:54;1624:65;;1569:126;;;:::o;1701:96::-;1738:7;1767:24;1785:5;1767:24;:::i;:::-;1756:35;;1701:96;;;:::o;1803:122::-;1876:24;1894:5;1876:24;:::i;:::-;1869:5;1866:35;1856:63;;1915:1;1912;1905:12;1856:63;1803:122;:::o;1931:139::-;1977:5;2015:6;2002:20;1993:29;;2031:33;2058:5;2031:33;:::i;:::-;1931:139;;;;:::o;2076:77::-;2113:7;2142:5;2131:16;;2076:77;;;:::o;2159:122::-;2232:24;2250:5;2232:24;:::i;:::-;2225:5;2222:35;2212:63;;2271:1;2268;2261:12;2212:63;2159:122;:::o;2287:139::-;2333:5;2371:6;2358:20;2349:29;;2387:33;2414:5;2387:33;:::i;:::-;2287:139;;;;:::o;2432:474::-;2500:6;2508;2557:2;2545:9;2536:7;2532:23;2528:32;2525:119;;;2563:79;;:::i;:::-;2525:119;2683:1;2708:53;2753:7;2744:6;2733:9;2729:22;2708:53;:::i;:::-;2698:63;;2654:117;2810:2;2836:53;2881:7;2872:6;2861:9;2857:22;2836:53;:::i;:::-;2826:63;;2781:118;2432:474;;;;;:::o;2912:90::-;2946:7;2989:5;2982:13;2975:21;2964:32;;2912:90;;;:::o;3008:109::-;3089:21;3104:5;3089:21;:::i;:::-;3084:3;3077:34;3008:109;;:::o;3123:210::-;3210:4;3248:2;3237:9;3233:18;3225:26;;3261:65;3323:1;3312:9;3308:17;3299:6;3261:65;:::i;:::-;3123:210;;;;:::o;3339:117::-;3448:1;3445;3438:12;3462:117;3571:1;3568;3561:12;3585:117;3694:1;3691;3684:12;3725:568;3798:8;3808:6;3858:3;3851:4;3843:6;3839:17;3835:27;3825:122;;3866:79;;:::i;:::-;3825:122;3979:6;3966:20;3956:30;;4009:18;4001:6;3998:30;3995:117;;;4031:79;;:::i;:::-;3995:117;4145:4;4137:6;4133:17;4121:29;;4199:3;4191:4;4183:6;4179:17;4169:8;4165:32;4162:41;4159:128;;;4206:79;;:::i;:::-;4159:128;3725:568;;;;;:::o;4299:116::-;4369:21;4384:5;4369:21;:::i;:::-;4362:5;4359:32;4349:60;;4405:1;4402;4395:12;4349:60;4299:116;:::o;4421:133::-;4464:5;4502:6;4489:20;4480:29;;4518:30;4542:5;4518:30;:::i;:::-;4421:133;;;;:::o;4560:698::-;4652:6;4660;4668;4717:2;4705:9;4696:7;4692:23;4688:32;4685:119;;;4723:79;;:::i;:::-;4685:119;4871:1;4860:9;4856:17;4843:31;4901:18;4893:6;4890:30;4887:117;;;4923:79;;:::i;:::-;4887:117;5036:80;5108:7;5099:6;5088:9;5084:22;5036:80;:::i;:::-;5018:98;;;;4814:312;5165:2;5191:50;5233:7;5224:6;5213:9;5209:22;5191:50;:::i;:::-;5181:60;;5136:115;4560:698;;;;;:::o;5264:60::-;5292:3;5313:5;5306:12;;5264:60;;;:::o;5330:142::-;5380:9;5413:53;5431:34;5440:24;5458:5;5440:24;:::i;:::-;5431:34;:::i;:::-;5413:53;:::i;:::-;5400:66;;5330:142;;;:::o;5478:126::-;5528:9;5561:37;5592:5;5561:37;:::i;:::-;5548:50;;5478:126;;;:::o;5610:153::-;5687:9;5720:37;5751:5;5720:37;:::i;:::-;5707:50;;5610:153;;;:::o;5769:185::-;5883:64;5941:5;5883:64;:::i;:::-;5878:3;5871:77;5769:185;;:::o;5960:276::-;6080:4;6118:2;6107:9;6103:18;6095:26;;6131:98;6226:1;6215:9;6211:17;6202:6;6131:98;:::i;:::-;5960:276;;;;:::o;6242:118::-;6329:24;6347:5;6329:24;:::i;:::-;6324:3;6317:37;6242:118;;:::o;6366:222::-;6459:4;6497:2;6486:9;6482:18;6474:26;;6510:71;6578:1;6567:9;6563:17;6554:6;6510:71;:::i;:::-;6366:222;;;;:::o;6594:329::-;6653:6;6702:2;6690:9;6681:7;6677:23;6673:32;6670:119;;;6708:79;;:::i;:::-;6670:119;6828:1;6853:53;6898:7;6889:6;6878:9;6874:22;6853:53;:::i;:::-;6843:63;;6799:117;6594:329;;;;:::o;6929:619::-;7006:6;7014;7022;7071:2;7059:9;7050:7;7046:23;7042:32;7039:119;;;7077:79;;:::i;:::-;7039:119;7197:1;7222:53;7267:7;7258:6;7247:9;7243:22;7222:53;:::i;:::-;7212:63;;7168:117;7324:2;7350:53;7395:7;7386:6;7375:9;7371:22;7350:53;:::i;:::-;7340:63;;7295:118;7452:2;7478:53;7523:7;7514:6;7503:9;7499:22;7478:53;:::i;:::-;7468:63;;7423:118;6929:619;;;;;:::o;7554:118::-;7641:24;7659:5;7641:24;:::i;:::-;7636:3;7629:37;7554:118;;:::o;7678:222::-;7771:4;7809:2;7798:9;7794:18;7786:26;;7822:71;7890:1;7879:9;7875:17;7866:6;7822:71;:::i;:::-;7678:222;;;;:::o;7906:86::-;7941:7;7981:4;7974:5;7970:16;7959:27;;7906:86;;;:::o;7998:112::-;8081:22;8097:5;8081:22;:::i;:::-;8076:3;8069:35;7998:112;;:::o;8116:214::-;8205:4;8243:2;8232:9;8228:18;8220:26;;8256:67;8320:1;8309:9;8305:17;8296:6;8256:67;:::i;:::-;8116:214;;;;:::o;8336:329::-;8395:6;8444:2;8432:9;8423:7;8419:23;8415:32;8412:119;;;8450:79;;:::i;:::-;8412:119;8570:1;8595:53;8640:7;8631:6;8620:9;8616:22;8595:53;:::i;:::-;8585:63;;8541:117;8336:329;;;;:::o;8671:468::-;8736:6;8744;8793:2;8781:9;8772:7;8768:23;8764:32;8761:119;;;8799:79;;:::i;:::-;8761:119;8919:1;8944:53;8989:7;8980:6;8969:9;8965:22;8944:53;:::i;:::-;8934:63;;8890:117;9046:2;9072:50;9114:7;9105:6;9094:9;9090:22;9072:50;:::i;:::-;9062:60;;9017:115;8671:468;;;;;:::o;9162:568::-;9235:8;9245:6;9295:3;9288:4;9280:6;9276:17;9272:27;9262:122;;9303:79;;:::i;:::-;9262:122;9416:6;9403:20;9393:30;;9446:18;9438:6;9435:30;9432:117;;;9468:79;;:::i;:::-;9432:117;9582:4;9574:6;9570:17;9558:29;;9636:3;9628:4;9620:6;9616:17;9606:8;9602:32;9599:41;9596:128;;;9643:79;;:::i;:::-;9596:128;9162:568;;;;;:::o;9736:934::-;9858:6;9866;9874;9882;9931:2;9919:9;9910:7;9906:23;9902:32;9899:119;;;9937:79;;:::i;:::-;9899:119;10085:1;10074:9;10070:17;10057:31;10115:18;10107:6;10104:30;10101:117;;;10137:79;;:::i;:::-;10101:117;10250:80;10322:7;10313:6;10302:9;10298:22;10250:80;:::i;:::-;10232:98;;;;10028:312;10407:2;10396:9;10392:18;10379:32;10438:18;10430:6;10427:30;10424:117;;;10460:79;;:::i;:::-;10424:117;10573:80;10645:7;10636:6;10625:9;10621:22;10573:80;:::i;:::-;10555:98;;;;10350:313;9736:934;;;;;;;:::o;10676:474::-;10744:6;10752;10801:2;10789:9;10780:7;10776:23;10772:32;10769:119;;;10807:79;;:::i;:::-;10769:119;10927:1;10952:53;10997:7;10988:6;10977:9;10973:22;10952:53;:::i;:::-;10942:63;;10898:117;11054:2;11080:53;11125:7;11116:6;11105:9;11101:22;11080:53;:::i;:::-;11070:63;;11025:118;10676:474;;;;;:::o;11156:::-;11224:6;11232;11281:2;11269:9;11260:7;11256:23;11252:32;11249:119;;;11287:79;;:::i;:::-;11249:119;11407:1;11432:53;11477:7;11468:6;11457:9;11453:22;11432:53;:::i;:::-;11422:63;;11378:117;11534:2;11560:53;11605:7;11596:6;11585:9;11581:22;11560:53;:::i;:::-;11550:63;;11505:118;11156:474;;;;;:::o;11636:323::-;11692:6;11741:2;11729:9;11720:7;11716:23;11712:32;11709:119;;;11747:79;;:::i;:::-;11709:119;11867:1;11892:50;11934:7;11925:6;11914:9;11910:22;11892:50;:::i;:::-;11882:60;;11838:114;11636:323;;;;:::o;11965:180::-;12013:77;12010:1;12003:88;12110:4;12107:1;12100:15;12134:4;12131:1;12124:15;12151:320;12195:6;12232:1;12226:4;12222:12;12212:22;;12279:1;12273:4;12269:12;12300:18;12290:81;;12356:4;12348:6;12344:17;12334:27;;12290:81;12418:2;12410:6;12407:14;12387:18;12384:38;12381:84;;12437:18;;:::i;:::-;12381:84;12202:269;12151:320;;;:::o;12477:180::-;12525:77;12522:1;12515:88;12622:4;12619:1;12612:15;12646:4;12643:1;12636:15;12663:166;12803:18;12799:1;12791:6;12787:14;12780:42;12663:166;:::o;12835:366::-;12977:3;12998:67;13062:2;13057:3;12998:67;:::i;:::-;12991:74;;13074:93;13163:3;13074:93;:::i;:::-;13192:2;13187:3;13183:12;13176:19;;12835:366;;;:::o;13207:419::-;13373:4;13411:2;13400:9;13396:18;13388:26;;13460:9;13454:4;13450:20;13446:1;13435:9;13431:17;13424:47;13488:131;13614:4;13488:131;:::i;:::-;13480:139;;13207:419;;;:::o;13632:180::-;13680:77;13677:1;13670:88;13777:4;13774:1;13767:15;13801:4;13798:1;13791:15;13818:191;13858:3;13877:20;13895:1;13877:20;:::i;:::-;13872:25;;13911:20;13929:1;13911:20;:::i;:::-;13906:25;;13954:1;13951;13947:9;13940:16;;13975:3;13972:1;13969:10;13966:36;;;13982:18;;:::i;:::-;13966:36;13818:191;;;;:::o;14015:173::-;14155:25;14151:1;14143:6;14139:14;14132:49;14015:173;:::o;14194:366::-;14336:3;14357:67;14421:2;14416:3;14357:67;:::i;:::-;14350:74;;14433:93;14522:3;14433:93;:::i;:::-;14551:2;14546:3;14542:12;14535:19;;14194:366;;;:::o;14566:419::-;14732:4;14770:2;14759:9;14755:18;14747:26;;14819:9;14813:4;14809:20;14805:1;14794:9;14790:17;14783:47;14847:131;14973:4;14847:131;:::i;:::-;14839:139;;14566:419;;;:::o;14991:223::-;15131:34;15127:1;15119:6;15115:14;15108:58;15200:6;15195:2;15187:6;15183:15;15176:31;14991:223;:::o;15220:366::-;15362:3;15383:67;15447:2;15442:3;15383:67;:::i;:::-;15376:74;;15459:93;15548:3;15459:93;:::i;:::-;15577:2;15572:3;15568:12;15561:19;;15220:366;;;:::o;15592:419::-;15758:4;15796:2;15785:9;15781:18;15773:26;;15845:9;15839:4;15835:20;15831:1;15820:9;15816:17;15809:47;15873:131;15999:4;15873:131;:::i;:::-;15865:139;;15592:419;;;:::o;16017:224::-;16157:34;16153:1;16145:6;16141:14;16134:58;16226:7;16221:2;16213:6;16209:15;16202:32;16017:224;:::o;16247:366::-;16389:3;16410:67;16474:2;16469:3;16410:67;:::i;:::-;16403:74;;16486:93;16575:3;16486:93;:::i;:::-;16604:2;16599:3;16595:12;16588:19;;16247:366;;;:::o;16619:419::-;16785:4;16823:2;16812:9;16808:18;16800:26;;16872:9;16866:4;16862:20;16858:1;16847:9;16843:17;16836:47;16900:131;17026:4;16900:131;:::i;:::-;16892:139;;16619:419;;;:::o;17044:410::-;17084:7;17107:20;17125:1;17107:20;:::i;:::-;17102:25;;17141:20;17159:1;17141:20;:::i;:::-;17136:25;;17196:1;17193;17189:9;17218:30;17236:11;17218:30;:::i;:::-;17207:41;;17397:1;17388:7;17384:15;17381:1;17378:22;17358:1;17351:9;17331:83;17308:139;;17427:18;;:::i;:::-;17308:139;17092:362;17044:410;;;;:::o;17460:180::-;17508:77;17505:1;17498:88;17605:4;17602:1;17595:15;17629:4;17626:1;17619:15;17646:185;17686:1;17703:20;17721:1;17703:20;:::i;:::-;17698:25;;17737:20;17755:1;17737:20;:::i;:::-;17732:25;;17776:1;17766:35;;17781:18;;:::i;:::-;17766:35;17823:1;17820;17816:9;17811:14;;17646:185;;;;:::o;17837:247::-;17977:34;17973:1;17965:6;17961:14;17954:58;18046:30;18041:2;18033:6;18029:15;18022:55;17837:247;:::o;18090:366::-;18232:3;18253:67;18317:2;18312:3;18253:67;:::i;:::-;18246:74;;18329:93;18418:3;18329:93;:::i;:::-;18447:2;18442:3;18438:12;18431:19;;18090:366;;;:::o;18462:419::-;18628:4;18666:2;18655:9;18651:18;18643:26;;18715:9;18709:4;18705:20;18701:1;18690:9;18686:17;18679:47;18743:131;18869:4;18743:131;:::i;:::-;18735:139;;18462:419;;;:::o;18887:225::-;19027:34;19023:1;19015:6;19011:14;19004:58;19096:8;19091:2;19083:6;19079:15;19072:33;18887:225;:::o;19118:366::-;19260:3;19281:67;19345:2;19340:3;19281:67;:::i;:::-;19274:74;;19357:93;19446:3;19357:93;:::i;:::-;19475:2;19470:3;19466:12;19459:19;;19118:366;;;:::o;19490:419::-;19656:4;19694:2;19683:9;19679:18;19671:26;;19743:9;19737:4;19733:20;19729:1;19718:9;19714:17;19707:47;19771:131;19897:4;19771:131;:::i;:::-;19763:139;;19490:419;;;:::o;19915:172::-;20055:24;20051:1;20043:6;20039:14;20032:48;19915:172;:::o;20093:366::-;20235:3;20256:67;20320:2;20315:3;20256:67;:::i;:::-;20249:74;;20332:93;20421:3;20332:93;:::i;:::-;20450:2;20445:3;20441:12;20434:19;;20093:366;;;:::o;20465:419::-;20631:4;20669:2;20658:9;20654:18;20646:26;;20718:9;20712:4;20708:20;20704:1;20693:9;20689:17;20682:47;20746:131;20872:4;20746:131;:::i;:::-;20738:139;;20465:419;;;:::o;20890:165::-;21030:17;21026:1;21018:6;21014:14;21007:41;20890:165;:::o;21061:366::-;21203:3;21224:67;21288:2;21283:3;21224:67;:::i;:::-;21217:74;;21300:93;21389:3;21300:93;:::i;:::-;21418:2;21413:3;21409:12;21402:19;;21061:366;;;:::o;21433:419::-;21599:4;21637:2;21626:9;21622:18;21614:26;;21686:9;21680:4;21676:20;21672:1;21661:9;21657:17;21650:47;21714:131;21840:4;21714:131;:::i;:::-;21706:139;;21433:419;;;:::o;21858:227::-;21998:34;21994:1;21986:6;21982:14;21975:58;22067:10;22062:2;22054:6;22050:15;22043:35;21858:227;:::o;22091:366::-;22233:3;22254:67;22318:2;22313:3;22254:67;:::i;:::-;22247:74;;22330:93;22419:3;22330:93;:::i;:::-;22448:2;22443:3;22439:12;22432:19;;22091:366;;;:::o;22463:419::-;22629:4;22667:2;22656:9;22652:18;22644:26;;22716:9;22710:4;22706:20;22702:1;22691:9;22687:17;22680:47;22744:131;22870:4;22744:131;:::i;:::-;22736:139;;22463:419;;;:::o;22888:230::-;23028:34;23024:1;23016:6;23012:14;23005:58;23097:13;23092:2;23084:6;23080:15;23073:38;22888:230;:::o;23124:366::-;23266:3;23287:67;23351:2;23346:3;23287:67;:::i;:::-;23280:74;;23363:93;23452:3;23363:93;:::i;:::-;23481:2;23476:3;23472:12;23465:19;;23124:366;;;:::o;23496:419::-;23662:4;23700:2;23689:9;23685:18;23677:26;;23749:9;23743:4;23739:20;23735:1;23724:9;23720:17;23713:47;23777:131;23903:4;23777:131;:::i;:::-;23769:139;;23496:419;;;:::o;23921:147::-;24022:11;24059:3;24044:18;;23921:147;;;;:::o;24074:114::-;;:::o;24194:398::-;24353:3;24374:83;24455:1;24450:3;24374:83;:::i;:::-;24367:90;;24466:93;24555:3;24466:93;:::i;:::-;24584:1;24579:3;24575:11;24568:18;;24194:398;;;:::o;24598:379::-;24782:3;24804:147;24947:3;24804:147;:::i;:::-;24797:154;;24968:3;24961:10;;24598:379;;;:::o;24983:143::-;25040:5;25071:6;25065:13;25056:22;;25087:33;25114:5;25087:33;:::i;:::-;24983:143;;;;:::o;25132:351::-;25202:6;25251:2;25239:9;25230:7;25226:23;25222:32;25219:119;;;25257:79;;:::i;:::-;25219:119;25377:1;25402:64;25458:7;25449:6;25438:9;25434:22;25402:64;:::i;:::-;25392:74;;25348:128;25132:351;;;;:::o;25489:159::-;25629:11;25625:1;25617:6;25613:14;25606:35;25489:159;:::o;25654:365::-;25796:3;25817:66;25881:1;25876:3;25817:66;:::i;:::-;25810:73;;25892:93;25981:3;25892:93;:::i;:::-;26010:2;26005:3;26001:12;25994:19;;25654:365;;;:::o;26025:419::-;26191:4;26229:2;26218:9;26214:18;26206:26;;26278:9;26272:4;26268:20;26264:1;26253:9;26249:17;26242:47;26306:131;26432:4;26306:131;:::i;:::-;26298:139;;26025:419;;;:::o;26450:332::-;26571:4;26609:2;26598:9;26594:18;26586:26;;26622:71;26690:1;26679:9;26675:17;26666:6;26622:71;:::i;:::-;26703:72;26771:2;26760:9;26756:18;26747:6;26703:72;:::i;:::-;26450:332;;;;;:::o;26788:137::-;26842:5;26873:6;26867:13;26858:22;;26889:30;26913:5;26889:30;:::i;:::-;26788:137;;;;:::o;26931:345::-;26998:6;27047:2;27035:9;27026:7;27022:23;27018:32;27015:119;;;27053:79;;:::i;:::-;27015:119;27173:1;27198:61;27251:7;27242:6;27231:9;27227:22;27198:61;:::i;:::-;27188:71;;27144:125;26931:345;;;;:::o;27282:143::-;27339:5;27370:6;27364:13;27355:22;;27386:33;27413:5;27386:33;:::i;:::-;27282:143;;;;:::o;27431:351::-;27501:6;27550:2;27538:9;27529:7;27525:23;27521:32;27518:119;;;27556:79;;:::i;:::-;27518:119;27676:1;27701:64;27757:7;27748:6;27737:9;27733:22;27701:64;:::i;:::-;27691:74;;27647:128;27431:351;;;;:::o;27788:332::-;27909:4;27947:2;27936:9;27932:18;27924:26;;27960:71;28028:1;28017:9;28013:17;28004:6;27960:71;:::i;:::-;28041:72;28109:2;28098:9;28094:18;28085:6;28041:72;:::i;:::-;27788:332;;;;;:::o;28126:85::-;28171:7;28200:5;28189:16;;28126:85;;;:::o;28217:158::-;28275:9;28308:61;28326:42;28335:32;28361:5;28335:32;:::i;:::-;28326:42;:::i;:::-;28308:61;:::i;:::-;28295:74;;28217:158;;;:::o;28381:147::-;28476:45;28515:5;28476:45;:::i;:::-;28471:3;28464:58;28381:147;;:::o;28534:807::-;28783:4;28821:3;28810:9;28806:19;28798:27;;28835:71;28903:1;28892:9;28888:17;28879:6;28835:71;:::i;:::-;28916:72;28984:2;28973:9;28969:18;28960:6;28916:72;:::i;:::-;28998:80;29074:2;29063:9;29059:18;29050:6;28998:80;:::i;:::-;29088;29164:2;29153:9;29149:18;29140:6;29088:80;:::i;:::-;29178:73;29246:3;29235:9;29231:19;29222:6;29178:73;:::i;:::-;29261;29329:3;29318:9;29314:19;29305:6;29261:73;:::i;:::-;28534:807;;;;;;;;;:::o;29347:663::-;29435:6;29443;29451;29500:2;29488:9;29479:7;29475:23;29471:32;29468:119;;;29506:79;;:::i;:::-;29468:119;29626:1;29651:64;29707:7;29698:6;29687:9;29683:22;29651:64;:::i;:::-;29641:74;;29597:128;29764:2;29790:64;29846:7;29837:6;29826:9;29822:22;29790:64;:::i;:::-;29780:74;;29735:129;29903:2;29929:64;29985:7;29976:6;29965:9;29961:22;29929:64;:::i;:::-;29919:74;;29874:129;29347:663;;;;;:::o;30016:225::-;30156:34;30152:1;30144:6;30140:14;30133:58;30225:8;30220:2;30212:6;30208:15;30201:33;30016:225;:::o;30247:366::-;30389:3;30410:67;30474:2;30469:3;30410:67;:::i;:::-;30403:74;;30486:93;30575:3;30486:93;:::i;:::-;30604:2;30599:3;30595:12;30588:19;;30247:366;;;:::o;30619:419::-;30785:4;30823:2;30812:9;30808:18;30800:26;;30872:9;30866:4;30862:20;30858:1;30847:9;30843:17;30836:47;30900:131;31026:4;30900:131;:::i;:::-;30892:139;;30619:419;;;:::o;31044:223::-;31184:34;31180:1;31172:6;31168:14;31161:58;31253:6;31248:2;31240:6;31236:15;31229:31;31044:223;:::o;31273:366::-;31415:3;31436:67;31500:2;31495:3;31436:67;:::i;:::-;31429:74;;31512:93;31601:3;31512:93;:::i;:::-;31630:2;31625:3;31621:12;31614:19;;31273:366;;;:::o;31645:419::-;31811:4;31849:2;31838:9;31834:18;31826:26;;31898:9;31892:4;31888:20;31884:1;31873:9;31869:17;31862:47;31926:131;32052:4;31926:131;:::i;:::-;31918:139;;31645:419;;;:::o;32070:221::-;32210:34;32206:1;32198:6;32194:14;32187:58;32279:4;32274:2;32266:6;32262:15;32255:29;32070:221;:::o;32297:366::-;32439:3;32460:67;32524:2;32519:3;32460:67;:::i;:::-;32453:74;;32536:93;32625:3;32536:93;:::i;:::-;32654:2;32649:3;32645:12;32638:19;;32297:366;;;:::o;32669:419::-;32835:4;32873:2;32862:9;32858:18;32850:26;;32922:9;32916:4;32912:20;32908:1;32897:9;32893:17;32886:47;32950:131;33076:4;32950:131;:::i;:::-;32942:139;;32669:419;;;:::o;33094:182::-;33234:34;33230:1;33222:6;33218:14;33211:58;33094:182;:::o;33282:366::-;33424:3;33445:67;33509:2;33504:3;33445:67;:::i;:::-;33438:74;;33521:93;33610:3;33521:93;:::i;:::-;33639:2;33634:3;33630:12;33623:19;;33282:366;;;:::o;33654:419::-;33820:4;33858:2;33847:9;33843:18;33835:26;;33907:9;33901:4;33897:20;33893:1;33882:9;33878:17;33871:47;33935:131;34061:4;33935:131;:::i;:::-;33927:139;;33654:419;;;:::o;34079:179::-;34219:31;34215:1;34207:6;34203:14;34196:55;34079:179;:::o;34264:366::-;34406:3;34427:67;34491:2;34486:3;34427:67;:::i;:::-;34420:74;;34503:93;34592:3;34503:93;:::i;:::-;34621:2;34616:3;34612:12;34605:19;;34264:366;;;:::o;34636:419::-;34802:4;34840:2;34829:9;34825:18;34817:26;;34889:9;34883:4;34879:20;34875:1;34864:9;34860:17;34853:47;34917:131;35043:4;34917:131;:::i;:::-;34909:139;;34636:419;;;:::o;35061:224::-;35201:34;35197:1;35189:6;35185:14;35178:58;35270:7;35265:2;35257:6;35253:15;35246:32;35061:224;:::o;35291:366::-;35433:3;35454:67;35518:2;35513:3;35454:67;:::i;:::-;35447:74;;35530:93;35619:3;35530:93;:::i;:::-;35648:2;35643:3;35639:12;35632:19;;35291:366;;;:::o;35663:419::-;35829:4;35867:2;35856:9;35852:18;35844:26;;35916:9;35910:4;35906:20;35902:1;35891:9;35887:17;35880:47;35944:131;36070:4;35944:131;:::i;:::-;35936:139;;35663:419;;;:::o;36088:222::-;36228:34;36224:1;36216:6;36212:14;36205:58;36297:5;36292:2;36284:6;36280:15;36273:30;36088:222;:::o;36316:366::-;36458:3;36479:67;36543:2;36538:3;36479:67;:::i;:::-;36472:74;;36555:93;36644:3;36555:93;:::i;:::-;36673:2;36668:3;36664:12;36657:19;;36316:366;;;:::o;36688:419::-;36854:4;36892:2;36881:9;36877:18;36869:26;;36941:9;36935:4;36931:20;36927:1;36916:9;36912:17;36905:47;36969:131;37095:4;36969:131;:::i;:::-;36961:139;;36688:419;;;:::o;37113:194::-;37153:4;37173:20;37191:1;37173:20;:::i;:::-;37168:25;;37207:20;37225:1;37207:20;:::i;:::-;37202:25;;37251:1;37248;37244:9;37236:17;;37275:1;37269:4;37266:11;37263:37;;;37280:18;;:::i;:::-;37263:37;37113:194;;;;:::o;37313:237::-;37453:34;37449:1;37441:6;37437:14;37430:58;37522:20;37517:2;37509:6;37505:15;37498:45;37313:237;:::o;37556:366::-;37698:3;37719:67;37783:2;37778:3;37719:67;:::i;:::-;37712:74;;37795:93;37884:3;37795:93;:::i;:::-;37913:2;37908:3;37904:12;37897:19;;37556:366;;;:::o;37928:419::-;38094:4;38132:2;38121:9;38117:18;38109:26;;38181:9;38175:4;38171:20;38167:1;38156:9;38152:17;38145:47;38209:131;38335:4;38209:131;:::i;:::-;38201:139;;37928:419;;;:::o;38353:179::-;38493:31;38489:1;38481:6;38477:14;38470:55;38353:179;:::o;38538:366::-;38680:3;38701:67;38765:2;38760:3;38701:67;:::i;:::-;38694:74;;38777:93;38866:3;38777:93;:::i;:::-;38895:2;38890:3;38886:12;38879:19;;38538:366;;;:::o;38910:419::-;39076:4;39114:2;39103:9;39099:18;39091:26;;39163:9;39157:4;39153:20;39149:1;39138:9;39134:17;39127:47;39191:131;39317:4;39191:131;:::i;:::-;39183:139;;38910:419;;;:::o;39335:241::-;39475:34;39471:1;39463:6;39459:14;39452:58;39544:24;39539:2;39531:6;39527:15;39520:49;39335:241;:::o;39582:366::-;39724:3;39745:67;39809:2;39804:3;39745:67;:::i;:::-;39738:74;;39821:93;39910:3;39821:93;:::i;:::-;39939:2;39934:3;39930:12;39923:19;;39582:366;;;:::o;39954:419::-;40120:4;40158:2;40147:9;40143:18;40135:26;;40207:9;40201:4;40197:20;40193:1;40182:9;40178:17;40171:47;40235:131;40361:4;40235:131;:::i;:::-;40227:139;;39954:419;;;:::o;40379:176::-;40519:28;40515:1;40507:6;40503:14;40496:52;40379:176;:::o;40561:366::-;40703:3;40724:67;40788:2;40783:3;40724:67;:::i;:::-;40717:74;;40800:93;40889:3;40800:93;:::i;:::-;40918:2;40913:3;40909:12;40902:19;;40561:366;;;:::o;40933:419::-;41099:4;41137:2;41126:9;41122:18;41114:26;;41186:9;41180:4;41176:20;41172:1;41161:9;41157:17;41150:47;41214:131;41340:4;41214:131;:::i;:::-;41206:139;;40933:419;;;:::o;41358:242::-;41498:34;41494:1;41486:6;41482:14;41475:58;41567:25;41562:2;41554:6;41550:15;41543:50;41358:242;:::o;41606:366::-;41748:3;41769:67;41833:2;41828:3;41769:67;:::i;:::-;41762:74;;41845:93;41934:3;41845:93;:::i;:::-;41963:2;41958:3;41954:12;41947:19;;41606:366;;;:::o;41978:419::-;42144:4;42182:2;42171:9;42167:18;42159:26;;42231:9;42225:4;42221:20;42217:1;42206:9;42202:17;42195:47;42259:131;42385:4;42259:131;:::i;:::-;42251:139;;41978:419;;;:::o;42403:220::-;42543:34;42539:1;42531:6;42527:14;42520:58;42612:3;42607:2;42599:6;42595:15;42588:28;42403:220;:::o;42629:366::-;42771:3;42792:67;42856:2;42851:3;42792:67;:::i;:::-;42785:74;;42868:93;42957:3;42868:93;:::i;:::-;42986:2;42981:3;42977:12;42970:19;;42629:366;;;:::o;43001:419::-;43167:4;43205:2;43194:9;43190:18;43182:26;;43254:9;43248:4;43244:20;43240:1;43229:9;43225:17;43218:47;43282:131;43408:4;43282:131;:::i;:::-;43274:139;;43001:419;;;:::o;43426:221::-;43566:34;43562:1;43554:6;43550:14;43543:58;43635:4;43630:2;43622:6;43618:15;43611:29;43426:221;:::o;43653:366::-;43795:3;43816:67;43880:2;43875:3;43816:67;:::i;:::-;43809:74;;43892:93;43981:3;43892:93;:::i;:::-;44010:2;44005:3;44001:12;43994:19;;43653:366;;;:::o;44025:419::-;44191:4;44229:2;44218:9;44214:18;44206:26;;44278:9;44272:4;44268:20;44264:1;44253:9;44249:17;44242:47;44306:131;44432:4;44306:131;:::i;:::-;44298:139;;44025:419;;;:::o;44450:225::-;44590:34;44586:1;44578:6;44574:14;44567:58;44659:8;44654:2;44646:6;44642:15;44635:33;44450:225;:::o;44681:366::-;44823:3;44844:67;44908:2;44903:3;44844:67;:::i;:::-;44837:74;;44920:93;45009:3;44920:93;:::i;:::-;45038:2;45033:3;45029:12;45022:19;;44681:366;;;:::o;45053:419::-;45219:4;45257:2;45246:9;45242:18;45234:26;;45306:9;45300:4;45296:20;45292:1;45281:9;45277:17;45270:47;45334:131;45460:4;45334:131;:::i;:::-;45326:139;;45053:419;;;:::o;45478:180::-;45526:77;45523:1;45516:88;45623:4;45620:1;45613:15;45647:4;45644:1;45637:15;45664:114;45731:6;45765:5;45759:12;45749:22;;45664:114;;;:::o;45784:184::-;45883:11;45917:6;45912:3;45905:19;45957:4;45952:3;45948:14;45933:29;;45784:184;;;;:::o;45974:132::-;46041:4;46064:3;46056:11;;46094:4;46089:3;46085:14;46077:22;;45974:132;;;:::o;46112:108::-;46189:24;46207:5;46189:24;:::i;:::-;46184:3;46177:37;46112:108;;:::o;46226:179::-;46295:10;46316:46;46358:3;46350:6;46316:46;:::i;:::-;46394:4;46389:3;46385:14;46371:28;;46226:179;;;;:::o;46411:113::-;46481:4;46513;46508:3;46504:14;46496:22;;46411:113;;;:::o;46560:732::-;46679:3;46708:54;46756:5;46708:54;:::i;:::-;46778:86;46857:6;46852:3;46778:86;:::i;:::-;46771:93;;46888:56;46938:5;46888:56;:::i;:::-;46967:7;46998:1;46983:284;47008:6;47005:1;47002:13;46983:284;;;47084:6;47078:13;47111:63;47170:3;47155:13;47111:63;:::i;:::-;47104:70;;47197:60;47250:6;47197:60;:::i;:::-;47187:70;;47043:224;47030:1;47027;47023:9;47018:14;;46983:284;;;46987:14;47283:3;47276:10;;46684:608;;;46560:732;;;;:::o;47298:831::-;47561:4;47599:3;47588:9;47584:19;47576:27;;47613:71;47681:1;47670:9;47666:17;47657:6;47613:71;:::i;:::-;47694:80;47770:2;47759:9;47755:18;47746:6;47694:80;:::i;:::-;47821:9;47815:4;47811:20;47806:2;47795:9;47791:18;47784:48;47849:108;47952:4;47943:6;47849:108;:::i;:::-;47841:116;;47967:72;48035:2;48024:9;48020:18;48011:6;47967:72;:::i;:::-;48049:73;48117:3;48106:9;48102:19;48093:6;48049:73;:::i;:::-;47298:831;;;;;;;;:::o

Swarm Source

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