ETH Price: $3,445.89 (-0.92%)
Gas: 4 Gwei

Token

AGELESS AXOLOTLS (AA)
 

Overview

Max Total Supply

1,673 AA

Holders

199

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
lazthe01.eth
Balance
25 AA
0x09846c9ed5d569b3c2429b03997ca9f7bc76393a
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:
AgelessAxolotls

Compiler Version
v0.8.14+commit.80d49f37

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-05-26
*/

// SPDX-License-Identifier: GPL-3.0

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


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

pragma solidity ^0.8.0;

/**
 * @title Counters
 * @author Matt Condon (@shrugs)
 * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number
 * of elements in a mapping, issuing ERC721 ids, or counting request ids.
 *
 * Include with `using Counters for Counters.Counter;`
 */
library Counters {
    struct Counter {
        // This variable should never be directly accessed by users of the library: interactions must be restricted to
        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
        // this feature: see https://github.com/ethereum/solidity/issues/4637
        uint256 _value; // default: 0
    }

    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }

    function increment(Counter storage counter) internal {
        unchecked {
            counter._value += 1;
        }
    }

    function decrement(Counter storage counter) internal {
        uint256 value = counter._value;
        require(value > 0, "Counter: decrement overflow");
        unchecked {
            counter._value = value - 1;
        }
    }

    function reset(Counter storage counter) internal {
        counter._value = 0;
    }
}

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


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

pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}

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


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

pragma solidity ^0.8.0;

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

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

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


// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;


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

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

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

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

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

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

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

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


// OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

// File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol)

pragma solidity ^0.8.0;

/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
interface IERC721Receiver {
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

// File: @openzeppelin/contracts/utils/introspection/IERC165.sol


// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

// File: @openzeppelin/contracts/utils/introspection/ERC165.sol


// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)

pragma solidity ^0.8.0;


/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

// File: @openzeppelin/contracts/token/ERC721/IERC721.sol


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;


/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;

    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);
}

// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)

pragma solidity ^0.8.0;


/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Metadata is IERC721 {
    /**
     * @dev Returns the token collection name.
     */
    function name() external view returns (string memory);

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

    /**
     * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
     */
    function tokenURI(uint256 tokenId) external view returns (string memory);
}

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


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

pragma solidity ^0.8.0;








/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension, but not including the Enumerable extension, which is available separately as
 * {ERC721Enumerable}.
 */
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to owner address
    mapping(uint256 => address) private _owners;

    // Mapping owner address to token count
    mapping(address => uint256) private _balances;

    // Mapping from token ID to approved address
    mapping(uint256 => address) private _tokenApprovals;

    // Mapping from owner to operator approvals
    mapping(address => mapping(address => bool)) private _operatorApprovals;

    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return
            interfaceId == type(IERC721).interfaceId ||
            interfaceId == type(IERC721Metadata).interfaceId ||
            super.supportsInterface(interfaceId);
    }

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view virtual override returns (uint256) {
        require(owner != address(0), "ERC721: balance query for the zero address");
        return _balances[owner];
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        address owner = _owners[tokenId];
        require(owner != address(0), "ERC721: owner query for nonexistent token");
        return owner;
    }

    /**
     * @dev See {IERC721Metadata-name}.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev See {IERC721Metadata-symbol}.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");

        string memory baseURI = _baseURI();
        return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : "";
    }

    /**
     * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
     * token will be the concatenation of the `baseURI` and the `tokenId`. Empty
     * by default, can be overridden in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }

    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");

        require(
            _msgSender() == owner || isApprovedForAll(owner, _msgSender()),
            "ERC721: approve caller is not owner nor approved for all"
        );

        _approve(to, tokenId);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        require(_exists(tokenId), "ERC721: approved query for nonexistent token");

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        _setApprovalForAll(_msgSender(), operator, approved);
    }

    /**
     * @dev See {IERC721-isApprovedForAll}.
     */
    function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[owner][operator];
    }

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");

        _transfer(from, to, tokenId);
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
        _safeTransfer(from, to, tokenId, _data);
    }

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * `_data` is additional data, it has no specified format and it is sent in call to `to`.
     *
     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
     * implement alternative mechanisms to perform token transfer, such as signature-based.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
    }

    /**
     * @dev Returns whether `tokenId` exists.
     *
     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
     *
     * Tokens start existing when they are minted (`_mint`),
     * and stop existing when they are burned (`_burn`).
     */
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }

    /**
     * @dev Returns whether `spender` is allowed to manage `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender);
    }

    /**
     * @dev Safely mints `tokenId` and transfers it to `to`.
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }

    /**
     * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
     * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
     */
    function _safeMint(
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _mint(to, tokenId);
        require(
            _checkOnERC721Received(address(0), to, tokenId, _data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }

    /**
     * @dev Mints `tokenId` and transfers it to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - `to` cannot be the zero address.
     *
     * Emits a {Transfer} event.
     */
    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

        _beforeTokenTransfer(address(0), to, tokenId);

        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(address(0), to, tokenId);

        _afterTokenTransfer(address(0), to, tokenId);
    }

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);

        _beforeTokenTransfer(owner, address(0), tokenId);

        // Clear approvals
        _approve(address(0), tokenId);

        _balances[owner] -= 1;
        delete _owners[tokenId];

        emit Transfer(owner, address(0), tokenId);

        _afterTokenTransfer(owner, address(0), tokenId);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner");
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

        // Clear approvals from the previous owner
        _approve(address(0), tokenId);

        _balances[from] -= 1;
        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(from, to, tokenId);

        _afterTokenTransfer(from, to, tokenId);
    }

    /**
     * @dev Approve `to` to operate on `tokenId`
     *
     * Emits a {Approval} event.
     */
    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
    }

    /**
     * @dev Approve `operator` to operate on all of `owner` tokens
     *
     * Emits a {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC721: approve to caller");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
     * The call is not executed if the target address is not a contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
                return retval == IERC721Receiver.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, ``from``'s `tokenId` will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}

// File: contracts/Ageage.sol



// Amended by Code in
/**
    !Disclaimer!
*/

pragma solidity >=0.7.0 <0.9.0;




