ETH Price: $3,644.74 (-0.41%)
 

Overview

Max Total Supply

670 DAO

Holders

51

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 DAO
0xf2A5a34db2E9974a51627D2b594dc6488cfc8461
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:
scartoshiDAO

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-03-15
*/

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

/**
 *Submitted for verification at Etherscan.io on 2022-03-01
 */

// File @openzeppelin/contracts/utils/[email protected]

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

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

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

// File @openzeppelin/contracts/access/[email protected]

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

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

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

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

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

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

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

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

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

// File @openzeppelin/contracts/utils/[email protected]

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

/**
 * @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/introspection/[email protected]

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

/**
 * @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/token/ERC721/[email protected]

// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol)

/**
 * @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/[email protected]

// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol)

/**
 * @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/token/ERC721/extensions/[email protected]

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

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

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

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

// File @openzeppelin/contracts/token/ERC721/extensions/[email protected]

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

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

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

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

// File @openzeppelin/contracts/utils/[email protected]

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

/**
 * @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/utils/introspection/[email protected]

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

/**
 * @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 contracts/ERC721A.sol

// Creator: Chiru Labs

/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata and Enumerable extension. Built to optimize for lower gas during batch mints.
 *
 * Assumes serials are sequentially minted starting at 0 (e.g. 0, 1, 2, 3..).
 *
 * Does not support burning tokens to address(0).
 *
 * Assumes that an owner cannot have more than the 2**128 (max value of uint128) of supply
 */
contract ERC721A is
    Context,
    ERC165,
    IERC721,
    IERC721Metadata,
    IERC721Enumerable
{
    using Address for address;
    using Strings for uint256;

    struct TokenOwnership {
        address addr;
        uint64 startTimestamp;
    }

    struct AddressData {
        uint128 balance;
        uint128 numberMinted;
    }

    uint256 internal currentIndex = 0;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to ownership details
    // An empty struct value does not necessarily mean the token is unowned. See ownershipOf implementation for details.
    mapping(uint256 => TokenOwnership) internal _ownerships;

    // Mapping owner address to address data
    mapping(address => AddressData) private _addressData;

    // 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;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

    /**
     * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
     * This read function is O(totalSupply). If calling from a separate contract, be sure to test gas first.
     * It may also degrade with extremely large collection sizes (e.g >> 10000), test for your use case.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index)
        public
        view
        override
        returns (uint256)
    {
        require(index < balanceOf(owner), "ERC721A: owner index out of bounds");
        uint256 numMintedSoFar = totalSupply();
        uint256 tokenIdsIdx = 0;
        address currOwnershipAddr = address(0);
        for (uint256 i = 0; i < numMintedSoFar; i++) {
            TokenOwnership memory ownership = _ownerships[i];
            if (ownership.addr != address(0)) {
                currOwnershipAddr = ownership.addr;
            }
            if (currOwnershipAddr == owner) {
                if (tokenIdsIdx == index) {
                    return i;
                }
                tokenIdsIdx++;
            }
        }
        revert("ERC721A: unable to get token of owner by index");
    }

    /**
     * @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 ||
            interfaceId == type(IERC721Enumerable).interfaceId ||
            super.supportsInterface(interfaceId);
    }

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

    function _numberMinted(address owner) internal view returns (uint256) {
        require(
            owner != address(0),
            "ERC721A: number minted query for the zero address"
        );
        return uint256(_addressData[owner].numberMinted);
    }

    function ownershipOf(uint256 tokenId)
        internal
        view
        returns (TokenOwnership memory)
    {
        require(_exists(tokenId), "ERC721A: owner query for nonexistent token");

        for (uint256 curr = tokenId; ; curr--) {
            TokenOwnership memory ownership = _ownerships[curr];
            if (ownership.addr != address(0)) {
                return ownership;
            }
        }

        revert("ERC721A: unable to determine the owner of token");
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view override returns (address) {
        return ownershipOf(tokenId).addr;
    }

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

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

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

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

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

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

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

        _approve(to, tokenId, owner);
    }

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

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved)
        public
        override
    {
        require(operator != _msgSender(), "ERC721A: approve to caller");

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_msgSender(), operator, approved);
    }

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

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

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

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public override {
        _transfer(from, to, tokenId);
        require(
            _checkOnERC721Received(from, to, tokenId, _data),
            "ERC721A: 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`),
     */
    function _exists(uint256 tokenId) internal view returns (bool) {
        return tokenId < currentIndex;
    }

    function _safeMint(address to, uint256 quantity) internal {
        _safeMint(to, quantity, "");
    }

    /**
     * @dev Mints `quantity` tokens and transfers them to `to`.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `quantity` cannot be larger than the max batch size.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(
        address to,
        uint256 quantity,
        bytes memory _data
    ) internal {
        uint256 startTokenId = currentIndex;
        require(to != address(0), "ERC721A: mint to the zero address");
        // We know if the first token in the batch doesn't exist, the other ones don't as well, because of serial ordering.
        require(!_exists(startTokenId), "ERC721A: token already minted");
        require(quantity > 0, "ERC721A: quantity must be greater 0");

        _beforeTokenTransfers(address(0), to, startTokenId, quantity);

        AddressData memory addressData = _addressData[to];
        _addressData[to] = AddressData(
            addressData.balance + uint128(quantity),
            addressData.numberMinted + uint128(quantity)
        );
        _ownerships[startTokenId] = TokenOwnership(to, uint64(block.timestamp));

        uint256 updatedIndex = startTokenId;

        for (uint256 i = 0; i < quantity; i++) {
            emit Transfer(address(0), to, updatedIndex);
            require(
                _checkOnERC721Received(address(0), to, updatedIndex, _data),
                "ERC721A: transfer to non ERC721Receiver implementer"
            );
            updatedIndex++;
        }

        currentIndex = updatedIndex;
        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *
     * 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
    ) private {
        TokenOwnership memory prevOwnership = ownershipOf(tokenId);

        bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr ||
            getApproved(tokenId) == _msgSender() ||
            isApprovedForAll(prevOwnership.addr, _msgSender()));

        require(
            isApprovedOrOwner,
            "ERC721A: transfer caller is not owner nor approved"
        );

        require(
            prevOwnership.addr == from,
            "ERC721A: transfer from incorrect owner"
        );
        require(to != address(0), "ERC721A: transfer to the zero address");

        _beforeTokenTransfers(from, to, tokenId, 1);

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

        // Underflow of the sender's balance is impossible because we check for
        // ownership above and the recipient's balance can't realistically overflow.
        unchecked {
            _addressData[from].balance -= 1;
            _addressData[to].balance += 1;
        }

        _ownerships[tokenId] = TokenOwnership(to, uint64(block.timestamp));

        // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it.
        // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
        uint256 nextTokenId = tokenId + 1;
        if (_ownerships[nextTokenId].addr == address(0)) {
            if (_exists(nextTokenId)) {
                _ownerships[nextTokenId] = TokenOwnership(
                    prevOwnership.addr,
                    prevOwnership.startTimestamp
                );
            }
        }

        emit Transfer(from, to, tokenId);
        _afterTokenTransfers(from, to, tokenId, 1);
    }

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

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

    /**
     * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting.
     *
     * startTokenId - the first token id to be transferred
     * quantity - the amount to be transferred
     *
     * 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`.
     */
    function _beforeTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}

    /**
     * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes
     * minting.
     *
     * startTokenId - the first token id to be transferred
     * quantity - the amount to be transferred
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero.
     * - `from` and `to` are never both zero.
     */
    function _afterTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}
}

contract scartoshiDAO is ERC721A, Ownable {
    string public baseURI =
        "ipfs://QmepPkarrgDJDGARoKziMeuBXTqaNvZkWw77zT4HGBVZjp/";
    string public constant baseExtension = ".json";
    address public constant proxyRegistryAddress =
        0xa5409ec958C83C3f309868babACA7c86DCB077c1;

    uint256 public constant MAX_PER_TX_FREE = 10;
    uint256 public constant MAX_PER_TX = 20;
    uint256 public constant FREE_MAX_SUPPLY = 333;
    uint256 public constant MAX_SUPPLY = 969;
    uint256 public constant price = 0.0069 ether;

    bool public paused = true;

    constructor() ERC721A("scartoshiDAO", "DAO") {}

    function mint(uint256 _amount) public payable {
        require(!paused, "Paused");
        require(MAX_SUPPLY >= totalSupply() + _amount, "Exceeds max supply");
        require(_amount > 0, "No 0 mints");

        if (FREE_MAX_SUPPLY >= totalSupply() + _amount) {
            require(MAX_PER_TX_FREE >= _amount, "Excess max per free tx");
        } else {
            require(MAX_PER_TX >= _amount, "Excess max per paid tx");
            require(msg.value >= _amount * price, "Invalid funds provided");
        }

        _safeMint(msg.sender, _amount);
    }

    function isApprovedForAll(address owner, address operator)
        public
        view
        override
        returns (bool)
    {
        // Whitelist OpenSea proxy contract for easy trading.
        ProxyRegistry proxyRegistry = ProxyRegistry(proxyRegistryAddress);
        if (address(proxyRegistry.proxies(owner)) == operator) {
            return true;
        }

        return super.isApprovedForAll(owner, operator);
    }

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

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

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

    function tokenURI(uint256 _tokenId)
        public
        view
        override
        returns (string memory)
    {
        require(_exists(_tokenId), "Token does not exist.");
        return
            bytes(baseURI).length > 0
                ? string(
                    abi.encodePacked(
                        baseURI,
                        Strings.toString(_tokenId),
                        baseExtension
                    )
                )
                : "";
    }
}

contract OwnableDelegateProxy {}

