ETH Price: $2,453.88 (-1.89%)

Token

FRZ Wallet Token (FWT)
 

Overview

Max Total Supply

500,000,000,000 FWT

Holders

72

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
FRZWalletToken

Compiler Version
v0.8.22+commit.4fc1097e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-01-23
*/

// File: @openzeppelin/contracts/utils/math/SafeMath.sol


// OpenZeppelin Contracts (last updated v4.9.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;
        }
    }
}

// File: @openzeppelin/contracts/interfaces/draft-IERC6093.sol


// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/draft-IERC6093.sol)
pragma solidity ^0.8.20;

/**
 * @dev Standard ERC20 Errors
 * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC20 tokens.
 */
interface IERC20Errors {
    /**
     * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     * @param balance Current balance for the interacting account.
     * @param needed Minimum amount required to perform a transfer.
     */
    error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);

    /**
     * @dev Indicates a failure with the token `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     */
    error ERC20InvalidSender(address sender);

    /**
     * @dev Indicates a failure with the token `receiver`. Used in transfers.
     * @param receiver Address to which tokens are being transferred.
     */
    error ERC20InvalidReceiver(address receiver);

    /**
     * @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers.
     * @param spender Address that may be allowed to operate on tokens without being their owner.
     * @param allowance Amount of tokens a `spender` is allowed to operate with.
     * @param needed Minimum amount required to perform a transfer.
     */
    error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed);

    /**
     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
     * @param approver Address initiating an approval operation.
     */
    error ERC20InvalidApprover(address approver);

    /**
     * @dev Indicates a failure with the `spender` to be approved. Used in approvals.
     * @param spender Address that may be allowed to operate on tokens without being their owner.
     */
    error ERC20InvalidSpender(address spender);
}

/**
 * @dev Standard ERC721 Errors
 * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC721 tokens.
 */
interface IERC721Errors {
    /**
     * @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in EIP-20.
     * Used in balance queries.
     * @param owner Address of the current owner of a token.
     */
    error ERC721InvalidOwner(address owner);

    /**
     * @dev Indicates a `tokenId` whose `owner` is the zero address.
     * @param tokenId Identifier number of a token.
     */
    error ERC721NonexistentToken(uint256 tokenId);

    /**
     * @dev Indicates an error related to the ownership over a particular token. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     * @param tokenId Identifier number of a token.
     * @param owner Address of the current owner of a token.
     */
    error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner);

    /**
     * @dev Indicates a failure with the token `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     */
    error ERC721InvalidSender(address sender);

    /**
     * @dev Indicates a failure with the token `receiver`. Used in transfers.
     * @param receiver Address to which tokens are being transferred.
     */
    error ERC721InvalidReceiver(address receiver);

    /**
     * @dev Indicates a failure with the `operator`’s approval. Used in transfers.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     * @param tokenId Identifier number of a token.
     */
    error ERC721InsufficientApproval(address operator, uint256 tokenId);

    /**
     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
     * @param approver Address initiating an approval operation.
     */
    error ERC721InvalidApprover(address approver);

    /**
     * @dev Indicates a failure with the `operator` to be approved. Used in approvals.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     */
    error ERC721InvalidOperator(address operator);
}

/**
 * @dev Standard ERC1155 Errors
 * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC1155 tokens.
 */
interface IERC1155Errors {
    /**
     * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     * @param balance Current balance for the interacting account.
     * @param needed Minimum amount required to perform a transfer.
     * @param tokenId Identifier number of a token.
     */
    error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId);

    /**
     * @dev Indicates a failure with the token `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     */
    error ERC1155InvalidSender(address sender);

    /**
     * @dev Indicates a failure with the token `receiver`. Used in transfers.
     * @param receiver Address to which tokens are being transferred.
     */
    error ERC1155InvalidReceiver(address receiver);

    /**
     * @dev Indicates a failure with the `operator`’s approval. Used in transfers.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     * @param owner Address of the current owner of a token.
     */
    error ERC1155MissingApprovalForAll(address operator, address owner);

    /**
     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
     * @param approver Address initiating an approval operation.
     */
    error ERC1155InvalidApprover(address approver);

    /**
     * @dev Indicates a failure with the `operator` to be approved. Used in approvals.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     */
    error ERC1155InvalidOperator(address operator);

    /**
     * @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation.
     * Used in batch transfers.
     * @param idsLength Length of the array of token identifiers
     * @param valuesLength Length of the array of token amounts
     */
    error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength);
}

// File: @openzeppelin/contracts/utils/Context.sol


// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)

pragma solidity ^0.8.20;

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

    function _contextSuffixLength() internal view virtual returns (uint256) {
        return 0;
    }
}

// File: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)

pragma solidity ^0.8.20;


/**
 * @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.
 *
 * The initial owner is set to the address provided by the deployer. 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;

    /**
     * @dev The caller account is not authorized to perform an operation.
     */
    error OwnableUnauthorizedAccount(address account);

    /**
     * @dev The owner is not a valid owner account. (eg. `address(0)`)
     */
    error OwnableInvalidOwner(address owner);

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

    /**
     * @dev Initializes the contract setting the address provided by the deployer as the initial owner.
     */
    constructor(address initialOwner) {
        if (initialOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(initialOwner);
    }

    /**
     * @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 {
        if (owner() != _msgSender()) {
            revert OwnableUnauthorizedAccount(_msgSender());
        }
    }

    /**
     * @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 {
        if (newOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _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);
    }
}

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol


// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.20;

/**
 * @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 value of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

    /**
     * @dev Moves a `value` amount of 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 value) 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 a `value` amount of tokens 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 value) external returns (bool);

    /**
     * @dev Moves a `value` amount of tokens from `from` to `to` using the
     * allowance mechanism. `value` 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 value) external returns (bool);
}

// File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol


// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.20;


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

// File: @openzeppelin/contracts/token/ERC20/ERC20.sol


// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/ERC20.sol)

pragma solidity ^0.8.20;





/**
 * @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}.
 *
 * 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.
 */
abstract contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors {
    mapping(address account => uint256) private _balances;

    mapping(address account => mapping(address spender => 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 returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual 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 returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual 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 `value`.
     */
    function transfer(address to, uint256 value) public virtual returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, value);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `value` 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 value) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, value);
        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 `value`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `value`.
     */
    function transferFrom(address from, address to, uint256 value) public virtual returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, value);
        _transfer(from, to, value);
        return true;
    }

    /**
     * @dev Moves a `value` 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.
     *
     * NOTE: This function is not virtual, {_update} should be overridden instead.
     */
    function _transfer(address from, address to, uint256 value) internal {
        if (from == address(0)) {
            revert ERC20InvalidSender(address(0));
        }
        if (to == address(0)) {
            revert ERC20InvalidReceiver(address(0));
        }
        _update(from, to, value);
    }

    /**
     * @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from`
     * (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding
     * this function.
     *
     * Emits a {Transfer} event.
     */
    function _update(address from, address to, uint256 value) internal virtual {
        if (from == address(0)) {
            // Overflow check required: The rest of the code assumes that totalSupply never overflows
            _totalSupply += value;
        } else {
            uint256 fromBalance = _balances[from];
            if (fromBalance < value) {
                revert ERC20InsufficientBalance(from, fromBalance, value);
            }
            unchecked {
                // Overflow not possible: value <= fromBalance <= totalSupply.
                _balances[from] = fromBalance - value;
            }
        }

        if (to == address(0)) {
            unchecked {
                // Overflow not possible: value <= totalSupply or value <= fromBalance <= totalSupply.
                _totalSupply -= value;
            }
        } else {
            unchecked {
                // Overflow not possible: balance + value is at most totalSupply, which we know fits into a uint256.
                _balances[to] += value;
            }
        }

        emit Transfer(from, to, value);
    }

    /**
     * @dev Creates a `value` amount of tokens and assigns them to `account`, by transferring it from address(0).
     * Relies on the `_update` mechanism
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * NOTE: This function is not virtual, {_update} should be overridden instead.
     */
    function _mint(address account, uint256 value) internal {
        if (account == address(0)) {
            revert ERC20InvalidReceiver(address(0));
        }
        _update(address(0), account, value);
    }

    /**
     * @dev Destroys a `value` amount of tokens from `account`, lowering the total supply.
     * Relies on the `_update` mechanism.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * NOTE: This function is not virtual, {_update} should be overridden instead
     */
    function _burn(address account, uint256 value) internal {
        if (account == address(0)) {
            revert ERC20InvalidSender(address(0));
        }
        _update(account, address(0), value);
    }

    /**
     * @dev Sets `value` 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.
     *
     * Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument.
     */
    function _approve(address owner, address spender, uint256 value) internal {
        _approve(owner, spender, value, true);
    }

    /**
     * @dev Variant of {_approve} with an optional flag to enable or disable the {Approval} event.
     *
     * By default (when calling {_approve}) the flag is set to true. On the other hand, approval changes made by
     * `_spendAllowance` during the `transferFrom` operation set the flag to false. This saves gas by not emitting any
     * `Approval` event during `transferFrom` operations.
     *
     * Anyone who wishes to continue emitting `Approval` events on the`transferFrom` operation can force the flag to
     * true using the following override:
     * ```
     * function _approve(address owner, address spender, uint256 value, bool) internal virtual override {
     *     super._approve(owner, spender, value, true);
     * }
     * ```
     *
     * Requirements are the same as {_approve}.
     */
    function _approve(address owner, address spender, uint256 value, bool emitEvent) internal virtual {
        if (owner == address(0)) {
            revert ERC20InvalidApprover(address(0));
        }
        if (spender == address(0)) {
            revert ERC20InvalidSpender(address(0));
        }
        _allowances[owner][spender] = value;
        if (emitEvent) {
            emit Approval(owner, spender, value);
        }
    }

    /**
     * @dev Updates `owner` s allowance for `spender` based on spent `value`.
     *
     * Does not update the allowance value in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Does not emit an {Approval} event.
     */
    function _spendAllowance(address owner, address spender, uint256 value) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            if (currentAllowance < value) {
                revert ERC20InsufficientAllowance(spender, currentAllowance, value);
            }
            unchecked {
                _approve(owner, spender, currentAllowance - value, false);
            }
        }
    }
}

// File: @openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol


// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/ERC20Burnable.sol)

pragma solidity ^0.8.20;



/**
 * @dev Extension of {ERC20} that allows token holders to destroy both their own
 * tokens and those that they have an allowance for, in a way that can be
 * recognized off-chain (via event analysis).
 */
abstract contract ERC20Burnable is Context, ERC20 {
    /**
     * @dev Destroys a `value` amount of tokens from the caller.
     *
     * See {ERC20-_burn}.
     */
    function burn(uint256 value) public virtual {
        _burn(_msgSender(), value);
    }

    /**
     * @dev Destroys a `value` amount of tokens from `account`, deducting from
     * the caller's allowance.
     *
     * See {ERC20-_burn} and {ERC20-allowance}.
     *
     * Requirements:
     *
     * - the caller must have allowance for ``accounts``'s tokens of at least
     * `value`.
     */
    function burnFrom(address account, uint256 value) public virtual {
        _spendAllowance(account, _msgSender(), value);
        _burn(account, value);
    }
}

// File: FRZWalletToken.sol


pragma solidity ^0.8.20;





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

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

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

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

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

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

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

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

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

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