contract AgelessAxolotls is ERC721, Ownable {
  using Strings for uint256;
  using Counters for Counters.Counter;

  Counters.Counter private supply;

  string public uriPrefix = "";
  string public uriSuffix = ".json";
  string public hiddenMetadataUri;
  
  uint256 public cost = 0.08 ether;
  uint256 public maxSupply = 9999;
  uint256 public maxMintAmountPerTx = 3;

  bool public paused = true;
  bool public revealed = false;
  
  address[] private whitelistedAddresses;


  constructor() ERC721("AGELESS AXOLOTLS", "AA") {
    setHiddenMetadataUri("ipfs://QmYoud9DoN6ubusvaSnbD3NjSfY77DCwqEDM3GaQ7zUxmw/hidden.json");
  }
    modifier mintCompliance(uint256 _mintAmount) {
    require(_mintAmount > 0 && _mintAmount <= maxMintAmountPerTx, "Invalid mint amount!");
    require(supply.current() + _mintAmount <= maxSupply, "Max supply exceeded!");
    if (whitelistedAddresses.length > 0) {
        require(isAddressWhitelisted(msg.sender), "Not on the whitelist!");
    }
    _;
  }

  function totalSupply() public view returns (uint256) {
    return supply.current();
  }

  function mint(uint256 _mintAmount) public payable mintCompliance(_mintAmount) {
    require(!paused, "The contract is paused!");
    require(msg.value >= cost * _mintAmount, "Insufficient funds!");

    _mintLoop(msg.sender, _mintAmount);
  }
  
  function mintForAddress(uint256 _mintAmount, address _receiver) public mintCompliance(_mintAmount) onlyOwner {
    _mintLoop(_receiver, _mintAmount);
  }
  
  function setWhitelist(address[] calldata _addressArray) public onlyOwner {
        delete whitelistedAddresses;
        whitelistedAddresses = _addressArray;
  }

  function isAddressWhitelisted(address _user) private view returns (bool) {
    uint i = 0;
    while (i < whitelistedAddresses.length) {
        if(whitelistedAddresses[i] == _user) {
            return true;
        }
    i++;
    }
    return false;
  }

  function walletOfOwner(address _owner)
    public
    view
    returns (uint256[] memory)
  {
    uint256 ownerTokenCount = balanceOf(_owner);
    uint256[] memory ownedTokenIds = new uint256[](ownerTokenCount);
    uint256 currentTokenId = 1;
    uint256 ownedTokenIndex = 0;

    while (ownedTokenIndex < ownerTokenCount && currentTokenId <= maxSupply) {
      address currentTokenOwner = ownerOf(currentTokenId);

      if (currentTokenOwner == _owner) {
        ownedTokenIds[ownedTokenIndex] = currentTokenId;

        ownedTokenIndex++;
      }

      currentTokenId++;
    }

    return ownedTokenIds;
  }

  function tokenURI(uint256 _tokenId)
    public
    view
    virtual
    override
    returns (string memory)
  {
    require(
      _exists(_tokenId),
      "ERC721Metadata: URI query for nonexistent token"
    );

    if (revealed == false) {
      return hiddenMetadataUri;
    }

    string memory currentBaseURI = _baseURI();
    return bytes(currentBaseURI).length > 0
        ? string(abi.encodePacked(currentBaseURI, _tokenId.toString(), uriSuffix))
        : "";
  }

  function setRevealed(bool _state) public onlyOwner {
    revealed = _state;
  }

  function setCost(uint256 _cost) public onlyOwner {
    cost = _cost;
  }

  function setMaxMintAmountPerTx(uint256 _maxMintAmountPerTx) public onlyOwner {
    maxMintAmountPerTx = _maxMintAmountPerTx;
  }

  function setHiddenMetadataUri(string memory _hiddenMetadataUri) public onlyOwner {
    hiddenMetadataUri = _hiddenMetadataUri;
  }

  function setUriPrefix(string memory _uriPrefix) public onlyOwner {
    uriPrefix = _uriPrefix;
  }

  function setUriSuffix(string memory _uriSuffix) public onlyOwner {
    uriSuffix = _uriSuffix;
  }

  function setPaused(bool _state) public onlyOwner {
    paused = _state;
  }

  function withdraw() public onlyOwner {
    // This will transfer the contract balance to the owner.
    // Do not remove this otherwise you will not be able to withdraw the funds.
    // =============================================================================
    (bool os, ) = payable(owner()).call{value: address(this).balance}("");
    require(os);
    // =============================================================================
  }

  function _mintLoop(address _receiver, uint256 _mintAmount) internal {
    for (uint256 i = 0; i < _mintAmount; i++) {
      supply.increment();
      _safeMint(_receiver, supply.current());
    }
  }

  function _baseURI() internal view virtual override returns (string memory) {
    return uriPrefix;
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","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":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hiddenMetadataUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmountPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"mintForAddress","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_hiddenMetadataUri","type":"string"}],"name":"setHiddenMetadataUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxMintAmountPerTx","type":"uint256"}],"name":"setMaxMintAmountPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setRevealed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriPrefix","type":"string"}],"name":"setUriPrefix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriSuffix","type":"string"}],"name":"setUriSuffix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addressArray","type":"address[]"}],"name":"setWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","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":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uriPrefix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uriSuffix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405260405180602001604052806000815250600890805190602001906200002b92919062000368565b506040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600990805190602001906200007992919062000368565b5067011c37937e080000600b5561270f600c556003600d556001600e60006101000a81548160ff0219169083151502179055506000600e60016101000a81548160ff021916908315150217905550348015620000d457600080fd5b506040518060400160405280601081526020017f4147454c4553532041584f4c4f544c53000000000000000000000000000000008152506040518060400160405280600281526020017f414100000000000000000000000000000000000000000000000000000000000081525081600090805190602001906200015992919062000368565b5080600190805190602001906200017292919062000368565b5050506200019562000189620001c560201b60201c565b620001cd60201b60201c565b620001bf60405180608001604052806041815260200162004af8604191396200029360201b60201c565b620004ff565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002a3620001c560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002c96200033e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000322576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003199062000479565b60405180910390fd5b80600a90805190602001906200033a92919062000368565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8280546200037690620004ca565b90600052602060002090601f0160209004810192826200039a5760008555620003e6565b82601f10620003b557805160ff1916838001178555620003e6565b82800160010185558215620003e6579182015b82811115620003e5578251825591602001919060010190620003c8565b5b509050620003f59190620003f9565b5090565b5b8082111562000414576000816000905550600101620003fa565b5090565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200046160208362000418565b91506200046e8262000429565b602082019050919050565b60006020820190508181036000830152620004948162000452565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620004e357607f821691505b602082108103620004f957620004f86200049b565b5b50919050565b6145e9806200050f6000396000f3fe60806040526004361061021a5760003560e01c80636352211e11610123578063a45ba8e7116100ab578063e0a808531161006f578063e0a808531461079e578063e985e9c5146107c7578063efbd73f414610804578063f2fde38b1461082d578063f4217648146108565761021a565b8063a45ba8e7146106b9578063b071401b146106e4578063b88d4fde1461070d578063c87b56dd14610736578063d5abeb01146107735761021a565b80638da5cb5b116100f25780638da5cb5b146105f357806394354fd01461061e57806395d89b4114610649578063a0712d6814610674578063a22cb465146106905761021a565b80636352211e1461053957806370a0823114610576578063715018a6146105b35780637ec4a659146105ca5761021a565b80633ccfd60b116101a65780634fdd43cb116101755780634fdd43cb14610464578063518302271461048d5780635503a0e8146104b85780635c975abb146104e357806362b99ad41461050e5761021a565b80633ccfd60b146103be57806342842e0e146103d5578063438b6300146103fe57806344a0d68a1461043b5761021a565b806313faede6116101ed57806313faede6146102ed57806316ba10e01461031857806316c38b3c1461034157806318160ddd1461036a57806323b872dd146103955761021a565b806301ffc9a71461021f57806306fdde031461025c578063081812fc14610287578063095ea7b3146102c4575b600080fd5b34801561022b57600080fd5b5061024660048036038101906102419190612e2f565b61087f565b6040516102539190612e77565b60405180910390f35b34801561026857600080fd5b50610271610961565b60405161027e9190612f2b565b60405180910390f35b34801561029357600080fd5b506102ae60048036038101906102a99190612f83565b6109f3565b6040516102bb9190612ff1565b60405180910390f35b3480156102d057600080fd5b506102eb60048036038101906102e69190613038565b610a78565b005b3480156102f957600080fd5b50610302610b8f565b60405161030f9190613087565b60405180910390f35b34801561032457600080fd5b5061033f600480360381019061033a91906131d7565b610b95565b005b34801561034d57600080fd5b506103686004803603810190610363919061324c565b610c2b565b005b34801561037657600080fd5b5061037f610cc4565b60405161038c9190613087565b60405180910390f35b3480156103a157600080fd5b506103bc60048036038101906103b79190613279565b610cd5565b005b3480156103ca57600080fd5b506103d3610d35565b005b3480156103e157600080fd5b506103fc60048036038101906103f79190613279565b610e31565b005b34801561040a57600080fd5b50610425600480360381019061042091906132cc565b610e51565b60405161043291906133b7565b60405180910390f35b34801561044757600080fd5b50610462600480360381019061045d9190612f83565b610f5b565b005b34801561047057600080fd5b5061048b600480360381019061048691906131d7565b610fe1565b005b34801561049957600080fd5b506104a2611077565b6040516104af9190612e77565b60405180910390f35b3480156104c457600080fd5b506104cd61108a565b6040516104da9190612f2b565b60405180910390f35b3480156104ef57600080fd5b506104f8611118565b6040516105059190612e77565b60405180910390f35b34801561051a57600080fd5b5061052361112b565b6040516105309190612f2b565b60405180910390f35b34801561054557600080fd5b50610560600480360381019061055b9190612f83565b6111b9565b60405161056d9190612ff1565b60405180910390f35b34801561058257600080fd5b5061059d600480360381019061059891906132cc565b61126a565b6040516105aa9190613087565b60405180910390f35b3480156105bf57600080fd5b506105c8611321565b005b3480156105d657600080fd5b506105f160048036038101906105ec91906131d7565b6113a9565b005b3480156105ff57600080fd5b5061060861143f565b6040516106159190612ff1565b60405180910390f35b34801561062a57600080fd5b50610633611469565b6040516106409190613087565b60405180910390f35b34801561065557600080fd5b5061065e61146f565b60405161066b9190612f2b565b60405180910390f35b61068e60048036038101906106899190612f83565b611501565b005b34801561069c57600080fd5b506106b760048036038101906106b291906133d9565b6116b1565b005b3480156106c557600080fd5b506106ce6116c7565b6040516106db9190612f2b565b60405180910390f35b3480156106f057600080fd5b5061070b60048036038101906107069190612f83565b611755565b005b34801561071957600080fd5b50610734600480360381019061072f91906134ba565b6117db565b005b34801561074257600080fd5b5061075d60048036038101906107589190612f83565b61183d565b60405161076a9190612f2b565b60405180910390f35b34801561077f57600080fd5b50610788611995565b6040516107959190613087565b60405180910390f35b3480156107aa57600080fd5b506107c560048036038101906107c0919061324c565b61199b565b005b3480156107d357600080fd5b506107ee60048036038101906107e9919061353d565b611a34565b6040516107fb9190612e77565b60405180910390f35b34801561081057600080fd5b5061082b6004803603810190610826919061357d565b611ac8565b005b34801561083957600080fd5b50610854600480360381019061084f91906132cc565b611c55565b005b34801561086257600080fd5b5061087d6004803603810190610878919061361d565b611d4c565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061094a57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061095a575061095982611dec565b5b9050919050565b60606000805461097090613699565b80601f016020809104026020016040519081016040528092919081815260200182805461099c90613699565b80156109e95780601f106109be576101008083540402835291602001916109e9565b820191906000526020600020905b8154815290600101906020018083116109cc57829003601f168201915b5050505050905090565b60006109fe82611e56565b610a3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a349061373c565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a83826111b9565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610af3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aea906137ce565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b12611ec2565b73ffffffffffffffffffffffffffffffffffffffff161480610b415750610b4081610b3b611ec2565b611a34565b5b610b80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7790613860565b60405180910390fd5b610b8a8383611eca565b505050565b600b5481565b610b9d611ec2565b73ffffffffffffffffffffffffffffffffffffffff16610bbb61143f565b73ffffffffffffffffffffffffffffffffffffffff1614610c11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c08906138cc565b60405180910390fd5b8060099080519060200190610c27929190612c5f565b5050565b610c33611ec2565b73ffffffffffffffffffffffffffffffffffffffff16610c5161143f565b73ffffffffffffffffffffffffffffffffffffffff1614610ca7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9e906138cc565b60405180910390fd5b80600e60006101000a81548160ff02191690831515021790555050565b6000610cd06007611f83565b905090565b610ce6610ce0611ec2565b82611f91565b610d25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1c9061395e565b60405180910390fd5b610d3083838361206f565b505050565b610d3d611ec2565b73ffffffffffffffffffffffffffffffffffffffff16610d5b61143f565b73ffffffffffffffffffffffffffffffffffffffff1614610db1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da8906138cc565b60405180910390fd5b6000610dbb61143f565b73ffffffffffffffffffffffffffffffffffffffff1647604051610dde906139af565b60006040518083038185875af1925050503d8060008114610e1b576040519150601f19603f3d011682016040523d82523d6000602084013e610e20565b606091505b5050905080610e2e57600080fd5b50565b610e4c838383604051806020016040528060008152506117db565b505050565b60606000610e5e8361126a565b905060008167ffffffffffffffff811115610e7c57610e7b6130ac565b5b604051908082528060200260200182016040528015610eaa5781602001602082028036833780820191505090505b50905060006001905060005b8381108015610ec75750600c548211155b15610f4f576000610ed7836111b9565b90508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f3b5782848381518110610f2057610f1f6139c4565b5b6020026020010181815250508180610f3790613a22565b9250505b8280610f4690613a22565b93505050610eb6565b82945050505050919050565b610f63611ec2565b73ffffffffffffffffffffffffffffffffffffffff16610f8161143f565b73ffffffffffffffffffffffffffffffffffffffff1614610fd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fce906138cc565b60405180910390fd5b80600b8190555050565b610fe9611ec2565b73ffffffffffffffffffffffffffffffffffffffff1661100761143f565b73ffffffffffffffffffffffffffffffffffffffff161461105d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611054906138cc565b60405180910390fd5b80600a9080519060200190611073929190612c5f565b5050565b600e60019054906101000a900460ff1681565b6009805461109790613699565b80601f01602080910402602001604051908101604052809291908181526020018280546110c390613699565b80156111105780601f106110e557610100808354040283529160200191611110565b820191906000526020600020905b8154815290600101906020018083116110f357829003601f168201915b505050505081565b600e60009054906101000a900460ff1681565b6008805461113890613699565b80601f016020809104026020016040519081016040528092919081815260200182805461116490613699565b80156111b15780601f10611186576101008083540402835291602001916111b1565b820191906000526020600020905b81548152906001019060200180831161119457829003601f168201915b505050505081565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611261576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125890613adc565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036112da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d190613b6e565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611329611ec2565b73ffffffffffffffffffffffffffffffffffffffff1661134761143f565b73ffffffffffffffffffffffffffffffffffffffff161461139d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611394906138cc565b60405180910390fd5b6113a760006122d5565b565b6113b1611ec2565b73ffffffffffffffffffffffffffffffffffffffff166113cf61143f565b73ffffffffffffffffffffffffffffffffffffffff1614611425576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141c906138cc565b60405180910390fd5b806008908051906020019061143b929190612c5f565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600d5481565b60606001805461147e90613699565b80601f01602080910402602001604051908101604052809291908181526020018280546114aa90613699565b80156114f75780601f106114cc576101008083540402835291602001916114f7565b820191906000526020600020905b8154815290600101906020018083116114da57829003601f168201915b5050505050905090565b806000811180156115145750600d548111155b611553576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154a90613bda565b60405180910390fd5b600c54816115616007611f83565b61156b9190613bfa565b11156115ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a390613c9c565b60405180910390fd5b6000600f805490501115611603576115c33361239b565b611602576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f990613d08565b60405180910390fd5b5b600e60009054906101000a900460ff1615611653576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164a90613d74565b60405180910390fd5b81600b546116619190613d94565b3410156116a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169a90613e3a565b60405180910390fd5b6116ad3383612449565b5050565b6116c36116bc611ec2565b8383612489565b5050565b600a80546116d490613699565b80601f016020809104026020016040519081016040528092919081815260200182805461170090613699565b801561174d5780601f106117225761010080835404028352916020019161174d565b820191906000526020600020905b81548152906001019060200180831161173057829003601f168201915b505050505081565b61175d611ec2565b73ffffffffffffffffffffffffffffffffffffffff1661177b61143f565b73ffffffffffffffffffffffffffffffffffffffff16146117d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c8906138cc565b60405180910390fd5b80600d8190555050565b6117ec6117e6611ec2565b83611f91565b61182b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118229061395e565b60405180910390fd5b611837848484846125f5565b50505050565b606061184882611e56565b611887576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187e90613ecc565b60405180910390fd5b60001515600e60019054906101000a900460ff1615150361193457600a80546118af90613699565b80601f01602080910402602001604051908101604052809291908181526020018280546118db90613699565b80156119285780601f106118fd57610100808354040283529160200191611928565b820191906000526020600020905b81548152906001019060200180831161190b57829003601f168201915b50505050509050611990565b600061193e612651565b9050600081511161195e576040518060200160405280600081525061198c565b80611968846126e3565b600960405160200161197c93929190613fbc565b6040516020818303038152906040525b9150505b919050565b600c5481565b6119a3611ec2565b73ffffffffffffffffffffffffffffffffffffffff166119c161143f565b73ffffffffffffffffffffffffffffffffffffffff1614611a17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0e906138cc565b60405180910390fd5b80600e60016101000a81548160ff02191690831515021790555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b81600081118015611adb5750600d548111155b611b1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1190613bda565b60405180910390fd5b600c5481611b286007611f83565b611b329190613bfa565b1115611b73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6a90613c9c565b60405180910390fd5b6000600f805490501115611bca57611b8a3361239b565b611bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc090613d08565b60405180910390fd5b5b611bd2611ec2565b73ffffffffffffffffffffffffffffffffffffffff16611bf061143f565b73ffffffffffffffffffffffffffffffffffffffff1614611c46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3d906138cc565b60405180910390fd5b611c508284612449565b505050565b611c5d611ec2565b73ffffffffffffffffffffffffffffffffffffffff16611c7b61143f565b73ffffffffffffffffffffffffffffffffffffffff1614611cd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc8906138cc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d379061405f565b60405180910390fd5b611d49816122d5565b50565b611d54611ec2565b73ffffffffffffffffffffffffffffffffffffffff16611d7261143f565b73ffffffffffffffffffffffffffffffffffffffff1614611dc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbf906138cc565b60405180910390fd5b600f6000611dd69190612ce5565b8181600f9190611de7929190612d06565b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611f3d836111b9565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b6000611f9c82611e56565b611fdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd2906140f1565b60405180910390fd5b6000611fe6836111b9565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061202857506120278185611a34565b5b8061206657508373ffffffffffffffffffffffffffffffffffffffff1661204e846109f3565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661208f826111b9565b73ffffffffffffffffffffffffffffffffffffffff16146120e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120dc90614183565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612154576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214b90614215565b60405180910390fd5b61215f838383612843565b61216a600082611eca565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121ba9190614235565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122119190613bfa565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46122d0838383612848565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080600090505b600f8054905081101561243e578273ffffffffffffffffffffffffffffffffffffffff16600f82815481106123db576123da6139c4565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361242b576001915050612444565b808061243690613a22565b9150506123a3565b60009150505b919050565b60005b818110156124845761245e600761284d565b6124718361246c6007611f83565b612863565b808061247c90613a22565b91505061244c565b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036124f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ee906142b5565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516125e89190612e77565b60405180910390a3505050565b61260084848461206f565b61260c84848484612881565b61264b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264290614347565b60405180910390fd5b50505050565b60606008805461266090613699565b80601f016020809104026020016040519081016040528092919081815260200182805461268c90613699565b80156126d95780601f106126ae576101008083540402835291602001916126d9565b820191906000526020600020905b8154815290600101906020018083116126bc57829003601f168201915b5050505050905090565b60606000820361272a576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061283e565b600082905060005b6000821461275c57808061274590613a22565b915050600a826127559190614396565b9150612732565b60008167ffffffffffffffff811115612778576127776130ac565b5b6040519080825280601f01601f1916602001820160405280156127aa5781602001600182028036833780820191505090505b5090505b60008514612837576001826127c39190614235565b9150600a856127d291906143c7565b60306127de9190613bfa565b60f81b8183815181106127f4576127f36139c4565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856128309190614396565b94506127ae565b8093505050505b919050565b505050565b505050565b6001816000016000828254019250508190555050565b61287d828260405180602001604052806000815250612a08565b5050565b60006128a28473ffffffffffffffffffffffffffffffffffffffff16612a63565b156129fb578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026128cb611ec2565b8786866040518563ffffffff1660e01b81526004016128ed949392919061444d565b6020604051808303816000875af192505050801561292957506040513d601f19601f8201168201806040525081019061292691906144ae565b60015b6129ab573d8060008114612959576040519150601f19603f3d011682016040523d82523d6000602084013e61295e565b606091505b5060008151036129a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299a90614347565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612a00565b600190505b949350505050565b612a128383612a86565b612a1f6000848484612881565b612a5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5590614347565b60405180910390fd5b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612af5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aec90614527565b60405180910390fd5b612afe81611e56565b15612b3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b3590614593565b60405180910390fd5b612b4a60008383612843565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b9a9190613bfa565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612c5b60008383612848565b5050565b828054612c6b90613699565b90600052602060002090601f016020900481019282612c8d5760008555612cd4565b82601f10612ca657805160ff1916838001178555612cd4565b82800160010185558215612cd4579182015b82811115612cd3578251825591602001919060010190612cb8565b5b509050612ce19190612da6565b5090565b5080546000825590600052602060002090810190612d039190612da6565b50565b828054828255906000526020600020908101928215612d95579160200282015b82811115612d9457823573ffffffffffffffffffffffffffffffffffffffff168260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190612d26565b5b509050612da29190612da6565b5090565b5b80821115612dbf576000816000905550600101612da7565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612e0c81612dd7565b8114612e1757600080fd5b50565b600081359050612e2981612e03565b92915050565b600060208284031215612e4557612e44612dcd565b5b6000612e5384828501612e1a565b91505092915050565b60008115159050919050565b612e7181612e5c565b82525050565b6000602082019050612e8c6000830184612e68565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612ecc578082015181840152602081019050612eb1565b83811115612edb576000848401525b50505050565b6000601f19601f8301169050919050565b6000612efd82612e92565b612f078185612e9d565b9350612f17818560208601612eae565b612f2081612ee1565b840191505092915050565b60006020820190508181036000830152612f458184612ef2565b905092915050565b6000819050919050565b612f6081612f4d565b8114612f6b57600080fd5b50565b600081359050612f7d81612f57565b92915050565b600060208284031215612f9957612f98612dcd565b5b6000612fa784828501612f6e565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612fdb82612fb0565b9050919050565b612feb81612fd0565b82525050565b60006020820190506130066000830184612fe2565b92915050565b61301581612fd0565b811461302057600080fd5b50565b6000813590506130328161300c565b92915050565b6000806040838503121561304f5761304e612dcd565b5b600061305d85828601613023565b925050602061306e85828601612f6e565b9150509250929050565b61308181612f4d565b82525050565b600060208201905061309c6000830184613078565b92915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6130e482612ee1565b810181811067ffffffffffffffff82111715613103576131026130ac565b5b80604052505050565b6000613116612dc3565b905061312282826130db565b919050565b600067ffffffffffffffff821115613142576131416130ac565b5b61314b82612ee1565b9050602081019050919050565b82818337600083830152505050565b600061317a61317584613127565b61310c565b905082815260208101848484011115613196576131956130a7565b5b6131a1848285613158565b509392505050565b600082601f8301126131be576131bd6130a2565b5b81356131ce848260208601613167565b91505092915050565b6000602082840312156131ed576131ec612dcd565b5b600082013567ffffffffffffffff81111561320b5761320a612dd2565b5b613217848285016131a9565b91505092915050565b61322981612e5c565b811461323457600080fd5b50565b60008135905061324681613220565b92915050565b60006020828403121561326257613261612dcd565b5b600061327084828501613237565b91505092915050565b60008060006060848603121561329257613291612dcd565b5b60006132a086828701613023565b93505060206132b186828701613023565b92505060406132c286828701612f6e565b9150509250925092565b6000602082840312156132e2576132e1612dcd565b5b60006132f084828501613023565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61332e81612f4d565b82525050565b60006133408383613325565b60208301905092915050565b6000602082019050919050565b6000613364826132f9565b61336e8185613304565b935061337983613315565b8060005b838110156133aa5781516133918882613334565b975061339c8361334c565b92505060018101905061337d565b5085935050505092915050565b600060208201905081810360008301526133d18184613359565b905092915050565b600080604083850312156133f0576133ef612dcd565b5b60006133fe85828601613023565b925050602061340f85828601613237565b9150509250929050565b600067ffffffffffffffff821115613434576134336130ac565b5b61343d82612ee1565b9050602081019050919050565b600061345d61345884613419565b61310c565b905082815260208101848484011115613479576134786130a7565b5b613484848285613158565b509392505050565b600082601f8301126134a1576134a06130a2565b5b81356134b184826020860161344a565b91505092915050565b600080600080608085870312156134d4576134d3612dcd565b5b60006134e287828801613023565b94505060206134f387828801613023565b935050604061350487828801612f6e565b925050606085013567ffffffffffffffff81111561352557613524612dd2565b5b6135318782880161348c565b91505092959194509250565b6000806040838503121561355457613553612dcd565b5b600061356285828601613023565b925050602061357385828601613023565b9150509250929050565b6000806040838503121561359457613593612dcd565b5b60006135a285828601612f6e565b92505060206135b385828601613023565b9150509250929050565b600080fd5b600080fd5b60008083601f8401126135dd576135dc6130a2565b5b8235905067ffffffffffffffff8111156135fa576135f96135bd565b5b602083019150836020820283011115613616576136156135c2565b5b9250929050565b6000806020838503121561363457613633612dcd565b5b600083013567ffffffffffffffff81111561365257613651612dd2565b5b61365e858286016135c7565b92509250509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806136b157607f821691505b6020821081036136c4576136c361366a565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613726602c83612e9d565b9150613731826136ca565b604082019050919050565b6000602082019050818103600083015261375581613719565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006137b8602183612e9d565b91506137c38261375c565b604082019050919050565b600060208201905081810360008301526137e7816137ab565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b600061384a603883612e9d565b9150613855826137ee565b604082019050919050565b600060208201905081810360008301526138798161383d565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006138b6602083612e9d565b91506138c182613880565b602082019050919050565b600060208201905081810360008301526138e5816138a9565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000613948603183612e9d565b9150613953826138ec565b604082019050919050565b600060208201905081810360008301526139778161393b565b9050919050565b600081905092915050565b50565b600061399960008361397e565b91506139a482613989565b600082019050919050565b60006139ba8261398c565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613a2d82612f4d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613a5f57613a5e6139f3565b5b600182019050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000613ac6602983612e9d565b9150613ad182613a6a565b604082019050919050565b60006020820190508181036000830152613af581613ab9565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000613b58602a83612e9d565b9150613b6382613afc565b604082019050919050565b60006020820190508181036000830152613b8781613b4b565b9050919050565b7f496e76616c6964206d696e7420616d6f756e7421000000000000000000000000600082015250565b6000613bc4601483612e9d565b9150613bcf82613b8e565b602082019050919050565b60006020820190508181036000830152613bf381613bb7565b9050919050565b6000613c0582612f4d565b9150613c1083612f4d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613c4557613c446139f3565b5b828201905092915050565b7f4d617820737570706c7920657863656564656421000000000000000000000000600082015250565b6000613c86601483612e9d565b9150613c9182613c50565b602082019050919050565b60006020820190508181036000830152613cb581613c79565b9050919050565b7f4e6f74206f6e207468652077686974656c697374210000000000000000000000600082015250565b6000613cf2601583612e9d565b9150613cfd82613cbc565b602082019050919050565b60006020820190508181036000830152613d2181613ce5565b9050919050565b7f54686520636f6e74726163742069732070617573656421000000000000000000600082015250565b6000613d5e601783612e9d565b9150613d6982613d28565b602082019050919050565b60006020820190508181036000830152613d8d81613d51565b9050919050565b6000613d9f82612f4d565b9150613daa83612f4d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613de357613de26139f3565b5b828202905092915050565b7f496e73756666696369656e742066756e64732100000000000000000000000000600082015250565b6000613e24601383612e9d565b9150613e2f82613dee565b602082019050919050565b60006020820190508181036000830152613e5381613e17565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000613eb6602f83612e9d565b9150613ec182613e5a565b604082019050919050565b60006020820190508181036000830152613ee581613ea9565b9050919050565b600081905092915050565b6000613f0282612e92565b613f0c8185613eec565b9350613f1c818560208601612eae565b80840191505092915050565b60008190508160005260206000209050919050565b60008154613f4a81613699565b613f548186613eec565b94506001821660008114613f6f5760018114613f8057613fb3565b60ff19831686528186019350613fb3565b613f8985613f28565b60005b83811015613fab57815481890152600182019150602081019050613f8c565b838801955050505b50505092915050565b6000613fc88286613ef7565b9150613fd48285613ef7565b9150613fe08284613f3d565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614049602683612e9d565b915061405482613fed565b604082019050919050565b600060208201905081810360008301526140788161403c565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006140db602c83612e9d565b91506140e68261407f565b604082019050919050565b6000602082019050818103600083015261410a816140ce565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b600061416d602583612e9d565b915061417882614111565b604082019050919050565b6000602082019050818103600083015261419c81614160565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006141ff602483612e9d565b915061420a826141a3565b604082019050919050565b6000602082019050818103600083015261422e816141f2565b9050919050565b600061424082612f4d565b915061424b83612f4d565b92508282101561425e5761425d6139f3565b5b828203905092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b600061429f601983612e9d565b91506142aa82614269565b602082019050919050565b600060208201905081810360008301526142ce81614292565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000614331603283612e9d565b915061433c826142d5565b604082019050919050565b6000602082019050818103600083015261436081614324565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006143a182612f4d565b91506143ac83612f4d565b9250826143bc576143bb614367565b5b828204905092915050565b60006143d282612f4d565b91506143dd83612f4d565b9250826143ed576143ec614367565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b600061441f826143f8565b6144298185614403565b9350614439818560208601612eae565b61444281612ee1565b840191505092915050565b60006080820190506144626000830187612fe2565b61446f6020830186612fe2565b61447c6040830185613078565b818103606083015261448e8184614414565b905095945050505050565b6000815190506144a881612e03565b92915050565b6000602082840312156144c4576144c3612dcd565b5b60006144d284828501614499565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000614511602083612e9d565b915061451c826144db565b602082019050919050565b6000602082019050818103600083015261454081614504565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b600061457d601c83612e9d565b915061458882614547565b602082019050919050565b600060208201905081810360008301526145ac81614570565b905091905056fea264697066735822122095ee639eefd32c77969d7235b315e370391d168f3b4decdfc91f8cf721f4dd1f64736f6c634300080e0033697066733a2f2f516d596f756439446f4e36756275737661536e6244334e6a53665937374443777145444d33476151377a55786d772f68696464656e2e6a736f6e

Deployed Bytecode

0x60806040526004361061021a5760003560e01c80636352211e11610123578063a45ba8e7116100ab578063e0a808531161006f578063e0a808531461079e578063e985e9c5146107c7578063efbd73f414610804578063f2fde38b1461082d578063f4217648146108565761021a565b8063a45ba8e7146106b9578063b071401b146106e4578063b88d4fde1461070d578063c87b56dd14610736578063d5abeb01146107735761021a565b80638da5cb5b116100f25780638da5cb5b146105f357806394354fd01461061e57806395d89b4114610649578063a0712d6814610674578063a22cb465146106905761021a565b80636352211e1461053957806370a0823114610576578063715018a6146105b35780637ec4a659146105ca5761021a565b80633ccfd60b116101a65780634fdd43cb116101755780634fdd43cb14610464578063518302271461048d5780635503a0e8146104b85780635c975abb146104e357806362b99ad41461050e5761021a565b80633ccfd60b146103be57806342842e0e146103d5578063438b6300146103fe57806344a0d68a1461043b5761021a565b806313faede6116101ed57806313faede6146102ed57806316ba10e01461031857806316c38b3c1461034157806318160ddd1461036a57806323b872dd146103955761021a565b806301ffc9a71461021f57806306fdde031461025c578063081812fc14610287578063095ea7b3146102c4575b600080fd5b34801561022b57600080fd5b5061024660048036038101906102419190612e2f565b61087f565b6040516102539190612e77565b60405180910390f35b34801561026857600080fd5b50610271610961565b60405161027e9190612f2b565b60405180910390f35b34801561029357600080fd5b506102ae60048036038101906102a99190612f83565b6109f3565b6040516102bb9190612ff1565b60405180910390f35b3480156102d057600080fd5b506102eb60048036038101906102e69190613038565b610a78565b005b3480156102f957600080fd5b50610302610b8f565b60405161030f9190613087565b60405180910390f35b34801561032457600080fd5b5061033f600480360381019061033a91906131d7565b610b95565b005b34801561034d57600080fd5b506103686004803603810190610363919061324c565b610c2b565b005b34801561037657600080fd5b5061037f610cc4565b60405161038c9190613087565b60405180910390f35b3480156103a157600080fd5b506103bc60048036038101906103b79190613279565b610cd5565b005b3480156103ca57600080fd5b506103d3610d35565b005b3480156103e157600080fd5b506103fc60048036038101906103f79190613279565b610e31565b005b34801561040a57600080fd5b50610425600480360381019061042091906132cc565b610e51565b60405161043291906133b7565b60405180910390f35b34801561044757600080fd5b50610462600480360381019061045d9190612f83565b610f5b565b005b34801561047057600080fd5b5061048b600480360381019061048691906131d7565b610fe1565b005b34801561049957600080fd5b506104a2611077565b6040516104af9190612e77565b60405180910390f35b3480156104c457600080fd5b506104cd61108a565b6040516104da9190612f2b565b60405180910390f35b3480156104ef57600080fd5b506104f8611118565b6040516105059190612e77565b60405180910390f35b34801561051a57600080fd5b5061052361112b565b6040516105309190612f2b565b60405180910390f35b34801561054557600080fd5b50610560600480360381019061055b9190612f83565b6111b9565b60405161056d9190612ff1565b60405180910390f35b34801561058257600080fd5b5061059d600480360381019061059891906132cc565b61126a565b6040516105aa9190613087565b60405180910390f35b3480156105bf57600080fd5b506105c8611321565b005b3480156105d657600080fd5b506105f160048036038101906105ec91906131d7565b6113a9565b005b3480156105ff57600080fd5b5061060861143f565b6040516106159190612ff1565b60405180910390f35b34801561062a57600080fd5b50610633611469565b6040516106409190613087565b60405180910390f35b34801561065557600080fd5b5061065e61146f565b60405161066b9190612f2b565b60405180910390f35b61068e60048036038101906106899190612f83565b611501565b005b34801561069c57600080fd5b506106b760048036038101906106b291906133d9565b6116b1565b005b3480156106c557600080fd5b506106ce6116c7565b6040516106db9190612f2b565b60405180910390f35b3480156106f057600080fd5b5061070b60048036038101906107069190612f83565b611755565b005b34801561071957600080fd5b50610734600480360381019061072f91906134ba565b6117db565b005b34801561074257600080fd5b5061075d60048036038101906107589190612f83565b61183d565b60405161076a9190612f2b565b60405180910390f35b34801561077f57600080fd5b50610788611995565b6040516107959190613087565b60405180910390f35b3480156107aa57600080fd5b506107c560048036038101906107c0919061324c565b61199b565b005b3480156107d357600080fd5b506107ee60048036038101906107e9919061353d565b611a34565b6040516107fb9190612e77565b60405180910390f35b34801561081057600080fd5b5061082b6004803603810190610826919061357d565b611ac8565b005b34801561083957600080fd5b50610854600480360381019061084f91906132cc565b611c55565b005b34801561086257600080fd5b5061087d6004803603810190610878919061361d565b611d4c565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061094a57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061095a575061095982611dec565b5b9050919050565b60606000805461097090613699565b80601f016020809104026020016040519081016040528092919081815260200182805461099c90613699565b80156109e95780601f106109be576101008083540402835291602001916109e9565b820191906000526020600020905b8154815290600101906020018083116109cc57829003601f168201915b5050505050905090565b60006109fe82611e56565b610a3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a349061373c565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a83826111b9565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610af3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aea906137ce565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b12611ec2565b73ffffffffffffffffffffffffffffffffffffffff161480610b415750610b4081610b3b611ec2565b611a34565b5b610b80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7790613860565b60405180910390fd5b610b8a8383611eca565b505050565b600b5481565b610b9d611ec2565b73ffffffffffffffffffffffffffffffffffffffff16610bbb61143f565b73ffffffffffffffffffffffffffffffffffffffff1614610c11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c08906138cc565b60405180910390fd5b8060099080519060200190610c27929190612c5f565b5050565b610c33611ec2565b73ffffffffffffffffffffffffffffffffffffffff16610c5161143f565b73ffffffffffffffffffffffffffffffffffffffff1614610ca7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9e906138cc565b60405180910390fd5b80600e60006101000a81548160ff02191690831515021790555050565b6000610cd06007611f83565b905090565b610ce6610ce0611ec2565b82611f91565b610d25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1c9061395e565b60405180910390fd5b610d3083838361206f565b505050565b610d3d611ec2565b73ffffffffffffffffffffffffffffffffffffffff16610d5b61143f565b73ffffffffffffffffffffffffffffffffffffffff1614610db1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da8906138cc565b60405180910390fd5b6000610dbb61143f565b73ffffffffffffffffffffffffffffffffffffffff1647604051610dde906139af565b60006040518083038185875af1925050503d8060008114610e1b576040519150601f19603f3d011682016040523d82523d6000602084013e610e20565b606091505b5050905080610e2e57600080fd5b50565b610e4c838383604051806020016040528060008152506117db565b505050565b60606000610e5e8361126a565b905060008167ffffffffffffffff811115610e7c57610e7b6130ac565b5b604051908082528060200260200182016040528015610eaa5781602001602082028036833780820191505090505b50905060006001905060005b8381108015610ec75750600c548211155b15610f4f576000610ed7836111b9565b90508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f3b5782848381518110610f2057610f1f6139c4565b5b6020026020010181815250508180610f3790613a22565b9250505b8280610f4690613a22565b93505050610eb6565b82945050505050919050565b610f63611ec2565b73ffffffffffffffffffffffffffffffffffffffff16610f8161143f565b73ffffffffffffffffffffffffffffffffffffffff1614610fd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fce906138cc565b60405180910390fd5b80600b8190555050565b610fe9611ec2565b73ffffffffffffffffffffffffffffffffffffffff1661100761143f565b73ffffffffffffffffffffffffffffffffffffffff161461105d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611054906138cc565b60405180910390fd5b80600a9080519060200190611073929190612c5f565b5050565b600e60019054906101000a900460ff1681565b6009805461109790613699565b80601f01602080910402602001604051908101604052809291908181526020018280546110c390613699565b80156111105780601f106110e557610100808354040283529160200191611110565b820191906000526020600020905b8154815290600101906020018083116110f357829003601f168201915b505050505081565b600e60009054906101000a900460ff1681565b6008805461113890613699565b80601f016020809104026020016040519081016040528092919081815260200182805461116490613699565b80156111b15780601f10611186576101008083540402835291602001916111b1565b820191906000526020600020905b81548152906001019060200180831161119457829003601f168201915b505050505081565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611261576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125890613adc565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036112da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d190613b6e565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611329611ec2565b73ffffffffffffffffffffffffffffffffffffffff1661134761143f565b73ffffffffffffffffffffffffffffffffffffffff161461139d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611394906138cc565b60405180910390fd5b6113a760006122d5565b565b6113b1611ec2565b73ffffffffffffffffffffffffffffffffffffffff166113cf61143f565b73ffffffffffffffffffffffffffffffffffffffff1614611425576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141c906138cc565b60405180910390fd5b806008908051906020019061143b929190612c5f565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600d5481565b60606001805461147e90613699565b80601f01602080910402602001604051908101604052809291908181526020018280546114aa90613699565b80156114f75780601f106114cc576101008083540402835291602001916114f7565b820191906000526020600020905b8154815290600101906020018083116114da57829003601f168201915b5050505050905090565b806000811180156115145750600d548111155b611553576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154a90613bda565b60405180910390fd5b600c54816115616007611f83565b61156b9190613bfa565b11156115ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a390613c9c565b60405180910390fd5b6000600f805490501115611603576115c33361239b565b611602576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f990613d08565b60405180910390fd5b5b600e60009054906101000a900460ff1615611653576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164a90613d74565b60405180910390fd5b81600b546116619190613d94565b3410156116a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169a90613e3a565b60405180910390fd5b6116ad3383612449565b5050565b6116c36116bc611ec2565b8383612489565b5050565b600a80546116d490613699565b80601f016020809104026020016040519081016040528092919081815260200182805461170090613699565b801561174d5780601f106117225761010080835404028352916020019161174d565b820191906000526020600020905b81548152906001019060200180831161173057829003601f168201915b505050505081565b61175d611ec2565b73ffffffffffffffffffffffffffffffffffffffff1661177b61143f565b73ffffffffffffffffffffffffffffffffffffffff16146117d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c8906138cc565b60405180910390fd5b80600d8190555050565b6117ec6117e6611ec2565b83611f91565b61182b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118229061395e565b60405180910390fd5b611837848484846125f5565b50505050565b606061184882611e56565b611887576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187e90613ecc565b60405180910390fd5b60001515600e60019054906101000a900460ff1615150361193457600a80546118af90613699565b80601f01602080910402602001604051908101604052809291908181526020018280546118db90613699565b80156119285780601f106118fd57610100808354040283529160200191611928565b820191906000526020600020905b81548152906001019060200180831161190b57829003601f168201915b50505050509050611990565b600061193e612651565b9050600081511161195e576040518060200160405280600081525061198c565b80611968846126e3565b600960405160200161197c93929190613fbc565b6040516020818303038152906040525b9150505b919050565b600c5481565b6119a3611ec2565b73ffffffffffffffffffffffffffffffffffffffff166119c161143f565b73ffffffffffffffffffffffffffffffffffffffff1614611a17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0e906138cc565b60405180910390fd5b80600e60016101000a81548160ff02191690831515021790555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b81600081118015611adb5750600d548111155b611b1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1190613bda565b60405180910390fd5b600c5481611b286007611f83565b611b329190613bfa565b1115611b73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6a90613c9c565b60405180910390fd5b6000600f805490501115611bca57611b8a3361239b565b611bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc090613d08565b60405180910390fd5b5b611bd2611ec2565b73ffffffffffffffffffffffffffffffffffffffff16611bf061143f565b73ffffffffffffffffffffffffffffffffffffffff1614611c46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3d906138cc565b60405180910390fd5b611c508284612449565b505050565b611c5d611ec2565b73ffffffffffffffffffffffffffffffffffffffff16611c7b61143f565b73ffffffffffffffffffffffffffffffffffffffff1614611cd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc8906138cc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d379061405f565b60405180910390fd5b611d49816122d5565b50565b611d54611ec2565b73ffffffffffffffffffffffffffffffffffffffff16611d7261143f565b73ffffffffffffffffffffffffffffffffffffffff1614611dc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbf906138cc565b60405180910390fd5b600f6000611dd69190612ce5565b8181600f9190611de7929190612d06565b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611f3d836111b9565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b6000611f9c82611e56565b611fdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd2906140f1565b60405180910390fd5b6000611fe6836111b9565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061202857506120278185611a34565b5b8061206657508373ffffffffffffffffffffffffffffffffffffffff1661204e846109f3565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661208f826111b9565b73ffffffffffffffffffffffffffffffffffffffff16146120e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120dc90614183565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612154576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214b90614215565b60405180910390fd5b61215f838383612843565b61216a600082611eca565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121ba9190614235565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122119190613bfa565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46122d0838383612848565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080600090505b600f8054905081101561243e578273ffffffffffffffffffffffffffffffffffffffff16600f82815481106123db576123da6139c4565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361242b576001915050612444565b808061243690613a22565b9150506123a3565b60009150505b919050565b60005b818110156124845761245e600761284d565b6124718361246c6007611f83565b612863565b808061247c90613a22565b91505061244c565b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036124f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ee906142b5565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516125e89190612e77565b60405180910390a3505050565b61260084848461206f565b61260c84848484612881565b61264b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264290614347565b60405180910390fd5b50505050565b60606008805461266090613699565b80601f016020809104026020016040519081016040528092919081815260200182805461268c90613699565b80156126d95780601f106126ae576101008083540402835291602001916126d9565b820191906000526020600020905b8154815290600101906020018083116126bc57829003601f168201915b5050505050905090565b60606000820361272a576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061283e565b600082905060005b6000821461275c57808061274590613a22565b915050600a826127559190614396565b9150612732565b60008167ffffffffffffffff811115612778576127776130ac565b5b6040519080825280601f01601f1916602001820160405280156127aa5781602001600182028036833780820191505090505b5090505b60008514612837576001826127c39190614235565b9150600a856127d291906143c7565b60306127de9190613bfa565b60f81b8183815181106127f4576127f36139c4565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856128309190614396565b94506127ae565b8093505050505b919050565b505050565b505050565b6001816000016000828254019250508190555050565b61287d828260405180602001604052806000815250612a08565b5050565b60006128a28473ffffffffffffffffffffffffffffffffffffffff16612a63565b156129fb578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026128cb611ec2565b8786866040518563ffffffff1660e01b81526004016128ed949392919061444d565b6020604051808303816000875af192505050801561292957506040513d601f19601f8201168201806040525081019061292691906144ae565b60015b6129ab573d8060008114612959576040519150601f19603f3d011682016040523d82523d6000602084013e61295e565b606091505b5060008151036129a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299a90614347565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612a00565b600190505b949350505050565b612a128383612a86565b612a1f6000848484612881565b612a5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5590614347565b60405180910390fd5b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612af5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aec90614527565b60405180910390fd5b612afe81611e56565b15612b3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b3590614593565b60405180910390fd5b612b4a60008383612843565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b9a9190613bfa565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612c5b60008383612848565b5050565b828054612c6b90613699565b90600052602060002090601f016020900481019282612c8d5760008555612cd4565b82601f10612ca657805160ff1916838001178555612cd4565b82800160010185558215612cd4579182015b82811115612cd3578251825591602001919060010190612cb8565b5b509050612ce19190612da6565b5090565b5080546000825590600052602060002090810190612d039190612da6565b50565b828054828255906000526020600020908101928215612d95579160200282015b82811115612d9457823573ffffffffffffffffffffffffffffffffffffffff168260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190612d26565b5b509050612da29190612da6565b5090565b5b80821115612dbf576000816000905550600101612da7565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612e0c81612dd7565b8114612e1757600080fd5b50565b600081359050612e2981612e03565b92915050565b600060208284031215612e4557612e44612dcd565b5b6000612e5384828501612e1a565b91505092915050565b60008115159050919050565b612e7181612e5c565b82525050565b6000602082019050612e8c6000830184612e68565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612ecc578082015181840152602081019050612eb1565b83811115612edb576000848401525b50505050565b6000601f19601f8301169050919050565b6000612efd82612e92565b612f078185612e9d565b9350612f17818560208601612eae565b612f2081612ee1565b840191505092915050565b60006020820190508181036000830152612f458184612ef2565b905092915050565b6000819050919050565b612f6081612f4d565b8114612f6b57600080fd5b50565b600081359050612f7d81612f57565b92915050565b600060208284031215612f9957612f98612dcd565b5b6000612fa784828501612f6e565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612fdb82612fb0565b9050919050565b612feb81612fd0565b82525050565b60006020820190506130066000830184612fe2565b92915050565b61301581612fd0565b811461302057600080fd5b50565b6000813590506130328161300c565b92915050565b6000806040838503121561304f5761304e612dcd565b5b600061305d85828601613023565b925050602061306e85828601612f6e565b9150509250929050565b61308181612f4d565b82525050565b600060208201905061309c6000830184613078565b92915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6130e482612ee1565b810181811067ffffffffffffffff82111715613103576131026130ac565b5b80604052505050565b6000613116612dc3565b905061312282826130db565b919050565b600067ffffffffffffffff821115613142576131416130ac565b5b61314b82612ee1565b9050602081019050919050565b82818337600083830152505050565b600061317a61317584613127565b61310c565b905082815260208101848484011115613196576131956130a7565b5b6131a1848285613158565b509392505050565b600082601f8301126131be576131bd6130a2565b5b81356131ce848260208601613167565b91505092915050565b6000602082840312156131ed576131ec612dcd565b5b600082013567ffffffffffffffff81111561320b5761320a612dd2565b5b613217848285016131a9565b91505092915050565b61322981612e5c565b811461323457600080fd5b50565b60008135905061324681613220565b92915050565b60006020828403121561326257613261612dcd565b5b600061327084828501613237565b91505092915050565b60008060006060848603121561329257613291612dcd565b5b60006132a086828701613023565b93505060206132b186828701613023565b92505060406132c286828701612f6e565b9150509250925092565b6000602082840312156132e2576132e1612dcd565b5b60006132f084828501613023565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61332e81612f4d565b82525050565b60006133408383613325565b60208301905092915050565b6000602082019050919050565b6000613364826132f9565b61336e8185613304565b935061337983613315565b8060005b838110156133aa5781516133918882613334565b975061339c8361334c565b92505060018101905061337d565b5085935050505092915050565b600060208201905081810360008301526133d18184613359565b905092915050565b600080604083850312156133f0576133ef612dcd565b5b60006133fe85828601613023565b925050602061340f85828601613237565b9150509250929050565b600067ffffffffffffffff821115613434576134336130ac565b5b61343d82612ee1565b9050602081019050919050565b600061345d61345884613419565b61310c565b905082815260208101848484011115613479576134786130a7565b5b613484848285613158565b509392505050565b600082601f8301126134a1576134a06130a2565b5b81356134b184826020860161344a565b91505092915050565b600080600080608085870312156134d4576134d3612dcd565b5b60006134e287828801613023565b94505060206134f387828801613023565b935050604061350487828801612f6e565b925050606085013567ffffffffffffffff81111561352557613524612dd2565b5b6135318782880161348c565b91505092959194509250565b6000806040838503121561355457613553612dcd565b5b600061356285828601613023565b925050602061357385828601613023565b9150509250929050565b6000806040838503121561359457613593612dcd565b5b60006135a285828601612f6e565b92505060206135b385828601613023565b9150509250929050565b600080fd5b600080fd5b60008083601f8401126135dd576135dc6130a2565b5b8235905067ffffffffffffffff8111156135fa576135f96135bd565b5b602083019150836020820283011115613616576136156135c2565b5b9250929050565b6000806020838503121561363457613633612dcd565b5b600083013567ffffffffffffffff81111561365257613651612dd2565b5b61365e858286016135c7565b92509250509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806136b157607f821691505b6020821081036136c4576136c361366a565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613726602c83612e9d565b9150613731826136ca565b604082019050919050565b6000602082019050818103600083015261375581613719565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006137b8602183612e9d565b91506137c38261375c565b604082019050919050565b600060208201905081810360008301526137e7816137ab565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b600061384a603883612e9d565b9150613855826137ee565b604082019050919050565b600060208201905081810360008301526138798161383d565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006138b6602083612e9d565b91506138c182613880565b602082019050919050565b600060208201905081810360008301526138e5816138a9565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000613948603183612e9d565b9150613953826138ec565b604082019050919050565b600060208201905081810360008301526139778161393b565b9050919050565b600081905092915050565b50565b600061399960008361397e565b91506139a482613989565b600082019050919050565b60006139ba8261398c565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613a2d82612f4d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613a5f57613a5e6139f3565b5b600182019050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000613ac6602983612e9d565b9150613ad182613a6a565b604082019050919050565b60006020820190508181036000830152613af581613ab9565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000613b58602a83612e9d565b9150613b6382613afc565b604082019050919050565b60006020820190508181036000830152613b8781613b4b565b9050919050565b7f496e76616c6964206d696e7420616d6f756e7421000000000000000000000000600082015250565b6000613bc4601483612e9d565b9150613bcf82613b8e565b602082019050919050565b60006020820190508181036000830152613bf381613bb7565b9050919050565b6000613c0582612f4d565b9150613c1083612f4d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613c4557613c446139f3565b5b828201905092915050565b7f4d617820737570706c7920657863656564656421000000000000000000000000600082015250565b6000613c86601483612e9d565b9150613c9182613c50565b602082019050919050565b60006020820190508181036000830152613cb581613c79565b9050919050565b7f4e6f74206f6e207468652077686974656c697374210000000000000000000000600082015250565b6000613cf2601583612e9d565b9150613cfd82613cbc565b602082019050919050565b60006020820190508181036000830152613d2181613ce5565b9050919050565b7f54686520636f6e74726163742069732070617573656421000000000000000000600082015250565b6000613d5e601783612e9d565b9150613d6982613d28565b602082019050919050565b60006020820190508181036000830152613d8d81613d51565b9050919050565b6000613d9f82612f4d565b9150613daa83612f4d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613de357613de26139f3565b5b828202905092915050565b7f496e73756666696369656e742066756e64732100000000000000000000000000600082015250565b6000613e24601383612e9d565b9150613e2f82613dee565b602082019050919050565b60006020820190508181036000830152613e5381613e17565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000613eb6602f83612e9d565b9150613ec182613e5a565b604082019050919050565b60006020820190508181036000830152613ee581613ea9565b9050919050565b600081905092915050565b6000613f0282612e92565b613f0c8185613eec565b9350613f1c818560208601612eae565b80840191505092915050565b60008190508160005260206000209050919050565b60008154613f4a81613699565b613f548186613eec565b94506001821660008114613f6f5760018114613f8057613fb3565b60ff19831686528186019350613fb3565b613f8985613f28565b60005b83811015613fab57815481890152600182019150602081019050613f8c565b838801955050505b50505092915050565b6000613fc88286613ef7565b9150613fd48285613ef7565b9150613fe08284613f3d565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614049602683612e9d565b915061405482613fed565b604082019050919050565b600060208201905081810360008301526140788161403c565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006140db602c83612e9d565b91506140e68261407f565b604082019050919050565b6000602082019050818103600083015261410a816140ce565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b600061416d602583612e9d565b915061417882614111565b604082019050919050565b6000602082019050818103600083015261419c81614160565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006141ff602483612e9d565b915061420a826141a3565b604082019050919050565b6000602082019050818103600083015261422e816141f2565b9050919050565b600061424082612f4d565b915061424b83612f4d565b92508282101561425e5761425d6139f3565b5b828203905092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b600061429f601983612e9d565b91506142aa82614269565b602082019050919050565b600060208201905081810360008301526142ce81614292565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000614331603283612e9d565b915061433c826142d5565b604082019050919050565b6000602082019050818103600083015261436081614324565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006143a182612f4d565b91506143ac83612f4d565b9250826143bc576143bb614367565b5b828204905092915050565b60006143d282612f4d565b91506143dd83612f4d565b9250826143ed576143ec614367565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b600061441f826143f8565b6144298185614403565b9350614439818560208601612eae565b61444281612ee1565b840191505092915050565b60006080820190506144626000830187612fe2565b61446f6020830186612fe2565b61447c6040830185613078565b818103606083015261448e8184614414565b905095945050505050565b6000815190506144a881612e03565b92915050565b6000602082840312156144c4576144c3612dcd565b5b60006144d284828501614499565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000614511602083612e9d565b915061451c826144db565b602082019050919050565b6000602082019050818103600083015261454081614504565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b600061457d601c83612e9d565b915061458882614547565b602082019050919050565b600060208201905081810360008301526145ac81614570565b905091905056fea264697066735822122095ee639eefd32c77969d7235b315e370391d168f3b4decdfc91f8cf721f4dd1f64736f6c634300080e0033

Deployed Bytecode Sourcemap

38896:4629:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25651:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26596:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28156:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27679:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39166:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42561:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42667:77;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39920:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28906:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42750:452;;;;;;;;;;;;;:::i;:::-;;29316:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40873:635;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42101:74;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42317:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39313:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39088:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39283:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39055:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26290:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26020:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6234:103;;;;;;;;;;;;;:::i;:::-;;42455:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5583:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39239:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26765:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40015:247;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28449:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39126:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42181:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29572:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41514:494;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39203:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42014:81;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28675:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40270:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6492:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40433:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25651:305;25753:4;25805:25;25790:40;;;:11;:40;;;;:105;;;;25862:33;25847:48;;;:11;:48;;;;25790:105;:158;;;;25912:36;25936:11;25912:23;:36::i;:::-;25790:158;25770:178;;25651:305;;;:::o;26596:100::-;26650:13;26683:5;26676:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26596:100;:::o;28156:221::-;28232:7;28260:16;28268:7;28260;:16::i;:::-;28252:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28345:15;:24;28361:7;28345:24;;;;;;;;;;;;;;;;;;;;;28338:31;;28156:221;;;:::o;27679:411::-;27760:13;27776:23;27791:7;27776:14;:23::i;:::-;27760:39;;27824:5;27818:11;;:2;:11;;;27810:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;27918:5;27902:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;27927:37;27944:5;27951:12;:10;:12::i;:::-;27927:16;:37::i;:::-;27902:62;27880:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;28061:21;28070:2;28074:7;28061:8;:21::i;:::-;27749:341;27679:411;;:::o;39166:32::-;;;;:::o;42561:100::-;5814:12;:10;:12::i;:::-;5803:23;;:7;:5;:7::i;:::-;:23;;;5795:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42645:10:::1;42633:9;:22;;;;;;;;;;;;:::i;:::-;;42561:100:::0;:::o;42667:77::-;5814:12;:10;:12::i;:::-;5803:23;;:7;:5;:7::i;:::-;:23;;;5795:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42732:6:::1;42723;;:15;;;;;;;;;;;;;;;;;;42667:77:::0;:::o;39920:89::-;39964:7;39987:16;:6;:14;:16::i;:::-;39980:23;;39920:89;:::o;28906:339::-;29101:41;29120:12;:10;:12::i;:::-;29134:7;29101:18;:41::i;:::-;29093:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29209:28;29219:4;29225:2;29229:7;29209:9;:28::i;:::-;28906:339;;;:::o;42750:452::-;5814:12;:10;:12::i;:::-;5803:23;;:7;:5;:7::i;:::-;:23;;;5795:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43024:7:::1;43045;:5;:7::i;:::-;43037:21;;43066;43037:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43023:69;;;43107:2;43099:11;;;::::0;::::1;;42787:415;42750:452::o:0;29316:185::-;29454:39;29471:4;29477:2;29481:7;29454:39;;;;;;;;;;;;:16;:39::i;:::-;29316:185;;;:::o;40873:635::-;40948:16;40976:23;41002:17;41012:6;41002:9;:17::i;:::-;40976:43;;41026:30;41073:15;41059:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41026:63;;41096:22;41121:1;41096:26;;41129:23;41165:309;41190:15;41172;:33;:64;;;;;41227:9;;41209:14;:27;;41172:64;41165:309;;;41247:25;41275:23;41283:14;41275:7;:23::i;:::-;41247:51;;41334:6;41313:27;;:17;:27;;;41309:131;;41386:14;41353:13;41367:15;41353:30;;;;;;;;:::i;:::-;;;;;;;:47;;;;;41413:17;;;;;:::i;:::-;;;;41309:131;41450:16;;;;;:::i;:::-;;;;41238:236;41165:309;;;41489:13;41482:20;;;;;;40873:635;;;:::o;42101:74::-;5814:12;:10;:12::i;:::-;5803:23;;:7;:5;:7::i;:::-;:23;;;5795:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42164:5:::1;42157:4;:12;;;;42101:74:::0;:::o;42317:132::-;5814:12;:10;:12::i;:::-;5803:23;;:7;:5;:7::i;:::-;:23;;;5795:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42425:18:::1;42405:17;:38;;;;;;;;;;;;:::i;:::-;;42317:132:::0;:::o;39313:28::-;;;;;;;;;;;;;:::o;39088:33::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;39283:25::-;;;;;;;;;;;;;:::o;39055:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;26290:239::-;26362:7;26382:13;26398:7;:16;26406:7;26398:16;;;;;;;;;;;;;;;;;;;;;26382:32;;26450:1;26433:19;;:5;:19;;;26425:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26516:5;26509:12;;;26290:239;;;:::o;26020:208::-;26092:7;26137:1;26120:19;;:5;:19;;;26112:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;26204:9;:16;26214:5;26204:16;;;;;;;;;;;;;;;;26197:23;;26020:208;;;:::o;6234:103::-;5814:12;:10;:12::i;:::-;5803:23;;:7;:5;:7::i;:::-;:23;;;5795:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6299:30:::1;6326:1;6299:18;:30::i;:::-;6234:103::o:0;42455:100::-;5814:12;:10;:12::i;:::-;5803:23;;:7;:5;:7::i;:::-;:23;;;5795:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42539:10:::1;42527:9;:22;;;;;;;;;;;;:::i;:::-;;42455:100:::0;:::o;5583:87::-;5629:7;5656:6;;;;;;;;;;;5649:13;;5583:87;:::o;39239:37::-;;;;:::o;26765:104::-;26821:13;26854:7;26847:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26765:104;:::o;40015:247::-;40080:11;39626:1;39612:11;:15;:52;;;;;39646:18;;39631:11;:33;;39612:52;39604:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;39738:9;;39723:11;39704:16;:6;:14;:16::i;:::-;:30;;;;:::i;:::-;:43;;39696:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;39813:1;39783:20;:27;;;;:31;39779:122;;;39835:32;39856:10;39835:20;:32::i;:::-;39827:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;39779:122;40109:6:::1;;;;;;;;;;;40108:7;40100:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;40178:11;40171:4;;:18;;;;:::i;:::-;40158:9;:31;;40150:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;40222:34;40232:10;40244:11;40222:9;:34::i;:::-;40015:247:::0;;:::o;28449:155::-;28544:52;28563:12;:10;:12::i;:::-;28577:8;28587;28544:18;:52::i;:::-;28449:155;;:::o;39126:31::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;42181:130::-;5814:12;:10;:12::i;:::-;5803:23;;:7;:5;:7::i;:::-;:23;;;5795:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42286:19:::1;42265:18;:40;;;;42181:130:::0;:::o;29572:328::-;29747:41;29766:12;:10;:12::i;:::-;29780:7;29747:18;:41::i;:::-;29739:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29853:39;29867:4;29873:2;29877:7;29886:5;29853:13;:39::i;:::-;29572:328;;;;:::o;41514:494::-;41613:13;41654:17;41662:8;41654:7;:17::i;:::-;41638:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;41761:5;41749:17;;:8;;;;;;;;;;;:17;;;41745:64;;41784:17;41777:24;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41745:64;41817:28;41848:10;:8;:10::i;:::-;41817:41;;41903:1;41878:14;41872:28;:32;:130;;;;;;;;;;;;;;;;;41940:14;41956:19;:8;:17;:19::i;:::-;41977:9;41923:64;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;41872:130;41865:137;;;41514:494;;;;:::o;39203:31::-;;;;:::o;42014:81::-;5814:12;:10;:12::i;:::-;5803:23;;:7;:5;:7::i;:::-;:23;;;5795:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42083:6:::1;42072:8;;:17;;;;;;;;;;;;;;;;;;42014:81:::0;:::o;28675:164::-;28772:4;28796:18;:25;28815:5;28796:25;;;;;;;;;;;;;;;:35;28822:8;28796:35;;;;;;;;;;;;;;;;;;;;;;;;;28789:42;;28675:164;;;;:::o;40270:155::-;40356:11;39626:1;39612:11;:15;:52;;;;;39646:18;;39631:11;:33;;39612:52;39604:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;39738:9;;39723:11;39704:16;:6;:14;:16::i;:::-;:30;;;;:::i;:::-;:43;;39696:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;39813:1;39783:20;:27;;;;:31;39779:122;;;39835:32;39856:10;39835:20;:32::i;:::-;39827:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;39779:122;5814:12:::1;:10;:12::i;:::-;5803:23;;:7;:5;:7::i;:::-;:23;;;5795:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40386:33:::2;40396:9;40407:11;40386:9;:33::i;:::-;40270:155:::0;;;:::o;6492:201::-;5814:12;:10;:12::i;:::-;5803:23;;:7;:5;:7::i;:::-;:23;;;5795:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6601:1:::1;6581:22;;:8;:22;;::::0;6573:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;6657:28;6676:8;6657:18;:28::i;:::-;6492:201:::0;:::o;40433:164::-;5814:12;:10;:12::i;:::-;5803:23;;:7;:5;:7::i;:::-;:23;;;5795:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40524:20:::1;;40517:27;;;;:::i;:::-;40578:13;;40555:20;:36;;;;;;;:::i;:::-;;40433:164:::0;;:::o;18390:157::-;18475:4;18514:25;18499:40;;;:11;:40;;;;18492:47;;18390:157;;;:::o;31410:127::-;31475:4;31527:1;31499:30;;:7;:16;31507:7;31499:16;;;;;;;;;;;;;;;;;;;;;:30;;;;31492:37;;31410:127;;;:::o;4307:98::-;4360:7;4387:10;4380:17;;4307:98;:::o;35556:174::-;35658:2;35631:15;:24;35647:7;35631:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35714:7;35710:2;35676:46;;35685:23;35700:7;35685:14;:23::i;:::-;35676:46;;;;;;;;;;;;35556:174;;:::o;911:114::-;976:7;1003;:14;;;996:21;;911:114;;;:::o;31704:348::-;31797:4;31822:16;31830:7;31822;:16::i;:::-;31814:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31898:13;31914:23;31929:7;31914:14;:23::i;:::-;31898:39;;31967:5;31956:16;;:7;:16;;;:52;;;;31976:32;31993:5;32000:7;31976:16;:32::i;:::-;31956:52;:87;;;;32036:7;32012:31;;:20;32024:7;32012:11;:20::i;:::-;:31;;;31956:87;31948:96;;;31704:348;;;;:::o;34813:625::-;34972:4;34945:31;;:23;34960:7;34945:14;:23::i;:::-;:31;;;34937:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;35051:1;35037:16;;:2;:16;;;35029:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;35107:39;35128:4;35134:2;35138:7;35107:20;:39::i;:::-;35211:29;35228:1;35232:7;35211:8;:29::i;:::-;35272:1;35253:9;:15;35263:4;35253:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;35301:1;35284:9;:13;35294:2;35284:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;35332:2;35313:7;:16;35321:7;35313:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;35371:7;35367:2;35352:27;;35361:4;35352:27;;;;;;;;;;;;35392:38;35412:4;35418:2;35422:7;35392:19;:38::i;:::-;34813:625;;;:::o;6853:191::-;6927:16;6946:6;;;;;;;;;;;6927:25;;6972:8;6963:6;;:17;;;;;;;;;;;;;;;;;;7027:8;6996:40;;7017:8;6996:40;;;;;;;;;;;;6916:128;6853:191;:::o;40603:264::-;40670:4;40683:6;40692:1;40683:10;;40700:143;40711:20;:27;;;;40707:1;:31;40700:143;;;40781:5;40754:32;;:20;40775:1;40754:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:32;;;40751:75;;40810:4;40803:11;;;;;40751:75;40832:3;;;;;:::i;:::-;;;;40700:143;;;40856:5;40849:12;;;40603:264;;;;:::o;43208:204::-;43288:9;43283:124;43307:11;43303:1;:15;43283:124;;;43334:18;:6;:16;:18::i;:::-;43361:38;43371:9;43382:16;:6;:14;:16::i;:::-;43361:9;:38::i;:::-;43320:3;;;;;:::i;:::-;;;;43283:124;;;;43208:204;;:::o;35872:315::-;36027:8;36018:17;;:5;:17;;;36010:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;36114:8;36076:18;:25;36095:5;36076:25;;;;;;;;;;;;;;;:35;36102:8;36076:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;36160:8;36138:41;;36153:5;36138:41;;;36170:8;36138:41;;;;;;:::i;:::-;;;;;;;;35872:315;;;:::o;30782:::-;30939:28;30949:4;30955:2;30959:7;30939:9;:28::i;:::-;30986:48;31009:4;31015:2;31019:7;31028:5;30986:22;:48::i;:::-;30978:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;30782:315;;;;:::o;43418:104::-;43478:13;43507:9;43500:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43418:104;:::o;1869:723::-;1925:13;2155:1;2146:5;:10;2142:53;;2173:10;;;;;;;;;;;;;;;;;;;;;2142:53;2205:12;2220:5;2205:20;;2236:14;2261:78;2276:1;2268:4;:9;2261:78;;2294:8;;;;;:::i;:::-;;;;2325:2;2317:10;;;;;:::i;:::-;;;2261:78;;;2349:19;2381:6;2371:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2349:39;;2399:154;2415:1;2406:5;:10;2399:154;;2443:1;2433:11;;;;;:::i;:::-;;;2510:2;2502:5;:10;;;;:::i;:::-;2489:2;:24;;;;:::i;:::-;2476:39;;2459:6;2466;2459:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;2539:2;2530:11;;;;;:::i;:::-;;;2399:154;;;2577:6;2563:21;;;;;1869:723;;;;:::o;38123:126::-;;;;:::o;38634:125::-;;;;:::o;1033:127::-;1140:1;1122:7;:14;;;:19;;;;;;;;;;;1033:127;:::o;32394:110::-;32470:26;32480:2;32484:7;32470:26;;;;;;;;;;;;:9;:26::i;:::-;32394:110;;:::o;36752:799::-;36907:4;36928:15;:2;:13;;;:15::i;:::-;36924:620;;;36980:2;36964:36;;;37001:12;:10;:12::i;:::-;37015:4;37021:7;37030:5;36964:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36960:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37223:1;37206:6;:13;:18;37202:272;;37249:60;;;;;;;;;;:::i;:::-;;;;;;;;37202:272;37424:6;37418:13;37409:6;37405:2;37401:15;37394:38;36960:529;37097:41;;;37087:51;;;:6;:51;;;;37080:58;;;;;36924:620;37528:4;37521:11;;36752:799;;;;;;;:::o;32731:321::-;32861:18;32867:2;32871:7;32861:5;:18::i;:::-;32912:54;32943:1;32947:2;32951:7;32960:5;32912:22;:54::i;:::-;32890:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;32731:321;;;:::o;8284:326::-;8344:4;8601:1;8579:7;:19;;;:23;8572:30;;8284:326;;;:::o;33388:439::-;33482:1;33468:16;;:2;:16;;;33460:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33541:16;33549:7;33541;:16::i;:::-;33540:17;33532:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33603:45;33632:1;33636:2;33640:7;33603:20;:45::i;:::-;33678:1;33661:9;:13;33671:2;33661:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33709:2;33690:7;:16;33698:7;33690:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33754:7;33750:2;33729:33;;33746:1;33729:33;;;;;;;;;;;;33775:44;33803:1;33807:2;33811:7;33775:19;:44::i;:::-;33388:439;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:307::-;1866:1;1876:113;1890:6;1887:1;1884:13;1876:113;;;1975:1;1970:3;1966:11;1960:18;1956:1;1951:3;1947:11;1940:39;1912:2;1909:1;1905:10;1900:15;;1876:113;;;2007:6;2004:1;2001:13;1998:101;;;2087:1;2078:6;2073:3;2069:16;2062:27;1998:101;1847:258;1798:307;;;:::o;2111:102::-;2152:6;2203:2;2199:7;2194:2;2187:5;2183:14;2179:28;2169:38;;2111:102;;;:::o;2219:364::-;2307:3;2335:39;2368:5;2335:39;:::i;:::-;2390:71;2454:6;2449:3;2390:71;:::i;:::-;2383:78;;2470:52;2515:6;2510:3;2503:4;2496:5;2492:16;2470:52;:::i;:::-;2547:29;2569:6;2547:29;:::i;:::-;2542:3;2538:39;2531:46;;2311:272;2219:364;;;;:::o;2589:313::-;2702:4;2740:2;2729:9;2725:18;2717:26;;2789:9;2783:4;2779:20;2775:1;2764:9;2760:17;2753:47;2817:78;2890:4;2881:6;2817:78;:::i;:::-;2809:86;;2589:313;;;;:::o;2908:77::-;2945:7;2974:5;2963:16;;2908:77;;;:::o;2991:122::-;3064:24;3082:5;3064:24;:::i;:::-;3057:5;3054:35;3044:63;;3103:1;3100;3093:12;3044:63;2991:122;:::o;3119:139::-;3165:5;3203:6;3190:20;3181:29;;3219:33;3246:5;3219:33;:::i;:::-;3119:139;;;;:::o;3264:329::-;3323:6;3372:2;3360:9;3351:7;3347:23;3343:32;3340:119;;;3378:79;;:::i;:::-;3340:119;3498:1;3523:53;3568:7;3559:6;3548:9;3544:22;3523:53;:::i;:::-;3513:63;;3469:117;3264:329;;;;:::o;3599:126::-;3636:7;3676:42;3669:5;3665:54;3654:65;;3599:126;;;:::o;3731:96::-;3768:7;3797:24;3815:5;3797:24;:::i;:::-;3786:35;;3731:96;;;:::o;3833:118::-;3920:24;3938:5;3920:24;:::i;:::-;3915:3;3908:37;3833:118;;:::o;3957:222::-;4050:4;4088:2;4077:9;4073:18;4065:26;;4101:71;4169:1;4158:9;4154:17;4145:6;4101:71;:::i;:::-;3957:222;;;;:::o;4185:122::-;4258:24;4276:5;4258:24;:::i;:::-;4251:5;4248:35;4238:63;;4297:1;4294;4287:12;4238:63;4185:122;:::o;4313:139::-;4359:5;4397:6;4384:20;4375:29;;4413:33;4440:5;4413:33;:::i;:::-;4313:139;;;;:::o;4458:474::-;4526:6;4534;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4709:1;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4680:117;4836:2;4862:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4807:118;4458:474;;;;;:::o;4938:118::-;5025:24;5043:5;5025:24;:::i;:::-;5020:3;5013:37;4938:118;;:::o;5062:222::-;5155:4;5193:2;5182:9;5178:18;5170:26;;5206:71;5274:1;5263:9;5259:17;5250:6;5206:71;:::i;:::-;5062:222;;;;:::o;5290:117::-;5399:1;5396;5389:12;5413:117;5522:1;5519;5512:12;5536:180;5584:77;5581:1;5574:88;5681:4;5678:1;5671:15;5705:4;5702:1;5695:15;5722:281;5805:27;5827:4;5805:27;:::i;:::-;5797:6;5793:40;5935:6;5923:10;5920:22;5899:18;5887:10;5884:34;5881:62;5878:88;;;5946:18;;:::i;:::-;5878:88;5986:10;5982:2;5975:22;5765:238;5722:281;;:::o;6009:129::-;6043:6;6070:20;;:::i;:::-;6060:30;;6099:33;6127:4;6119:6;6099:33;:::i;:::-;6009:129;;;:::o;6144:308::-;6206:4;6296:18;6288:6;6285:30;6282:56;;;6318:18;;:::i;:::-;6282:56;6356:29;6378:6;6356:29;:::i;:::-;6348:37;;6440:4;6434;6430:15;6422:23;;6144:308;;;:::o;6458:154::-;6542:6;6537:3;6532;6519:30;6604:1;6595:6;6590:3;6586:16;6579:27;6458:154;;;:::o;6618:412::-;6696:5;6721:66;6737:49;6779:6;6737:49;:::i;:::-;6721:66;:::i;:::-;6712:75;;6810:6;6803:5;6796:21;6848:4;6841:5;6837:16;6886:3;6877:6;6872:3;6868:16;6865:25;6862:112;;;6893:79;;:::i;:::-;6862:112;6983:41;7017:6;7012:3;7007;6983:41;:::i;:::-;6702:328;6618:412;;;;;:::o;7050:340::-;7106:5;7155:3;7148:4;7140:6;7136:17;7132:27;7122:122;;7163:79;;:::i;:::-;7122:122;7280:6;7267:20;7305:79;7380:3;7372:6;7365:4;7357:6;7353:17;7305:79;:::i;:::-;7296:88;;7112:278;7050:340;;;;:::o;7396:509::-;7465:6;7514:2;7502:9;7493:7;7489:23;7485:32;7482:119;;;7520:79;;:::i;:::-;7482:119;7668:1;7657:9;7653:17;7640:31;7698:18;7690:6;7687:30;7684:117;;;7720:79;;:::i;:::-;7684:117;7825:63;7880:7;7871:6;7860:9;7856:22;7825:63;:::i;:::-;7815:73;;7611:287;7396:509;;;;:::o;7911:116::-;7981:21;7996:5;7981:21;:::i;:::-;7974:5;7971:32;7961:60;;8017:1;8014;8007:12;7961:60;7911:116;:::o;8033:133::-;8076:5;8114:6;8101:20;8092:29;;8130:30;8154:5;8130:30;:::i;:::-;8033:133;;;;:::o;8172:323::-;8228:6;8277:2;8265:9;8256:7;8252:23;8248:32;8245:119;;;8283:79;;:::i;:::-;8245:119;8403:1;8428:50;8470:7;8461:6;8450:9;8446:22;8428:50;:::i;:::-;8418:60;;8374:114;8172:323;;;;:::o;8501:619::-;8578:6;8586;8594;8643:2;8631:9;8622:7;8618:23;8614:32;8611:119;;;8649:79;;:::i;:::-;8611:119;8769:1;8794:53;8839:7;8830:6;8819:9;8815:22;8794:53;:::i;:::-;8784:63;;8740:117;8896:2;8922:53;8967:7;8958:6;8947:9;8943:22;8922:53;:::i;:::-;8912:63;;8867:118;9024:2;9050:53;9095:7;9086:6;9075:9;9071:22;9050:53;:::i;:::-;9040:63;;8995:118;8501:619;;;;;:::o;9126:329::-;9185:6;9234:2;9222:9;9213:7;9209:23;9205:32;9202:119;;;9240:79;;:::i;:::-;9202:119;9360:1;9385:53;9430:7;9421:6;9410:9;9406:22;9385:53;:::i;:::-;9375:63;;9331:117;9126:329;;;;:::o;9461:114::-;9528:6;9562:5;9556:12;9546:22;;9461:114;;;:::o;9581:184::-;9680:11;9714:6;9709:3;9702:19;9754:4;9749:3;9745:14;9730:29;;9581:184;;;;:::o;9771:132::-;9838:4;9861:3;9853:11;;9891:4;9886:3;9882:14;9874:22;;9771:132;;;:::o;9909:108::-;9986:24;10004:5;9986:24;:::i;:::-;9981:3;9974:37;9909:108;;:::o;10023:179::-;10092:10;10113:46;10155:3;10147:6;10113:46;:::i;:::-;10191:4;10186:3;10182:14;10168:28;;10023:179;;;;:::o;10208:113::-;10278:4;10310;10305:3;10301:14;10293:22;;10208:113;;;:::o;10357:732::-;10476:3;10505:54;10553:5;10505:54;:::i;:::-;10575:86;10654:6;10649:3;10575:86;:::i;:::-;10568:93;;10685:56;10735:5;10685:56;:::i;:::-;10764:7;10795:1;10780:284;10805:6;10802:1;10799:13;10780:284;;;10881:6;10875:13;10908:63;10967:3;10952:13;10908:63;:::i;:::-;10901:70;;10994:60;11047:6;10994:60;:::i;:::-;10984:70;;10840:224;10827:1;10824;10820:9;10815:14;;10780:284;;;10784:14;11080:3;11073:10;;10481:608;;;10357:732;;;;:::o;11095:373::-;11238:4;11276:2;11265:9;11261:18;11253:26;;11325:9;11319:4;11315:20;11311:1;11300:9;11296:17;11289:47;11353:108;11456:4;11447:6;11353:108;:::i;:::-;11345:116;;11095:373;;;;:::o;11474:468::-;11539:6;11547;11596:2;11584:9;11575:7;11571:23;11567:32;11564:119;;;11602:79;;:::i;:::-;11564:119;11722:1;11747:53;11792:7;11783:6;11772:9;11768:22;11747:53;:::i;:::-;11737:63;;11693:117;11849:2;11875:50;11917:7;11908:6;11897:9;11893:22;11875:50;:::i;:::-;11865:60;;11820:115;11474:468;;;;;:::o;11948:307::-;12009:4;12099:18;12091:6;12088:30;12085:56;;;12121:18;;:::i;:::-;12085:56;12159:29;12181:6;12159:29;:::i;:::-;12151:37;;12243:4;12237;12233:15;12225:23;;11948:307;;;:::o;12261:410::-;12338:5;12363:65;12379:48;12420:6;12379:48;:::i;:::-;12363:65;:::i;:::-;12354:74;;12451:6;12444:5;12437:21;12489:4;12482:5;12478:16;12527:3;12518:6;12513:3;12509:16;12506:25;12503:112;;;12534:79;;:::i;:::-;12503:112;12624:41;12658:6;12653:3;12648;12624:41;:::i;:::-;12344:327;12261:410;;;;;:::o;12690:338::-;12745:5;12794:3;12787:4;12779:6;12775:17;12771:27;12761:122;;12802:79;;:::i;:::-;12761:122;12919:6;12906:20;12944:78;13018:3;13010:6;13003:4;12995:6;12991:17;12944:78;:::i;:::-;12935:87;;12751:277;12690:338;;;;:::o;13034:943::-;13129:6;13137;13145;13153;13202:3;13190:9;13181:7;13177:23;13173:33;13170:120;;;13209:79;;:::i;:::-;13170:120;13329:1;13354:53;13399:7;13390:6;13379:9;13375:22;13354:53;:::i;:::-;13344:63;;13300:117;13456:2;13482:53;13527:7;13518:6;13507:9;13503:22;13482:53;:::i;:::-;13472:63;;13427:118;13584:2;13610:53;13655:7;13646:6;13635:9;13631:22;13610:53;:::i;:::-;13600:63;;13555:118;13740:2;13729:9;13725:18;13712:32;13771:18;13763:6;13760:30;13757:117;;;13793:79;;:::i;:::-;13757:117;13898:62;13952:7;13943:6;13932:9;13928:22;13898:62;:::i;:::-;13888:72;;13683:287;13034:943;;;;;;;:::o;13983:474::-;14051:6;14059;14108:2;14096:9;14087:7;14083:23;14079:32;14076:119;;;14114:79;;:::i;:::-;14076:119;14234:1;14259:53;14304:7;14295:6;14284:9;14280:22;14259:53;:::i;:::-;14249:63;;14205:117;14361:2;14387:53;14432:7;14423:6;14412:9;14408:22;14387:53;:::i;:::-;14377:63;;14332:118;13983:474;;;;;:::o;14463:::-;14531:6;14539;14588:2;14576:9;14567:7;14563:23;14559:32;14556:119;;;14594:79;;:::i;:::-;14556:119;14714:1;14739:53;14784:7;14775:6;14764:9;14760:22;14739:53;:::i;:::-;14729:63;;14685:117;14841:2;14867:53;14912:7;14903:6;14892:9;14888:22;14867:53;:::i;:::-;14857:63;;14812:118;14463:474;;;;;:::o;14943:117::-;15052:1;15049;15042:12;15066:117;15175:1;15172;15165:12;15206:568;15279:8;15289:6;15339:3;15332:4;15324:6;15320:17;15316:27;15306:122;;15347:79;;:::i;:::-;15306:122;15460:6;15447:20;15437:30;;15490:18;15482:6;15479:30;15476:117;;;15512:79;;:::i;:::-;15476:117;15626:4;15618:6;15614:17;15602:29;;15680:3;15672:4;15664:6;15660:17;15650:8;15646:32;15643:41;15640:128;;;15687:79;;:::i;:::-;15640:128;15206:568;;;;;:::o;15780:559::-;15866:6;15874;15923:2;15911:9;15902:7;15898:23;15894:32;15891:119;;;15929:79;;:::i;:::-;15891:119;16077:1;16066:9;16062:17;16049:31;16107:18;16099:6;16096:30;16093:117;;;16129:79;;:::i;:::-;16093:117;16242:80;16314:7;16305:6;16294:9;16290:22;16242:80;:::i;:::-;16224:98;;;;16020:312;15780:559;;;;;:::o;16345:180::-;16393:77;16390:1;16383:88;16490:4;16487:1;16480:15;16514:4;16511:1;16504:15;16531:320;16575:6;16612:1;16606:4;16602:12;16592:22;;16659:1;16653:4;16649:12;16680:18;16670:81;;16736:4;16728:6;16724:17;16714:27;;16670:81;16798:2;16790:6;16787:14;16767:18;16764:38;16761:84;;16817:18;;:::i;:::-;16761:84;16582:269;16531:320;;;:::o;16857:231::-;16997:34;16993:1;16985:6;16981:14;16974:58;17066:14;17061:2;17053:6;17049:15;17042:39;16857:231;:::o;17094:366::-;17236:3;17257:67;17321:2;17316:3;17257:67;:::i;:::-;17250:74;;17333:93;17422:3;17333:93;:::i;:::-;17451:2;17446:3;17442:12;17435:19;;17094:366;;;:::o;17466:419::-;17632:4;17670:2;17659:9;17655:18;17647:26;;17719:9;17713:4;17709:20;17705:1;17694:9;17690:17;17683:47;17747:131;17873:4;17747:131;:::i;:::-;17739:139;;17466:419;;;:::o;17891:220::-;18031:34;18027:1;18019:6;18015:14;18008:58;18100:3;18095:2;18087:6;18083:15;18076:28;17891:220;:::o;18117:366::-;18259:3;18280:67;18344:2;18339:3;18280:67;:::i;:::-;18273:74;;18356:93;18445:3;18356:93;:::i;:::-;18474:2;18469:3;18465:12;18458:19;;18117:366;;;:::o;18489:419::-;18655:4;18693:2;18682:9;18678:18;18670:26;;18742:9;18736:4;18732:20;18728:1;18717:9;18713:17;18706:47;18770:131;18896:4;18770:131;:::i;:::-;18762:139;;18489:419;;;:::o;18914:243::-;19054:34;19050:1;19042:6;19038:14;19031:58;19123:26;19118:2;19110:6;19106:15;19099:51;18914:243;:::o;19163:366::-;19305:3;19326:67;19390:2;19385:3;19326:67;:::i;:::-;19319:74;;19402:93;19491:3;19402:93;:::i;:::-;19520:2;19515:3;19511:12;19504:19;;19163:366;;;:::o;19535:419::-;19701:4;19739:2;19728:9;19724:18;19716:26;;19788:9;19782:4;19778:20;19774:1;19763:9;19759:17;19752:47;19816:131;19942:4;19816:131;:::i;:::-;19808:139;;19535:419;;;:::o;19960:182::-;20100:34;20096:1;20088:6;20084:14;20077:58;19960:182;:::o;20148:366::-;20290:3;20311:67;20375:2;20370:3;20311:67;:::i;:::-;20304:74;;20387:93;20476:3;20387:93;:::i;:::-;20505:2;20500:3;20496:12;20489:19;;20148:366;;;:::o;20520:419::-;20686:4;20724:2;20713:9;20709:18;20701:26;;20773:9;20767:4;20763:20;20759:1;20748:9;20744:17;20737:47;20801:131;20927:4;20801:131;:::i;:::-;20793:139;;20520:419;;;:::o;20945:236::-;21085:34;21081:1;21073:6;21069:14;21062:58;21154:19;21149:2;21141:6;21137:15;21130:44;20945:236;:::o;21187:366::-;21329:3;21350:67;21414:2;21409:3;21350:67;:::i;:::-;21343:74;;21426:93;21515:3;21426:93;:::i;:::-;21544:2;21539:3;21535:12;21528:19;;21187:366;;;:::o;21559:419::-;21725:4;21763:2;21752:9;21748:18;21740:26;;21812:9;21806:4;21802:20;21798:1;21787:9;21783:17;21776:47;21840:131;21966:4;21840:131;:::i;:::-;21832:139;;21559:419;;;:::o;21984:147::-;22085:11;22122:3;22107:18;;21984:147;;;;:::o;22137:114::-;;:::o;22257:398::-;22416:3;22437:83;22518:1;22513:3;22437:83;:::i;:::-;22430:90;;22529:93;22618:3;22529:93;:::i;:::-;22647:1;22642:3;22638:11;22631:18;;22257:398;;;:::o;22661:379::-;22845:3;22867:147;23010:3;22867:147;:::i;:::-;22860:154;;23031:3;23024:10;;22661:379;;;:::o;23046:180::-;23094:77;23091:1;23084:88;23191:4;23188:1;23181:15;23215:4;23212:1;23205:15;23232:180;23280:77;23277:1;23270:88;23377:4;23374:1;23367:15;23401:4;23398:1;23391:15;23418:233;23457:3;23480:24;23498:5;23480:24;:::i;:::-;23471:33;;23526:66;23519:5;23516:77;23513:103;;23596:18;;:::i;:::-;23513:103;23643:1;23636:5;23632:13;23625:20;;23418:233;;;:::o;23657:228::-;23797:34;23793:1;23785:6;23781:14;23774:58;23866:11;23861:2;23853:6;23849:15;23842:36;23657:228;:::o;23891:366::-;24033:3;24054:67;24118:2;24113:3;24054:67;:::i;:::-;24047:74;;24130:93;24219:3;24130:93;:::i;:::-;24248:2;24243:3;24239:12;24232:19;;23891:366;;;:::o;24263:419::-;24429:4;24467:2;24456:9;24452:18;24444:26;;24516:9;24510:4;24506:20;24502:1;24491:9;24487:17;24480:47;24544:131;24670:4;24544:131;:::i;:::-;24536:139;;24263:419;;;:::o;24688:229::-;24828:34;24824:1;24816:6;24812:14;24805:58;24897:12;24892:2;24884:6;24880:15;24873:37;24688:229;:::o;24923:366::-;25065:3;25086:67;25150:2;25145:3;25086:67;:::i;:::-;25079:74;;25162:93;25251:3;25162:93;:::i;:::-;25280:2;25275:3;25271:12;25264:19;;24923:366;;;:::o;25295:419::-;25461:4;25499:2;25488:9;25484:18;25476:26;;25548:9;25542:4;25538:20;25534:1;25523:9;25519:17;25512:47;25576:131;25702:4;25576:131;:::i;:::-;25568:139;;25295:419;;;:::o;25720:170::-;25860:22;25856:1;25848:6;25844:14;25837:46;25720:170;:::o;25896:366::-;26038:3;26059:67;26123:2;26118:3;26059:67;:::i;:::-;26052:74;;26135:93;26224:3;26135:93;:::i;:::-;26253:2;26248:3;26244:12;26237:19;;25896:366;;;:::o;26268:419::-;26434:4;26472:2;26461:9;26457:18;26449:26;;26521:9;26515:4;26511:20;26507:1;26496:9;26492:17;26485:47;26549:131;26675:4;26549:131;:::i;:::-;26541:139;;26268:419;;;:::o;26693:305::-;26733:3;26752:20;26770:1;26752:20;:::i;:::-;26747:25;;26786:20;26804:1;26786:20;:::i;:::-;26781:25;;26940:1;26872:66;26868:74;26865:1;26862:81;26859:107;;;26946:18;;:::i;:::-;26859:107;26990:1;26987;26983:9;26976:16;;26693:305;;;;:::o;27004:170::-;27144:22;27140:1;27132:6;27128:14;27121:46;27004:170;:::o;27180:366::-;27322:3;27343:67;27407:2;27402:3;27343:67;:::i;:::-;27336:74;;27419:93;27508:3;27419:93;:::i;:::-;27537:2;27532:3;27528:12;27521:19;;27180:366;;;:::o;27552:419::-;27718:4;27756:2;27745:9;27741:18;27733:26;;27805:9;27799:4;27795:20;27791:1;27780:9;27776:17;27769:47;27833:131;27959:4;27833:131;:::i;:::-;27825:139;;27552:419;;;:::o;27977:171::-;28117:23;28113:1;28105:6;28101:14;28094:47;27977:171;:::o;28154:366::-;28296:3;28317:67;28381:2;28376:3;28317:67;:::i;:::-;28310:74;;28393:93;28482:3;28393:93;:::i;:::-;28511:2;28506:3;28502:12;28495:19;;28154:366;;;:::o;28526:419::-;28692:4;28730:2;28719:9;28715:18;28707:26;;28779:9;28773:4;28769:20;28765:1;28754:9;28750:17;28743:47;28807:131;28933:4;28807:131;:::i;:::-;28799:139;;28526:419;;;:::o;28951:173::-;29091:25;29087:1;29079:6;29075:14;29068:49;28951:173;:::o;29130:366::-;29272:3;29293:67;29357:2;29352:3;29293:67;:::i;:::-;29286:74;;29369:93;29458:3;29369:93;:::i;:::-;29487:2;29482:3;29478:12;29471:19;;29130:366;;;:::o;29502:419::-;29668:4;29706:2;29695:9;29691:18;29683:26;;29755:9;29749:4;29745:20;29741:1;29730:9;29726:17;29719:47;29783:131;29909:4;29783:131;:::i;:::-;29775:139;;29502:419;;;:::o;29927:348::-;29967:7;29990:20;30008:1;29990:20;:::i;:::-;29985:25;;30024:20;30042:1;30024:20;:::i;:::-;30019:25;;30212:1;30144:66;30140:74;30137:1;30134:81;30129:1;30122:9;30115:17;30111:105;30108:131;;;30219:18;;:::i;:::-;30108:131;30267:1;30264;30260:9;30249:20;;29927:348;;;;:::o;30281:169::-;30421:21;30417:1;30409:6;30405:14;30398:45;30281:169;:::o;30456:366::-;30598:3;30619:67;30683:2;30678:3;30619:67;:::i;:::-;30612:74;;30695:93;30784:3;30695:93;:::i;:::-;30813:2;30808:3;30804:12;30797:19;;30456:366;;;:::o;30828:419::-;30994:4;31032:2;31021:9;31017:18;31009:26;;31081:9;31075:4;31071:20;31067:1;31056:9;31052:17;31045:47;31109:131;31235:4;31109:131;:::i;:::-;31101:139;;30828:419;;;:::o;31253:234::-;31393:34;31389:1;31381:6;31377:14;31370:58;31462:17;31457:2;31449:6;31445:15;31438:42;31253:234;:::o;31493:366::-;31635:3;31656:67;31720:2;31715:3;31656:67;:::i;:::-;31649:74;;31732:93;31821:3;31732:93;:::i;:::-;31850:2;31845:3;31841:12;31834:19;;31493:366;;;:::o;31865:419::-;32031:4;32069:2;32058:9;32054:18;32046:26;;32118:9;32112:4;32108:20;32104:1;32093:9;32089:17;32082:47;32146:131;32272:4;32146:131;:::i;:::-;32138:139;;31865:419;;;:::o;32290:148::-;32392:11;32429:3;32414:18;;32290:148;;;;:::o;32444:377::-;32550:3;32578:39;32611:5;32578:39;:::i;:::-;32633:89;32715:6;32710:3;32633:89;:::i;:::-;32626:96;;32731:52;32776:6;32771:3;32764:4;32757:5;32753:16;32731:52;:::i;:::-;32808:6;32803:3;32799:16;32792:23;;32554:267;32444:377;;;;:::o;32827:141::-;32876:4;32899:3;32891:11;;32922:3;32919:1;32912:14;32956:4;32953:1;32943:18;32935:26;;32827:141;;;:::o;32998:845::-;33101:3;33138:5;33132:12;33167:36;33193:9;33167:36;:::i;:::-;33219:89;33301:6;33296:3;33219:89;:::i;:::-;33212:96;;33339:1;33328:9;33324:17;33355:1;33350:137;;;;33501:1;33496:341;;;;33317:520;;33350:137;33434:4;33430:9;33419;33415:25;33410:3;33403:38;33470:6;33465:3;33461:16;33454:23;;33350:137;;33496:341;33563:38;33595:5;33563:38;:::i;:::-;33623:1;33637:154;33651:6;33648:1;33645:13;33637:154;;;33725:7;33719:14;33715:1;33710:3;33706:11;33699:35;33775:1;33766:7;33762:15;33751:26;;33673:4;33670:1;33666:12;33661:17;;33637:154;;;33820:6;33815:3;33811:16;33804:23;;33503:334;;33317:520;;33105:738;;32998:845;;;;:::o;33849:589::-;34074:3;34096:95;34187:3;34178:6;34096:95;:::i;:::-;34089:102;;34208:95;34299:3;34290:6;34208:95;:::i;:::-;34201:102;;34320:92;34408:3;34399:6;34320:92;:::i;:::-;34313:99;;34429:3;34422:10;;33849:589;;;;;;:::o;34444:225::-;34584:34;34580:1;34572:6;34568:14;34561:58;34653:8;34648:2;34640:6;34636:15;34629:33;34444:225;:::o;34675:366::-;34817:3;34838:67;34902:2;34897:3;34838:67;:::i;:::-;34831:74;;34914:93;35003:3;34914:93;:::i;:::-;35032:2;35027:3;35023:12;35016:19;;34675:366;;;:::o;35047:419::-;35213:4;35251:2;35240:9;35236:18;35228:26;;35300:9;35294:4;35290:20;35286:1;35275:9;35271:17;35264:47;35328:131;35454:4;35328:131;:::i;:::-;35320:139;;35047:419;;;:::o;35472:231::-;35612:34;35608:1;35600:6;35596:14;35589:58;35681:14;35676:2;35668:6;35664:15;35657:39;35472:231;:::o;35709:366::-;35851:3;35872:67;35936:2;35931:3;35872:67;:::i;:::-;35865:74;;35948:93;36037:3;35948:93;:::i;:::-;36066:2;36061:3;36057:12;36050:19;;35709:366;;;:::o;36081:419::-;36247:4;36285:2;36274:9;36270:18;36262:26;;36334:9;36328:4;36324:20;36320:1;36309:9;36305:17;36298:47;36362:131;36488:4;36362:131;:::i;:::-;36354:139;;36081:419;;;:::o;36506:224::-;36646:34;36642:1;36634:6;36630:14;36623:58;36715:7;36710:2;36702:6;36698:15;36691:32;36506:224;:::o;36736:366::-;36878:3;36899:67;36963:2;36958:3;36899:67;:::i;:::-;36892:74;;36975:93;37064:3;36975:93;:::i;:::-;37093:2;37088:3;37084:12;37077:19;;36736:366;;;:::o;37108:419::-;37274:4;37312:2;37301:9;37297:18;37289:26;;37361:9;37355:4;37351:20;37347:1;37336:9;37332:17;37325:47;37389:131;37515:4;37389:131;:::i;:::-;37381:139;;37108:419;;;:::o;37533:223::-;37673:34;37669:1;37661:6;37657:14;37650:58;37742:6;37737:2;37729:6;37725:15;37718:31;37533:223;:::o;37762:366::-;37904:3;37925:67;37989:2;37984:3;37925:67;:::i;:::-;37918:74;;38001:93;38090:3;38001:93;:::i;:::-;38119:2;38114:3;38110:12;38103:19;;37762:366;;;:::o;38134:419::-;38300:4;38338:2;38327:9;38323:18;38315:26;;38387:9;38381:4;38377:20;38373:1;38362:9;38358:17;38351:47;38415:131;38541:4;38415:131;:::i;:::-;38407:139;;38134:419;;;:::o;38559:191::-;38599:4;38619:20;38637:1;38619:20;:::i;:::-;38614:25;;38653:20;38671:1;38653:20;:::i;:::-;38648:25;;38692:1;38689;38686:8;38683:34;;;38697:18;;:::i;:::-;38683:34;38742:1;38739;38735:9;38727:17;;38559:191;;;;:::o;38756:175::-;38896:27;38892:1;38884:6;38880:14;38873:51;38756:175;:::o;38937:366::-;39079:3;39100:67;39164:2;39159:3;39100:67;:::i;:::-;39093:74;;39176:93;39265:3;39176:93;:::i;:::-;39294:2;39289:3;39285:12;39278:19;;38937:366;;;:::o;39309:419::-;39475:4;39513:2;39502:9;39498:18;39490:26;;39562:9;39556:4;39552:20;39548:1;39537:9;39533:17;39526:47;39590:131;39716:4;39590:131;:::i;:::-;39582:139;;39309:419;;;:::o;39734:237::-;39874:34;39870:1;39862:6;39858:14;39851:58;39943:20;39938:2;39930:6;39926:15;39919:45;39734:237;:::o;39977:366::-;40119:3;40140:67;40204:2;40199:3;40140:67;:::i;:::-;40133:74;;40216:93;40305:3;40216:93;:::i;:::-;40334:2;40329:3;40325:12;40318:19;;39977:366;;;:::o;40349:419::-;40515:4;40553:2;40542:9;40538:18;40530:26;;40602:9;40596:4;40592:20;40588:1;40577:9;40573:17;40566:47;40630:131;40756:4;40630:131;:::i;:::-;40622:139;;40349:419;;;:::o;40774:180::-;40822:77;40819:1;40812:88;40919:4;40916:1;40909:15;40943:4;40940:1;40933:15;40960:185;41000:1;41017:20;41035:1;41017:20;:::i;:::-;41012:25;;41051:20;41069:1;41051:20;:::i;:::-;41046:25;;41090:1;41080:35;;41095:18;;:::i;:::-;41080:35;41137:1;41134;41130:9;41125:14;;40960:185;;;;:::o;41151:176::-;41183:1;41200:20;41218:1;41200:20;:::i;:::-;41195:25;;41234:20;41252:1;41234:20;:::i;:::-;41229:25;;41273:1;41263:35;;41278:18;;:::i;:::-;41263:35;41319:1;41316;41312:9;41307:14;;41151:176;;;;:::o;41333:98::-;41384:6;41418:5;41412:12;41402:22;;41333:98;;;:::o;41437:168::-;41520:11;41554:6;41549:3;41542:19;41594:4;41589:3;41585:14;41570:29;;41437:168;;;;:::o;41611:360::-;41697:3;41725:38;41757:5;41725:38;:::i;:::-;41779:70;41842:6;41837:3;41779:70;:::i;:::-;41772:77;;41858:52;41903:6;41898:3;41891:4;41884:5;41880:16;41858:52;:::i;:::-;41935:29;41957:6;41935:29;:::i;:::-;41930:3;41926:39;41919:46;;41701:270;41611:360;;;;:::o;41977:640::-;42172:4;42210:3;42199:9;42195:19;42187:27;;42224:71;42292:1;42281:9;42277:17;42268:6;42224:71;:::i;:::-;42305:72;42373:2;42362:9;42358:18;42349:6;42305:72;:::i;:::-;42387;42455:2;42444:9;42440:18;42431:6;42387:72;:::i;:::-;42506:9;42500:4;42496:20;42491:2;42480:9;42476:18;42469:48;42534:76;42605:4;42596:6;42534:76;:::i;:::-;42526:84;;41977:640;;;;;;;:::o;42623:141::-;42679:5;42710:6;42704:13;42695:22;;42726:32;42752:5;42726:32;:::i;:::-;42623:141;;;;:::o;42770:349::-;42839:6;42888:2;42876:9;42867:7;42863:23;42859:32;42856:119;;;42894:79;;:::i;:::-;42856:119;43014:1;43039:63;43094:7;43085:6;43074:9;43070:22;43039:63;:::i;:::-;43029:73;;42985:127;42770:349;;;;:::o;43125:182::-;43265:34;43261:1;43253:6;43249:14;43242:58;43125:182;:::o;43313:366::-;43455:3;43476:67;43540:2;43535:3;43476:67;:::i;:::-;43469:74;;43552:93;43641:3;43552:93;:::i;:::-;43670:2;43665:3;43661:12;43654:19;;43313:366;;;:::o;43685:419::-;43851:4;43889:2;43878:9;43874:18;43866:26;;43938:9;43932:4;43928:20;43924:1;43913:9;43909:17;43902:47;43966:131;44092:4;43966:131;:::i;:::-;43958:139;;43685:419;;;:::o;44110:178::-;44250:30;44246:1;44238:6;44234:14;44227:54;44110:178;:::o;44294:366::-;44436:3;44457:67;44521:2;44516:3;44457:67;:::i;:::-;44450:74;;44533:93;44622:3;44533:93;:::i;:::-;44651:2;44646:3;44642:12;44635:19;;44294:366;;;:::o;44666:419::-;44832:4;44870:2;44859:9;44855:18;44847:26;;44919:9;44913:4;44909:20;44905:1;44894:9;44890:17;44883:47;44947:131;45073:4;44947:131;:::i;:::-;44939:139;;44666:419;;;:::o

Swarm Source

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