ETH Price: $2,432.67 (-2.25%)

Token

AstroBuds Space Club (ABSC)
 

Overview

Max Total Supply

75 ABSC

Holders

16

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 ABSC
0xA3E826a5D1631bAA4cf77d02ed829d2c6FcBc9E9
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:
AstroBuds

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-10-31
*/

//SPDX-License-Identifier: UNLICENSED
pragma solidity 0.8.7;

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


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


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

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


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


/**
 * @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;
        // solhint-disable-next-line no-inline-assembly
        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");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (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");

        // solhint-disable-next-line avoid-low-level-calls
        (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");

        // solhint-disable-next-line avoid-low-level-calls
        (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");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private 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

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}


/*
 * @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) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}


/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant alphabet = "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] = alphabet[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }

}


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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    string internal _tokenURI;


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

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

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

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

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

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

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

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

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

    /**
     * @dev See {IERC721Metadata-symbol}.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }
    
    /// @notice It all points to base reality being a higher order of consciousness, take a deep dive into the work of Jacobo Grinberg.

    function _baseURI() internal view  returns (string memory) {
        return _tokenURI;
    }

    /**
     * @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 uri = _baseURI();
        return
            bytes(uri).length > 0
                ? string(abi.encodePacked(uri, _tokenId.toString(),".json"))
                : "";
    }

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

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

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

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


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 ()  {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view 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 {
        emit OwnershipTransferred(_owner, address(0));
        _owner = 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");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}



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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


contract AstroBuds is ERC721Enumerable, Ownable{
    using Address for address;
    using Strings for uint256;


    uint256 public constant price = 0.08 ether;
    uint public constant maxPurchase = 15;
    bool public activeSale = false;
    uint256 public _maxBuds = 10000;
    uint public budReserve = 250;
    
    address private constant bud1 = 0xD7bC675324574D9B4a6B902b02285d64bE18D2D6; //Orianna
    address private constant bud2= 0x9A61DA167bB190D663a5Cd6701f3EBe46f53E369; //Ana
    address private constant bud3 = 0x69424C27b6Ab57744c595c0bE0abB03B556F673F; // Major Tom
    address private constant bud4 = 0x23A2Fa0E0dcC3B4E718b1a94818e5B123D89B75e; // Carlos
    
    event BudMinted(address sender, uint256 tokenId);
    
    constructor(uint256 totalAstros) ERC721("AstroBuds Space Club", "ABSC"){
        _maxBuds = totalAstros;    
    }


    function disburse()public onlyOwner{
        uint balance = address(this).balance;
        payable(msg.sender).transfer(balance*20/100);
        payable(bud1).transfer(balance*20/100);
        payable(bud2).transfer(balance*20/100);
        payable(bud3).transfer(balance*20/100);
        payable(bud4).transfer(balance*20/100);
    }


    function setBaseURI(string memory uri) public onlyOwner {
        _tokenURI = uri;
    }


    function setSaleState(bool isActive) public onlyOwner {
        activeSale = isActive;
    }


    function reserveAstros(uint numBuds) public onlyOwner {
        require(totalSupply()+numBuds <= _maxBuds, "Reservation exceeds the totalSupply");
        require(numBuds <= budReserve, "Operation exceeds reserve amount");
       for(uint i = 0; i < numBuds; i++){
            uint mintIndex = totalSupply();
            if(totalSupply() < _maxBuds){
                _safeMint(msg.sender, mintIndex);
                budReserve--;
                emit BudMinted(msg.sender, mintIndex);
                
            }
        }
    }

    function mintAstro(uint numBuds) public payable{
        require(activeSale, "Sale is not yet open.  Come back later.");
        require(numBuds <= maxPurchase, "You can only purchase 15 at a time");
        require(totalSupply() + numBuds <= _maxBuds, "Purchase would exceed the total supply of Astrobuds");
        require(price*numBuds<= msg.value, "Wrong amount of Ether sent");
        
        for(uint i = 0; i < numBuds; i++){
            uint mintIndex = totalSupply();
            if(totalSupply() < _maxBuds){
                _safeMint(msg.sender, mintIndex);
                emit BudMinted(msg.sender, mintIndex);
            }
        }
    }


function verifyOwnership(address _owner) public view returns(uint256[]memory){
  uint256 tokenCount = balanceOf(_owner);
        uint256[] memory tokensId = new uint256[](tokenCount);
        for(uint256 i; i < tokenCount; i++){
            tokensId[i] = tokenOfOwnerByIndex(_owner, i);
        }
        return tokensId;
}

function contractURI()public pure returns(string memory){
      return "ipfs://QmWMhW1z4sAcieT5ygksEgi7TVewczKquM7ngVSNytc2Ct";
}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"uint256","name":"totalAstros","type":"uint256"}],"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":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"BudMinted","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":"_maxBuds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"activeSale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"budReserve","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"disburse","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPurchase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numBuds","type":"uint256"}],"name":"mintAstro","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":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numBuds","type":"uint256"}],"name":"reserveAstros","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":"uri","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"isActive","type":"bool"}],"name":"setSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"verifyOwnership","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"}]

60806040526000600b60146101000a81548160ff021916908315150217905550612710600c5560fa600d553480156200003757600080fd5b5060405162004a7438038062004a7483398181016040528101906200005d91906200028b565b6040518060400160405280601481526020017f417374726f4275647320537061636520436c75620000000000000000000000008152506040518060400160405280600481526020017f41425343000000000000000000000000000000000000000000000000000000008152508160009080519060200190620000e1929190620001c4565b508060019080519060200190620000fa929190620001c4565b50505060006200010f620001bc60201b60201c565b905080600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35080600c81905550506200034b565b600033905090565b828054620001d290620002c7565b90600052602060002090601f016020900481019282620001f6576000855562000242565b82601f106200021157805160ff191683800117855562000242565b8280016001018555821562000242579182015b828111156200024157825182559160200191906001019062000224565b5b50905062000251919062000255565b5090565b5b808211156200027057600081600090555060010162000256565b5090565b600081519050620002858162000331565b92915050565b600060208284031215620002a457620002a36200032c565b5b6000620002b48482850162000274565b91505092915050565b6000819050919050565b60006002820490506001821680620002e057607f821691505b60208210811415620002f757620002f6620002fd565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b6200033c81620002bd565b81146200034857600080fd5b50565b614719806200035b6000396000f3fe6080604052600436106101d85760003560e01c806370a0823111610102578063abc6fd0b11610095578063c87b56dd11610064578063c87b56dd1461069d578063e8a3d485146106da578063e985e9c514610705578063f2fde38b14610742576101d8565b8063abc6fd0b14610618578063addade171461062f578063b88d4fde1461064b578063c4e3709514610674576101d8565b806395d89b41116100d157806395d89b411461056e578063977b055b14610599578063a035b1fe146105c4578063a22cb465146105ef576101d8565b806370a08231146104c6578063715018a6146105035780638133843a1461051a5780638da5cb5b14610543576101d8565b80632cc9c1511161017a5780634f6ccce7116101495780634f6ccce7146103f857806355f804b31461043557806359a1ee991461045e5780636352211e14610489576101d8565b80632cc9c1511461032a5780632f745c591461036757806342842e0e146103a45780634e17700a146103cd576101d8565b8063081812fc116101b6578063081812fc14610270578063095ea7b3146102ad57806318160ddd146102d657806323b872dd14610301576101d8565b806301ffc9a7146101dd57806304862d541461021a57806306fdde0314610245575b600080fd5b3480156101e957600080fd5b5061020460048036038101906101ff91906130c8565b61076b565b6040516102119190613739565b60405180910390f35b34801561022657600080fd5b5061022f6107e5565b60405161023c9190613a76565b60405180910390f35b34801561025157600080fd5b5061025a6107eb565b6040516102679190613754565b60405180910390f35b34801561027c57600080fd5b506102976004803603810190610292919061316b565b61087d565b6040516102a49190613687565b60405180910390f35b3480156102b957600080fd5b506102d460048036038101906102cf919061305b565b610902565b005b3480156102e257600080fd5b506102eb610a1a565b6040516102f89190613a76565b60405180910390f35b34801561030d57600080fd5b5061032860048036038101906103239190612f45565b610a27565b005b34801561033657600080fd5b50610351600480360381019061034c9190612ed8565b610a87565b60405161035e9190613717565b60405180910390f35b34801561037357600080fd5b5061038e6004803603810190610389919061305b565b610b35565b60405161039b9190613a76565b60405180910390f35b3480156103b057600080fd5b506103cb60048036038101906103c69190612f45565b610bda565b005b3480156103d957600080fd5b506103e2610bfa565b6040516103ef9190613739565b60405180910390f35b34801561040457600080fd5b5061041f600480360381019061041a919061316b565b610c0d565b60405161042c9190613a76565b60405180910390f35b34801561044157600080fd5b5061045c60048036038101906104579190613122565b610c7e565b005b34801561046a57600080fd5b50610473610d2f565b6040516104809190613a76565b60405180910390f35b34801561049557600080fd5b506104b060048036038101906104ab919061316b565b610d35565b6040516104bd9190613687565b60405180910390f35b3480156104d257600080fd5b506104ed60048036038101906104e89190612ed8565b610de7565b6040516104fa9190613a76565b60405180910390f35b34801561050f57600080fd5b50610518610e9f565b005b34801561052657600080fd5b50610541600480360381019061053c919061316b565b610ff7565b005b34801561054f57600080fd5b506105586111c6565b6040516105659190613687565b60405180910390f35b34801561057a57600080fd5b506105836111f0565b6040516105909190613754565b60405180910390f35b3480156105a557600080fd5b506105ae611282565b6040516105bb9190613a76565b60405180910390f35b3480156105d057600080fd5b506105d9611287565b6040516105e69190613a76565b60405180910390f35b3480156105fb57600080fd5b506106166004803603810190610611919061301b565b611293565b005b34801561062457600080fd5b5061062d611414565b005b6106496004803603810190610644919061316b565b6116de565b005b34801561065757600080fd5b50610672600480360381019061066d9190612f98565b6118a2565b005b34801561068057600080fd5b5061069b6004803603810190610696919061309b565b611904565b005b3480156106a957600080fd5b506106c460048036038101906106bf919061316b565b6119b8565b6040516106d19190613754565b60405180910390f35b3480156106e657600080fd5b506106ef611a5f565b6040516106fc9190613754565b60405180910390f35b34801561071157600080fd5b5061072c60048036038101906107279190612f05565b611a7f565b6040516107399190613739565b60405180910390f35b34801561074e57600080fd5b5061076960048036038101906107649190612ed8565b611b13565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107de57506107dd82611cda565b5b9050919050565b600c5481565b6060600080546107fa90613d89565b80601f016020809104026020016040519081016040528092919081815260200182805461082690613d89565b80156108735780601f1061084857610100808354040283529160200191610873565b820191906000526020600020905b81548152906001019060200180831161085657829003601f168201915b5050505050905090565b600061088882611dbc565b6108c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108be90613936565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061090d82610d35565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561097e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610975906139f6565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661099d611e28565b73ffffffffffffffffffffffffffffffffffffffff1614806109cc57506109cb816109c6611e28565b611a7f565b5b610a0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0290613896565b60405180910390fd5b610a158383611e30565b505050565b6000600980549050905090565b610a38610a32611e28565b82611ee9565b610a77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6e90613a16565b60405180910390fd5b610a82838383611fc7565b505050565b60606000610a9483610de7565b905060008167ffffffffffffffff811115610ab257610ab1613f51565b5b604051908082528060200260200182016040528015610ae05781602001602082028036833780820191505090505b50905060005b82811015610b2a57610af88582610b35565b828281518110610b0b57610b0a613f22565b5b6020026020010181815250508080610b2290613dec565b915050610ae6565b508092505050919050565b6000610b4083610de7565b8210610b81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7890613796565b60405180910390fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610bf5838383604051806020016040528060008152506118a2565b505050565b600b60149054906101000a900460ff1681565b6000610c17610a1a565b8210610c58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4f90613a36565b60405180910390fd5b60098281548110610c6c57610c6b613f22565b5b90600052602060002001549050919050565b610c86611e28565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0c90613956565b60405180910390fd5b8060029080519060200190610d2b929190612cec565b5050565b600d5481565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610dde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd5906138d6565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610e58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4f906138b6565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ea7611e28565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2d90613956565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b610fff611e28565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461108e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108590613956565b60405180910390fd5b600c548161109a610a1a565b6110a49190613b94565b11156110e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110dc906139d6565b60405180910390fd5b600d5481111561112a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112190613776565b60405180910390fd5b60005b818110156111c257600061113f610a1a565b9050600c5461114c610a1a565b10156111ae5761115c3382612223565b600d600081548092919061116f90613d5f565b91905055507f4de4104dfde259e161e62343a7f07c0721f568504732971f5b172c91fe64aac633826040516111a59291906136ee565b60405180910390a15b5080806111ba90613dec565b91505061112d565b5050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546111ff90613d89565b80601f016020809104026020016040519081016040528092919081815260200182805461122b90613d89565b80156112785780601f1061124d57610100808354040283529160200191611278565b820191906000526020600020905b81548152906001019060200180831161125b57829003601f168201915b5050505050905090565b600f81565b67011c37937e08000081565b61129b611e28565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611309576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130090613856565b60405180910390fd5b8060066000611316611e28565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166113c3611e28565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516114089190613739565b60405180910390a35050565b61141c611e28565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a290613956565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc60646014846114d99190613c1b565b6114e39190613bea565b9081150290604051600060405180830381858888f1935050505015801561150e573d6000803e3d6000fd5b5073d7bc675324574d9b4a6b902b02285d64be18d2d673ffffffffffffffffffffffffffffffffffffffff166108fc606460148461154c9190613c1b565b6115569190613bea565b9081150290604051600060405180830381858888f19350505050158015611581573d6000803e3d6000fd5b50739a61da167bb190d663a5cd6701f3ebe46f53e36973ffffffffffffffffffffffffffffffffffffffff166108fc60646014846115bf9190613c1b565b6115c99190613bea565b9081150290604051600060405180830381858888f193505050501580156115f4573d6000803e3d6000fd5b507369424c27b6ab57744c595c0be0abb03b556f673f73ffffffffffffffffffffffffffffffffffffffff166108fc60646014846116329190613c1b565b61163c9190613bea565b9081150290604051600060405180830381858888f19350505050158015611667573d6000803e3d6000fd5b507323a2fa0e0dcc3b4e718b1a94818e5b123d89b75e73ffffffffffffffffffffffffffffffffffffffff166108fc60646014846116a59190613c1b565b6116af9190613bea565b9081150290604051600060405180830381858888f193505050501580156116da573d6000803e3d6000fd5b5050565b600b60149054906101000a900460ff1661172d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172490613816565b60405180910390fd5b600f811115611771576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611768906138f6565b60405180910390fd5b600c548161177d610a1a565b6117879190613b94565b11156117c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117bf906139b6565b60405180910390fd5b348167011c37937e0800006117dd9190613c1b565b111561181e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181590613a56565b60405180910390fd5b60005b8181101561189e576000611833610a1a565b9050600c54611840610a1a565b101561188a576118503382612223565b7f4de4104dfde259e161e62343a7f07c0721f568504732971f5b172c91fe64aac633826040516118819291906136ee565b60405180910390a15b50808061189690613dec565b915050611821565b5050565b6118b36118ad611e28565b83611ee9565b6118f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e990613a16565b60405180910390fd5b6118fe84848484612241565b50505050565b61190c611e28565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461199b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199290613956565b60405180910390fd5b80600b60146101000a81548160ff02191690831515021790555050565b60606119c382611dbc565b611a02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f990613996565b60405180910390fd5b6000611a0c61229d565b90506000815111611a2c5760405180602001604052806000815250611a57565b80611a368461232f565b604051602001611a47929190613658565b6040516020818303038152906040525b915050919050565b60606040518060600160405280603581526020016146af60359139905090565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611b1b611e28565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611baa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba190613956565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c11906137d6565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611da557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611db55750611db482612490565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611ea383610d35565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611ef482611dbc565b611f33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2a90613876565b60405180910390fd5b6000611f3e83610d35565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611fad57508373ffffffffffffffffffffffffffffffffffffffff16611f958461087d565b73ffffffffffffffffffffffffffffffffffffffff16145b80611fbe5750611fbd8185611a7f565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611fe782610d35565b73ffffffffffffffffffffffffffffffffffffffff161461203d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203490613976565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a490613836565b60405180910390fd5b6120b88383836124fa565b6120c3600082611e30565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121139190613c75565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461216a9190613b94565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b61223d82826040518060200160405280600081525061260e565b5050565b61224c848484611fc7565b61225884848484612669565b612297576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228e906137b6565b60405180910390fd5b50505050565b6060600280546122ac90613d89565b80601f01602080910402602001604051908101604052809291908181526020018280546122d890613d89565b80156123255780601f106122fa57610100808354040283529160200191612325565b820191906000526020600020905b81548152906001019060200180831161230857829003601f168201915b5050505050905090565b60606000821415612377576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061248b565b600082905060005b600082146123a957808061239290613dec565b915050600a826123a29190613bea565b915061237f565b60008167ffffffffffffffff8111156123c5576123c4613f51565b5b6040519080825280601f01601f1916602001820160405280156123f75781602001600182028036833780820191505090505b5090505b60008514612484576001826124109190613c75565b9150600a8561241f9190613e35565b603061242b9190613b94565b60f81b81838151811061244157612440613f22565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561247d9190613bea565b94506123fb565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612505838383612800565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156125485761254381612805565b612587565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461258657612585838261284e565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125ca576125c5816129bb565b612609565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612608576126078282612a8c565b5b5b505050565b6126188383612b0b565b6126256000848484612669565b612664576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265b906137b6565b60405180910390fd5b505050565b600061268a8473ffffffffffffffffffffffffffffffffffffffff16612cd9565b156127f3578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026126b3611e28565b8786866040518563ffffffff1660e01b81526004016126d594939291906136a2565b602060405180830381600087803b1580156126ef57600080fd5b505af192505050801561272057506040513d601f19601f8201168201806040525081019061271d91906130f5565b60015b6127a3573d8060008114612750576040519150601f19603f3d011682016040523d82523d6000602084013e612755565b606091505b5060008151141561279b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612792906137b6565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506127f8565b600190505b949350505050565b505050565b600980549050600a600083815260200190815260200160002081905550600981908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161285b84610de7565b6128659190613c75565b905060006008600084815260200190815260200160002054905081811461294a576000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816008600083815260200190815260200160002081905550505b6008600084815260200190815260200160002060009055600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016009805490506129cf9190613c75565b90506000600a60008481526020019081526020016000205490506000600983815481106129ff576129fe613f22565b5b906000526020600020015490508060098381548110612a2157612a20613f22565b5b906000526020600020018190555081600a600083815260200190815260200160002081905550600a6000858152602001908152602001600020600090556009805480612a7057612a6f613ef3565b5b6001900381819060005260206000200160009055905550505050565b6000612a9783610de7565b905081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806008600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7290613916565b60405180910390fd5b612b8481611dbc565b15612bc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bbb906137f6565b60405180910390fd5b612bd0600083836124fa565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c209190613b94565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054612cf890613d89565b90600052602060002090601f016020900481019282612d1a5760008555612d61565b82601f10612d3357805160ff1916838001178555612d61565b82800160010185558215612d61579182015b82811115612d60578251825591602001919060010190612d45565b5b509050612d6e9190612d72565b5090565b5b80821115612d8b576000816000905550600101612d73565b5090565b6000612da2612d9d84613ab6565b613a91565b905082815260208101848484011115612dbe57612dbd613f85565b5b612dc9848285613d1d565b509392505050565b6000612de4612ddf84613ae7565b613a91565b905082815260208101848484011115612e0057612dff613f85565b5b612e0b848285613d1d565b509392505050565b600081359050612e2281614652565b92915050565b600081359050612e3781614669565b92915050565b600081359050612e4c81614680565b92915050565b600081519050612e6181614680565b92915050565b600082601f830112612e7c57612e7b613f80565b5b8135612e8c848260208601612d8f565b91505092915050565b600082601f830112612eaa57612ea9613f80565b5b8135612eba848260208601612dd1565b91505092915050565b600081359050612ed281614697565b92915050565b600060208284031215612eee57612eed613f8f565b5b6000612efc84828501612e13565b91505092915050565b60008060408385031215612f1c57612f1b613f8f565b5b6000612f2a85828601612e13565b9250506020612f3b85828601612e13565b9150509250929050565b600080600060608486031215612f5e57612f5d613f8f565b5b6000612f6c86828701612e13565b9350506020612f7d86828701612e13565b9250506040612f8e86828701612ec3565b9150509250925092565b60008060008060808587031215612fb257612fb1613f8f565b5b6000612fc087828801612e13565b9450506020612fd187828801612e13565b9350506040612fe287828801612ec3565b925050606085013567ffffffffffffffff81111561300357613002613f8a565b5b61300f87828801612e67565b91505092959194509250565b6000806040838503121561303257613031613f8f565b5b600061304085828601612e13565b925050602061305185828601612e28565b9150509250929050565b6000806040838503121561307257613071613f8f565b5b600061308085828601612e13565b925050602061309185828601612ec3565b9150509250929050565b6000602082840312156130b1576130b0613f8f565b5b60006130bf84828501612e28565b91505092915050565b6000602082840312156130de576130dd613f8f565b5b60006130ec84828501612e3d565b91505092915050565b60006020828403121561310b5761310a613f8f565b5b600061311984828501612e52565b91505092915050565b60006020828403121561313857613137613f8f565b5b600082013567ffffffffffffffff81111561315657613155613f8a565b5b61316284828501612e95565b91505092915050565b60006020828403121561318157613180613f8f565b5b600061318f84828501612ec3565b91505092915050565b60006131a4838361363a565b60208301905092915050565b6131b981613ca9565b82525050565b60006131ca82613b28565b6131d48185613b56565b93506131df83613b18565b8060005b838110156132105781516131f78882613198565b975061320283613b49565b9250506001810190506131e3565b5085935050505092915050565b61322681613cbb565b82525050565b600061323782613b33565b6132418185613b67565b9350613251818560208601613d2c565b61325a81613f94565b840191505092915050565b600061327082613b3e565b61327a8185613b78565b935061328a818560208601613d2c565b61329381613f94565b840191505092915050565b60006132a982613b3e565b6132b38185613b89565b93506132c3818560208601613d2c565b80840191505092915050565b60006132dc602083613b78565b91506132e782613fa5565b602082019050919050565b60006132ff602b83613b78565b915061330a82613fce565b604082019050919050565b6000613322603283613b78565b915061332d8261401d565b604082019050919050565b6000613345602683613b78565b91506133508261406c565b604082019050919050565b6000613368601c83613b78565b9150613373826140bb565b602082019050919050565b600061338b602783613b78565b9150613396826140e4565b604082019050919050565b60006133ae602483613b78565b91506133b982614133565b604082019050919050565b60006133d1601983613b78565b91506133dc82614182565b602082019050919050565b60006133f4602c83613b78565b91506133ff826141ab565b604082019050919050565b6000613417603883613b78565b9150613422826141fa565b604082019050919050565b600061343a602a83613b78565b915061344582614249565b604082019050919050565b600061345d602983613b78565b915061346882614298565b604082019050919050565b6000613480602283613b78565b915061348b826142e7565b604082019050919050565b60006134a3602083613b78565b91506134ae82614336565b602082019050919050565b60006134c6602c83613b78565b91506134d18261435f565b604082019050919050565b60006134e9600583613b89565b91506134f4826143ae565b600582019050919050565b600061350c602083613b78565b9150613517826143d7565b602082019050919050565b600061352f602983613b78565b915061353a82614400565b604082019050919050565b6000613552602f83613b78565b915061355d8261444f565b604082019050919050565b6000613575603383613b78565b91506135808261449e565b604082019050919050565b6000613598602383613b78565b91506135a3826144ed565b604082019050919050565b60006135bb602183613b78565b91506135c68261453c565b604082019050919050565b60006135de603183613b78565b91506135e98261458b565b604082019050919050565b6000613601602c83613b78565b915061360c826145da565b604082019050919050565b6000613624601a83613b78565b915061362f82614629565b602082019050919050565b61364381613d13565b82525050565b61365281613d13565b82525050565b6000613664828561329e565b9150613670828461329e565b915061367b826134dc565b91508190509392505050565b600060208201905061369c60008301846131b0565b92915050565b60006080820190506136b760008301876131b0565b6136c460208301866131b0565b6136d16040830185613649565b81810360608301526136e3818461322c565b905095945050505050565b600060408201905061370360008301856131b0565b6137106020830184613649565b9392505050565b6000602082019050818103600083015261373181846131bf565b905092915050565b600060208201905061374e600083018461321d565b92915050565b6000602082019050818103600083015261376e8184613265565b905092915050565b6000602082019050818103600083015261378f816132cf565b9050919050565b600060208201905081810360008301526137af816132f2565b9050919050565b600060208201905081810360008301526137cf81613315565b9050919050565b600060208201905081810360008301526137ef81613338565b9050919050565b6000602082019050818103600083015261380f8161335b565b9050919050565b6000602082019050818103600083015261382f8161337e565b9050919050565b6000602082019050818103600083015261384f816133a1565b9050919050565b6000602082019050818103600083015261386f816133c4565b9050919050565b6000602082019050818103600083015261388f816133e7565b9050919050565b600060208201905081810360008301526138af8161340a565b9050919050565b600060208201905081810360008301526138cf8161342d565b9050919050565b600060208201905081810360008301526138ef81613450565b9050919050565b6000602082019050818103600083015261390f81613473565b9050919050565b6000602082019050818103600083015261392f81613496565b9050919050565b6000602082019050818103600083015261394f816134b9565b9050919050565b6000602082019050818103600083015261396f816134ff565b9050919050565b6000602082019050818103600083015261398f81613522565b9050919050565b600060208201905081810360008301526139af81613545565b9050919050565b600060208201905081810360008301526139cf81613568565b9050919050565b600060208201905081810360008301526139ef8161358b565b9050919050565b60006020820190508181036000830152613a0f816135ae565b9050919050565b60006020820190508181036000830152613a2f816135d1565b9050919050565b60006020820190508181036000830152613a4f816135f4565b9050919050565b60006020820190508181036000830152613a6f81613617565b9050919050565b6000602082019050613a8b6000830184613649565b92915050565b6000613a9b613aac565b9050613aa78282613dbb565b919050565b6000604051905090565b600067ffffffffffffffff821115613ad157613ad0613f51565b5b613ada82613f94565b9050602081019050919050565b600067ffffffffffffffff821115613b0257613b01613f51565b5b613b0b82613f94565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613b9f82613d13565b9150613baa83613d13565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613bdf57613bde613e66565b5b828201905092915050565b6000613bf582613d13565b9150613c0083613d13565b925082613c1057613c0f613e95565b5b828204905092915050565b6000613c2682613d13565b9150613c3183613d13565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613c6a57613c69613e66565b5b828202905092915050565b6000613c8082613d13565b9150613c8b83613d13565b925082821015613c9e57613c9d613e66565b5b828203905092915050565b6000613cb482613cf3565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613d4a578082015181840152602081019050613d2f565b83811115613d59576000848401525b50505050565b6000613d6a82613d13565b91506000821415613d7e57613d7d613e66565b5b600182039050919050565b60006002820490506001821680613da157607f821691505b60208210811415613db557613db4613ec4565b5b50919050565b613dc482613f94565b810181811067ffffffffffffffff82111715613de357613de2613f51565b5b80604052505050565b6000613df782613d13565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613e2a57613e29613e66565b5b600182019050919050565b6000613e4082613d13565b9150613e4b83613d13565b925082613e5b57613e5a613e95565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f7065726174696f6e2065786365656473207265736572766520616d6f756e74600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f53616c65206973206e6f7420796574206f70656e2e2020436f6d65206261636b60008201527f206c617465722e00000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f596f752063616e206f6e6c79207075726368617365203135206174206120746960008201527f6d65000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f507572636861736520776f756c64206578636565642074686520746f74616c2060008201527f737570706c79206f6620417374726f6275647300000000000000000000000000602082015250565b7f5265736572766174696f6e20657863656564732074686520746f74616c53757060008201527f706c790000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f57726f6e6720616d6f756e74206f662045746865722073656e74000000000000600082015250565b61465b81613ca9565b811461466657600080fd5b50565b61467281613cbb565b811461467d57600080fd5b50565b61468981613cc7565b811461469457600080fd5b50565b6146a081613d13565b81146146ab57600080fd5b5056fe697066733a2f2f516d574d6857317a347341636965543579676b734567693754566577637a4b71754d376e6756534e797463324374a2646970667358221220b27e184ab7a8d45fc17483763260611df8ab5c73d40ecf8c84a997e618746a8d64736f6c634300080700330000000000000000000000000000000000000000000000000000000000002710

Deployed Bytecode

0x6080604052600436106101d85760003560e01c806370a0823111610102578063abc6fd0b11610095578063c87b56dd11610064578063c87b56dd1461069d578063e8a3d485146106da578063e985e9c514610705578063f2fde38b14610742576101d8565b8063abc6fd0b14610618578063addade171461062f578063b88d4fde1461064b578063c4e3709514610674576101d8565b806395d89b41116100d157806395d89b411461056e578063977b055b14610599578063a035b1fe146105c4578063a22cb465146105ef576101d8565b806370a08231146104c6578063715018a6146105035780638133843a1461051a5780638da5cb5b14610543576101d8565b80632cc9c1511161017a5780634f6ccce7116101495780634f6ccce7146103f857806355f804b31461043557806359a1ee991461045e5780636352211e14610489576101d8565b80632cc9c1511461032a5780632f745c591461036757806342842e0e146103a45780634e17700a146103cd576101d8565b8063081812fc116101b6578063081812fc14610270578063095ea7b3146102ad57806318160ddd146102d657806323b872dd14610301576101d8565b806301ffc9a7146101dd57806304862d541461021a57806306fdde0314610245575b600080fd5b3480156101e957600080fd5b5061020460048036038101906101ff91906130c8565b61076b565b6040516102119190613739565b60405180910390f35b34801561022657600080fd5b5061022f6107e5565b60405161023c9190613a76565b60405180910390f35b34801561025157600080fd5b5061025a6107eb565b6040516102679190613754565b60405180910390f35b34801561027c57600080fd5b506102976004803603810190610292919061316b565b61087d565b6040516102a49190613687565b60405180910390f35b3480156102b957600080fd5b506102d460048036038101906102cf919061305b565b610902565b005b3480156102e257600080fd5b506102eb610a1a565b6040516102f89190613a76565b60405180910390f35b34801561030d57600080fd5b5061032860048036038101906103239190612f45565b610a27565b005b34801561033657600080fd5b50610351600480360381019061034c9190612ed8565b610a87565b60405161035e9190613717565b60405180910390f35b34801561037357600080fd5b5061038e6004803603810190610389919061305b565b610b35565b60405161039b9190613a76565b60405180910390f35b3480156103b057600080fd5b506103cb60048036038101906103c69190612f45565b610bda565b005b3480156103d957600080fd5b506103e2610bfa565b6040516103ef9190613739565b60405180910390f35b34801561040457600080fd5b5061041f600480360381019061041a919061316b565b610c0d565b60405161042c9190613a76565b60405180910390f35b34801561044157600080fd5b5061045c60048036038101906104579190613122565b610c7e565b005b34801561046a57600080fd5b50610473610d2f565b6040516104809190613a76565b60405180910390f35b34801561049557600080fd5b506104b060048036038101906104ab919061316b565b610d35565b6040516104bd9190613687565b60405180910390f35b3480156104d257600080fd5b506104ed60048036038101906104e89190612ed8565b610de7565b6040516104fa9190613a76565b60405180910390f35b34801561050f57600080fd5b50610518610e9f565b005b34801561052657600080fd5b50610541600480360381019061053c919061316b565b610ff7565b005b34801561054f57600080fd5b506105586111c6565b6040516105659190613687565b60405180910390f35b34801561057a57600080fd5b506105836111f0565b6040516105909190613754565b60405180910390f35b3480156105a557600080fd5b506105ae611282565b6040516105bb9190613a76565b60405180910390f35b3480156105d057600080fd5b506105d9611287565b6040516105e69190613a76565b60405180910390f35b3480156105fb57600080fd5b506106166004803603810190610611919061301b565b611293565b005b34801561062457600080fd5b5061062d611414565b005b6106496004803603810190610644919061316b565b6116de565b005b34801561065757600080fd5b50610672600480360381019061066d9190612f98565b6118a2565b005b34801561068057600080fd5b5061069b6004803603810190610696919061309b565b611904565b005b3480156106a957600080fd5b506106c460048036038101906106bf919061316b565b6119b8565b6040516106d19190613754565b60405180910390f35b3480156106e657600080fd5b506106ef611a5f565b6040516106fc9190613754565b60405180910390f35b34801561071157600080fd5b5061072c60048036038101906107279190612f05565b611a7f565b6040516107399190613739565b60405180910390f35b34801561074e57600080fd5b5061076960048036038101906107649190612ed8565b611b13565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107de57506107dd82611cda565b5b9050919050565b600c5481565b6060600080546107fa90613d89565b80601f016020809104026020016040519081016040528092919081815260200182805461082690613d89565b80156108735780601f1061084857610100808354040283529160200191610873565b820191906000526020600020905b81548152906001019060200180831161085657829003601f168201915b5050505050905090565b600061088882611dbc565b6108c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108be90613936565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061090d82610d35565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561097e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610975906139f6565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661099d611e28565b73ffffffffffffffffffffffffffffffffffffffff1614806109cc57506109cb816109c6611e28565b611a7f565b5b610a0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0290613896565b60405180910390fd5b610a158383611e30565b505050565b6000600980549050905090565b610a38610a32611e28565b82611ee9565b610a77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6e90613a16565b60405180910390fd5b610a82838383611fc7565b505050565b60606000610a9483610de7565b905060008167ffffffffffffffff811115610ab257610ab1613f51565b5b604051908082528060200260200182016040528015610ae05781602001602082028036833780820191505090505b50905060005b82811015610b2a57610af88582610b35565b828281518110610b0b57610b0a613f22565b5b6020026020010181815250508080610b2290613dec565b915050610ae6565b508092505050919050565b6000610b4083610de7565b8210610b81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7890613796565b60405180910390fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610bf5838383604051806020016040528060008152506118a2565b505050565b600b60149054906101000a900460ff1681565b6000610c17610a1a565b8210610c58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4f90613a36565b60405180910390fd5b60098281548110610c6c57610c6b613f22565b5b90600052602060002001549050919050565b610c86611e28565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0c90613956565b60405180910390fd5b8060029080519060200190610d2b929190612cec565b5050565b600d5481565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610dde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd5906138d6565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610e58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4f906138b6565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ea7611e28565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2d90613956565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b610fff611e28565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461108e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108590613956565b60405180910390fd5b600c548161109a610a1a565b6110a49190613b94565b11156110e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110dc906139d6565b60405180910390fd5b600d5481111561112a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112190613776565b60405180910390fd5b60005b818110156111c257600061113f610a1a565b9050600c5461114c610a1a565b10156111ae5761115c3382612223565b600d600081548092919061116f90613d5f565b91905055507f4de4104dfde259e161e62343a7f07c0721f568504732971f5b172c91fe64aac633826040516111a59291906136ee565b60405180910390a15b5080806111ba90613dec565b91505061112d565b5050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546111ff90613d89565b80601f016020809104026020016040519081016040528092919081815260200182805461122b90613d89565b80156112785780601f1061124d57610100808354040283529160200191611278565b820191906000526020600020905b81548152906001019060200180831161125b57829003601f168201915b5050505050905090565b600f81565b67011c37937e08000081565b61129b611e28565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611309576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130090613856565b60405180910390fd5b8060066000611316611e28565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166113c3611e28565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516114089190613739565b60405180910390a35050565b61141c611e28565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a290613956565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc60646014846114d99190613c1b565b6114e39190613bea565b9081150290604051600060405180830381858888f1935050505015801561150e573d6000803e3d6000fd5b5073d7bc675324574d9b4a6b902b02285d64be18d2d673ffffffffffffffffffffffffffffffffffffffff166108fc606460148461154c9190613c1b565b6115569190613bea565b9081150290604051600060405180830381858888f19350505050158015611581573d6000803e3d6000fd5b50739a61da167bb190d663a5cd6701f3ebe46f53e36973ffffffffffffffffffffffffffffffffffffffff166108fc60646014846115bf9190613c1b565b6115c99190613bea565b9081150290604051600060405180830381858888f193505050501580156115f4573d6000803e3d6000fd5b507369424c27b6ab57744c595c0be0abb03b556f673f73ffffffffffffffffffffffffffffffffffffffff166108fc60646014846116329190613c1b565b61163c9190613bea565b9081150290604051600060405180830381858888f19350505050158015611667573d6000803e3d6000fd5b507323a2fa0e0dcc3b4e718b1a94818e5b123d89b75e73ffffffffffffffffffffffffffffffffffffffff166108fc60646014846116a59190613c1b565b6116af9190613bea565b9081150290604051600060405180830381858888f193505050501580156116da573d6000803e3d6000fd5b5050565b600b60149054906101000a900460ff1661172d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172490613816565b60405180910390fd5b600f811115611771576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611768906138f6565b60405180910390fd5b600c548161177d610a1a565b6117879190613b94565b11156117c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117bf906139b6565b60405180910390fd5b348167011c37937e0800006117dd9190613c1b565b111561181e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181590613a56565b60405180910390fd5b60005b8181101561189e576000611833610a1a565b9050600c54611840610a1a565b101561188a576118503382612223565b7f4de4104dfde259e161e62343a7f07c0721f568504732971f5b172c91fe64aac633826040516118819291906136ee565b60405180910390a15b50808061189690613dec565b915050611821565b5050565b6118b36118ad611e28565b83611ee9565b6118f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e990613a16565b60405180910390fd5b6118fe84848484612241565b50505050565b61190c611e28565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461199b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199290613956565b60405180910390fd5b80600b60146101000a81548160ff02191690831515021790555050565b60606119c382611dbc565b611a02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f990613996565b60405180910390fd5b6000611a0c61229d565b90506000815111611a2c5760405180602001604052806000815250611a57565b80611a368461232f565b604051602001611a47929190613658565b6040516020818303038152906040525b915050919050565b60606040518060600160405280603581526020016146af60359139905090565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611b1b611e28565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611baa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba190613956565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c11906137d6565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611da557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611db55750611db482612490565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611ea383610d35565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611ef482611dbc565b611f33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2a90613876565b60405180910390fd5b6000611f3e83610d35565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611fad57508373ffffffffffffffffffffffffffffffffffffffff16611f958461087d565b73ffffffffffffffffffffffffffffffffffffffff16145b80611fbe5750611fbd8185611a7f565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611fe782610d35565b73ffffffffffffffffffffffffffffffffffffffff161461203d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203490613976565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a490613836565b60405180910390fd5b6120b88383836124fa565b6120c3600082611e30565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121139190613c75565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461216a9190613b94565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b61223d82826040518060200160405280600081525061260e565b5050565b61224c848484611fc7565b61225884848484612669565b612297576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228e906137b6565b60405180910390fd5b50505050565b6060600280546122ac90613d89565b80601f01602080910402602001604051908101604052809291908181526020018280546122d890613d89565b80156123255780601f106122fa57610100808354040283529160200191612325565b820191906000526020600020905b81548152906001019060200180831161230857829003601f168201915b5050505050905090565b60606000821415612377576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061248b565b600082905060005b600082146123a957808061239290613dec565b915050600a826123a29190613bea565b915061237f565b60008167ffffffffffffffff8111156123c5576123c4613f51565b5b6040519080825280601f01601f1916602001820160405280156123f75781602001600182028036833780820191505090505b5090505b60008514612484576001826124109190613c75565b9150600a8561241f9190613e35565b603061242b9190613b94565b60f81b81838151811061244157612440613f22565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561247d9190613bea565b94506123fb565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612505838383612800565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156125485761254381612805565b612587565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461258657612585838261284e565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125ca576125c5816129bb565b612609565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612608576126078282612a8c565b5b5b505050565b6126188383612b0b565b6126256000848484612669565b612664576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265b906137b6565b60405180910390fd5b505050565b600061268a8473ffffffffffffffffffffffffffffffffffffffff16612cd9565b156127f3578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026126b3611e28565b8786866040518563ffffffff1660e01b81526004016126d594939291906136a2565b602060405180830381600087803b1580156126ef57600080fd5b505af192505050801561272057506040513d601f19601f8201168201806040525081019061271d91906130f5565b60015b6127a3573d8060008114612750576040519150601f19603f3d011682016040523d82523d6000602084013e612755565b606091505b5060008151141561279b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612792906137b6565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506127f8565b600190505b949350505050565b505050565b600980549050600a600083815260200190815260200160002081905550600981908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161285b84610de7565b6128659190613c75565b905060006008600084815260200190815260200160002054905081811461294a576000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816008600083815260200190815260200160002081905550505b6008600084815260200190815260200160002060009055600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016009805490506129cf9190613c75565b90506000600a60008481526020019081526020016000205490506000600983815481106129ff576129fe613f22565b5b906000526020600020015490508060098381548110612a2157612a20613f22565b5b906000526020600020018190555081600a600083815260200190815260200160002081905550600a6000858152602001908152602001600020600090556009805480612a7057612a6f613ef3565b5b6001900381819060005260206000200160009055905550505050565b6000612a9783610de7565b905081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806008600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7290613916565b60405180910390fd5b612b8481611dbc565b15612bc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bbb906137f6565b60405180910390fd5b612bd0600083836124fa565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c209190613b94565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054612cf890613d89565b90600052602060002090601f016020900481019282612d1a5760008555612d61565b82601f10612d3357805160ff1916838001178555612d61565b82800160010185558215612d61579182015b82811115612d60578251825591602001919060010190612d45565b5b509050612d6e9190612d72565b5090565b5b80821115612d8b576000816000905550600101612d73565b5090565b6000612da2612d9d84613ab6565b613a91565b905082815260208101848484011115612dbe57612dbd613f85565b5b612dc9848285613d1d565b509392505050565b6000612de4612ddf84613ae7565b613a91565b905082815260208101848484011115612e0057612dff613f85565b5b612e0b848285613d1d565b509392505050565b600081359050612e2281614652565b92915050565b600081359050612e3781614669565b92915050565b600081359050612e4c81614680565b92915050565b600081519050612e6181614680565b92915050565b600082601f830112612e7c57612e7b613f80565b5b8135612e8c848260208601612d8f565b91505092915050565b600082601f830112612eaa57612ea9613f80565b5b8135612eba848260208601612dd1565b91505092915050565b600081359050612ed281614697565b92915050565b600060208284031215612eee57612eed613f8f565b5b6000612efc84828501612e13565b91505092915050565b60008060408385031215612f1c57612f1b613f8f565b5b6000612f2a85828601612e13565b9250506020612f3b85828601612e13565b9150509250929050565b600080600060608486031215612f5e57612f5d613f8f565b5b6000612f6c86828701612e13565b9350506020612f7d86828701612e13565b9250506040612f8e86828701612ec3565b9150509250925092565b60008060008060808587031215612fb257612fb1613f8f565b5b6000612fc087828801612e13565b9450506020612fd187828801612e13565b9350506040612fe287828801612ec3565b925050606085013567ffffffffffffffff81111561300357613002613f8a565b5b61300f87828801612e67565b91505092959194509250565b6000806040838503121561303257613031613f8f565b5b600061304085828601612e13565b925050602061305185828601612e28565b9150509250929050565b6000806040838503121561307257613071613f8f565b5b600061308085828601612e13565b925050602061309185828601612ec3565b9150509250929050565b6000602082840312156130b1576130b0613f8f565b5b60006130bf84828501612e28565b91505092915050565b6000602082840312156130de576130dd613f8f565b5b60006130ec84828501612e3d565b91505092915050565b60006020828403121561310b5761310a613f8f565b5b600061311984828501612e52565b91505092915050565b60006020828403121561313857613137613f8f565b5b600082013567ffffffffffffffff81111561315657613155613f8a565b5b61316284828501612e95565b91505092915050565b60006020828403121561318157613180613f8f565b5b600061318f84828501612ec3565b91505092915050565b60006131a4838361363a565b60208301905092915050565b6131b981613ca9565b82525050565b60006131ca82613b28565b6131d48185613b56565b93506131df83613b18565b8060005b838110156132105781516131f78882613198565b975061320283613b49565b9250506001810190506131e3565b5085935050505092915050565b61322681613cbb565b82525050565b600061323782613b33565b6132418185613b67565b9350613251818560208601613d2c565b61325a81613f94565b840191505092915050565b600061327082613b3e565b61327a8185613b78565b935061328a818560208601613d2c565b61329381613f94565b840191505092915050565b60006132a982613b3e565b6132b38185613b89565b93506132c3818560208601613d2c565b80840191505092915050565b60006132dc602083613b78565b91506132e782613fa5565b602082019050919050565b60006132ff602b83613b78565b915061330a82613fce565b604082019050919050565b6000613322603283613b78565b915061332d8261401d565b604082019050919050565b6000613345602683613b78565b91506133508261406c565b604082019050919050565b6000613368601c83613b78565b9150613373826140bb565b602082019050919050565b600061338b602783613b78565b9150613396826140e4565b604082019050919050565b60006133ae602483613b78565b91506133b982614133565b604082019050919050565b60006133d1601983613b78565b91506133dc82614182565b602082019050919050565b60006133f4602c83613b78565b91506133ff826141ab565b604082019050919050565b6000613417603883613b78565b9150613422826141fa565b604082019050919050565b600061343a602a83613b78565b915061344582614249565b604082019050919050565b600061345d602983613b78565b915061346882614298565b604082019050919050565b6000613480602283613b78565b915061348b826142e7565b604082019050919050565b60006134a3602083613b78565b91506134ae82614336565b602082019050919050565b60006134c6602c83613b78565b91506134d18261435f565b604082019050919050565b60006134e9600583613b89565b91506134f4826143ae565b600582019050919050565b600061350c602083613b78565b9150613517826143d7565b602082019050919050565b600061352f602983613b78565b915061353a82614400565b604082019050919050565b6000613552602f83613b78565b915061355d8261444f565b604082019050919050565b6000613575603383613b78565b91506135808261449e565b604082019050919050565b6000613598602383613b78565b91506135a3826144ed565b604082019050919050565b60006135bb602183613b78565b91506135c68261453c565b604082019050919050565b60006135de603183613b78565b91506135e98261458b565b604082019050919050565b6000613601602c83613b78565b915061360c826145da565b604082019050919050565b6000613624601a83613b78565b915061362f82614629565b602082019050919050565b61364381613d13565b82525050565b61365281613d13565b82525050565b6000613664828561329e565b9150613670828461329e565b915061367b826134dc565b91508190509392505050565b600060208201905061369c60008301846131b0565b92915050565b60006080820190506136b760008301876131b0565b6136c460208301866131b0565b6136d16040830185613649565b81810360608301526136e3818461322c565b905095945050505050565b600060408201905061370360008301856131b0565b6137106020830184613649565b9392505050565b6000602082019050818103600083015261373181846131bf565b905092915050565b600060208201905061374e600083018461321d565b92915050565b6000602082019050818103600083015261376e8184613265565b905092915050565b6000602082019050818103600083015261378f816132cf565b9050919050565b600060208201905081810360008301526137af816132f2565b9050919050565b600060208201905081810360008301526137cf81613315565b9050919050565b600060208201905081810360008301526137ef81613338565b9050919050565b6000602082019050818103600083015261380f8161335b565b9050919050565b6000602082019050818103600083015261382f8161337e565b9050919050565b6000602082019050818103600083015261384f816133a1565b9050919050565b6000602082019050818103600083015261386f816133c4565b9050919050565b6000602082019050818103600083015261388f816133e7565b9050919050565b600060208201905081810360008301526138af8161340a565b9050919050565b600060208201905081810360008301526138cf8161342d565b9050919050565b600060208201905081810360008301526138ef81613450565b9050919050565b6000602082019050818103600083015261390f81613473565b9050919050565b6000602082019050818103600083015261392f81613496565b9050919050565b6000602082019050818103600083015261394f816134b9565b9050919050565b6000602082019050818103600083015261396f816134ff565b9050919050565b6000602082019050818103600083015261398f81613522565b9050919050565b600060208201905081810360008301526139af81613545565b9050919050565b600060208201905081810360008301526139cf81613568565b9050919050565b600060208201905081810360008301526139ef8161358b565b9050919050565b60006020820190508181036000830152613a0f816135ae565b9050919050565b60006020820190508181036000830152613a2f816135d1565b9050919050565b60006020820190508181036000830152613a4f816135f4565b9050919050565b60006020820190508181036000830152613a6f81613617565b9050919050565b6000602082019050613a8b6000830184613649565b92915050565b6000613a9b613aac565b9050613aa78282613dbb565b919050565b6000604051905090565b600067ffffffffffffffff821115613ad157613ad0613f51565b5b613ada82613f94565b9050602081019050919050565b600067ffffffffffffffff821115613b0257613b01613f51565b5b613b0b82613f94565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613b9f82613d13565b9150613baa83613d13565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613bdf57613bde613e66565b5b828201905092915050565b6000613bf582613d13565b9150613c0083613d13565b925082613c1057613c0f613e95565b5b828204905092915050565b6000613c2682613d13565b9150613c3183613d13565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613c6a57613c69613e66565b5b828202905092915050565b6000613c8082613d13565b9150613c8b83613d13565b925082821015613c9e57613c9d613e66565b5b828203905092915050565b6000613cb482613cf3565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613d4a578082015181840152602081019050613d2f565b83811115613d59576000848401525b50505050565b6000613d6a82613d13565b91506000821415613d7e57613d7d613e66565b5b600182039050919050565b60006002820490506001821680613da157607f821691505b60208210811415613db557613db4613ec4565b5b50919050565b613dc482613f94565b810181811067ffffffffffffffff82111715613de357613de2613f51565b5b80604052505050565b6000613df782613d13565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613e2a57613e29613e66565b5b600182019050919050565b6000613e4082613d13565b9150613e4b83613d13565b925082613e5b57613e5a613e95565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f7065726174696f6e2065786365656473207265736572766520616d6f756e74600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f53616c65206973206e6f7420796574206f70656e2e2020436f6d65206261636b60008201527f206c617465722e00000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f596f752063616e206f6e6c79207075726368617365203135206174206120746960008201527f6d65000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f507572636861736520776f756c64206578636565642074686520746f74616c2060008201527f737570706c79206f6620417374726f6275647300000000000000000000000000602082015250565b7f5265736572766174696f6e20657863656564732074686520746f74616c53757060008201527f706c790000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f57726f6e6720616d6f756e74206f662045746865722073656e74000000000000600082015250565b61465b81613ca9565b811461466657600080fd5b50565b61467281613cbb565b811461467d57600080fd5b50565b61468981613cc7565b811461469457600080fd5b50565b6146a081613d13565b81146146ab57600080fd5b5056fe697066733a2f2f516d574d6857317a347341636965543579676b734567693754566577637a4b71754d376e6756534e797463324374a2646970667358221220b27e184ab7a8d45fc17483763260611df8ab5c73d40ecf8c84a997e618746a8d64736f6c63430008070033

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

0000000000000000000000000000000000000000000000000000000000002710

-----Decoded View---------------
Arg [0] : totalAstros (uint256): 10000

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000002710


Deployed Bytecode Sourcemap

41199:3135:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35049:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41451:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20753:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22252:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21789:397;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35689:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23142:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43866:330;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35357:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23518:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41414:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35879:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42436:90;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41489:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20447:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20177:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32801:148;;;;;;;;;;;;;:::i;:::-;;42640:544;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32159:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20922:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41370:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41321:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22545:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42085:341;;;;;;;;;;;;;:::i;:::-;;43192:668;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23740:285;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42536:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21342:380;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44200:131;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22911:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33104:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35049:224;35151:4;35190:35;35175:50;;;:11;:50;;;;:90;;;;35229:36;35253:11;35229:23;:36::i;:::-;35175:90;35168:97;;35049:224;;;:::o;41451:31::-;;;;:::o;20753:100::-;20807:13;20840:5;20833:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20753:100;:::o;22252:221::-;22328:7;22356:16;22364:7;22356;:16::i;:::-;22348:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22441:15;:24;22457:7;22441:24;;;;;;;;;;;;;;;;;;;;;22434:31;;22252:221;;;:::o;21789:397::-;21870:13;21886:23;21901:7;21886:14;:23::i;:::-;21870:39;;21934:5;21928:11;;:2;:11;;;;21920:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;22014:5;21998:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;22023:37;22040:5;22047:12;:10;:12::i;:::-;22023:16;:37::i;:::-;21998:62;21990:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;22157:21;22166:2;22170:7;22157:8;:21::i;:::-;21859:327;21789:397;;:::o;35689:113::-;35750:7;35777:10;:17;;;;35770:24;;35689:113;:::o;23142:305::-;23303:41;23322:12;:10;:12::i;:::-;23336:7;23303:18;:41::i;:::-;23295:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;23411:28;23421:4;23427:2;23431:7;23411:9;:28::i;:::-;23142:305;;;:::o;43866:330::-;43927:15;43948:18;43969:17;43979:6;43969:9;:17::i;:::-;43948:38;;43997:25;44039:10;44025:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43997:53;;44065:9;44061:106;44080:10;44076:1;:14;44061:106;;;44125:30;44145:6;44153:1;44125:19;:30::i;:::-;44111:8;44120:1;44111:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;44092:3;;;;;:::i;:::-;;;;44061:106;;;;44184:8;44177:15;;;;43866:330;;;:::o;35357:256::-;35454:7;35490:23;35507:5;35490:16;:23::i;:::-;35482:5;:31;35474:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;35579:12;:19;35592:5;35579:19;;;;;;;;;;;;;;;:26;35599:5;35579:26;;;;;;;;;;;;35572:33;;35357:256;;;;:::o;23518:151::-;23622:39;23639:4;23645:2;23649:7;23622:39;;;;;;;;;;;;:16;:39::i;:::-;23518:151;;;:::o;41414:30::-;;;;;;;;;;;;;:::o;35879:233::-;35954:7;35990:30;:28;:30::i;:::-;35982:5;:38;35974:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;36087:10;36098:5;36087:17;;;;;;;;:::i;:::-;;;;;;;;;;36080:24;;35879:233;;;:::o;42436:90::-;32381:12;:10;:12::i;:::-;32371:22;;:6;;;;;;;;;;;:22;;;32363:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;42515:3:::1;42503:9;:15;;;;;;;;;;;;:::i;:::-;;42436:90:::0;:::o;41489:28::-;;;;:::o;20447:239::-;20519:7;20539:13;20555:7;:16;20563:7;20555:16;;;;;;;;;;;;;;;;;;;;;20539:32;;20607:1;20590:19;;:5;:19;;;;20582:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;20673:5;20666:12;;;20447:239;;;:::o;20177:208::-;20249:7;20294:1;20277:19;;:5;:19;;;;20269:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;20361:9;:16;20371:5;20361:16;;;;;;;;;;;;;;;;20354:23;;20177:208;;;:::o;32801:148::-;32381:12;:10;:12::i;:::-;32371:22;;:6;;;;;;;;;;;:22;;;32363:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32908:1:::1;32871:40;;32892:6;;;;;;;;;;;32871:40;;;;;;;;;;;;32939:1;32922:6;;:19;;;;;;;;;;;;;;;;;;32801:148::o:0;42640:544::-;32381:12;:10;:12::i;:::-;32371:22;;:6;;;;;;;;;;;:22;;;32363:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;42738:8:::1;;42727:7;42713:13;:11;:13::i;:::-;:21;;;;:::i;:::-;:33;;42705:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;42816:10;;42805:7;:21;;42797:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;42877:6;42873:304;42893:7;42889:1;:11;42873:304;;;42921:14;42938:13;:11;:13::i;:::-;42921:30;;42985:8;;42969:13;:11;:13::i;:::-;:24;42966:200;;;43013:32;43023:10;43035:9;43013;:32::i;:::-;43064:10;;:12;;;;;;;;;:::i;:::-;;;;;;43100:32;43110:10;43122:9;43100:32;;;;;;;:::i;:::-;;;;;;;;42966:200;42906:271;42902:3;;;;;:::i;:::-;;;;42873:304;;;;42640:544:::0;:::o;32159:79::-;32197:7;32224:6;;;;;;;;;;;32217:13;;32159:79;:::o;20922:104::-;20978:13;21011:7;21004:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20922:104;:::o;41370:37::-;41405:2;41370:37;:::o;41321:42::-;41353:10;41321:42;:::o;22545:295::-;22660:12;:10;:12::i;:::-;22648:24;;:8;:24;;;;22640:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;22760:8;22715:18;:32;22734:12;:10;:12::i;:::-;22715:32;;;;;;;;;;;;;;;:42;22748:8;22715:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;22813:8;22784:48;;22799:12;:10;:12::i;:::-;22784:48;;;22823:8;22784:48;;;;;;:::i;:::-;;;;;;;;22545:295;;:::o;42085:341::-;32381:12;:10;:12::i;:::-;32371:22;;:6;;;;;;;;;;;:22;;;32363:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;42131:12:::1;42146:21;42131:36;;42186:10;42178:28;;:44;42218:3;42215:2;42207:7;:10;;;;:::i;:::-;:14;;;;:::i;:::-;42178:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;41562:42;42233:22;;:38;42267:3;42264:2;42256:7;:10;;;;:::i;:::-;:14;;;;:::i;:::-;42233:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;41652:42;42282:22;;:38;42316:3;42313:2;42305:7;:10;;;;:::i;:::-;:14;;;;:::i;:::-;42282:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;41739:42;42331:22;;:38;42365:3;42362:2;42354:7;:10;;;;:::i;:::-;:14;;;;:::i;:::-;42331:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;41833:42;42380:22;;:38;42414:3;42411:2;42403:7;:10;;;;:::i;:::-;:14;;;;:::i;:::-;42380:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;42120:306;42085:341::o:0;43192:668::-;43258:10;;;;;;;;;;;43250:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;41405:2;43331:7;:22;;43323:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;43438:8;;43427:7;43411:13;:11;:13::i;:::-;:23;;;;:::i;:::-;:35;;43403:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;43537:9;43527:7;41353:10;43521:13;;;;:::i;:::-;:25;;43513:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;43602:6;43598:255;43618:7;43614:1;:11;43598:255;;;43646:14;43663:13;:11;:13::i;:::-;43646:30;;43710:8;;43694:13;:11;:13::i;:::-;:24;43691:151;;;43738:32;43748:10;43760:9;43738;:32::i;:::-;43794;43804:10;43816:9;43794:32;;;;;;;:::i;:::-;;;;;;;;43691:151;43631:222;43627:3;;;;;:::i;:::-;;;;43598:255;;;;43192:668;:::o;23740:285::-;23872:41;23891:12;:10;:12::i;:::-;23905:7;23872:18;:41::i;:::-;23864:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;23978:39;23992:4;23998:2;24002:7;24011:5;23978:13;:39::i;:::-;23740:285;;;;:::o;42536:94::-;32381:12;:10;:12::i;:::-;32371:22;;:6;;;;;;;;;;;:22;;;32363:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;42614:8:::1;42601:10;;:21;;;;;;;;;;;;;;;;;;42536:94:::0;:::o;21342:380::-;21416:13;21450:17;21458:8;21450:7;:17::i;:::-;21442:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;21532:17;21552:10;:8;:10::i;:::-;21532:30;;21613:1;21599:3;21593:17;:21;:121;;;;;;;;;;;;;;;;;21658:3;21663:19;:8;:17;:19::i;:::-;21641:50;;;;;;;;;:::i;:::-;;;;;;;;;;;;;21593:121;21573:141;;;21342:380;;;:::o;44200:131::-;44242:13;44265:62;;;;;;;;;;;;;;;;;;;44200:131;:::o;22911:164::-;23008:4;23032:18;:25;23051:5;23032:25;;;;;;;;;;;;;;;:35;23058:8;23032:35;;;;;;;;;;;;;;;;;;;;;;;;;23025:42;;22911:164;;;;:::o;33104:244::-;32381:12;:10;:12::i;:::-;32371:22;;:6;;;;;;;;;;;:22;;;32363:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33213:1:::1;33193:22;;:8;:22;;;;33185:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;33303:8;33274:38;;33295:6;;;;;;;;;;;33274:38;;;;;;;;;;;;33332:8;33323:6;;:17;;;;;;;;;;;;;;;;;;33104:244:::0;:::o;19821:292::-;19923:4;19962:25;19947:40;;;:11;:40;;;;:105;;;;20019:33;20004:48;;;:11;:48;;;;19947:105;:158;;;;20069:36;20093:11;20069:23;:36::i;:::-;19947:158;19940:165;;19821:292;;;:::o;25492:127::-;25557:4;25609:1;25581:30;;:7;:16;25589:7;25581:16;;;;;;;;;;;;;;;;;;;;;:30;;;;25574:37;;25492:127;;;:::o;16215:98::-;16268:7;16295:10;16288:17;;16215:98;:::o;29369:174::-;29471:2;29444:15;:24;29460:7;29444:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;29527:7;29523:2;29489:46;;29498:23;29513:7;29498:14;:23::i;:::-;29489:46;;;;;;;;;;;;29369:174;;:::o;25786:348::-;25879:4;25904:16;25912:7;25904;:16::i;:::-;25896:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25980:13;25996:23;26011:7;25996:14;:23::i;:::-;25980:39;;26049:5;26038:16;;:7;:16;;;:51;;;;26082:7;26058:31;;:20;26070:7;26058:11;:20::i;:::-;:31;;;26038:51;:87;;;;26093:32;26110:5;26117:7;26093:16;:32::i;:::-;26038:87;26030:96;;;25786:348;;;;:::o;28707:544::-;28832:4;28805:31;;:23;28820:7;28805:14;:23::i;:::-;:31;;;28797:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;28915:1;28901:16;;:2;:16;;;;28893:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;28971:39;28992:4;28998:2;29002:7;28971:20;:39::i;:::-;29075:29;29092:1;29096:7;29075:8;:29::i;:::-;29136:1;29117:9;:15;29127:4;29117:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;29165:1;29148:9;:13;29158:2;29148:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29196:2;29177:7;:16;29185:7;29177:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29235:7;29231:2;29216:27;;29225:4;29216:27;;;;;;;;;;;;28707:544;;;:::o;26476:110::-;26552:26;26562:2;26566:7;26552:26;;;;;;;;;;;;:9;:26::i;:::-;26476:110;;:::o;24907:272::-;25021:28;25031:4;25037:2;25041:7;25021:9;:28::i;:::-;25068:48;25091:4;25097:2;25101:7;25110:5;25068:22;:48::i;:::-;25060:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;24907:272;;;;:::o;21177:94::-;21221:13;21254:9;21247:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21177:94;:::o;16787:723::-;16843:13;17073:1;17064:5;:10;17060:53;;;17091:10;;;;;;;;;;;;;;;;;;;;;17060:53;17123:12;17138:5;17123:20;;17154:14;17179:78;17194:1;17186:4;:9;17179:78;;17212:8;;;;;:::i;:::-;;;;17243:2;17235:10;;;;;:::i;:::-;;;17179:78;;;17267:19;17299:6;17289:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17267:39;;17317:154;17333:1;17324:5;:10;17317:154;;17361:1;17351:11;;;;;:::i;:::-;;;17428:2;17420:5;:10;;;;:::i;:::-;17407:2;:24;;;;:::i;:::-;17394:39;;17377:6;17384;17377:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;17457:2;17448:11;;;;;:::i;:::-;;;17317:154;;;17495:6;17481:21;;;;;16787:723;;;;:::o;1515:157::-;1600:4;1639:25;1624:40;;;:11;:40;;;;1617:47;;1515:157;;;:::o;36725:589::-;36869:45;36896:4;36902:2;36906:7;36869:26;:45::i;:::-;36947:1;36931:18;;:4;:18;;;36927:187;;;36966:40;36998:7;36966:31;:40::i;:::-;36927:187;;;37036:2;37028:10;;:4;:10;;;37024:90;;37055:47;37088:4;37094:7;37055:32;:47::i;:::-;37024:90;36927:187;37142:1;37128:16;;:2;:16;;;37124:183;;;37161:45;37198:7;37161:36;:45::i;:::-;37124:183;;;37234:4;37228:10;;:2;:10;;;37224:83;;37255:40;37283:2;37287:7;37255:27;:40::i;:::-;37224:83;37124:183;36725:589;;;:::o;26813:250::-;26909:18;26915:2;26919:7;26909:5;:18::i;:::-;26946:54;26977:1;26981:2;26985:7;26994:5;26946:22;:54::i;:::-;26938:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;26813:250;;;:::o;30108:843::-;30229:4;30255:15;:2;:13;;;:15::i;:::-;30251:693;;;30307:2;30291:36;;;30328:12;:10;:12::i;:::-;30342:4;30348:7;30357:5;30291:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;30287:602;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30554:1;30537:6;:13;:18;30533:341;;;30580:60;;;;;;;;;;:::i;:::-;;;;;;;;30533:341;30824:6;30818:13;30809:6;30805:2;30801:15;30794:38;30287:602;30424:45;;;30414:55;;;:6;:55;;;;30407:62;;;;;30251:693;30928:4;30921:11;;30108:843;;;;;;;:::o;31564:93::-;;;;:::o;38037:164::-;38141:10;:17;;;;38114:15;:24;38130:7;38114:24;;;;;;;;;;;:44;;;;38169:10;38185:7;38169:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38037:164;:::o;38828:988::-;39094:22;39144:1;39119:22;39136:4;39119:16;:22::i;:::-;:26;;;;:::i;:::-;39094:51;;39156:18;39177:17;:26;39195:7;39177:26;;;;;;;;;;;;39156:47;;39324:14;39310:10;:28;39306:328;;39355:19;39377:12;:18;39390:4;39377:18;;;;;;;;;;;;;;;:34;39396:14;39377:34;;;;;;;;;;;;39355:56;;39461:11;39428:12;:18;39441:4;39428:18;;;;;;;;;;;;;;;:30;39447:10;39428:30;;;;;;;;;;;:44;;;;39578:10;39545:17;:30;39563:11;39545:30;;;;;;;;;;;:43;;;;39340:294;39306:328;39730:17;:26;39748:7;39730:26;;;;;;;;;;;39723:33;;;39774:12;:18;39787:4;39774:18;;;;;;;;;;;;;;;:34;39793:14;39774:34;;;;;;;;;;;39767:41;;;38909:907;;38828:988;;:::o;40111:1079::-;40364:22;40409:1;40389:10;:17;;;;:21;;;;:::i;:::-;40364:46;;40421:18;40442:15;:24;40458:7;40442:24;;;;;;;;;;;;40421:45;;40793:19;40815:10;40826:14;40815:26;;;;;;;;:::i;:::-;;;;;;;;;;40793:48;;40879:11;40854:10;40865;40854:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;40990:10;40959:15;:28;40975:11;40959:28;;;;;;;;;;;:41;;;;41131:15;:24;41147:7;41131:24;;;;;;;;;;;41124:31;;;41166:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;40182:1008;;;40111:1079;:::o;37615:221::-;37700:14;37717:20;37734:2;37717:16;:20::i;:::-;37700:37;;37775:7;37748:12;:16;37761:2;37748:16;;;;;;;;;;;;;;;:24;37765:6;37748:24;;;;;;;;;;;:34;;;;37822:6;37793:17;:26;37811:7;37793:26;;;;;;;;;;;:35;;;;37689:147;37615:221;;:::o;27399:382::-;27493:1;27479:16;;:2;:16;;;;27471:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;27552:16;27560:7;27552;:16::i;:::-;27551:17;27543:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;27614:45;27643:1;27647:2;27651:7;27614:20;:45::i;:::-;27689:1;27672:9;:13;27682:2;27672:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;27720:2;27701:7;:16;27709:7;27701:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;27765:7;27761:2;27740:33;;27757:1;27740:33;;;;;;;;;;;;27399:382;;:::o;8415:422::-;8475:4;8683:12;8794:7;8782:20;8774:28;;8828:1;8821:4;:8;8814:15;;;8415:422;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:122;;1899:79;;:::i;:::-;1858:122;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;1786:340;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2132:139;;;;:::o;2277:329::-;2336:6;2385:2;2373:9;2364:7;2360:23;2356:32;2353:119;;;2391:79;;:::i;:::-;2353:119;2511:1;2536:53;2581:7;2572:6;2561:9;2557:22;2536:53;:::i;:::-;2526:63;;2482:117;2277:329;;;;:::o;2612:474::-;2680:6;2688;2737:2;2725:9;2716:7;2712:23;2708:32;2705:119;;;2743:79;;:::i;:::-;2705:119;2863:1;2888:53;2933:7;2924:6;2913:9;2909:22;2888:53;:::i;:::-;2878:63;;2834:117;2990:2;3016:53;3061:7;3052:6;3041:9;3037:22;3016:53;:::i;:::-;3006:63;;2961:118;2612:474;;;;;:::o;3092:619::-;3169:6;3177;3185;3234:2;3222:9;3213:7;3209:23;3205:32;3202:119;;;3240:79;;:::i;:::-;3202:119;3360:1;3385:53;3430:7;3421:6;3410:9;3406:22;3385:53;:::i;:::-;3375:63;;3331:117;3487:2;3513:53;3558:7;3549:6;3538:9;3534:22;3513:53;:::i;:::-;3503:63;;3458:118;3615:2;3641:53;3686:7;3677:6;3666:9;3662:22;3641:53;:::i;:::-;3631:63;;3586:118;3092:619;;;;;:::o;3717:943::-;3812:6;3820;3828;3836;3885:3;3873:9;3864:7;3860:23;3856:33;3853:120;;;3892:79;;:::i;:::-;3853:120;4012:1;4037:53;4082:7;4073:6;4062:9;4058:22;4037:53;:::i;:::-;4027:63;;3983:117;4139:2;4165:53;4210:7;4201:6;4190:9;4186:22;4165:53;:::i;:::-;4155:63;;4110:118;4267:2;4293:53;4338:7;4329:6;4318:9;4314:22;4293:53;:::i;:::-;4283:63;;4238:118;4423:2;4412:9;4408:18;4395:32;4454:18;4446:6;4443:30;4440:117;;;4476:79;;:::i;:::-;4440:117;4581:62;4635:7;4626:6;4615:9;4611:22;4581:62;:::i;:::-;4571:72;;4366:287;3717:943;;;;;;;:::o;4666:468::-;4731:6;4739;4788:2;4776:9;4767:7;4763:23;4759:32;4756:119;;;4794:79;;:::i;:::-;4756:119;4914:1;4939:53;4984:7;4975:6;4964:9;4960:22;4939:53;:::i;:::-;4929:63;;4885:117;5041:2;5067:50;5109:7;5100:6;5089:9;5085:22;5067:50;:::i;:::-;5057:60;;5012:115;4666:468;;;;;:::o;5140:474::-;5208:6;5216;5265:2;5253:9;5244:7;5240:23;5236:32;5233:119;;;5271:79;;:::i;:::-;5233:119;5391:1;5416:53;5461:7;5452:6;5441:9;5437:22;5416:53;:::i;:::-;5406:63;;5362:117;5518:2;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5489:118;5140:474;;;;;:::o;5620:323::-;5676:6;5725:2;5713:9;5704:7;5700:23;5696:32;5693:119;;;5731:79;;:::i;:::-;5693:119;5851:1;5876:50;5918:7;5909:6;5898:9;5894:22;5876:50;:::i;:::-;5866:60;;5822:114;5620:323;;;;:::o;5949:327::-;6007:6;6056:2;6044:9;6035:7;6031:23;6027:32;6024:119;;;6062:79;;:::i;:::-;6024:119;6182:1;6207:52;6251:7;6242:6;6231:9;6227:22;6207:52;:::i;:::-;6197:62;;6153:116;5949:327;;;;:::o;6282:349::-;6351:6;6400:2;6388:9;6379:7;6375:23;6371:32;6368:119;;;6406:79;;:::i;:::-;6368:119;6526:1;6551:63;6606:7;6597:6;6586:9;6582:22;6551:63;:::i;:::-;6541:73;;6497:127;6282:349;;;;:::o;6637:509::-;6706:6;6755:2;6743:9;6734:7;6730:23;6726:32;6723:119;;;6761:79;;:::i;:::-;6723:119;6909:1;6898:9;6894:17;6881:31;6939:18;6931:6;6928:30;6925:117;;;6961:79;;:::i;:::-;6925:117;7066:63;7121:7;7112:6;7101:9;7097:22;7066:63;:::i;:::-;7056:73;;6852:287;6637:509;;;;:::o;7152:329::-;7211:6;7260:2;7248:9;7239:7;7235:23;7231:32;7228:119;;;7266:79;;:::i;:::-;7228:119;7386:1;7411:53;7456:7;7447:6;7436:9;7432:22;7411:53;:::i;:::-;7401:63;;7357:117;7152:329;;;;:::o;7487:179::-;7556:10;7577:46;7619:3;7611:6;7577:46;:::i;:::-;7655:4;7650:3;7646:14;7632:28;;7487:179;;;;:::o;7672:118::-;7759:24;7777:5;7759:24;:::i;:::-;7754:3;7747:37;7672:118;;:::o;7826:732::-;7945:3;7974:54;8022:5;7974:54;:::i;:::-;8044:86;8123:6;8118:3;8044:86;:::i;:::-;8037:93;;8154:56;8204:5;8154:56;:::i;:::-;8233:7;8264:1;8249:284;8274:6;8271:1;8268:13;8249:284;;;8350:6;8344:13;8377:63;8436:3;8421:13;8377:63;:::i;:::-;8370:70;;8463:60;8516:6;8463:60;:::i;:::-;8453:70;;8309:224;8296:1;8293;8289:9;8284:14;;8249:284;;;8253:14;8549:3;8542:10;;7950:608;;;7826:732;;;;:::o;8564:109::-;8645:21;8660:5;8645:21;:::i;:::-;8640:3;8633:34;8564:109;;:::o;8679:360::-;8765:3;8793:38;8825:5;8793:38;:::i;:::-;8847:70;8910:6;8905:3;8847:70;:::i;:::-;8840:77;;8926:52;8971:6;8966:3;8959:4;8952:5;8948:16;8926:52;:::i;:::-;9003:29;9025:6;9003:29;:::i;:::-;8998:3;8994:39;8987:46;;8769:270;8679:360;;;;:::o;9045:364::-;9133:3;9161:39;9194:5;9161:39;:::i;:::-;9216:71;9280:6;9275:3;9216:71;:::i;:::-;9209:78;;9296:52;9341:6;9336:3;9329:4;9322:5;9318:16;9296:52;:::i;:::-;9373:29;9395:6;9373:29;:::i;:::-;9368:3;9364:39;9357:46;;9137:272;9045:364;;;;:::o;9415:377::-;9521:3;9549:39;9582:5;9549:39;:::i;:::-;9604:89;9686:6;9681:3;9604:89;:::i;:::-;9597:96;;9702:52;9747:6;9742:3;9735:4;9728:5;9724:16;9702:52;:::i;:::-;9779:6;9774:3;9770:16;9763:23;;9525:267;9415:377;;;;:::o;9798:366::-;9940:3;9961:67;10025:2;10020:3;9961:67;:::i;:::-;9954:74;;10037:93;10126:3;10037:93;:::i;:::-;10155:2;10150:3;10146:12;10139:19;;9798:366;;;:::o;10170:::-;10312:3;10333:67;10397:2;10392:3;10333:67;:::i;:::-;10326:74;;10409:93;10498:3;10409:93;:::i;:::-;10527:2;10522:3;10518:12;10511:19;;10170:366;;;:::o;10542:::-;10684:3;10705:67;10769:2;10764:3;10705:67;:::i;:::-;10698:74;;10781:93;10870:3;10781:93;:::i;:::-;10899:2;10894:3;10890:12;10883:19;;10542:366;;;:::o;10914:::-;11056:3;11077:67;11141:2;11136:3;11077:67;:::i;:::-;11070:74;;11153:93;11242:3;11153:93;:::i;:::-;11271:2;11266:3;11262:12;11255:19;;10914:366;;;:::o;11286:::-;11428:3;11449:67;11513:2;11508:3;11449:67;:::i;:::-;11442:74;;11525:93;11614:3;11525:93;:::i;:::-;11643:2;11638:3;11634:12;11627:19;;11286:366;;;:::o;11658:::-;11800:3;11821:67;11885:2;11880:3;11821:67;:::i;:::-;11814:74;;11897:93;11986:3;11897:93;:::i;:::-;12015:2;12010:3;12006:12;11999:19;;11658:366;;;:::o;12030:::-;12172:3;12193:67;12257:2;12252:3;12193:67;:::i;:::-;12186:74;;12269:93;12358:3;12269:93;:::i;:::-;12387:2;12382:3;12378:12;12371:19;;12030:366;;;:::o;12402:::-;12544:3;12565:67;12629:2;12624:3;12565:67;:::i;:::-;12558:74;;12641:93;12730:3;12641:93;:::i;:::-;12759:2;12754:3;12750:12;12743:19;;12402:366;;;:::o;12774:::-;12916:3;12937:67;13001:2;12996:3;12937:67;:::i;:::-;12930:74;;13013:93;13102:3;13013:93;:::i;:::-;13131:2;13126:3;13122:12;13115:19;;12774:366;;;:::o;13146:::-;13288:3;13309:67;13373:2;13368:3;13309:67;:::i;:::-;13302:74;;13385:93;13474:3;13385:93;:::i;:::-;13503:2;13498:3;13494:12;13487:19;;13146:366;;;:::o;13518:::-;13660:3;13681:67;13745:2;13740:3;13681:67;:::i;:::-;13674:74;;13757:93;13846:3;13757:93;:::i;:::-;13875:2;13870:3;13866:12;13859:19;;13518:366;;;:::o;13890:::-;14032:3;14053:67;14117:2;14112:3;14053:67;:::i;:::-;14046:74;;14129:93;14218:3;14129:93;:::i;:::-;14247:2;14242:3;14238:12;14231:19;;13890:366;;;:::o;14262:::-;14404:3;14425:67;14489:2;14484:3;14425:67;:::i;:::-;14418:74;;14501:93;14590:3;14501:93;:::i;:::-;14619:2;14614:3;14610:12;14603:19;;14262:366;;;:::o;14634:::-;14776:3;14797:67;14861:2;14856:3;14797:67;:::i;:::-;14790:74;;14873:93;14962:3;14873:93;:::i;:::-;14991:2;14986:3;14982:12;14975:19;;14634:366;;;:::o;15006:::-;15148:3;15169:67;15233:2;15228:3;15169:67;:::i;:::-;15162:74;;15245:93;15334:3;15245:93;:::i;:::-;15363:2;15358:3;15354:12;15347:19;;15006:366;;;:::o;15378:400::-;15538:3;15559:84;15641:1;15636:3;15559:84;:::i;:::-;15552:91;;15652:93;15741:3;15652:93;:::i;:::-;15770:1;15765:3;15761:11;15754:18;;15378:400;;;:::o;15784:366::-;15926:3;15947:67;16011:2;16006:3;15947:67;:::i;:::-;15940:74;;16023:93;16112:3;16023:93;:::i;:::-;16141:2;16136:3;16132:12;16125:19;;15784:366;;;:::o;16156:::-;16298:3;16319:67;16383:2;16378:3;16319:67;:::i;:::-;16312:74;;16395:93;16484:3;16395:93;:::i;:::-;16513:2;16508:3;16504:12;16497:19;;16156:366;;;:::o;16528:::-;16670:3;16691:67;16755:2;16750:3;16691:67;:::i;:::-;16684:74;;16767:93;16856:3;16767:93;:::i;:::-;16885:2;16880:3;16876:12;16869:19;;16528:366;;;:::o;16900:::-;17042:3;17063:67;17127:2;17122:3;17063:67;:::i;:::-;17056:74;;17139:93;17228:3;17139:93;:::i;:::-;17257:2;17252:3;17248:12;17241:19;;16900:366;;;:::o;17272:::-;17414:3;17435:67;17499:2;17494:3;17435:67;:::i;:::-;17428:74;;17511:93;17600:3;17511:93;:::i;:::-;17629:2;17624:3;17620:12;17613:19;;17272:366;;;:::o;17644:::-;17786:3;17807:67;17871:2;17866:3;17807:67;:::i;:::-;17800:74;;17883:93;17972:3;17883:93;:::i;:::-;18001:2;17996:3;17992:12;17985:19;;17644:366;;;:::o;18016:::-;18158:3;18179:67;18243:2;18238:3;18179:67;:::i;:::-;18172:74;;18255:93;18344:3;18255:93;:::i;:::-;18373:2;18368:3;18364:12;18357:19;;18016:366;;;:::o;18388:::-;18530:3;18551:67;18615:2;18610:3;18551:67;:::i;:::-;18544:74;;18627:93;18716:3;18627:93;:::i;:::-;18745:2;18740:3;18736:12;18729:19;;18388:366;;;:::o;18760:::-;18902:3;18923:67;18987:2;18982:3;18923:67;:::i;:::-;18916:74;;18999:93;19088:3;18999:93;:::i;:::-;19117:2;19112:3;19108:12;19101:19;;18760:366;;;:::o;19132:108::-;19209:24;19227:5;19209:24;:::i;:::-;19204:3;19197:37;19132:108;;:::o;19246:118::-;19333:24;19351:5;19333:24;:::i;:::-;19328:3;19321:37;19246:118;;:::o;19370:701::-;19651:3;19673:95;19764:3;19755:6;19673:95;:::i;:::-;19666:102;;19785:95;19876:3;19867:6;19785:95;:::i;:::-;19778:102;;19897:148;20041:3;19897:148;:::i;:::-;19890:155;;20062:3;20055:10;;19370:701;;;;;:::o;20077:222::-;20170:4;20208:2;20197:9;20193:18;20185:26;;20221:71;20289:1;20278:9;20274:17;20265:6;20221:71;:::i;:::-;20077:222;;;;:::o;20305:640::-;20500:4;20538:3;20527:9;20523:19;20515:27;;20552:71;20620:1;20609:9;20605:17;20596:6;20552:71;:::i;:::-;20633:72;20701:2;20690:9;20686:18;20677:6;20633:72;:::i;:::-;20715;20783:2;20772:9;20768:18;20759:6;20715:72;:::i;:::-;20834:9;20828:4;20824:20;20819:2;20808:9;20804:18;20797:48;20862:76;20933:4;20924:6;20862:76;:::i;:::-;20854:84;;20305:640;;;;;;;:::o;20951:332::-;21072:4;21110:2;21099:9;21095:18;21087:26;;21123:71;21191:1;21180:9;21176:17;21167:6;21123:71;:::i;:::-;21204:72;21272:2;21261:9;21257:18;21248:6;21204:72;:::i;:::-;20951:332;;;;;:::o;21289:373::-;21432:4;21470:2;21459:9;21455:18;21447:26;;21519:9;21513:4;21509:20;21505:1;21494:9;21490:17;21483:47;21547:108;21650:4;21641:6;21547:108;:::i;:::-;21539:116;;21289:373;;;;:::o;21668:210::-;21755:4;21793:2;21782:9;21778:18;21770:26;;21806:65;21868:1;21857:9;21853:17;21844:6;21806:65;:::i;:::-;21668:210;;;;:::o;21884:313::-;21997:4;22035:2;22024:9;22020:18;22012:26;;22084:9;22078:4;22074:20;22070:1;22059:9;22055:17;22048:47;22112:78;22185:4;22176:6;22112:78;:::i;:::-;22104:86;;21884:313;;;;:::o;22203:419::-;22369:4;22407:2;22396:9;22392:18;22384:26;;22456:9;22450:4;22446:20;22442:1;22431:9;22427:17;22420:47;22484:131;22610:4;22484:131;:::i;:::-;22476:139;;22203:419;;;:::o;22628:::-;22794:4;22832:2;22821:9;22817:18;22809:26;;22881:9;22875:4;22871:20;22867:1;22856:9;22852:17;22845:47;22909:131;23035:4;22909:131;:::i;:::-;22901:139;;22628:419;;;:::o;23053:::-;23219:4;23257:2;23246:9;23242:18;23234:26;;23306:9;23300:4;23296:20;23292:1;23281:9;23277:17;23270:47;23334:131;23460:4;23334:131;:::i;:::-;23326:139;;23053:419;;;:::o;23478:::-;23644:4;23682:2;23671:9;23667:18;23659:26;;23731:9;23725:4;23721:20;23717:1;23706:9;23702:17;23695:47;23759:131;23885:4;23759:131;:::i;:::-;23751:139;;23478:419;;;:::o;23903:::-;24069:4;24107:2;24096:9;24092:18;24084:26;;24156:9;24150:4;24146:20;24142:1;24131:9;24127:17;24120:47;24184:131;24310:4;24184:131;:::i;:::-;24176:139;;23903:419;;;:::o;24328:::-;24494:4;24532:2;24521:9;24517:18;24509:26;;24581:9;24575:4;24571:20;24567:1;24556:9;24552:17;24545:47;24609:131;24735:4;24609:131;:::i;:::-;24601:139;;24328:419;;;:::o;24753:::-;24919:4;24957:2;24946:9;24942:18;24934:26;;25006:9;25000:4;24996:20;24992:1;24981:9;24977:17;24970:47;25034:131;25160:4;25034:131;:::i;:::-;25026:139;;24753:419;;;:::o;25178:::-;25344:4;25382:2;25371:9;25367:18;25359:26;;25431:9;25425:4;25421:20;25417:1;25406:9;25402:17;25395:47;25459:131;25585:4;25459:131;:::i;:::-;25451:139;;25178:419;;;:::o;25603:::-;25769:4;25807:2;25796:9;25792:18;25784:26;;25856:9;25850:4;25846:20;25842:1;25831:9;25827:17;25820:47;25884:131;26010:4;25884:131;:::i;:::-;25876:139;;25603:419;;;:::o;26028:::-;26194:4;26232:2;26221:9;26217:18;26209:26;;26281:9;26275:4;26271:20;26267:1;26256:9;26252:17;26245:47;26309:131;26435:4;26309:131;:::i;:::-;26301:139;;26028:419;;;:::o;26453:::-;26619:4;26657:2;26646:9;26642:18;26634:26;;26706:9;26700:4;26696:20;26692:1;26681:9;26677:17;26670:47;26734:131;26860:4;26734:131;:::i;:::-;26726:139;;26453:419;;;:::o;26878:::-;27044:4;27082:2;27071:9;27067:18;27059:26;;27131:9;27125:4;27121:20;27117:1;27106:9;27102:17;27095:47;27159:131;27285:4;27159:131;:::i;:::-;27151:139;;26878:419;;;:::o;27303:::-;27469:4;27507:2;27496:9;27492:18;27484:26;;27556:9;27550:4;27546:20;27542:1;27531:9;27527:17;27520:47;27584:131;27710:4;27584:131;:::i;:::-;27576:139;;27303:419;;;:::o;27728:::-;27894:4;27932:2;27921:9;27917:18;27909:26;;27981:9;27975:4;27971:20;27967:1;27956:9;27952:17;27945:47;28009:131;28135:4;28009:131;:::i;:::-;28001:139;;27728:419;;;:::o;28153:::-;28319:4;28357:2;28346:9;28342:18;28334:26;;28406:9;28400:4;28396:20;28392:1;28381:9;28377:17;28370:47;28434:131;28560:4;28434:131;:::i;:::-;28426:139;;28153:419;;;:::o;28578:::-;28744:4;28782:2;28771:9;28767:18;28759:26;;28831:9;28825:4;28821:20;28817:1;28806:9;28802:17;28795:47;28859:131;28985:4;28859:131;:::i;:::-;28851:139;;28578:419;;;:::o;29003:::-;29169:4;29207:2;29196:9;29192:18;29184:26;;29256:9;29250:4;29246:20;29242:1;29231:9;29227:17;29220:47;29284:131;29410:4;29284:131;:::i;:::-;29276:139;;29003:419;;;:::o;29428:::-;29594:4;29632:2;29621:9;29617:18;29609:26;;29681:9;29675:4;29671:20;29667:1;29656:9;29652:17;29645:47;29709:131;29835:4;29709:131;:::i;:::-;29701:139;;29428:419;;;:::o;29853:::-;30019:4;30057:2;30046:9;30042:18;30034:26;;30106:9;30100:4;30096:20;30092:1;30081:9;30077:17;30070:47;30134:131;30260:4;30134:131;:::i;:::-;30126:139;;29853:419;;;:::o;30278:::-;30444:4;30482:2;30471:9;30467:18;30459:26;;30531:9;30525:4;30521:20;30517:1;30506:9;30502:17;30495:47;30559:131;30685:4;30559:131;:::i;:::-;30551:139;;30278:419;;;:::o;30703:::-;30869:4;30907:2;30896:9;30892:18;30884:26;;30956:9;30950:4;30946:20;30942:1;30931:9;30927:17;30920:47;30984:131;31110:4;30984:131;:::i;:::-;30976:139;;30703:419;;;:::o;31128:::-;31294:4;31332:2;31321:9;31317:18;31309:26;;31381:9;31375:4;31371:20;31367:1;31356:9;31352:17;31345:47;31409:131;31535:4;31409:131;:::i;:::-;31401:139;;31128:419;;;:::o;31553:::-;31719:4;31757:2;31746:9;31742:18;31734:26;;31806:9;31800:4;31796:20;31792:1;31781:9;31777:17;31770:47;31834:131;31960:4;31834:131;:::i;:::-;31826:139;;31553:419;;;:::o;31978:::-;32144:4;32182:2;32171:9;32167:18;32159:26;;32231:9;32225:4;32221:20;32217:1;32206:9;32202:17;32195:47;32259:131;32385:4;32259:131;:::i;:::-;32251:139;;31978:419;;;:::o;32403:222::-;32496:4;32534:2;32523:9;32519:18;32511:26;;32547:71;32615:1;32604:9;32600:17;32591:6;32547:71;:::i;:::-;32403:222;;;;:::o;32631:129::-;32665:6;32692:20;;:::i;:::-;32682:30;;32721:33;32749:4;32741:6;32721:33;:::i;:::-;32631:129;;;:::o;32766:75::-;32799:6;32832:2;32826:9;32816:19;;32766:75;:::o;32847:307::-;32908:4;32998:18;32990:6;32987:30;32984:56;;;33020:18;;:::i;:::-;32984:56;33058:29;33080:6;33058:29;:::i;:::-;33050:37;;33142:4;33136;33132:15;33124:23;;32847:307;;;:::o;33160:308::-;33222:4;33312:18;33304:6;33301:30;33298:56;;;33334:18;;:::i;:::-;33298:56;33372:29;33394:6;33372:29;:::i;:::-;33364:37;;33456:4;33450;33446:15;33438:23;;33160:308;;;:::o;33474:132::-;33541:4;33564:3;33556:11;;33594:4;33589:3;33585:14;33577:22;;33474:132;;;:::o;33612:114::-;33679:6;33713:5;33707:12;33697:22;;33612:114;;;:::o;33732:98::-;33783:6;33817:5;33811:12;33801:22;;33732:98;;;:::o;33836:99::-;33888:6;33922:5;33916:12;33906:22;;33836:99;;;:::o;33941:113::-;34011:4;34043;34038:3;34034:14;34026:22;;33941:113;;;:::o;34060:184::-;34159:11;34193:6;34188:3;34181:19;34233:4;34228:3;34224:14;34209:29;;34060:184;;;;:::o;34250:168::-;34333:11;34367:6;34362:3;34355:19;34407:4;34402:3;34398:14;34383:29;;34250:168;;;;:::o;34424:169::-;34508:11;34542:6;34537:3;34530:19;34582:4;34577:3;34573:14;34558:29;;34424:169;;;;:::o;34599:148::-;34701:11;34738:3;34723:18;;34599:148;;;;:::o;34753:305::-;34793:3;34812:20;34830:1;34812:20;:::i;:::-;34807:25;;34846:20;34864:1;34846:20;:::i;:::-;34841:25;;35000:1;34932:66;34928:74;34925:1;34922:81;34919:107;;;35006:18;;:::i;:::-;34919:107;35050:1;35047;35043:9;35036:16;;34753:305;;;;:::o;35064:185::-;35104:1;35121:20;35139:1;35121:20;:::i;:::-;35116:25;;35155:20;35173:1;35155:20;:::i;:::-;35150:25;;35194:1;35184:35;;35199:18;;:::i;:::-;35184:35;35241:1;35238;35234:9;35229:14;;35064:185;;;;:::o;35255:348::-;35295:7;35318:20;35336:1;35318:20;:::i;:::-;35313:25;;35352:20;35370:1;35352:20;:::i;:::-;35347:25;;35540:1;35472:66;35468:74;35465:1;35462:81;35457:1;35450:9;35443:17;35439:105;35436:131;;;35547:18;;:::i;:::-;35436:131;35595:1;35592;35588:9;35577:20;;35255:348;;;;:::o;35609:191::-;35649:4;35669:20;35687:1;35669:20;:::i;:::-;35664:25;;35703:20;35721:1;35703:20;:::i;:::-;35698:25;;35742:1;35739;35736:8;35733:34;;;35747:18;;:::i;:::-;35733:34;35792:1;35789;35785:9;35777:17;;35609:191;;;;:::o;35806:96::-;35843:7;35872:24;35890:5;35872:24;:::i;:::-;35861:35;;35806:96;;;:::o;35908:90::-;35942:7;35985:5;35978:13;35971:21;35960:32;;35908:90;;;:::o;36004:149::-;36040:7;36080:66;36073:5;36069:78;36058:89;;36004:149;;;:::o;36159:126::-;36196:7;36236:42;36229:5;36225:54;36214:65;;36159:126;;;:::o;36291:77::-;36328:7;36357:5;36346:16;;36291:77;;;:::o;36374:154::-;36458:6;36453:3;36448;36435:30;36520:1;36511:6;36506:3;36502:16;36495:27;36374:154;;;:::o;36534:307::-;36602:1;36612:113;36626:6;36623:1;36620:13;36612:113;;;36711:1;36706:3;36702:11;36696:18;36692:1;36687:3;36683:11;36676:39;36648:2;36645:1;36641:10;36636:15;;36612:113;;;36743:6;36740:1;36737:13;36734:101;;;36823:1;36814:6;36809:3;36805:16;36798:27;36734:101;36583:258;36534:307;;;:::o;36847:171::-;36886:3;36909:24;36927:5;36909:24;:::i;:::-;36900:33;;36955:4;36948:5;36945:15;36942:41;;;36963:18;;:::i;:::-;36942:41;37010:1;37003:5;36999:13;36992:20;;36847:171;;;:::o;37024:320::-;37068:6;37105:1;37099:4;37095:12;37085:22;;37152:1;37146:4;37142:12;37173:18;37163:81;;37229:4;37221:6;37217:17;37207:27;;37163:81;37291:2;37283:6;37280:14;37260:18;37257:38;37254:84;;;37310:18;;:::i;:::-;37254:84;37075:269;37024:320;;;:::o;37350:281::-;37433:27;37455:4;37433:27;:::i;:::-;37425:6;37421:40;37563:6;37551:10;37548:22;37527:18;37515:10;37512:34;37509:62;37506:88;;;37574:18;;:::i;:::-;37506:88;37614:10;37610:2;37603:22;37393:238;37350:281;;:::o;37637:233::-;37676:3;37699:24;37717:5;37699:24;:::i;:::-;37690:33;;37745:66;37738:5;37735:77;37732:103;;;37815:18;;:::i;:::-;37732:103;37862:1;37855:5;37851:13;37844:20;;37637:233;;;:::o;37876:176::-;37908:1;37925:20;37943:1;37925:20;:::i;:::-;37920:25;;37959:20;37977:1;37959:20;:::i;:::-;37954:25;;37998:1;37988:35;;38003:18;;:::i;:::-;37988:35;38044:1;38041;38037:9;38032:14;;37876:176;;;;:::o;38058:180::-;38106:77;38103:1;38096:88;38203:4;38200:1;38193:15;38227:4;38224:1;38217:15;38244:180;38292:77;38289:1;38282:88;38389:4;38386:1;38379:15;38413:4;38410:1;38403:15;38430:180;38478:77;38475:1;38468:88;38575:4;38572:1;38565:15;38599:4;38596:1;38589:15;38616:180;38664:77;38661:1;38654:88;38761:4;38758:1;38751:15;38785:4;38782:1;38775:15;38802:180;38850:77;38847:1;38840:88;38947:4;38944:1;38937:15;38971:4;38968:1;38961:15;38988:180;39036:77;39033:1;39026:88;39133:4;39130:1;39123:15;39157:4;39154:1;39147:15;39174:117;39283:1;39280;39273:12;39297:117;39406:1;39403;39396:12;39420:117;39529:1;39526;39519:12;39543:117;39652:1;39649;39642:12;39666:102;39707:6;39758:2;39754:7;39749:2;39742:5;39738:14;39734:28;39724:38;;39666:102;;;:::o;39774:182::-;39914:34;39910:1;39902:6;39898:14;39891:58;39774:182;:::o;39962:230::-;40102:34;40098:1;40090:6;40086:14;40079:58;40171:13;40166:2;40158:6;40154:15;40147:38;39962:230;:::o;40198:237::-;40338:34;40334:1;40326:6;40322:14;40315:58;40407:20;40402:2;40394:6;40390:15;40383:45;40198:237;:::o;40441:225::-;40581:34;40577:1;40569:6;40565:14;40558:58;40650:8;40645:2;40637:6;40633:15;40626:33;40441:225;:::o;40672:178::-;40812:30;40808:1;40800:6;40796:14;40789:54;40672:178;:::o;40856:226::-;40996:34;40992:1;40984:6;40980:14;40973:58;41065:9;41060:2;41052:6;41048:15;41041:34;40856:226;:::o;41088:223::-;41228:34;41224:1;41216:6;41212:14;41205:58;41297:6;41292:2;41284:6;41280:15;41273:31;41088:223;:::o;41317:175::-;41457:27;41453:1;41445:6;41441:14;41434:51;41317:175;:::o;41498:231::-;41638:34;41634:1;41626:6;41622:14;41615:58;41707:14;41702:2;41694:6;41690:15;41683:39;41498:231;:::o;41735:243::-;41875:34;41871:1;41863:6;41859:14;41852:58;41944:26;41939:2;41931:6;41927:15;41920:51;41735:243;:::o;41984:229::-;42124:34;42120:1;42112:6;42108:14;42101:58;42193:12;42188:2;42180:6;42176:15;42169:37;41984:229;:::o;42219:228::-;42359:34;42355:1;42347:6;42343:14;42336:58;42428:11;42423:2;42415:6;42411:15;42404:36;42219:228;:::o;42453:221::-;42593:34;42589:1;42581:6;42577:14;42570:58;42662:4;42657:2;42649:6;42645:15;42638:29;42453:221;:::o;42680:182::-;42820:34;42816:1;42808:6;42804:14;42797:58;42680:182;:::o;42868:231::-;43008:34;43004:1;42996:6;42992:14;42985:58;43077:14;43072:2;43064:6;43060:15;43053:39;42868:231;:::o;43105:155::-;43245:7;43241:1;43233:6;43229:14;43222:31;43105:155;:::o;43266:182::-;43406:34;43402:1;43394:6;43390:14;43383:58;43266:182;:::o;43454:228::-;43594:34;43590:1;43582:6;43578:14;43571:58;43663:11;43658:2;43650:6;43646:15;43639:36;43454:228;:::o;43688:234::-;43828:34;43824:1;43816:6;43812:14;43805:58;43897:17;43892:2;43884:6;43880:15;43873:42;43688:234;:::o;43928:238::-;44068:34;44064:1;44056:6;44052:14;44045:58;44137:21;44132:2;44124:6;44120:15;44113:46;43928:238;:::o;44172:222::-;44312:34;44308:1;44300:6;44296:14;44289:58;44381:5;44376:2;44368:6;44364:15;44357:30;44172:222;:::o;44400:220::-;44540:34;44536:1;44528:6;44524:14;44517:58;44609:3;44604:2;44596:6;44592:15;44585:28;44400:220;:::o;44626:236::-;44766:34;44762:1;44754:6;44750:14;44743:58;44835:19;44830:2;44822:6;44818:15;44811:44;44626:236;:::o;44868:231::-;45008:34;45004:1;44996:6;44992:14;44985:58;45077:14;45072:2;45064:6;45060:15;45053:39;44868:231;:::o;45105:176::-;45245:28;45241:1;45233:6;45229:14;45222:52;45105:176;:::o;45287:122::-;45360:24;45378:5;45360:24;:::i;:::-;45353:5;45350:35;45340:63;;45399:1;45396;45389:12;45340:63;45287:122;:::o;45415:116::-;45485:21;45500:5;45485:21;:::i;:::-;45478:5;45475:32;45465:60;;45521:1;45518;45511:12;45465:60;45415:116;:::o;45537:120::-;45609:23;45626:5;45609:23;:::i;:::-;45602:5;45599:34;45589:62;;45647:1;45644;45637:12;45589:62;45537:120;:::o;45663:122::-;45736:24;45754:5;45736:24;:::i;:::-;45729:5;45726:35;45716:63;;45775:1;45772;45765:12;45716:63;45663:122;:::o

Swarm Source

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