ETH Price: $3,128.17 (-0.54%)

Token

Dream Doges (DREAMDOGE)
 

Overview

Max Total Supply

212 DREAMDOGE

Holders

106

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 DREAMDOGE
0x8b27a5bdc88e2b538eda2f601c21b9b51890f8c7
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:
DreamDoge

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-09-07
*/

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

// SPDX-License-Identifier: MIT

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: node_modules\@openzeppelin\contracts\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`, 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 Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

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

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

// File: node_modules\@openzeppelin\contracts\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 `IERC721.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

// File: node_modules\@openzeppelin\contracts\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: node_modules\@openzeppelin\contracts\utils\Address.sol



pragma solidity ^0.8.0;

/**
 * @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
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 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: node_modules\@openzeppelin\contracts\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: node_modules\@openzeppelin\contracts\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: node_modules\@openzeppelin\contracts\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: node_modules\@openzeppelin\contracts\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 overriden 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 {
        require(operator != _msgSender(), "ERC721: approve to caller");

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_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 || getApproved(tokenId) == spender || isApprovedForAll(owner, 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);
    }

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

    /**
     * @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 of token that is not own");
        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);
    }

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

// File: node_modules\@openzeppelin\contracts\token\ERC721\extensions\IERC721Enumerable.sol



pragma solidity ^0.8.0;


/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Enumerable is IERC721 {
    /**
     * @dev Returns the total amount of tokens stored by the contract.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns a token ID owned by `owner` at a given `index` of its token list.
     * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);

    /**
     * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
     * Use along with {totalSupply} to enumerate all tokens.
     */
    function tokenByIndex(uint256 index) external view returns (uint256);
}

// File: @openzeppelin\contracts\token\ERC721\extensions\ERC721Enumerable.sol



pragma solidity ^0.8.0;



/**
 * @dev This implements an optional extension of {ERC721} defined in the EIP that adds
 * enumerability of all the token ids in the contract as well as all token ids owned by each
 * account.
 */
abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
    // Mapping from owner to list of owned token IDs
    mapping(address => mapping(uint256 => uint256)) private _ownedTokens;

    // Mapping from token ID to index of the owner tokens list
    mapping(uint256 => uint256) private _ownedTokensIndex;

    // Array with all token ids, used for enumeration
    uint256[] private _allTokens;

    // Mapping from token id to position in the allTokens array
    mapping(uint256 => uint256) private _allTokensIndex;

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

    /**
     * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
        return _ownedTokens[owner][index];
    }

    /**
     * @dev See {IERC721Enumerable-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _allTokens.length;
    }

    /**
     * @dev See {IERC721Enumerable-tokenByIndex}.
     */
    function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds");
        return _allTokens[index];
    }

    /**
     * @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` cannot be the zero address.
     * - `to` cannot be the zero address.
     *
     * 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 override {
        super._beforeTokenTransfer(from, to, tokenId);

        if (from == address(0)) {
            _addTokenToAllTokensEnumeration(tokenId);
        } else if (from != to) {
            _removeTokenFromOwnerEnumeration(from, tokenId);
        }
        if (to == address(0)) {
            _removeTokenFromAllTokensEnumeration(tokenId);
        } else if (to != from) {
            _addTokenToOwnerEnumeration(to, tokenId);
        }
    }

    /**
     * @dev Private function to add a token to this extension's ownership-tracking data structures.
     * @param to address representing the new owner of the given token ID
     * @param tokenId uint256 ID of the token to be added to the tokens list of the given address
     */
    function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
        uint256 length = ERC721.balanceOf(to);
        _ownedTokens[to][length] = tokenId;
        _ownedTokensIndex[tokenId] = length;
    }

    /**
     * @dev Private function to add a token to this extension's token tracking data structures.
     * @param tokenId uint256 ID of the token to be added to the tokens list
     */
    function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
        _allTokensIndex[tokenId] = _allTokens.length;
        _allTokens.push(tokenId);
    }

    /**
     * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that
     * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for
     * gas optimizations e.g. when performing a transfer operation (avoiding double writes).
     * This has O(1) time complexity, but alters the order of the _ownedTokens array.
     * @param from address representing the previous owner of the given token ID
     * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address
     */
    function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
        // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
        uint256 tokenIndex = _ownedTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary
        if (tokenIndex != lastTokenIndex) {
            uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];

            _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
            _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
        }

        // This also deletes the contents at the last position of the array
        delete _ownedTokensIndex[tokenId];
        delete _ownedTokens[from][lastTokenIndex];
    }

    /**
     * @dev Private function to remove a token from this extension's token tracking data structures.
     * This has O(1) time complexity, but alters the order of the _allTokens array.
     * @param tokenId uint256 ID of the token to be removed from the tokens list
     */
    function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
        // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = _allTokens.length - 1;
        uint256 tokenIndex = _allTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so
        // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding
        // an 'if' statement (like in _removeTokenFromOwnerEnumeration)
        uint256 lastTokenId = _allTokens[lastTokenIndex];

        _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
        _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index

        // This also deletes the contents at the last position of the array
        delete _allTokensIndex[tokenId];
        _allTokens.pop();
    }
}