contract ProxyRegistry {
    mapping(address => OwnableDelegateProxy) public proxies;
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"FREE_MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PER_TX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PER_TX_FREE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"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":[{"internalType":"uint256","name":"_amount","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":"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":"proxyRegistryAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405260008055604051806060016040528060368152602001620046fc603691396008908051906020019062000039929190620001f7565b506001600960006101000a81548160ff0219169083151502179055503480156200006257600080fd5b506040518060400160405280600c81526020017f73636172746f73686944414f00000000000000000000000000000000000000008152506040518060400160405280600381526020017f44414f00000000000000000000000000000000000000000000000000000000008152508160019080519060200190620000e7929190620001f7565b50806002908051906020019062000100929190620001f7565b50505062000123620001176200012960201b60201c565b6200013160201b60201c565b6200030c565b600033905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200020590620002a7565b90600052602060002090601f01602090048101928262000229576000855562000275565b82601f106200024457805160ff191683800117855562000275565b8280016001018555821562000275579182015b828111156200027457825182559160200191906001019062000257565b5b50905062000284919062000288565b5090565b5b80821115620002a357600081600090555060010162000289565b5090565b60006002820490506001821680620002c057607f821691505b60208210811415620002d757620002d6620002dd565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6143e0806200031c6000396000f3fe6080604052600436106101e35760003560e01c80636c0360eb11610102578063a22cb46511610095578063cd7c032611610064578063cd7c0326146106d5578063e985e9c514610700578063f2fde38b1461073d578063f43a22dc14610766576101e3565b8063a22cb4651461061b578063b88d4fde14610644578063c66828621461066d578063c87b56dd14610698576101e3565b80638da5cb5b116100d15780638da5cb5b1461057e57806395d89b41146105a9578063a035b1fe146105d4578063a0712d68146105ff576101e3565b80636c0360eb146104d457806370a08231146104ff578063715018a61461053c5780638069876d14610553576101e3565b806332cb6b0c1161017a5780634f6ccce7116101495780634f6ccce71461040657806355f804b3146104435780635c975abb1461046c5780636352211e14610497576101e3565b806332cb6b0c146103705780633ccfd60b1461039b57806342842e0e146103b2578063463fff79146103db576101e3565b8063095ea7b3116101b6578063095ea7b3146102b657806318160ddd146102df57806323b872dd1461030a5780632f745c5914610333576101e3565b806301ffc9a7146101e857806302329a291461022557806306fdde031461024e578063081812fc14610279575b600080fd5b3480156101f457600080fd5b5061020f600480360381019061020a9190612f74565b610791565b60405161021c9190613ae9565b60405180910390f35b34801561023157600080fd5b5061024c60048036038101906102479190612f4b565b6108db565b005b34801561025a57600080fd5b50610263610974565b6040516102709190613b04565b60405180910390f35b34801561028557600080fd5b506102a0600480360381019061029b9190613030565b610a06565b6040516102ad9190613a82565b60405180910390f35b3480156102c257600080fd5b506102dd60048036038101906102d89190612f0f565b610a8b565b005b3480156102eb57600080fd5b506102f4610ba4565b6040516103019190613e46565b60405180910390f35b34801561031657600080fd5b50610331600480360381019061032c9190612e09565b610bad565b005b34801561033f57600080fd5b5061035a60048036038101906103559190612f0f565b610bbd565b6040516103679190613e46565b60405180910390f35b34801561037c57600080fd5b50610385610dbb565b6040516103929190613e46565b60405180910390f35b3480156103a757600080fd5b506103b0610dc1565b005b3480156103be57600080fd5b506103d960048036038101906103d49190612e09565b610eb6565b005b3480156103e757600080fd5b506103f0610ed6565b6040516103fd9190613e46565b60405180910390f35b34801561041257600080fd5b5061042d60048036038101906104289190613030565b610edb565b60405161043a9190613e46565b60405180910390f35b34801561044f57600080fd5b5061046a60048036038101906104659190612fef565b610f2e565b005b34801561047857600080fd5b50610481610fc4565b60405161048e9190613ae9565b60405180910390f35b3480156104a357600080fd5b506104be60048036038101906104b99190613030565b610fd7565b6040516104cb9190613a82565b60405180910390f35b3480156104e057600080fd5b506104e9610fed565b6040516104f69190613b04565b60405180910390f35b34801561050b57600080fd5b5061052660048036038101906105219190612da4565b61107b565b6040516105339190613e46565b60405180910390f35b34801561054857600080fd5b50610551611164565b005b34801561055f57600080fd5b506105686111ec565b6040516105759190613e46565b60405180910390f35b34801561058a57600080fd5b506105936111f2565b6040516105a09190613a82565b60405180910390f35b3480156105b557600080fd5b506105be61121c565b6040516105cb9190613b04565b60405180910390f35b3480156105e057600080fd5b506105e96112ae565b6040516105f69190613e46565b60405180910390f35b61061960048036038101906106149190613030565b6112b9565b005b34801561062757600080fd5b50610642600480360381019061063d9190612ed3565b6114ae565b005b34801561065057600080fd5b5061066b60048036038101906106669190612e58565b61162f565b005b34801561067957600080fd5b5061068261168b565b60405161068f9190613b04565b60405180910390f35b3480156106a457600080fd5b506106bf60048036038101906106ba9190613030565b6116c4565b6040516106cc9190613b04565b60405180910390f35b3480156106e157600080fd5b506106ea6117a3565b6040516106f79190613a82565b60405180910390f35b34801561070c57600080fd5b5061072760048036038101906107229190612dcd565b6117bb565b6040516107349190613ae9565b60405180910390f35b34801561074957600080fd5b50610764600480360381019061075f9190612da4565b6118af565b005b34801561077257600080fd5b5061077b6119a7565b6040516107889190613e46565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061085c57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108c457507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108d457506108d3826119ac565b5b9050919050565b6108e3611a16565b73ffffffffffffffffffffffffffffffffffffffff166109016111f2565b73ffffffffffffffffffffffffffffffffffffffff1614610957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094e90613ce6565b60405180910390fd5b80600960006101000a81548160ff02191690831515021790555050565b606060018054610983906141be565b80601f01602080910402602001604051908101604052809291908181526020018280546109af906141be565b80156109fc5780601f106109d1576101008083540402835291602001916109fc565b820191906000526020600020905b8154815290600101906020018083116109df57829003601f168201915b5050505050905090565b6000610a1182611a1e565b610a50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4790613e26565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a9682610fd7565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610afe90613d66565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b26611a16565b73ffffffffffffffffffffffffffffffffffffffff161480610b555750610b5481610b4f611a16565b6117bb565b5b610b94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8b90613c46565b60405180910390fd5b610b9f838383611a2b565b505050565b60008054905090565b610bb8838383611add565b505050565b6000610bc88361107b565b8210610c09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0090613b26565b60405180910390fd5b6000610c13610ba4565b905060008060005b83811015610d79576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610d0d57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d655786841415610d56578195505050505050610db5565b8380610d61906141f0565b9450505b508080610d71906141f0565b915050610c1b565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dac90613e06565b60405180910390fd5b92915050565b6103c981565b610dc9611a16565b73ffffffffffffffffffffffffffffffffffffffff16610de76111f2565b73ffffffffffffffffffffffffffffffffffffffff1614610e3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3490613ce6565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff1647604051610e6390613a6d565b60006040518083038185875af1925050503d8060008114610ea0576040519150601f19603f3d011682016040523d82523d6000602084013e610ea5565b606091505b5050905080610eb357600080fd5b50565b610ed18383836040518060200160405280600081525061162f565b505050565b600a81565b6000610ee5610ba4565b8210610f26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1d90613be6565b60405180910390fd5b819050919050565b610f36611a16565b73ffffffffffffffffffffffffffffffffffffffff16610f546111f2565b73ffffffffffffffffffffffffffffffffffffffff1614610faa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa190613ce6565b60405180910390fd5b8060089080519060200190610fc0929190612b79565b5050565b600960009054906101000a900460ff1681565b6000610fe282612084565b600001519050919050565b60088054610ffa906141be565b80601f0160208091040260200160405190810160405280929190818152602001828054611026906141be565b80156110735780601f1061104857610100808354040283529160200191611073565b820191906000526020600020905b81548152906001019060200180831161105657829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e390613c86565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b61116c611a16565b73ffffffffffffffffffffffffffffffffffffffff1661118a6111f2565b73ffffffffffffffffffffffffffffffffffffffff16146111e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d790613ce6565b60405180910390fd5b6111ea60006121df565b565b61014d81565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606002805461122b906141be565b80601f0160208091040260200160405190810160405280929190818152602001828054611257906141be565b80156112a45780601f10611279576101008083540402835291602001916112a4565b820191906000526020600020905b81548152906001019060200180831161128757829003601f168201915b5050505050905090565b6618838370f3400081565b600960009054906101000a900460ff1615611309576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130090613b46565b60405180910390fd5b80611312610ba4565b61131c9190613f9b565b6103c91015611360576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135790613c66565b60405180910390fd5b600081116113a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139a90613ba6565b60405180910390fd5b806113ac610ba4565b6113b69190613f9b565b61014d106114075780600a1015611402576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f990613c26565b60405180910390fd5b6114a1565b806014101561144b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144290613bc6565b60405180910390fd5b6618838370f340008161145e9190614022565b3410156114a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149790613d46565b60405180910390fd5b5b6114ab33826122a5565b50565b6114b6611a16565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611524576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151b90613d06565b60405180910390fd5b8060066000611531611a16565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166115de611a16565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516116239190613ae9565b60405180910390a35050565b61163a848484611add565b611646848484846122c3565b611685576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167c90613da6565b60405180910390fd5b50505050565b6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525081565b60606116cf82611a1e565b61170e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170590613ca6565b60405180910390fd5b60006008805461171d906141be565b905011611739576040518060200160405280600081525061179c565b60086117448361245a565b6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060405160200161178c93929190613a3c565b6040516020818303038152906040525b9050919050565b73a5409ec958c83c3f309868babaca7c86dcb077c181565b60008073a5409ec958c83c3f309868babaca7c86dcb077c190508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663c4552791866040518263ffffffff1660e01b81526004016118259190613a82565b60206040518083038186803b15801561183d57600080fd5b505afa158015611851573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118759190612fc6565b73ffffffffffffffffffffffffffffffffffffffff16141561189b5760019150506118a9565b6118a58484612607565b9150505b92915050565b6118b7611a16565b73ffffffffffffffffffffffffffffffffffffffff166118d56111f2565b73ffffffffffffffffffffffffffffffffffffffff161461192b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192290613ce6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561199b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199290613b66565b60405180910390fd5b6119a4816121df565b50565b601481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b6000805482109050919050565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000611ae882612084565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16611b0f611a16565b73ffffffffffffffffffffffffffffffffffffffff161480611b6b5750611b34611a16565b73ffffffffffffffffffffffffffffffffffffffff16611b5384610a06565b73ffffffffffffffffffffffffffffffffffffffff16145b80611b875750611b868260000151611b81611a16565b6117bb565b5b905080611bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc090613d26565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614611c3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3290613cc6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611cab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca290613c06565b60405180910390fd5b611cb8858585600161269b565b611cc86000848460000151611a2b565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050506000600184611ece9190613f9b565b9050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561201457611f4481611a1e565b15612013576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506003600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461207c86868660016126a1565b505050505050565b61208c612bff565b61209582611a1e565b6120d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120cb90613b86565b60405180910390fd5b60008290505b6000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146121c65780925050506121da565b5080806121d290614194565b9150506120da565b919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6122bf8282604051806020016040528060008152506126a7565b5050565b60006122e48473ffffffffffffffffffffffffffffffffffffffff16612b66565b1561244d578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261230d611a16565b8786866040518563ffffffff1660e01b815260040161232f9493929190613a9d565b602060405180830381600087803b15801561234957600080fd5b505af192505050801561237a57506040513d601f19601f820116820180604052508101906123779190612f9d565b60015b6123fd573d80600081146123aa576040519150601f19603f3d011682016040523d82523d6000602084013e6123af565b606091505b506000815114156123f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ec90613da6565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612452565b600190505b949350505050565b606060008214156124a2576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612602565b600082905060005b600082146124d45780806124bd906141f0565b915050600a826124cd9190613ff1565b91506124aa565b60008167ffffffffffffffff811115612516577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156125485781602001600182028036833780820191505090505b5090505b600085146125fb57600182612561919061407c565b9150600a856125709190614239565b603061257c9190613f9b565b60f81b8183815181106125b8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856125f49190613ff1565b945061254c565b8093505050505b919050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b50505050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561271d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271490613de6565b60405180910390fd5b61272681611a1e565b15612766576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275d90613dc6565b60405180910390fd5b600083116127a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a090613d86565b60405180910390fd5b6127b6600085838661269b565b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050905060405180604001604052808583600001516128b39190613f55565b6fffffffffffffffffffffffffffffffff1681526020018583602001516128da9190613f55565b6fffffffffffffffffffffffffffffffff16815250600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b85811015612b4957818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612ae960008884886122c3565b612b28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1f90613da6565b60405180910390fd5b8180612b33906141f0565b9250508080612b41906141f0565b915050612a78565b5080600081905550612b5e60008785886126a1565b505050505050565b600080823b905060008111915050919050565b828054612b85906141be565b90600052602060002090601f016020900481019282612ba75760008555612bee565b82601f10612bc057805160ff1916838001178555612bee565b82800160010185558215612bee579182015b82811115612bed578251825591602001919060010190612bd2565b5b509050612bfb9190612c39565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115612c52576000816000905550600101612c3a565b5090565b6000612c69612c6484613e92565b613e61565b905082815260208101848484011115612c8157600080fd5b612c8c848285614152565b509392505050565b6000612ca7612ca284613ec2565b613e61565b905082815260208101848484011115612cbf57600080fd5b612cca848285614152565b509392505050565b600081359050612ce181614337565b92915050565b600081359050612cf68161434e565b92915050565b600081359050612d0b81614365565b92915050565b600081519050612d2081614365565b92915050565b600082601f830112612d3757600080fd5b8135612d47848260208601612c56565b91505092915050565b600081519050612d5f8161437c565b92915050565b600082601f830112612d7657600080fd5b8135612d86848260208601612c94565b91505092915050565b600081359050612d9e81614393565b92915050565b600060208284031215612db657600080fd5b6000612dc484828501612cd2565b91505092915050565b60008060408385031215612de057600080fd5b6000612dee85828601612cd2565b9250506020612dff85828601612cd2565b9150509250929050565b600080600060608486031215612e1e57600080fd5b6000612e2c86828701612cd2565b9350506020612e3d86828701612cd2565b9250506040612e4e86828701612d8f565b9150509250925092565b60008060008060808587031215612e6e57600080fd5b6000612e7c87828801612cd2565b9450506020612e8d87828801612cd2565b9350506040612e9e87828801612d8f565b925050606085013567ffffffffffffffff811115612ebb57600080fd5b612ec787828801612d26565b91505092959194509250565b60008060408385031215612ee657600080fd5b6000612ef485828601612cd2565b9250506020612f0585828601612ce7565b9150509250929050565b60008060408385031215612f2257600080fd5b6000612f3085828601612cd2565b9250506020612f4185828601612d8f565b9150509250929050565b600060208284031215612f5d57600080fd5b6000612f6b84828501612ce7565b91505092915050565b600060208284031215612f8657600080fd5b6000612f9484828501612cfc565b91505092915050565b600060208284031215612faf57600080fd5b6000612fbd84828501612d11565b91505092915050565b600060208284031215612fd857600080fd5b6000612fe684828501612d50565b91505092915050565b60006020828403121561300157600080fd5b600082013567ffffffffffffffff81111561301b57600080fd5b61302784828501612d65565b91505092915050565b60006020828403121561304257600080fd5b600061305084828501612d8f565b91505092915050565b613062816140b0565b82525050565b613071816140c2565b82525050565b600061308282613f07565b61308c8185613f1d565b935061309c818560208601614161565b6130a581614326565b840191505092915050565b60006130bb82613f12565b6130c58185613f39565b93506130d5818560208601614161565b6130de81614326565b840191505092915050565b60006130f482613f12565b6130fe8185613f4a565b935061310e818560208601614161565b80840191505092915050565b60008154613127816141be565b6131318186613f4a565b9450600182166000811461314c576001811461315d57613190565b60ff19831686528186019350613190565b61316685613ef2565b60005b8381101561318857815481890152600182019150602081019050613169565b838801955050505b50505092915050565b60006131a6602283613f39565b91507f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008301527f64730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061320c600683613f39565b91507f50617573656400000000000000000000000000000000000000000000000000006000830152602082019050919050565b600061324c602683613f39565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006132b2602a83613f39565b91507f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008301527f74656e7420746f6b656e000000000000000000000000000000000000000000006020830152604082019050919050565b6000613318600a83613f39565b91507f4e6f2030206d696e7473000000000000000000000000000000000000000000006000830152602082019050919050565b6000613358601683613f39565b91507f457863657373206d6178207065722070616964207478000000000000000000006000830152602082019050919050565b6000613398602383613f39565b91507f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008301527f6e647300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006133fe602583613f39565b91507f455243373231413a207472616e7366657220746f20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613464601683613f39565b91507f457863657373206d6178207065722066726565207478000000000000000000006000830152602082019050919050565b60006134a4603983613f39565b91507f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f76656420666f7220616c6c000000000000006020830152604082019050919050565b600061350a601283613f39565b91507f45786365656473206d617820737570706c7900000000000000000000000000006000830152602082019050919050565b600061354a602b83613f39565b91507f455243373231413a2062616c616e636520717565727920666f7220746865207a60008301527f65726f20616464726573730000000000000000000000000000000000000000006020830152604082019050919050565b60006135b0601583613f39565b91507f546f6b656e20646f6573206e6f742065786973742e00000000000000000000006000830152602082019050919050565b60006135f0602683613f39565b91507f455243373231413a207472616e736665722066726f6d20696e636f727265637460008301527f206f776e657200000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613656602083613f39565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613696601a83613f39565b91507f455243373231413a20617070726f766520746f2063616c6c65720000000000006000830152602082019050919050565b60006136d6603283613f39565b91507f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008301527f6f776e6572206e6f7220617070726f76656400000000000000000000000000006020830152604082019050919050565b600061373c601683613f39565b91507f496e76616c69642066756e64732070726f7669646564000000000000000000006000830152602082019050919050565b600061377c602283613f39565b91507f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008301527f65720000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006137e2600083613f2e565b9150600082019050919050565b60006137fc602383613f39565b91507f455243373231413a207175616e74697479206d7573742062652067726561746560008301527f72203000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613862603383613f39565b91507f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008301527f6563656976657220696d706c656d656e746572000000000000000000000000006020830152604082019050919050565b60006138c8601d83613f39565b91507f455243373231413a20746f6b656e20616c7265616479206d696e7465640000006000830152602082019050919050565b6000613908602183613f39565b91507f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008301527f73000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061396e602e83613f39565b91507f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008301527f6f776e657220627920696e6465780000000000000000000000000000000000006020830152604082019050919050565b60006139d4602d83613f39565b91507f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008301527f78697374656e7420746f6b656e000000000000000000000000000000000000006020830152604082019050919050565b613a3681614148565b82525050565b6000613a48828661311a565b9150613a5482856130e9565b9150613a6082846130e9565b9150819050949350505050565b6000613a78826137d5565b9150819050919050565b6000602082019050613a976000830184613059565b92915050565b6000608082019050613ab26000830187613059565b613abf6020830186613059565b613acc6040830185613a2d565b8181036060830152613ade8184613077565b905095945050505050565b6000602082019050613afe6000830184613068565b92915050565b60006020820190508181036000830152613b1e81846130b0565b905092915050565b60006020820190508181036000830152613b3f81613199565b9050919050565b60006020820190508181036000830152613b5f816131ff565b9050919050565b60006020820190508181036000830152613b7f8161323f565b9050919050565b60006020820190508181036000830152613b9f816132a5565b9050919050565b60006020820190508181036000830152613bbf8161330b565b9050919050565b60006020820190508181036000830152613bdf8161334b565b9050919050565b60006020820190508181036000830152613bff8161338b565b9050919050565b60006020820190508181036000830152613c1f816133f1565b9050919050565b60006020820190508181036000830152613c3f81613457565b9050919050565b60006020820190508181036000830152613c5f81613497565b9050919050565b60006020820190508181036000830152613c7f816134fd565b9050919050565b60006020820190508181036000830152613c9f8161353d565b9050919050565b60006020820190508181036000830152613cbf816135a3565b9050919050565b60006020820190508181036000830152613cdf816135e3565b9050919050565b60006020820190508181036000830152613cff81613649565b9050919050565b60006020820190508181036000830152613d1f81613689565b9050919050565b60006020820190508181036000830152613d3f816136c9565b9050919050565b60006020820190508181036000830152613d5f8161372f565b9050919050565b60006020820190508181036000830152613d7f8161376f565b9050919050565b60006020820190508181036000830152613d9f816137ef565b9050919050565b60006020820190508181036000830152613dbf81613855565b9050919050565b60006020820190508181036000830152613ddf816138bb565b9050919050565b60006020820190508181036000830152613dff816138fb565b9050919050565b60006020820190508181036000830152613e1f81613961565b9050919050565b60006020820190508181036000830152613e3f816139c7565b9050919050565b6000602082019050613e5b6000830184613a2d565b92915050565b6000604051905081810181811067ffffffffffffffff82111715613e8857613e876142f7565b5b8060405250919050565b600067ffffffffffffffff821115613ead57613eac6142f7565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115613edd57613edc6142f7565b5b601f19601f8301169050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613f608261410c565b9150613f6b8361410c565b9250826fffffffffffffffffffffffffffffffff03821115613f9057613f8f61426a565b5b828201905092915050565b6000613fa682614148565b9150613fb183614148565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613fe657613fe561426a565b5b828201905092915050565b6000613ffc82614148565b915061400783614148565b92508261401757614016614299565b5b828204905092915050565b600061402d82614148565b915061403883614148565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156140715761407061426a565b5b828202905092915050565b600061408782614148565b915061409283614148565b9250828210156140a5576140a461426a565b5b828203905092915050565b60006140bb82614128565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6000614105826140b0565b9050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561417f578082015181840152602081019050614164565b8381111561418e576000848401525b50505050565b600061419f82614148565b915060008214156141b3576141b261426a565b5b600182039050919050565b600060028204905060018216806141d657607f821691505b602082108114156141ea576141e96142c8565b5b50919050565b60006141fb82614148565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561422e5761422d61426a565b5b600182019050919050565b600061424482614148565b915061424f83614148565b92508261425f5761425e614299565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b614340816140b0565b811461434b57600080fd5b50565b614357816140c2565b811461436257600080fd5b50565b61436e816140ce565b811461437957600080fd5b50565b614385816140fa565b811461439057600080fd5b50565b61439c81614148565b81146143a757600080fd5b5056fea2646970667358221220c2b628d50f4aa0a17c8dbbac6777030392e16e8c8e9b20ab086379a1f43096a064736f6c63430008000033697066733a2f2f516d6570506b61727267444a444741526f4b7a694d657542585471614e765a6b577737377a5434484742565a6a702f

Deployed Bytecode

0x6080604052600436106101e35760003560e01c80636c0360eb11610102578063a22cb46511610095578063cd7c032611610064578063cd7c0326146106d5578063e985e9c514610700578063f2fde38b1461073d578063f43a22dc14610766576101e3565b8063a22cb4651461061b578063b88d4fde14610644578063c66828621461066d578063c87b56dd14610698576101e3565b80638da5cb5b116100d15780638da5cb5b1461057e57806395d89b41146105a9578063a035b1fe146105d4578063a0712d68146105ff576101e3565b80636c0360eb146104d457806370a08231146104ff578063715018a61461053c5780638069876d14610553576101e3565b806332cb6b0c1161017a5780634f6ccce7116101495780634f6ccce71461040657806355f804b3146104435780635c975abb1461046c5780636352211e14610497576101e3565b806332cb6b0c146103705780633ccfd60b1461039b57806342842e0e146103b2578063463fff79146103db576101e3565b8063095ea7b3116101b6578063095ea7b3146102b657806318160ddd146102df57806323b872dd1461030a5780632f745c5914610333576101e3565b806301ffc9a7146101e857806302329a291461022557806306fdde031461024e578063081812fc14610279575b600080fd5b3480156101f457600080fd5b5061020f600480360381019061020a9190612f74565b610791565b60405161021c9190613ae9565b60405180910390f35b34801561023157600080fd5b5061024c60048036038101906102479190612f4b565b6108db565b005b34801561025a57600080fd5b50610263610974565b6040516102709190613b04565b60405180910390f35b34801561028557600080fd5b506102a0600480360381019061029b9190613030565b610a06565b6040516102ad9190613a82565b60405180910390f35b3480156102c257600080fd5b506102dd60048036038101906102d89190612f0f565b610a8b565b005b3480156102eb57600080fd5b506102f4610ba4565b6040516103019190613e46565b60405180910390f35b34801561031657600080fd5b50610331600480360381019061032c9190612e09565b610bad565b005b34801561033f57600080fd5b5061035a60048036038101906103559190612f0f565b610bbd565b6040516103679190613e46565b60405180910390f35b34801561037c57600080fd5b50610385610dbb565b6040516103929190613e46565b60405180910390f35b3480156103a757600080fd5b506103b0610dc1565b005b3480156103be57600080fd5b506103d960048036038101906103d49190612e09565b610eb6565b005b3480156103e757600080fd5b506103f0610ed6565b6040516103fd9190613e46565b60405180910390f35b34801561041257600080fd5b5061042d60048036038101906104289190613030565b610edb565b60405161043a9190613e46565b60405180910390f35b34801561044f57600080fd5b5061046a60048036038101906104659190612fef565b610f2e565b005b34801561047857600080fd5b50610481610fc4565b60405161048e9190613ae9565b60405180910390f35b3480156104a357600080fd5b506104be60048036038101906104b99190613030565b610fd7565b6040516104cb9190613a82565b60405180910390f35b3480156104e057600080fd5b506104e9610fed565b6040516104f69190613b04565b60405180910390f35b34801561050b57600080fd5b5061052660048036038101906105219190612da4565b61107b565b6040516105339190613e46565b60405180910390f35b34801561054857600080fd5b50610551611164565b005b34801561055f57600080fd5b506105686111ec565b6040516105759190613e46565b60405180910390f35b34801561058a57600080fd5b506105936111f2565b6040516105a09190613a82565b60405180910390f35b3480156105b557600080fd5b506105be61121c565b6040516105cb9190613b04565b60405180910390f35b3480156105e057600080fd5b506105e96112ae565b6040516105f69190613e46565b60405180910390f35b61061960048036038101906106149190613030565b6112b9565b005b34801561062757600080fd5b50610642600480360381019061063d9190612ed3565b6114ae565b005b34801561065057600080fd5b5061066b60048036038101906106669190612e58565b61162f565b005b34801561067957600080fd5b5061068261168b565b60405161068f9190613b04565b60405180910390f35b3480156106a457600080fd5b506106bf60048036038101906106ba9190613030565b6116c4565b6040516106cc9190613b04565b60405180910390f35b3480156106e157600080fd5b506106ea6117a3565b6040516106f79190613a82565b60405180910390f35b34801561070c57600080fd5b5061072760048036038101906107229190612dcd565b6117bb565b6040516107349190613ae9565b60405180910390f35b34801561074957600080fd5b50610764600480360381019061075f9190612da4565b6118af565b005b34801561077257600080fd5b5061077b6119a7565b6040516107889190613e46565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061085c57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108c457507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108d457506108d3826119ac565b5b9050919050565b6108e3611a16565b73ffffffffffffffffffffffffffffffffffffffff166109016111f2565b73ffffffffffffffffffffffffffffffffffffffff1614610957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094e90613ce6565b60405180910390fd5b80600960006101000a81548160ff02191690831515021790555050565b606060018054610983906141be565b80601f01602080910402602001604051908101604052809291908181526020018280546109af906141be565b80156109fc5780601f106109d1576101008083540402835291602001916109fc565b820191906000526020600020905b8154815290600101906020018083116109df57829003601f168201915b5050505050905090565b6000610a1182611a1e565b610a50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4790613e26565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a9682610fd7565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610afe90613d66565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b26611a16565b73ffffffffffffffffffffffffffffffffffffffff161480610b555750610b5481610b4f611a16565b6117bb565b5b610b94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8b90613c46565b60405180910390fd5b610b9f838383611a2b565b505050565b60008054905090565b610bb8838383611add565b505050565b6000610bc88361107b565b8210610c09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0090613b26565b60405180910390fd5b6000610c13610ba4565b905060008060005b83811015610d79576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610d0d57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d655786841415610d56578195505050505050610db5565b8380610d61906141f0565b9450505b508080610d71906141f0565b915050610c1b565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dac90613e06565b60405180910390fd5b92915050565b6103c981565b610dc9611a16565b73ffffffffffffffffffffffffffffffffffffffff16610de76111f2565b73ffffffffffffffffffffffffffffffffffffffff1614610e3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3490613ce6565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff1647604051610e6390613a6d565b60006040518083038185875af1925050503d8060008114610ea0576040519150601f19603f3d011682016040523d82523d6000602084013e610ea5565b606091505b5050905080610eb357600080fd5b50565b610ed18383836040518060200160405280600081525061162f565b505050565b600a81565b6000610ee5610ba4565b8210610f26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1d90613be6565b60405180910390fd5b819050919050565b610f36611a16565b73ffffffffffffffffffffffffffffffffffffffff16610f546111f2565b73ffffffffffffffffffffffffffffffffffffffff1614610faa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa190613ce6565b60405180910390fd5b8060089080519060200190610fc0929190612b79565b5050565b600960009054906101000a900460ff1681565b6000610fe282612084565b600001519050919050565b60088054610ffa906141be565b80601f0160208091040260200160405190810160405280929190818152602001828054611026906141be565b80156110735780601f1061104857610100808354040283529160200191611073565b820191906000526020600020905b81548152906001019060200180831161105657829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e390613c86565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b61116c611a16565b73ffffffffffffffffffffffffffffffffffffffff1661118a6111f2565b73ffffffffffffffffffffffffffffffffffffffff16146111e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d790613ce6565b60405180910390fd5b6111ea60006121df565b565b61014d81565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606002805461122b906141be565b80601f0160208091040260200160405190810160405280929190818152602001828054611257906141be565b80156112a45780601f10611279576101008083540402835291602001916112a4565b820191906000526020600020905b81548152906001019060200180831161128757829003601f168201915b5050505050905090565b6618838370f3400081565b600960009054906101000a900460ff1615611309576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130090613b46565b60405180910390fd5b80611312610ba4565b61131c9190613f9b565b6103c91015611360576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135790613c66565b60405180910390fd5b600081116113a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139a90613ba6565b60405180910390fd5b806113ac610ba4565b6113b69190613f9b565b61014d106114075780600a1015611402576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f990613c26565b60405180910390fd5b6114a1565b806014101561144b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144290613bc6565b60405180910390fd5b6618838370f340008161145e9190614022565b3410156114a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149790613d46565b60405180910390fd5b5b6114ab33826122a5565b50565b6114b6611a16565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611524576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151b90613d06565b60405180910390fd5b8060066000611531611a16565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166115de611a16565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516116239190613ae9565b60405180910390a35050565b61163a848484611add565b611646848484846122c3565b611685576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167c90613da6565b60405180910390fd5b50505050565b6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525081565b60606116cf82611a1e565b61170e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170590613ca6565b60405180910390fd5b60006008805461171d906141be565b905011611739576040518060200160405280600081525061179c565b60086117448361245a565b6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060405160200161178c93929190613a3c565b6040516020818303038152906040525b9050919050565b73a5409ec958c83c3f309868babaca7c86dcb077c181565b60008073a5409ec958c83c3f309868babaca7c86dcb077c190508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663c4552791866040518263ffffffff1660e01b81526004016118259190613a82565b60206040518083038186803b15801561183d57600080fd5b505afa158015611851573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118759190612fc6565b73ffffffffffffffffffffffffffffffffffffffff16141561189b5760019150506118a9565b6118a58484612607565b9150505b92915050565b6118b7611a16565b73ffffffffffffffffffffffffffffffffffffffff166118d56111f2565b73ffffffffffffffffffffffffffffffffffffffff161461192b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192290613ce6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561199b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199290613b66565b60405180910390fd5b6119a4816121df565b50565b601481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b6000805482109050919050565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000611ae882612084565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16611b0f611a16565b73ffffffffffffffffffffffffffffffffffffffff161480611b6b5750611b34611a16565b73ffffffffffffffffffffffffffffffffffffffff16611b5384610a06565b73ffffffffffffffffffffffffffffffffffffffff16145b80611b875750611b868260000151611b81611a16565b6117bb565b5b905080611bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc090613d26565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614611c3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3290613cc6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611cab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca290613c06565b60405180910390fd5b611cb8858585600161269b565b611cc86000848460000151611a2b565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050506000600184611ece9190613f9b565b9050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561201457611f4481611a1e565b15612013576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506003600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461207c86868660016126a1565b505050505050565b61208c612bff565b61209582611a1e565b6120d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120cb90613b86565b60405180910390fd5b60008290505b6000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146121c65780925050506121da565b5080806121d290614194565b9150506120da565b919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6122bf8282604051806020016040528060008152506126a7565b5050565b60006122e48473ffffffffffffffffffffffffffffffffffffffff16612b66565b1561244d578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261230d611a16565b8786866040518563ffffffff1660e01b815260040161232f9493929190613a9d565b602060405180830381600087803b15801561234957600080fd5b505af192505050801561237a57506040513d601f19601f820116820180604052508101906123779190612f9d565b60015b6123fd573d80600081146123aa576040519150601f19603f3d011682016040523d82523d6000602084013e6123af565b606091505b506000815114156123f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ec90613da6565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612452565b600190505b949350505050565b606060008214156124a2576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612602565b600082905060005b600082146124d45780806124bd906141f0565b915050600a826124cd9190613ff1565b91506124aa565b60008167ffffffffffffffff811115612516577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156125485781602001600182028036833780820191505090505b5090505b600085146125fb57600182612561919061407c565b9150600a856125709190614239565b603061257c9190613f9b565b60f81b8183815181106125b8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856125f49190613ff1565b945061254c565b8093505050505b919050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b50505050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561271d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271490613de6565b60405180910390fd5b61272681611a1e565b15612766576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275d90613dc6565b60405180910390fd5b600083116127a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a090613d86565b60405180910390fd5b6127b6600085838661269b565b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050905060405180604001604052808583600001516128b39190613f55565b6fffffffffffffffffffffffffffffffff1681526020018583602001516128da9190613f55565b6fffffffffffffffffffffffffffffffff16815250600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b85811015612b4957818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612ae960008884886122c3565b612b28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1f90613da6565b60405180910390fd5b8180612b33906141f0565b9250508080612b41906141f0565b915050612a78565b5080600081905550612b5e60008785886126a1565b505050505050565b600080823b905060008111915050919050565b828054612b85906141be565b90600052602060002090601f016020900481019282612ba75760008555612bee565b82601f10612bc057805160ff1916838001178555612bee565b82800160010185558215612bee579182015b82811115612bed578251825591602001919060010190612bd2565b5b509050612bfb9190612c39565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115612c52576000816000905550600101612c3a565b5090565b6000612c69612c6484613e92565b613e61565b905082815260208101848484011115612c8157600080fd5b612c8c848285614152565b509392505050565b6000612ca7612ca284613ec2565b613e61565b905082815260208101848484011115612cbf57600080fd5b612cca848285614152565b509392505050565b600081359050612ce181614337565b92915050565b600081359050612cf68161434e565b92915050565b600081359050612d0b81614365565b92915050565b600081519050612d2081614365565b92915050565b600082601f830112612d3757600080fd5b8135612d47848260208601612c56565b91505092915050565b600081519050612d5f8161437c565b92915050565b600082601f830112612d7657600080fd5b8135612d86848260208601612c94565b91505092915050565b600081359050612d9e81614393565b92915050565b600060208284031215612db657600080fd5b6000612dc484828501612cd2565b91505092915050565b60008060408385031215612de057600080fd5b6000612dee85828601612cd2565b9250506020612dff85828601612cd2565b9150509250929050565b600080600060608486031215612e1e57600080fd5b6000612e2c86828701612cd2565b9350506020612e3d86828701612cd2565b9250506040612e4e86828701612d8f565b9150509250925092565b60008060008060808587031215612e6e57600080fd5b6000612e7c87828801612cd2565b9450506020612e8d87828801612cd2565b9350506040612e9e87828801612d8f565b925050606085013567ffffffffffffffff811115612ebb57600080fd5b612ec787828801612d26565b91505092959194509250565b60008060408385031215612ee657600080fd5b6000612ef485828601612cd2565b9250506020612f0585828601612ce7565b9150509250929050565b60008060408385031215612f2257600080fd5b6000612f3085828601612cd2565b9250506020612f4185828601612d8f565b9150509250929050565b600060208284031215612f5d57600080fd5b6000612f6b84828501612ce7565b91505092915050565b600060208284031215612f8657600080fd5b6000612f9484828501612cfc565b91505092915050565b600060208284031215612faf57600080fd5b6000612fbd84828501612d11565b91505092915050565b600060208284031215612fd857600080fd5b6000612fe684828501612d50565b91505092915050565b60006020828403121561300157600080fd5b600082013567ffffffffffffffff81111561301b57600080fd5b61302784828501612d65565b91505092915050565b60006020828403121561304257600080fd5b600061305084828501612d8f565b91505092915050565b613062816140b0565b82525050565b613071816140c2565b82525050565b600061308282613f07565b61308c8185613f1d565b935061309c818560208601614161565b6130a581614326565b840191505092915050565b60006130bb82613f12565b6130c58185613f39565b93506130d5818560208601614161565b6130de81614326565b840191505092915050565b60006130f482613f12565b6130fe8185613f4a565b935061310e818560208601614161565b80840191505092915050565b60008154613127816141be565b6131318186613f4a565b9450600182166000811461314c576001811461315d57613190565b60ff19831686528186019350613190565b61316685613ef2565b60005b8381101561318857815481890152600182019150602081019050613169565b838801955050505b50505092915050565b60006131a6602283613f39565b91507f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008301527f64730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061320c600683613f39565b91507f50617573656400000000000000000000000000000000000000000000000000006000830152602082019050919050565b600061324c602683613f39565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006132b2602a83613f39565b91507f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008301527f74656e7420746f6b656e000000000000000000000000000000000000000000006020830152604082019050919050565b6000613318600a83613f39565b91507f4e6f2030206d696e7473000000000000000000000000000000000000000000006000830152602082019050919050565b6000613358601683613f39565b91507f457863657373206d6178207065722070616964207478000000000000000000006000830152602082019050919050565b6000613398602383613f39565b91507f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008301527f6e647300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006133fe602583613f39565b91507f455243373231413a207472616e7366657220746f20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613464601683613f39565b91507f457863657373206d6178207065722066726565207478000000000000000000006000830152602082019050919050565b60006134a4603983613f39565b91507f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f76656420666f7220616c6c000000000000006020830152604082019050919050565b600061350a601283613f39565b91507f45786365656473206d617820737570706c7900000000000000000000000000006000830152602082019050919050565b600061354a602b83613f39565b91507f455243373231413a2062616c616e636520717565727920666f7220746865207a60008301527f65726f20616464726573730000000000000000000000000000000000000000006020830152604082019050919050565b60006135b0601583613f39565b91507f546f6b656e20646f6573206e6f742065786973742e00000000000000000000006000830152602082019050919050565b60006135f0602683613f39565b91507f455243373231413a207472616e736665722066726f6d20696e636f727265637460008301527f206f776e657200000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613656602083613f39565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613696601a83613f39565b91507f455243373231413a20617070726f766520746f2063616c6c65720000000000006000830152602082019050919050565b60006136d6603283613f39565b91507f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008301527f6f776e6572206e6f7220617070726f76656400000000000000000000000000006020830152604082019050919050565b600061373c601683613f39565b91507f496e76616c69642066756e64732070726f7669646564000000000000000000006000830152602082019050919050565b600061377c602283613f39565b91507f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008301527f65720000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006137e2600083613f2e565b9150600082019050919050565b60006137fc602383613f39565b91507f455243373231413a207175616e74697479206d7573742062652067726561746560008301527f72203000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613862603383613f39565b91507f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008301527f6563656976657220696d706c656d656e746572000000000000000000000000006020830152604082019050919050565b60006138c8601d83613f39565b91507f455243373231413a20746f6b656e20616c7265616479206d696e7465640000006000830152602082019050919050565b6000613908602183613f39565b91507f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008301527f73000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061396e602e83613f39565b91507f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008301527f6f776e657220627920696e6465780000000000000000000000000000000000006020830152604082019050919050565b60006139d4602d83613f39565b91507f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008301527f78697374656e7420746f6b656e000000000000000000000000000000000000006020830152604082019050919050565b613a3681614148565b82525050565b6000613a48828661311a565b9150613a5482856130e9565b9150613a6082846130e9565b9150819050949350505050565b6000613a78826137d5565b9150819050919050565b6000602082019050613a976000830184613059565b92915050565b6000608082019050613ab26000830187613059565b613abf6020830186613059565b613acc6040830185613a2d565b8181036060830152613ade8184613077565b905095945050505050565b6000602082019050613afe6000830184613068565b92915050565b60006020820190508181036000830152613b1e81846130b0565b905092915050565b60006020820190508181036000830152613b3f81613199565b9050919050565b60006020820190508181036000830152613b5f816131ff565b9050919050565b60006020820190508181036000830152613b7f8161323f565b9050919050565b60006020820190508181036000830152613b9f816132a5565b9050919050565b60006020820190508181036000830152613bbf8161330b565b9050919050565b60006020820190508181036000830152613bdf8161334b565b9050919050565b60006020820190508181036000830152613bff8161338b565b9050919050565b60006020820190508181036000830152613c1f816133f1565b9050919050565b60006020820190508181036000830152613c3f81613457565b9050919050565b60006020820190508181036000830152613c5f81613497565b9050919050565b60006020820190508181036000830152613c7f816134fd565b9050919050565b60006020820190508181036000830152613c9f8161353d565b9050919050565b60006020820190508181036000830152613cbf816135a3565b9050919050565b60006020820190508181036000830152613cdf816135e3565b9050919050565b60006020820190508181036000830152613cff81613649565b9050919050565b60006020820190508181036000830152613d1f81613689565b9050919050565b60006020820190508181036000830152613d3f816136c9565b9050919050565b60006020820190508181036000830152613d5f8161372f565b9050919050565b60006020820190508181036000830152613d7f8161376f565b9050919050565b60006020820190508181036000830152613d9f816137ef565b9050919050565b60006020820190508181036000830152613dbf81613855565b9050919050565b60006020820190508181036000830152613ddf816138bb565b9050919050565b60006020820190508181036000830152613dff816138fb565b9050919050565b60006020820190508181036000830152613e1f81613961565b9050919050565b60006020820190508181036000830152613e3f816139c7565b9050919050565b6000602082019050613e5b6000830184613a2d565b92915050565b6000604051905081810181811067ffffffffffffffff82111715613e8857613e876142f7565b5b8060405250919050565b600067ffffffffffffffff821115613ead57613eac6142f7565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115613edd57613edc6142f7565b5b601f19601f8301169050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613f608261410c565b9150613f6b8361410c565b9250826fffffffffffffffffffffffffffffffff03821115613f9057613f8f61426a565b5b828201905092915050565b6000613fa682614148565b9150613fb183614148565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613fe657613fe561426a565b5b828201905092915050565b6000613ffc82614148565b915061400783614148565b92508261401757614016614299565b5b828204905092915050565b600061402d82614148565b915061403883614148565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156140715761407061426a565b5b828202905092915050565b600061408782614148565b915061409283614148565b9250828210156140a5576140a461426a565b5b828203905092915050565b60006140bb82614128565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6000614105826140b0565b9050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561417f578082015181840152602081019050614164565b8381111561418e576000848401525b50505050565b600061419f82614148565b915060008214156141b3576141b261426a565b5b600182039050919050565b600060028204905060018216806141d657607f821691505b602082108114156141ea576141e96142c8565b5b50919050565b60006141fb82614148565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561422e5761422d61426a565b5b600182019050919050565b600061424482614148565b915061424f83614148565b92508261425f5761425e614299565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b614340816140b0565b811461434b57600080fd5b50565b614357816140c2565b811461436257600080fd5b50565b61436e816140ce565b811461437957600080fd5b50565b614385816140fa565b811461439057600080fd5b50565b61439c81614148565b81146143a757600080fd5b5056fea2646970667358221220c2b628d50f4aa0a17c8dbbac6777030392e16e8c8e9b20ab086379a1f43096a064736f6c63430008000033

Deployed Bytecode Sourcemap

40359:2569:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27614:422;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42228:79;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29397:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31092:292;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30613:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25973:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32119:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26678:864;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40813:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42036:184;;;;;;;;;;;;;:::i;:::-;;32352:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40664:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26150:228;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42315:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40913:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29206:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40408:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28100:258;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2786:103;;;;;;;;;;;;;:::i;:::-;;40761:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2135:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29566:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40860:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41002:573;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31456:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32600:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40504:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42421:504;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40557:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41583:445;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3044:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40715:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27614:422;27761:4;27818:25;27803:40;;;:11;:40;;;;:105;;;;27875:33;27860:48;;;:11;:48;;;;27803:105;:172;;;;27940:35;27925:50;;;:11;:50;;;;27803:172;:225;;;;27992:36;28016:11;27992:23;:36::i;:::-;27803:225;27783:245;;27614:422;;;:::o;42228:79::-;2366:12;:10;:12::i;:::-;2355:23;;:7;:5;:7::i;:::-;:23;;;2347:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42293:6:::1;42284;;:15;;;;;;;;;;;;;;;;;;42228:79:::0;:::o;29397:100::-;29451:13;29484:5;29477:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29397:100;:::o;31092:292::-;31196:7;31243:16;31251:7;31243;:16::i;:::-;31221:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;31352:15;:24;31368:7;31352:24;;;;;;;;;;;;;;;;;;;;;31345:31;;31092:292;;;:::o;30613:413::-;30686:13;30702:24;30718:7;30702:15;:24::i;:::-;30686:40;;30751:5;30745:11;;:2;:11;;;;30737:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;30846:5;30830:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;30855:37;30872:5;30879:12;:10;:12::i;:::-;30855:16;:37::i;:::-;30830:62;30808:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;30990:28;30999:2;31003:7;31012:5;30990:8;:28::i;:::-;30613:413;;;:::o;25973:100::-;26026:7;26053:12;;26046:19;;25973:100;:::o;32119:162::-;32245:28;32255:4;32261:2;32265:7;32245:9;:28::i;:::-;32119:162;;;:::o;26678:864::-;26803:7;26844:16;26854:5;26844:9;:16::i;:::-;26836:5;:24;26828:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;26910:22;26935:13;:11;:13::i;:::-;26910:38;;26959:19;26993:25;27047:9;27042:426;27066:14;27062:1;:18;27042:426;;;27102:31;27136:11;:14;27148:1;27136:14;;;;;;;;;;;27102:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27195:1;27169:28;;:9;:14;;;:28;;;27165:103;;27238:9;:14;;;27218:34;;27165:103;27307:5;27286:26;;:17;:26;;;27282:175;;;27352:5;27337:11;:20;27333:77;;;27389:1;27382:8;;;;;;;;;27333:77;27428:13;;;;;:::i;:::-;;;;27282:175;27042:426;27082:3;;;;;:::i;:::-;;;;27042:426;;;;27478:56;;;;;;;;;;:::i;:::-;;;;;;;;26678:864;;;;;:::o;40813:40::-;40850:3;40813:40;:::o;42036:184::-;2366:12;:10;:12::i;:::-;2355:23;;:7;:5;:7::i;:::-;:23;;;2347:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42085:12:::1;42111:10;42103:24;;42149:21;42103:82;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42084:101;;;42204:7;42196:16;;;::::0;::::1;;2426:1;42036:184::o:0;32352:177::-;32482:39;32499:4;32505:2;32509:7;32482:39;;;;;;;;;;;;:16;:39::i;:::-;32352:177;;;:::o;40664:44::-;40706:2;40664:44;:::o;26150:228::-;26253:7;26294:13;:11;:13::i;:::-;26286:5;:21;26278:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;26365:5;26358:12;;26150:228;;;:::o;42315:98::-;2366:12;:10;:12::i;:::-;2355:23;;:7;:5;:7::i;:::-;:23;;;2347:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42397:8:::1;42387:7;:18;;;;;;;;;;;;:::i;:::-;;42315:98:::0;:::o;40913:25::-;;;;;;;;;;;;;:::o;29206:124::-;29270:7;29297:20;29309:7;29297:11;:20::i;:::-;:25;;;29290:32;;29206:124;;;:::o;40408:89::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;28100:258::-;28164:7;28223:1;28206:19;;:5;:19;;;;28184:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;28322:12;:19;28335:5;28322:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;28314:36;;28307:43;;28100:258;;;:::o;2786:103::-;2366:12;:10;:12::i;:::-;2355:23;;:7;:5;:7::i;:::-;:23;;;2347:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2851:30:::1;2878:1;2851:18;:30::i;:::-;2786:103::o:0;40761:45::-;40803:3;40761:45;:::o;2135:87::-;2181:7;2208:6;;;;;;;;;;;2201:13;;2135:87;:::o;29566:104::-;29622:13;29655:7;29648:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29566:104;:::o;40860:44::-;40892:12;40860:44;:::o;41002:573::-;41068:6;;;;;;;;;;;41067:7;41059:26;;;;;;;;;;;;:::i;:::-;;;;;;;;;41134:7;41118:13;:11;:13::i;:::-;:23;;;;:::i;:::-;40850:3;41104:37;;41096:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41193:1;41183:7;:11;41175:34;;;;;;;;;;;;:::i;:::-;;;;;;;;;41261:7;41245:13;:11;:13::i;:::-;:23;;;;:::i;:::-;40803:3;41226:42;41222:303;;41312:7;40706:2;41293:26;;41285:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;41222:303;;;41401:7;40752:2;41387:21;;41379:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;40892:12;41471:7;:15;;;;:::i;:::-;41458:9;:28;;41450:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;41222:303;41537:30;41547:10;41559:7;41537:9;:30::i;:::-;41002:573;:::o;31456:311::-;31586:12;:10;:12::i;:::-;31574:24;;:8;:24;;;;31566:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;31687:8;31642:18;:32;31661:12;:10;:12::i;:::-;31642:32;;;;;;;;;;;;;;;:42;31675:8;31642:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;31740:8;31711:48;;31726:12;:10;:12::i;:::-;31711:48;;;31750:8;31711:48;;;;;;:::i;:::-;;;;;;;;31456:311;;:::o;32600:355::-;32759:28;32769:4;32775:2;32779:7;32759:9;:28::i;:::-;32820:48;32843:4;32849:2;32853:7;32862:5;32820:22;:48::i;:::-;32798:149;;;;;;;;;;;;:::i;:::-;;;;;;;;;32600:355;;;;:::o;40504:46::-;;;;;;;;;;;;;;;;;;;:::o;42421:504::-;42523:13;42562:17;42570:8;42562:7;:17::i;:::-;42554:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;42660:1;42642:7;42636:21;;;;;:::i;:::-;;;:25;:281;;;;;;;;;;;;;;;;;42753:7;42787:26;42804:8;42787:16;:26::i;:::-;42840:13;;;;;;;;;;;;;;;;;42710:166;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;42636:281;42616:301;;42421:504;;;:::o;40557:98::-;40613:42;40557:98;:::o;41583:445::-;41708:4;41793:27;40613:42;41793:65;;41914:8;41873:49;;41881:13;:21;;;41903:5;41881:28;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41873:49;;;41869:93;;;41946:4;41939:11;;;;;41869:93;41981:39;42004:5;42011:8;41981:22;:39::i;:::-;41974:46;;;41583:445;;;;;:::o;3044:238::-;2366:12;:10;:12::i;:::-;2355:23;;:7;:5;:7::i;:::-;:23;;;2347:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3167:1:::1;3147:22;;:8;:22;;;;3125:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;3246:28;3265:8;3246:18;:28::i;:::-;3044:238:::0;:::o;40715:39::-;40752:2;40715:39;:::o;23966:207::-;24096:4;24140:25;24125:40;;;:11;:40;;;;24118:47;;23966:207;;;:::o;859:98::-;912:7;939:10;932:17;;859:98;:::o;33210:111::-;33267:4;33301:12;;33291:7;:22;33284:29;;33210:111;;;:::o;37389:196::-;37531:2;37504:15;:24;37520:7;37504:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;37569:7;37565:2;37549:28;;37558:5;37549:28;;;;;;;;;;;;37389:196;;;:::o;35353:1918::-;35468:35;35506:20;35518:7;35506:11;:20::i;:::-;35468:58;;35539:22;35581:13;:18;;;35565:34;;:12;:10;:12::i;:::-;:34;;;:87;;;;35640:12;:10;:12::i;:::-;35616:36;;:20;35628:7;35616:11;:20::i;:::-;:36;;;35565:87;:154;;;;35669:50;35686:13;:18;;;35706:12;:10;:12::i;:::-;35669:16;:50::i;:::-;35565:154;35539:181;;35755:17;35733:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;35907:4;35885:26;;:13;:18;;;:26;;;35863:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;36010:1;35996:16;;:2;:16;;;;35988:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;36067:43;36089:4;36095:2;36099:7;36108:1;36067:21;:43::i;:::-;36175:49;36192:1;36196:7;36205:13;:18;;;36175:8;:49::i;:::-;36459:1;36429:12;:18;36442:4;36429:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36503:1;36475:12;:16;36488:2;36475:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36551:43;;;;;;;;36566:2;36551:43;;;;;;36577:15;36551:43;;;;;36528:11;:20;36540:7;36528:20;;;;;;;;;;;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36834:19;36866:1;36856:7;:11;;;;:::i;:::-;36834:33;;36923:1;36882:43;;:11;:24;36894:11;36882:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;36878:288;;;36946:20;36954:11;36946:7;:20::i;:::-;36942:213;;;37014:125;;;;;;;;37051:13;:18;;;37014:125;;;;;;37092:13;:28;;;37014:125;;;;;36987:11;:24;36999:11;36987:24;;;;;;;;;;;:152;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36942:213;36878:288;37202:7;37198:2;37183:27;;37192:4;37183:27;;;;;;;;;;;;37221:42;37242:4;37248:2;37252:7;37261:1;37221:20;:42::i;:::-;35353:1918;;;;;;:::o;28640:504::-;28728:21;;:::i;:::-;28775:16;28783:7;28775;:16::i;:::-;28767:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;28856:12;28871:7;28856:22;;28851:216;28905:31;28939:11;:17;28951:4;28939:17;;;;;;;;;;;28905:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29001:1;28975:28;;:9;:14;;;:28;;;28971:85;;29031:9;29024:16;;;;;;28971:85;28851:216;28882:6;;;;;:::i;:::-;;;;28851:216;;28640:504;;;;:::o;3442:191::-;3516:16;3535:6;;;;;;;;;;;3516:25;;3561:8;3552:6;;:17;;;;;;;;;;;;;;;;;;3616:8;3585:40;;3606:8;3585:40;;;;;;;;;;;;3442:191;;:::o;33329:104::-;33398:27;33408:2;33412:8;33398:27;;;;;;;;;;;;:9;:27::i;:::-;33329:104;;:::o;38150:985::-;38305:4;38326:15;:2;:13;;;:15::i;:::-;38322:806;;;38395:2;38379:36;;;38438:12;:10;:12::i;:::-;38473:4;38500:7;38530:5;38379:175;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;38358:715;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38758:1;38741:6;:13;:18;38737:321;;;38784:109;;;;;;;;;;:::i;:::-;;;;;;;;38737:321;39008:6;39002:13;38993:6;38989:2;38985:15;38978:38;38358:715;38628:45;;;38618:55;;;:6;:55;;;;38611:62;;;;;38322:806;39112:4;39105:11;;38150:985;;;;;;;:::o;3982:723::-;4038:13;4268:1;4259:5;:10;4255:53;;;4286:10;;;;;;;;;;;;;;;;;;;;;4255:53;4318:12;4333:5;4318:20;;4349:14;4374:78;4389:1;4381:4;:9;4374:78;;4407:8;;;;;:::i;:::-;;;;4438:2;4430:10;;;;;:::i;:::-;;;4374:78;;;4462:19;4494:6;4484:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4462:39;;4512:154;4528:1;4519:5;:10;4512:154;;4556:1;4546:11;;;;;:::i;:::-;;;4623:2;4615:5;:10;;;;:::i;:::-;4602:2;:24;;;;:::i;:::-;4589:39;;4572:6;4579;4572:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;4652:2;4643:11;;;;;:::i;:::-;;;4512:154;;;4690:6;4676:21;;;;;3982:723;;;;:::o;31838:214::-;31980:4;32009:18;:25;32028:5;32009:25;;;;;;;;;;;;;;;:35;32035:8;32009:35;;;;;;;;;;;;;;;;;;;;;;;;;32002:42;;31838:214;;;;:::o;39623:159::-;;;;;:::o;40194:158::-;;;;;:::o;33710:1389::-;33833:20;33856:12;;33833:35;;33901:1;33887:16;;:2;:16;;;;33879:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;34086:21;34094:12;34086:7;:21::i;:::-;34085:22;34077:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;34171:1;34160:8;:12;34152:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;34225:61;34255:1;34259:2;34263:12;34277:8;34225:21;:61::i;:::-;34299:30;34332:12;:16;34345:2;34332:16;;;;;;;;;;;;;;;34299:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34378:135;;;;;;;;34434:8;34404:11;:19;;;:39;;;;:::i;:::-;34378:135;;;;;;34493:8;34458:11;:24;;;:44;;;;:::i;:::-;34378:135;;;;;34359:12;:16;34372:2;34359:16;;;;;;;;;;;;;;;:154;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34552:43;;;;;;;;34567:2;34552:43;;;;;;34578:15;34552:43;;;;;34524:11;:25;34536:12;34524:25;;;;;;;;;;;:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34608:20;34631:12;34608:35;;34661:9;34656:325;34680:8;34676:1;:12;34656:325;;;34740:12;34736:2;34715:38;;34732:1;34715:38;;;;;;;;;;;;34794:59;34825:1;34829:2;34833:12;34847:5;34794:22;:59::i;:::-;34768:172;;;;;;;;;;;;:::i;:::-;;;;;;;;;34955:14;;;;;:::i;:::-;;;;34690:3;;;;;:::i;:::-;;;;34656:325;;;;35008:12;34993;:27;;;;35031:60;35060:1;35064:2;35068:12;35082:8;35031:20;:60::i;:::-;33710:1389;;;;;;:::o;15328:387::-;15388:4;15596:12;15663:7;15651:20;15643:28;;15706:1;15699:4;:8;15692:15;;;15328:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::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;1569:201::-;;1686:6;1680:13;1671:22;;1702:62;1758:5;1702:62;:::i;:::-;1661:109;;;;:::o;1790:273::-;;1895:3;1888:4;1880:6;1876:17;1872:27;1862:2;;1913:1;1910;1903:12;1862:2;1953:6;1940:20;1978:79;2053:3;2045:6;2038:4;2030:6;2026:17;1978:79;:::i;:::-;1969:88;;1852:211;;;;;:::o;2069:139::-;;2153:6;2140:20;2131:29;;2169:33;2196:5;2169:33;:::i;:::-;2121:87;;;;:::o;2214:262::-;;2322:2;2310:9;2301:7;2297:23;2293:32;2290:2;;;2338:1;2335;2328:12;2290:2;2381:1;2406:53;2451:7;2442:6;2431:9;2427:22;2406:53;:::i;:::-;2396:63;;2352:117;2280:196;;;;:::o;2482:407::-;;;2607:2;2595:9;2586:7;2582:23;2578:32;2575:2;;;2623:1;2620;2613:12;2575:2;2666:1;2691:53;2736:7;2727:6;2716:9;2712:22;2691:53;:::i;:::-;2681:63;;2637:117;2793:2;2819:53;2864:7;2855:6;2844:9;2840:22;2819:53;:::i;:::-;2809:63;;2764:118;2565:324;;;;;:::o;2895:552::-;;;;3037:2;3025:9;3016:7;3012:23;3008:32;3005:2;;;3053:1;3050;3043:12;3005:2;3096:1;3121:53;3166:7;3157:6;3146:9;3142:22;3121:53;:::i;:::-;3111:63;;3067:117;3223:2;3249:53;3294:7;3285:6;3274:9;3270:22;3249:53;:::i;:::-;3239:63;;3194:118;3351:2;3377:53;3422:7;3413:6;3402:9;3398:22;3377:53;:::i;:::-;3367:63;;3322:118;2995:452;;;;;:::o;3453:809::-;;;;;3621:3;3609:9;3600:7;3596:23;3592:33;3589:2;;;3638:1;3635;3628:12;3589:2;3681:1;3706:53;3751:7;3742:6;3731:9;3727:22;3706:53;:::i;:::-;3696:63;;3652:117;3808:2;3834:53;3879:7;3870:6;3859:9;3855:22;3834:53;:::i;:::-;3824:63;;3779:118;3936:2;3962:53;4007:7;3998:6;3987:9;3983:22;3962:53;:::i;:::-;3952:63;;3907:118;4092:2;4081:9;4077:18;4064:32;4123:18;4115:6;4112:30;4109:2;;;4155:1;4152;4145:12;4109:2;4183:62;4237:7;4228:6;4217:9;4213:22;4183:62;:::i;:::-;4173:72;;4035:220;3579:683;;;;;;;:::o;4268:401::-;;;4390:2;4378:9;4369:7;4365:23;4361:32;4358:2;;;4406:1;4403;4396:12;4358:2;4449:1;4474:53;4519:7;4510:6;4499:9;4495:22;4474:53;:::i;:::-;4464:63;;4420:117;4576:2;4602:50;4644:7;4635:6;4624:9;4620:22;4602:50;:::i;:::-;4592:60;;4547:115;4348:321;;;;;:::o;4675:407::-;;;4800:2;4788:9;4779:7;4775:23;4771:32;4768:2;;;4816:1;4813;4806:12;4768:2;4859:1;4884:53;4929:7;4920:6;4909:9;4905:22;4884:53;:::i;:::-;4874:63;;4830:117;4986:2;5012:53;5057:7;5048:6;5037:9;5033:22;5012:53;:::i;:::-;5002:63;;4957:118;4758:324;;;;;:::o;5088:256::-;;5193:2;5181:9;5172:7;5168:23;5164:32;5161:2;;;5209:1;5206;5199:12;5161:2;5252:1;5277:50;5319:7;5310:6;5299:9;5295:22;5277:50;:::i;:::-;5267:60;;5223:114;5151:193;;;;:::o;5350:260::-;;5457:2;5445:9;5436:7;5432:23;5428:32;5425:2;;;5473:1;5470;5463:12;5425:2;5516:1;5541:52;5585:7;5576:6;5565:9;5561:22;5541:52;:::i;:::-;5531:62;;5487:116;5415:195;;;;:::o;5616:282::-;;5734:2;5722:9;5713:7;5709:23;5705:32;5702:2;;;5750:1;5747;5740:12;5702:2;5793:1;5818:63;5873:7;5864:6;5853:9;5849:22;5818:63;:::i;:::-;5808:73;;5764:127;5692:206;;;;:::o;5904:342::-;;6052:2;6040:9;6031:7;6027:23;6023:32;6020:2;;;6068:1;6065;6058:12;6020:2;6111:1;6136:93;6221:7;6212:6;6201:9;6197:22;6136:93;:::i;:::-;6126:103;;6082:157;6010:236;;;;:::o;6252:375::-;;6370:2;6358:9;6349:7;6345:23;6341:32;6338:2;;;6386:1;6383;6376:12;6338:2;6457:1;6446:9;6442:17;6429:31;6487:18;6479:6;6476:30;6473:2;;;6519:1;6516;6509:12;6473:2;6547:63;6602:7;6593:6;6582:9;6578:22;6547:63;:::i;:::-;6537:73;;6400:220;6328:299;;;;:::o;6633:262::-;;6741:2;6729:9;6720:7;6716:23;6712:32;6709:2;;;6757:1;6754;6747:12;6709:2;6800:1;6825:53;6870:7;6861:6;6850:9;6846:22;6825:53;:::i;:::-;6815:63;;6771:117;6699:196;;;;:::o;6901:118::-;6988:24;7006:5;6988:24;:::i;:::-;6983:3;6976:37;6966:53;;:::o;7025:109::-;7106:21;7121:5;7106:21;:::i;:::-;7101:3;7094:34;7084:50;;:::o;7140:360::-;;7254:38;7286:5;7254:38;:::i;:::-;7308:70;7371:6;7366:3;7308:70;:::i;:::-;7301:77;;7387:52;7432:6;7427:3;7420:4;7413:5;7409:16;7387:52;:::i;:::-;7464:29;7486:6;7464:29;:::i;:::-;7459:3;7455:39;7448:46;;7230:270;;;;;:::o;7506:364::-;;7622:39;7655:5;7622:39;:::i;:::-;7677:71;7741:6;7736:3;7677:71;:::i;:::-;7670:78;;7757:52;7802:6;7797:3;7790:4;7783:5;7779:16;7757:52;:::i;:::-;7834:29;7856:6;7834:29;:::i;:::-;7829:3;7825:39;7818:46;;7598:272;;;;;:::o;7876:377::-;;8010:39;8043:5;8010:39;:::i;:::-;8065:89;8147:6;8142:3;8065:89;:::i;:::-;8058:96;;8163:52;8208:6;8203:3;8196:4;8189:5;8185:16;8163:52;:::i;:::-;8240:6;8235:3;8231:16;8224:23;;7986:267;;;;;:::o;8283:845::-;;8423:5;8417:12;8452:36;8478:9;8452:36;:::i;:::-;8504:89;8586:6;8581:3;8504:89;:::i;:::-;8497:96;;8624:1;8613:9;8609:17;8640:1;8635:137;;;;8786:1;8781:341;;;;8602:520;;8635:137;8719:4;8715:9;8704;8700:25;8695:3;8688:38;8755:6;8750:3;8746:16;8739:23;;8635:137;;8781:341;8848:38;8880:5;8848:38;:::i;:::-;8908:1;8922:154;8936:6;8933:1;8930:13;8922:154;;;9010:7;9004:14;9000:1;8995:3;8991:11;8984:35;9060:1;9051:7;9047:15;9036:26;;8958:4;8955:1;8951:12;8946:17;;8922:154;;;9105:6;9100:3;9096:16;9089:23;;8788:334;;8602:520;;8390:738;;;;;;:::o;9134:366::-;;9297:67;9361:2;9356:3;9297:67;:::i;:::-;9290:74;;9394:34;9390:1;9385:3;9381:11;9374:55;9460:4;9455:2;9450:3;9446:12;9439:26;9491:2;9486:3;9482:12;9475:19;;9280:220;;;:::o;9506:303::-;;9669:66;9733:1;9728:3;9669:66;:::i;:::-;9662:73;;9765:8;9761:1;9756:3;9752:11;9745:29;9800:2;9795:3;9791:12;9784:19;;9652:157;;;:::o;9815:370::-;;9978:67;10042:2;10037:3;9978:67;:::i;:::-;9971:74;;10075:34;10071:1;10066:3;10062:11;10055:55;10141:8;10136:2;10131:3;10127:12;10120:30;10176:2;10171:3;10167:12;10160:19;;9961:224;;;:::o;10191:374::-;;10354:67;10418:2;10413:3;10354:67;:::i;:::-;10347:74;;10451:34;10447:1;10442:3;10438:11;10431:55;10517:12;10512:2;10507:3;10503:12;10496:34;10556:2;10551:3;10547:12;10540:19;;10337:228;;;:::o;10571:308::-;;10734:67;10798:2;10793:3;10734:67;:::i;:::-;10727:74;;10831:12;10827:1;10822:3;10818:11;10811:33;10870:2;10865:3;10861:12;10854:19;;10717:162;;;:::o;10885:320::-;;11048:67;11112:2;11107:3;11048:67;:::i;:::-;11041:74;;11145:24;11141:1;11136:3;11132:11;11125:45;11196:2;11191:3;11187:12;11180:19;;11031:174;;;:::o;11211:367::-;;11374:67;11438:2;11433:3;11374:67;:::i;:::-;11367:74;;11471:34;11467:1;11462:3;11458:11;11451:55;11537:5;11532:2;11527:3;11523:12;11516:27;11569:2;11564:3;11560:12;11553:19;;11357:221;;;:::o;11584:369::-;;11747:67;11811:2;11806:3;11747:67;:::i;:::-;11740:74;;11844:34;11840:1;11835:3;11831:11;11824:55;11910:7;11905:2;11900:3;11896:12;11889:29;11944:2;11939:3;11935:12;11928:19;;11730:223;;;:::o;11959:320::-;;12122:67;12186:2;12181:3;12122:67;:::i;:::-;12115:74;;12219:24;12215:1;12210:3;12206:11;12199:45;12270:2;12265:3;12261:12;12254:19;;12105:174;;;:::o;12285:389::-;;12448:67;12512:2;12507:3;12448:67;:::i;:::-;12441:74;;12545:34;12541:1;12536:3;12532:11;12525:55;12611:27;12606:2;12601:3;12597:12;12590:49;12665:2;12660:3;12656:12;12649:19;;12431:243;;;:::o;12680:316::-;;12843:67;12907:2;12902:3;12843:67;:::i;:::-;12836:74;;12940:20;12936:1;12931:3;12927:11;12920:41;12987:2;12982:3;12978:12;12971:19;;12826:170;;;:::o;13002:375::-;;13165:67;13229:2;13224:3;13165:67;:::i;:::-;13158:74;;13262:34;13258:1;13253:3;13249:11;13242:55;13328:13;13323:2;13318:3;13314:12;13307:35;13368:2;13363:3;13359:12;13352:19;;13148:229;;;:::o;13383:319::-;;13546:67;13610:2;13605:3;13546:67;:::i;:::-;13539:74;;13643:23;13639:1;13634:3;13630:11;13623:44;13693:2;13688:3;13684:12;13677:19;;13529:173;;;:::o;13708:370::-;;13871:67;13935:2;13930:3;13871:67;:::i;:::-;13864:74;;13968:34;13964:1;13959:3;13955:11;13948:55;14034:8;14029:2;14024:3;14020:12;14013:30;14069:2;14064:3;14060:12;14053:19;;13854:224;;;:::o;14084:330::-;;14247:67;14311:2;14306:3;14247:67;:::i;:::-;14240:74;;14344:34;14340:1;14335:3;14331:11;14324:55;14405:2;14400:3;14396:12;14389:19;;14230:184;;;:::o;14420:324::-;;14583:67;14647:2;14642:3;14583:67;:::i;:::-;14576:74;;14680:28;14676:1;14671:3;14667:11;14660:49;14735:2;14730:3;14726:12;14719:19;;14566:178;;;:::o;14750:382::-;;14913:67;14977:2;14972:3;14913:67;:::i;:::-;14906:74;;15010:34;15006:1;15001:3;14997:11;14990:55;15076:20;15071:2;15066:3;15062:12;15055:42;15123:2;15118:3;15114:12;15107:19;;14896:236;;;:::o;15138:320::-;;15301:67;15365:2;15360:3;15301:67;:::i;:::-;15294:74;;15398:24;15394:1;15389:3;15385:11;15378:45;15449:2;15444:3;15440:12;15433:19;;15284:174;;;:::o;15464:366::-;;15627:67;15691:2;15686:3;15627:67;:::i;:::-;15620:74;;15724:34;15720:1;15715:3;15711:11;15704:55;15790:4;15785:2;15780:3;15776:12;15769:26;15821:2;15816:3;15812:12;15805:19;;15610:220;;;:::o;15836:297::-;;16016:83;16097:1;16092:3;16016:83;:::i;:::-;16009:90;;16125:1;16120:3;16116:11;16109:18;;15999:134;;;:::o;16139:367::-;;16302:67;16366:2;16361:3;16302:67;:::i;:::-;16295:74;;16399:34;16395:1;16390:3;16386:11;16379:55;16465:5;16460:2;16455:3;16451:12;16444:27;16497:2;16492:3;16488:12;16481:19;;16285:221;;;:::o;16512:383::-;;16675:67;16739:2;16734:3;16675:67;:::i;:::-;16668:74;;16772:34;16768:1;16763:3;16759:11;16752:55;16838:21;16833:2;16828:3;16824:12;16817:43;16886:2;16881:3;16877:12;16870:19;;16658:237;;;:::o;16901:327::-;;17064:67;17128:2;17123:3;17064:67;:::i;:::-;17057:74;;17161:31;17157:1;17152:3;17148:11;17141:52;17219:2;17214:3;17210:12;17203:19;;17047:181;;;:::o;17234:365::-;;17397:67;17461:2;17456:3;17397:67;:::i;:::-;17390:74;;17494:34;17490:1;17485:3;17481:11;17474:55;17560:3;17555:2;17550:3;17546:12;17539:25;17590:2;17585:3;17581:12;17574:19;;17380:219;;;:::o;17605:378::-;;17768:67;17832:2;17827:3;17768:67;:::i;:::-;17761:74;;17865:34;17861:1;17856:3;17852:11;17845:55;17931:16;17926:2;17921:3;17917:12;17910:38;17974:2;17969:3;17965:12;17958:19;;17751:232;;;:::o;18374:377::-;;18537:67;18601:2;18596:3;18537:67;:::i;:::-;18530:74;;18634:34;18630:1;18625:3;18621:11;18614:55;18700:15;18695:2;18690:3;18686:12;18679:37;18742:2;18737:3;18733:12;18726:19;;18520:231;;;:::o;18757:118::-;18844:24;18862:5;18844:24;:::i;:::-;18839:3;18832:37;18822:53;;:::o;18881:589::-;;19128:92;19216:3;19207:6;19128:92;:::i;:::-;19121:99;;19237:95;19328:3;19319:6;19237:95;:::i;:::-;19230:102;;19349:95;19440:3;19431:6;19349:95;:::i;:::-;19342:102;;19461:3;19454:10;;19110:360;;;;;;:::o;19476:379::-;;19682:147;19825:3;19682:147;:::i;:::-;19675:154;;19846:3;19839:10;;19664:191;;;:::o;19861:222::-;;19992:2;19981:9;19977:18;19969:26;;20005:71;20073:1;20062:9;20058:17;20049:6;20005:71;:::i;:::-;19959:124;;;;:::o;20089:640::-;;20322:3;20311:9;20307:19;20299:27;;20336:71;20404:1;20393:9;20389:17;20380:6;20336:71;:::i;:::-;20417:72;20485:2;20474:9;20470:18;20461:6;20417:72;:::i;:::-;20499;20567:2;20556:9;20552:18;20543:6;20499:72;:::i;:::-;20618:9;20612:4;20608:20;20603:2;20592:9;20588:18;20581:48;20646:76;20717:4;20708:6;20646:76;:::i;:::-;20638:84;;20289:440;;;;;;;:::o;20735:210::-;;20860:2;20849:9;20845:18;20837:26;;20873:65;20935:1;20924:9;20920:17;20911:6;20873:65;:::i;:::-;20827:118;;;;:::o;20951:313::-;;21102:2;21091:9;21087:18;21079:26;;21151:9;21145:4;21141:20;21137:1;21126:9;21122:17;21115:47;21179:78;21252:4;21243:6;21179:78;:::i;:::-;21171:86;;21069:195;;;;:::o;21270:419::-;;21474:2;21463:9;21459:18;21451:26;;21523:9;21517:4;21513:20;21509:1;21498:9;21494:17;21487:47;21551:131;21677:4;21551:131;:::i;:::-;21543:139;;21441:248;;;:::o;21695:419::-;;21899:2;21888:9;21884:18;21876:26;;21948:9;21942:4;21938:20;21934:1;21923:9;21919:17;21912:47;21976:131;22102:4;21976:131;:::i;:::-;21968:139;;21866:248;;;:::o;22120:419::-;;22324:2;22313:9;22309:18;22301:26;;22373:9;22367:4;22363:20;22359:1;22348:9;22344:17;22337:47;22401:131;22527:4;22401:131;:::i;:::-;22393:139;;22291:248;;;:::o;22545:419::-;;22749:2;22738:9;22734:18;22726:26;;22798:9;22792:4;22788:20;22784:1;22773:9;22769:17;22762:47;22826:131;22952:4;22826:131;:::i;:::-;22818:139;;22716:248;;;:::o;22970:419::-;;23174:2;23163:9;23159:18;23151:26;;23223:9;23217:4;23213:20;23209:1;23198:9;23194:17;23187:47;23251:131;23377:4;23251:131;:::i;:::-;23243:139;;23141:248;;;:::o;23395:419::-;;23599:2;23588:9;23584:18;23576:26;;23648:9;23642:4;23638:20;23634:1;23623:9;23619:17;23612:47;23676:131;23802:4;23676:131;:::i;:::-;23668:139;;23566:248;;;:::o;23820:419::-;;24024:2;24013:9;24009:18;24001:26;;24073:9;24067:4;24063:20;24059:1;24048:9;24044:17;24037:47;24101:131;24227:4;24101:131;:::i;:::-;24093:139;;23991:248;;;:::o;24245:419::-;;24449:2;24438:9;24434:18;24426:26;;24498:9;24492:4;24488:20;24484:1;24473:9;24469:17;24462:47;24526:131;24652:4;24526:131;:::i;:::-;24518:139;;24416:248;;;:::o;24670:419::-;;24874:2;24863:9;24859:18;24851:26;;24923:9;24917:4;24913:20;24909:1;24898:9;24894:17;24887:47;24951:131;25077:4;24951:131;:::i;:::-;24943:139;;24841:248;;;:::o;25095:419::-;;25299:2;25288:9;25284:18;25276:26;;25348:9;25342:4;25338:20;25334:1;25323:9;25319:17;25312:47;25376:131;25502:4;25376:131;:::i;:::-;25368:139;;25266:248;;;:::o;25520:419::-;;25724:2;25713:9;25709:18;25701:26;;25773:9;25767:4;25763:20;25759:1;25748:9;25744:17;25737:47;25801:131;25927:4;25801:131;:::i;:::-;25793:139;;25691:248;;;:::o;25945:419::-;;26149:2;26138:9;26134:18;26126:26;;26198:9;26192:4;26188:20;26184:1;26173:9;26169:17;26162:47;26226:131;26352:4;26226:131;:::i;:::-;26218:139;;26116:248;;;:::o;26370:419::-;;26574:2;26563:9;26559:18;26551:26;;26623:9;26617:4;26613:20;26609:1;26598:9;26594:17;26587:47;26651:131;26777:4;26651:131;:::i;:::-;26643:139;;26541:248;;;:::o;26795:419::-;;26999:2;26988:9;26984:18;26976:26;;27048:9;27042:4;27038:20;27034:1;27023:9;27019:17;27012:47;27076:131;27202:4;27076:131;:::i;:::-;27068:139;;26966:248;;;:::o;27220:419::-;;27424:2;27413:9;27409:18;27401:26;;27473:9;27467:4;27463:20;27459:1;27448:9;27444:17;27437:47;27501:131;27627:4;27501:131;:::i;:::-;27493:139;;27391:248;;;:::o;27645:419::-;;27849:2;27838:9;27834:18;27826:26;;27898:9;27892:4;27888:20;27884:1;27873:9;27869:17;27862:47;27926:131;28052:4;27926:131;:::i;:::-;27918:139;;27816:248;;;:::o;28070:419::-;;28274:2;28263:9;28259:18;28251:26;;28323:9;28317:4;28313:20;28309:1;28298:9;28294:17;28287:47;28351:131;28477:4;28351:131;:::i;:::-;28343:139;;28241:248;;;:::o;28495:419::-;;28699:2;28688:9;28684:18;28676:26;;28748:9;28742:4;28738:20;28734:1;28723:9;28719:17;28712:47;28776:131;28902:4;28776:131;:::i;:::-;28768:139;;28666:248;;;:::o;28920:419::-;;29124:2;29113:9;29109:18;29101:26;;29173:9;29167:4;29163:20;29159:1;29148:9;29144:17;29137:47;29201:131;29327:4;29201:131;:::i;:::-;29193:139;;29091:248;;;:::o;29345:419::-;;29549:2;29538:9;29534:18;29526:26;;29598:9;29592:4;29588:20;29584:1;29573:9;29569:17;29562:47;29626:131;29752:4;29626:131;:::i;:::-;29618:139;;29516:248;;;:::o;29770:419::-;;29974:2;29963:9;29959:18;29951:26;;30023:9;30017:4;30013:20;30009:1;29998:9;29994:17;29987:47;30051:131;30177:4;30051:131;:::i;:::-;30043:139;;29941:248;;;:::o;30195:419::-;;30399:2;30388:9;30384:18;30376:26;;30448:9;30442:4;30438:20;30434:1;30423:9;30419:17;30412:47;30476:131;30602:4;30476:131;:::i;:::-;30468:139;;30366:248;;;:::o;30620:419::-;;30824:2;30813:9;30809:18;30801:26;;30873:9;30867:4;30863:20;30859:1;30848:9;30844:17;30837:47;30901:131;31027:4;30901:131;:::i;:::-;30893:139;;30791:248;;;:::o;31045:419::-;;31249:2;31238:9;31234:18;31226:26;;31298:9;31292:4;31288:20;31284:1;31273:9;31269:17;31262:47;31326:131;31452:4;31326:131;:::i;:::-;31318:139;;31216:248;;;:::o;31895:419::-;;32099:2;32088:9;32084:18;32076:26;;32148:9;32142:4;32138:20;32134:1;32123:9;32119:17;32112:47;32176:131;32302:4;32176:131;:::i;:::-;32168:139;;32066:248;;;:::o;32320:222::-;;32451:2;32440:9;32436:18;32428:26;;32464:71;32532:1;32521:9;32517:17;32508:6;32464:71;:::i;:::-;32418:124;;;;:::o;32548:283::-;;32614:2;32608:9;32598:19;;32656:4;32648:6;32644:17;32763:6;32751:10;32748:22;32727:18;32715:10;32712:34;32709:62;32706:2;;;32774:18;;:::i;:::-;32706:2;32814:10;32810:2;32803:22;32588:243;;;;:::o;32837:331::-;;32988:18;32980:6;32977:30;32974:2;;;33010:18;;:::i;:::-;32974:2;33095:4;33091:9;33084:4;33076:6;33072:17;33068:33;33060:41;;33156:4;33150;33146:15;33138:23;;32903:265;;;:::o;33174:332::-;;33326:18;33318:6;33315:30;33312:2;;;33348:18;;:::i;:::-;33312:2;33433:4;33429:9;33422:4;33414:6;33410:17;33406:33;33398:41;;33494:4;33488;33484:15;33476:23;;33241:265;;;:::o;33512:141::-;;33584:3;33576:11;;33607:3;33604:1;33597:14;33641:4;33638:1;33628:18;33620:26;;33566:87;;;:::o;33659:98::-;;33744:5;33738:12;33728:22;;33717:40;;;:::o;33763:99::-;;33849:5;33843:12;33833:22;;33822:40;;;:::o;33868:168::-;;33985:6;33980:3;33973:19;34025:4;34020:3;34016:14;34001:29;;33963:73;;;;:::o;34042:147::-;;34180:3;34165:18;;34155:34;;;;:::o;34195:169::-;;34313:6;34308:3;34301:19;34353:4;34348:3;34344:14;34329:29;;34291:73;;;;:::o;34370:148::-;;34509:3;34494:18;;34484:34;;;;:::o;34524:273::-;;34583:20;34601:1;34583:20;:::i;:::-;34578:25;;34617:20;34635:1;34617:20;:::i;:::-;34612:25;;34739:1;34703:34;34699:42;34696:1;34693:49;34690:2;;;34745:18;;:::i;:::-;34690:2;34789:1;34786;34782:9;34775:16;;34568:229;;;;:::o;34803:305::-;;34862:20;34880:1;34862:20;:::i;:::-;34857:25;;34896:20;34914:1;34896:20;:::i;:::-;34891:25;;35050:1;34982:66;34978:74;34975:1;34972:81;34969:2;;;35056:18;;:::i;:::-;34969:2;35100:1;35097;35093:9;35086:16;;34847:261;;;;:::o;35114:185::-;;35171:20;35189:1;35171:20;:::i;:::-;35166:25;;35205:20;35223:1;35205:20;:::i;:::-;35200:25;;35244:1;35234:2;;35249:18;;:::i;:::-;35234:2;35291:1;35288;35284:9;35279:14;;35156:143;;;;:::o;35305:348::-;;35368:20;35386:1;35368:20;:::i;:::-;35363:25;;35402:20;35420:1;35402:20;:::i;:::-;35397:25;;35590:1;35522:66;35518:74;35515:1;35512:81;35507:1;35500:9;35493:17;35489:105;35486:2;;;35597:18;;:::i;:::-;35486:2;35645:1;35642;35638:9;35627:20;;35353:300;;;;:::o;35659:191::-;;35719:20;35737:1;35719:20;:::i;:::-;35714:25;;35753:20;35771:1;35753:20;:::i;:::-;35748:25;;35792:1;35789;35786:8;35783:2;;;35797:18;;:::i;:::-;35783:2;35842:1;35839;35835:9;35827:17;;35704:146;;;;:::o;35856:96::-;;35922:24;35940:5;35922:24;:::i;:::-;35911:35;;35901:51;;;:::o;35958:90::-;;36035:5;36028:13;36021:21;36010:32;;36000:48;;;:::o;36054:149::-;;36130:66;36123:5;36119:78;36108:89;;36098:105;;;:::o;36209:125::-;;36304:24;36322:5;36304:24;:::i;:::-;36293:35;;36283:51;;;:::o;36340:118::-;;36417:34;36410:5;36406:46;36395:57;;36385:73;;;:::o;36464:126::-;;36541:42;36534:5;36530:54;36519:65;;36509:81;;;:::o;36596:77::-;;36662:5;36651:16;;36641:32;;;:::o;36679:154::-;36763:6;36758:3;36753;36740:30;36825:1;36816:6;36811:3;36807:16;36800:27;36730:103;;;:::o;36839:307::-;36907:1;36917:113;36931:6;36928:1;36925:13;36917:113;;;37016:1;37011:3;37007:11;37001:18;36997:1;36992:3;36988:11;36981:39;36953:2;36950:1;36946:10;36941:15;;36917:113;;;37048:6;37045:1;37042:13;37039:2;;;37128:1;37119:6;37114:3;37110:16;37103:27;37039:2;36888:258;;;;:::o;37152:171::-;;37214:24;37232:5;37214:24;:::i;:::-;37205:33;;37260:4;37253:5;37250:15;37247:2;;;37268:18;;:::i;:::-;37247:2;37315:1;37308:5;37304:13;37297:20;;37195:128;;;:::o;37329:320::-;;37410:1;37404:4;37400:12;37390:22;;37457:1;37451:4;37447:12;37478:18;37468:2;;37534:4;37526:6;37522:17;37512:27;;37468:2;37596;37588:6;37585:14;37565:18;37562:38;37559:2;;;37615:18;;:::i;:::-;37559:2;37380:269;;;;:::o;37655:233::-;;37717:24;37735:5;37717:24;:::i;:::-;37708:33;;37763:66;37756:5;37753:77;37750:2;;;37833:18;;:::i;:::-;37750:2;37880:1;37873:5;37869:13;37862:20;;37698:190;;;:::o;37894:176::-;;37943:20;37961:1;37943:20;:::i;:::-;37938:25;;37977:20;37995:1;37977:20;:::i;:::-;37972:25;;38016:1;38006:2;;38021:18;;:::i;:::-;38006:2;38062:1;38059;38055:9;38050:14;;37928:142;;;;:::o;38076:180::-;38124:77;38121:1;38114:88;38221:4;38218:1;38211:15;38245:4;38242:1;38235:15;38262:180;38310:77;38307:1;38300:88;38407:4;38404:1;38397:15;38431:4;38428:1;38421:15;38448:180;38496:77;38493:1;38486:88;38593:4;38590:1;38583:15;38617:4;38614:1;38607:15;38634:180;38682:77;38679:1;38672:88;38779:4;38776:1;38769:15;38803:4;38800:1;38793:15;38820:102;;38912:2;38908:7;38903:2;38896:5;38892:14;38888:28;38878:38;;38868:54;;;:::o;38928:122::-;39001:24;39019:5;39001:24;:::i;:::-;38994:5;38991:35;38981:2;;39040:1;39037;39030:12;38981:2;38971:79;:::o;39056:116::-;39126:21;39141:5;39126:21;:::i;:::-;39119:5;39116:32;39106:2;;39162:1;39159;39152:12;39106:2;39096:76;:::o;39178:120::-;39250:23;39267:5;39250:23;:::i;:::-;39243:5;39240:34;39230:2;;39288:1;39285;39278:12;39230:2;39220:78;:::o;39304:180::-;39406:53;39453:5;39406:53;:::i;:::-;39399:5;39396:64;39386:2;;39474:1;39471;39464:12;39386:2;39376:108;:::o;39490:122::-;39563:24;39581:5;39563:24;:::i;:::-;39556:5;39553:35;39543:2;;39602:1;39599;39592:12;39543:2;39533:79;:::o

Swarm Source

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