ETH Price: $3,823.93 (+5.70%)

Token

ERC-20: Pixel Mutated Doods (pxMDoods)
 

Overview

Max Total Supply

1,014 pxMDoods

Holders

206

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
10 pxMDoods
0x36852d6dfa079dc40989b8ca7025757f7f5cfebd
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:
pxMDoods

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 2022-01-14
*/

//PPPPPPPPPPPPPPPPP                       MMMMMMMM               MMMMMMMMDDDDDDDDDDDDD             OOOOOOOOO          OOOOOOOOO     DDDDDDDDDDDDD           SSSSSSSSSSSSSSS 
//P::::::::::::::::P                      M:::::::M             M:::::::MD::::::::::::DDD        OO:::::::::OO      OO:::::::::OO   D::::::::::::DDD      SS:::::::::::::::S
//P::::::PPPPPP:::::P                     M::::::::M           M::::::::MD:::::::::::::::DD    OO:::::::::::::OO  OO:::::::::::::OO D:::::::::::::::DD   S:::::SSSSSS::::::S
//PP:::::P     P:::::P                    M:::::::::M         M:::::::::MDDD:::::DDDDD:::::D  O:::::::OOO:::::::OO:::::::OOO:::::::ODDD:::::DDDDD:::::D  S:::::S     SSSSSSS
//P::::P     P:::::Pxxxxxxx      xxxxxxxM::::::::::M       M::::::::::M  D:::::D    D:::::D O::::::O   O::::::OO::::::O   O::::::O  D:::::D    D:::::D S:::::S            
//P::::P     P:::::P x:::::x    x:::::x M:::::::::::M     M:::::::::::M  D:::::D     D:::::DO:::::O     O:::::OO:::::O     O:::::O  D:::::D     D:::::DS:::::S            
//P::::PPPPPP:::::P   x:::::x  x:::::x  M:::::::M::::M   M::::M:::::::M  D:::::D     D:::::DO:::::O     O:::::OO:::::O     O:::::O  D:::::D     D:::::D S::::SSSS         
//P:::::::::::::PP     x:::::xx:::::x   M::::::M M::::M M::::M M::::::M  D:::::D     D:::::DO:::::O     O:::::OO:::::O     O:::::O  D:::::D     D:::::D  SS::::::SSSSS    
//P::::PPPPPPPPP        x::::::::::x    M::::::M  M::::M::::M  M::::::M  D:::::D     D:::::DO:::::O     O:::::OO:::::O     O:::::O  D:::::D     D:::::D    SSS::::::::SS  
//P::::P                 x::::::::x     M::::::M   M:::::::M   M::::::M  D:::::D     D:::::DO:::::O     O:::::OO:::::O     O:::::O  D:::::D     D:::::D       SSSSSS::::S 
//P::::P                 x::::::::x     M::::::M    M:::::M    M::::::M  D:::::D     D:::::DO:::::O     O:::::OO:::::O     O:::::O  D:::::D     D:::::D            S:::::S
//P::::P                x::::::::::x    M::::::M     MMMMM     M::::::M  D:::::D    D:::::D O::::::O   O::::::OO::::::O   O::::::O  D:::::D    D:::::D             S:::::S
//PP::::::PP             x:::::xx:::::x   M::::::M               M::::::MDDD:::::DDDDD:::::D  O:::::::OOO:::::::OO:::::::OOO:::::::ODDD:::::DDDDD:::::D  SSSSSSS     S:::::S
//P::::::::P            x:::::x  x:::::x  M::::::M               M::::::MD:::::::::::::::DD    OO:::::::::::::OO  OO:::::::::::::OO D:::::::::::::::DD   S::::::SSSSSS:::::S
//P::::::::P           x:::::x    x:::::x M::::::M               M::::::MD::::::::::::DDD        OO:::::::::OO      OO:::::::::OO   D::::::::::::DDD     S:::::::::::::::SS 
//PPPPPPPPPP          xxxxxxx      xxxxxxxMMMMMMMM               MMMMMMMMDDDDDDDDDDDDD             OOOOOOOOO          OOOOOOOOO     DDDDDDDDDDDDD         SSSSSSSSSSSSSSS   
                                                                                                                                                                          
                                                                                                                                                                          



//5,555 Pixel Mutant Doods taking over the earth.  Each NFT acts as a ticket to an amazing adventure.
//First 555 FREE - Paid After
//If minting from contract enter 0 for the amount and then the number you want free(max 10)
//Once free is minted out you enter the cost and the number wanted

// SPDX-License-Identifier: MIT
// File: @openzeppelin/contracts/utils/Strings.sol


// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)
//
pragma solidity ^0.8.0;

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

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

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

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

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

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


// OpenZeppelin Contracts v4.4.1 (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: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol


// OpenZeppelin Contracts v4.4.1 (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: @openzeppelin/contracts/utils/introspection/IERC165.sol


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

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;


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

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


// OpenZeppelin Contracts v4.4.1 (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: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol


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

pragma solidity ^0.8.0;


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

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

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

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


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

pragma solidity ^0.8.0;

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

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

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