// File: @openzeppelin\contracts\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() {
        _setOwner(_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 {
        _setOwner(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");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// File: contracts\DreamDoge.sol

pragma solidity ^0.8.0;





contract DreamDoge is ERC721Enumerable, Ownable {

    using Strings for uint256;

    string _baseTokenURI;
    uint256 private _reserved = 100;
    uint256 private _total = 9999;
    uint256 private _price = 0.05 ether;
    bool public _paused = true;

    address a1 = 0xebD7acd94e7BB776D9cDEd73D42d2eaA2A57Aa64;
    address a2 = 0x7C94FeA51887eEFaAc4D5e708Dc1Ab98A701250A;
    address a3 = 0x0BDd2F1b8177DA9931f6a517f65d93CB48fC9FD3;
    address a4 = 0x451Bcf0e43A3FF2C68CeA57006c22C5fc8968D39;

    constructor(string memory baseURI) ERC721("Dream Doges", "DREAMDOGE")  {
        setBaseURI(baseURI);
        _safeMint(a1, 0);
    }

    function adopt(uint256 num) public payable {
        uint256 supply = totalSupply();
        require( !_paused, "Sale paused" );
        require( num < 11, "You can adopt a maximum of 10 Dream Doges" );
        require( supply + num < _total - _reserved, "Exceeds maximum Dream Doges supply" );
        require( msg.value >= _price * num, "Ether sent is not correct" );

        for(uint256 i; i < num; i++){            
            _safeMint( msg.sender, supply + i );
        }
    }
    

    function walletOfOwner(address _owner) public view returns(uint256[] memory) {
        uint256 tokenCount = balanceOf(_owner);

        uint256[] memory tokensId = new uint256[](tokenCount);
        for(uint256 i; i < tokenCount; i++){
            tokensId[i] = tokenOfOwnerByIndex(_owner, i);
        }
        return tokensId;
    }

    function setPrice(uint256 _newPrice) public onlyOwner() {
        _price = _newPrice;
    }

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

    function setBaseURI(string memory baseURI) public onlyOwner {
        _baseTokenURI = baseURI;
    }

    function getPrice() public view returns (uint256){
        return _price;
    }

    function giveAway(address _to, uint256 _amount) external onlyOwner() {
        require( _amount <= _reserved, "Exceeds reserved Dream Doges giveAway supply" );

        uint256 supply = totalSupply();
        for(uint256 i; i < _amount; i++){
            _safeMint( _to, supply + i );
        }

        _reserved -= _amount;
    }

    function pause(bool val) public onlyOwner {
        _paused = val;
    }

    function withdrawAll() public onlyOwner {
        uint256 _percent = address(this).balance / 100;
        require(payable(a1).send(_percent * 30));
        require(payable(a2).send(_percent * 30));
        require(payable(a3).send(_percent * 30));
        require(payable(a4).send(_percent * 10));
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"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":[],"name":"_paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"num","type":"uint256"}],"name":"adopt","outputs":[],"stateMutability":"payable","type":"function"},{"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":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"giveAway","outputs":[],"stateMutability":"nonpayable","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":"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":[{"internalType":"bool","name":"val","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","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":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"setPrice","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":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526064600c5561270f600d5566b1a2bc2ec50000600e556001600f60006101000a81548160ff02191690831515021790555073ebd7acd94e7bb776d9cded73d42d2eaa2a57aa64600f60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550737c94fea51887eefaac4d5e708dc1ab98a701250a601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550730bdd2f1b8177da9931f6a517f65d93cb48fc9fd3601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073451bcf0e43a3ff2c68cea57006c22c5fc8968d39601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200019657600080fd5b5060405162005837380380620058378339818101604052810190620001bc919062001025565b6040518060400160405280600b81526020017f447265616d20446f6765730000000000000000000000000000000000000000008152506040518060400160405280600981526020017f445245414d444f4745000000000000000000000000000000000000000000000081525081600090805190602001906200024092919062000ec0565b5080600190805190602001906200025992919062000ec0565b5050506200027c62000270620002c960201b60201c565b620002d160201b60201c565b6200028d816200039760201b60201c565b620002c2600f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660006200044260201b60201c565b506200161b565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620003a7620002c960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003cd6200046860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000426576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200041d906200133f565b60405180910390fd5b80600b90805190602001906200043e92919062000ec0565b5050565b620004648282604051806020016040528060008152506200049260201b60201c565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620004a483836200050060201b60201c565b620004b96000848484620006e660201b60201c565b620004fb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004f290620012b7565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000573576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200056a906200131d565b60405180910390fd5b6200058481620008a060201b60201c565b15620005c7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005be90620012d9565b60405180910390fd5b620005db600083836200090c60201b60201c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200062d9190620013f5565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000620007148473ffffffffffffffffffffffffffffffffffffffff1662000a5360201b620019ab1760201c565b1562000893578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0262000746620002c960201b60201c565b8786866040518563ffffffff1660e01b81526004016200076a949392919062001263565b602060405180830381600087803b1580156200078557600080fd5b505af1925050508015620007b957506040513d601f19601f82011682018060405250810190620007b6919062000ff9565b60015b62000842573d8060008114620007ec576040519150601f19603f3d011682016040523d82523d6000602084013e620007f1565b606091505b506000815114156200083a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200083190620012b7565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505062000898565b600190505b949350505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6200092483838362000a6660201b620019be1760201c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141562000971576200096b8162000a6b60201b60201c565b620009b9565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614620009b857620009b7838262000ab460201b60201c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000a065762000a008162000c3160201b60201c565b62000a4e565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161462000a4d5762000a4c828262000d7960201b60201c565b5b5b505050565b600080823b905060008111915050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600162000ace8462000e0560201b62000e271760201c565b62000ada919062001452565b905060006007600084815260200190815260200160002054905081811462000bc0576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905062000c47919062001452565b905060006009600084815260200190815260200160002054905060006008838154811062000c9e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050806008838154811062000ce7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548062000d5d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b600062000d918362000e0560201b62000e271760201c565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000e79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000e7090620012fb565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b82805462000ece906200152d565b90600052602060002090601f01602090048101928262000ef2576000855562000f3e565b82601f1062000f0d57805160ff191683800117855562000f3e565b8280016001018555821562000f3e579182015b8281111562000f3d57825182559160200191906001019062000f20565b5b50905062000f4d919062000f51565b5090565b5b8082111562000f6c57600081600090555060010162000f52565b5090565b600062000f8762000f818462001395565b62001361565b90508281526020810184848401111562000fa057600080fd5b62000fad848285620014f7565b509392505050565b60008151905062000fc68162001601565b92915050565b600082601f83011262000fde57600080fd5b815162000ff084826020860162000f70565b91505092915050565b6000602082840312156200100c57600080fd5b60006200101c8482850162000fb5565b91505092915050565b6000602082840312156200103857600080fd5b600082015167ffffffffffffffff8111156200105357600080fd5b620010618482850162000fcc565b91505092915050565b62001075816200148d565b82525050565b60006200108882620013c8565b620010948185620013d3565b9350620010a6818560208601620014f7565b620010b181620015f0565b840191505092915050565b6000620010cb603283620013e4565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b600062001133601c83620013e4565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b600062001175602a83620013e4565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b6000620011dd602083620013e4565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b60006200121f602083620013e4565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6200125d81620014ed565b82525050565b60006080820190506200127a60008301876200106a565b6200128960208301866200106a565b62001298604083018562001252565b8181036060830152620012ac81846200107b565b905095945050505050565b60006020820190508181036000830152620012d281620010bc565b9050919050565b60006020820190508181036000830152620012f48162001124565b9050919050565b60006020820190508181036000830152620013168162001166565b9050919050565b600060208201905081810360008301526200133881620011ce565b9050919050565b600060208201905081810360008301526200135a8162001210565b9050919050565b6000604051905081810181811067ffffffffffffffff821117156200138b576200138a620015c1565b5b8060405250919050565b600067ffffffffffffffff821115620013b357620013b2620015c1565b5b601f19601f8301169050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006200140282620014ed565b91506200140f83620014ed565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562001447576200144662001563565b5b828201905092915050565b60006200145f82620014ed565b91506200146c83620014ed565b92508282101562001482576200148162001563565b5b828203905092915050565b60006200149a82620014cd565b9050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b8381101562001517578082015181840152602081019050620014fa565b8381111562001527576000848401525b50505050565b600060028204905060018216806200154657607f821691505b602082108114156200155d576200155c62001592565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b6200160c81620014a1565b81146200161857600080fd5b50565b61420c806200162b6000396000f3fe6080604052600436106101b75760003560e01c806370a08231116100ec57806398d5fdca1161008a578063c87b56dd11610064578063c87b56dd146105fb578063ca80014414610638578063e985e9c514610661578063f2fde38b1461069e576101b7565b806398d5fdca1461057e578063a22cb465146105a9578063b88d4fde146105d2576101b7565b80638588b2c5116100c65780638588b2c5146104e35780638da5cb5b146104ff57806391b7f5ed1461052a57806395d89b4114610553576101b7565b806370a0823114610478578063715018a6146104b5578063853828b6146104cc576101b7565b806323b872dd11610159578063438b630011610133578063438b6300146103985780634f6ccce7146103d557806355f804b3146104125780636352211e1461043b576101b7565b806323b872dd146103095780632f745c591461033257806342842e0e1461036f576101b7565b8063081812fc11610195578063081812fc1461024d578063095ea7b31461028a57806316c61ccc146102b357806318160ddd146102de576101b7565b806301ffc9a7146101bc57806302329a29146101f957806306fdde0314610222575b600080fd5b3480156101c857600080fd5b506101e360048036038101906101de9190612eed565b6106c7565b6040516101f091906139f1565b60405180910390f35b34801561020557600080fd5b50610220600480360381019061021b9190612ec4565b610741565b005b34801561022e57600080fd5b506102376107da565b6040516102449190613a0c565b60405180910390f35b34801561025957600080fd5b50610274600480360381019061026f9190612f80565b61086c565b6040516102819190613968565b60405180910390f35b34801561029657600080fd5b506102b160048036038101906102ac9190612e88565b6108f1565b005b3480156102bf57600080fd5b506102c8610a09565b6040516102d591906139f1565b60405180910390f35b3480156102ea57600080fd5b506102f3610a1c565b6040516103009190613d0e565b60405180910390f35b34801561031557600080fd5b50610330600480360381019061032b9190612d82565b610a29565b005b34801561033e57600080fd5b5061035960048036038101906103549190612e88565b610a89565b6040516103669190613d0e565b60405180910390f35b34801561037b57600080fd5b5061039660048036038101906103919190612d82565b610b2e565b005b3480156103a457600080fd5b506103bf60048036038101906103ba9190612d1d565b610b4e565b6040516103cc91906139cf565b60405180910390f35b3480156103e157600080fd5b506103fc60048036038101906103f79190612f80565b610c48565b6040516104099190613d0e565b60405180910390f35b34801561041e57600080fd5b5061043960048036038101906104349190612f3f565b610cdf565b005b34801561044757600080fd5b50610462600480360381019061045d9190612f80565b610d75565b60405161046f9190613968565b60405180910390f35b34801561048457600080fd5b5061049f600480360381019061049a9190612d1d565b610e27565b6040516104ac9190613d0e565b60405180910390f35b3480156104c157600080fd5b506104ca610edf565b005b3480156104d857600080fd5b506104e1610f67565b005b6104fd60048036038101906104f89190612f80565b6111a7565b005b34801561050b57600080fd5b5061051461132a565b6040516105219190613968565b60405180910390f35b34801561053657600080fd5b50610551600480360381019061054c9190612f80565b611354565b005b34801561055f57600080fd5b506105686113da565b6040516105759190613a0c565b60405180910390f35b34801561058a57600080fd5b5061059361146c565b6040516105a09190613d0e565b60405180910390f35b3480156105b557600080fd5b506105d060048036038101906105cb9190612e4c565b611476565b005b3480156105de57600080fd5b506105f960048036038101906105f49190612dd1565b6115f7565b005b34801561060757600080fd5b50610622600480360381019061061d9190612f80565b611659565b60405161062f9190613a0c565b60405180910390f35b34801561064457600080fd5b5061065f600480360381019061065a9190612e88565b611700565b005b34801561066d57600080fd5b5061068860048036038101906106839190612d46565b61181f565b60405161069591906139f1565b60405180910390f35b3480156106aa57600080fd5b506106c560048036038101906106c09190612d1d565b6118b3565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061073a5750610739826119c3565b5b9050919050565b610749611aa5565b73ffffffffffffffffffffffffffffffffffffffff1661076761132a565b73ffffffffffffffffffffffffffffffffffffffff16146107bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b490613c0e565b60405180910390fd5b80600f60006101000a81548160ff02191690831515021790555050565b6060600080546107e990614001565b80601f016020809104026020016040519081016040528092919081815260200182805461081590614001565b80156108625780601f1061083757610100808354040283529160200191610862565b820191906000526020600020905b81548152906001019060200180831161084557829003601f168201915b5050505050905090565b600061087782611aad565b6108b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ad90613bee565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108fc82610d75565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561096d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096490613c8e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661098c611aa5565b73ffffffffffffffffffffffffffffffffffffffff1614806109bb57506109ba816109b5611aa5565b61181f565b5b6109fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f190613b6e565b60405180910390fd5b610a048383611b19565b505050565b600f60009054906101000a900460ff1681565b6000600880549050905090565b610a3a610a34611aa5565b82611bd2565b610a79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7090613cce565b60405180910390fd5b610a84838383611cb0565b505050565b6000610a9483610e27565b8210610ad5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610acc90613a6e565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610b49838383604051806020016040528060008152506115f7565b505050565b60606000610b5b83610e27565b905060008167ffffffffffffffff811115610b9f577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610bcd5781602001602082028036833780820191505090505b50905060005b82811015610c3d57610be58582610a89565b828281518110610c1e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250508080610c3590614033565b915050610bd3565b508092505050919050565b6000610c52610a1c565b8210610c93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8a90613cee565b60405180910390fd5b60088281548110610ccd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b610ce7611aa5565b73ffffffffffffffffffffffffffffffffffffffff16610d0561132a565b73ffffffffffffffffffffffffffffffffffffffff1614610d5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5290613c0e565b60405180910390fd5b80600b9080519060200190610d71929190612b41565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1590613bae565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610e98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8f90613b8e565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ee7611aa5565b73ffffffffffffffffffffffffffffffffffffffff16610f0561132a565b73ffffffffffffffffffffffffffffffffffffffff1614610f5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5290613c0e565b60405180910390fd5b610f656000611f0c565b565b610f6f611aa5565b73ffffffffffffffffffffffffffffffffffffffff16610f8d61132a565b73ffffffffffffffffffffffffffffffffffffffff1614610fe3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fda90613c0e565b60405180910390fd5b6000606447610ff29190613e8c565b9050600f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc601e8361103d9190613ebd565b9081150290604051600060405180830381858888f1935050505061106057600080fd5b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc601e836110a99190613ebd565b9081150290604051600060405180830381858888f193505050506110cc57600080fd5b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc601e836111159190613ebd565b9081150290604051600060405180830381858888f1935050505061113857600080fd5b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc600a836111819190613ebd565b9081150290604051600060405180830381858888f193505050506111a457600080fd5b50565b60006111b1610a1c565b9050600f60009054906101000a900460ff1615611203576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fa90613a2e565b60405180910390fd5b600b8210611246576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123d90613a4e565b60405180910390fd5b600c54600d546112569190613f17565b82826112629190613e36565b106112a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129990613c6e565b60405180910390fd5b81600e546112b09190613ebd565b3410156112f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e990613cae565b60405180910390fd5b60005b828110156113255761131233828461130d9190613e36565b611fd2565b808061131d90614033565b9150506112f5565b505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61135c611aa5565b73ffffffffffffffffffffffffffffffffffffffff1661137a61132a565b73ffffffffffffffffffffffffffffffffffffffff16146113d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c790613c0e565b60405180910390fd5b80600e8190555050565b6060600180546113e990614001565b80601f016020809104026020016040519081016040528092919081815260200182805461141590614001565b80156114625780601f1061143757610100808354040283529160200191611462565b820191906000526020600020905b81548152906001019060200180831161144557829003601f168201915b5050505050905090565b6000600e54905090565b61147e611aa5565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e390613b2e565b60405180910390fd5b80600560006114f9611aa5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166115a6611aa5565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516115eb91906139f1565b60405180910390a35050565b611608611602611aa5565b83611bd2565b611647576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163e90613cce565b60405180910390fd5b61165384848484611ff0565b50505050565b606061166482611aad565b6116a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169a90613c4e565b60405180910390fd5b60006116ad61204c565b905060008151116116cd57604051806020016040528060008152506116f8565b806116d7846120de565b6040516020016116e8929190613944565b6040516020818303038152906040525b915050919050565b611708611aa5565b73ffffffffffffffffffffffffffffffffffffffff1661172661132a565b73ffffffffffffffffffffffffffffffffffffffff161461177c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177390613c0e565b60405180910390fd5b600c548111156117c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b890613aee565b60405180910390fd5b60006117cb610a1c565b905060005b82811015611800576117ed8482846117e89190613e36565b611fd2565b80806117f890614033565b9150506117d0565b5081600c60008282546118139190613f17565b92505081905550505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6118bb611aa5565b73ffffffffffffffffffffffffffffffffffffffff166118d961132a565b73ffffffffffffffffffffffffffffffffffffffff161461192f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192690613c0e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561199f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199690613aae565b60405180910390fd5b6119a881611f0c565b50565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611a8e57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611a9e5750611a9d8261228b565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611b8c83610d75565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611bdd82611aad565b611c1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1390613b4e565b60405180910390fd5b6000611c2783610d75565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611c9657508373ffffffffffffffffffffffffffffffffffffffff16611c7e8461086c565b73ffffffffffffffffffffffffffffffffffffffff16145b80611ca75750611ca6818561181f565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611cd082610d75565b73ffffffffffffffffffffffffffffffffffffffff1614611d26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1d90613c2e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8d90613b0e565b60405180910390fd5b611da18383836122f5565b611dac600082611b19565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611dfc9190613f17565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e539190613e36565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611fec828260405180602001604052806000815250612409565b5050565b611ffb848484611cb0565b61200784848484612464565b612046576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203d90613a8e565b60405180910390fd5b50505050565b6060600b805461205b90614001565b80601f016020809104026020016040519081016040528092919081815260200182805461208790614001565b80156120d45780601f106120a9576101008083540402835291602001916120d4565b820191906000526020600020905b8154815290600101906020018083116120b757829003601f168201915b5050505050905090565b60606000821415612126576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612286565b600082905060005b6000821461215857808061214190614033565b915050600a826121519190613e8c565b915061212e565b60008167ffffffffffffffff81111561219a577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156121cc5781602001600182028036833780820191505090505b5090505b6000851461227f576001826121e59190613f17565b9150600a856121f4919061407c565b60306122009190613e36565b60f81b81838151811061223c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856122789190613e8c565b94506121d0565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6123008383836119be565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156123435761233e816125fb565b612382565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612381576123808382612644565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123c5576123c0816127b1565b612404565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146124035761240282826128f4565b5b5b505050565b6124138383612973565b6124206000848484612464565b61245f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245690613a8e565b60405180910390fd5b505050565b60006124858473ffffffffffffffffffffffffffffffffffffffff166119ab565b156125ee578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026124ae611aa5565b8786866040518563ffffffff1660e01b81526004016124d09493929190613983565b602060405180830381600087803b1580156124ea57600080fd5b505af192505050801561251b57506040513d601f19601f820116820180604052508101906125189190612f16565b60015b61259e573d806000811461254b576040519150601f19603f3d011682016040523d82523d6000602084013e612550565b606091505b50600081511415612596576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258d90613a8e565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506125f3565b600190505b949350505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161265184610e27565b61265b9190613f17565b9050600060076000848152602001908152602001600020549050818114612740576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506127c59190613f17565b905060006009600084815260200190815260200160002054905060006008838154811061281b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110612863577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806128d8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b60006128ff83610e27565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129da90613bce565b60405180910390fd5b6129ec81611aad565b15612a2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2390613ace565b60405180910390fd5b612a38600083836122f5565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a889190613e36565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054612b4d90614001565b90600052602060002090601f016020900481019282612b6f5760008555612bb6565b82601f10612b8857805160ff1916838001178555612bb6565b82800160010185558215612bb6579182015b82811115612bb5578251825591602001919060010190612b9a565b5b509050612bc39190612bc7565b5090565b5b80821115612be0576000816000905550600101612bc8565b5090565b6000612bf7612bf284613d5a565b613d29565b905082815260208101848484011115612c0f57600080fd5b612c1a848285613fbf565b509392505050565b6000612c35612c3084613d8a565b613d29565b905082815260208101848484011115612c4d57600080fd5b612c58848285613fbf565b509392505050565b600081359050612c6f8161417a565b92915050565b600081359050612c8481614191565b92915050565b600081359050612c99816141a8565b92915050565b600081519050612cae816141a8565b92915050565b600082601f830112612cc557600080fd5b8135612cd5848260208601612be4565b91505092915050565b600082601f830112612cef57600080fd5b8135612cff848260208601612c22565b91505092915050565b600081359050612d17816141bf565b92915050565b600060208284031215612d2f57600080fd5b6000612d3d84828501612c60565b91505092915050565b60008060408385031215612d5957600080fd5b6000612d6785828601612c60565b9250506020612d7885828601612c60565b9150509250929050565b600080600060608486031215612d9757600080fd5b6000612da586828701612c60565b9350506020612db686828701612c60565b9250506040612dc786828701612d08565b9150509250925092565b60008060008060808587031215612de757600080fd5b6000612df587828801612c60565b9450506020612e0687828801612c60565b9350506040612e1787828801612d08565b925050606085013567ffffffffffffffff811115612e3457600080fd5b612e4087828801612cb4565b91505092959194509250565b60008060408385031215612e5f57600080fd5b6000612e6d85828601612c60565b9250506020612e7e85828601612c75565b9150509250929050565b60008060408385031215612e9b57600080fd5b6000612ea985828601612c60565b9250506020612eba85828601612d08565b9150509250929050565b600060208284031215612ed657600080fd5b6000612ee484828501612c75565b91505092915050565b600060208284031215612eff57600080fd5b6000612f0d84828501612c8a565b91505092915050565b600060208284031215612f2857600080fd5b6000612f3684828501612c9f565b91505092915050565b600060208284031215612f5157600080fd5b600082013567ffffffffffffffff811115612f6b57600080fd5b612f7784828501612cde565b91505092915050565b600060208284031215612f9257600080fd5b6000612fa084828501612d08565b91505092915050565b6000612fb58383613926565b60208301905092915050565b612fca81613f4b565b82525050565b6000612fdb82613dca565b612fe58185613df8565b9350612ff083613dba565b8060005b838110156130215781516130088882612fa9565b975061301383613deb565b925050600181019050612ff4565b5085935050505092915050565b61303781613f5d565b82525050565b600061304882613dd5565b6130528185613e09565b9350613062818560208601613fce565b61306b81614169565b840191505092915050565b600061308182613de0565b61308b8185613e1a565b935061309b818560208601613fce565b6130a481614169565b840191505092915050565b60006130ba82613de0565b6130c48185613e2b565b93506130d4818560208601613fce565b80840191505092915050565b60006130ed600b83613e1a565b91507f53616c65207061757365640000000000000000000000000000000000000000006000830152602082019050919050565b600061312d602983613e1a565b91507f596f752063616e2061646f70742061206d6178696d756d206f6620313020447260008301527f65616d20446f67657300000000000000000000000000000000000000000000006020830152604082019050919050565b6000613193602b83613e1a565b91507f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008301527f74206f6620626f756e64730000000000000000000000000000000000000000006020830152604082019050919050565b60006131f9603283613e1a565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b600061325f602683613e1a565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006132c5601c83613e1a565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b6000613305602c83613e1a565b91507f4578636565647320726573657276656420447265616d20446f6765732067697660008301527f654177617920737570706c7900000000000000000000000000000000000000006020830152604082019050919050565b600061336b602483613e1a565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006133d1601983613e1a565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b6000613411602c83613e1a565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000613477603883613e1a565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b60006134dd602a83613e1a565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b6000613543602983613e1a565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b60006135a9602083613e1a565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b60006135e9602c83613e1a565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b600061364f602083613e1a565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b600061368f602983613e1a565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b60006136f5602f83613e1a565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b600061375b602283613e1a565b91507f45786365656473206d6178696d756d20447265616d20446f676573207375707060008301527f6c790000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006137c1602183613e1a565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613827601983613e1a565b91507f45746865722073656e74206973206e6f7420636f7272656374000000000000006000830152602082019050919050565b6000613867603183613e1a565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b60006138cd602c83613e1a565b91507f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008301527f7574206f6620626f756e647300000000000000000000000000000000000000006020830152604082019050919050565b61392f81613fb5565b82525050565b61393e81613fb5565b82525050565b600061395082856130af565b915061395c82846130af565b91508190509392505050565b600060208201905061397d6000830184612fc1565b92915050565b60006080820190506139986000830187612fc1565b6139a56020830186612fc1565b6139b26040830185613935565b81810360608301526139c4818461303d565b905095945050505050565b600060208201905081810360008301526139e98184612fd0565b905092915050565b6000602082019050613a06600083018461302e565b92915050565b60006020820190508181036000830152613a268184613076565b905092915050565b60006020820190508181036000830152613a47816130e0565b9050919050565b60006020820190508181036000830152613a6781613120565b9050919050565b60006020820190508181036000830152613a8781613186565b9050919050565b60006020820190508181036000830152613aa7816131ec565b9050919050565b60006020820190508181036000830152613ac781613252565b9050919050565b60006020820190508181036000830152613ae7816132b8565b9050919050565b60006020820190508181036000830152613b07816132f8565b9050919050565b60006020820190508181036000830152613b278161335e565b9050919050565b60006020820190508181036000830152613b47816133c4565b9050919050565b60006020820190508181036000830152613b6781613404565b9050919050565b60006020820190508181036000830152613b878161346a565b9050919050565b60006020820190508181036000830152613ba7816134d0565b9050919050565b60006020820190508181036000830152613bc781613536565b9050919050565b60006020820190508181036000830152613be78161359c565b9050919050565b60006020820190508181036000830152613c07816135dc565b9050919050565b60006020820190508181036000830152613c2781613642565b9050919050565b60006020820190508181036000830152613c4781613682565b9050919050565b60006020820190508181036000830152613c67816136e8565b9050919050565b60006020820190508181036000830152613c878161374e565b9050919050565b60006020820190508181036000830152613ca7816137b4565b9050919050565b60006020820190508181036000830152613cc78161381a565b9050919050565b60006020820190508181036000830152613ce78161385a565b9050919050565b60006020820190508181036000830152613d07816138c0565b9050919050565b6000602082019050613d236000830184613935565b92915050565b6000604051905081810181811067ffffffffffffffff82111715613d5057613d4f61413a565b5b8060405250919050565b600067ffffffffffffffff821115613d7557613d7461413a565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115613da557613da461413a565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613e4182613fb5565b9150613e4c83613fb5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613e8157613e806140ad565b5b828201905092915050565b6000613e9782613fb5565b9150613ea283613fb5565b925082613eb257613eb16140dc565b5b828204905092915050565b6000613ec882613fb5565b9150613ed383613fb5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613f0c57613f0b6140ad565b5b828202905092915050565b6000613f2282613fb5565b9150613f2d83613fb5565b925082821015613f4057613f3f6140ad565b5b828203905092915050565b6000613f5682613f95565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613fec578082015181840152602081019050613fd1565b83811115613ffb576000848401525b50505050565b6000600282049050600182168061401957607f821691505b6020821081141561402d5761402c61410b565b5b50919050565b600061403e82613fb5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614071576140706140ad565b5b600182019050919050565b600061408782613fb5565b915061409283613fb5565b9250826140a2576140a16140dc565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b61418381613f4b565b811461418e57600080fd5b50565b61419a81613f5d565b81146141a557600080fd5b50565b6141b181613f69565b81146141bc57600080fd5b50565b6141c881613fb5565b81146141d357600080fd5b5056fea2646970667358221220286e35c183f5b95f131b7c3e557bc727b14e0a7681b610ae0079bd59d20aca7f64736f6c634300080000330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004a68747470733a2f2f697066732e666c65656b2e636f2f697066732f516d595a6e705366615774717a716b685252634d6f7a475635356179574d68344c6f557750585a4e5557563642672f00000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106101b75760003560e01c806370a08231116100ec57806398d5fdca1161008a578063c87b56dd11610064578063c87b56dd146105fb578063ca80014414610638578063e985e9c514610661578063f2fde38b1461069e576101b7565b806398d5fdca1461057e578063a22cb465146105a9578063b88d4fde146105d2576101b7565b80638588b2c5116100c65780638588b2c5146104e35780638da5cb5b146104ff57806391b7f5ed1461052a57806395d89b4114610553576101b7565b806370a0823114610478578063715018a6146104b5578063853828b6146104cc576101b7565b806323b872dd11610159578063438b630011610133578063438b6300146103985780634f6ccce7146103d557806355f804b3146104125780636352211e1461043b576101b7565b806323b872dd146103095780632f745c591461033257806342842e0e1461036f576101b7565b8063081812fc11610195578063081812fc1461024d578063095ea7b31461028a57806316c61ccc146102b357806318160ddd146102de576101b7565b806301ffc9a7146101bc57806302329a29146101f957806306fdde0314610222575b600080fd5b3480156101c857600080fd5b506101e360048036038101906101de9190612eed565b6106c7565b6040516101f091906139f1565b60405180910390f35b34801561020557600080fd5b50610220600480360381019061021b9190612ec4565b610741565b005b34801561022e57600080fd5b506102376107da565b6040516102449190613a0c565b60405180910390f35b34801561025957600080fd5b50610274600480360381019061026f9190612f80565b61086c565b6040516102819190613968565b60405180910390f35b34801561029657600080fd5b506102b160048036038101906102ac9190612e88565b6108f1565b005b3480156102bf57600080fd5b506102c8610a09565b6040516102d591906139f1565b60405180910390f35b3480156102ea57600080fd5b506102f3610a1c565b6040516103009190613d0e565b60405180910390f35b34801561031557600080fd5b50610330600480360381019061032b9190612d82565b610a29565b005b34801561033e57600080fd5b5061035960048036038101906103549190612e88565b610a89565b6040516103669190613d0e565b60405180910390f35b34801561037b57600080fd5b5061039660048036038101906103919190612d82565b610b2e565b005b3480156103a457600080fd5b506103bf60048036038101906103ba9190612d1d565b610b4e565b6040516103cc91906139cf565b60405180910390f35b3480156103e157600080fd5b506103fc60048036038101906103f79190612f80565b610c48565b6040516104099190613d0e565b60405180910390f35b34801561041e57600080fd5b5061043960048036038101906104349190612f3f565b610cdf565b005b34801561044757600080fd5b50610462600480360381019061045d9190612f80565b610d75565b60405161046f9190613968565b60405180910390f35b34801561048457600080fd5b5061049f600480360381019061049a9190612d1d565b610e27565b6040516104ac9190613d0e565b60405180910390f35b3480156104c157600080fd5b506104ca610edf565b005b3480156104d857600080fd5b506104e1610f67565b005b6104fd60048036038101906104f89190612f80565b6111a7565b005b34801561050b57600080fd5b5061051461132a565b6040516105219190613968565b60405180910390f35b34801561053657600080fd5b50610551600480360381019061054c9190612f80565b611354565b005b34801561055f57600080fd5b506105686113da565b6040516105759190613a0c565b60405180910390f35b34801561058a57600080fd5b5061059361146c565b6040516105a09190613d0e565b60405180910390f35b3480156105b557600080fd5b506105d060048036038101906105cb9190612e4c565b611476565b005b3480156105de57600080fd5b506105f960048036038101906105f49190612dd1565b6115f7565b005b34801561060757600080fd5b50610622600480360381019061061d9190612f80565b611659565b60405161062f9190613a0c565b60405180910390f35b34801561064457600080fd5b5061065f600480360381019061065a9190612e88565b611700565b005b34801561066d57600080fd5b5061068860048036038101906106839190612d46565b61181f565b60405161069591906139f1565b60405180910390f35b3480156106aa57600080fd5b506106c560048036038101906106c09190612d1d565b6118b3565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061073a5750610739826119c3565b5b9050919050565b610749611aa5565b73ffffffffffffffffffffffffffffffffffffffff1661076761132a565b73ffffffffffffffffffffffffffffffffffffffff16146107bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b490613c0e565b60405180910390fd5b80600f60006101000a81548160ff02191690831515021790555050565b6060600080546107e990614001565b80601f016020809104026020016040519081016040528092919081815260200182805461081590614001565b80156108625780601f1061083757610100808354040283529160200191610862565b820191906000526020600020905b81548152906001019060200180831161084557829003601f168201915b5050505050905090565b600061087782611aad565b6108b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ad90613bee565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108fc82610d75565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561096d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096490613c8e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661098c611aa5565b73ffffffffffffffffffffffffffffffffffffffff1614806109bb57506109ba816109b5611aa5565b61181f565b5b6109fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f190613b6e565b60405180910390fd5b610a048383611b19565b505050565b600f60009054906101000a900460ff1681565b6000600880549050905090565b610a3a610a34611aa5565b82611bd2565b610a79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7090613cce565b60405180910390fd5b610a84838383611cb0565b505050565b6000610a9483610e27565b8210610ad5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610acc90613a6e565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610b49838383604051806020016040528060008152506115f7565b505050565b60606000610b5b83610e27565b905060008167ffffffffffffffff811115610b9f577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610bcd5781602001602082028036833780820191505090505b50905060005b82811015610c3d57610be58582610a89565b828281518110610c1e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250508080610c3590614033565b915050610bd3565b508092505050919050565b6000610c52610a1c565b8210610c93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8a90613cee565b60405180910390fd5b60088281548110610ccd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b610ce7611aa5565b73ffffffffffffffffffffffffffffffffffffffff16610d0561132a565b73ffffffffffffffffffffffffffffffffffffffff1614610d5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5290613c0e565b60405180910390fd5b80600b9080519060200190610d71929190612b41565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1590613bae565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610e98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8f90613b8e565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ee7611aa5565b73ffffffffffffffffffffffffffffffffffffffff16610f0561132a565b73ffffffffffffffffffffffffffffffffffffffff1614610f5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5290613c0e565b60405180910390fd5b610f656000611f0c565b565b610f6f611aa5565b73ffffffffffffffffffffffffffffffffffffffff16610f8d61132a565b73ffffffffffffffffffffffffffffffffffffffff1614610fe3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fda90613c0e565b60405180910390fd5b6000606447610ff29190613e8c565b9050600f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc601e8361103d9190613ebd565b9081150290604051600060405180830381858888f1935050505061106057600080fd5b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc601e836110a99190613ebd565b9081150290604051600060405180830381858888f193505050506110cc57600080fd5b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc601e836111159190613ebd565b9081150290604051600060405180830381858888f1935050505061113857600080fd5b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc600a836111819190613ebd565b9081150290604051600060405180830381858888f193505050506111a457600080fd5b50565b60006111b1610a1c565b9050600f60009054906101000a900460ff1615611203576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fa90613a2e565b60405180910390fd5b600b8210611246576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123d90613a4e565b60405180910390fd5b600c54600d546112569190613f17565b82826112629190613e36565b106112a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129990613c6e565b60405180910390fd5b81600e546112b09190613ebd565b3410156112f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e990613cae565b60405180910390fd5b60005b828110156113255761131233828461130d9190613e36565b611fd2565b808061131d90614033565b9150506112f5565b505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61135c611aa5565b73ffffffffffffffffffffffffffffffffffffffff1661137a61132a565b73ffffffffffffffffffffffffffffffffffffffff16146113d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c790613c0e565b60405180910390fd5b80600e8190555050565b6060600180546113e990614001565b80601f016020809104026020016040519081016040528092919081815260200182805461141590614001565b80156114625780601f1061143757610100808354040283529160200191611462565b820191906000526020600020905b81548152906001019060200180831161144557829003601f168201915b5050505050905090565b6000600e54905090565b61147e611aa5565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e390613b2e565b60405180910390fd5b80600560006114f9611aa5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166115a6611aa5565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516115eb91906139f1565b60405180910390a35050565b611608611602611aa5565b83611bd2565b611647576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163e90613cce565b60405180910390fd5b61165384848484611ff0565b50505050565b606061166482611aad565b6116a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169a90613c4e565b60405180910390fd5b60006116ad61204c565b905060008151116116cd57604051806020016040528060008152506116f8565b806116d7846120de565b6040516020016116e8929190613944565b6040516020818303038152906040525b915050919050565b611708611aa5565b73ffffffffffffffffffffffffffffffffffffffff1661172661132a565b73ffffffffffffffffffffffffffffffffffffffff161461177c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177390613c0e565b60405180910390fd5b600c548111156117c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b890613aee565b60405180910390fd5b60006117cb610a1c565b905060005b82811015611800576117ed8482846117e89190613e36565b611fd2565b80806117f890614033565b9150506117d0565b5081600c60008282546118139190613f17565b92505081905550505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6118bb611aa5565b73ffffffffffffffffffffffffffffffffffffffff166118d961132a565b73ffffffffffffffffffffffffffffffffffffffff161461192f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192690613c0e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561199f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199690613aae565b60405180910390fd5b6119a881611f0c565b50565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611a8e57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611a9e5750611a9d8261228b565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611b8c83610d75565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611bdd82611aad565b611c1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1390613b4e565b60405180910390fd5b6000611c2783610d75565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611c9657508373ffffffffffffffffffffffffffffffffffffffff16611c7e8461086c565b73ffffffffffffffffffffffffffffffffffffffff16145b80611ca75750611ca6818561181f565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611cd082610d75565b73ffffffffffffffffffffffffffffffffffffffff1614611d26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1d90613c2e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8d90613b0e565b60405180910390fd5b611da18383836122f5565b611dac600082611b19565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611dfc9190613f17565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e539190613e36565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611fec828260405180602001604052806000815250612409565b5050565b611ffb848484611cb0565b61200784848484612464565b612046576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203d90613a8e565b60405180910390fd5b50505050565b6060600b805461205b90614001565b80601f016020809104026020016040519081016040528092919081815260200182805461208790614001565b80156120d45780601f106120a9576101008083540402835291602001916120d4565b820191906000526020600020905b8154815290600101906020018083116120b757829003601f168201915b5050505050905090565b60606000821415612126576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612286565b600082905060005b6000821461215857808061214190614033565b915050600a826121519190613e8c565b915061212e565b60008167ffffffffffffffff81111561219a577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156121cc5781602001600182028036833780820191505090505b5090505b6000851461227f576001826121e59190613f17565b9150600a856121f4919061407c565b60306122009190613e36565b60f81b81838151811061223c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856122789190613e8c565b94506121d0565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6123008383836119be565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156123435761233e816125fb565b612382565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612381576123808382612644565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123c5576123c0816127b1565b612404565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146124035761240282826128f4565b5b5b505050565b6124138383612973565b6124206000848484612464565b61245f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245690613a8e565b60405180910390fd5b505050565b60006124858473ffffffffffffffffffffffffffffffffffffffff166119ab565b156125ee578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026124ae611aa5565b8786866040518563ffffffff1660e01b81526004016124d09493929190613983565b602060405180830381600087803b1580156124ea57600080fd5b505af192505050801561251b57506040513d601f19601f820116820180604052508101906125189190612f16565b60015b61259e573d806000811461254b576040519150601f19603f3d011682016040523d82523d6000602084013e612550565b606091505b50600081511415612596576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258d90613a8e565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506125f3565b600190505b949350505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161265184610e27565b61265b9190613f17565b9050600060076000848152602001908152602001600020549050818114612740576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506127c59190613f17565b905060006009600084815260200190815260200160002054905060006008838154811061281b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110612863577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806128d8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b60006128ff83610e27565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129da90613bce565b60405180910390fd5b6129ec81611aad565b15612a2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2390613ace565b60405180910390fd5b612a38600083836122f5565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a889190613e36565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054612b4d90614001565b90600052602060002090601f016020900481019282612b6f5760008555612bb6565b82601f10612b8857805160ff1916838001178555612bb6565b82800160010185558215612bb6579182015b82811115612bb5578251825591602001919060010190612b9a565b5b509050612bc39190612bc7565b5090565b5b80821115612be0576000816000905550600101612bc8565b5090565b6000612bf7612bf284613d5a565b613d29565b905082815260208101848484011115612c0f57600080fd5b612c1a848285613fbf565b509392505050565b6000612c35612c3084613d8a565b613d29565b905082815260208101848484011115612c4d57600080fd5b612c58848285613fbf565b509392505050565b600081359050612c6f8161417a565b92915050565b600081359050612c8481614191565b92915050565b600081359050612c99816141a8565b92915050565b600081519050612cae816141a8565b92915050565b600082601f830112612cc557600080fd5b8135612cd5848260208601612be4565b91505092915050565b600082601f830112612cef57600080fd5b8135612cff848260208601612c22565b91505092915050565b600081359050612d17816141bf565b92915050565b600060208284031215612d2f57600080fd5b6000612d3d84828501612c60565b91505092915050565b60008060408385031215612d5957600080fd5b6000612d6785828601612c60565b9250506020612d7885828601612c60565b9150509250929050565b600080600060608486031215612d9757600080fd5b6000612da586828701612c60565b9350506020612db686828701612c60565b9250506040612dc786828701612d08565b9150509250925092565b60008060008060808587031215612de757600080fd5b6000612df587828801612c60565b9450506020612e0687828801612c60565b9350506040612e1787828801612d08565b925050606085013567ffffffffffffffff811115612e3457600080fd5b612e4087828801612cb4565b91505092959194509250565b60008060408385031215612e5f57600080fd5b6000612e6d85828601612c60565b9250506020612e7e85828601612c75565b9150509250929050565b60008060408385031215612e9b57600080fd5b6000612ea985828601612c60565b9250506020612eba85828601612d08565b9150509250929050565b600060208284031215612ed657600080fd5b6000612ee484828501612c75565b91505092915050565b600060208284031215612eff57600080fd5b6000612f0d84828501612c8a565b91505092915050565b600060208284031215612f2857600080fd5b6000612f3684828501612c9f565b91505092915050565b600060208284031215612f5157600080fd5b600082013567ffffffffffffffff811115612f6b57600080fd5b612f7784828501612cde565b91505092915050565b600060208284031215612f9257600080fd5b6000612fa084828501612d08565b91505092915050565b6000612fb58383613926565b60208301905092915050565b612fca81613f4b565b82525050565b6000612fdb82613dca565b612fe58185613df8565b9350612ff083613dba565b8060005b838110156130215781516130088882612fa9565b975061301383613deb565b925050600181019050612ff4565b5085935050505092915050565b61303781613f5d565b82525050565b600061304882613dd5565b6130528185613e09565b9350613062818560208601613fce565b61306b81614169565b840191505092915050565b600061308182613de0565b61308b8185613e1a565b935061309b818560208601613fce565b6130a481614169565b840191505092915050565b60006130ba82613de0565b6130c48185613e2b565b93506130d4818560208601613fce565b80840191505092915050565b60006130ed600b83613e1a565b91507f53616c65207061757365640000000000000000000000000000000000000000006000830152602082019050919050565b600061312d602983613e1a565b91507f596f752063616e2061646f70742061206d6178696d756d206f6620313020447260008301527f65616d20446f67657300000000000000000000000000000000000000000000006020830152604082019050919050565b6000613193602b83613e1a565b91507f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008301527f74206f6620626f756e64730000000000000000000000000000000000000000006020830152604082019050919050565b60006131f9603283613e1a565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b600061325f602683613e1a565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006132c5601c83613e1a565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b6000613305602c83613e1a565b91507f4578636565647320726573657276656420447265616d20446f6765732067697660008301527f654177617920737570706c7900000000000000000000000000000000000000006020830152604082019050919050565b600061336b602483613e1a565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006133d1601983613e1a565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b6000613411602c83613e1a565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000613477603883613e1a565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b60006134dd602a83613e1a565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b6000613543602983613e1a565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b60006135a9602083613e1a565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b60006135e9602c83613e1a565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b600061364f602083613e1a565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b600061368f602983613e1a565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b60006136f5602f83613e1a565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b600061375b602283613e1a565b91507f45786365656473206d6178696d756d20447265616d20446f676573207375707060008301527f6c790000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006137c1602183613e1a565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613827601983613e1a565b91507f45746865722073656e74206973206e6f7420636f7272656374000000000000006000830152602082019050919050565b6000613867603183613e1a565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b60006138cd602c83613e1a565b91507f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008301527f7574206f6620626f756e647300000000000000000000000000000000000000006020830152604082019050919050565b61392f81613fb5565b82525050565b61393e81613fb5565b82525050565b600061395082856130af565b915061395c82846130af565b91508190509392505050565b600060208201905061397d6000830184612fc1565b92915050565b60006080820190506139986000830187612fc1565b6139a56020830186612fc1565b6139b26040830185613935565b81810360608301526139c4818461303d565b905095945050505050565b600060208201905081810360008301526139e98184612fd0565b905092915050565b6000602082019050613a06600083018461302e565b92915050565b60006020820190508181036000830152613a268184613076565b905092915050565b60006020820190508181036000830152613a47816130e0565b9050919050565b60006020820190508181036000830152613a6781613120565b9050919050565b60006020820190508181036000830152613a8781613186565b9050919050565b60006020820190508181036000830152613aa7816131ec565b9050919050565b60006020820190508181036000830152613ac781613252565b9050919050565b60006020820190508181036000830152613ae7816132b8565b9050919050565b60006020820190508181036000830152613b07816132f8565b9050919050565b60006020820190508181036000830152613b278161335e565b9050919050565b60006020820190508181036000830152613b47816133c4565b9050919050565b60006020820190508181036000830152613b6781613404565b9050919050565b60006020820190508181036000830152613b878161346a565b9050919050565b60006020820190508181036000830152613ba7816134d0565b9050919050565b60006020820190508181036000830152613bc781613536565b9050919050565b60006020820190508181036000830152613be78161359c565b9050919050565b60006020820190508181036000830152613c07816135dc565b9050919050565b60006020820190508181036000830152613c2781613642565b9050919050565b60006020820190508181036000830152613c4781613682565b9050919050565b60006020820190508181036000830152613c67816136e8565b9050919050565b60006020820190508181036000830152613c878161374e565b9050919050565b60006020820190508181036000830152613ca7816137b4565b9050919050565b60006020820190508181036000830152613cc78161381a565b9050919050565b60006020820190508181036000830152613ce78161385a565b9050919050565b60006020820190508181036000830152613d07816138c0565b9050919050565b6000602082019050613d236000830184613935565b92915050565b6000604051905081810181811067ffffffffffffffff82111715613d5057613d4f61413a565b5b8060405250919050565b600067ffffffffffffffff821115613d7557613d7461413a565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115613da557613da461413a565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613e4182613fb5565b9150613e4c83613fb5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613e8157613e806140ad565b5b828201905092915050565b6000613e9782613fb5565b9150613ea283613fb5565b925082613eb257613eb16140dc565b5b828204905092915050565b6000613ec882613fb5565b9150613ed383613fb5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613f0c57613f0b6140ad565b5b828202905092915050565b6000613f2282613fb5565b9150613f2d83613fb5565b925082821015613f4057613f3f6140ad565b5b828203905092915050565b6000613f5682613f95565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613fec578082015181840152602081019050613fd1565b83811115613ffb576000848401525b50505050565b6000600282049050600182168061401957607f821691505b6020821081141561402d5761402c61410b565b5b50919050565b600061403e82613fb5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614071576140706140ad565b5b600182019050919050565b600061408782613fb5565b915061409283613fb5565b9250826140a2576140a16140dc565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b61418381613f4b565b811461418e57600080fd5b50565b61419a81613f5d565b81146141a557600080fd5b50565b6141b181613f69565b81146141bc57600080fd5b50565b6141c881613fb5565b81146141d357600080fd5b5056fea2646970667358221220286e35c183f5b95f131b7c3e557bc727b14e0a7681b610ae0079bd59d20aca7f64736f6c63430008000033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004a68747470733a2f2f697066732e666c65656b2e636f2f697066732f516d595a6e705366615774717a716b685252634d6f7a475635356179574d68344c6f557750585a4e5557563642672f00000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : baseURI (string): https://ipfs.fleek.co/ipfs/QmYZnpSfaWtqzqkhRRcMozGV55ayWMh4LoUwPXZNUWV6Bg/

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 000000000000000000000000000000000000000000000000000000000000004a
Arg [2] : 68747470733a2f2f697066732e666c65656b2e636f2f697066732f516d595a6e
Arg [3] : 705366615774717a716b685252634d6f7a475635356179574d68344c6f557750
Arg [4] : 585a4e5557563642672f00000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

43347:2686:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34850:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45639:74;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21738:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23297:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22820:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43581:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35490:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24187:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35158:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24597:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44519:342;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35680:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45092:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21432:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21162:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42647:94;;;;;;;;;;;;;:::i;:::-;;45721:309;;;;;;;;;;;;;:::i;:::-;;44010:495;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41996:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44869:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21907:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45202:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23590:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24853:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22082:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45291:340;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23956:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42896:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34850:224;34952:4;34991:35;34976:50;;;:11;:50;;;;:90;;;;35030:36;35054:11;35030:23;:36::i;:::-;34976:90;34969:97;;34850:224;;;:::o;45639:74::-;42227:12;:10;:12::i;:::-;42216:23;;:7;:5;:7::i;:::-;:23;;;42208:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45702:3:::1;45692:7;;:13;;;;;;;;;;;;;;;;;;45639:74:::0;:::o;21738:100::-;21792:13;21825:5;21818:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21738:100;:::o;23297:221::-;23373:7;23401:16;23409:7;23401;:16::i;:::-;23393:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23486:15;:24;23502:7;23486:24;;;;;;;;;;;;;;;;;;;;;23479:31;;23297:221;;;:::o;22820:411::-;22901:13;22917:23;22932:7;22917:14;:23::i;:::-;22901:39;;22965:5;22959:11;;:2;:11;;;;22951:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;23059:5;23043:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;23068:37;23085:5;23092:12;:10;:12::i;:::-;23068:16;:37::i;:::-;23043:62;23021:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;23202:21;23211:2;23215:7;23202:8;:21::i;:::-;22820:411;;;:::o;43581:26::-;;;;;;;;;;;;;:::o;35490:113::-;35551:7;35578:10;:17;;;;35571:24;;35490:113;:::o;24187:339::-;24382:41;24401:12;:10;:12::i;:::-;24415:7;24382:18;:41::i;:::-;24374:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24490:28;24500:4;24506:2;24510:7;24490:9;:28::i;:::-;24187:339;;;:::o;35158:256::-;35255:7;35291:23;35308:5;35291:16;:23::i;:::-;35283:5;:31;35275:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;35380:12;:19;35393:5;35380:19;;;;;;;;;;;;;;;:26;35400:5;35380:26;;;;;;;;;;;;35373:33;;35158:256;;;;:::o;24597:185::-;24735:39;24752:4;24758:2;24762:7;24735:39;;;;;;;;;;;;:16;:39::i;:::-;24597:185;;;:::o;44519:342::-;44578:16;44607:18;44628:17;44638:6;44628:9;:17::i;:::-;44607:38;;44658:25;44700:10;44686:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44658:53;;44726:9;44722:106;44741:10;44737:1;:14;44722:106;;;44786:30;44806:6;44814:1;44786:19;:30::i;:::-;44772:8;44781:1;44772:11;;;;;;;;;;;;;;;;;;;;;:44;;;;;44753:3;;;;;:::i;:::-;;;;44722:106;;;;44845:8;44838:15;;;;44519:342;;;:::o;35680:233::-;35755:7;35791:30;:28;:30::i;:::-;35783:5;:38;35775:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;35888:10;35899:5;35888:17;;;;;;;;;;;;;;;;;;;;;;;;35881:24;;35680:233;;;:::o;45092:102::-;42227:12;:10;:12::i;:::-;42216:23;;:7;:5;:7::i;:::-;:23;;;42208:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45179:7:::1;45163:13;:23;;;;;;;;;;;;:::i;:::-;;45092:102:::0;:::o;21432:239::-;21504:7;21524:13;21540:7;:16;21548:7;21540:16;;;;;;;;;;;;;;;;;;;;;21524:32;;21592:1;21575:19;;:5;:19;;;;21567:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;21658:5;21651:12;;;21432:239;;;:::o;21162:208::-;21234:7;21279:1;21262:19;;:5;:19;;;;21254:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;21346:9;:16;21356:5;21346:16;;;;;;;;;;;;;;;;21339:23;;21162:208;;;:::o;42647:94::-;42227:12;:10;:12::i;:::-;42216:23;;:7;:5;:7::i;:::-;:23;;;42208:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42712:21:::1;42730:1;42712:9;:21::i;:::-;42647:94::o:0;45721:309::-;42227:12;:10;:12::i;:::-;42216:23;;:7;:5;:7::i;:::-;:23;;;42208:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45772:16:::1;45815:3;45791:21;:27;;;;:::i;:::-;45772:46;;45845:2;;;;;;;;;;;45837:16;;:31;45865:2;45854:8;:13;;;;:::i;:::-;45837:31;;;;;;;;;;;;;;;;;;;;;;;45829:40;;;::::0;::::1;;45896:2;;;;;;;;;;;45888:16;;:31;45916:2;45905:8;:13;;;;:::i;:::-;45888:31;;;;;;;;;;;;;;;;;;;;;;;45880:40;;;::::0;::::1;;45947:2;;;;;;;;;;;45939:16;;:31;45967:2;45956:8;:13;;;;:::i;:::-;45939:31;;;;;;;;;;;;;;;;;;;;;;;45931:40;;;::::0;::::1;;45998:2;;;;;;;;;;;45990:16;;:31;46018:2;46007:8;:13;;;;:::i;:::-;45990:31;;;;;;;;;;;;;;;;;;;;;;;45982:40;;;::::0;::::1;;42287:1;45721:309::o:0;44010:495::-;44064:14;44081:13;:11;:13::i;:::-;44064:30;;44115:7;;;;;;;;;;;44114:8;44105:34;;;;;;;;;;;;:::i;:::-;;;;;;;;;44165:2;44159:3;:8;44150:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;44258:9;;44249:6;;:18;;;;:::i;:::-;44243:3;44234:6;:12;;;;:::i;:::-;:33;44225:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;44349:3;44340:6;;:12;;;;:::i;:::-;44327:9;:25;;44318:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;44400:9;44396:102;44415:3;44411:1;:7;44396:102;;;44451:35;44462:10;44483:1;44474:6;:10;;;;:::i;:::-;44451:9;:35::i;:::-;44420:3;;;;;:::i;:::-;;;;44396:102;;;;44010:495;;:::o;41996:87::-;42042:7;42069:6;;;;;;;;;;;42062:13;;41996:87;:::o;44869:93::-;42227:12;:10;:12::i;:::-;42216:23;;:7;:5;:7::i;:::-;:23;;;42208:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44945:9:::1;44936:6;:18;;;;44869:93:::0;:::o;21907:104::-;21963:13;21996:7;21989:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21907:104;:::o;45202:81::-;45243:7;45269:6;;45262:13;;45202:81;:::o;23590:295::-;23705:12;:10;:12::i;:::-;23693:24;;:8;:24;;;;23685:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;23805:8;23760:18;:32;23779:12;:10;:12::i;:::-;23760:32;;;;;;;;;;;;;;;:42;23793:8;23760:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;23858:8;23829:48;;23844:12;:10;:12::i;:::-;23829:48;;;23868:8;23829:48;;;;;;:::i;:::-;;;;;;;;23590:295;;:::o;24853:328::-;25028:41;25047:12;:10;:12::i;:::-;25061:7;25028:18;:41::i;:::-;25020:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25134:39;25148:4;25154:2;25158:7;25167:5;25134:13;:39::i;:::-;24853:328;;;;:::o;22082:334::-;22155:13;22189:16;22197:7;22189;:16::i;:::-;22181:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;22270:21;22294:10;:8;:10::i;:::-;22270:34;;22346:1;22328:7;22322:21;:25;:86;;;;;;;;;;;;;;;;;22374:7;22383:18;:7;:16;:18::i;:::-;22357:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;22322:86;22315:93;;;22082:334;;;:::o;45291:340::-;42227:12;:10;:12::i;:::-;42216:23;;:7;:5;:7::i;:::-;:23;;;42208:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45391:9:::1;;45380:7;:20;;45371:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;45463:14;45480:13;:11;:13::i;:::-;45463:30;;45508:9;45504:87;45523:7;45519:1;:11;45504:87;;;45551:28;45562:3;45576:1;45567:6;:10;;;;:::i;:::-;45551:9;:28::i;:::-;45532:3;;;;;:::i;:::-;;;;45504:87;;;;45616:7;45603:9;;:20;;;;;;;:::i;:::-;;;;;;;;42287:1;45291:340:::0;;:::o;23956:164::-;24053:4;24077:18;:25;24096:5;24077:25;;;;;;;;;;;;;;;:35;24103:8;24077:35;;;;;;;;;;;;;;;;;;;;;;;;;24070:42;;23956:164;;;;:::o;42896:192::-;42227:12;:10;:12::i;:::-;42216:23;;:7;:5;:7::i;:::-;:23;;;42208:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43005:1:::1;42985:22;;:8;:22;;;;42977:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;43061:19;43071:8;43061:9;:19::i;:::-;42896:192:::0;:::o;8207:387::-;8267:4;8475:12;8542:7;8530:20;8522:28;;8585:1;8578:4;:8;8571:15;;;8207:387;;;:::o;32783:126::-;;;;:::o;20793:305::-;20895:4;20947:25;20932:40;;;:11;:40;;;;:105;;;;21004:33;20989:48;;;:11;:48;;;;20932:105;:158;;;;21054:36;21078:11;21054:23;:36::i;:::-;20932:158;20912:178;;20793:305;;;:::o;16176:98::-;16229:7;16256:10;16249:17;;16176:98;:::o;26691:127::-;26756:4;26808:1;26780:30;;:7;:16;26788:7;26780:16;;;;;;;;;;;;;;;;;;;;;:30;;;;26773:37;;26691:127;;;:::o;30673:174::-;30775:2;30748:15;:24;30764:7;30748:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;30831:7;30827:2;30793:46;;30802:23;30817:7;30802:14;:23::i;:::-;30793:46;;;;;;;;;;;;30673:174;;:::o;26985:348::-;27078:4;27103:16;27111:7;27103;:16::i;:::-;27095:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27179:13;27195:23;27210:7;27195:14;:23::i;:::-;27179:39;;27248:5;27237:16;;:7;:16;;;:51;;;;27281:7;27257:31;;:20;27269:7;27257:11;:20::i;:::-;:31;;;27237:51;:87;;;;27292:32;27309:5;27316:7;27292:16;:32::i;:::-;27237:87;27229:96;;;26985:348;;;;:::o;29977:578::-;30136:4;30109:31;;:23;30124:7;30109:14;:23::i;:::-;:31;;;30101:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;30219:1;30205:16;;:2;:16;;;;30197:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;30275:39;30296:4;30302:2;30306:7;30275:20;:39::i;:::-;30379:29;30396:1;30400:7;30379:8;:29::i;:::-;30440:1;30421:9;:15;30431:4;30421:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;30469:1;30452:9;:13;30462:2;30452:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30500:2;30481:7;:16;30489:7;30481:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30539:7;30535:2;30520:27;;30529:4;30520:27;;;;;;;;;;;;29977:578;;;:::o;43096:173::-;43152:16;43171:6;;;;;;;;;;;43152:25;;43197:8;43188:6;;:17;;;;;;;;;;;;;;;;;;43252:8;43221:40;;43242:8;43221:40;;;;;;;;;;;;43096:173;;:::o;27675:110::-;27751:26;27761:2;27765:7;27751:26;;;;;;;;;;;;:9;:26::i;:::-;27675:110;;:::o;26063:315::-;26220:28;26230:4;26236:2;26240:7;26220:9;:28::i;:::-;26267:48;26290:4;26296:2;26300:7;26309:5;26267:22;:48::i;:::-;26259:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;26063:315;;;;:::o;44970:114::-;45030:13;45063;45056:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44970:114;:::o;16714:723::-;16770:13;17000:1;16991:5;:10;16987:53;;;17018:10;;;;;;;;;;;;;;;;;;;;;16987:53;17050:12;17065:5;17050:20;;17081:14;17106:78;17121:1;17113:4;:9;17106:78;;17139:8;;;;;:::i;:::-;;;;17170:2;17162:10;;;;;:::i;:::-;;;17106:78;;;17194:19;17226:6;17216:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17194:39;;17244:154;17260:1;17251:5;:10;17244:154;;17288:1;17278:11;;;;;:::i;:::-;;;17355:2;17347:5;:10;;;;:::i;:::-;17334:2;:24;;;;:::i;:::-;17321:39;;17304:6;17311;17304:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;17384:2;17375:11;;;;;:::i;:::-;;;17244:154;;;17422:6;17408:21;;;;;16714:723;;;;:::o;19284:157::-;19369:4;19408:25;19393:40;;;:11;:40;;;;19386:47;;19284:157;;;:::o;36526:589::-;36670:45;36697:4;36703:2;36707:7;36670:26;:45::i;:::-;36748:1;36732:18;;:4;:18;;;36728:187;;;36767:40;36799:7;36767:31;:40::i;:::-;36728:187;;;36837:2;36829:10;;:4;:10;;;36825:90;;36856:47;36889:4;36895:7;36856:32;:47::i;:::-;36825:90;36728:187;36943:1;36929:16;;:2;:16;;;36925:183;;;36962:45;36999:7;36962:36;:45::i;:::-;36925:183;;;37035:4;37029:10;;:2;:10;;;37025:83;;37056:40;37084:2;37088:7;37056:27;:40::i;:::-;37025:83;36925:183;36526:589;;;:::o;28012:321::-;28142:18;28148:2;28152:7;28142:5;:18::i;:::-;28193:54;28224:1;28228:2;28232:7;28241:5;28193:22;:54::i;:::-;28171:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;28012:321;;;:::o;31412:799::-;31567:4;31588:15;:2;:13;;;:15::i;:::-;31584:620;;;31640:2;31624:36;;;31661:12;:10;:12::i;:::-;31675:4;31681:7;31690:5;31624:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;31620:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31883:1;31866:6;:13;:18;31862:272;;;31909:60;;;;;;;;;;:::i;:::-;;;;;;;;31862:272;32084:6;32078:13;32069:6;32065:2;32061:15;32054:38;31620:529;31757:41;;;31747:51;;;:6;:51;;;;31740:58;;;;;31584:620;32188:4;32181:11;;31412:799;;;;;;;:::o;37838:164::-;37942:10;:17;;;;37915:15;:24;37931:7;37915:24;;;;;;;;;;;:44;;;;37970:10;37986:7;37970:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37838:164;:::o;38629:988::-;38895:22;38945:1;38920:22;38937:4;38920:16;:22::i;:::-;:26;;;;:::i;:::-;38895:51;;38957:18;38978:17;:26;38996:7;38978:26;;;;;;;;;;;;38957:47;;39125:14;39111:10;:28;39107:328;;39156:19;39178:12;:18;39191:4;39178:18;;;;;;;;;;;;;;;:34;39197:14;39178:34;;;;;;;;;;;;39156:56;;39262:11;39229:12;:18;39242:4;39229:18;;;;;;;;;;;;;;;:30;39248:10;39229:30;;;;;;;;;;;:44;;;;39379:10;39346:17;:30;39364:11;39346:30;;;;;;;;;;;:43;;;;39107:328;;39531:17;:26;39549:7;39531:26;;;;;;;;;;;39524:33;;;39575:12;:18;39588:4;39575:18;;;;;;;;;;;;;;;:34;39594:14;39575:34;;;;;;;;;;;39568:41;;;38629:988;;;;:::o;39912:1079::-;40165:22;40210:1;40190:10;:17;;;;:21;;;;:::i;:::-;40165:46;;40222:18;40243:15;:24;40259:7;40243:24;;;;;;;;;;;;40222:45;;40594:19;40616:10;40627:14;40616:26;;;;;;;;;;;;;;;;;;;;;;;;40594:48;;40680:11;40655:10;40666;40655:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;40791:10;40760:15;:28;40776:11;40760:28;;;;;;;;;;;:41;;;;40932:15;:24;40948:7;40932:24;;;;;;;;;;;40925:31;;;40967:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39912:1079;;;;:::o;37416:221::-;37501:14;37518:20;37535:2;37518:16;:20::i;:::-;37501:37;;37576:7;37549:12;:16;37562:2;37549:16;;;;;;;;;;;;;;;:24;37566:6;37549:24;;;;;;;;;;;:34;;;;37623:6;37594:17;:26;37612:7;37594:26;;;;;;;;;;;:35;;;;37416:221;;;:::o;28669:382::-;28763:1;28749:16;;:2;:16;;;;28741:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;28822:16;28830:7;28822;:16::i;:::-;28821:17;28813:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;28884:45;28913:1;28917:2;28921:7;28884:20;:45::i;:::-;28959:1;28942:9;:13;28952:2;28942:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;28990:2;28971:7;:16;28979:7;28971:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29035:7;29031:2;29010:33;;29027:1;29010:33;;;;;;;;;;;;28669:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:342:1:-;;109:64;124:48;165:6;124:48;:::i;:::-;109:64;:::i;:::-;100:73;;196:6;189:5;182:21;234:4;227:5;223:16;272:3;263:6;258:3;254:16;251:25;248:2;;;289:1;286;279:12;248:2;302:41;336:6;331:3;326;302:41;:::i;:::-;90:259;;;;;;:::o;355:344::-;;458:65;473:49;515:6;473:49;:::i;:::-;458:65;:::i;:::-;449:74;;546:6;539:5;532:21;584:4;577:5;573:16;622:3;613:6;608:3;604:16;601:25;598:2;;;639:1;636;629:12;598:2;652:41;686:6;681:3;676;652:41;:::i;:::-;439:260;;;;;;:::o;705:139::-;;789:6;776:20;767:29;;805:33;832:5;805:33;:::i;:::-;757:87;;;;:::o;850:133::-;;931:6;918:20;909:29;;947:30;971:5;947:30;:::i;:::-;899:84;;;;:::o;989:137::-;;1072:6;1059:20;1050:29;;1088:32;1114:5;1088:32;:::i;:::-;1040:86;;;;:::o;1132:141::-;;1219:6;1213:13;1204:22;;1235:32;1261:5;1235:32;:::i;:::-;1194:79;;;;:::o;1292:271::-;;1396:3;1389:4;1381:6;1377:17;1373:27;1363:2;;1414:1;1411;1404:12;1363:2;1454:6;1441:20;1479:78;1553:3;1545:6;1538:4;1530:6;1526:17;1479:78;:::i;:::-;1470:87;;1353:210;;;;;:::o;1583:273::-;;1688:3;1681:4;1673:6;1669:17;1665:27;1655:2;;1706:1;1703;1696:12;1655:2;1746:6;1733:20;1771:79;1846:3;1838:6;1831:4;1823:6;1819:17;1771:79;:::i;:::-;1762:88;;1645:211;;;;;:::o;1862:139::-;;1946:6;1933:20;1924:29;;1962:33;1989:5;1962:33;:::i;:::-;1914:87;;;;:::o;2007:262::-;;2115:2;2103:9;2094:7;2090:23;2086:32;2083:2;;;2131:1;2128;2121:12;2083:2;2174:1;2199:53;2244:7;2235:6;2224:9;2220:22;2199:53;:::i;:::-;2189:63;;2145:117;2073:196;;;;:::o;2275:407::-;;;2400:2;2388:9;2379:7;2375:23;2371:32;2368:2;;;2416:1;2413;2406:12;2368:2;2459:1;2484:53;2529:7;2520:6;2509:9;2505:22;2484:53;:::i;:::-;2474:63;;2430:117;2586:2;2612:53;2657:7;2648:6;2637:9;2633:22;2612:53;:::i;:::-;2602:63;;2557:118;2358:324;;;;;:::o;2688:552::-;;;;2830:2;2818:9;2809:7;2805:23;2801:32;2798:2;;;2846:1;2843;2836:12;2798:2;2889:1;2914:53;2959:7;2950:6;2939:9;2935:22;2914:53;:::i;:::-;2904:63;;2860:117;3016:2;3042:53;3087:7;3078:6;3067:9;3063:22;3042:53;:::i;:::-;3032:63;;2987:118;3144:2;3170:53;3215:7;3206:6;3195:9;3191:22;3170:53;:::i;:::-;3160:63;;3115:118;2788:452;;;;;:::o;3246:809::-;;;;;3414:3;3402:9;3393:7;3389:23;3385:33;3382:2;;;3431:1;3428;3421:12;3382:2;3474:1;3499:53;3544:7;3535:6;3524:9;3520:22;3499:53;:::i;:::-;3489:63;;3445:117;3601:2;3627:53;3672:7;3663:6;3652:9;3648:22;3627:53;:::i;:::-;3617:63;;3572:118;3729:2;3755:53;3800:7;3791:6;3780:9;3776:22;3755:53;:::i;:::-;3745:63;;3700:118;3885:2;3874:9;3870:18;3857:32;3916:18;3908:6;3905:30;3902:2;;;3948:1;3945;3938:12;3902:2;3976:62;4030:7;4021:6;4010:9;4006:22;3976:62;:::i;:::-;3966:72;;3828:220;3372:683;;;;;;;:::o;4061:401::-;;;4183:2;4171:9;4162:7;4158:23;4154:32;4151:2;;;4199:1;4196;4189:12;4151:2;4242:1;4267:53;4312:7;4303:6;4292:9;4288:22;4267:53;:::i;:::-;4257:63;;4213:117;4369:2;4395:50;4437:7;4428:6;4417:9;4413:22;4395:50;:::i;:::-;4385:60;;4340:115;4141:321;;;;;:::o;4468:407::-;;;4593:2;4581:9;4572:7;4568:23;4564:32;4561:2;;;4609:1;4606;4599:12;4561:2;4652:1;4677:53;4722:7;4713:6;4702:9;4698:22;4677:53;:::i;:::-;4667:63;;4623:117;4779:2;4805:53;4850:7;4841:6;4830:9;4826:22;4805:53;:::i;:::-;4795:63;;4750:118;4551:324;;;;;:::o;4881:256::-;;4986:2;4974:9;4965:7;4961:23;4957:32;4954:2;;;5002:1;4999;4992:12;4954:2;5045:1;5070:50;5112:7;5103:6;5092:9;5088:22;5070:50;:::i;:::-;5060:60;;5016:114;4944:193;;;;:::o;5143:260::-;;5250:2;5238:9;5229:7;5225:23;5221:32;5218:2;;;5266:1;5263;5256:12;5218:2;5309:1;5334:52;5378:7;5369:6;5358:9;5354:22;5334:52;:::i;:::-;5324:62;;5280:116;5208:195;;;;:::o;5409:282::-;;5527:2;5515:9;5506:7;5502:23;5498:32;5495:2;;;5543:1;5540;5533:12;5495:2;5586:1;5611:63;5666:7;5657:6;5646:9;5642:22;5611:63;:::i;:::-;5601:73;;5557:127;5485:206;;;;:::o;5697:375::-;;5815:2;5803:9;5794:7;5790:23;5786:32;5783:2;;;5831:1;5828;5821:12;5783:2;5902:1;5891:9;5887:17;5874:31;5932:18;5924:6;5921:30;5918:2;;;5964:1;5961;5954:12;5918:2;5992:63;6047:7;6038:6;6027:9;6023:22;5992:63;:::i;:::-;5982:73;;5845:220;5773:299;;;;:::o;6078:262::-;;6186:2;6174:9;6165:7;6161:23;6157:32;6154:2;;;6202:1;6199;6192:12;6154:2;6245:1;6270:53;6315:7;6306:6;6295:9;6291:22;6270:53;:::i;:::-;6260:63;;6216:117;6144:196;;;;:::o;6346:179::-;;6436:46;6478:3;6470:6;6436:46;:::i;:::-;6514:4;6509:3;6505:14;6491:28;;6426:99;;;;:::o;6531:118::-;6618:24;6636:5;6618:24;:::i;:::-;6613:3;6606:37;6596:53;;:::o;6685:732::-;;6833:54;6881:5;6833:54;:::i;:::-;6903:86;6982:6;6977:3;6903:86;:::i;:::-;6896:93;;7013:56;7063:5;7013:56;:::i;:::-;7092:7;7123:1;7108:284;7133:6;7130:1;7127:13;7108:284;;;7209:6;7203:13;7236:63;7295:3;7280:13;7236:63;:::i;:::-;7229:70;;7322:60;7375:6;7322:60;:::i;:::-;7312:70;;7168:224;7155:1;7152;7148:9;7143:14;;7108:284;;;7112:14;7408:3;7401:10;;6809:608;;;;;;;:::o;7423:109::-;7504:21;7519:5;7504:21;:::i;:::-;7499:3;7492:34;7482:50;;:::o;7538:360::-;;7652:38;7684:5;7652:38;:::i;:::-;7706:70;7769:6;7764:3;7706:70;:::i;:::-;7699:77;;7785:52;7830:6;7825:3;7818:4;7811:5;7807:16;7785:52;:::i;:::-;7862:29;7884:6;7862:29;:::i;:::-;7857:3;7853:39;7846:46;;7628:270;;;;;:::o;7904:364::-;;8020:39;8053:5;8020:39;:::i;:::-;8075:71;8139:6;8134:3;8075:71;:::i;:::-;8068:78;;8155:52;8200:6;8195:3;8188:4;8181:5;8177:16;8155:52;:::i;:::-;8232:29;8254:6;8232:29;:::i;:::-;8227:3;8223:39;8216:46;;7996:272;;;;;:::o;8274:377::-;;8408:39;8441:5;8408:39;:::i;:::-;8463:89;8545:6;8540:3;8463:89;:::i;:::-;8456:96;;8561:52;8606:6;8601:3;8594:4;8587:5;8583:16;8561:52;:::i;:::-;8638:6;8633:3;8629:16;8622:23;;8384:267;;;;;:::o;8657:309::-;;8820:67;8884:2;8879:3;8820:67;:::i;:::-;8813:74;;8917:13;8913:1;8908:3;8904:11;8897:34;8957:2;8952:3;8948:12;8941:19;;8803:163;;;:::o;8972:373::-;;9135:67;9199:2;9194:3;9135:67;:::i;:::-;9128:74;;9232:34;9228:1;9223:3;9219:11;9212:55;9298:11;9293:2;9288:3;9284:12;9277:33;9336:2;9331:3;9327:12;9320:19;;9118:227;;;:::o;9351:375::-;;9514:67;9578:2;9573:3;9514:67;:::i;:::-;9507:74;;9611:34;9607:1;9602:3;9598:11;9591:55;9677:13;9672:2;9667:3;9663:12;9656:35;9717:2;9712:3;9708:12;9701:19;;9497:229;;;:::o;9732:382::-;;9895:67;9959:2;9954:3;9895:67;:::i;:::-;9888:74;;9992:34;9988:1;9983:3;9979:11;9972:55;10058:20;10053:2;10048:3;10044:12;10037:42;10105:2;10100:3;10096:12;10089:19;;9878:236;;;:::o;10120:370::-;;10283:67;10347:2;10342:3;10283:67;:::i;:::-;10276:74;;10380:34;10376:1;10371:3;10367:11;10360:55;10446:8;10441:2;10436:3;10432:12;10425:30;10481:2;10476:3;10472:12;10465:19;;10266:224;;;:::o;10496:326::-;;10659:67;10723:2;10718:3;10659:67;:::i;:::-;10652:74;;10756:30;10752:1;10747:3;10743:11;10736:51;10813:2;10808:3;10804:12;10797:19;;10642:180;;;:::o;10828:376::-;;10991:67;11055:2;11050:3;10991:67;:::i;:::-;10984:74;;11088:34;11084:1;11079:3;11075:11;11068:55;11154:14;11149:2;11144:3;11140:12;11133:36;11195:2;11190:3;11186:12;11179:19;;10974:230;;;:::o;11210:368::-;;11373:67;11437:2;11432:3;11373:67;:::i;:::-;11366:74;;11470:34;11466:1;11461:3;11457:11;11450:55;11536:6;11531:2;11526:3;11522:12;11515:28;11569:2;11564:3;11560:12;11553:19;;11356:222;;;:::o;11584:323::-;;11747:67;11811:2;11806:3;11747:67;:::i;:::-;11740:74;;11844:27;11840:1;11835:3;11831:11;11824:48;11898:2;11893:3;11889:12;11882:19;;11730:177;;;:::o;11913:376::-;;12076:67;12140:2;12135:3;12076:67;:::i;:::-;12069:74;;12173:34;12169:1;12164:3;12160:11;12153:55;12239:14;12234:2;12229:3;12225:12;12218:36;12280:2;12275:3;12271:12;12264:19;;12059:230;;;:::o;12295:388::-;;12458:67;12522:2;12517:3;12458:67;:::i;:::-;12451:74;;12555:34;12551:1;12546:3;12542:11;12535:55;12621:26;12616:2;12611:3;12607:12;12600:48;12674:2;12669:3;12665:12;12658:19;;12441:242;;;:::o;12689:374::-;;12852:67;12916:2;12911:3;12852:67;:::i;:::-;12845:74;;12949:34;12945:1;12940:3;12936:11;12929:55;13015:12;13010:2;13005:3;13001:12;12994:34;13054:2;13049:3;13045:12;13038:19;;12835:228;;;:::o;13069:373::-;;13232:67;13296:2;13291:3;13232:67;:::i;:::-;13225:74;;13329:34;13325:1;13320:3;13316:11;13309:55;13395:11;13390:2;13385:3;13381:12;13374:33;13433:2;13428:3;13424:12;13417:19;;13215:227;;;:::o;13448:330::-;;13611:67;13675:2;13670:3;13611:67;:::i;:::-;13604:74;;13708:34;13704:1;13699:3;13695:11;13688:55;13769:2;13764:3;13760:12;13753:19;;13594:184;;;:::o;13784:376::-;;13947:67;14011:2;14006:3;13947:67;:::i;:::-;13940:74;;14044:34;14040:1;14035:3;14031:11;14024:55;14110:14;14105:2;14100:3;14096:12;14089:36;14151:2;14146:3;14142:12;14135:19;;13930:230;;;:::o;14166:330::-;;14329:67;14393:2;14388:3;14329:67;:::i;:::-;14322:74;;14426:34;14422:1;14417:3;14413:11;14406:55;14487:2;14482:3;14478:12;14471:19;;14312:184;;;:::o;14502:373::-;;14665:67;14729:2;14724:3;14665:67;:::i;:::-;14658:74;;14762:34;14758:1;14753:3;14749:11;14742:55;14828:11;14823:2;14818:3;14814:12;14807:33;14866:2;14861:3;14857:12;14850:19;;14648:227;;;:::o;14881:379::-;;15044:67;15108:2;15103:3;15044:67;:::i;:::-;15037:74;;15141:34;15137:1;15132:3;15128:11;15121:55;15207:17;15202:2;15197:3;15193:12;15186:39;15251:2;15246:3;15242:12;15235:19;;15027:233;;;:::o;15266:366::-;;15429:67;15493:2;15488:3;15429:67;:::i;:::-;15422:74;;15526:34;15522:1;15517:3;15513:11;15506:55;15592:4;15587:2;15582:3;15578:12;15571:26;15623:2;15618:3;15614:12;15607:19;;15412:220;;;:::o;15638:365::-;;15801:67;15865:2;15860:3;15801:67;:::i;:::-;15794:74;;15898:34;15894:1;15889:3;15885:11;15878:55;15964:3;15959:2;15954:3;15950:12;15943:25;15994:2;15989:3;15985:12;15978:19;;15784:219;;;:::o;16009:323::-;;16172:67;16236:2;16231:3;16172:67;:::i;:::-;16165:74;;16269:27;16265:1;16260:3;16256:11;16249:48;16323:2;16318:3;16314:12;16307:19;;16155:177;;;:::o;16338:381::-;;16501:67;16565:2;16560:3;16501:67;:::i;:::-;16494:74;;16598:34;16594:1;16589:3;16585:11;16578:55;16664:19;16659:2;16654:3;16650:12;16643:41;16710:2;16705:3;16701:12;16694:19;;16484:235;;;:::o;16725:376::-;;16888:67;16952:2;16947:3;16888:67;:::i;:::-;16881:74;;16985:34;16981:1;16976:3;16972:11;16965:55;17051:14;17046:2;17041:3;17037:12;17030:36;17092:2;17087:3;17083:12;17076:19;;16871:230;;;:::o;17107:108::-;17184:24;17202:5;17184:24;:::i;:::-;17179:3;17172:37;17162:53;;:::o;17221:118::-;17308:24;17326:5;17308:24;:::i;:::-;17303:3;17296:37;17286:53;;:::o;17345:435::-;;17547:95;17638:3;17629:6;17547:95;:::i;:::-;17540:102;;17659:95;17750:3;17741:6;17659:95;:::i;:::-;17652:102;;17771:3;17764:10;;17529:251;;;;;:::o;17786:222::-;;17917:2;17906:9;17902:18;17894:26;;17930:71;17998:1;17987:9;17983:17;17974:6;17930:71;:::i;:::-;17884:124;;;;:::o;18014:640::-;;18247:3;18236:9;18232:19;18224:27;;18261:71;18329:1;18318:9;18314:17;18305:6;18261:71;:::i;:::-;18342:72;18410:2;18399:9;18395:18;18386:6;18342:72;:::i;:::-;18424;18492:2;18481:9;18477:18;18468:6;18424:72;:::i;:::-;18543:9;18537:4;18533:20;18528:2;18517:9;18513:18;18506:48;18571:76;18642:4;18633:6;18571:76;:::i;:::-;18563:84;;18214:440;;;;;;;:::o;18660:373::-;;18841:2;18830:9;18826:18;18818:26;;18890:9;18884:4;18880:20;18876:1;18865:9;18861:17;18854:47;18918:108;19021:4;19012:6;18918:108;:::i;:::-;18910:116;;18808:225;;;;:::o;19039:210::-;;19164:2;19153:9;19149:18;19141:26;;19177:65;19239:1;19228:9;19224:17;19215:6;19177:65;:::i;:::-;19131:118;;;;:::o;19255:313::-;;19406:2;19395:9;19391:18;19383:26;;19455:9;19449:4;19445:20;19441:1;19430:9;19426:17;19419:47;19483:78;19556:4;19547:6;19483:78;:::i;:::-;19475:86;;19373:195;;;;:::o;19574:419::-;;19778:2;19767:9;19763:18;19755:26;;19827:9;19821:4;19817:20;19813:1;19802:9;19798:17;19791:47;19855:131;19981:4;19855:131;:::i;:::-;19847:139;;19745:248;;;:::o;19999:419::-;;20203:2;20192:9;20188:18;20180:26;;20252:9;20246:4;20242:20;20238:1;20227:9;20223:17;20216:47;20280:131;20406:4;20280:131;:::i;:::-;20272:139;;20170:248;;;:::o;20424:419::-;;20628:2;20617:9;20613:18;20605:26;;20677:9;20671:4;20667:20;20663:1;20652:9;20648:17;20641:47;20705:131;20831:4;20705:131;:::i;:::-;20697:139;;20595:248;;;:::o;20849:419::-;;21053:2;21042:9;21038:18;21030:26;;21102:9;21096:4;21092:20;21088:1;21077:9;21073:17;21066:47;21130:131;21256:4;21130:131;:::i;:::-;21122:139;;21020:248;;;:::o;21274:419::-;;21478:2;21467:9;21463:18;21455:26;;21527:9;21521:4;21517:20;21513:1;21502:9;21498:17;21491:47;21555:131;21681:4;21555:131;:::i;:::-;21547:139;;21445:248;;;:::o;21699:419::-;;21903:2;21892:9;21888:18;21880:26;;21952:9;21946:4;21942:20;21938:1;21927:9;21923:17;21916:47;21980:131;22106:4;21980:131;:::i;:::-;21972:139;;21870:248;;;:::o;22124:419::-;;22328:2;22317:9;22313:18;22305:26;;22377:9;22371:4;22367:20;22363:1;22352:9;22348:17;22341:47;22405:131;22531:4;22405:131;:::i;:::-;22397:139;;22295:248;;;:::o;22549:419::-;;22753:2;22742:9;22738:18;22730:26;;22802:9;22796:4;22792:20;22788:1;22777:9;22773:17;22766:47;22830:131;22956:4;22830:131;:::i;:::-;22822:139;;22720:248;;;:::o;22974:419::-;;23178:2;23167:9;23163:18;23155:26;;23227:9;23221:4;23217:20;23213:1;23202:9;23198:17;23191:47;23255:131;23381:4;23255:131;:::i;:::-;23247:139;;23145:248;;;:::o;23399:419::-;;23603:2;23592:9;23588:18;23580:26;;23652:9;23646:4;23642:20;23638:1;23627:9;23623:17;23616:47;23680:131;23806:4;23680:131;:::i;:::-;23672:139;;23570:248;;;:::o;23824:419::-;;24028:2;24017:9;24013:18;24005:26;;24077:9;24071:4;24067:20;24063:1;24052:9;24048:17;24041:47;24105:131;24231:4;24105:131;:::i;:::-;24097:139;;23995:248;;;:::o;24249:419::-;;24453:2;24442:9;24438:18;24430:26;;24502:9;24496:4;24492:20;24488:1;24477:9;24473:17;24466:47;24530:131;24656:4;24530:131;:::i;:::-;24522:139;;24420:248;;;:::o;24674:419::-;;24878:2;24867:9;24863:18;24855:26;;24927:9;24921:4;24917:20;24913:1;24902:9;24898:17;24891:47;24955:131;25081:4;24955:131;:::i;:::-;24947:139;;24845:248;;;:::o;25099:419::-;;25303:2;25292:9;25288:18;25280:26;;25352:9;25346:4;25342:20;25338:1;25327:9;25323:17;25316:47;25380:131;25506:4;25380:131;:::i;:::-;25372:139;;25270:248;;;:::o;25524:419::-;;25728:2;25717:9;25713:18;25705:26;;25777:9;25771:4;25767:20;25763:1;25752:9;25748:17;25741:47;25805:131;25931:4;25805:131;:::i;:::-;25797:139;;25695:248;;;:::o;25949:419::-;;26153:2;26142:9;26138:18;26130:26;;26202:9;26196:4;26192:20;26188:1;26177:9;26173:17;26166:47;26230:131;26356:4;26230:131;:::i;:::-;26222:139;;26120:248;;;:::o;26374:419::-;;26578:2;26567:9;26563:18;26555:26;;26627:9;26621:4;26617:20;26613:1;26602:9;26598:17;26591:47;26655:131;26781:4;26655:131;:::i;:::-;26647:139;;26545:248;;;:::o;26799:419::-;;27003:2;26992:9;26988:18;26980:26;;27052:9;27046:4;27042:20;27038:1;27027:9;27023:17;27016:47;27080:131;27206:4;27080:131;:::i;:::-;27072:139;;26970:248;;;:::o;27224:419::-;;27428:2;27417:9;27413:18;27405:26;;27477:9;27471:4;27467:20;27463:1;27452:9;27448:17;27441:47;27505:131;27631:4;27505:131;:::i;:::-;27497:139;;27395:248;;;:::o;27649:419::-;;27853:2;27842:9;27838:18;27830:26;;27902:9;27896:4;27892:20;27888:1;27877:9;27873:17;27866:47;27930:131;28056:4;27930:131;:::i;:::-;27922:139;;27820:248;;;:::o;28074:419::-;;28278:2;28267:9;28263:18;28255:26;;28327:9;28321:4;28317:20;28313:1;28302:9;28298:17;28291:47;28355:131;28481:4;28355:131;:::i;:::-;28347:139;;28245:248;;;:::o;28499:419::-;;28703:2;28692:9;28688:18;28680:26;;28752:9;28746:4;28742:20;28738:1;28727:9;28723:17;28716:47;28780:131;28906:4;28780:131;:::i;:::-;28772:139;;28670:248;;;:::o;28924:419::-;;29128:2;29117:9;29113:18;29105:26;;29177:9;29171:4;29167:20;29163:1;29152:9;29148:17;29141:47;29205:131;29331:4;29205:131;:::i;:::-;29197:139;;29095:248;;;:::o;29349:222::-;;29480:2;29469:9;29465:18;29457:26;;29493:71;29561:1;29550:9;29546:17;29537:6;29493:71;:::i;:::-;29447:124;;;;:::o;29577:283::-;;29643:2;29637:9;29627:19;;29685:4;29677:6;29673:17;29792:6;29780:10;29777:22;29756:18;29744:10;29741:34;29738:62;29735:2;;;29803:18;;:::i;:::-;29735:2;29843:10;29839:2;29832:22;29617:243;;;;:::o;29866:331::-;;30017:18;30009:6;30006:30;30003:2;;;30039:18;;:::i;:::-;30003:2;30124:4;30120:9;30113:4;30105:6;30101:17;30097:33;30089:41;;30185:4;30179;30175:15;30167:23;;29932:265;;;:::o;30203:332::-;;30355:18;30347:6;30344:30;30341:2;;;30377:18;;:::i;:::-;30341:2;30462:4;30458:9;30451:4;30443:6;30439:17;30435:33;30427:41;;30523:4;30517;30513:15;30505:23;;30270:265;;;:::o;30541:132::-;;30631:3;30623:11;;30661:4;30656:3;30652:14;30644:22;;30613:60;;;:::o;30679:114::-;;30780:5;30774:12;30764:22;;30753:40;;;:::o;30799:98::-;;30884:5;30878:12;30868:22;;30857:40;;;:::o;30903:99::-;;30989:5;30983:12;30973:22;;30962:40;;;:::o;31008:113::-;;31110:4;31105:3;31101:14;31093:22;;31083:38;;;:::o;31127:184::-;;31260:6;31255:3;31248:19;31300:4;31295:3;31291:14;31276:29;;31238:73;;;;:::o;31317:168::-;;31434:6;31429:3;31422:19;31474:4;31469:3;31465:14;31450:29;;31412:73;;;;:::o;31491:169::-;;31609:6;31604:3;31597:19;31649:4;31644:3;31640:14;31625:29;;31587:73;;;;:::o;31666:148::-;;31805:3;31790:18;;31780:34;;;;:::o;31820:305::-;;31879:20;31897:1;31879:20;:::i;:::-;31874:25;;31913:20;31931:1;31913:20;:::i;:::-;31908:25;;32067:1;31999:66;31995:74;31992:1;31989:81;31986:2;;;32073:18;;:::i;:::-;31986:2;32117:1;32114;32110:9;32103:16;;31864:261;;;;:::o;32131:185::-;;32188:20;32206:1;32188:20;:::i;:::-;32183:25;;32222:20;32240:1;32222:20;:::i;:::-;32217:25;;32261:1;32251:2;;32266:18;;:::i;:::-;32251:2;32308:1;32305;32301:9;32296:14;;32173:143;;;;:::o;32322:348::-;;32385:20;32403:1;32385:20;:::i;:::-;32380:25;;32419:20;32437:1;32419:20;:::i;:::-;32414:25;;32607:1;32539:66;32535:74;32532:1;32529:81;32524:1;32517:9;32510:17;32506:105;32503:2;;;32614:18;;:::i;:::-;32503:2;32662:1;32659;32655:9;32644:20;;32370:300;;;;:::o;32676:191::-;;32736:20;32754:1;32736:20;:::i;:::-;32731:25;;32770:20;32788:1;32770:20;:::i;:::-;32765:25;;32809:1;32806;32803:8;32800:2;;;32814:18;;:::i;:::-;32800:2;32859:1;32856;32852:9;32844:17;;32721:146;;;;:::o;32873:96::-;;32939:24;32957:5;32939:24;:::i;:::-;32928:35;;32918:51;;;:::o;32975:90::-;;33052:5;33045:13;33038:21;33027:32;;33017:48;;;:::o;33071:149::-;;33147:66;33140:5;33136:78;33125:89;;33115:105;;;:::o;33226:126::-;;33303:42;33296:5;33292:54;33281:65;;33271:81;;;:::o;33358:77::-;;33424:5;33413:16;;33403:32;;;:::o;33441:154::-;33525:6;33520:3;33515;33502:30;33587:1;33578:6;33573:3;33569:16;33562:27;33492:103;;;:::o;33601:307::-;33669:1;33679:113;33693:6;33690:1;33687:13;33679:113;;;33778:1;33773:3;33769:11;33763:18;33759:1;33754:3;33750:11;33743:39;33715:2;33712:1;33708:10;33703:15;;33679:113;;;33810:6;33807:1;33804:13;33801:2;;;33890:1;33881:6;33876:3;33872:16;33865:27;33801:2;33650:258;;;;:::o;33914:320::-;;33995:1;33989:4;33985:12;33975:22;;34042:1;34036:4;34032:12;34063:18;34053:2;;34119:4;34111:6;34107:17;34097:27;;34053:2;34181;34173:6;34170:14;34150:18;34147:38;34144:2;;;34200:18;;:::i;:::-;34144:2;33965:269;;;;:::o;34240:233::-;;34302:24;34320:5;34302:24;:::i;:::-;34293:33;;34348:66;34341:5;34338:77;34335:2;;;34418:18;;:::i;:::-;34335:2;34465:1;34458:5;34454:13;34447:20;;34283:190;;;:::o;34479:176::-;;34528:20;34546:1;34528:20;:::i;:::-;34523:25;;34562:20;34580:1;34562:20;:::i;:::-;34557:25;;34601:1;34591:2;;34606:18;;:::i;:::-;34591:2;34647:1;34644;34640:9;34635:14;;34513:142;;;;:::o;34661:180::-;34709:77;34706:1;34699:88;34806:4;34803:1;34796:15;34830:4;34827:1;34820:15;34847:180;34895:77;34892:1;34885:88;34992:4;34989:1;34982:15;35016:4;35013:1;35006:15;35033:180;35081:77;35078:1;35071:88;35178:4;35175:1;35168:15;35202:4;35199:1;35192:15;35219:180;35267:77;35264:1;35257:88;35364:4;35361:1;35354:15;35388:4;35385:1;35378:15;35405:102;;35497:2;35493:7;35488:2;35481:5;35477:14;35473:28;35463:38;;35453:54;;;:::o;35513:122::-;35586:24;35604:5;35586:24;:::i;:::-;35579:5;35576:35;35566:2;;35625:1;35622;35615:12;35566:2;35556:79;:::o;35641:116::-;35711:21;35726:5;35711:21;:::i;:::-;35704:5;35701:32;35691:2;;35747:1;35744;35737:12;35691:2;35681:76;:::o;35763:120::-;35835:23;35852:5;35835:23;:::i;:::-;35828:5;35825:34;35815:2;;35873:1;35870;35863:12;35815:2;35805:78;:::o;35889:122::-;35962:24;35980:5;35962:24;:::i;:::-;35955:5;35952:35;35942:2;;36001:1;35998;35991:12;35942:2;35932:79;:::o

Swarm Source

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