contract FRZWalletToken is ERC20, ERC20Burnable, Ownable  {
  
    using SafeMath for uint256;

    address payable public marketingWallet = payable(0x81D4610351A7ADA54cb1d81Bbf99c3A2A3971e8F);      // Marketing wallet address
    address public dev = 0x57Ee8CcC427233871C79235be300C1f01bF2284A;                                   // Dev wallet address
    address public liqWallet = 0xb6e7BDD01c02F900e22b18796683Dce2c1Cae7f8;                             // Liquidty wallet address
    address private initialOwner = 0xb6e7BDD01c02F900e22b18796683Dce2c1Cae7f8;                         // Initial Owner address
    IERC20 public WBTC = IERC20(0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599);                           // wrapped bitcoin address for rewards
    
    IUniswapRouter02 public dexRouter;
    address public dexPair;
    
    bool public swapAndLiquifyEnabled = true;
    bool public swapAndLiquifyByLimitOnly = false;

    uint256 private minimumTokensBeforeSwap =  25*(10**8)*1e18;  // 2,500,000,000

    uint256 public marketingTax = 200; // 2% tax for Marketing 
    uint256 public liquidityTax = 200; // 2% tax for Liquidity 
    uint256 public rewardTax = 200;    // 2% tax to reward 
    uint256 public totalTax = 600;

    uint256 constant MAXIMUMSUPPLY = 500*(10**9)*1e18;  // 500,000,000,000
    uint256 public maxWalletAmount = 5*(10**9)*1e18;    // 5,000,000,000
    uint256 public rewardThreshold = 2*(10**9)*1e18;    // 2,000,000,000
    bool private isInternalTx;
    bool public maxLimitDisabled; // Max TX and Max wallet Disabling
    
    mapping (address => bool) public maxWalletWL;   // whitelist from max Wallet limits
    mapping (address => bool) public taxWL;         // whitelist from tax
    mapping (address => bool) public excludedFromReward;
    mapping (address => uint256) private userIndex;
    address[] public rewardUsers;


    modifier onlyDev() {
        require(msg.sender == dev || msg.sender == owner()  || msg.sender == address(this), "Error: Developer Required!");
        _;
    }
    modifier internalTX {
        isInternalTx = true;
        _;
        isInternalTx = false;
    }
    constructor()
        ERC20("FRZ Wallet Token", "FWT")
        Ownable(initialOwner)
    {
        address oDev = dev;
        dev = msg.sender;       // To avoid errors in a case of msg.sender != dev or owner

        setWhitelList(initialOwner , true ,true, false);
        setWhitelList(address(this) , true ,true, true);
        setWhitelList(marketingWallet , true, true, false);
        setWhitelList(dev , true ,true, false);
        setWhitelList(liqWallet , true ,true, false);
        setWhitelList(address(0) , true ,true, true);

        dev= oDev;

        rewardUsers.push(address(0)) ;  // to avoid 0 index


        dexRouter = IUniswapRouter02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // uniswap router
        dexPair = IUniswapV2Factory(dexRouter.factory()).createPair(address(this), dexRouter.WETH());

        maxWalletWL[address(dexRouter)] = true ;
        excludedFromReward[address(dexRouter)] = true;
        maxWalletWL[dexPair] = true ;
        excludedFromReward[dexPair] = true;

        _approve(address(this), address(dexRouter), type(uint256).max);
        _mint(initialOwner, MAXIMUMSUPPLY);

    }

    receive() external payable {}

     function _update(address from, address to, uint256 value) internal override  {
        if(isInternalTx)
        { 
             super._update(from, to, value);
        }
        else
        {
            if (!maxLimitDisabled && !maxWalletWL[to] && from != address(0) && to != address(0)){
                require(value + balanceOf(to) <= maxWalletAmount , "Exceeding the Max Wallet Limit!");
            }

            uint256 contractTokenBalance = balanceOf(address(this));
            bool overMinimumTokenBalance = contractTokenBalance >= minimumTokensBeforeSwap;   
                
            if (overMinimumTokenBalance && from != dexPair && from != address(dexRouter) && swapAndLiquifyEnabled) 
                {
                    if(swapAndLiquifyByLimitOnly){contractTokenBalance = minimumTokensBeforeSwap;}
                    swapAndLiquify(contractTokenBalance); 
                }

            if (totalTax > 0 && !taxWL[from] && !taxWL[to] && from != address(0) && to != address(0)) {
                value = takeFee(from, value);
            }

            super._update(from, to, value);
            updateRewardUser(from);         // check if 'from' is eligible for the reward
            updateRewardUser(to);           // check if 'to' is eligible for the reward
           
        }

    }

    function updateRewardUser(address user) internal {
        if(excludedFromReward[user]){
            return;
        }

        if(userIndex[user] != 0){
            if(balanceOf(user) < rewardThreshold) {
            
            address lastUser  = rewardUsers[rewardUsers.length - 1];
            rewardUsers[userIndex[user]] = lastUser;
            rewardUsers.pop();
            userIndex[lastUser] = userIndex[user];
            userIndex[user] = 0;
            }
            
        }
        else if (balanceOf(user) >= rewardThreshold){
            userIndex[user] = rewardUsers.length;
            rewardUsers.push(user);
        }
    }

    function distributeReward() external onlyDev {
        uint256 totalUsers = rewardUsers.length - 1;    // first element is 0x
        require(totalUsers > 0 , "No Eligible users");
        uint256 amountPerWallet = (WBTC.balanceOf(address(this))) / totalUsers;
        for (uint i = 1; i <= totalUsers ; i++){
            WBTC.transfer(rewardUsers[i] , amountPerWallet);
        }
    }

    function totalRewardEligible() external view returns(uint256){
        return rewardUsers.length - 1;
    }

    function setNumTokensBeforeSwap(uint256 newLimit) external onlyDev {
        minimumTokensBeforeSwap = newLimit;
    }
    
    function setSwapAndLiquifyEnabled(bool _enabled) public onlyDev {
        swapAndLiquifyEnabled = _enabled;
    }

    function setSwapAndLiquifyByLimitOnly(bool newValue) public onlyDev {
        swapAndLiquifyByLimitOnly = newValue;
    }

    
    function changePair(address newPairAddress) public onlyDev  {

        require (newPairAddress != address(0) , "pair cannot be the zero address");

        dexPair = newPairAddress; //Set new pair address
        maxWalletWL[dexPair] = true ;
        excludedFromReward[dexPair] = true;
    }
    
    function updateRouter(address newRouterAddress) public onlyDev returns(address newPairAddress) {
        IUniswapRouter02 dexRouter_ = IUniswapRouter02(newRouterAddress); 
        newPairAddress = IUniswapV2Factory(dexRouter_.factory()).getPair(address(this), dexRouter.WETH());

        if(newPairAddress == address(0)) { //Create If Doesnt exist
            newPairAddress = IUniswapV2Factory(dexRouter_.factory()).
                                createPair(address(this), dexRouter.WETH());
        }

        dexPair = newPairAddress; //Set new pair address
        dexRouter = dexRouter_; //Set new router address

        maxWalletWL[dexPair] = true ;
        excludedFromReward[dexPair] = true;
        maxWalletWL[address(dexRouter)] = true ;
        excludedFromReward[address(dexRouter)] = true;
    }

    function setTaxRate(uint256 _marketingTax , uint256 _rewardTax, uint256 _liquidityTax  ) public onlyDev {
        uint256 _totalTax = _marketingTax + _rewardTax + _liquidityTax  ;
        require((_totalTax <= 2000) , "max allowed tax 20%" );
        liquidityTax = _liquidityTax ;
        marketingTax = _marketingTax ;
        rewardTax = _rewardTax;
        totalTax = _totalTax;
    }
    
    function setMarketingWallet(address _newMarketingWallet) public onlyDev {
        marketingWallet = payable(_newMarketingWallet);
        setWhitelList(_newMarketingWallet , true ,true ,false);
    }
    
    
    function setLiqWallet(address _newLiqWallet) public onlyDev {
        liqWallet = _newLiqWallet;
        setWhitelList(_newLiqWallet , true ,true ,false);
    }

    // Max wallet amount as a percentage 

    function setMaxWalletLimitPercents(uint256 maxWalletPercent) public onlyDev {
        require(maxWalletPercent >= 10 , "Error : Minimum maxWalletLimit is 0.1%");
        maxWalletAmount = maxWalletPercent * totalSupply() / 10000 ;
    }

    function setDev(address _dev) public onlyDev {
        dev = _dev;
        setWhitelList(_dev , true ,true ,false);
    }

    function setWhitelList(address _address , bool _taxWL , bool _maxWalletWL , bool _excludeFromReward) public onlyDev {
        taxWL[_address] = _taxWL ;
        maxWalletWL[_address] = _maxWalletWL ;
        excludedFromReward[_address] = _excludeFromReward;
    }

    function disableLimits(bool _maxLStatus ) public onlyDev {
        maxLimitDisabled = _maxLStatus;
    }


    function swapAndLiquify(uint256 tAmount) private internalTX {

        uint256 liqTokenAmount = tAmount.mul(liquidityTax).div(totalTax).div(2);

        uint256 initialBalance = address(this).balance;
        
        swapTokensForEth(tAmount.sub(liqTokenAmount));

        uint256 amountReceived = address(this).balance.sub(initialBalance);
        uint256 liqETHAmount = amountReceived.mul(liqTokenAmount).div(tAmount);

        addLiquidity(liqTokenAmount, liqETHAmount);

        uint256 newBalance = address(this).balance;

        uint256 marketingETHAmount = newBalance.mul(marketingTax).div(totalTax - liquidityTax);
        uint256 rewardETHAmount = newBalance.sub(marketingETHAmount);

        ethTransfer(marketingWallet , marketingETHAmount);
        swapEthForWbtc(rewardETHAmount);


    }
    
    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the dex pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

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

        // make the swap
        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of Eth
            path,
            address(this), // The contract
            block.timestamp
        );
        
    }    

    function swapEthForWbtc(uint256 ethAmount) private {
        // generate the dex pair path of eth -> wbtc
        address[] memory path = new address[](2);
        path[0] = dexRouter.WETH();
        path[1] = address(WBTC) ;

        // make the swap

        dexRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: ethAmount}(
            0, // accept any amount of Wbtc
            path,
            address(this), // The contract
            block.timestamp
        );
        
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(dexRouter), tokenAmount);

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

    function takeFee(address from, uint256 amount) internal internalTX returns (uint256) {

        uint256 tax = amount.mul(totalTax).div(10000);

        _transfer(from, address(this), tax); 

        return amount.sub(tax);
    }

    //Use this in case ETH are sent to the contract by mistake
    function rescueETH() external onlyDev{
        require(address(this).balance > 0, "insufficient ETH balance");
        ethTransfer(msg.sender , address(this).balance);
    }

    function ethTransfer(address to, uint256 amount) private {
        (bool success, ) =  payable(to).call{value: amount}("");
        require(success);
    }
    
    function rescueAnyERC20Tokens(address _tokenAddr, address _to, uint _amount) external onlyDev {
        IERC20(_tokenAddr).transfer(_to, _amount);
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","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"},{"inputs":[],"name":"WBTC","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","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":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newPairAddress","type":"address"}],"name":"changePair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dev","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dexPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IUniswapRouter02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_maxLStatus","type":"bool"}],"name":"disableLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"distributeReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"excludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liqWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxLimitDisabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"maxWalletWL","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddr","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"rescueAnyERC20Tokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rescueETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"rewardUsers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_dev","type":"address"}],"name":"setDev","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newLiqWallet","type":"address"}],"name":"setLiqWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newMarketingWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWalletPercent","type":"uint256"}],"name":"setMaxWalletLimitPercents","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setNumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setSwapAndLiquifyByLimitOnly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingTax","type":"uint256"},{"internalType":"uint256","name":"_rewardTax","type":"uint256"},{"internalType":"uint256","name":"_liquidityTax","type":"uint256"}],"name":"setTaxRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_taxWL","type":"bool"},{"internalType":"bool","name":"_maxWalletWL","type":"bool"},{"internalType":"bool","name":"_excludeFromReward","type":"bool"}],"name":"setWhitelList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyByLimitOnly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"taxWL","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalRewardEligible","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouterAddress","type":"address"}],"name":"updateRouter","outputs":[{"internalType":"address","name":"newPairAddress","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040527381d4610351a7ada54cb1d81bbf99c3a2a3971e8f60065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507357ee8ccc427233871c79235be300c1f01bf2284a60075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073b6e7bdd01c02f900e22b18796683dce2c1cae7f860085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073b6e7bdd01c02f900e22b18796683dce2c1cae7f860095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550732260fac5e5542a773aa44fbcfedf7c193bc2c599600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600c60146101000a81548160ff0219169083151502179055505f600c60156101000a81548160ff0219169083151502179055506b0813f3978f89409844000000600d5560c8600e5560c8600f5560c86010556102586011556b1027e72f1f128130880000006012556b06765c793fa10079d00000006013553480156200022e575f80fd5b5060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518060400160405280601081526020017f46525a2057616c6c657420546f6b656e000000000000000000000000000000008152506040518060400160405280600381526020017f46575400000000000000000000000000000000000000000000000000000000008152508160039081620002ce91906200255d565b508060049081620002e091906200255d565b5050505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000356575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016200034d919062002684565b60405180910390fd5b620003678162000a1760201b60201c565b505f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503360075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200040360095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001805f62000ada60201b60201c565b6200041930600180600162000ada60201b60201c565b6200044f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001805f62000ada60201b60201c565b6200048560075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001805f62000ada60201b60201c565b620004bb60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001805f62000ada60201b60201c565b620004d15f600180600162000ada60201b60201c565b8060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060195f908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550737a250d5630b4cf539739df2c5dacb4c659f2488d600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000630573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620006569190620026d2565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620006dd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620007039190620026d2565b6040518363ffffffff1660e01b81526004016200072292919062002702565b6020604051808303815f875af11580156200073f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620007659190620026d2565b600c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160155f600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160175f600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160155f600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160175f600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550620009d030600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62000ceb60201b60201c565b62000a1060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166c064f964e68233a76f52000000062000d0560201b60201c565b5062002d1f565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148062000b70575062000b4162000d8f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b8062000ba757503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b62000be9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000be0906200278b565b60405180910390fd5b8260165f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508160155f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508060175f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050505050565b62000d00838383600162000db760201b60201c565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000d78575f6040517fec442f0500000000000000000000000000000000000000000000000000000000815260040162000d6f919062002684565b60405180910390fd5b62000d8b5f838362000f8f60201b60201c565b5050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160362000e2a575f6040517fe602df0500000000000000000000000000000000000000000000000000000000815260040162000e21919062002684565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362000e9d575f6040517f94280d6200000000000000000000000000000000000000000000000000000000815260040162000e94919062002684565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550801562000f89578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405162000f809190620027bc565b60405180910390a35b50505050565b60145f9054906101000a900460ff161562000fbd5762000fb78383836200139660201b60201c565b62001391565b601460019054906101000a900460ff1615801562001022575060155f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156200105b57505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156200109457505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156200110057601254620010ae83620015ba60201b60201c565b82620010bb919062002804565b1115620010ff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620010f6906200288c565b60405180910390fd5b5b5f6200111230620015ba60201b60201c565b90505f600d548210159050808015620011785750600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015620011d25750600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015620011eb5750600c60149054906101000a900460ff165b156200121f57600c60159054906101000a900460ff16156200120d57600d5491505b6200121e82620015ff60201b60201c565b5b5f60115411801562001278575060165f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015620012cc575060165f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156200130557505f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156200133e57505f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b1562001359576200135685846200179f60201b60201c565b92505b6200136c8585856200139660201b60201c565b6200137d856200183460201b60201c565b6200138e846200183460201b60201c565b50505b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603620013ea578060025f828254620013dd919062002804565b92505081905550620014bb565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101562001476578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016200146d93929190620028ac565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362001504578060025f82825403925050819055506200154e565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620015ad9190620027bc565b60405180910390a3505050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b600160145f6101000a81548160ff0219169083151502179055505f6200165c60026200164d6011546200163e600f548762001ba960201b90919060201c565b62001bc060201b90919060201c565b62001bc060201b90919060201c565b90505f479050620016876200167b838562001bd760201b90919060201c565b62001bee60201b60201c565b5f6200169d824762001bd760201b90919060201c565b90505f620016c985620016ba868562001ba960201b90919060201c565b62001bc060201b90919060201c565b9050620016dd848262001e3d60201b60201c565b5f4790505f6200171e600f54601154620016f89190620028e7565b6200170f600e548562001ba960201b90919060201c565b62001bc060201b90919060201c565b90505f62001736828462001bd760201b90919060201c565b90506200176b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168362001f4460201b60201c565b6200177c8162001fbf60201b60201c565b505050505050505f60145f6101000a81548160ff02191690831515021790555050565b5f600160145f6101000a81548160ff0219169083151502179055505f620017e8612710620017d96011548662001ba960201b90919060201c565b62001bc060201b90919060201c565b9050620017fd843083620021fb60201b60201c565b62001812818462001bd760201b90919060201c565b9150505f60145f6101000a81548160ff02191690831515021790555092915050565b60175f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1662001ba6575f60185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541462001ae257601354620018dc82620015ba60201b60201c565b101562001adc575f60196001601980549050620018fa9190620028e7565b815481106200190e576200190d62002921565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905080601960185f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054815481106200198d576200198c62002921565b5b905f5260205f20015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506019805480620019e757620019e66200294e565b5b600190038181905f5260205f20015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905560185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205460185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505f60185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b62001ba5565b60135462001af682620015ba60201b60201c565b1062001ba45760198054905060185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550601981908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b5b50565b5f818362001bb891906200297b565b905092915050565b5f818362001bcf9190620029f2565b905092915050565b5f818362001be69190620028e7565b905092915050565b5f600267ffffffffffffffff81111562001c0d5762001c0c62002303565b5b60405190808252806020026020018201604052801562001c3c5781602001602082028036833780820191505090505b50905030815f8151811062001c565762001c5562002921565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001cfb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062001d219190620026d2565b8160018151811062001d385762001d3762002921565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505062001da630600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168462000ceb60201b60201c565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b815260040162001e0a95949392919062002b31565b5f604051808303815f87803b15801562001e22575f80fd5b505af115801562001e35573d5f803e3d5ffd5b505050505050565b62001e7130600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168462000ceb60201b60201c565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040162001ef99695949392919062002b93565b60606040518083038185885af115801562001f16573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019062001f3d919062002c2d565b5050505050565b5f8273ffffffffffffffffffffffffffffffffffffffff168260405162001f6b9062002cb7565b5f6040518083038185875af1925050503d805f811462001fa7576040519150601f19603f3d011682016040523d82523d5f602084013e62001fac565b606091505b505090508062001fba575f80fd5b505050565b5f600267ffffffffffffffff81111562001fde5762001fdd62002303565b5b6040519080825280602002602001820160405280156200200d5781602001602082028036833780820191505090505b509050600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200207b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620020a19190620026d2565b815f81518110620020b757620020b662002921565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816001815181106200212a576200212962002921565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de95835f8430426040518663ffffffff1660e01b8152600401620021c7949392919062002ccd565b5f604051808303818588803b158015620021df575f80fd5b505af1158015620021f2573d5f803e3d5ffd5b50505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036200226e575f6040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260040162002265919062002684565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620022e1575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401620022d8919062002684565b60405180910390fd5b620022f483838362000f8f60201b60201c565b505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200237557607f821691505b6020821081036200238b576200238a62002330565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620023ef7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620023b2565b620023fb8683620023b2565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f620024456200243f620024398462002413565b6200241c565b62002413565b9050919050565b5f819050919050565b620024608362002425565b620024786200246f826200244c565b848454620023be565b825550505050565b5f90565b6200248e62002480565b6200249b81848462002455565b505050565b5b81811015620024c257620024b65f8262002484565b600181019050620024a1565b5050565b601f8211156200251157620024db8162002391565b620024e684620023a3565b81016020851015620024f6578190505b6200250e6200250585620023a3565b830182620024a0565b50505b505050565b5f82821c905092915050565b5f620025335f198460080262002516565b1980831691505092915050565b5f6200254d838362002522565b9150826002028217905092915050565b6200256882620022f9565b67ffffffffffffffff81111562002584576200258362002303565b5b6200259082546200235d565b6200259d828285620024c6565b5f60209050601f831160018114620025d3575f8415620025be578287015190505b620025ca858262002540565b86555062002639565b601f198416620025e38662002391565b5f5b828110156200260c57848901518255600182019150602085019450602081019050620025e5565b868310156200262c578489015162002628601f89168262002522565b8355505b6001600288020188555050505b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6200266c8262002641565b9050919050565b6200267e8162002660565b82525050565b5f602082019050620026995f83018462002673565b92915050565b5f80fd5b620026ae8162002660565b8114620026b9575f80fd5b50565b5f81519050620026cc81620026a3565b92915050565b5f60208284031215620026ea57620026e96200269f565b5b5f620026f984828501620026bc565b91505092915050565b5f604082019050620027175f83018562002673565b62002726602083018462002673565b9392505050565b5f82825260208201905092915050565b7f4572726f723a20446576656c6f706572205265717569726564210000000000005f82015250565b5f62002773601a836200272d565b915062002780826200273d565b602082019050919050565b5f6020820190508181035f830152620027a48162002765565b9050919050565b620027b68162002413565b82525050565b5f602082019050620027d15f830184620027ab565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f620028108262002413565b91506200281d8362002413565b9250828201905080821115620028385762002837620027d7565b5b92915050565b7f457863656564696e6720746865204d61782057616c6c6574204c696d697421005f82015250565b5f62002874601f836200272d565b915062002881826200283e565b602082019050919050565b5f6020820190508181035f830152620028a58162002866565b9050919050565b5f606082019050620028c15f83018662002673565b620028d06020830185620027ab565b620028df6040830184620027ab565b949350505050565b5f620028f38262002413565b9150620029008362002413565b92508282039050818111156200291b576200291a620027d7565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b5f620029878262002413565b9150620029948362002413565b9250828202620029a48162002413565b91508282048414831517620029be57620029bd620027d7565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f620029fe8262002413565b915062002a0b8362002413565b92508262002a1e5762002a1d620029c5565b5b828204905092915050565b5f819050919050565b5f62002a5262002a4c62002a468462002a29565b6200241c565b62002413565b9050919050565b62002a648162002a32565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b62002a9e8162002660565b82525050565b5f62002ab1838362002a93565b60208301905092915050565b5f602082019050919050565b5f62002ad58262002a6a565b62002ae1818562002a74565b935062002aee8362002a84565b805f5b8381101562002b2457815162002b08888262002aa4565b975062002b158362002abd565b92505060018101905062002af1565b5085935050505092915050565b5f60a08201905062002b465f830188620027ab565b62002b55602083018762002a59565b818103604083015262002b69818662002ac9565b905062002b7a606083018562002673565b62002b896080830184620027ab565b9695505050505050565b5f60c08201905062002ba85f83018962002673565b62002bb76020830188620027ab565b62002bc6604083018762002a59565b62002bd5606083018662002a59565b62002be4608083018562002673565b62002bf360a0830184620027ab565b979650505050505050565b62002c098162002413565b811462002c14575f80fd5b50565b5f8151905062002c278162002bfe565b92915050565b5f805f6060848603121562002c475762002c466200269f565b5b5f62002c568682870162002c17565b935050602062002c698682870162002c17565b925050604062002c7c8682870162002c17565b9150509250925092565b5f81905092915050565b50565b5f62002ca05f8362002c86565b915062002cad8262002c90565b5f82019050919050565b5f62002cc38262002c93565b9150819050919050565b5f60808201905062002ce25f83018762002a59565b818103602083015262002cf6818662002ac9565b905062002d07604083018562002673565b62002d166060830184620027ab565b95945050505050565b6151538062002d2d5f395ff3fe6080604052600436106102b1575f3560e01c8063715018a611610174578063aa4bde28116100db578063d477f05f11610094578063e99990da1161006e578063e99990da14610a7c578063f242ab4114610aa4578063f2fde38b14610ace578063fe85b42b14610af6576102b8565b8063d477f05f146109ee578063da00097d14610a16578063dd62ed3e14610a40576102b8565b8063aa4bde28146108e6578063be617fa014610910578063bf9388971461093a578063c49b9a8014610962578063c851cc321461098a578063d2ee125e146109c6576102b8565b80638da5cb5b1161012d5780638da5cb5b146107ee5780638f73c5ae1461081857806391cca3db1461082e57806395d89b4114610858578063a5d69d1f14610882578063a9059cbb146108aa576102b8565b8063715018a6146106f857806375f0a8741461070e5780637837b01a1461073857806379cc6790146107625780637cee76e41461078a57806384064671146107b2576102b8565b80633b97084a116102185780635d098b38116101d15780635d098b38146105dc5780635ea4d29c146106045780636bc8af841461062e5780636e5c59ae146106565780637019052b1461068057806370a08231146106bc576102b8565b80633b97084a146104d257806342966c68146104fa5780634a74bb02146105225780634dede3de1461054c5780634ec39ba9146105765780634eea2d1f146105a0576102b8565b80631af41e5d1161026a5780631af41e5d146103c65780631d2cb02d1461040257806320800a001461042c57806323b872dd146104425780632c468fe91461047e578063313ce567146104a8576102b8565b806306fdde03146102bc5780630758d924146102e6578063095ea7b3146103105780630b01aa511461034c5780630d65df9b1461037457806318160ddd1461039c576102b8565b366102b857005b5f80fd5b3480156102c7575f80fd5b506102d0610b20565b6040516102dd9190614388565b60405180910390f35b3480156102f1575f80fd5b506102fa610bb0565b6040516103079190614422565b60405180910390f35b34801561031b575f80fd5b50610336600480360381019061033191906144ad565b610bd5565b6040516103439190614505565b60405180910390f35b348015610357575f80fd5b50610372600480360381019061036d919061451e565b610bf7565b005b34801561037f575f80fd5b5061039a60048036038101906103959190614549565b610d49565b005b3480156103a7575f80fd5b506103b0610ecc565b6040516103bd91906145a8565b60405180910390f35b3480156103d1575f80fd5b506103ec60048036038101906103e7919061451e565b610ed5565b6040516103f99190614505565b60405180910390f35b34801561040d575f80fd5b50610416610ef2565b60405161042391906145a8565b60405180910390f35b348015610437575f80fd5b50610440610ef8565b005b34801561044d575f80fd5b5061046860048036038101906104639190614549565b611048565b6040516104759190614505565b60405180910390f35b348015610489575f80fd5b50610492611076565b60405161049f9190614505565b60405180910390f35b3480156104b3575f80fd5b506104bc611089565b6040516104c991906145dc565b60405180910390f35b3480156104dd575f80fd5b506104f860048036038101906104f391906145f5565b611091565b005b348015610505575f80fd5b50610520600480360381019061051b91906145f5565b61119d565b005b34801561052d575f80fd5b506105366111b1565b6040516105439190614505565b60405180910390f35b348015610557575f80fd5b506105606111c4565b60405161056d9190614640565b60405180910390f35b348015610581575f80fd5b5061058a6111e9565b6040516105979190614668565b60405180910390f35b3480156105ab575f80fd5b506105c660048036038101906105c1919061451e565b61120e565b6040516105d39190614505565b60405180910390f35b3480156105e7575f80fd5b5061060260048036038101906105fd919061451e565b61122b565b005b34801561060f575f80fd5b5061061861137d565b60405161062591906145a8565b60405180910390f35b348015610639575f80fd5b50610654600480360381019061064f919061451e565b611383565b005b348015610661575f80fd5b5061066a611622565b60405161067791906145a8565b60405180910390f35b34801561068b575f80fd5b506106a660048036038101906106a1919061451e565b611628565b6040516106b39190614505565b60405180910390f35b3480156106c7575f80fd5b506106e260048036038101906106dd919061451e565b611645565b6040516106ef91906145a8565b60405180910390f35b348015610703575f80fd5b5061070c61168a565b005b348015610719575f80fd5b5061072261169d565b60405161072f91906146a1565b60405180910390f35b348015610743575f80fd5b5061074c6116c2565b60405161075991906145a8565b60405180910390f35b34801561076d575f80fd5b50610788600480360381019061078391906144ad565b6116da565b005b348015610795575f80fd5b506107b060048036038101906107ab91906146e4565b6116fa565b005b3480156107bd575f80fd5b506107d860048036038101906107d391906145f5565b6118fe565b6040516107e59190614668565b60405180910390f35b3480156107f9575f80fd5b50610802611939565b60405161080f9190614668565b60405180910390f35b348015610823575f80fd5b5061082c611961565b005b348015610839575f80fd5b50610842611c5e565b60405161084f9190614668565b60405180910390f35b348015610863575f80fd5b5061086c611c83565b6040516108799190614388565b60405180910390f35b34801561088d575f80fd5b506108a860048036038101906108a39190614748565b611d13565b005b3480156108b5575f80fd5b506108d060048036038101906108cb91906144ad565b611e32565b6040516108dd9190614505565b60405180910390f35b3480156108f1575f80fd5b506108fa611e54565b60405161090791906145a8565b60405180910390f35b34801561091b575f80fd5b50610924611e5a565b60405161093191906145a8565b60405180910390f35b348015610945575f80fd5b50610960600480360381019061095b9190614773565b611e60565b005b34801561096d575f80fd5b5061098860048036038101906109839190614748565b611fe3565b005b348015610995575f80fd5b506109b060048036038101906109ab919061451e565b612102565b6040516109bd9190614668565b60405180910390f35b3480156109d1575f80fd5b506109ec60048036038101906109e79190614748565b612786565b005b3480156109f9575f80fd5b50610a146004803603810190610a0f919061451e565b6128a5565b005b348015610a21575f80fd5b50610a2a6129f7565b604051610a379190614505565b60405180910390f35b348015610a4b575f80fd5b50610a666004803603810190610a6191906147c3565b612a0a565b604051610a7391906145a8565b60405180910390f35b348015610a87575f80fd5b50610aa26004803603810190610a9d91906145f5565b612a8c565b005b348015610aaf575f80fd5b50610ab8612bfb565b604051610ac59190614668565b60405180910390f35b348015610ad9575f80fd5b50610af46004803603810190610aef919061451e565b612c20565b005b348015610b01575f80fd5b50610b0a612ca4565b604051610b1791906145a8565b60405180910390f35b606060038054610b2f9061482e565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5b9061482e565b8015610ba65780601f10610b7d57610100808354040283529160200191610ba6565b820191905f5260205f20905b815481529060010190602001808311610b8957829003601f168201915b5050505050905090565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f80610bdf612caa565b9050610bec818585612cb1565b600191505092915050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610c845750610c55611939565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b80610cba57503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610cf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf0906148a8565b60405180910390fd5b8060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610d46816001805f6116fa565b50565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610dd65750610da7611939565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b80610e0c57503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610e4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e42906148a8565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401610e869291906148c6565b6020604051808303815f875af1158015610ea2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ec69190614901565b50505050565b5f600254905090565b6017602052805f5260405f205f915054906101000a900460ff1681565b600e5481565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610f855750610f56611939565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b80610fbb57503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610ffa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff1906148a8565b60405180910390fd5b5f471161103c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103390614976565b60405180910390fd5b6110463347612cc3565b565b5f80611052612caa565b905061105f858285612d39565b61106a858585612dcb565b60019150509392505050565b601460019054906101000a900460ff1681565b5f6012905090565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061111e57506110ef611939565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b8061115457503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611193576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118a906148a8565b60405180910390fd5b80600d8190555050565b6111ae6111a8612caa565b82612ebb565b50565b600c60149054906101000a900460ff1681565b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6016602052805f5260405f205f915054906101000a900460ff1681565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806112b85750611289611939565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b806112ee57503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61132d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611324906148a8565b60405180910390fd5b8060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061137a816001805f6116fa565b50565b60135481565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061141057506113e1611939565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b8061144657503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611485576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147c906148a8565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036114f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ea906149de565b60405180910390fd5b80600c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160155f600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160175f600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b60105481565b6015602052805f5260405f205f915054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b611692612f3a565b61169b5f612fc1565b565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60016019805490506116d59190614a29565b905090565b6116ec826116e6612caa565b83612d39565b6116f68282612ebb565b5050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806117875750611758611939565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b806117bd57503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6117fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f3906148a8565b60405180910390fd5b8260165f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508160155f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508060175f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050505050565b6019818154811061190d575f80fd5b905f5260205f20015f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806119ee57506119bf611939565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b80611a2457503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611a63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5a906148a8565b60405180910390fd5b5f6001601980549050611a769190614a29565b90505f8111611aba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab190614aa6565b60405180910390fd5b5f81600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611b169190614668565b602060405180830381865afa158015611b31573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b559190614ad8565b611b5f9190614b30565b90505f600190505b828111611c5957600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60198381548110611bbf57611bbe614b60565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b8152600401611c059291906148c6565b6020604051808303815f875af1158015611c21573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c459190614901565b508080611c5190614b8d565b915050611b67565b505050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060048054611c929061482e565b80601f0160208091040260200160405190810160405280929190818152602001828054611cbe9061482e565b8015611d095780601f10611ce057610100808354040283529160200191611d09565b820191905f5260205f20905b815481529060010190602001808311611cec57829003601f168201915b5050505050905090565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480611da05750611d71611939565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b80611dd657503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611e15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0c906148a8565b60405180910390fd5b80600c60156101000a81548160ff02191690831515021790555050565b5f80611e3c612caa565b9050611e49818585612dcb565b600191505092915050565b60125481565b600f5481565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480611eed5750611ebe611939565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b80611f2357503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611f62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f59906148a8565b60405180910390fd5b5f818385611f709190614bd4565b611f7a9190614bd4565b90506107d0811115611fc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb890614c51565b60405180910390fd5b81600f8190555083600e81905550826010819055508060118190555050505050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806120705750612041611939565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b806120a657503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6120e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120dc906148a8565b60405180910390fd5b80600c60146101000a81548160ff02191690831515021790555050565b5f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806121905750612161611939565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b806121c657503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b612205576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121fc906148a8565b60405180910390fd5b5f8290508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612252573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122769190614c83565b73ffffffffffffffffffffffffffffffffffffffff1663e6a4390530600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122fc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123209190614c83565b6040518363ffffffff1660e01b815260040161233d929190614cae565b602060405180830381865afa158015612358573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061237c9190614c83565b91505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612528578073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123fa573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061241e9190614c83565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124a4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124c89190614c83565b6040518363ffffffff1660e01b81526004016124e5929190614cae565b6020604051808303815f875af1158015612501573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125259190614c83565b91505b81600c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160155f600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160175f600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160155f600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160175f600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050919050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061281357506127e4611939565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b8061284957503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b612888576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287f906148a8565b60405180910390fd5b80601460016101000a81548160ff02191690831515021790555050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806129325750612903611939565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b8061296857503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6129a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299e906148a8565b60405180910390fd5b8060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506129f4816001805f6116fa565b50565b600c60159054906101000a900460ff1681565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480612b195750612aea611939565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b80612b4f57503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b612b8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b85906148a8565b60405180910390fd5b600a811015612bd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bc990614d45565b60405180910390fd5b612710612bdd610ecc565b82612be89190614d63565b612bf29190614b30565b60128190555050565b600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612c28612f3a565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612c98575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401612c8f9190614668565b60405180910390fd5b612ca181612fc1565b50565b60115481565b5f33905090565b612cbe8383836001613084565b505050565b5f8273ffffffffffffffffffffffffffffffffffffffff1682604051612ce890614dd1565b5f6040518083038185875af1925050503d805f8114612d22576040519150601f19603f3d011682016040523d82523d5f602084013e612d27565b606091505b5050905080612d34575f80fd5b505050565b5f612d448484612a0a565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114612dc55781811015612db6578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401612dad93929190614de5565b60405180910390fd5b612dc484848484035f613084565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612e3b575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401612e329190614668565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612eab575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401612ea29190614668565b60405180910390fd5b612eb6838383613253565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612f2b575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401612f229190614668565b60405180910390fd5b612f36825f83613253565b5050565b612f42612caa565b73ffffffffffffffffffffffffffffffffffffffff16612f60611939565b73ffffffffffffffffffffffffffffffffffffffff1614612fbf57612f83612caa565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401612fb69190614668565b60405180910390fd5b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036130f4575f6040517fe602df050000000000000000000000000000000000000000000000000000000081526004016130eb9190614668565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613164575f6040517f94280d6200000000000000000000000000000000000000000000000000000000815260040161315b9190614668565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550801561324d578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161324491906145a8565b60405180910390a35b50505050565b60145f9054906101000a900460ff161561327757613272838383613605565b613600565b601460019054906101000a900460ff161580156132db575060155f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b801561331357505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b801561334b57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156133a95760125461335c83611645565b826133679190614bd4565b11156133a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161339f90614e64565b60405180910390fd5b5b5f6133b330611645565b90505f600d5482101590508080156134185750600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156134715750600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156134895750600c60149054906101000a900460ff165b156134b357600c60159054906101000a900460ff16156134a957600d5491505b6134b28261381e565b5b5f60115411801561350b575060165f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b801561355e575060165f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b801561359657505f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156135ce57505f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b156135e0576135dd8584613988565b92505b6135eb858585613605565b6135f485613a0f565b6135fd84613a0f565b50505b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613655578060025f8282546136499190614bd4565b92505081905550613723565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156136de578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016136d593929190614de5565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361376a578060025f82825403925050819055506137b4565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161381191906145a8565b60405180910390a3505050565b600160145f6101000a81548160ff0219169083151502179055505f6138756002613867601154613859600f5487613d6490919063ffffffff16565b613d7990919063ffffffff16565b613d7990919063ffffffff16565b90505f4790506138966138918385613d8e90919063ffffffff16565b613da3565b5f6138aa8247613d8e90919063ffffffff16565b90505f6138d2856138c48685613d6490919063ffffffff16565b613d7990919063ffffffff16565b90506138de8482613fd9565b5f4790505f613919600f546011546138f69190614a29565b61390b600e5485613d6490919063ffffffff16565b613d7990919063ffffffff16565b90505f61392f8284613d8e90919063ffffffff16565b905061395c60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612cc3565b613965816140d3565b505050505050505f60145f6101000a81548160ff02191690831515021790555050565b5f600160145f6101000a81548160ff0219169083151502179055505f6139cd6127106139bf60115486613d6490919063ffffffff16565b613d7990919063ffffffff16565b90506139da843083612dcb565b6139ed8184613d8e90919063ffffffff16565b9150505f60145f6101000a81548160ff02191690831515021790555092915050565b60175f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16613d61575f60185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205414613ca657601354613aad82611645565b1015613ca1575f60196001601980549050613ac89190614a29565b81548110613ad957613ad8614b60565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905080601960185f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205481548110613b5557613b54614b60565b5b905f5260205f20015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506019805480613bac57613bab614e82565b5b600190038181905f5260205f20015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905560185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205460185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505f60185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b613d60565b601354613cb282611645565b10613d5f5760198054905060185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550601981908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b5b50565b5f8183613d719190614d63565b905092915050565b5f8183613d869190614b30565b905092915050565b5f8183613d9b9190614a29565b905092915050565b5f600267ffffffffffffffff811115613dbf57613dbe614eaf565b5b604051908082528060200260200182016040528015613ded5781602001602082028036833780820191505090505b50905030815f81518110613e0457613e03614b60565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613ea8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613ecc9190614c83565b81600181518110613ee057613edf614b60565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613f4630600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612cb1565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401613fa8959493929190614fcc565b5f604051808303815f87803b158015613fbf575f80fd5b505af1158015613fd1573d5f803e3d5ffd5b505050505050565b61400530600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612cb1565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161408b96959493929190615024565b60606040518083038185885af11580156140a7573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906140cc9190615083565b5050505050565b5f600267ffffffffffffffff8111156140ef576140ee614eaf565b5b60405190808252806020026020018201604052801561411d5781602001602082028036833780820191505090505b509050600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561418a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906141ae9190614c83565b815f815181106141c1576141c0614b60565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160018151811061423157614230614b60565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de95835f8430426040518663ffffffff1660e01b81526004016142cc94939291906150d3565b5f604051808303818588803b1580156142e3575f80fd5b505af11580156142f5573d5f803e3d5ffd5b50505050505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561433557808201518184015260208101905061431a565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61435a826142fe565b6143648185614308565b9350614374818560208601614318565b61437d81614340565b840191505092915050565b5f6020820190508181035f8301526143a08184614350565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f819050919050565b5f6143ea6143e56143e0846143a8565b6143c7565b6143a8565b9050919050565b5f6143fb826143d0565b9050919050565b5f61440c826143f1565b9050919050565b61441c81614402565b82525050565b5f6020820190506144355f830184614413565b92915050565b5f80fd5b5f614449826143a8565b9050919050565b6144598161443f565b8114614463575f80fd5b50565b5f8135905061447481614450565b92915050565b5f819050919050565b61448c8161447a565b8114614496575f80fd5b50565b5f813590506144a781614483565b92915050565b5f80604083850312156144c3576144c261443b565b5b5f6144d085828601614466565b92505060206144e185828601614499565b9150509250929050565b5f8115159050919050565b6144ff816144eb565b82525050565b5f6020820190506145185f8301846144f6565b92915050565b5f602082840312156145335761453261443b565b5b5f61454084828501614466565b91505092915050565b5f805f606084860312156145605761455f61443b565b5b5f61456d86828701614466565b935050602061457e86828701614466565b925050604061458f86828701614499565b9150509250925092565b6145a28161447a565b82525050565b5f6020820190506145bb5f830184614599565b92915050565b5f60ff82169050919050565b6145d6816145c1565b82525050565b5f6020820190506145ef5f8301846145cd565b92915050565b5f6020828403121561460a5761460961443b565b5b5f61461784828501614499565b91505092915050565b5f61462a826143f1565b9050919050565b61463a81614620565b82525050565b5f6020820190506146535f830184614631565b92915050565b6146628161443f565b82525050565b5f60208201905061467b5f830184614659565b92915050565b5f61468b826143a8565b9050919050565b61469b81614681565b82525050565b5f6020820190506146b45f830184614692565b92915050565b6146c3816144eb565b81146146cd575f80fd5b50565b5f813590506146de816146ba565b92915050565b5f805f80608085870312156146fc576146fb61443b565b5b5f61470987828801614466565b945050602061471a878288016146d0565b935050604061472b878288016146d0565b925050606061473c878288016146d0565b91505092959194509250565b5f6020828403121561475d5761475c61443b565b5b5f61476a848285016146d0565b91505092915050565b5f805f6060848603121561478a5761478961443b565b5b5f61479786828701614499565b93505060206147a886828701614499565b92505060406147b986828701614499565b9150509250925092565b5f80604083850312156147d9576147d861443b565b5b5f6147e685828601614466565b92505060206147f785828601614466565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061484557607f821691505b60208210810361485857614857614801565b5b50919050565b7f4572726f723a20446576656c6f706572205265717569726564210000000000005f82015250565b5f614892601a83614308565b915061489d8261485e565b602082019050919050565b5f6020820190508181035f8301526148bf81614886565b9050919050565b5f6040820190506148d95f830185614659565b6148e66020830184614599565b9392505050565b5f815190506148fb816146ba565b92915050565b5f602082840312156149165761491561443b565b5b5f614923848285016148ed565b91505092915050565b7f696e73756666696369656e74204554482062616c616e636500000000000000005f82015250565b5f614960601883614308565b915061496b8261492c565b602082019050919050565b5f6020820190508181035f83015261498d81614954565b9050919050565b7f706169722063616e6e6f7420626520746865207a65726f2061646472657373005f82015250565b5f6149c8601f83614308565b91506149d382614994565b602082019050919050565b5f6020820190508181035f8301526149f5816149bc565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f614a338261447a565b9150614a3e8361447a565b9250828203905081811115614a5657614a556149fc565b5b92915050565b7f4e6f20456c696769626c652075736572730000000000000000000000000000005f82015250565b5f614a90601183614308565b9150614a9b82614a5c565b602082019050919050565b5f6020820190508181035f830152614abd81614a84565b9050919050565b5f81519050614ad281614483565b92915050565b5f60208284031215614aed57614aec61443b565b5b5f614afa84828501614ac4565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f614b3a8261447a565b9150614b458361447a565b925082614b5557614b54614b03565b5b828204905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f614b978261447a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614bc957614bc86149fc565b5b600182019050919050565b5f614bde8261447a565b9150614be98361447a565b9250828201905080821115614c0157614c006149fc565b5b92915050565b7f6d617820616c6c6f7765642074617820323025000000000000000000000000005f82015250565b5f614c3b601383614308565b9150614c4682614c07565b602082019050919050565b5f6020820190508181035f830152614c6881614c2f565b9050919050565b5f81519050614c7d81614450565b92915050565b5f60208284031215614c9857614c9761443b565b5b5f614ca584828501614c6f565b91505092915050565b5f604082019050614cc15f830185614659565b614cce6020830184614659565b9392505050565b7f4572726f72203a204d696e696d756d206d617857616c6c65744c696d697420695f8201527f7320302e31250000000000000000000000000000000000000000000000000000602082015250565b5f614d2f602683614308565b9150614d3a82614cd5565b604082019050919050565b5f6020820190508181035f830152614d5c81614d23565b9050919050565b5f614d6d8261447a565b9150614d788361447a565b9250828202614d868161447a565b91508282048414831517614d9d57614d9c6149fc565b5b5092915050565b5f81905092915050565b50565b5f614dbc5f83614da4565b9150614dc782614dae565b5f82019050919050565b5f614ddb82614db1565b9150819050919050565b5f606082019050614df85f830186614659565b614e056020830185614599565b614e126040830184614599565b949350505050565b7f457863656564696e6720746865204d61782057616c6c6574204c696d697421005f82015250565b5f614e4e601f83614308565b9150614e5982614e1a565b602082019050919050565b5f6020820190508181035f830152614e7b81614e42565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f819050919050565b5f614eff614efa614ef584614edc565b6143c7565b61447a565b9050919050565b614f0f81614ee5565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b614f478161443f565b82525050565b5f614f588383614f3e565b60208301905092915050565b5f602082019050919050565b5f614f7a82614f15565b614f848185614f1f565b9350614f8f83614f2f565b805f5b83811015614fbf578151614fa68882614f4d565b9750614fb183614f64565b925050600181019050614f92565b5085935050505092915050565b5f60a082019050614fdf5f830188614599565b614fec6020830187614f06565b8181036040830152614ffe8186614f70565b905061500d6060830185614659565b61501a6080830184614599565b9695505050505050565b5f60c0820190506150375f830189614659565b6150446020830188614599565b6150516040830187614f06565b61505e6060830186614f06565b61506b6080830185614659565b61507860a0830184614599565b979650505050505050565b5f805f6060848603121561509a5761509961443b565b5b5f6150a786828701614ac4565b93505060206150b886828701614ac4565b92505060406150c986828701614ac4565b9150509250925092565b5f6080820190506150e65f830187614f06565b81810360208301526150f88186614f70565b90506151076040830185614659565b6151146060830184614599565b9594505050505056fea264697066735822122012f4443a845fb437be5a05e62292f37426a11b853d38349330b3534a06d70aac64736f6c63430008160033

Deployed Bytecode

0x6080604052600436106102b1575f3560e01c8063715018a611610174578063aa4bde28116100db578063d477f05f11610094578063e99990da1161006e578063e99990da14610a7c578063f242ab4114610aa4578063f2fde38b14610ace578063fe85b42b14610af6576102b8565b8063d477f05f146109ee578063da00097d14610a16578063dd62ed3e14610a40576102b8565b8063aa4bde28146108e6578063be617fa014610910578063bf9388971461093a578063c49b9a8014610962578063c851cc321461098a578063d2ee125e146109c6576102b8565b80638da5cb5b1161012d5780638da5cb5b146107ee5780638f73c5ae1461081857806391cca3db1461082e57806395d89b4114610858578063a5d69d1f14610882578063a9059cbb146108aa576102b8565b8063715018a6146106f857806375f0a8741461070e5780637837b01a1461073857806379cc6790146107625780637cee76e41461078a57806384064671146107b2576102b8565b80633b97084a116102185780635d098b38116101d15780635d098b38146105dc5780635ea4d29c146106045780636bc8af841461062e5780636e5c59ae146106565780637019052b1461068057806370a08231146106bc576102b8565b80633b97084a146104d257806342966c68146104fa5780634a74bb02146105225780634dede3de1461054c5780634ec39ba9146105765780634eea2d1f146105a0576102b8565b80631af41e5d1161026a5780631af41e5d146103c65780631d2cb02d1461040257806320800a001461042c57806323b872dd146104425780632c468fe91461047e578063313ce567146104a8576102b8565b806306fdde03146102bc5780630758d924146102e6578063095ea7b3146103105780630b01aa511461034c5780630d65df9b1461037457806318160ddd1461039c576102b8565b366102b857005b5f80fd5b3480156102c7575f80fd5b506102d0610b20565b6040516102dd9190614388565b60405180910390f35b3480156102f1575f80fd5b506102fa610bb0565b6040516103079190614422565b60405180910390f35b34801561031b575f80fd5b50610336600480360381019061033191906144ad565b610bd5565b6040516103439190614505565b60405180910390f35b348015610357575f80fd5b50610372600480360381019061036d919061451e565b610bf7565b005b34801561037f575f80fd5b5061039a60048036038101906103959190614549565b610d49565b005b3480156103a7575f80fd5b506103b0610ecc565b6040516103bd91906145a8565b60405180910390f35b3480156103d1575f80fd5b506103ec60048036038101906103e7919061451e565b610ed5565b6040516103f99190614505565b60405180910390f35b34801561040d575f80fd5b50610416610ef2565b60405161042391906145a8565b60405180910390f35b348015610437575f80fd5b50610440610ef8565b005b34801561044d575f80fd5b5061046860048036038101906104639190614549565b611048565b6040516104759190614505565b60405180910390f35b348015610489575f80fd5b50610492611076565b60405161049f9190614505565b60405180910390f35b3480156104b3575f80fd5b506104bc611089565b6040516104c991906145dc565b60405180910390f35b3480156104dd575f80fd5b506104f860048036038101906104f391906145f5565b611091565b005b348015610505575f80fd5b50610520600480360381019061051b91906145f5565b61119d565b005b34801561052d575f80fd5b506105366111b1565b6040516105439190614505565b60405180910390f35b348015610557575f80fd5b506105606111c4565b60405161056d9190614640565b60405180910390f35b348015610581575f80fd5b5061058a6111e9565b6040516105979190614668565b60405180910390f35b3480156105ab575f80fd5b506105c660048036038101906105c1919061451e565b61120e565b6040516105d39190614505565b60405180910390f35b3480156105e7575f80fd5b5061060260048036038101906105fd919061451e565b61122b565b005b34801561060f575f80fd5b5061061861137d565b60405161062591906145a8565b60405180910390f35b348015610639575f80fd5b50610654600480360381019061064f919061451e565b611383565b005b348015610661575f80fd5b5061066a611622565b60405161067791906145a8565b60405180910390f35b34801561068b575f80fd5b506106a660048036038101906106a1919061451e565b611628565b6040516106b39190614505565b60405180910390f35b3480156106c7575f80fd5b506106e260048036038101906106dd919061451e565b611645565b6040516106ef91906145a8565b60405180910390f35b348015610703575f80fd5b5061070c61168a565b005b348015610719575f80fd5b5061072261169d565b60405161072f91906146a1565b60405180910390f35b348015610743575f80fd5b5061074c6116c2565b60405161075991906145a8565b60405180910390f35b34801561076d575f80fd5b50610788600480360381019061078391906144ad565b6116da565b005b348015610795575f80fd5b506107b060048036038101906107ab91906146e4565b6116fa565b005b3480156107bd575f80fd5b506107d860048036038101906107d391906145f5565b6118fe565b6040516107e59190614668565b60405180910390f35b3480156107f9575f80fd5b50610802611939565b60405161080f9190614668565b60405180910390f35b348015610823575f80fd5b5061082c611961565b005b348015610839575f80fd5b50610842611c5e565b60405161084f9190614668565b60405180910390f35b348015610863575f80fd5b5061086c611c83565b6040516108799190614388565b60405180910390f35b34801561088d575f80fd5b506108a860048036038101906108a39190614748565b611d13565b005b3480156108b5575f80fd5b506108d060048036038101906108cb91906144ad565b611e32565b6040516108dd9190614505565b60405180910390f35b3480156108f1575f80fd5b506108fa611e54565b60405161090791906145a8565b60405180910390f35b34801561091b575f80fd5b50610924611e5a565b60405161093191906145a8565b60405180910390f35b348015610945575f80fd5b50610960600480360381019061095b9190614773565b611e60565b005b34801561096d575f80fd5b5061098860048036038101906109839190614748565b611fe3565b005b348015610995575f80fd5b506109b060048036038101906109ab919061451e565b612102565b6040516109bd9190614668565b60405180910390f35b3480156109d1575f80fd5b506109ec60048036038101906109e79190614748565b612786565b005b3480156109f9575f80fd5b50610a146004803603810190610a0f919061451e565b6128a5565b005b348015610a21575f80fd5b50610a2a6129f7565b604051610a379190614505565b60405180910390f35b348015610a4b575f80fd5b50610a666004803603810190610a6191906147c3565b612a0a565b604051610a7391906145a8565b60405180910390f35b348015610a87575f80fd5b50610aa26004803603810190610a9d91906145f5565b612a8c565b005b348015610aaf575f80fd5b50610ab8612bfb565b604051610ac59190614668565b60405180910390f35b348015610ad9575f80fd5b50610af46004803603810190610aef919061451e565b612c20565b005b348015610b01575f80fd5b50610b0a612ca4565b604051610b1791906145a8565b60405180910390f35b606060038054610b2f9061482e565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5b9061482e565b8015610ba65780601f10610b7d57610100808354040283529160200191610ba6565b820191905f5260205f20905b815481529060010190602001808311610b8957829003601f168201915b5050505050905090565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f80610bdf612caa565b9050610bec818585612cb1565b600191505092915050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610c845750610c55611939565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b80610cba57503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610cf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf0906148a8565b60405180910390fd5b8060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610d46816001805f6116fa565b50565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610dd65750610da7611939565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b80610e0c57503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610e4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e42906148a8565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401610e869291906148c6565b6020604051808303815f875af1158015610ea2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ec69190614901565b50505050565b5f600254905090565b6017602052805f5260405f205f915054906101000a900460ff1681565b600e5481565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610f855750610f56611939565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b80610fbb57503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610ffa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff1906148a8565b60405180910390fd5b5f471161103c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103390614976565b60405180910390fd5b6110463347612cc3565b565b5f80611052612caa565b905061105f858285612d39565b61106a858585612dcb565b60019150509392505050565b601460019054906101000a900460ff1681565b5f6012905090565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061111e57506110ef611939565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b8061115457503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611193576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118a906148a8565b60405180910390fd5b80600d8190555050565b6111ae6111a8612caa565b82612ebb565b50565b600c60149054906101000a900460ff1681565b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6016602052805f5260405f205f915054906101000a900460ff1681565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806112b85750611289611939565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b806112ee57503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61132d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611324906148a8565b60405180910390fd5b8060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061137a816001805f6116fa565b50565b60135481565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061141057506113e1611939565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b8061144657503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611485576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147c906148a8565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036114f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ea906149de565b60405180910390fd5b80600c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160155f600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160175f600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b60105481565b6015602052805f5260405f205f915054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b611692612f3a565b61169b5f612fc1565b565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60016019805490506116d59190614a29565b905090565b6116ec826116e6612caa565b83612d39565b6116f68282612ebb565b5050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806117875750611758611939565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b806117bd57503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6117fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f3906148a8565b60405180910390fd5b8260165f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508160155f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508060175f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050505050565b6019818154811061190d575f80fd5b905f5260205f20015f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806119ee57506119bf611939565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b80611a2457503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611a63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5a906148a8565b60405180910390fd5b5f6001601980549050611a769190614a29565b90505f8111611aba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab190614aa6565b60405180910390fd5b5f81600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611b169190614668565b602060405180830381865afa158015611b31573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b559190614ad8565b611b5f9190614b30565b90505f600190505b828111611c5957600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60198381548110611bbf57611bbe614b60565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b8152600401611c059291906148c6565b6020604051808303815f875af1158015611c21573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c459190614901565b508080611c5190614b8d565b915050611b67565b505050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060048054611c929061482e565b80601f0160208091040260200160405190810160405280929190818152602001828054611cbe9061482e565b8015611d095780601f10611ce057610100808354040283529160200191611d09565b820191905f5260205f20905b815481529060010190602001808311611cec57829003601f168201915b5050505050905090565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480611da05750611d71611939565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b80611dd657503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611e15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0c906148a8565b60405180910390fd5b80600c60156101000a81548160ff02191690831515021790555050565b5f80611e3c612caa565b9050611e49818585612dcb565b600191505092915050565b60125481565b600f5481565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480611eed5750611ebe611939565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b80611f2357503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611f62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f59906148a8565b60405180910390fd5b5f818385611f709190614bd4565b611f7a9190614bd4565b90506107d0811115611fc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb890614c51565b60405180910390fd5b81600f8190555083600e81905550826010819055508060118190555050505050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806120705750612041611939565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b806120a657503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6120e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120dc906148a8565b60405180910390fd5b80600c60146101000a81548160ff02191690831515021790555050565b5f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806121905750612161611939565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b806121c657503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b612205576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121fc906148a8565b60405180910390fd5b5f8290508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612252573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122769190614c83565b73ffffffffffffffffffffffffffffffffffffffff1663e6a4390530600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122fc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123209190614c83565b6040518363ffffffff1660e01b815260040161233d929190614cae565b602060405180830381865afa158015612358573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061237c9190614c83565b91505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612528578073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123fa573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061241e9190614c83565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124a4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124c89190614c83565b6040518363ffffffff1660e01b81526004016124e5929190614cae565b6020604051808303815f875af1158015612501573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125259190614c83565b91505b81600c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160155f600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160175f600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160155f600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160175f600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050919050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061281357506127e4611939565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b8061284957503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b612888576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287f906148a8565b60405180910390fd5b80601460016101000a81548160ff02191690831515021790555050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806129325750612903611939565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b8061296857503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6129a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299e906148a8565b60405180910390fd5b8060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506129f4816001805f6116fa565b50565b600c60159054906101000a900460ff1681565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480612b195750612aea611939565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b80612b4f57503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b612b8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b85906148a8565b60405180910390fd5b600a811015612bd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bc990614d45565b60405180910390fd5b612710612bdd610ecc565b82612be89190614d63565b612bf29190614b30565b60128190555050565b600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612c28612f3a565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612c98575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401612c8f9190614668565b60405180910390fd5b612ca181612fc1565b50565b60115481565b5f33905090565b612cbe8383836001613084565b505050565b5f8273ffffffffffffffffffffffffffffffffffffffff1682604051612ce890614dd1565b5f6040518083038185875af1925050503d805f8114612d22576040519150601f19603f3d011682016040523d82523d5f602084013e612d27565b606091505b5050905080612d34575f80fd5b505050565b5f612d448484612a0a565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114612dc55781811015612db6578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401612dad93929190614de5565b60405180910390fd5b612dc484848484035f613084565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612e3b575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401612e329190614668565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612eab575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401612ea29190614668565b60405180910390fd5b612eb6838383613253565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612f2b575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401612f229190614668565b60405180910390fd5b612f36825f83613253565b5050565b612f42612caa565b73ffffffffffffffffffffffffffffffffffffffff16612f60611939565b73ffffffffffffffffffffffffffffffffffffffff1614612fbf57612f83612caa565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401612fb69190614668565b60405180910390fd5b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036130f4575f6040517fe602df050000000000000000000000000000000000000000000000000000000081526004016130eb9190614668565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613164575f6040517f94280d6200000000000000000000000000000000000000000000000000000000815260040161315b9190614668565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550801561324d578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161324491906145a8565b60405180910390a35b50505050565b60145f9054906101000a900460ff161561327757613272838383613605565b613600565b601460019054906101000a900460ff161580156132db575060155f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b801561331357505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b801561334b57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156133a95760125461335c83611645565b826133679190614bd4565b11156133a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161339f90614e64565b60405180910390fd5b5b5f6133b330611645565b90505f600d5482101590508080156134185750600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156134715750600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156134895750600c60149054906101000a900460ff165b156134b357600c60159054906101000a900460ff16156134a957600d5491505b6134b28261381e565b5b5f60115411801561350b575060165f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b801561355e575060165f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b801561359657505f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156135ce57505f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b156135e0576135dd8584613988565b92505b6135eb858585613605565b6135f485613a0f565b6135fd84613a0f565b50505b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613655578060025f8282546136499190614bd4565b92505081905550613723565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156136de578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016136d593929190614de5565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361376a578060025f82825403925050819055506137b4565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161381191906145a8565b60405180910390a3505050565b600160145f6101000a81548160ff0219169083151502179055505f6138756002613867601154613859600f5487613d6490919063ffffffff16565b613d7990919063ffffffff16565b613d7990919063ffffffff16565b90505f4790506138966138918385613d8e90919063ffffffff16565b613da3565b5f6138aa8247613d8e90919063ffffffff16565b90505f6138d2856138c48685613d6490919063ffffffff16565b613d7990919063ffffffff16565b90506138de8482613fd9565b5f4790505f613919600f546011546138f69190614a29565b61390b600e5485613d6490919063ffffffff16565b613d7990919063ffffffff16565b90505f61392f8284613d8e90919063ffffffff16565b905061395c60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612cc3565b613965816140d3565b505050505050505f60145f6101000a81548160ff02191690831515021790555050565b5f600160145f6101000a81548160ff0219169083151502179055505f6139cd6127106139bf60115486613d6490919063ffffffff16565b613d7990919063ffffffff16565b90506139da843083612dcb565b6139ed8184613d8e90919063ffffffff16565b9150505f60145f6101000a81548160ff02191690831515021790555092915050565b60175f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16613d61575f60185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205414613ca657601354613aad82611645565b1015613ca1575f60196001601980549050613ac89190614a29565b81548110613ad957613ad8614b60565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905080601960185f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205481548110613b5557613b54614b60565b5b905f5260205f20015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506019805480613bac57613bab614e82565b5b600190038181905f5260205f20015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905560185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205460185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505f60185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b613d60565b601354613cb282611645565b10613d5f5760198054905060185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550601981908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b5b50565b5f8183613d719190614d63565b905092915050565b5f8183613d869190614b30565b905092915050565b5f8183613d9b9190614a29565b905092915050565b5f600267ffffffffffffffff811115613dbf57613dbe614eaf565b5b604051908082528060200260200182016040528015613ded5781602001602082028036833780820191505090505b50905030815f81518110613e0457613e03614b60565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613ea8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613ecc9190614c83565b81600181518110613ee057613edf614b60565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613f4630600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612cb1565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401613fa8959493929190614fcc565b5f604051808303815f87803b158015613fbf575f80fd5b505af1158015613fd1573d5f803e3d5ffd5b505050505050565b61400530600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612cb1565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161408b96959493929190615024565b60606040518083038185885af11580156140a7573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906140cc9190615083565b5050505050565b5f600267ffffffffffffffff8111156140ef576140ee614eaf565b5b60405190808252806020026020018201604052801561411d5781602001602082028036833780820191505090505b509050600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561418a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906141ae9190614c83565b815f815181106141c1576141c0614b60565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160018151811061423157614230614b60565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de95835f8430426040518663ffffffff1660e01b81526004016142cc94939291906150d3565b5f604051808303818588803b1580156142e3575f80fd5b505af11580156142f5573d5f803e3d5ffd5b50505050505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561433557808201518184015260208101905061431a565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61435a826142fe565b6143648185614308565b9350614374818560208601614318565b61437d81614340565b840191505092915050565b5f6020820190508181035f8301526143a08184614350565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f819050919050565b5f6143ea6143e56143e0846143a8565b6143c7565b6143a8565b9050919050565b5f6143fb826143d0565b9050919050565b5f61440c826143f1565b9050919050565b61441c81614402565b82525050565b5f6020820190506144355f830184614413565b92915050565b5f80fd5b5f614449826143a8565b9050919050565b6144598161443f565b8114614463575f80fd5b50565b5f8135905061447481614450565b92915050565b5f819050919050565b61448c8161447a565b8114614496575f80fd5b50565b5f813590506144a781614483565b92915050565b5f80604083850312156144c3576144c261443b565b5b5f6144d085828601614466565b92505060206144e185828601614499565b9150509250929050565b5f8115159050919050565b6144ff816144eb565b82525050565b5f6020820190506145185f8301846144f6565b92915050565b5f602082840312156145335761453261443b565b5b5f61454084828501614466565b91505092915050565b5f805f606084860312156145605761455f61443b565b5b5f61456d86828701614466565b935050602061457e86828701614466565b925050604061458f86828701614499565b9150509250925092565b6145a28161447a565b82525050565b5f6020820190506145bb5f830184614599565b92915050565b5f60ff82169050919050565b6145d6816145c1565b82525050565b5f6020820190506145ef5f8301846145cd565b92915050565b5f6020828403121561460a5761460961443b565b5b5f61461784828501614499565b91505092915050565b5f61462a826143f1565b9050919050565b61463a81614620565b82525050565b5f6020820190506146535f830184614631565b92915050565b6146628161443f565b82525050565b5f60208201905061467b5f830184614659565b92915050565b5f61468b826143a8565b9050919050565b61469b81614681565b82525050565b5f6020820190506146b45f830184614692565b92915050565b6146c3816144eb565b81146146cd575f80fd5b50565b5f813590506146de816146ba565b92915050565b5f805f80608085870312156146fc576146fb61443b565b5b5f61470987828801614466565b945050602061471a878288016146d0565b935050604061472b878288016146d0565b925050606061473c878288016146d0565b91505092959194509250565b5f6020828403121561475d5761475c61443b565b5b5f61476a848285016146d0565b91505092915050565b5f805f6060848603121561478a5761478961443b565b5b5f61479786828701614499565b93505060206147a886828701614499565b92505060406147b986828701614499565b9150509250925092565b5f80604083850312156147d9576147d861443b565b5b5f6147e685828601614466565b92505060206147f785828601614466565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061484557607f821691505b60208210810361485857614857614801565b5b50919050565b7f4572726f723a20446576656c6f706572205265717569726564210000000000005f82015250565b5f614892601a83614308565b915061489d8261485e565b602082019050919050565b5f6020820190508181035f8301526148bf81614886565b9050919050565b5f6040820190506148d95f830185614659565b6148e66020830184614599565b9392505050565b5f815190506148fb816146ba565b92915050565b5f602082840312156149165761491561443b565b5b5f614923848285016148ed565b91505092915050565b7f696e73756666696369656e74204554482062616c616e636500000000000000005f82015250565b5f614960601883614308565b915061496b8261492c565b602082019050919050565b5f6020820190508181035f83015261498d81614954565b9050919050565b7f706169722063616e6e6f7420626520746865207a65726f2061646472657373005f82015250565b5f6149c8601f83614308565b91506149d382614994565b602082019050919050565b5f6020820190508181035f8301526149f5816149bc565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f614a338261447a565b9150614a3e8361447a565b9250828203905081811115614a5657614a556149fc565b5b92915050565b7f4e6f20456c696769626c652075736572730000000000000000000000000000005f82015250565b5f614a90601183614308565b9150614a9b82614a5c565b602082019050919050565b5f6020820190508181035f830152614abd81614a84565b9050919050565b5f81519050614ad281614483565b92915050565b5f60208284031215614aed57614aec61443b565b5b5f614afa84828501614ac4565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f614b3a8261447a565b9150614b458361447a565b925082614b5557614b54614b03565b5b828204905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f614b978261447a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614bc957614bc86149fc565b5b600182019050919050565b5f614bde8261447a565b9150614be98361447a565b9250828201905080821115614c0157614c006149fc565b5b92915050565b7f6d617820616c6c6f7765642074617820323025000000000000000000000000005f82015250565b5f614c3b601383614308565b9150614c4682614c07565b602082019050919050565b5f6020820190508181035f830152614c6881614c2f565b9050919050565b5f81519050614c7d81614450565b92915050565b5f60208284031215614c9857614c9761443b565b5b5f614ca584828501614c6f565b91505092915050565b5f604082019050614cc15f830185614659565b614cce6020830184614659565b9392505050565b7f4572726f72203a204d696e696d756d206d617857616c6c65744c696d697420695f8201527f7320302e31250000000000000000000000000000000000000000000000000000602082015250565b5f614d2f602683614308565b9150614d3a82614cd5565b604082019050919050565b5f6020820190508181035f830152614d5c81614d23565b9050919050565b5f614d6d8261447a565b9150614d788361447a565b9250828202614d868161447a565b91508282048414831517614d9d57614d9c6149fc565b5b5092915050565b5f81905092915050565b50565b5f614dbc5f83614da4565b9150614dc782614dae565b5f82019050919050565b5f614ddb82614db1565b9150819050919050565b5f606082019050614df85f830186614659565b614e056020830185614599565b614e126040830184614599565b949350505050565b7f457863656564696e6720746865204d61782057616c6c6574204c696d697421005f82015250565b5f614e4e601f83614308565b9150614e5982614e1a565b602082019050919050565b5f6020820190508181035f830152614e7b81614e42565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f819050919050565b5f614eff614efa614ef584614edc565b6143c7565b61447a565b9050919050565b614f0f81614ee5565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b614f478161443f565b82525050565b5f614f588383614f3e565b60208301905092915050565b5f602082019050919050565b5f614f7a82614f15565b614f848185614f1f565b9350614f8f83614f2f565b805f5b83811015614fbf578151614fa68882614f4d565b9750614fb183614f64565b925050600181019050614f92565b5085935050505092915050565b5f60a082019050614fdf5f830188614599565b614fec6020830187614f06565b8181036040830152614ffe8186614f70565b905061500d6060830185614659565b61501a6080830184614599565b9695505050505050565b5f60c0820190506150375f830189614659565b6150446020830188614599565b6150516040830187614f06565b61505e6060830186614f06565b61506b6080830185614659565b61507860a0830184614599565b979650505050505050565b5f805f6060848603121561509a5761509961443b565b5b5f6150a786828701614ac4565b93505060206150b886828701614ac4565b92505060406150c986828701614ac4565b9150509250925092565b5f6080820190506150e65f830187614f06565b81810360208301526150f88186614f70565b90506151076040830185614659565b6151146060830184614599565b9594505050505056fea264697066735822122012f4443a845fb437be5a05e62292f37426a11b853d38349330b3534a06d70aac64736f6c63430008160033

Deployed Bytecode Sourcemap

39609:12391:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23417:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40380:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25710:190;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47718:163;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51841:154;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24519:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41366:51;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40641:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51487:176;;;;;;;;;;;;;:::i;:::-;;26478:249;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41126:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24370:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45552:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33342:89;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40455:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40231:71;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39971:69;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41291:38;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47498:202;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41020:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45944:299;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40771:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41202:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24681:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17030:103;;;;;;;;;;;;;:::i;:::-;;39713:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45435:109;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33760:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48313:268;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41477:28;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16355:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45034:393;;;;;;;;;;;;;:::i;:::-;;39845:63;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23627:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45807:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25004:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40946:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40706:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47091:395;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45684:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46255:828;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48589:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48181:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40502:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25249:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47934:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40420:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17288:220;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40832:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23417:91;23462:13;23495:5;23488:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23417:91;:::o;40380:33::-;;;;;;;;;;;;;:::o;25710:190::-;25783:4;25800:13;25816:12;:10;:12::i;:::-;25800:28;;25839:31;25848:5;25855:7;25864:5;25839:8;:31::i;:::-;25888:4;25881:11;;;25710:190;;;;:::o;47718:163::-;41568:3;;;;;;;;;;;41554:17;;:10;:17;;;:42;;;;41589:7;:5;:7::i;:::-;41575:21;;:10;:21;;;41554:42;:74;;;;41623:4;41601:27;;:10;:27;;;41554:74;41546:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;47801:13:::1;47789:9;;:25;;;;;;;;;;;;;;;;;;47825:48;47839:13;47855:4;47861::::0;47867:5:::1;47825:13;:48::i;:::-;47718:163:::0;:::o;51841:154::-;41568:3;;;;;;;;;;;41554:17;;:10;:17;;;:42;;;;41589:7;:5;:7::i;:::-;41575:21;;:10;:21;;;41554:42;:74;;;;41623:4;41601:27;;:10;:27;;;41554:74;41546:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;51953:10:::1;51946:27;;;51974:3;51979:7;51946:41;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;51841:154:::0;;;:::o;24519:99::-;24571:7;24598:12;;24591:19;;24519:99;:::o;41366:51::-;;;;;;;;;;;;;;;;;;;;;;:::o;40641:33::-;;;;:::o;51487:176::-;41568:3;;;;;;;;;;;41554:17;;:10;:17;;;:42;;;;41589:7;:5;:7::i;:::-;41575:21;;:10;:21;;;41554:42;:74;;;;41623:4;41601:27;;:10;:27;;;41554:74;41546:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;51567:1:::1;51543:21;:25;51535:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;51608:47;51620:10;51633:21;51608:11;:47::i;:::-;51487:176::o:0;26478:249::-;26565:4;26582:15;26600:12;:10;:12::i;:::-;26582:30;;26623:37;26639:4;26645:7;26654:5;26623:15;:37::i;:::-;26671:26;26681:4;26687:2;26691:5;26671:9;:26::i;:::-;26715:4;26708:11;;;26478:249;;;;;:::o;41126:28::-;;;;;;;;;;;;;:::o;24370:84::-;24419:5;24444:2;24437:9;;24370:84;:::o;45552:120::-;41568:3;;;;;;;;;;;41554:17;;:10;:17;;;:42;;;;41589:7;:5;:7::i;:::-;41575:21;;:10;:21;;;41554:42;:74;;;;41623:4;41601:27;;:10;:27;;;41554:74;41546:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;45656:8:::1;45630:23;:34;;;;45552:120:::0;:::o;33342:89::-;33397:26;33403:12;:10;:12::i;:::-;33417:5;33397;:26::i;:::-;33342:89;:::o;40455:40::-;;;;;;;;;;;;;:::o;40231:71::-;;;;;;;;;;;;;:::o;39971:69::-;;;;;;;;;;;;;:::o;41291:38::-;;;;;;;;;;;;;;;;;;;;;;:::o;47498:202::-;41568:3;;;;;;;;;;;41554:17;;:10;:17;;;:42;;;;41589:7;:5;:7::i;:::-;41575:21;;:10;:21;;;41554:42;:74;;;;41623:4;41601:27;;:10;:27;;;41554:74;41546:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;47607:19:::1;47581:15;;:46;;;;;;;;;;;;;;;;;;47638:54;47652:19;47674:4;47680::::0;47686:5:::1;47638:13;:54::i;:::-;47498:202:::0;:::o;41020:47::-;;;;:::o;45944:299::-;41568:3;;;;;;;;;;;41554:17;;:10;:17;;;:42;;;;41589:7;:5;:7::i;:::-;41575:21;;:10;:21;;;41554:42;:74;;;;41623:4;41601:27;;:10;:27;;;41554:74;41546:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;46052:1:::1;46026:28;;:14;:28;;::::0;46017:74:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;46114:14;46104:7;;:24;;;;;;;;;;;;;;;;;;46185:4;46162:11;:20;46174:7;;;;;;;;;;;46162:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;46231:4;46201:18;:27;46220:7;;;;;;;;;;;46201:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;45944:299:::0;:::o;40771:30::-;;;;:::o;41202:44::-;;;;;;;;;;;;;;;;;;;;;;:::o;24681:118::-;24746:7;24773:9;:18;24783:7;24773:18;;;;;;;;;;;;;;;;24766:25;;24681:118;;;:::o;17030:103::-;16241:13;:11;:13::i;:::-;17095:30:::1;17122:1;17095:18;:30::i;:::-;17030:103::o:0;39713:92::-;;;;;;;;;;;;;:::o;45435:109::-;45488:7;45535:1;45514:11;:18;;;;:22;;;;:::i;:::-;45507:29;;45435:109;:::o;33760:161::-;33836:45;33852:7;33861:12;:10;:12::i;:::-;33875:5;33836:15;:45::i;:::-;33892:21;33898:7;33907:5;33892;:21::i;:::-;33760:161;;:::o;48313:268::-;41568:3;;;;;;;;;;;41554:17;;:10;:17;;;:42;;;;41589:7;:5;:7::i;:::-;41575:21;;:10;:21;;;41554:42;:74;;;;41623:4;41601:27;;:10;:27;;;41554:74;41546:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;48458:6:::1;48440:5;:15;48446:8;48440:15;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;48500:12;48476:11;:21;48488:8;48476:21;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;48555:18;48524;:28;48543:8;48524:28;;;;;;;;;;;;;;;;:49;;;;;;;;;;;;;;;;;;48313:268:::0;;;;:::o;41477:28::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;16355:87::-;16401:7;16428:6;;;;;;;;;;;16421:13;;16355:87;:::o;45034:393::-;41568:3;;;;;;;;;;;41554:17;;:10;:17;;;:42;;;;41589:7;:5;:7::i;:::-;41575:21;;:10;:21;;;41554:42;:74;;;;41623:4;41601:27;;:10;:27;;;41554:74;41546:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;45090:18:::1;45132:1;45111:11;:18;;;;:22;;;;:::i;:::-;45090:43;;45191:1;45178:10;:14;45170:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;45226:23;45286:10;45253:4;;;;;;;;;;;:14;;;45276:4;45253:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45252:44;;;;:::i;:::-;45226:70;;45312:6;45321:1;45312:10;;45307:113;45329:10;45324:1;:15;45307:113;;45361:4;;;;;;;;;;;:13;;;45375:11;45387:1;45375:14;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;45392:15;45361:47;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;45342:3;;;;;:::i;:::-;;;;45307:113;;;;45079:348;;45034:393::o:0;39845:63::-;;;;;;;;;;;;;:::o;23627:95::-;23674:13;23707:7;23700:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23627:95;:::o;45807:123::-;41568:3;;;;;;;;;;;41554:17;;:10;:17;;;:42;;;;41589:7;:5;:7::i;:::-;41575:21;;:10;:21;;;41554:42;:74;;;;41623:4;41601:27;;:10;:27;;;41554:74;41546:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;45914:8:::1;45886:25;;:36;;;;;;;;;;;;;;;;;;45807:123:::0;:::o;25004:182::-;25073:4;25090:13;25106:12;:10;:12::i;:::-;25090:28;;25129:27;25139:5;25146:2;25150:5;25129:9;:27::i;:::-;25174:4;25167:11;;;25004:182;;;;:::o;40946:47::-;;;;:::o;40706:33::-;;;;:::o;47091:395::-;41568:3;;;;;;;;;;;41554:17;;:10;:17;;;:42;;;;41589:7;:5;:7::i;:::-;41575:21;;:10;:21;;;41554:42;:74;;;;41623:4;41601:27;;:10;:27;;;41554:74;41546:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;47206:17:::1;47255:13;47242:10;47226:13;:26;;;;:::i;:::-;:42;;;;:::i;:::-;47206:62;;47303:4;47290:9;:17;;47281:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;47360:13;47345:12;:28;;;;47400:13;47385:12;:28;;;;47437:10;47425:9;:22;;;;47469:9;47458:8;:20;;;;47195:291;47091:395:::0;;;:::o;45684:115::-;41568:3;;;;;;;;;;;41554:17;;:10;:17;;;:42;;;;41589:7;:5;:7::i;:::-;41575:21;;:10;:21;;;41554:42;:74;;;;41623:4;41601:27;;:10;:27;;;41554:74;41546:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;45783:8:::1;45759:21;;:32;;;;;;;;;;;;;;;;;;45684:115:::0;:::o;46255:828::-;46326:22;41568:3;;;;;;;;;;;41554:17;;:10;:17;;;:42;;;;41589:7;:5;:7::i;:::-;41575:21;;:10;:21;;;41554:42;:74;;;;41623:4;41601:27;;:10;:27;;;41554:74;41546:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;46361:27:::1;46408:16;46361:64;;46472:10;:18;;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46454:47;;;46510:4;46517:9;;;;;;;;;;;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46454:80;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46437:97;;46576:1;46550:28;;:14;:28;;::::0;46547:219:::1;;46655:10;:18;;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46637:84;;;46730:4;46737:9;;;;;;;;;;;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46637:117;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46620:134;;46547:219;46788:14;46778:7;;:24;;;;;;;;;;;;;;;;;;46848:10;46836:9;;:22;;;;;;;;;;;;;;;;;;46919:4;46896:11;:20;46908:7;;;;;;;;;;;46896:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;46965:4;46935:18;:27;46954:7;;;;;;;;;;;46935:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;47014:4;46980:11;:31;47000:9;;;;;;;;;;;46980:31;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;47071:4;47030:18;:38;47057:9;;;;;;;;;;;47030:38;;;;;;;;;;;;;;;;:45;;;;;;;;;;;;;;;;;;46350:733;46255:828:::0;;;:::o;48589:106::-;41568:3;;;;;;;;;;;41554:17;;:10;:17;;;:42;;;;41589:7;:5;:7::i;:::-;41575:21;;:10;:21;;;41554:42;:74;;;;41623:4;41601:27;;:10;:27;;;41554:74;41546:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;48676:11:::1;48657:16;;:30;;;;;;;;;;;;;;;;;;48589:106:::0;:::o;48181:124::-;41568:3;;;;;;;;;;;41554:17;;:10;:17;;;:42;;;;41589:7;:5;:7::i;:::-;41575:21;;:10;:21;;;41554:42;:74;;;;41623:4;41601:27;;:10;:27;;;41554:74;41546:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;48243:4:::1;48237:3;;:10;;;;;;;;;;;;;;;;;;48258:39;48272:4;48279;48285::::0;48291:5:::1;48258:13;:39::i;:::-;48181:124:::0;:::o;40502:45::-;;;;;;;;;;;;;:::o;25249:142::-;25329:7;25356:11;:18;25368:5;25356:18;;;;;;;;;;;;;;;:27;25375:7;25356:27;;;;;;;;;;;;;;;;25349:34;;25249:142;;;;:::o;47934:239::-;41568:3;;;;;;;;;;;41554:17;;:10;:17;;;:42;;;;41589:7;:5;:7::i;:::-;41575:21;;:10;:21;;;41554:42;:74;;;;41623:4;41601:27;;:10;:27;;;41554:74;41546:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;48049:2:::1;48029:16;:22;;48021:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;48159:5;48143:13;:11;:13::i;:::-;48124:16;:32;;;;:::i;:::-;:40;;;;:::i;:::-;48106:15;:58;;;;47934:239:::0;:::o;40420:22::-;;;;;;;;;;;;;:::o;17288:220::-;16241:13;:11;:13::i;:::-;17393:1:::1;17373:22;;:8;:22;;::::0;17369:93:::1;;17447:1;17419:31;;;;;;;;;;;:::i;:::-;;;;;;;;17369:93;17472:28;17491:8;17472:18;:28::i;:::-;17288:220:::0;:::o;40832:29::-;;;;:::o;14364:98::-;14417:7;14444:10;14437:17;;14364:98;:::o;30537:130::-;30622:37;30631:5;30638:7;30647:5;30654:4;30622:8;:37::i;:::-;30537:130;;;:::o;51671:158::-;51740:12;51767:2;51759:16;;51783:6;51759:35;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51739:55;;;51813:7;51805:16;;;;;;51728:101;51671:158;;:::o;32253:487::-;32353:24;32380:25;32390:5;32397:7;32380:9;:25::i;:::-;32353:52;;32440:17;32420:16;:37;32416:317;;32497:5;32478:16;:24;32474:132;;;32557:7;32566:16;32584:5;32530:60;;;;;;;;;;;;;:::i;:::-;;;;;;;;32474:132;32649:57;32658:5;32665:7;32693:5;32674:16;:24;32700:5;32649:8;:57::i;:::-;32416:317;32342:398;32253:487;;;:::o;27112:308::-;27212:1;27196:18;;:4;:18;;;27192:88;;27265:1;27238:30;;;;;;;;;;;:::i;:::-;;;;;;;;27192:88;27308:1;27294:16;;:2;:16;;;27290:88;;27363:1;27334:32;;;;;;;;;;;:::i;:::-;;;;;;;;27290:88;27388:24;27396:4;27402:2;27406:5;27388:7;:24::i;:::-;27112:308;;;:::o;29773:211::-;29863:1;29844:21;;:7;:21;;;29840:91;;29916:1;29889:30;;;;;;;;;;;:::i;:::-;;;;;;;;29840:91;29941:35;29949:7;29966:1;29970:5;29941:7;:35::i;:::-;29773:211;;:::o;16520:166::-;16591:12;:10;:12::i;:::-;16580:23;;:7;:5;:7::i;:::-;:23;;;16576:103;;16654:12;:10;:12::i;:::-;16627:40;;;;;;;;;;;:::i;:::-;;;;;;;;16576:103;16520:166::o;17668:191::-;17742:16;17761:6;;;;;;;;;;;17742:25;;17787:8;17778:6;;:17;;;;;;;;;;;;;;;;;;17842:8;17811:40;;17832:8;17811:40;;;;;;;;;;;;17731:128;17668:191;:::o;31518:443::-;31648:1;31631:19;;:5;:19;;;31627:91;;31703:1;31674:32;;;;;;;;;;;:::i;:::-;;;;;;;;31627:91;31751:1;31732:21;;:7;:21;;;31728:92;;31805:1;31777:31;;;;;;;;;;;:::i;:::-;;;;;;;;31728:92;31860:5;31830:11;:18;31842:5;31830:18;;;;;;;;;;;;;;;:27;31849:7;31830:27;;;;;;;;;;;;;;;:35;;;;31880:9;31876:78;;;31927:7;31911:31;;31920:5;31911:31;;;31936:5;31911:31;;;;;;:::i;:::-;;;;;;;;31876:78;31518:443;;;;:::o;43004:1346::-;43095:12;;;;;;;;;;;43092:1249;;;43135:30;43149:4;43155:2;43159:5;43135:13;:30::i;:::-;43092:1249;;;43221:16;;;;;;;;;;;43220:17;:37;;;;;43242:11;:15;43254:2;43242:15;;;;;;;;;;;;;;;;;;;;;;;;;43241:16;43220:37;:59;;;;;43277:1;43261:18;;:4;:18;;;;43220:59;:79;;;;;43297:1;43283:16;;:2;:16;;;;43220:79;43216:204;;;43352:15;;43335:13;43345:2;43335:9;:13::i;:::-;43327:5;:21;;;;:::i;:::-;:40;;43319:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;43216:204;43436:28;43467:24;43485:4;43467:9;:24::i;:::-;43436:55;;43506:28;43561:23;;43537:20;:47;;43506:78;;43624:23;:42;;;;;43659:7;;;;;;;;;;;43651:15;;:4;:15;;;;43624:42;:72;;;;;43686:9;;;;;;;;;;;43670:26;;:4;:26;;;;43624:72;:97;;;;;43700:21;;;;;;;;;;;43624:97;43620:301;;;43767:25;;;;;;;;;;;43764:78;;;43817:23;;43794:46;;43764:78;43864:36;43879:20;43864:14;:36::i;:::-;43620:301;43952:1;43941:8;;:12;:28;;;;;43958:5;:11;43964:4;43958:11;;;;;;;;;;;;;;;;;;;;;;;;;43957:12;43941:28;:42;;;;;43974:5;:9;43980:2;43974:9;;;;;;;;;;;;;;;;;;;;;;;;;43973:10;43941:42;:64;;;;;44003:1;43987:18;;:4;:18;;;;43941:64;:84;;;;;44023:1;44009:16;;:2;:16;;;;43941:84;43937:153;;;44054:20;44062:4;44068:5;44054:7;:20::i;:::-;44046:28;;43937:153;44106:30;44120:4;44126:2;44130:5;44106:13;:30::i;:::-;44151:22;44168:4;44151:16;:22::i;:::-;44242:20;44259:2;44242:16;:20::i;:::-;43201:1140;;43092:1249;43004:1346;;;:::o;27744:1135::-;27850:1;27834:18;;:4;:18;;;27830:552;;27988:5;27972:12;;:21;;;;;;;:::i;:::-;;;;;;;;27830:552;;;28026:19;28048:9;:15;28058:4;28048:15;;;;;;;;;;;;;;;;28026:37;;28096:5;28082:11;:19;28078:117;;;28154:4;28160:11;28173:5;28129:50;;;;;;;;;;;;;:::i;:::-;;;;;;;;28078:117;28350:5;28336:11;:19;28318:9;:15;28328:4;28318:15;;;;;;;;;;;;;;;:37;;;;28011:371;27830:552;28412:1;28398:16;;:2;:16;;;28394:435;;28580:5;28564:12;;:21;;;;;;;;;;;28394:435;;;28797:5;28780:9;:13;28790:2;28780:13;;;;;;;;;;;;;;;;:22;;;;;;;;;;;28394:435;28861:2;28846:25;;28855:4;28846:25;;;28865:5;28846:25;;;;;;:::i;:::-;;;;;;;;27744:1135;;;:::o;48705:825::-;41731:4;41716:12;;:19;;;;;;;;;;;;;;;;;;48778:22:::1;48803:46;48847:1;48803:39;48833:8;;48803:25;48815:12;;48803:7;:11;;:25;;;;:::i;:::-;:29;;:39;;;;:::i;:::-;:43;;:46;;;;:::i;:::-;48778:71;;48862:22;48887:21;48862:46;;48929:45;48946:27;48958:14;48946:7;:11;;:27;;;;:::i;:::-;48929:16;:45::i;:::-;48987:22;49012:41;49038:14;49012:21;:25;;:41;;;;:::i;:::-;48987:66;;49064:20;49087:47;49126:7;49087:34;49106:14;49087;:18;;:34;;;;:::i;:::-;:38;;:47;;;;:::i;:::-;49064:70;;49147:42;49160:14;49176:12;49147;:42::i;:::-;49202:18;49223:21;49202:42;;49257:26;49286:57;49330:12;;49319:8;;:23;;;;:::i;:::-;49286:28;49301:12;;49286:10;:14;;:28;;;;:::i;:::-;:32;;:57;;;;:::i;:::-;49257:86;;49354:23;49380:34;49395:18;49380:10;:14;;:34;;;;:::i;:::-;49354:60;;49427:49;49439:15;;;;;;;;;;;49457:18;49427:11;:49::i;:::-;49487:31;49502:15;49487:14;:31::i;:::-;48765:765;;;;;;;41773:5:::0;41758:12;;:20;;;;;;;;;;;;;;;;;;48705:825;:::o;51180:235::-;51256:7;41731:4;41716:12;;:19;;;;;;;;;;;;;;;;;;51278:11:::1;51292:31;51317:5;51292:20;51303:8;;51292:6;:10;;:20;;;;:::i;:::-;:24;;:31;;;;:::i;:::-;51278:45;;51336:35;51346:4;51360;51367:3;51336:9;:35::i;:::-;51392:15;51403:3;51392:6;:10;;:15;;;;:::i;:::-;51385:22;;;41773:5:::0;41758:12;;:20;;;;;;;;;;;;;;;;;;51180:235;;;;:::o;44358:668::-;44421:18;:24;44440:4;44421:24;;;;;;;;;;;;;;;;;;;;;;;;;44461:7;44418:61;44513:1;44494:9;:15;44504:4;44494:15;;;;;;;;;;;;;;;;:20;44491:528;;44551:15;;44533;44543:4;44533:9;:15::i;:::-;:33;44530:310;;;44597:16;44617:11;44650:1;44629:11;:18;;;;:22;;;;:::i;:::-;44617:35;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;44597:55;;44698:8;44667:11;44679:9;:15;44689:4;44679:15;;;;;;;;;;;;;;;;44667:28;;;;;;;;:::i;:::-;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;44721:11;:17;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;44775:9;:15;44785:4;44775:15;;;;;;;;;;;;;;;;44753:9;:19;44763:8;44753:19;;;;;;;;;;;;;;;:37;;;;44823:1;44805:9;:15;44815:4;44805:15;;;;;;;;;;;;;;;:19;;;;44568:272;44530:310;44491:528;;;44903:15;;44884;44894:4;44884:9;:15::i;:::-;:34;44880:139;;44952:11;:18;;;;44934:9;:15;44944:4;44934:15;;;;;;;;;;;;;;;:36;;;;44985:11;45002:4;44985:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44880:139;44491:528;44358:668;;:::o;3614:98::-;3672:7;3703:1;3699;:5;;;;:::i;:::-;3692:12;;3614:98;;;;:::o;4013:::-;4071:7;4102:1;4098;:5;;;;:::i;:::-;4091:12;;4013:98;;;;:::o;3257:::-;3315:7;3346:1;3342;:5;;;;:::i;:::-;3335:12;;3257:98;;;;:::o;49542:593::-;49664:21;49702:1;49688:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49664:40;;49733:4;49715;49720:1;49715:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;49759:9;;;;;;;;;;;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49749:4;49754:1;49749:7;;;;;;;;:::i;:::-;;;;;;;:26;;;;;;;;;;;49788:56;49805:4;49820:9;;;;;;;;;;;49832:11;49788:8;:56::i;:::-;49883:9;;;;;;;;;;;:60;;;49958:11;49984:1;50028:4;50055;50091:15;49883:234;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49597:538;49542:593;:::o;50669:503::-;50817:56;50834:4;50849:9;;;;;;;;;;;50861:11;50817:8;:56::i;:::-;50916:9;;;;;;;;;;;:25;;;50949:9;50982:4;51002:11;51028:1;51071;51114:9;;;;;;;;;;;51138:15;50916:248;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;50669:503;;:::o;50147:514::-;50263:21;50301:1;50287:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50263:40;;50324:9;;;;;;;;;;;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;50314:4;50319:1;50314:7;;;;;;;;:::i;:::-;;;;;;;:26;;;;;;;;;;;50369:4;;;;;;;;;;;50351;50356:1;50351:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;50416:9;;;;;;;;;;;:60;;;50484:9;50509:1;50554:4;50581;50617:15;50416:227;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50198:463;50147:514;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1349:126::-;1386:7;1426:42;1419:5;1415:54;1404:65;;1349:126;;;:::o;1481:60::-;1509:3;1530:5;1523:12;;1481:60;;;:::o;1547:142::-;1597:9;1630:53;1648:34;1657:24;1675:5;1657:24;:::i;:::-;1648:34;:::i;:::-;1630:53;:::i;:::-;1617:66;;1547:142;;;:::o;1695:126::-;1745:9;1778:37;1809:5;1778:37;:::i;:::-;1765:50;;1695:126;;;:::o;1827:151::-;1902:9;1935:37;1966:5;1935:37;:::i;:::-;1922:50;;1827:151;;;:::o;1984:181::-;2096:62;2152:5;2096:62;:::i;:::-;2091:3;2084:75;1984:181;;:::o;2171:272::-;2289:4;2327:2;2316:9;2312:18;2304:26;;2340:96;2433:1;2422:9;2418:17;2409:6;2340:96;:::i;:::-;2171:272;;;;:::o;2530:117::-;2639:1;2636;2629:12;2776:96;2813:7;2842:24;2860:5;2842:24;:::i;:::-;2831:35;;2776:96;;;:::o;2878:122::-;2951:24;2969:5;2951:24;:::i;:::-;2944:5;2941:35;2931:63;;2990:1;2987;2980:12;2931:63;2878:122;:::o;3006:139::-;3052:5;3090:6;3077:20;3068:29;;3106:33;3133:5;3106:33;:::i;:::-;3006:139;;;;:::o;3151:77::-;3188:7;3217:5;3206:16;;3151:77;;;:::o;3234:122::-;3307:24;3325:5;3307:24;:::i;:::-;3300:5;3297:35;3287:63;;3346:1;3343;3336:12;3287:63;3234:122;:::o;3362:139::-;3408:5;3446:6;3433:20;3424:29;;3462:33;3489:5;3462:33;:::i;:::-;3362:139;;;;:::o;3507:474::-;3575:6;3583;3632:2;3620:9;3611:7;3607:23;3603:32;3600:119;;;3638:79;;:::i;:::-;3600:119;3758:1;3783:53;3828:7;3819:6;3808:9;3804:22;3783:53;:::i;:::-;3773:63;;3729:117;3885:2;3911:53;3956:7;3947:6;3936:9;3932:22;3911:53;:::i;:::-;3901:63;;3856:118;3507:474;;;;;:::o;3987:90::-;4021:7;4064:5;4057:13;4050:21;4039:32;;3987:90;;;:::o;4083:109::-;4164:21;4179:5;4164:21;:::i;:::-;4159:3;4152:34;4083:109;;:::o;4198:210::-;4285:4;4323:2;4312:9;4308:18;4300:26;;4336:65;4398:1;4387:9;4383:17;4374:6;4336:65;:::i;:::-;4198:210;;;;:::o;4414:329::-;4473:6;4522:2;4510:9;4501:7;4497:23;4493:32;4490:119;;;4528:79;;:::i;:::-;4490:119;4648:1;4673:53;4718:7;4709:6;4698:9;4694:22;4673:53;:::i;:::-;4663:63;;4619:117;4414:329;;;;:::o;4749:619::-;4826:6;4834;4842;4891:2;4879:9;4870:7;4866:23;4862:32;4859:119;;;4897:79;;:::i;:::-;4859:119;5017:1;5042:53;5087:7;5078:6;5067:9;5063:22;5042:53;:::i;:::-;5032:63;;4988:117;5144:2;5170:53;5215:7;5206:6;5195:9;5191:22;5170:53;:::i;:::-;5160:63;;5115:118;5272:2;5298:53;5343:7;5334:6;5323:9;5319:22;5298:53;:::i;:::-;5288:63;;5243:118;4749:619;;;;;:::o;5374:118::-;5461:24;5479:5;5461:24;:::i;:::-;5456:3;5449:37;5374:118;;:::o;5498:222::-;5591:4;5629:2;5618:9;5614:18;5606:26;;5642:71;5710:1;5699:9;5695:17;5686:6;5642:71;:::i;:::-;5498:222;;;;:::o;5726:86::-;5761:7;5801:4;5794:5;5790:16;5779:27;;5726:86;;;:::o;5818:112::-;5901:22;5917:5;5901:22;:::i;:::-;5896:3;5889:35;5818:112;;:::o;5936:214::-;6025:4;6063:2;6052:9;6048:18;6040:26;;6076:67;6140:1;6129:9;6125:17;6116:6;6076:67;:::i;:::-;5936:214;;;;:::o;6156:329::-;6215:6;6264:2;6252:9;6243:7;6239:23;6235:32;6232:119;;;6270:79;;:::i;:::-;6232:119;6390:1;6415:53;6460:7;6451:6;6440:9;6436:22;6415:53;:::i;:::-;6405:63;;6361:117;6156:329;;;;:::o;6491:140::-;6555:9;6588:37;6619:5;6588:37;:::i;:::-;6575:50;;6491:140;;;:::o;6637:159::-;6738:51;6783:5;6738:51;:::i;:::-;6733:3;6726:64;6637:159;;:::o;6802:250::-;6909:4;6947:2;6936:9;6932:18;6924:26;;6960:85;7042:1;7031:9;7027:17;7018:6;6960:85;:::i;:::-;6802:250;;;;:::o;7058:118::-;7145:24;7163:5;7145:24;:::i;:::-;7140:3;7133:37;7058:118;;:::o;7182:222::-;7275:4;7313:2;7302:9;7298:18;7290:26;;7326:71;7394:1;7383:9;7379:17;7370:6;7326:71;:::i;:::-;7182:222;;;;:::o;7410:104::-;7455:7;7484:24;7502:5;7484:24;:::i;:::-;7473:35;;7410:104;;;:::o;7520:142::-;7623:32;7649:5;7623:32;:::i;:::-;7618:3;7611:45;7520:142;;:::o;7668:254::-;7777:4;7815:2;7804:9;7800:18;7792:26;;7828:87;7912:1;7901:9;7897:17;7888:6;7828:87;:::i;:::-;7668:254;;;;:::o;7928:116::-;7998:21;8013:5;7998:21;:::i;:::-;7991:5;7988:32;7978:60;;8034:1;8031;8024:12;7978:60;7928:116;:::o;8050:133::-;8093:5;8131:6;8118:20;8109:29;;8147:30;8171:5;8147:30;:::i;:::-;8050:133;;;;:::o;8189:747::-;8266:6;8274;8282;8290;8339:3;8327:9;8318:7;8314:23;8310:33;8307:120;;;8346:79;;:::i;:::-;8307:120;8466:1;8491:53;8536:7;8527:6;8516:9;8512:22;8491:53;:::i;:::-;8481:63;;8437:117;8593:2;8619:50;8661:7;8652:6;8641:9;8637:22;8619:50;:::i;:::-;8609:60;;8564:115;8718:2;8744:50;8786:7;8777:6;8766:9;8762:22;8744:50;:::i;:::-;8734:60;;8689:115;8843:2;8869:50;8911:7;8902:6;8891:9;8887:22;8869:50;:::i;:::-;8859:60;;8814:115;8189:747;;;;;;;:::o;8942:323::-;8998:6;9047:2;9035:9;9026:7;9022:23;9018:32;9015:119;;;9053:79;;:::i;:::-;9015:119;9173:1;9198:50;9240:7;9231:6;9220:9;9216:22;9198:50;:::i;:::-;9188:60;;9144:114;8942:323;;;;:::o;9271:619::-;9348:6;9356;9364;9413:2;9401:9;9392:7;9388:23;9384:32;9381:119;;;9419:79;;:::i;:::-;9381:119;9539:1;9564:53;9609:7;9600:6;9589:9;9585:22;9564:53;:::i;:::-;9554:63;;9510:117;9666:2;9692:53;9737:7;9728:6;9717:9;9713:22;9692:53;:::i;:::-;9682:63;;9637:118;9794:2;9820:53;9865:7;9856:6;9845:9;9841:22;9820:53;:::i;:::-;9810:63;;9765:118;9271:619;;;;;:::o;9896:474::-;9964:6;9972;10021:2;10009:9;10000:7;9996:23;9992:32;9989:119;;;10027:79;;:::i;:::-;9989:119;10147:1;10172:53;10217:7;10208:6;10197:9;10193:22;10172:53;:::i;:::-;10162:63;;10118:117;10274:2;10300:53;10345:7;10336:6;10325:9;10321:22;10300:53;:::i;:::-;10290:63;;10245:118;9896:474;;;;;:::o;10376:180::-;10424:77;10421:1;10414:88;10521:4;10518:1;10511:15;10545:4;10542:1;10535:15;10562:320;10606:6;10643:1;10637:4;10633:12;10623:22;;10690:1;10684:4;10680:12;10711:18;10701:81;;10767:4;10759:6;10755:17;10745:27;;10701:81;10829:2;10821:6;10818:14;10798:18;10795:38;10792:84;;10848:18;;:::i;:::-;10792:84;10613:269;10562:320;;;:::o;10888:176::-;11028:28;11024:1;11016:6;11012:14;11005:52;10888:176;:::o;11070:366::-;11212:3;11233:67;11297:2;11292:3;11233:67;:::i;:::-;11226:74;;11309:93;11398:3;11309:93;:::i;:::-;11427:2;11422:3;11418:12;11411:19;;11070:366;;;:::o;11442:419::-;11608:4;11646:2;11635:9;11631:18;11623:26;;11695:9;11689:4;11685:20;11681:1;11670:9;11666:17;11659:47;11723:131;11849:4;11723:131;:::i;:::-;11715:139;;11442:419;;;:::o;11867:332::-;11988:4;12026:2;12015:9;12011:18;12003:26;;12039:71;12107:1;12096:9;12092:17;12083:6;12039:71;:::i;:::-;12120:72;12188:2;12177:9;12173:18;12164:6;12120:72;:::i;:::-;11867:332;;;;;:::o;12205:137::-;12259:5;12290:6;12284:13;12275:22;;12306:30;12330:5;12306:30;:::i;:::-;12205:137;;;;:::o;12348:345::-;12415:6;12464:2;12452:9;12443:7;12439:23;12435:32;12432:119;;;12470:79;;:::i;:::-;12432:119;12590:1;12615:61;12668:7;12659:6;12648:9;12644:22;12615:61;:::i;:::-;12605:71;;12561:125;12348:345;;;;:::o;12699:174::-;12839:26;12835:1;12827:6;12823:14;12816:50;12699:174;:::o;12879:366::-;13021:3;13042:67;13106:2;13101:3;13042:67;:::i;:::-;13035:74;;13118:93;13207:3;13118:93;:::i;:::-;13236:2;13231:3;13227:12;13220:19;;12879:366;;;:::o;13251:419::-;13417:4;13455:2;13444:9;13440:18;13432:26;;13504:9;13498:4;13494:20;13490:1;13479:9;13475:17;13468:47;13532:131;13658:4;13532:131;:::i;:::-;13524:139;;13251:419;;;:::o;13676:181::-;13816:33;13812:1;13804:6;13800:14;13793:57;13676:181;:::o;13863:366::-;14005:3;14026:67;14090:2;14085:3;14026:67;:::i;:::-;14019:74;;14102:93;14191:3;14102:93;:::i;:::-;14220:2;14215:3;14211:12;14204:19;;13863:366;;;:::o;14235:419::-;14401:4;14439:2;14428:9;14424:18;14416:26;;14488:9;14482:4;14478:20;14474:1;14463:9;14459:17;14452:47;14516:131;14642:4;14516:131;:::i;:::-;14508:139;;14235:419;;;:::o;14660:180::-;14708:77;14705:1;14698:88;14805:4;14802:1;14795:15;14829:4;14826:1;14819:15;14846:194;14886:4;14906:20;14924:1;14906:20;:::i;:::-;14901:25;;14940:20;14958:1;14940:20;:::i;:::-;14935:25;;14984:1;14981;14977:9;14969:17;;15008:1;15002:4;14999:11;14996:37;;;15013:18;;:::i;:::-;14996:37;14846:194;;;;:::o;15046:167::-;15186:19;15182:1;15174:6;15170:14;15163:43;15046:167;:::o;15219:366::-;15361:3;15382:67;15446:2;15441:3;15382:67;:::i;:::-;15375:74;;15458:93;15547:3;15458:93;:::i;:::-;15576:2;15571:3;15567:12;15560:19;;15219:366;;;:::o;15591:419::-;15757:4;15795:2;15784:9;15780:18;15772:26;;15844:9;15838:4;15834:20;15830:1;15819:9;15815:17;15808:47;15872:131;15998:4;15872:131;:::i;:::-;15864:139;;15591:419;;;:::o;16016:143::-;16073:5;16104:6;16098:13;16089:22;;16120:33;16147:5;16120:33;:::i;:::-;16016:143;;;;:::o;16165:351::-;16235:6;16284:2;16272:9;16263:7;16259:23;16255:32;16252:119;;;16290:79;;:::i;:::-;16252:119;16410:1;16435:64;16491:7;16482:6;16471:9;16467:22;16435:64;:::i;:::-;16425:74;;16381:128;16165:351;;;;:::o;16522:180::-;16570:77;16567:1;16560:88;16667:4;16664:1;16657:15;16691:4;16688:1;16681:15;16708:185;16748:1;16765:20;16783:1;16765:20;:::i;:::-;16760:25;;16799:20;16817:1;16799:20;:::i;:::-;16794:25;;16838:1;16828:35;;16843:18;;:::i;:::-;16828:35;16885:1;16882;16878:9;16873:14;;16708:185;;;;:::o;16899:180::-;16947:77;16944:1;16937:88;17044:4;17041:1;17034:15;17068:4;17065:1;17058:15;17085:233;17124:3;17147:24;17165:5;17147:24;:::i;:::-;17138:33;;17193:66;17186:5;17183:77;17180:103;;17263:18;;:::i;:::-;17180:103;17310:1;17303:5;17299:13;17292:20;;17085:233;;;:::o;17324:191::-;17364:3;17383:20;17401:1;17383:20;:::i;:::-;17378:25;;17417:20;17435:1;17417:20;:::i;:::-;17412:25;;17460:1;17457;17453:9;17446:16;;17481:3;17478:1;17475:10;17472:36;;;17488:18;;:::i;:::-;17472:36;17324:191;;;;:::o;17521:169::-;17661:21;17657:1;17649:6;17645:14;17638:45;17521:169;:::o;17696:366::-;17838:3;17859:67;17923:2;17918:3;17859:67;:::i;:::-;17852:74;;17935:93;18024:3;17935:93;:::i;:::-;18053:2;18048:3;18044:12;18037:19;;17696:366;;;:::o;18068:419::-;18234:4;18272:2;18261:9;18257:18;18249:26;;18321:9;18315:4;18311:20;18307:1;18296:9;18292:17;18285:47;18349:131;18475:4;18349:131;:::i;:::-;18341:139;;18068:419;;;:::o;18493:143::-;18550:5;18581:6;18575:13;18566:22;;18597:33;18624:5;18597:33;:::i;:::-;18493:143;;;;:::o;18642:351::-;18712:6;18761:2;18749:9;18740:7;18736:23;18732:32;18729:119;;;18767:79;;:::i;:::-;18729:119;18887:1;18912:64;18968:7;18959:6;18948:9;18944:22;18912:64;:::i;:::-;18902:74;;18858:128;18642:351;;;;:::o;18999:332::-;19120:4;19158:2;19147:9;19143:18;19135:26;;19171:71;19239:1;19228:9;19224:17;19215:6;19171:71;:::i;:::-;19252:72;19320:2;19309:9;19305:18;19296:6;19252:72;:::i;:::-;18999:332;;;;;:::o;19337:225::-;19477:34;19473:1;19465:6;19461:14;19454:58;19546:8;19541:2;19533:6;19529:15;19522:33;19337:225;:::o;19568:366::-;19710:3;19731:67;19795:2;19790:3;19731:67;:::i;:::-;19724:74;;19807:93;19896:3;19807:93;:::i;:::-;19925:2;19920:3;19916:12;19909:19;;19568:366;;;:::o;19940:419::-;20106:4;20144:2;20133:9;20129:18;20121:26;;20193:9;20187:4;20183:20;20179:1;20168:9;20164:17;20157:47;20221:131;20347:4;20221:131;:::i;:::-;20213:139;;19940:419;;;:::o;20365:410::-;20405:7;20428:20;20446:1;20428:20;:::i;:::-;20423:25;;20462:20;20480:1;20462:20;:::i;:::-;20457:25;;20517:1;20514;20510:9;20539:30;20557:11;20539:30;:::i;:::-;20528:41;;20718:1;20709:7;20705:15;20702:1;20699:22;20679:1;20672:9;20652:83;20629:139;;20748:18;;:::i;:::-;20629:139;20413:362;20365:410;;;;:::o;20781:147::-;20882:11;20919:3;20904:18;;20781:147;;;;:::o;20934:114::-;;:::o;21054:398::-;21213:3;21234:83;21315:1;21310:3;21234:83;:::i;:::-;21227:90;;21326:93;21415:3;21326:93;:::i;:::-;21444:1;21439:3;21435:11;21428:18;;21054:398;;;:::o;21458:379::-;21642:3;21664:147;21807:3;21664:147;:::i;:::-;21657:154;;21828:3;21821:10;;21458:379;;;:::o;21843:442::-;21992:4;22030:2;22019:9;22015:18;22007:26;;22043:71;22111:1;22100:9;22096:17;22087:6;22043:71;:::i;:::-;22124:72;22192:2;22181:9;22177:18;22168:6;22124:72;:::i;:::-;22206;22274:2;22263:9;22259:18;22250:6;22206:72;:::i;:::-;21843:442;;;;;;:::o;22291:181::-;22431:33;22427:1;22419:6;22415:14;22408:57;22291:181;:::o;22478:366::-;22620:3;22641:67;22705:2;22700:3;22641:67;:::i;:::-;22634:74;;22717:93;22806:3;22717:93;:::i;:::-;22835:2;22830:3;22826:12;22819:19;;22478:366;;;:::o;22850:419::-;23016:4;23054:2;23043:9;23039:18;23031:26;;23103:9;23097:4;23093:20;23089:1;23078:9;23074:17;23067:47;23131:131;23257:4;23131:131;:::i;:::-;23123:139;;22850:419;;;:::o;23275:180::-;23323:77;23320:1;23313:88;23420:4;23417:1;23410:15;23444:4;23441:1;23434:15;23461:180;23509:77;23506:1;23499:88;23606:4;23603:1;23596:15;23630:4;23627:1;23620:15;23647:85;23692:7;23721:5;23710:16;;23647:85;;;:::o;23738:158::-;23796:9;23829:61;23847:42;23856:32;23882:5;23856:32;:::i;:::-;23847:42;:::i;:::-;23829:61;:::i;:::-;23816:74;;23738:158;;;:::o;23902:147::-;23997:45;24036:5;23997:45;:::i;:::-;23992:3;23985:58;23902:147;;:::o;24055:114::-;24122:6;24156:5;24150:12;24140:22;;24055:114;;;:::o;24175:184::-;24274:11;24308:6;24303:3;24296:19;24348:4;24343:3;24339:14;24324:29;;24175:184;;;;:::o;24365:132::-;24432:4;24455:3;24447:11;;24485:4;24480:3;24476:14;24468:22;;24365:132;;;:::o;24503:108::-;24580:24;24598:5;24580:24;:::i;:::-;24575:3;24568:37;24503:108;;:::o;24617:179::-;24686:10;24707:46;24749:3;24741:6;24707:46;:::i;:::-;24785:4;24780:3;24776:14;24762:28;;24617:179;;;;:::o;24802:113::-;24872:4;24904;24899:3;24895:14;24887:22;;24802:113;;;:::o;24951:732::-;25070:3;25099:54;25147:5;25099:54;:::i;:::-;25169:86;25248:6;25243:3;25169:86;:::i;:::-;25162:93;;25279:56;25329:5;25279:56;:::i;:::-;25358:7;25389:1;25374:284;25399:6;25396:1;25393:13;25374:284;;;25475:6;25469:13;25502:63;25561:3;25546:13;25502:63;:::i;:::-;25495:70;;25588:60;25641:6;25588:60;:::i;:::-;25578:70;;25434:224;25421:1;25418;25414:9;25409:14;;25374:284;;;25378:14;25674:3;25667:10;;25075:608;;;24951:732;;;;:::o;25689:831::-;25952:4;25990:3;25979:9;25975:19;25967:27;;26004:71;26072:1;26061:9;26057:17;26048:6;26004:71;:::i;:::-;26085:80;26161:2;26150:9;26146:18;26137:6;26085:80;:::i;:::-;26212:9;26206:4;26202:20;26197:2;26186:9;26182:18;26175:48;26240:108;26343:4;26334:6;26240:108;:::i;:::-;26232:116;;26358:72;26426:2;26415:9;26411:18;26402:6;26358:72;:::i;:::-;26440:73;26508:3;26497:9;26493:19;26484:6;26440:73;:::i;:::-;25689:831;;;;;;;;:::o;26526:807::-;26775:4;26813:3;26802:9;26798:19;26790:27;;26827:71;26895:1;26884:9;26880:17;26871:6;26827:71;:::i;:::-;26908:72;26976:2;26965:9;26961:18;26952:6;26908:72;:::i;:::-;26990:80;27066:2;27055:9;27051:18;27042:6;26990:80;:::i;:::-;27080;27156:2;27145:9;27141:18;27132:6;27080:80;:::i;:::-;27170:73;27238:3;27227:9;27223:19;27214:6;27170:73;:::i;:::-;27253;27321:3;27310:9;27306:19;27297:6;27253:73;:::i;:::-;26526:807;;;;;;;;;:::o;27339:663::-;27427:6;27435;27443;27492:2;27480:9;27471:7;27467:23;27463:32;27460:119;;;27498:79;;:::i;:::-;27460:119;27618:1;27643:64;27699:7;27690:6;27679:9;27675:22;27643:64;:::i;:::-;27633:74;;27589:128;27756:2;27782:64;27838:7;27829:6;27818:9;27814:22;27782:64;:::i;:::-;27772:74;;27727:129;27895:2;27921:64;27977:7;27968:6;27957:9;27953:22;27921:64;:::i;:::-;27911:74;;27866:129;27339:663;;;;;:::o;28008:720::-;28243:4;28281:3;28270:9;28266:19;28258:27;;28295:79;28371:1;28360:9;28356:17;28347:6;28295:79;:::i;:::-;28421:9;28415:4;28411:20;28406:2;28395:9;28391:18;28384:48;28449:108;28552:4;28543:6;28449:108;:::i;:::-;28441:116;;28567:72;28635:2;28624:9;28620:18;28611:6;28567:72;:::i;:::-;28649;28717:2;28706:9;28702:18;28693:6;28649:72;:::i;:::-;28008:720;;;;;;;:::o

Swarm Source

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