// OpenZeppelin Contracts v4.4.1 (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())) : "";
          return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString(), ".json")) : "";
    }

    /**
     * @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 {
        _setApprovalForAll(_msgSender(), operator, approved);
    }

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

    /**
     * @dev Returns whether `spender` is allowed to manage `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || 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 Approve `operator` to operate on all of `owner` tokens
     *
     * Emits a {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC721: approve to caller");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

// File: contracts/main.sol


pragma solidity ^0.8.0;



contract pxMDoods is ERC721, Ownable {
  bool public paused = true;
  bool public isPaidMint = true;
  string private _baseTokenURI;
  uint256 public totalSupply = 0;
  uint256 public price = 0.015 ether;
  uint256 public maxSupply = 5555;
  uint256 public maxFreeMints = 555;
  mapping(address => uint256) private freeWallets;

  constructor(string memory baseURI)
    ERC721("Pixel Mutated Doods", "pxMDoods")
  {
    setBaseURI(baseURI);
  }

  function mint(uint256 num) public payable {
    uint256 supply = totalSupply;

    require(!paused, "MINTING PAUSED");
    require(totalSupply + num <= maxSupply, "EXCEEDS MAX SUPPLY");

    if (totalSupply + num > maxFreeMints && isPaidMint) {
      require(num < 31, "MAX PER TRANSACTION IS 30");
      require(msg.value >= price * num, "NOT ENOUGH ETH");
    } else {
      require(
        freeWallets[msg.sender] + num < 11,
        "MAX FREE MINTS PER WALLET IS 10"
      );

      freeWallets[msg.sender] += num;
    }

    totalSupply += num;

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

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

  function setBaseURI(string memory baseUri) public onlyOwner {
    _baseTokenURI = baseUri;
  }
//price should be set ie 10000000000000000
  function setPrice(uint256 newPrice) public onlyOwner {
    price = newPrice;
  }

  function setMaxSupply(uint256 newMaxSupply) public onlyOwner {
    maxSupply = newMaxSupply;
  }

  function setMaxFreeMints(uint256 newMaxFreeMints) public onlyOwner {
    maxFreeMints = newMaxFreeMints;
  }

  function pause(bool state) public onlyOwner {
    paused = state;
  }

  function paidMint(bool state) public onlyOwner {
    isPaidMint = state;
  }

  function withdrawAll() public onlyOwner {
    require(
      payable(owner()).send(address(this).balance),
      "WITHDRAW UNSUCCESSFUL"
    );
  }
}

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":[{"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":[{"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":"isPaidMint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxFreeMints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"num","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","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":"state","type":"bool"}],"name":"paidMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"newMaxFreeMints","type":"uint256"}],"name":"setMaxFreeMints","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxSupply","type":"uint256"}],"name":"setMaxSupply","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":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526001600660146101000a81548160ff0219169083151502179055506001600660156101000a81548160ff021916908315150217905550600060085566354a6ba7a180006009556115b3600a5561022b600b553480156200006357600080fd5b5060405162003f6e38038062003f6e833981810160405281019062000089919062000426565b6040518060400160405280601381526020017f506978656c204d75746174656420446f6f6473000000000000000000000000008152506040518060400160405280600881526020017f70784d446f6f647300000000000000000000000000000000000000000000000081525081600090805190602001906200010d92919062000304565b5080600190805190602001906200012692919062000304565b505050620001496200013d6200016160201b60201c565b6200016960201b60201c565b6200015a816200022f60201b60201c565b5062000611565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200023f6200016160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000265620002da60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620002be576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002b590620004ad565b60405180910390fd5b8060079080519060200190620002d692919062000304565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b82805462000312906200057d565b90600052602060002090601f01602090048101928262000336576000855562000382565b82601f106200035157805160ff191683800117855562000382565b8280016001018555821562000382579182015b828111156200038157825182559160200191906001019062000364565b5b50905062000391919062000395565b5090565b5b80821115620003b057600081600090555060010162000396565b5090565b6000620003cb620003c58462000503565b620004cf565b905082815260208101848484011115620003e457600080fd5b620003f184828562000547565b509392505050565b600082601f8301126200040b57600080fd5b81516200041d848260208601620003b4565b91505092915050565b6000602082840312156200043957600080fd5b600082015167ffffffffffffffff8111156200045457600080fd5b6200046284828501620003f9565b91505092915050565b60006200047a60208362000536565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b60006020820190508181036000830152620004c8816200046b565b9050919050565b6000604051905081810181811067ffffffffffffffff82111715620004f957620004f8620005e2565b5b8060405250919050565b600067ffffffffffffffff821115620005215762000520620005e2565b5b601f19601f8301169050602081019050919050565b600082825260208201905092915050565b60005b83811015620005675780820151818401526020810190506200054a565b8381111562000577576000848401525b50505050565b600060028204905060018216806200059657607f821691505b60208210811415620005ad57620005ac620005b3565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61394d80620006216000396000f3fe6080604052600436106101cd5760003560e01c806370a08231116100f7578063a035b1fe11610095578063c87b56dd11610064578063c87b56dd1461062b578063d5abeb0114610668578063e985e9c514610693578063f2fde38b146106d0576101cd565b8063a035b1fe14610592578063a0712d68146105bd578063a22cb465146105d9578063b88d4fde14610602576101cd565b8063853828b6116100d1578063853828b6146104fc5780638da5cb5b1461051357806391b7f5ed1461053e57806395d89b4114610567576101cd565b806370a082311461047d578063715018a6146104ba578063732496c9146104d1576101cd565b806327d2a39e1161016f57806355f804b31161013e57806355f804b3146103c35780635c975abb146103ec5780636352211e146104175780636f8b44b014610454576101cd565b806327d2a39e1461031d5780633b13be4014610348578063407043fc1461037157806342842e0e1461039a576101cd565b8063081812fc116101ab578063081812fc14610263578063095ea7b3146102a057806318160ddd146102c957806323b872dd146102f4576101cd565b806301ffc9a7146101d257806302329a291461020f57806306fdde0314610238575b600080fd5b3480156101de57600080fd5b506101f960048036038101906101f491906127e1565b6106f9565b604051610206919061318b565b60405180910390f35b34801561021b57600080fd5b50610236600480360381019061023191906127b8565b6107db565b005b34801561024457600080fd5b5061024d610874565b60405161025a91906131a6565b60405180910390f35b34801561026f57600080fd5b5061028a60048036038101906102859190612874565b610906565b6040516102979190613124565b60405180910390f35b3480156102ac57600080fd5b506102c760048036038101906102c2919061277c565b61098b565b005b3480156102d557600080fd5b506102de610aa3565b6040516102eb9190613488565b60405180910390f35b34801561030057600080fd5b5061031b60048036038101906103169190612676565b610aa9565b005b34801561032957600080fd5b50610332610b09565b60405161033f919061318b565b60405180910390f35b34801561035457600080fd5b5061036f600480360381019061036a91906127b8565b610b1c565b005b34801561037d57600080fd5b5061039860048036038101906103939190612874565b610bb5565b005b3480156103a657600080fd5b506103c160048036038101906103bc9190612676565b610c3b565b005b3480156103cf57600080fd5b506103ea60048036038101906103e59190612833565b610c5b565b005b3480156103f857600080fd5b50610401610cf1565b60405161040e919061318b565b60405180910390f35b34801561042357600080fd5b5061043e60048036038101906104399190612874565b610d04565b60405161044b9190613124565b60405180910390f35b34801561046057600080fd5b5061047b60048036038101906104769190612874565b610db6565b005b34801561048957600080fd5b506104a4600480360381019061049f9190612611565b610e3c565b6040516104b19190613488565b60405180910390f35b3480156104c657600080fd5b506104cf610ef4565b005b3480156104dd57600080fd5b506104e6610f7c565b6040516104f39190613488565b60405180910390f35b34801561050857600080fd5b50610511610f82565b005b34801561051f57600080fd5b5061052861107b565b6040516105359190613124565b60405180910390f35b34801561054a57600080fd5b5061056560048036038101906105609190612874565b6110a5565b005b34801561057357600080fd5b5061057c61112b565b60405161058991906131a6565b60405180910390f35b34801561059e57600080fd5b506105a76111bd565b6040516105b49190613488565b60405180910390f35b6105d760048036038101906105d29190612874565b6111c3565b005b3480156105e557600080fd5b5061060060048036038101906105fb9190612740565b611468565b005b34801561060e57600080fd5b50610629600480360381019061062491906126c5565b61147e565b005b34801561063757600080fd5b50610652600480360381019061064d9190612874565b6114e0565b60405161065f91906131a6565b60405180910390f35b34801561067457600080fd5b5061067d611587565b60405161068a9190613488565b60405180910390f35b34801561069f57600080fd5b506106ba60048036038101906106b5919061263a565b61158d565b6040516106c7919061318b565b60405180910390f35b3480156106dc57600080fd5b506106f760048036038101906106f29190612611565b611621565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107c457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806107d457506107d382611719565b5b9050919050565b6107e3611783565b73ffffffffffffffffffffffffffffffffffffffff1661080161107b565b73ffffffffffffffffffffffffffffffffffffffff1614610857576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084e906133c8565b60405180910390fd5b80600660146101000a81548160ff02191690831515021790555050565b60606000805461088390613742565b80601f01602080910402602001604051908101604052809291908181526020018280546108af90613742565b80156108fc5780601f106108d1576101008083540402835291602001916108fc565b820191906000526020600020905b8154815290600101906020018083116108df57829003601f168201915b5050505050905090565b60006109118261178b565b610950576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610947906133a8565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061099682610d04565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109fe90613448565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a26611783565b73ffffffffffffffffffffffffffffffffffffffff161480610a555750610a5481610a4f611783565b61158d565b5b610a94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8b90613308565b60405180910390fd5b610a9e83836117f7565b505050565b60085481565b610aba610ab4611783565b826118b0565b610af9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af090613468565b60405180910390fd5b610b0483838361198e565b505050565b600660159054906101000a900460ff1681565b610b24611783565b73ffffffffffffffffffffffffffffffffffffffff16610b4261107b565b73ffffffffffffffffffffffffffffffffffffffff1614610b98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8f906133c8565b60405180910390fd5b80600660156101000a81548160ff02191690831515021790555050565b610bbd611783565b73ffffffffffffffffffffffffffffffffffffffff16610bdb61107b565b73ffffffffffffffffffffffffffffffffffffffff1614610c31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c28906133c8565b60405180910390fd5b80600b8190555050565b610c568383836040518060200160405280600081525061147e565b505050565b610c63611783565b73ffffffffffffffffffffffffffffffffffffffff16610c8161107b565b73ffffffffffffffffffffffffffffffffffffffff1614610cd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cce906133c8565b60405180910390fd5b8060079080519060200190610ced929190612435565b5050565b600660149054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610dad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da490613368565b60405180910390fd5b80915050919050565b610dbe611783565b73ffffffffffffffffffffffffffffffffffffffff16610ddc61107b565b73ffffffffffffffffffffffffffffffffffffffff1614610e32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e29906133c8565b60405180910390fd5b80600a8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ead576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea490613348565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610efc611783565b73ffffffffffffffffffffffffffffffffffffffff16610f1a61107b565b73ffffffffffffffffffffffffffffffffffffffff1614610f70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f67906133c8565b60405180910390fd5b610f7a6000611bea565b565b600b5481565b610f8a611783565b73ffffffffffffffffffffffffffffffffffffffff16610fa861107b565b73ffffffffffffffffffffffffffffffffffffffff1614610ffe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff5906133c8565b60405180910390fd5b61100661107b565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050611079576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611070906131e8565b60405180910390fd5b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6110ad611783565b73ffffffffffffffffffffffffffffffffffffffff166110cb61107b565b73ffffffffffffffffffffffffffffffffffffffff1614611121576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611118906133c8565b60405180910390fd5b8060098190555050565b60606001805461113a90613742565b80601f016020809104026020016040519081016040528092919081815260200182805461116690613742565b80156111b35780601f10611188576101008083540402835291602001916111b3565b820191906000526020600020905b81548152906001019060200180831161119657829003601f168201915b5050505050905090565b60095481565b60006008549050600660149054906101000a900460ff161561121a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121190613208565b60405180910390fd5b600a548260085461122b9190613577565b111561126c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611263906131c8565b60405180910390fd5b600b548260085461127d9190613577565b1180156112965750600660159054906101000a900460ff165b1561133357601f82106112de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d590613248565b60405180910390fd5b816009546112ec91906135fe565b34101561132e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132590613328565b60405180910390fd5b611417565b600b82600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546113809190613577565b106113c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b790613428565b60405180910390fd5b81600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461140f9190613577565b925050819055505b81600860008282546114299190613577565b9250508190555060005b828110156114635761145033828461144b9190613577565b611cb0565b808061145b90613774565b915050611433565b505050565b61147a611473611783565b8383611e7e565b5050565b61148f611489611783565b836118b0565b6114ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c590613468565b60405180910390fd5b6114da84848484611feb565b50505050565b60606114eb8261178b565b61152a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152190613408565b60405180910390fd5b6000611534612047565b90506000815111611554576040518060200160405280600081525061157f565b8061155e846120d9565b60405160200161156f9291906130f5565b6040516020818303038152906040525b915050919050565b600a5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611629611783565b73ffffffffffffffffffffffffffffffffffffffff1661164761107b565b73ffffffffffffffffffffffffffffffffffffffff161461169d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611694906133c8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561170d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170490613268565b60405180910390fd5b61171681611bea565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661186a83610d04565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006118bb8261178b565b6118fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f1906132e8565b60405180910390fd5b600061190583610d04565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061197457508373ffffffffffffffffffffffffffffffffffffffff1661195c84610906565b73ffffffffffffffffffffffffffffffffffffffff16145b806119855750611984818561158d565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166119ae82610d04565b73ffffffffffffffffffffffffffffffffffffffff1614611a04576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fb906133e8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6b906132a8565b60405180910390fd5b611a7f838383612286565b611a8a6000826117f7565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ada9190613658565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b319190613577565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1790613388565b60405180910390fd5b611d298161178b565b15611d69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6090613288565b60405180910390fd5b611d7560008383612286565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611dc59190613577565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611eed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee4906132c8565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611fde919061318b565b60405180910390a3505050565b611ff684848461198e565b6120028484848461228b565b612041576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203890613228565b60405180910390fd5b50505050565b60606007805461205690613742565b80601f016020809104026020016040519081016040528092919081815260200182805461208290613742565b80156120cf5780601f106120a4576101008083540402835291602001916120cf565b820191906000526020600020905b8154815290600101906020018083116120b257829003601f168201915b5050505050905090565b60606000821415612121576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612281565b600082905060005b6000821461215357808061213c90613774565b915050600a8261214c91906135cd565b9150612129565b60008167ffffffffffffffff811115612195577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156121c75781602001600182028036833780820191505090505b5090505b6000851461227a576001826121e09190613658565b9150600a856121ef91906137bd565b60306121fb9190613577565b60f81b818381518110612237577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561227391906135cd565b94506121cb565b8093505050505b919050565b505050565b60006122ac8473ffffffffffffffffffffffffffffffffffffffff16612422565b15612415578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026122d5611783565b8786866040518563ffffffff1660e01b81526004016122f7949392919061313f565b602060405180830381600087803b15801561231157600080fd5b505af192505050801561234257506040513d601f19601f8201168201806040525081019061233f919061280a565b60015b6123c5573d8060008114612372576040519150601f19603f3d011682016040523d82523d6000602084013e612377565b606091505b506000815114156123bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b490613228565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061241a565b600190505b949350505050565b600080823b905060008111915050919050565b82805461244190613742565b90600052602060002090601f01602090048101928261246357600085556124aa565b82601f1061247c57805160ff19168380011785556124aa565b828001600101855582156124aa579182015b828111156124a957825182559160200191906001019061248e565b5b5090506124b791906124bb565b5090565b5b808211156124d45760008160009055506001016124bc565b5090565b60006124eb6124e6846134d4565b6134a3565b90508281526020810184848401111561250357600080fd5b61250e848285613700565b509392505050565b600061252961252484613504565b6134a3565b90508281526020810184848401111561254157600080fd5b61254c848285613700565b509392505050565b600081359050612563816138bb565b92915050565b600081359050612578816138d2565b92915050565b60008135905061258d816138e9565b92915050565b6000815190506125a2816138e9565b92915050565b600082601f8301126125b957600080fd5b81356125c98482602086016124d8565b91505092915050565b600082601f8301126125e357600080fd5b81356125f3848260208601612516565b91505092915050565b60008135905061260b81613900565b92915050565b60006020828403121561262357600080fd5b600061263184828501612554565b91505092915050565b6000806040838503121561264d57600080fd5b600061265b85828601612554565b925050602061266c85828601612554565b9150509250929050565b60008060006060848603121561268b57600080fd5b600061269986828701612554565b93505060206126aa86828701612554565b92505060406126bb868287016125fc565b9150509250925092565b600080600080608085870312156126db57600080fd5b60006126e987828801612554565b94505060206126fa87828801612554565b935050604061270b878288016125fc565b925050606085013567ffffffffffffffff81111561272857600080fd5b612734878288016125a8565b91505092959194509250565b6000806040838503121561275357600080fd5b600061276185828601612554565b925050602061277285828601612569565b9150509250929050565b6000806040838503121561278f57600080fd5b600061279d85828601612554565b92505060206127ae858286016125fc565b9150509250929050565b6000602082840312156127ca57600080fd5b60006127d884828501612569565b91505092915050565b6000602082840312156127f357600080fd5b60006128018482850161257e565b91505092915050565b60006020828403121561281c57600080fd5b600061282a84828501612593565b91505092915050565b60006020828403121561284557600080fd5b600082013567ffffffffffffffff81111561285f57600080fd5b61286b848285016125d2565b91505092915050565b60006020828403121561288657600080fd5b6000612894848285016125fc565b91505092915050565b6128a68161368c565b82525050565b6128b58161369e565b82525050565b60006128c682613534565b6128d0818561354a565b93506128e081856020860161370f565b6128e9816138aa565b840191505092915050565b60006128ff8261353f565b612909818561355b565b935061291981856020860161370f565b612922816138aa565b840191505092915050565b60006129388261353f565b612942818561356c565b935061295281856020860161370f565b80840191505092915050565b600061296b60128361355b565b91507f45584345454453204d415820535550504c5900000000000000000000000000006000830152602082019050919050565b60006129ab60158361355b565b91507f574954484452415720554e5355434345535346554c00000000000000000000006000830152602082019050919050565b60006129eb600e8361355b565b91507f4d494e54494e47205041555345440000000000000000000000000000000000006000830152602082019050919050565b6000612a2b60328361355b565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b6000612a9160198361355b565b91507f4d415820504552205452414e53414354494f4e204953203330000000000000006000830152602082019050919050565b6000612ad160268361355b565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612b37601c8361355b565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b6000612b7760248361355b565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612bdd60198361355b565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b6000612c1d602c8361355b565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000612c8360388361355b565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b6000612ce9600e8361355b565b91507f4e4f5420454e4f554748204554480000000000000000000000000000000000006000830152602082019050919050565b6000612d29602a8361355b565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b6000612d8f60298361355b565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000612df560208361355b565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b6000612e35602c8361355b565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000612e9b60058361356c565b91507f2e6a736f6e0000000000000000000000000000000000000000000000000000006000830152600582019050919050565b6000612edb60208361355b565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000612f1b60298361355b565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000612f81602f8361355b565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b6000612fe7601f8361355b565b91507f4d41582046524545204d494e5453205045522057414c4c4554204953203130006000830152602082019050919050565b600061302760218361355b565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061308d60318361355b565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b6130ef816136f6565b82525050565b6000613101828561292d565b915061310d828461292d565b915061311882612e8e565b91508190509392505050565b6000602082019050613139600083018461289d565b92915050565b6000608082019050613154600083018761289d565b613161602083018661289d565b61316e60408301856130e6565b818103606083015261318081846128bb565b905095945050505050565b60006020820190506131a060008301846128ac565b92915050565b600060208201905081810360008301526131c081846128f4565b905092915050565b600060208201905081810360008301526131e18161295e565b9050919050565b600060208201905081810360008301526132018161299e565b9050919050565b60006020820190508181036000830152613221816129de565b9050919050565b6000602082019050818103600083015261324181612a1e565b9050919050565b6000602082019050818103600083015261326181612a84565b9050919050565b6000602082019050818103600083015261328181612ac4565b9050919050565b600060208201905081810360008301526132a181612b2a565b9050919050565b600060208201905081810360008301526132c181612b6a565b9050919050565b600060208201905081810360008301526132e181612bd0565b9050919050565b6000602082019050818103600083015261330181612c10565b9050919050565b6000602082019050818103600083015261332181612c76565b9050919050565b6000602082019050818103600083015261334181612cdc565b9050919050565b6000602082019050818103600083015261336181612d1c565b9050919050565b6000602082019050818103600083015261338181612d82565b9050919050565b600060208201905081810360008301526133a181612de8565b9050919050565b600060208201905081810360008301526133c181612e28565b9050919050565b600060208201905081810360008301526133e181612ece565b9050919050565b6000602082019050818103600083015261340181612f0e565b9050919050565b6000602082019050818103600083015261342181612f74565b9050919050565b6000602082019050818103600083015261344181612fda565b9050919050565b600060208201905081810360008301526134618161301a565b9050919050565b6000602082019050818103600083015261348181613080565b9050919050565b600060208201905061349d60008301846130e6565b92915050565b6000604051905081810181811067ffffffffffffffff821117156134ca576134c961387b565b5b8060405250919050565b600067ffffffffffffffff8211156134ef576134ee61387b565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff82111561351f5761351e61387b565b5b601f19601f8301169050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613582826136f6565b915061358d836136f6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156135c2576135c16137ee565b5b828201905092915050565b60006135d8826136f6565b91506135e3836136f6565b9250826135f3576135f261381d565b5b828204905092915050565b6000613609826136f6565b9150613614836136f6565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561364d5761364c6137ee565b5b828202905092915050565b6000613663826136f6565b915061366e836136f6565b925082821015613681576136806137ee565b5b828203905092915050565b6000613697826136d6565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561372d578082015181840152602081019050613712565b8381111561373c576000848401525b50505050565b6000600282049050600182168061375a57607f821691505b6020821081141561376e5761376d61384c565b5b50919050565b600061377f826136f6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156137b2576137b16137ee565b5b600182019050919050565b60006137c8826136f6565b91506137d3836136f6565b9250826137e3576137e261381d565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b6138c48161368c565b81146138cf57600080fd5b50565b6138db8161369e565b81146138e657600080fd5b50565b6138f2816136aa565b81146138fd57600080fd5b50565b613909816136f6565b811461391457600080fd5b5056fea2646970667358221220536739ba89c89767a56fd91eec2f1d778a7c99aeaa678b496e7bc1c883d2219164736f6c634300080000330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004468747470733a2f2f697066732e696f2f697066732f516d59417558756b576a58714e484474614c4c6b554a514a7762656b7377385646616468424637516d356757506b2f00000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106101cd5760003560e01c806370a08231116100f7578063a035b1fe11610095578063c87b56dd11610064578063c87b56dd1461062b578063d5abeb0114610668578063e985e9c514610693578063f2fde38b146106d0576101cd565b8063a035b1fe14610592578063a0712d68146105bd578063a22cb465146105d9578063b88d4fde14610602576101cd565b8063853828b6116100d1578063853828b6146104fc5780638da5cb5b1461051357806391b7f5ed1461053e57806395d89b4114610567576101cd565b806370a082311461047d578063715018a6146104ba578063732496c9146104d1576101cd565b806327d2a39e1161016f57806355f804b31161013e57806355f804b3146103c35780635c975abb146103ec5780636352211e146104175780636f8b44b014610454576101cd565b806327d2a39e1461031d5780633b13be4014610348578063407043fc1461037157806342842e0e1461039a576101cd565b8063081812fc116101ab578063081812fc14610263578063095ea7b3146102a057806318160ddd146102c957806323b872dd146102f4576101cd565b806301ffc9a7146101d257806302329a291461020f57806306fdde0314610238575b600080fd5b3480156101de57600080fd5b506101f960048036038101906101f491906127e1565b6106f9565b604051610206919061318b565b60405180910390f35b34801561021b57600080fd5b50610236600480360381019061023191906127b8565b6107db565b005b34801561024457600080fd5b5061024d610874565b60405161025a91906131a6565b60405180910390f35b34801561026f57600080fd5b5061028a60048036038101906102859190612874565b610906565b6040516102979190613124565b60405180910390f35b3480156102ac57600080fd5b506102c760048036038101906102c2919061277c565b61098b565b005b3480156102d557600080fd5b506102de610aa3565b6040516102eb9190613488565b60405180910390f35b34801561030057600080fd5b5061031b60048036038101906103169190612676565b610aa9565b005b34801561032957600080fd5b50610332610b09565b60405161033f919061318b565b60405180910390f35b34801561035457600080fd5b5061036f600480360381019061036a91906127b8565b610b1c565b005b34801561037d57600080fd5b5061039860048036038101906103939190612874565b610bb5565b005b3480156103a657600080fd5b506103c160048036038101906103bc9190612676565b610c3b565b005b3480156103cf57600080fd5b506103ea60048036038101906103e59190612833565b610c5b565b005b3480156103f857600080fd5b50610401610cf1565b60405161040e919061318b565b60405180910390f35b34801561042357600080fd5b5061043e60048036038101906104399190612874565b610d04565b60405161044b9190613124565b60405180910390f35b34801561046057600080fd5b5061047b60048036038101906104769190612874565b610db6565b005b34801561048957600080fd5b506104a4600480360381019061049f9190612611565b610e3c565b6040516104b19190613488565b60405180910390f35b3480156104c657600080fd5b506104cf610ef4565b005b3480156104dd57600080fd5b506104e6610f7c565b6040516104f39190613488565b60405180910390f35b34801561050857600080fd5b50610511610f82565b005b34801561051f57600080fd5b5061052861107b565b6040516105359190613124565b60405180910390f35b34801561054a57600080fd5b5061056560048036038101906105609190612874565b6110a5565b005b34801561057357600080fd5b5061057c61112b565b60405161058991906131a6565b60405180910390f35b34801561059e57600080fd5b506105a76111bd565b6040516105b49190613488565b60405180910390f35b6105d760048036038101906105d29190612874565b6111c3565b005b3480156105e557600080fd5b5061060060048036038101906105fb9190612740565b611468565b005b34801561060e57600080fd5b50610629600480360381019061062491906126c5565b61147e565b005b34801561063757600080fd5b50610652600480360381019061064d9190612874565b6114e0565b60405161065f91906131a6565b60405180910390f35b34801561067457600080fd5b5061067d611587565b60405161068a9190613488565b60405180910390f35b34801561069f57600080fd5b506106ba60048036038101906106b5919061263a565b61158d565b6040516106c7919061318b565b60405180910390f35b3480156106dc57600080fd5b506106f760048036038101906106f29190612611565b611621565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107c457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806107d457506107d382611719565b5b9050919050565b6107e3611783565b73ffffffffffffffffffffffffffffffffffffffff1661080161107b565b73ffffffffffffffffffffffffffffffffffffffff1614610857576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084e906133c8565b60405180910390fd5b80600660146101000a81548160ff02191690831515021790555050565b60606000805461088390613742565b80601f01602080910402602001604051908101604052809291908181526020018280546108af90613742565b80156108fc5780601f106108d1576101008083540402835291602001916108fc565b820191906000526020600020905b8154815290600101906020018083116108df57829003601f168201915b5050505050905090565b60006109118261178b565b610950576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610947906133a8565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061099682610d04565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109fe90613448565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a26611783565b73ffffffffffffffffffffffffffffffffffffffff161480610a555750610a5481610a4f611783565b61158d565b5b610a94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8b90613308565b60405180910390fd5b610a9e83836117f7565b505050565b60085481565b610aba610ab4611783565b826118b0565b610af9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af090613468565b60405180910390fd5b610b0483838361198e565b505050565b600660159054906101000a900460ff1681565b610b24611783565b73ffffffffffffffffffffffffffffffffffffffff16610b4261107b565b73ffffffffffffffffffffffffffffffffffffffff1614610b98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8f906133c8565b60405180910390fd5b80600660156101000a81548160ff02191690831515021790555050565b610bbd611783565b73ffffffffffffffffffffffffffffffffffffffff16610bdb61107b565b73ffffffffffffffffffffffffffffffffffffffff1614610c31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c28906133c8565b60405180910390fd5b80600b8190555050565b610c568383836040518060200160405280600081525061147e565b505050565b610c63611783565b73ffffffffffffffffffffffffffffffffffffffff16610c8161107b565b73ffffffffffffffffffffffffffffffffffffffff1614610cd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cce906133c8565b60405180910390fd5b8060079080519060200190610ced929190612435565b5050565b600660149054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610dad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da490613368565b60405180910390fd5b80915050919050565b610dbe611783565b73ffffffffffffffffffffffffffffffffffffffff16610ddc61107b565b73ffffffffffffffffffffffffffffffffffffffff1614610e32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e29906133c8565b60405180910390fd5b80600a8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ead576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea490613348565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610efc611783565b73ffffffffffffffffffffffffffffffffffffffff16610f1a61107b565b73ffffffffffffffffffffffffffffffffffffffff1614610f70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f67906133c8565b60405180910390fd5b610f7a6000611bea565b565b600b5481565b610f8a611783565b73ffffffffffffffffffffffffffffffffffffffff16610fa861107b565b73ffffffffffffffffffffffffffffffffffffffff1614610ffe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff5906133c8565b60405180910390fd5b61100661107b565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050611079576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611070906131e8565b60405180910390fd5b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6110ad611783565b73ffffffffffffffffffffffffffffffffffffffff166110cb61107b565b73ffffffffffffffffffffffffffffffffffffffff1614611121576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611118906133c8565b60405180910390fd5b8060098190555050565b60606001805461113a90613742565b80601f016020809104026020016040519081016040528092919081815260200182805461116690613742565b80156111b35780601f10611188576101008083540402835291602001916111b3565b820191906000526020600020905b81548152906001019060200180831161119657829003601f168201915b5050505050905090565b60095481565b60006008549050600660149054906101000a900460ff161561121a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121190613208565b60405180910390fd5b600a548260085461122b9190613577565b111561126c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611263906131c8565b60405180910390fd5b600b548260085461127d9190613577565b1180156112965750600660159054906101000a900460ff165b1561133357601f82106112de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d590613248565b60405180910390fd5b816009546112ec91906135fe565b34101561132e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132590613328565b60405180910390fd5b611417565b600b82600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546113809190613577565b106113c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b790613428565b60405180910390fd5b81600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461140f9190613577565b925050819055505b81600860008282546114299190613577565b9250508190555060005b828110156114635761145033828461144b9190613577565b611cb0565b808061145b90613774565b915050611433565b505050565b61147a611473611783565b8383611e7e565b5050565b61148f611489611783565b836118b0565b6114ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c590613468565b60405180910390fd5b6114da84848484611feb565b50505050565b60606114eb8261178b565b61152a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152190613408565b60405180910390fd5b6000611534612047565b90506000815111611554576040518060200160405280600081525061157f565b8061155e846120d9565b60405160200161156f9291906130f5565b6040516020818303038152906040525b915050919050565b600a5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611629611783565b73ffffffffffffffffffffffffffffffffffffffff1661164761107b565b73ffffffffffffffffffffffffffffffffffffffff161461169d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611694906133c8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561170d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170490613268565b60405180910390fd5b61171681611bea565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661186a83610d04565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006118bb8261178b565b6118fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f1906132e8565b60405180910390fd5b600061190583610d04565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061197457508373ffffffffffffffffffffffffffffffffffffffff1661195c84610906565b73ffffffffffffffffffffffffffffffffffffffff16145b806119855750611984818561158d565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166119ae82610d04565b73ffffffffffffffffffffffffffffffffffffffff1614611a04576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fb906133e8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6b906132a8565b60405180910390fd5b611a7f838383612286565b611a8a6000826117f7565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ada9190613658565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b319190613577565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1790613388565b60405180910390fd5b611d298161178b565b15611d69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6090613288565b60405180910390fd5b611d7560008383612286565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611dc59190613577565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611eed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee4906132c8565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611fde919061318b565b60405180910390a3505050565b611ff684848461198e565b6120028484848461228b565b612041576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203890613228565b60405180910390fd5b50505050565b60606007805461205690613742565b80601f016020809104026020016040519081016040528092919081815260200182805461208290613742565b80156120cf5780601f106120a4576101008083540402835291602001916120cf565b820191906000526020600020905b8154815290600101906020018083116120b257829003601f168201915b5050505050905090565b60606000821415612121576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612281565b600082905060005b6000821461215357808061213c90613774565b915050600a8261214c91906135cd565b9150612129565b60008167ffffffffffffffff811115612195577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156121c75781602001600182028036833780820191505090505b5090505b6000851461227a576001826121e09190613658565b9150600a856121ef91906137bd565b60306121fb9190613577565b60f81b818381518110612237577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561227391906135cd565b94506121cb565b8093505050505b919050565b505050565b60006122ac8473ffffffffffffffffffffffffffffffffffffffff16612422565b15612415578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026122d5611783565b8786866040518563ffffffff1660e01b81526004016122f7949392919061313f565b602060405180830381600087803b15801561231157600080fd5b505af192505050801561234257506040513d601f19601f8201168201806040525081019061233f919061280a565b60015b6123c5573d8060008114612372576040519150601f19603f3d011682016040523d82523d6000602084013e612377565b606091505b506000815114156123bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b490613228565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061241a565b600190505b949350505050565b600080823b905060008111915050919050565b82805461244190613742565b90600052602060002090601f01602090048101928261246357600085556124aa565b82601f1061247c57805160ff19168380011785556124aa565b828001600101855582156124aa579182015b828111156124a957825182559160200191906001019061248e565b5b5090506124b791906124bb565b5090565b5b808211156124d45760008160009055506001016124bc565b5090565b60006124eb6124e6846134d4565b6134a3565b90508281526020810184848401111561250357600080fd5b61250e848285613700565b509392505050565b600061252961252484613504565b6134a3565b90508281526020810184848401111561254157600080fd5b61254c848285613700565b509392505050565b600081359050612563816138bb565b92915050565b600081359050612578816138d2565b92915050565b60008135905061258d816138e9565b92915050565b6000815190506125a2816138e9565b92915050565b600082601f8301126125b957600080fd5b81356125c98482602086016124d8565b91505092915050565b600082601f8301126125e357600080fd5b81356125f3848260208601612516565b91505092915050565b60008135905061260b81613900565b92915050565b60006020828403121561262357600080fd5b600061263184828501612554565b91505092915050565b6000806040838503121561264d57600080fd5b600061265b85828601612554565b925050602061266c85828601612554565b9150509250929050565b60008060006060848603121561268b57600080fd5b600061269986828701612554565b93505060206126aa86828701612554565b92505060406126bb868287016125fc565b9150509250925092565b600080600080608085870312156126db57600080fd5b60006126e987828801612554565b94505060206126fa87828801612554565b935050604061270b878288016125fc565b925050606085013567ffffffffffffffff81111561272857600080fd5b612734878288016125a8565b91505092959194509250565b6000806040838503121561275357600080fd5b600061276185828601612554565b925050602061277285828601612569565b9150509250929050565b6000806040838503121561278f57600080fd5b600061279d85828601612554565b92505060206127ae858286016125fc565b9150509250929050565b6000602082840312156127ca57600080fd5b60006127d884828501612569565b91505092915050565b6000602082840312156127f357600080fd5b60006128018482850161257e565b91505092915050565b60006020828403121561281c57600080fd5b600061282a84828501612593565b91505092915050565b60006020828403121561284557600080fd5b600082013567ffffffffffffffff81111561285f57600080fd5b61286b848285016125d2565b91505092915050565b60006020828403121561288657600080fd5b6000612894848285016125fc565b91505092915050565b6128a68161368c565b82525050565b6128b58161369e565b82525050565b60006128c682613534565b6128d0818561354a565b93506128e081856020860161370f565b6128e9816138aa565b840191505092915050565b60006128ff8261353f565b612909818561355b565b935061291981856020860161370f565b612922816138aa565b840191505092915050565b60006129388261353f565b612942818561356c565b935061295281856020860161370f565b80840191505092915050565b600061296b60128361355b565b91507f45584345454453204d415820535550504c5900000000000000000000000000006000830152602082019050919050565b60006129ab60158361355b565b91507f574954484452415720554e5355434345535346554c00000000000000000000006000830152602082019050919050565b60006129eb600e8361355b565b91507f4d494e54494e47205041555345440000000000000000000000000000000000006000830152602082019050919050565b6000612a2b60328361355b565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b6000612a9160198361355b565b91507f4d415820504552205452414e53414354494f4e204953203330000000000000006000830152602082019050919050565b6000612ad160268361355b565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612b37601c8361355b565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b6000612b7760248361355b565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612bdd60198361355b565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b6000612c1d602c8361355b565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000612c8360388361355b565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b6000612ce9600e8361355b565b91507f4e4f5420454e4f554748204554480000000000000000000000000000000000006000830152602082019050919050565b6000612d29602a8361355b565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b6000612d8f60298361355b565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000612df560208361355b565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b6000612e35602c8361355b565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000612e9b60058361356c565b91507f2e6a736f6e0000000000000000000000000000000000000000000000000000006000830152600582019050919050565b6000612edb60208361355b565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000612f1b60298361355b565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000612f81602f8361355b565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b6000612fe7601f8361355b565b91507f4d41582046524545204d494e5453205045522057414c4c4554204953203130006000830152602082019050919050565b600061302760218361355b565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061308d60318361355b565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b6130ef816136f6565b82525050565b6000613101828561292d565b915061310d828461292d565b915061311882612e8e565b91508190509392505050565b6000602082019050613139600083018461289d565b92915050565b6000608082019050613154600083018761289d565b613161602083018661289d565b61316e60408301856130e6565b818103606083015261318081846128bb565b905095945050505050565b60006020820190506131a060008301846128ac565b92915050565b600060208201905081810360008301526131c081846128f4565b905092915050565b600060208201905081810360008301526131e18161295e565b9050919050565b600060208201905081810360008301526132018161299e565b9050919050565b60006020820190508181036000830152613221816129de565b9050919050565b6000602082019050818103600083015261324181612a1e565b9050919050565b6000602082019050818103600083015261326181612a84565b9050919050565b6000602082019050818103600083015261328181612ac4565b9050919050565b600060208201905081810360008301526132a181612b2a565b9050919050565b600060208201905081810360008301526132c181612b6a565b9050919050565b600060208201905081810360008301526132e181612bd0565b9050919050565b6000602082019050818103600083015261330181612c10565b9050919050565b6000602082019050818103600083015261332181612c76565b9050919050565b6000602082019050818103600083015261334181612cdc565b9050919050565b6000602082019050818103600083015261336181612d1c565b9050919050565b6000602082019050818103600083015261338181612d82565b9050919050565b600060208201905081810360008301526133a181612de8565b9050919050565b600060208201905081810360008301526133c181612e28565b9050919050565b600060208201905081810360008301526133e181612ece565b9050919050565b6000602082019050818103600083015261340181612f0e565b9050919050565b6000602082019050818103600083015261342181612f74565b9050919050565b6000602082019050818103600083015261344181612fda565b9050919050565b600060208201905081810360008301526134618161301a565b9050919050565b6000602082019050818103600083015261348181613080565b9050919050565b600060208201905061349d60008301846130e6565b92915050565b6000604051905081810181811067ffffffffffffffff821117156134ca576134c961387b565b5b8060405250919050565b600067ffffffffffffffff8211156134ef576134ee61387b565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff82111561351f5761351e61387b565b5b601f19601f8301169050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613582826136f6565b915061358d836136f6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156135c2576135c16137ee565b5b828201905092915050565b60006135d8826136f6565b91506135e3836136f6565b9250826135f3576135f261381d565b5b828204905092915050565b6000613609826136f6565b9150613614836136f6565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561364d5761364c6137ee565b5b828202905092915050565b6000613663826136f6565b915061366e836136f6565b925082821015613681576136806137ee565b5b828203905092915050565b6000613697826136d6565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561372d578082015181840152602081019050613712565b8381111561373c576000848401525b50505050565b6000600282049050600182168061375a57607f821691505b6020821081141561376e5761376d61384c565b5b50919050565b600061377f826136f6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156137b2576137b16137ee565b5b600182019050919050565b60006137c8826136f6565b91506137d3836136f6565b9250826137e3576137e261381d565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b6138c48161368c565b81146138cf57600080fd5b50565b6138db8161369e565b81146138e657600080fd5b50565b6138f2816136aa565b81146138fd57600080fd5b50565b613909816136f6565b811461391457600080fd5b5056fea2646970667358221220536739ba89c89767a56fd91eec2f1d778a7c99aeaa678b496e7bc1c883d2219164736f6c63430008000033

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

0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004468747470733a2f2f697066732e696f2f697066732f516d59417558756b576a58714e484474614c4c6b554a514a7762656b7377385646616468424637516d356757506b2f00000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : baseURI (string): https://ipfs.io/ipfs/QmYAuXukWjXqNHDtaLLkUJQJwbeksw8VFadhBF7Qm5gWPk/

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000044
Arg [2] : 68747470733a2f2f697066732e696f2f697066732f516d59417558756b576a58
Arg [3] : 714e484474614c4c6b554a514a7762656b7377385646616468424637516d3567
Arg [4] : 57506b2f00000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

39823:2009:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24662:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41516:71;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25607:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27293:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26816:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39962:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28043:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39895:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41593:78;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41400:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28453:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41064:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39865:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25301:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41296:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25031:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38942:103;;;;;;;;;;;;;:::i;:::-;;40072:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41677:152;;;;;;;;;;;;;:::i;:::-;;38291:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41208:82;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25776:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39997:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40287:657;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27586:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28709:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25951:461;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40036:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27812:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39200:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24662:305;24764:4;24816:25;24801:40;;;:11;:40;;;;:105;;;;24873:33;24858:48;;;:11;:48;;;;24801:105;:158;;;;24923:36;24947:11;24923:23;:36::i;:::-;24801:158;24781:178;;24662:305;;;:::o;41516:71::-;38522:12;:10;:12::i;:::-;38511:23;;:7;:5;:7::i;:::-;:23;;;38503:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41576:5:::1;41567:6;;:14;;;;;;;;;;;;;;;;;;41516:71:::0;:::o;25607:100::-;25661:13;25694:5;25687:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25607:100;:::o;27293:221::-;27369:7;27397:16;27405:7;27397;:16::i;:::-;27389:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27482:15;:24;27498:7;27482:24;;;;;;;;;;;;;;;;;;;;;27475:31;;27293:221;;;:::o;26816:411::-;26897:13;26913:23;26928:7;26913:14;:23::i;:::-;26897:39;;26961:5;26955:11;;:2;:11;;;;26947:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;27055:5;27039:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;27064:37;27081:5;27088:12;:10;:12::i;:::-;27064:16;:37::i;:::-;27039:62;27017:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;27198:21;27207:2;27211:7;27198:8;:21::i;:::-;26816:411;;;:::o;39962:30::-;;;;:::o;28043:339::-;28238:41;28257:12;:10;:12::i;:::-;28271:7;28238:18;:41::i;:::-;28230:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28346:28;28356:4;28362:2;28366:7;28346:9;:28::i;:::-;28043:339;;;:::o;39895:29::-;;;;;;;;;;;;;:::o;41593:78::-;38522:12;:10;:12::i;:::-;38511:23;;:7;:5;:7::i;:::-;:23;;;38503:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41660:5:::1;41647:10;;:18;;;;;;;;;;;;;;;;;;41593:78:::0;:::o;41400:110::-;38522:12;:10;:12::i;:::-;38511:23;;:7;:5;:7::i;:::-;:23;;;38503:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41489:15:::1;41474:12;:30;;;;41400:110:::0;:::o;28453:185::-;28591:39;28608:4;28614:2;28618:7;28591:39;;;;;;;;;;;;:16;:39::i;:::-;28453:185;;;:::o;41064:96::-;38522:12;:10;:12::i;:::-;38511:23;;:7;:5;:7::i;:::-;:23;;;38503:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41147:7:::1;41131:13;:23;;;;;;;;;;;;:::i;:::-;;41064:96:::0;:::o;39865:25::-;;;;;;;;;;;;;:::o;25301:239::-;25373:7;25393:13;25409:7;:16;25417:7;25409:16;;;;;;;;;;;;;;;;;;;;;25393:32;;25461:1;25444:19;;:5;:19;;;;25436:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25527:5;25520:12;;;25301:239;;;:::o;41296:98::-;38522:12;:10;:12::i;:::-;38511:23;;:7;:5;:7::i;:::-;:23;;;38503:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41376:12:::1;41364:9;:24;;;;41296:98:::0;:::o;25031:208::-;25103:7;25148:1;25131:19;;:5;:19;;;;25123:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25215:9;:16;25225:5;25215:16;;;;;;;;;;;;;;;;25208:23;;25031:208;;;:::o;38942:103::-;38522:12;:10;:12::i;:::-;38511:23;;:7;:5;:7::i;:::-;:23;;;38503:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39007:30:::1;39034:1;39007:18;:30::i;:::-;38942:103::o:0;40072:33::-;;;;:::o;41677:152::-;38522:12;:10;:12::i;:::-;38511:23;;:7;:5;:7::i;:::-;:23;;;38503:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41748:7:::1;:5;:7::i;:::-;41740:21;;:44;41762:21;41740:44;;;;;;;;;;;;;;;;;;;;;;;41724:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;41677:152::o:0;38291:87::-;38337:7;38364:6;;;;;;;;;;;38357:13;;38291:87;:::o;41208:82::-;38522:12;:10;:12::i;:::-;38511:23;;:7;:5;:7::i;:::-;:23;;;38503:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41276:8:::1;41268:5;:16;;;;41208:82:::0;:::o;25776:104::-;25832:13;25865:7;25858:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25776:104;:::o;39997:34::-;;;;:::o;40287:657::-;40336:14;40353:11;;40336:28;;40382:6;;;;;;;;;;;40381:7;40373:34;;;;;;;;;;;;:::i;:::-;;;;;;;;;40443:9;;40436:3;40422:11;;:17;;;;:::i;:::-;:30;;40414:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;40508:12;;40502:3;40488:11;;:17;;;;:::i;:::-;:32;:46;;;;;40524:10;;;;;;;;;;;40488:46;40484:344;;;40559:2;40553:3;:8;40545:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;40629:3;40621:5;;:11;;;;:::i;:::-;40608:9;:24;;40600:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;40484:344;;;40724:2;40718:3;40692:11;:23;40704:10;40692:23;;;;;;;;;;;;;;;;:29;;;;:::i;:::-;:34;40674:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;40817:3;40790:11;:23;40802:10;40790:23;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;40484:344;40851:3;40836:11;;:18;;;;;;;:::i;:::-;;;;;;;;40868:9;40863:76;40883:3;40879:1;:7;40863:76;;;40902:29;40908:10;40929:1;40920:6;:10;;;;:::i;:::-;40902:5;:29::i;:::-;40888:3;;;;;:::i;:::-;;;;40863:76;;;;40287:657;;:::o;27586:155::-;27681:52;27700:12;:10;:12::i;:::-;27714:8;27724;27681:18;:52::i;:::-;27586:155;;:::o;28709:328::-;28884:41;28903:12;:10;:12::i;:::-;28917:7;28884:18;:41::i;:::-;28876:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28990:39;29004:4;29010:2;29014:7;29023:5;28990:13;:39::i;:::-;28709:328;;;;:::o;25951:461::-;26024:13;26058:16;26066:7;26058;:16::i;:::-;26050:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;26139:21;26163:10;:8;:10::i;:::-;26139:34;;26333:1;26315:7;26309:21;:25;:95;;;;;;;;;;;;;;;;;26361:7;26370:18;:7;:16;:18::i;:::-;26344:54;;;;;;;;;:::i;:::-;;;;;;;;;;;;;26309:95;26302:102;;;25951:461;;;:::o;40036:31::-;;;;:::o;27812:164::-;27909:4;27933:18;:25;27952:5;27933:25;;;;;;;;;;;;;;;:35;27959:8;27933:35;;;;;;;;;;;;;;;;;;;;;;;;;27926:42;;27812:164;;;;:::o;39200:201::-;38522:12;:10;:12::i;:::-;38511:23;;:7;:5;:7::i;:::-;:23;;;38503:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39309:1:::1;39289:22;;:8;:22;;;;39281:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;39365:28;39384:8;39365:18;:28::i;:::-;39200:201:::0;:::o;16538:157::-;16623:4;16662:25;16647:40;;;:11;:40;;;;16640:47;;16538:157;;;:::o;23056:98::-;23109:7;23136:10;23129:17;;23056:98;:::o;30547:127::-;30612:4;30664:1;30636:30;;:7;:16;30644:7;30636:16;;;;;;;;;;;;;;;;;;;;;:30;;;;30629:37;;30547:127;;;:::o;34529:174::-;34631:2;34604:15;:24;34620:7;34604:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;34687:7;34683:2;34649:46;;34658:23;34673:7;34658:14;:23::i;:::-;34649:46;;;;;;;;;;;;34529:174;;:::o;30841:348::-;30934:4;30959:16;30967:7;30959;:16::i;:::-;30951:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31035:13;31051:23;31066:7;31051:14;:23::i;:::-;31035:39;;31104:5;31093:16;;:7;:16;;;:51;;;;31137:7;31113:31;;:20;31125:7;31113:11;:20::i;:::-;:31;;;31093:51;:87;;;;31148:32;31165:5;31172:7;31148:16;:32::i;:::-;31093:87;31085:96;;;30841:348;;;;:::o;33833:578::-;33992:4;33965:31;;:23;33980:7;33965:14;:23::i;:::-;:31;;;33957:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;34075:1;34061:16;;:2;:16;;;;34053:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34131:39;34152:4;34158:2;34162:7;34131:20;:39::i;:::-;34235:29;34252:1;34256:7;34235:8;:29::i;:::-;34296:1;34277:9;:15;34287:4;34277:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;34325:1;34308:9;:13;34318:2;34308:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34356:2;34337:7;:16;34345:7;34337:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34395:7;34391:2;34376:27;;34385:4;34376:27;;;;;;;;;;;;33833:578;;;:::o;39561:191::-;39635:16;39654:6;;;;;;;;;;;39635:25;;39680:8;39671:6;;:17;;;;;;;;;;;;;;;;;;39735:8;39704:40;;39725:8;39704:40;;;;;;;;;;;;39561:191;;:::o;32525:382::-;32619:1;32605:16;;:2;:16;;;;32597:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;32678:16;32686:7;32678;:16::i;:::-;32677:17;32669:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;32740:45;32769:1;32773:2;32777:7;32740:20;:45::i;:::-;32815:1;32798:9;:13;32808:2;32798:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32846:2;32827:7;:16;32835:7;32827:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32891:7;32887:2;32866:33;;32883:1;32866:33;;;;;;;;;;;;32525:382;;:::o;34845:315::-;35000:8;34991:17;;:5;:17;;;;34983:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;35087:8;35049:18;:25;35068:5;35049:25;;;;;;;;;;;;;;;:35;35075:8;35049:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35133:8;35111:41;;35126:5;35111:41;;;35143:8;35111:41;;;;;;:::i;:::-;;;;;;;;34845:315;;;:::o;29919:::-;30076:28;30086:4;30092:2;30096:7;30076:9;:28::i;:::-;30123:48;30146:4;30152:2;30156:7;30165:5;30123:22;:48::i;:::-;30115:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;29919:315;;;;:::o;40950:108::-;41010:13;41039;41032:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40950:108;:::o;3815:723::-;3871:13;4101:1;4092:5;:10;4088:53;;;4119:10;;;;;;;;;;;;;;;;;;;;;4088:53;4151:12;4166:5;4151:20;;4182:14;4207:78;4222:1;4214:4;:9;4207:78;;4240:8;;;;;:::i;:::-;;;;4271:2;4263:10;;;;;:::i;:::-;;;4207:78;;;4295:19;4327:6;4317:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4295:39;;4345:154;4361:1;4352:5;:10;4345:154;;4389:1;4379:11;;;;;:::i;:::-;;;4456:2;4448:5;:10;;;;:::i;:::-;4435:2;:24;;;;:::i;:::-;4422:39;;4405:6;4412;4405:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;4485:2;4476:11;;;;;:::i;:::-;;;4345:154;;;4523:6;4509:21;;;;;3815:723;;;;:::o;37096:126::-;;;;:::o;35725:799::-;35880:4;35901:15;:2;:13;;;:15::i;:::-;35897:620;;;35953:2;35937:36;;;35974:12;:10;:12::i;:::-;35988:4;35994:7;36003:5;35937:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35933:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36196:1;36179:6;:13;:18;36175:272;;;36222:60;;;;;;;;;;:::i;:::-;;;;;;;;36175:272;36397:6;36391:13;36382:6;36378:2;36374:15;36367:38;35933:529;36070:41;;;36060:51;;;:6;:51;;;;36053:58;;;;;35897:620;36501:4;36494:11;;35725:799;;;;;;;:::o;6394:387::-;6454:4;6662:12;6729:7;6717:20;6709:28;;6772:1;6765:4;:8;6758:15;;;6394:387;;;:::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:118::-;6433:24;6451:5;6433:24;:::i;:::-;6428:3;6421:37;6411:53;;:::o;6470:109::-;6551:21;6566:5;6551:21;:::i;:::-;6546:3;6539:34;6529:50;;:::o;6585:360::-;;6699:38;6731:5;6699:38;:::i;:::-;6753:70;6816:6;6811:3;6753:70;:::i;:::-;6746:77;;6832:52;6877:6;6872:3;6865:4;6858:5;6854:16;6832:52;:::i;:::-;6909:29;6931:6;6909:29;:::i;:::-;6904:3;6900:39;6893:46;;6675:270;;;;;:::o;6951:364::-;;7067:39;7100:5;7067:39;:::i;:::-;7122:71;7186:6;7181:3;7122:71;:::i;:::-;7115:78;;7202:52;7247:6;7242:3;7235:4;7228:5;7224:16;7202:52;:::i;:::-;7279:29;7301:6;7279:29;:::i;:::-;7274:3;7270:39;7263:46;;7043:272;;;;;:::o;7321:377::-;;7455:39;7488:5;7455:39;:::i;:::-;7510:89;7592:6;7587:3;7510:89;:::i;:::-;7503:96;;7608:52;7653:6;7648:3;7641:4;7634:5;7630:16;7608:52;:::i;:::-;7685:6;7680:3;7676:16;7669:23;;7431:267;;;;;:::o;7704:316::-;;7867:67;7931:2;7926:3;7867:67;:::i;:::-;7860:74;;7964:20;7960:1;7955:3;7951:11;7944:41;8011:2;8006:3;8002:12;7995:19;;7850:170;;;:::o;8026:319::-;;8189:67;8253:2;8248:3;8189:67;:::i;:::-;8182:74;;8286:23;8282:1;8277:3;8273:11;8266:44;8336:2;8331:3;8327:12;8320:19;;8172:173;;;:::o;8351:312::-;;8514:67;8578:2;8573:3;8514:67;:::i;:::-;8507:74;;8611:16;8607:1;8602:3;8598:11;8591:37;8654:2;8649:3;8645:12;8638:19;;8497:166;;;:::o;8669:382::-;;8832:67;8896:2;8891:3;8832:67;:::i;:::-;8825:74;;8929:34;8925:1;8920:3;8916:11;8909:55;8995:20;8990:2;8985:3;8981:12;8974:42;9042:2;9037:3;9033:12;9026:19;;8815:236;;;:::o;9057:323::-;;9220:67;9284:2;9279:3;9220:67;:::i;:::-;9213:74;;9317:27;9313:1;9308:3;9304:11;9297:48;9371:2;9366:3;9362:12;9355:19;;9203:177;;;:::o;9386:370::-;;9549:67;9613:2;9608:3;9549:67;:::i;:::-;9542:74;;9646:34;9642:1;9637:3;9633:11;9626:55;9712:8;9707:2;9702:3;9698:12;9691:30;9747:2;9742:3;9738:12;9731:19;;9532:224;;;:::o;9762:326::-;;9925:67;9989:2;9984:3;9925:67;:::i;:::-;9918:74;;10022:30;10018:1;10013:3;10009:11;10002:51;10079:2;10074:3;10070:12;10063:19;;9908:180;;;:::o;10094:368::-;;10257:67;10321:2;10316:3;10257:67;:::i;:::-;10250:74;;10354:34;10350:1;10345:3;10341:11;10334:55;10420:6;10415:2;10410:3;10406:12;10399:28;10453:2;10448:3;10444:12;10437:19;;10240:222;;;:::o;10468:323::-;;10631:67;10695:2;10690:3;10631:67;:::i;:::-;10624:74;;10728:27;10724:1;10719:3;10715:11;10708:48;10782:2;10777:3;10773:12;10766:19;;10614:177;;;:::o;10797:376::-;;10960:67;11024:2;11019:3;10960:67;:::i;:::-;10953:74;;11057:34;11053:1;11048:3;11044:11;11037:55;11123:14;11118:2;11113:3;11109:12;11102:36;11164:2;11159:3;11155:12;11148:19;;10943:230;;;:::o;11179:388::-;;11342:67;11406:2;11401:3;11342:67;:::i;:::-;11335:74;;11439:34;11435:1;11430:3;11426:11;11419:55;11505:26;11500:2;11495:3;11491:12;11484:48;11558:2;11553:3;11549:12;11542:19;;11325:242;;;:::o;11573:312::-;;11736:67;11800:2;11795:3;11736:67;:::i;:::-;11729:74;;11833:16;11829:1;11824:3;11820:11;11813:37;11876:2;11871:3;11867:12;11860:19;;11719:166;;;:::o;11891:374::-;;12054:67;12118:2;12113:3;12054:67;:::i;:::-;12047:74;;12151:34;12147:1;12142:3;12138:11;12131:55;12217:12;12212:2;12207:3;12203:12;12196:34;12256:2;12251:3;12247:12;12240:19;;12037:228;;;:::o;12271:373::-;;12434:67;12498:2;12493:3;12434:67;:::i;:::-;12427:74;;12531:34;12527:1;12522:3;12518:11;12511:55;12597:11;12592:2;12587:3;12583:12;12576:33;12635:2;12630:3;12626:12;12619:19;;12417:227;;;:::o;12650:330::-;;12813:67;12877:2;12872:3;12813:67;:::i;:::-;12806:74;;12910:34;12906:1;12901:3;12897:11;12890:55;12971:2;12966:3;12962:12;12955:19;;12796:184;;;:::o;12986:376::-;;13149:67;13213:2;13208:3;13149:67;:::i;:::-;13142:74;;13246:34;13242:1;13237:3;13233:11;13226:55;13312:14;13307:2;13302:3;13298:12;13291:36;13353:2;13348:3;13344:12;13337:19;;13132:230;;;:::o;13368:337::-;;13549:84;13631:1;13626:3;13549:84;:::i;:::-;13542:91;;13663:7;13659:1;13654:3;13650:11;13643:28;13697:1;13692:3;13688:11;13681:18;;13532:173;;;:::o;13711:330::-;;13874:67;13938:2;13933:3;13874:67;:::i;:::-;13867:74;;13971:34;13967:1;13962:3;13958:11;13951:55;14032:2;14027:3;14023:12;14016:19;;13857:184;;;:::o;14047:373::-;;14210:67;14274:2;14269:3;14210:67;:::i;:::-;14203:74;;14307:34;14303:1;14298:3;14294:11;14287:55;14373:11;14368:2;14363:3;14359:12;14352:33;14411:2;14406:3;14402:12;14395:19;;14193:227;;;:::o;14426:379::-;;14589:67;14653:2;14648:3;14589:67;:::i;:::-;14582:74;;14686:34;14682:1;14677:3;14673:11;14666:55;14752:17;14747:2;14742:3;14738:12;14731:39;14796:2;14791:3;14787:12;14780:19;;14572:233;;;:::o;14811:329::-;;14974:67;15038:2;15033:3;14974:67;:::i;:::-;14967:74;;15071:33;15067:1;15062:3;15058:11;15051:54;15131:2;15126:3;15122:12;15115:19;;14957:183;;;:::o;15146:365::-;;15309:67;15373:2;15368:3;15309:67;:::i;:::-;15302:74;;15406:34;15402:1;15397:3;15393:11;15386:55;15472:3;15467:2;15462:3;15458:12;15451:25;15502:2;15497:3;15493:12;15486:19;;15292:219;;;:::o;15517:381::-;;15680:67;15744:2;15739:3;15680:67;:::i;:::-;15673:74;;15777:34;15773:1;15768:3;15764:11;15757:55;15843:19;15838:2;15833:3;15829:12;15822:41;15889:2;15884:3;15880:12;15873:19;;15663:235;;;:::o;15904:118::-;15991:24;16009:5;15991:24;:::i;:::-;15986:3;15979:37;15969:53;;:::o;16028:701::-;;16331:95;16422:3;16413:6;16331:95;:::i;:::-;16324:102;;16443:95;16534:3;16525:6;16443:95;:::i;:::-;16436:102;;16555:148;16699:3;16555:148;:::i;:::-;16548:155;;16720:3;16713:10;;16313:416;;;;;:::o;16735:222::-;;16866:2;16855:9;16851:18;16843:26;;16879:71;16947:1;16936:9;16932:17;16923:6;16879:71;:::i;:::-;16833:124;;;;:::o;16963:640::-;;17196:3;17185:9;17181:19;17173:27;;17210:71;17278:1;17267:9;17263:17;17254:6;17210:71;:::i;:::-;17291:72;17359:2;17348:9;17344:18;17335:6;17291:72;:::i;:::-;17373;17441:2;17430:9;17426:18;17417:6;17373:72;:::i;:::-;17492:9;17486:4;17482:20;17477:2;17466:9;17462:18;17455:48;17520:76;17591:4;17582:6;17520:76;:::i;:::-;17512:84;;17163:440;;;;;;;:::o;17609:210::-;;17734:2;17723:9;17719:18;17711:26;;17747:65;17809:1;17798:9;17794:17;17785:6;17747:65;:::i;:::-;17701:118;;;;:::o;17825:313::-;;17976:2;17965:9;17961:18;17953:26;;18025:9;18019:4;18015:20;18011:1;18000:9;17996:17;17989:47;18053:78;18126:4;18117:6;18053:78;:::i;:::-;18045:86;;17943:195;;;;:::o;18144:419::-;;18348:2;18337:9;18333:18;18325:26;;18397:9;18391:4;18387:20;18383:1;18372:9;18368:17;18361:47;18425:131;18551:4;18425:131;:::i;:::-;18417:139;;18315:248;;;:::o;18569:419::-;;18773:2;18762:9;18758:18;18750:26;;18822:9;18816:4;18812:20;18808:1;18797:9;18793:17;18786:47;18850:131;18976:4;18850:131;:::i;:::-;18842:139;;18740:248;;;:::o;18994:419::-;;19198:2;19187:9;19183:18;19175:26;;19247:9;19241:4;19237:20;19233:1;19222:9;19218:17;19211:47;19275:131;19401:4;19275:131;:::i;:::-;19267:139;;19165:248;;;:::o;19419:419::-;;19623:2;19612:9;19608:18;19600:26;;19672:9;19666:4;19662:20;19658:1;19647:9;19643:17;19636:47;19700:131;19826:4;19700:131;:::i;:::-;19692:139;;19590:248;;;:::o;19844:419::-;;20048:2;20037:9;20033:18;20025:26;;20097:9;20091:4;20087:20;20083:1;20072:9;20068:17;20061:47;20125:131;20251:4;20125:131;:::i;:::-;20117:139;;20015:248;;;:::o;20269:419::-;;20473:2;20462:9;20458:18;20450:26;;20522:9;20516:4;20512:20;20508:1;20497:9;20493:17;20486:47;20550:131;20676:4;20550:131;:::i;:::-;20542:139;;20440:248;;;:::o;20694:419::-;;20898:2;20887:9;20883:18;20875:26;;20947:9;20941:4;20937:20;20933:1;20922:9;20918:17;20911:47;20975:131;21101:4;20975:131;:::i;:::-;20967:139;;20865:248;;;:::o;21119:419::-;;21323:2;21312:9;21308:18;21300:26;;21372:9;21366:4;21362:20;21358:1;21347:9;21343:17;21336:47;21400:131;21526:4;21400:131;:::i;:::-;21392:139;;21290:248;;;:::o;21544:419::-;;21748:2;21737:9;21733:18;21725:26;;21797:9;21791:4;21787:20;21783:1;21772:9;21768:17;21761:47;21825:131;21951:4;21825:131;:::i;:::-;21817:139;;21715:248;;;:::o;21969:419::-;;22173:2;22162:9;22158:18;22150:26;;22222:9;22216:4;22212:20;22208:1;22197:9;22193:17;22186:47;22250:131;22376:4;22250:131;:::i;:::-;22242:139;;22140:248;;;:::o;22394:419::-;;22598:2;22587:9;22583:18;22575:26;;22647:9;22641:4;22637:20;22633:1;22622:9;22618:17;22611:47;22675:131;22801:4;22675:131;:::i;:::-;22667:139;;22565:248;;;:::o;22819:419::-;;23023:2;23012:9;23008:18;23000:26;;23072:9;23066:4;23062:20;23058:1;23047:9;23043:17;23036:47;23100:131;23226:4;23100:131;:::i;:::-;23092:139;;22990:248;;;:::o;23244:419::-;;23448:2;23437:9;23433:18;23425:26;;23497:9;23491:4;23487:20;23483:1;23472:9;23468:17;23461:47;23525:131;23651:4;23525:131;:::i;:::-;23517:139;;23415:248;;;:::o;23669:419::-;;23873:2;23862:9;23858:18;23850:26;;23922:9;23916:4;23912:20;23908:1;23897:9;23893:17;23886:47;23950:131;24076:4;23950:131;:::i;:::-;23942:139;;23840:248;;;:::o;24094:419::-;;24298:2;24287:9;24283:18;24275:26;;24347:9;24341:4;24337:20;24333:1;24322:9;24318:17;24311:47;24375:131;24501:4;24375:131;:::i;:::-;24367:139;;24265:248;;;:::o;24519:419::-;;24723:2;24712:9;24708:18;24700:26;;24772:9;24766:4;24762:20;24758:1;24747:9;24743:17;24736:47;24800:131;24926:4;24800:131;:::i;:::-;24792:139;;24690:248;;;:::o;24944:419::-;;25148:2;25137:9;25133:18;25125:26;;25197:9;25191:4;25187:20;25183:1;25172:9;25168:17;25161:47;25225:131;25351:4;25225:131;:::i;:::-;25217:139;;25115:248;;;:::o;25369:419::-;;25573:2;25562:9;25558:18;25550:26;;25622:9;25616:4;25612:20;25608:1;25597:9;25593:17;25586:47;25650:131;25776:4;25650:131;:::i;:::-;25642:139;;25540:248;;;:::o;25794:419::-;;25998:2;25987:9;25983:18;25975:26;;26047:9;26041:4;26037:20;26033:1;26022:9;26018:17;26011:47;26075:131;26201:4;26075:131;:::i;:::-;26067:139;;25965:248;;;:::o;26219:419::-;;26423:2;26412:9;26408:18;26400:26;;26472:9;26466:4;26462:20;26458:1;26447:9;26443:17;26436:47;26500:131;26626:4;26500:131;:::i;:::-;26492:139;;26390:248;;;:::o;26644:419::-;;26848:2;26837:9;26833:18;26825:26;;26897:9;26891:4;26887:20;26883:1;26872:9;26868:17;26861:47;26925:131;27051:4;26925:131;:::i;:::-;26917:139;;26815:248;;;:::o;27069:419::-;;27273:2;27262:9;27258:18;27250:26;;27322:9;27316:4;27312:20;27308:1;27297:9;27293:17;27286:47;27350:131;27476:4;27350:131;:::i;:::-;27342:139;;27240:248;;;:::o;27494:222::-;;27625:2;27614:9;27610:18;27602:26;;27638:71;27706:1;27695:9;27691:17;27682:6;27638:71;:::i;:::-;27592:124;;;;:::o;27722:283::-;;27788:2;27782:9;27772:19;;27830:4;27822:6;27818:17;27937:6;27925:10;27922:22;27901:18;27889:10;27886:34;27883:62;27880:2;;;27948:18;;:::i;:::-;27880:2;27988:10;27984:2;27977:22;27762:243;;;;:::o;28011:331::-;;28162:18;28154:6;28151:30;28148:2;;;28184:18;;:::i;:::-;28148:2;28269:4;28265:9;28258:4;28250:6;28246:17;28242:33;28234:41;;28330:4;28324;28320:15;28312:23;;28077:265;;;:::o;28348:332::-;;28500:18;28492:6;28489:30;28486:2;;;28522:18;;:::i;:::-;28486:2;28607:4;28603:9;28596:4;28588:6;28584:17;28580:33;28572:41;;28668:4;28662;28658:15;28650:23;;28415:265;;;:::o;28686:98::-;;28771:5;28765:12;28755:22;;28744:40;;;:::o;28790:99::-;;28876:5;28870:12;28860:22;;28849:40;;;:::o;28895:168::-;;29012:6;29007:3;29000:19;29052:4;29047:3;29043:14;29028:29;;28990:73;;;;:::o;29069:169::-;;29187:6;29182:3;29175:19;29227:4;29222:3;29218:14;29203:29;;29165:73;;;;:::o;29244:148::-;;29383:3;29368:18;;29358:34;;;;:::o;29398:305::-;;29457:20;29475:1;29457:20;:::i;:::-;29452:25;;29491:20;29509:1;29491:20;:::i;:::-;29486:25;;29645:1;29577:66;29573:74;29570:1;29567:81;29564:2;;;29651:18;;:::i;:::-;29564:2;29695:1;29692;29688:9;29681:16;;29442:261;;;;:::o;29709:185::-;;29766:20;29784:1;29766:20;:::i;:::-;29761:25;;29800:20;29818:1;29800:20;:::i;:::-;29795:25;;29839:1;29829:2;;29844:18;;:::i;:::-;29829:2;29886:1;29883;29879:9;29874:14;;29751:143;;;;:::o;29900:348::-;;29963:20;29981:1;29963:20;:::i;:::-;29958:25;;29997:20;30015:1;29997:20;:::i;:::-;29992:25;;30185:1;30117:66;30113:74;30110:1;30107:81;30102:1;30095:9;30088:17;30084:105;30081:2;;;30192:18;;:::i;:::-;30081:2;30240:1;30237;30233:9;30222:20;;29948:300;;;;:::o;30254:191::-;;30314:20;30332:1;30314:20;:::i;:::-;30309:25;;30348:20;30366:1;30348:20;:::i;:::-;30343:25;;30387:1;30384;30381:8;30378:2;;;30392:18;;:::i;:::-;30378:2;30437:1;30434;30430:9;30422:17;;30299:146;;;;:::o;30451:96::-;;30517:24;30535:5;30517:24;:::i;:::-;30506:35;;30496:51;;;:::o;30553:90::-;;30630:5;30623:13;30616:21;30605:32;;30595:48;;;:::o;30649:149::-;;30725:66;30718:5;30714:78;30703:89;;30693:105;;;:::o;30804:126::-;;30881:42;30874:5;30870:54;30859:65;;30849:81;;;:::o;30936:77::-;;31002:5;30991:16;;30981:32;;;:::o;31019:154::-;31103:6;31098:3;31093;31080:30;31165:1;31156:6;31151:3;31147:16;31140:27;31070:103;;;:::o;31179:307::-;31247:1;31257:113;31271:6;31268:1;31265:13;31257:113;;;31356:1;31351:3;31347:11;31341:18;31337:1;31332:3;31328:11;31321:39;31293:2;31290:1;31286:10;31281:15;;31257:113;;;31388:6;31385:1;31382:13;31379:2;;;31468:1;31459:6;31454:3;31450:16;31443:27;31379:2;31228:258;;;;:::o;31492:320::-;;31573:1;31567:4;31563:12;31553:22;;31620:1;31614:4;31610:12;31641:18;31631:2;;31697:4;31689:6;31685:17;31675:27;;31631:2;31759;31751:6;31748:14;31728:18;31725:38;31722:2;;;31778:18;;:::i;:::-;31722:2;31543:269;;;;:::o;31818:233::-;;31880:24;31898:5;31880:24;:::i;:::-;31871:33;;31926:66;31919:5;31916:77;31913:2;;;31996:18;;:::i;:::-;31913:2;32043:1;32036:5;32032:13;32025:20;;31861:190;;;:::o;32057:176::-;;32106:20;32124:1;32106:20;:::i;:::-;32101:25;;32140:20;32158:1;32140:20;:::i;:::-;32135:25;;32179:1;32169:2;;32184:18;;:::i;:::-;32169:2;32225:1;32222;32218:9;32213:14;;32091:142;;;;:::o;32239:180::-;32287:77;32284:1;32277:88;32384:4;32381:1;32374:15;32408:4;32405:1;32398:15;32425:180;32473:77;32470:1;32463:88;32570:4;32567:1;32560:15;32594:4;32591:1;32584:15;32611:180;32659:77;32656:1;32649:88;32756:4;32753:1;32746:15;32780:4;32777:1;32770:15;32797:180;32845:77;32842:1;32835:88;32942:4;32939:1;32932:15;32966:4;32963:1;32956:15;32983:102;;33075:2;33071:7;33066:2;33059:5;33055:14;33051:28;33041:38;;33031:54;;;:::o;33091:122::-;33164:24;33182:5;33164:24;:::i;:::-;33157:5;33154:35;33144:2;;33203:1;33200;33193:12;33144:2;33134:79;:::o;33219:116::-;33289:21;33304:5;33289:21;:::i;:::-;33282:5;33279:32;33269:2;;33325:1;33322;33315:12;33269:2;33259:76;:::o;33341:120::-;33413:23;33430:5;33413:23;:::i;:::-;33406:5;33403:34;33393:2;;33451:1;33448;33441:12;33393:2;33383:78;:::o;33467:122::-;33540:24;33558:5;33540:24;:::i;:::-;33533:5;33530:35;33520:2;;33579:1;33576;33569:12;33520:2;33510:79;:::o

Swarm Source

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