ETH Price: $3,032.22 (+3.95%)

Sappy Seals (SAPS)
 

Overview

TokenID

4680

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Sappy Seals is community-led project focused on metaverse expansion and a growing ecosystem. Holder count is not accurate due to our staking contract - roughly 4400 holders.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
SappySeals

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

// Sources flattened with hardhat v2.5.0 https://hardhat.org
 
// File contracts/utils/introspection/IERC165.sol
 
// SPDX-License-Identifier: MIT
 
pragma solidity ^0.8.0;
 
/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
 
 
// File contracts/token/ERC721/IERC721.sol
 
 
 
pragma solidity ^0.8.0;
 
/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
 
    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
 
    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
 
    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);
 
    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);
 
    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(address from, address to, uint256 tokenId) external;
 
    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address from, address to, uint256 tokenId) external;
 
    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;
 
    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);
 
    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;
 
    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);
 
    /**
      * @dev Safely transfers `tokenId` token from `from` to `to`.
      *
      * Requirements:
      *
      * - `from` cannot be the zero address.
      * - `to` cannot be the zero address.
      * - `tokenId` token must exist and be owned by `from`.
      * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
      * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
      *
      * Emits a {Transfer} event.
      */
    function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;
}
 
 
// File contracts/token/ERC721/IERC721Receiver.sol
 
 
 
pragma solidity ^0.8.0;
 
/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
interface IERC721Receiver {
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.
     */
    function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4);
}
 
 
// File contracts/token/ERC721/extensions/IERC721Metadata.sol
 
 
 
pragma solidity ^0.8.0;
 
/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Metadata is IERC721 {
 
    /**
     * @dev Returns the token collection name.
     */
    function name() external view returns (string memory);
 
    /**
     * @dev Returns the token collection symbol.
     */
    function symbol() external view returns (string memory);
 
    /**
     * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
     */
    function tokenURI(uint256 tokenId) external view returns (string memory);
}
 
 
// File contracts/utils/Address.sol
 
 
 
pragma solidity ^0.8.0;
 
/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.
 
        uint256 size;
        // 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);
            }
        }
    }
}
 
 
// File contracts/utils/Context.sol
 
 
 
pragma solidity ^0.8.0;
 
/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
 
    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}
 
 
// File contracts/utils/Strings.sol
 
 
 
pragma solidity ^0.8.0;
 
/**
 * @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);
    }
 
}
 
 
// File contracts/utils/introspection/ERC165.sol
 
 
 
pragma solidity ^0.8.0;
 
/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}
 
 
// File contracts/token/ERC721/ERC721.sol
 
 
 
pragma solidity ^0.8.0;
 
 
 
 
 
 
 
/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension, but not including the Enumerable extension, which is available separately as
 * {ERC721Enumerable}.
 */
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;
 
    // Token name
    string private _name;
 
    // Token symbol
    string private _symbol;
 
    // Mapping from token ID to owner address
    mapping (uint256 => address) private _owners;
 
    // Mapping owner address to token count
    mapping (address => uint256) private _balances;
 
    // Mapping from token ID to approved address
    mapping (uint256 => address) private _tokenApprovals;
 
    // Mapping from owner to operator approvals
    mapping (address => mapping (address => bool)) private _operatorApprovals;
 
    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor (string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }
 
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return interfaceId == type(IERC721).interfaceId
            || interfaceId == type(IERC721Metadata).interfaceId
            || super.supportsInterface(interfaceId);
    }
 
    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view virtual override returns (uint256) {
        require(owner != address(0), "ERC721: balance query for the zero address");
        return _balances[owner];
    }
 
    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        address owner = _owners[tokenId];
        require(owner != address(0), "ERC721: owner query for nonexistent token");
        return owner;
    }
 
    /**
     * @dev See {IERC721Metadata-name}.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }
 
    /**
     * @dev See {IERC721Metadata-symbol}.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }
 
    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");
 
        string memory baseURI = _baseURI();
        return bytes(baseURI).length > 0
            ? string(abi.encodePacked(baseURI, tokenId.toString()))
            : '';
    }
 
    /**
     * @dev Base URI for computing {tokenURI}. Empty by default, can be overriden
     * in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }
 
    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");
 
        require(_msgSender() == owner || isApprovedForAll(owner, _msgSender()),
            "ERC721: approve caller is not owner nor approved for all"
        );
 
        _approve(to, tokenId);
    }
 
    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        require(_exists(tokenId), "ERC721: approved query for nonexistent token");
 
        return _tokenApprovals[tokenId];
    }
 
    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        require(operator != _msgSender(), "ERC721: approve to caller");
 
        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_msgSender(), operator, approved);
    }
 
    /**
     * @dev See {IERC721-isApprovedForAll}.
     */
    function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[owner][operator];
    }
 
    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(address from, address to, uint256 tokenId) public virtual override {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
 
        _transfer(from, to, tokenId);
    }
 
    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(address from, address to, uint256 tokenId) public virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }
 
    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
        _safeTransfer(from, to, tokenId, _data);
    }
 
    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * `_data` is additional data, it has no specified format and it is sent in call to `to`.
     *
     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
     * implement alternative mechanisms to perform token transfer, such as signature-based.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeTransfer(address from, address to, uint256 tokenId, bytes memory _data) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
    }
 
    /**
     * @dev Returns whether `tokenId` exists.
     *
     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
     *
     * Tokens start existing when they are minted (`_mint`),
     * and stop existing when they are burned (`_burn`).
     */
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }
 
    /**
     * @dev Returns whether `spender` is allowed to manage `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }
 
    /**
     * @dev Safely mints `tokenId` and transfers it to `to`.
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }
 
    /**
     * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
     * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
     */
    function _safeMint(address to, uint256 tokenId, bytes memory _data) internal virtual {
        _mint(to, tokenId);
        require(_checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
    }
 
    /**
     * @dev Mints `tokenId` and transfers it to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - `to` cannot be the zero address.
     *
     * Emits a {Transfer} event.
     */
    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");
 
        _beforeTokenTransfer(address(0), to, tokenId);
 
        _balances[to] += 1;
        _owners[tokenId] = to;
 
        emit Transfer(address(0), to, tokenId);
    }
 
    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);
 
        _beforeTokenTransfer(owner, address(0), tokenId);
 
        // Clear approvals
        _approve(address(0), tokenId);
 
        _balances[owner] -= 1;
        delete _owners[tokenId];
 
        emit Transfer(owner, address(0), tokenId);
    }
 
    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(address from, address to, uint256 tokenId) internal virtual {
        require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own");
        require(to != address(0), "ERC721: transfer to the zero address");
 
        _beforeTokenTransfer(from, to, tokenId);
 
        // Clear approvals from the previous owner
        _approve(address(0), tokenId);
 
        _balances[from] -= 1;
        _balances[to] += 1;
        _owners[tokenId] = to;
 
        emit Transfer(from, to, tokenId);
    }
 
    /**
     * @dev Approve `to` to operate on `tokenId`
     *
     * Emits a {Approval} event.
     */
    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
    }
 
    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
     * The call is not executed if the target address is not a contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data)
        private returns (bool)
    {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
                return retval == IERC721Receiver(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 { }
}
 
 
// File contracts/token/ERC721/extensions/ERC721URIStorage.sol
 
 
 
pragma solidity ^0.8.0;
 
/**
 * @dev ERC721 token with storage based token URI management.
 */
abstract contract ERC721URIStorage is ERC721 {
    using Strings for uint256;
 
    // Optional mapping for token URIs
    mapping (uint256 => string) private _tokenURIs;
 
    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721URIStorage: URI query for nonexistent token");
 
        string memory _tokenURI = _tokenURIs[tokenId];
        string memory base = _baseURI();
 
        // If there is no base URI, return the token URI.
        if (bytes(base).length == 0) {
            return _tokenURI;
        }
        // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).
        if (bytes(_tokenURI).length > 0) {
            return string(abi.encodePacked(base, _tokenURI));
        }
 
        return super.tokenURI(tokenId);
    }
 
    /**
     * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {
        require(_exists(tokenId), "ERC721URIStorage: URI set of nonexistent token");
        _tokenURIs[tokenId] = _tokenURI;
    }
 
    /**
     * @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 override {
        super._burn(tokenId);
 
        if (bytes(_tokenURIs[tokenId]).length != 0) {
            delete _tokenURIs[tokenId];
        }
    }
}
 
 
// File contracts/access/Ownable.sol
 
 
 
pragma solidity ^0.8.0;
 
/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;
 
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
 
    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }
 
    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }
 
    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
 
    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        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;
    }
}
 
 
 
pragma solidity ^0.8.0;
 
 
 
contract SappySeals is ERC721URIStorage, Ownable{
 
    event MintSeals (address indexed minter, uint256 startWith, uint256 times);
    
    
    uint256 public totalSeals;
    uint256 public totalCount = 10000; //bruhTotal
    uint256 public maxBatch = 20; // bruhBatch
    uint256 public price = 60000000000000000; // 0.06 eth
    uint256 public releaseUnix = 1630447200; // works KEKW
    uint256 public presaleRelease = 1630445400; // presale time (please work)
    string public baseURI;
    bool public started;
    bool public whiteListStart;
    mapping(address => bool) whiteList;
    mapping(address => uint256) whiteListMintCount;
    uint addressRegistryCount;
    
    constructor(string memory name_, string memory symbol_, string memory baseURI_) ERC721(name_, symbol_) {
        baseURI = baseURI_;
    }
    
    modifier canWhitelistMint() {
        require(block.timestamp >= presaleRelease, "Wait buddy");
        require(whiteListStart, "Hang on boys, youll get in soon");
        require(whiteList[msg.sender] == true, "Not whitelisted.");
        _; 
    }

    modifier mintEnabled() {
        require(block.timestamp >= releaseUnix, "Wait buddy");
        require(started, "not started");
        _;
    }
 
    function totalSupply() public view virtual returns (uint256) {
        return totalSeals;
    }
 
    function _baseURI() internal view virtual override returns (string memory){
        return baseURI;
    }
 
    function setBaseURI(string memory _newURI) public onlyOwner {
        baseURI = _newURI;
    }
 
    function changePrice(uint256 _newPrice) public onlyOwner {
        price = _newPrice;
    }
    
    function changeStartDate(uint256 newDate) public onlyOwner {
        releaseUnix = newDate;
    }
    
    function changePresaleStartDate(uint256 newDate) public onlyOwner {
        presaleRelease = newDate;
    }
 
    function setTokenURI(uint256 _tokenId, string memory _tokenURI) public onlyOwner {
        _setTokenURI(_tokenId, _tokenURI);
    }
 
    function setNormalStart(bool _start) public onlyOwner {
        started = _start;
    }
    
    function setWhiteListStart(bool _start) public onlyOwner {
        whiteListStart = _start;
    }
    
    function getWhitelistMintAmount(address _addr) public view virtual returns (uint256) {
        return whiteListMintCount[_addr];
    }
 
    function mintSeal(uint256 _times) payable public mintEnabled {
        require(_times >0 && _times <= maxBatch, "mint wrong number");
        require(totalSeals + _times <= totalCount, "too much");
        require(msg.value == _times * price, "value error");
        payable(owner()).transfer(msg.value);
        emit MintSeals(_msgSender(), totalSeals+1, _times);
        for(uint256 i=0; i< _times; i++){
            _mint(_msgSender(), 1 + totalSeals++);
        }
    } 
    
    function adminMint(uint256 _times) payable public onlyOwner {
        require(_times >0 && _times <= maxBatch, "mint wrong number");
        require(totalSeals + _times <= totalCount, "too much");
        require(msg.value == _times * price, "value error");
        payable(owner()).transfer(msg.value);
        emit MintSeals(_msgSender(), totalSeals+1, _times);
        for(uint256 i=0; i< _times; i++){
            _mint(_msgSender(), 1 + totalSeals++);
        }
    }
    
    
    function whitelistMint(uint _times) payable public canWhitelistMint {
        require(whiteListMintCount[msg.sender] - _times >= 0, "Over mint limit for address.");
        require(totalSeals + _times <= totalCount, "Mint amount will exceed total collection amount.");
        require(msg.value == _times * price, "Incorrect transaction value.");
        payable(owner()).transfer(msg.value);
        whiteListMintCount[_msgSender()] -= _times;
        emit MintSeals(_msgSender(), totalSeals+1, _times);
        for(uint256 i=0; i< _times; i++){
            _mint(_msgSender(), 1 + totalSeals++);
        }
    }
    
    
    function adminMintGiveaways(address _addr) public onlyOwner {
        require(totalSeals + 1 <= totalCount, "Mint amount will exceed total collection amount.");
        emit MintSeals(_addr, totalSeals+1, 1);
        _mint(_addr, 1 + totalSeals++);
    } 
    
    
    function addToWhitelist(address _addr, uint numberOfMints) public onlyOwner {
        whiteList[_addr] = true;
        whiteListMintCount[_addr] = numberOfMints;
        addressRegistryCount++;
    }
    
    function addToWhitelistBulk(address[] memory _addr,uint[] memory _numberOfMints) public onlyOwner {
        for(uint256 i = 0; i < _addr.length; i++){
            whiteList[_addr[i]] = true;
            whiteListMintCount[_addr[i]] = _numberOfMints[i];
        }
    }
    
    //Check address is in whiteList 
    function isAddressInWhitelist(address _addr) public view virtual returns(bool) {
            return whiteList[_addr] == true;
    }
    
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"string","name":"baseURI_","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"minter","type":"address"},{"indexed":false,"internalType":"uint256","name":"startWith","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"times","type":"uint256"}],"name":"MintSeals","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"uint256","name":"numberOfMints","type":"uint256"}],"name":"addToWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addr","type":"address[]"},{"internalType":"uint256[]","name":"_numberOfMints","type":"uint256[]"}],"name":"addToWhitelistBulk","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_times","type":"uint256"}],"name":"adminMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"adminMintGiveaways","outputs":[],"stateMutability":"nonpayable","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":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newDate","type":"uint256"}],"name":"changePresaleStartDate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"changePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newDate","type":"uint256"}],"name":"changeStartDate","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":"_addr","type":"address"}],"name":"getWhitelistMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"isAddressInWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"maxBatch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_times","type":"uint256"}],"name":"mintSeal","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":"presaleRelease","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"releaseUnix","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_start","type":"bool"}],"name":"setNormalStart","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"string","name":"_tokenURI","type":"string"}],"name":"setTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_start","type":"bool"}],"name":"setWhiteListStart","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"started","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSeals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"whiteListStart","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_times","type":"uint256"}],"name":"whitelistMint","outputs":[],"stateMutability":"payable","type":"function"}]

60806040526127106009556014600a5566d529ae9e860000600b5563612ea660600c5563612e9f58600d553480156200003757600080fd5b50604051620054df380380620054df83398181016040528101906200005d919062000290565b82828160009080519060200190620000779291906200016e565b508060019080519060200190620000909291906200016e565b5050506000620000a56200016660201b60201c565b905080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35080600e90805190602001906200015c9291906200016e565b50505050620004a1565b600033905090565b8280546200017c90620003c6565b90600052602060002090601f016020900481019282620001a05760008555620001ec565b82601f10620001bb57805160ff1916838001178555620001ec565b82800160010185558215620001ec579182015b82811115620001eb578251825591602001919060010190620001ce565b5b509050620001fb9190620001ff565b5090565b5b808211156200021a57600081600090555060010162000200565b5090565b6000620002356200022f846200035a565b62000331565b9050828152602081018484840111156200024e57600080fd5b6200025b84828562000390565b509392505050565b600082601f8301126200027557600080fd5b8151620002878482602086016200021e565b91505092915050565b600080600060608486031215620002a657600080fd5b600084015167ffffffffffffffff811115620002c157600080fd5b620002cf8682870162000263565b935050602084015167ffffffffffffffff811115620002ed57600080fd5b620002fb8682870162000263565b925050604084015167ffffffffffffffff8111156200031957600080fd5b620003278682870162000263565b9150509250925092565b60006200033d62000350565b90506200034b8282620003fc565b919050565b6000604051905090565b600067ffffffffffffffff82111562000378576200037762000461565b5b620003838262000490565b9050602081019050919050565b60005b83811015620003b057808201518184015260208101905062000393565b83811115620003c0576000848401525b50505050565b60006002820490506001821680620003df57607f821691505b60208210811415620003f657620003f562000432565b5b50919050565b620004078262000490565b810181811067ffffffffffffffff8211171562000429576200042862000461565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b61502e80620004b16000396000f3fe6080604052600436106102455760003560e01c8063715018a611610139578063a035b1fe116100b6578063c1f261231161007a578063c1f2612314610856578063c87b56dd14610872578063d0f2a114146108af578063d9ff054e146108cb578063e985e9c5146108f6578063f2fde38b1461093357610245565b8063a035b1fe14610787578063a22cb465146107b2578063a2b40d19146107db578063b88d4fde14610804578063bffb26ce1461082d57610245565b8063917bb57f116100fd578063917bb57f1461069057806395d89b41146106b95780639955fc45146106e45780639a3132991461070d5780639afdf2f31461074a57610245565b8063715018a6146105dc57806383ebc808146105f3578063868ff4a21461061e57806388eae7051461063a5780638da5cb5b1461066557610245565b806334eafb11116101c75780635f4f603d1161018b5780635f4f603d146104e35780636352211e1461050c57806367765b87146105495780636c0360eb1461057457806370a082311461059f57610245565b806334eafb11146104125780633c49a8a91461043d57806342842e0e146104665780635082aed51461048f57806355f804b3146104ba57610245565b8063162094c41161020e578063162094c41461034157806318160ddd1461036a5780631f2698ab14610395578063214405fc146103c057806323b872dd146103e957610245565b8062739f2a1461024a57806301ffc9a71461027357806306fdde03146102b0578063081812fc146102db578063095ea7b314610318575b600080fd5b34801561025657600080fd5b50610271600480360381019061026c9190613a58565b61095c565b005b34801561027f57600080fd5b5061029a600480360381019061029591906139c5565b6109e2565b6040516102a79190614013565b60405180910390f35b3480156102bc57600080fd5b506102c5610ac4565b6040516102d2919061402e565b60405180910390f35b3480156102e757600080fd5b5061030260048036038101906102fd9190613a58565b610b56565b60405161030f9190613fac565b60405180910390f35b34801561032457600080fd5b5061033f600480360381019061033a91906138f4565b610bdb565b005b34801561034d57600080fd5b5061036860048036038101906103639190613a81565b610cf3565b005b34801561037657600080fd5b5061037f610d7d565b60405161038c91906143d0565b60405180910390f35b3480156103a157600080fd5b506103aa610d87565b6040516103b79190614013565b60405180910390f35b3480156103cc57600080fd5b506103e760048036038101906103e291906138f4565b610d9a565b005b3480156103f557600080fd5b50610410600480360381019061040b91906137ee565b610ece565b005b34801561041e57600080fd5b50610427610f2e565b60405161043491906143d0565b60405180910390f35b34801561044957600080fd5b50610464600480360381019061045f9190613789565b610f34565b005b34801561047257600080fd5b5061048d600480360381019061048891906137ee565b611091565b005b34801561049b57600080fd5b506104a46110b1565b6040516104b191906143d0565b60405180910390f35b3480156104c657600080fd5b506104e160048036038101906104dc9190613a17565b6110b7565b005b3480156104ef57600080fd5b5061050a6004803603810190610505919061399c565b61114d565b005b34801561051857600080fd5b50610533600480360381019061052e9190613a58565b6111e6565b6040516105409190613fac565b60405180910390f35b34801561055557600080fd5b5061055e611298565b60405161056b91906143d0565b60405180910390f35b34801561058057600080fd5b5061058961129e565b604051610596919061402e565b60405180910390f35b3480156105ab57600080fd5b506105c660048036038101906105c19190613789565b61132c565b6040516105d391906143d0565b60405180910390f35b3480156105e857600080fd5b506105f16113e4565b005b3480156105ff57600080fd5b50610608611521565b60405161061591906143d0565b60405180910390f35b61063860048036038101906106339190613a58565b611527565b005b34801561064657600080fd5b5061064f6118e2565b60405161065c9190614013565b60405180910390f35b34801561067157600080fd5b5061067a6118f5565b6040516106879190613fac565b60405180910390f35b34801561069c57600080fd5b506106b760048036038101906106b2919061399c565b61191f565b005b3480156106c557600080fd5b506106ce6119b8565b6040516106db919061402e565b60405180910390f35b3480156106f057600080fd5b5061070b60048036038101906107069190613a58565b611a4a565b005b34801561071957600080fd5b50610734600480360381019061072f9190613789565b611ad0565b6040516107419190614013565b60405180910390f35b34801561075657600080fd5b50610771600480360381019061076c9190613789565b611b2d565b60405161077e91906143d0565b60405180910390f35b34801561079357600080fd5b5061079c611b76565b6040516107a991906143d0565b60405180910390f35b3480156107be57600080fd5b506107d960048036038101906107d491906138b8565b611b7c565b005b3480156107e757600080fd5b5061080260048036038101906107fd9190613a58565b611cfd565b005b34801561081057600080fd5b5061082b6004803603810190610826919061383d565b611d83565b005b34801561083957600080fd5b50610854600480360381019061084f9190613930565b611de5565b005b610870600480360381019061086b9190613a58565b611fe1565b005b34801561087e57600080fd5b5061089960048036038101906108949190613a58565b612257565b6040516108a6919061402e565b60405180910390f35b6108c960048036038101906108c49190613a58565b6123a9565b005b3480156108d757600080fd5b506108e0612637565b6040516108ed91906143d0565b60405180910390f35b34801561090257600080fd5b5061091d600480360381019061091891906137b2565b61263d565b60405161092a9190614013565b60405180910390f35b34801561093f57600080fd5b5061095a60048036038101906109559190613789565b6126d1565b005b61096461287d565b73ffffffffffffffffffffffffffffffffffffffff166109826118f5565b73ffffffffffffffffffffffffffffffffffffffff16146109d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109cf90614270565b60405180910390fd5b80600c8190555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610aad57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610abd5750610abc82612885565b5b9050919050565b606060008054610ad39061473c565b80601f0160208091040260200160405190810160405280929190818152602001828054610aff9061473c565b8015610b4c5780601f10610b2157610100808354040283529160200191610b4c565b820191906000526020600020905b815481529060010190602001808311610b2f57829003601f168201915b5050505050905090565b6000610b61826128ef565b610ba0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9790614250565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610be6826111e6565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4e906142f0565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c7661287d565b73ffffffffffffffffffffffffffffffffffffffff161480610ca55750610ca481610c9f61287d565b61263d565b5b610ce4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cdb90614170565b60405180910390fd5b610cee838361295b565b505050565b610cfb61287d565b73ffffffffffffffffffffffffffffffffffffffff16610d196118f5565b73ffffffffffffffffffffffffffffffffffffffff1614610d6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6690614270565b60405180910390fd5b610d798282612a14565b5050565b6000600854905090565b600f60009054906101000a900460ff1681565b610da261287d565b73ffffffffffffffffffffffffffffffffffffffff16610dc06118f5565b73ffffffffffffffffffffffffffffffffffffffff1614610e16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0d90614270565b60405180910390fd5b6001601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060126000815480929190610ec59061479f565b91905055505050565b610edf610ed961287d565b82612a88565b610f1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1590614310565b60405180910390fd5b610f29838383612b66565b505050565b60095481565b610f3c61287d565b73ffffffffffffffffffffffffffffffffffffffff16610f5a6118f5565b73ffffffffffffffffffffffffffffffffffffffff1614610fb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa790614270565b60405180910390fd5b6009546001600854610fc2919061455f565b1115611003576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffa90614350565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff167fc1c66401eeae5b2a4ff23f6d7784eefe229334268d00c4b0e5e2c44c4ae4fda5600160085461104a919061455f565b600160405161105a9291906143eb565b60405180910390a261108e81600860008154809291906110799061479f565b919050556001611089919061455f565b612dc2565b50565b6110ac83838360405180602001604052806000815250611d83565b505050565b600d5481565b6110bf61287d565b73ffffffffffffffffffffffffffffffffffffffff166110dd6118f5565b73ffffffffffffffffffffffffffffffffffffffff1614611133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112a90614270565b60405180910390fd5b80600e9080519060200190611149929190613481565b5050565b61115561287d565b73ffffffffffffffffffffffffffffffffffffffff166111736118f5565b73ffffffffffffffffffffffffffffffffffffffff16146111c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c090614270565b60405180910390fd5b80600f60016101000a81548160ff02191690831515021790555050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561128f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611286906141b0565b60405180910390fd5b80915050919050565b600a5481565b600e80546112ab9061473c565b80601f01602080910402602001604051908101604052809291908181526020018280546112d79061473c565b80156113245780601f106112f957610100808354040283529160200191611324565b820191906000526020600020905b81548152906001019060200180831161130757829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561139d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139490614190565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113ec61287d565b73ffffffffffffffffffffffffffffffffffffffff1661140a6118f5565b73ffffffffffffffffffffffffffffffffffffffff1614611460576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145790614270565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600c5481565b600d5442101561156c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611563906142b0565b60405180910390fd5b600f60019054906101000a900460ff166115bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b290614390565b60405180910390fd5b60011515601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151461164e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164590614330565b60405180910390fd5b600081601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461169b9190614640565b10156116dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d390614130565b60405180910390fd5b600954816008546116ed919061455f565b111561172e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172590614350565b60405180910390fd5b600b548161173c91906145e6565b341461177d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611774906141f0565b60405180910390fd5b6117856118f5565b73ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f193505050501580156117ca573d6000803e3d6000fd5b5080601160006117d861287d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118219190614640565b9250508190555061183061287d565b73ffffffffffffffffffffffffffffffffffffffff167fc1c66401eeae5b2a4ff23f6d7784eefe229334268d00c4b0e5e2c44c4ae4fda56001600854611876919061455f565b83604051611885929190614414565b60405180910390a260005b818110156118de576118cb6118a361287d565b600860008154809291906118b69061479f565b9190505560016118c6919061455f565b612dc2565b80806118d69061479f565b915050611890565b5050565b600f60019054906101000a900460ff1681565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61192761287d565b73ffffffffffffffffffffffffffffffffffffffff166119456118f5565b73ffffffffffffffffffffffffffffffffffffffff161461199b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199290614270565b60405180910390fd5b80600f60006101000a81548160ff02191690831515021790555050565b6060600180546119c79061473c565b80601f01602080910402602001604051908101604052809291908181526020018280546119f39061473c565b8015611a405780601f10611a1557610100808354040283529160200191611a40565b820191906000526020600020905b815481529060010190602001808311611a2357829003601f168201915b5050505050905090565b611a5261287d565b73ffffffffffffffffffffffffffffffffffffffff16611a706118f5565b73ffffffffffffffffffffffffffffffffffffffff1614611ac6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611abd90614270565b60405180910390fd5b80600d8190555050565b600060011515601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515149050919050565b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600b5481565b611b8461287d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be990614110565b60405180910390fd5b8060056000611bff61287d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611cac61287d565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611cf19190614013565b60405180910390a35050565b611d0561287d565b73ffffffffffffffffffffffffffffffffffffffff16611d236118f5565b73ffffffffffffffffffffffffffffffffffffffff1614611d79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7090614270565b60405180910390fd5b80600b8190555050565b611d94611d8e61287d565b83612a88565b611dd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dca90614310565b60405180910390fd5b611ddf84848484612f90565b50505050565b611ded61287d565b73ffffffffffffffffffffffffffffffffffffffff16611e0b6118f5565b73ffffffffffffffffffffffffffffffffffffffff1614611e61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5890614270565b60405180910390fd5b60005b8251811015611fdc57600160106000858481518110611eac577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550818181518110611f3e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015160116000858481518110611f83577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508080611fd49061479f565b915050611e64565b505050565b611fe961287d565b73ffffffffffffffffffffffffffffffffffffffff166120076118f5565b73ffffffffffffffffffffffffffffffffffffffff161461205d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205490614270565b60405180910390fd5b60008111801561206f5750600a548111155b6120ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a5906140d0565b60405180910390fd5b600954816008546120bf919061455f565b1115612100576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f790614050565b60405180910390fd5b600b548161210e91906145e6565b341461214f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612146906143b0565b60405180910390fd5b6121576118f5565b73ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f1935050505015801561219c573d6000803e3d6000fd5b506121a561287d565b73ffffffffffffffffffffffffffffffffffffffff167fc1c66401eeae5b2a4ff23f6d7784eefe229334268d00c4b0e5e2c44c4ae4fda560016008546121eb919061455f565b836040516121fa929190614414565b60405180910390a260005b818110156122535761224061221861287d565b6008600081548092919061222b9061479f565b91905055600161223b919061455f565b612dc2565b808061224b9061479f565b915050612205565b5050565b6060612262826128ef565b6122a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229890614230565b60405180910390fd5b60006006600084815260200190815260200160002080546122c19061473c565b80601f01602080910402602001604051908101604052809291908181526020018280546122ed9061473c565b801561233a5780601f1061230f5761010080835404028352916020019161233a565b820191906000526020600020905b81548152906001019060200180831161231d57829003601f168201915b50505050509050600061234b612fec565b90506000815114156123615781925050506123a4565b60008251111561239657808260405160200161237e929190613f88565b604051602081830303815290604052925050506123a4565b61239f8461307e565b925050505b919050565b600c544210156123ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e5906142b0565b60405180910390fd5b600f60009054906101000a900460ff1661243d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243490614370565b60405180910390fd5b60008111801561244f5750600a548111155b61248e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612485906140d0565b60405180910390fd5b6009548160085461249f919061455f565b11156124e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d790614050565b60405180910390fd5b600b54816124ee91906145e6565b341461252f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612526906143b0565b60405180910390fd5b6125376118f5565b73ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f1935050505015801561257c573d6000803e3d6000fd5b5061258561287d565b73ffffffffffffffffffffffffffffffffffffffff167fc1c66401eeae5b2a4ff23f6d7784eefe229334268d00c4b0e5e2c44c4ae4fda560016008546125cb919061455f565b836040516125da929190614414565b60405180910390a260005b81811015612633576126206125f861287d565b6008600081548092919061260b9061479f565b91905055600161261b919061455f565b612dc2565b808061262b9061479f565b9150506125e5565b5050565b60085481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6126d961287d565b73ffffffffffffffffffffffffffffffffffffffff166126f76118f5565b73ffffffffffffffffffffffffffffffffffffffff161461274d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274490614270565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156127bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b490614090565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166129ce836111e6565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b612a1d826128ef565b612a5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a53906141d0565b60405180910390fd5b80600660008481526020019081526020016000209080519060200190612a83929190613481565b505050565b6000612a93826128ef565b612ad2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ac990614150565b60405180910390fd5b6000612add836111e6565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612b4c57508373ffffffffffffffffffffffffffffffffffffffff16612b3484610b56565b73ffffffffffffffffffffffffffffffffffffffff16145b80612b5d5750612b5c818561263d565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612b86826111e6565b73ffffffffffffffffffffffffffffffffffffffff1614612bdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd390614290565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c43906140f0565b60405180910390fd5b612c57838383613125565b612c6260008261295b565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612cb29190614640565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612d09919061455f565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e2990614210565b60405180910390fd5b612e3b816128ef565b15612e7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e72906140b0565b60405180910390fd5b612e8760008383613125565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ed7919061455f565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b612f9b848484612b66565b612fa78484848461312a565b612fe6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fdd90614070565b60405180910390fd5b50505050565b6060600e8054612ffb9061473c565b80601f01602080910402602001604051908101604052809291908181526020018280546130279061473c565b80156130745780601f1061304957610100808354040283529160200191613074565b820191906000526020600020905b81548152906001019060200180831161305757829003601f168201915b5050505050905090565b6060613089826128ef565b6130c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130bf906142d0565b60405180910390fd5b60006130d2612fec565b905060008151116130f2576040518060200160405280600081525061311d565b806130fc846132c1565b60405160200161310d929190613f88565b6040516020818303038152906040525b915050919050565b505050565b600061314b8473ffffffffffffffffffffffffffffffffffffffff1661346e565b156132b4578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261317461287d565b8786866040518563ffffffff1660e01b81526004016131969493929190613fc7565b602060405180830381600087803b1580156131b057600080fd5b505af19250505080156131e157506040513d601f19601f820116820180604052508101906131de91906139ee565b60015b613264573d8060008114613211576040519150601f19603f3d011682016040523d82523d6000602084013e613216565b606091505b5060008151141561325c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161325390614070565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506132b9565b600190505b949350505050565b60606000821415613309576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613469565b600082905060005b6000821461333b5780806133249061479f565b915050600a8261333491906145b5565b9150613311565b60008167ffffffffffffffff81111561337d577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156133af5781602001600182028036833780820191505090505b5090505b60008514613462576001826133c89190614640565b9150600a856133d791906147e8565b60306133e3919061455f565b60f81b81838151811061341f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561345b91906145b5565b94506133b3565b8093505050505b919050565b600080823b905060008111915050919050565b82805461348d9061473c565b90600052602060002090601f0160209004810192826134af57600085556134f6565b82601f106134c857805160ff19168380011785556134f6565b828001600101855582156134f6579182015b828111156134f55782518255916020019190600101906134da565b5b5090506135039190613507565b5090565b5b80821115613520576000816000905550600101613508565b5090565b600061353761353284614462565b61443d565b9050808382526020820190508285602086028201111561355657600080fd5b60005b85811015613586578161356c8882613678565b845260208401935060208301925050600181019050613559565b5050509392505050565b60006135a361359e8461448e565b61443d565b905080838252602082019050828560208602820111156135c257600080fd5b60005b858110156135f257816135d88882613774565b8452602084019350602083019250506001810190506135c5565b5050509392505050565b600061360f61360a846144ba565b61443d565b90508281526020810184848401111561362757600080fd5b6136328482856146fa565b509392505050565b600061364d613648846144eb565b61443d565b90508281526020810184848401111561366557600080fd5b6136708482856146fa565b509392505050565b60008135905061368781614f9c565b92915050565b600082601f83011261369e57600080fd5b81356136ae848260208601613524565b91505092915050565b600082601f8301126136c857600080fd5b81356136d8848260208601613590565b91505092915050565b6000813590506136f081614fb3565b92915050565b60008135905061370581614fca565b92915050565b60008151905061371a81614fca565b92915050565b600082601f83011261373157600080fd5b81356137418482602086016135fc565b91505092915050565b600082601f83011261375b57600080fd5b813561376b84826020860161363a565b91505092915050565b60008135905061378381614fe1565b92915050565b60006020828403121561379b57600080fd5b60006137a984828501613678565b91505092915050565b600080604083850312156137c557600080fd5b60006137d385828601613678565b92505060206137e485828601613678565b9150509250929050565b60008060006060848603121561380357600080fd5b600061381186828701613678565b935050602061382286828701613678565b925050604061383386828701613774565b9150509250925092565b6000806000806080858703121561385357600080fd5b600061386187828801613678565b945050602061387287828801613678565b935050604061388387828801613774565b925050606085013567ffffffffffffffff8111156138a057600080fd5b6138ac87828801613720565b91505092959194509250565b600080604083850312156138cb57600080fd5b60006138d985828601613678565b92505060206138ea858286016136e1565b9150509250929050565b6000806040838503121561390757600080fd5b600061391585828601613678565b925050602061392685828601613774565b9150509250929050565b6000806040838503121561394357600080fd5b600083013567ffffffffffffffff81111561395d57600080fd5b6139698582860161368d565b925050602083013567ffffffffffffffff81111561398657600080fd5b613992858286016136b7565b9150509250929050565b6000602082840312156139ae57600080fd5b60006139bc848285016136e1565b91505092915050565b6000602082840312156139d757600080fd5b60006139e5848285016136f6565b91505092915050565b600060208284031215613a0057600080fd5b6000613a0e8482850161370b565b91505092915050565b600060208284031215613a2957600080fd5b600082013567ffffffffffffffff811115613a4357600080fd5b613a4f8482850161374a565b91505092915050565b600060208284031215613a6a57600080fd5b6000613a7884828501613774565b91505092915050565b60008060408385031215613a9457600080fd5b6000613aa285828601613774565b925050602083013567ffffffffffffffff811115613abf57600080fd5b613acb8582860161374a565b9150509250929050565b613ade81614674565b82525050565b613aed81614686565b82525050565b6000613afe8261451c565b613b088185614532565b9350613b18818560208601614709565b613b21816148d5565b840191505092915050565b613b35816146e8565b82525050565b6000613b4682614527565b613b508185614543565b9350613b60818560208601614709565b613b69816148d5565b840191505092915050565b6000613b7f82614527565b613b898185614554565b9350613b99818560208601614709565b80840191505092915050565b6000613bb2600883614543565b9150613bbd826148e6565b602082019050919050565b6000613bd5603283614543565b9150613be08261490f565b604082019050919050565b6000613bf8602683614543565b9150613c038261495e565b604082019050919050565b6000613c1b601c83614543565b9150613c26826149ad565b602082019050919050565b6000613c3e601183614543565b9150613c49826149d6565b602082019050919050565b6000613c61602483614543565b9150613c6c826149ff565b604082019050919050565b6000613c84601983614543565b9150613c8f82614a4e565b602082019050919050565b6000613ca7601c83614543565b9150613cb282614a77565b602082019050919050565b6000613cca602c83614543565b9150613cd582614aa0565b604082019050919050565b6000613ced603883614543565b9150613cf882614aef565b604082019050919050565b6000613d10602a83614543565b9150613d1b82614b3e565b604082019050919050565b6000613d33602983614543565b9150613d3e82614b8d565b604082019050919050565b6000613d56602e83614543565b9150613d6182614bdc565b604082019050919050565b6000613d79601c83614543565b9150613d8482614c2b565b602082019050919050565b6000613d9c602083614543565b9150613da782614c54565b602082019050919050565b6000613dbf603183614543565b9150613dca82614c7d565b604082019050919050565b6000613de2602c83614543565b9150613ded82614ccc565b604082019050919050565b6000613e05602083614543565b9150613e1082614d1b565b602082019050919050565b6000613e28602983614543565b9150613e3382614d44565b604082019050919050565b6000613e4b600a83614543565b9150613e5682614d93565b602082019050919050565b6000613e6e602f83614543565b9150613e7982614dbc565b604082019050919050565b6000613e91602183614543565b9150613e9c82614e0b565b604082019050919050565b6000613eb4603183614543565b9150613ebf82614e5a565b604082019050919050565b6000613ed7601083614543565b9150613ee282614ea9565b602082019050919050565b6000613efa603083614543565b9150613f0582614ed2565b604082019050919050565b6000613f1d600b83614543565b9150613f2882614f21565b602082019050919050565b6000613f40601f83614543565b9150613f4b82614f4a565b602082019050919050565b6000613f63600b83614543565b9150613f6e82614f73565b602082019050919050565b613f82816146de565b82525050565b6000613f948285613b74565b9150613fa08284613b74565b91508190509392505050565b6000602082019050613fc16000830184613ad5565b92915050565b6000608082019050613fdc6000830187613ad5565b613fe96020830186613ad5565b613ff66040830185613f79565b81810360608301526140088184613af3565b905095945050505050565b60006020820190506140286000830184613ae4565b92915050565b600060208201905081810360008301526140488184613b3b565b905092915050565b6000602082019050818103600083015261406981613ba5565b9050919050565b6000602082019050818103600083015261408981613bc8565b9050919050565b600060208201905081810360008301526140a981613beb565b9050919050565b600060208201905081810360008301526140c981613c0e565b9050919050565b600060208201905081810360008301526140e981613c31565b9050919050565b6000602082019050818103600083015261410981613c54565b9050919050565b6000602082019050818103600083015261412981613c77565b9050919050565b6000602082019050818103600083015261414981613c9a565b9050919050565b6000602082019050818103600083015261416981613cbd565b9050919050565b6000602082019050818103600083015261418981613ce0565b9050919050565b600060208201905081810360008301526141a981613d03565b9050919050565b600060208201905081810360008301526141c981613d26565b9050919050565b600060208201905081810360008301526141e981613d49565b9050919050565b6000602082019050818103600083015261420981613d6c565b9050919050565b6000602082019050818103600083015261422981613d8f565b9050919050565b6000602082019050818103600083015261424981613db2565b9050919050565b6000602082019050818103600083015261426981613dd5565b9050919050565b6000602082019050818103600083015261428981613df8565b9050919050565b600060208201905081810360008301526142a981613e1b565b9050919050565b600060208201905081810360008301526142c981613e3e565b9050919050565b600060208201905081810360008301526142e981613e61565b9050919050565b6000602082019050818103600083015261430981613e84565b9050919050565b6000602082019050818103600083015261432981613ea7565b9050919050565b6000602082019050818103600083015261434981613eca565b9050919050565b6000602082019050818103600083015261436981613eed565b9050919050565b6000602082019050818103600083015261438981613f10565b9050919050565b600060208201905081810360008301526143a981613f33565b9050919050565b600060208201905081810360008301526143c981613f56565b9050919050565b60006020820190506143e56000830184613f79565b92915050565b60006040820190506144006000830185613f79565b61440d6020830184613b2c565b9392505050565b60006040820190506144296000830185613f79565b6144366020830184613f79565b9392505050565b6000614447614458565b9050614453828261476e565b919050565b6000604051905090565b600067ffffffffffffffff82111561447d5761447c6148a6565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156144a9576144a86148a6565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156144d5576144d46148a6565b5b6144de826148d5565b9050602081019050919050565b600067ffffffffffffffff821115614506576145056148a6565b5b61450f826148d5565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061456a826146de565b9150614575836146de565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156145aa576145a9614819565b5b828201905092915050565b60006145c0826146de565b91506145cb836146de565b9250826145db576145da614848565b5b828204905092915050565b60006145f1826146de565b91506145fc836146de565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561463557614634614819565b5b828202905092915050565b600061464b826146de565b9150614656836146de565b92508282101561466957614668614819565b5b828203905092915050565b600061467f826146be565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006146f3826146de565b9050919050565b82818337600083830152505050565b60005b8381101561472757808201518184015260208101905061470c565b83811115614736576000848401525b50505050565b6000600282049050600182168061475457607f821691505b6020821081141561476857614767614877565b5b50919050565b614777826148d5565b810181811067ffffffffffffffff82111715614796576147956148a6565b5b80604052505050565b60006147aa826146de565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156147dd576147dc614819565b5b600182019050919050565b60006147f3826146de565b91506147fe836146de565b92508261480e5761480d614848565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f746f6f206d756368000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f6d696e742077726f6e67206e756d626572000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4f766572206d696e74206c696d697420666f7220616464726573732e00000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60008201527f6578697374656e7420746f6b656e000000000000000000000000000000000000602082015250565b7f496e636f7272656374207472616e73616374696f6e2076616c75652e00000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f5761697420627564647900000000000000000000000000000000000000000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4e6f742077686974656c69737465642e00000000000000000000000000000000600082015250565b7f4d696e7420616d6f756e742077696c6c2065786365656420746f74616c20636f60008201527f6c6c656374696f6e20616d6f756e742e00000000000000000000000000000000602082015250565b7f6e6f742073746172746564000000000000000000000000000000000000000000600082015250565b7f48616e67206f6e20626f79732c20796f756c6c2067657420696e20736f6f6e00600082015250565b7f76616c7565206572726f72000000000000000000000000000000000000000000600082015250565b614fa581614674565b8114614fb057600080fd5b50565b614fbc81614686565b8114614fc757600080fd5b50565b614fd381614692565b8114614fde57600080fd5b50565b614fea816146de565b8114614ff557600080fd5b5056fea264697066735822122050c3cb52042f65bfe263e2ec9f58bd94b1f7253da530003723db24e02929240164736f6c63430008040033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000b5361707079205365616c73000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000453415053000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106102455760003560e01c8063715018a611610139578063a035b1fe116100b6578063c1f261231161007a578063c1f2612314610856578063c87b56dd14610872578063d0f2a114146108af578063d9ff054e146108cb578063e985e9c5146108f6578063f2fde38b1461093357610245565b8063a035b1fe14610787578063a22cb465146107b2578063a2b40d19146107db578063b88d4fde14610804578063bffb26ce1461082d57610245565b8063917bb57f116100fd578063917bb57f1461069057806395d89b41146106b95780639955fc45146106e45780639a3132991461070d5780639afdf2f31461074a57610245565b8063715018a6146105dc57806383ebc808146105f3578063868ff4a21461061e57806388eae7051461063a5780638da5cb5b1461066557610245565b806334eafb11116101c75780635f4f603d1161018b5780635f4f603d146104e35780636352211e1461050c57806367765b87146105495780636c0360eb1461057457806370a082311461059f57610245565b806334eafb11146104125780633c49a8a91461043d57806342842e0e146104665780635082aed51461048f57806355f804b3146104ba57610245565b8063162094c41161020e578063162094c41461034157806318160ddd1461036a5780631f2698ab14610395578063214405fc146103c057806323b872dd146103e957610245565b8062739f2a1461024a57806301ffc9a71461027357806306fdde03146102b0578063081812fc146102db578063095ea7b314610318575b600080fd5b34801561025657600080fd5b50610271600480360381019061026c9190613a58565b61095c565b005b34801561027f57600080fd5b5061029a600480360381019061029591906139c5565b6109e2565b6040516102a79190614013565b60405180910390f35b3480156102bc57600080fd5b506102c5610ac4565b6040516102d2919061402e565b60405180910390f35b3480156102e757600080fd5b5061030260048036038101906102fd9190613a58565b610b56565b60405161030f9190613fac565b60405180910390f35b34801561032457600080fd5b5061033f600480360381019061033a91906138f4565b610bdb565b005b34801561034d57600080fd5b5061036860048036038101906103639190613a81565b610cf3565b005b34801561037657600080fd5b5061037f610d7d565b60405161038c91906143d0565b60405180910390f35b3480156103a157600080fd5b506103aa610d87565b6040516103b79190614013565b60405180910390f35b3480156103cc57600080fd5b506103e760048036038101906103e291906138f4565b610d9a565b005b3480156103f557600080fd5b50610410600480360381019061040b91906137ee565b610ece565b005b34801561041e57600080fd5b50610427610f2e565b60405161043491906143d0565b60405180910390f35b34801561044957600080fd5b50610464600480360381019061045f9190613789565b610f34565b005b34801561047257600080fd5b5061048d600480360381019061048891906137ee565b611091565b005b34801561049b57600080fd5b506104a46110b1565b6040516104b191906143d0565b60405180910390f35b3480156104c657600080fd5b506104e160048036038101906104dc9190613a17565b6110b7565b005b3480156104ef57600080fd5b5061050a6004803603810190610505919061399c565b61114d565b005b34801561051857600080fd5b50610533600480360381019061052e9190613a58565b6111e6565b6040516105409190613fac565b60405180910390f35b34801561055557600080fd5b5061055e611298565b60405161056b91906143d0565b60405180910390f35b34801561058057600080fd5b5061058961129e565b604051610596919061402e565b60405180910390f35b3480156105ab57600080fd5b506105c660048036038101906105c19190613789565b61132c565b6040516105d391906143d0565b60405180910390f35b3480156105e857600080fd5b506105f16113e4565b005b3480156105ff57600080fd5b50610608611521565b60405161061591906143d0565b60405180910390f35b61063860048036038101906106339190613a58565b611527565b005b34801561064657600080fd5b5061064f6118e2565b60405161065c9190614013565b60405180910390f35b34801561067157600080fd5b5061067a6118f5565b6040516106879190613fac565b60405180910390f35b34801561069c57600080fd5b506106b760048036038101906106b2919061399c565b61191f565b005b3480156106c557600080fd5b506106ce6119b8565b6040516106db919061402e565b60405180910390f35b3480156106f057600080fd5b5061070b60048036038101906107069190613a58565b611a4a565b005b34801561071957600080fd5b50610734600480360381019061072f9190613789565b611ad0565b6040516107419190614013565b60405180910390f35b34801561075657600080fd5b50610771600480360381019061076c9190613789565b611b2d565b60405161077e91906143d0565b60405180910390f35b34801561079357600080fd5b5061079c611b76565b6040516107a991906143d0565b60405180910390f35b3480156107be57600080fd5b506107d960048036038101906107d491906138b8565b611b7c565b005b3480156107e757600080fd5b5061080260048036038101906107fd9190613a58565b611cfd565b005b34801561081057600080fd5b5061082b6004803603810190610826919061383d565b611d83565b005b34801561083957600080fd5b50610854600480360381019061084f9190613930565b611de5565b005b610870600480360381019061086b9190613a58565b611fe1565b005b34801561087e57600080fd5b5061089960048036038101906108949190613a58565b612257565b6040516108a6919061402e565b60405180910390f35b6108c960048036038101906108c49190613a58565b6123a9565b005b3480156108d757600080fd5b506108e0612637565b6040516108ed91906143d0565b60405180910390f35b34801561090257600080fd5b5061091d600480360381019061091891906137b2565b61263d565b60405161092a9190614013565b60405180910390f35b34801561093f57600080fd5b5061095a60048036038101906109559190613789565b6126d1565b005b61096461287d565b73ffffffffffffffffffffffffffffffffffffffff166109826118f5565b73ffffffffffffffffffffffffffffffffffffffff16146109d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109cf90614270565b60405180910390fd5b80600c8190555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610aad57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610abd5750610abc82612885565b5b9050919050565b606060008054610ad39061473c565b80601f0160208091040260200160405190810160405280929190818152602001828054610aff9061473c565b8015610b4c5780601f10610b2157610100808354040283529160200191610b4c565b820191906000526020600020905b815481529060010190602001808311610b2f57829003601f168201915b5050505050905090565b6000610b61826128ef565b610ba0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9790614250565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610be6826111e6565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4e906142f0565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c7661287d565b73ffffffffffffffffffffffffffffffffffffffff161480610ca55750610ca481610c9f61287d565b61263d565b5b610ce4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cdb90614170565b60405180910390fd5b610cee838361295b565b505050565b610cfb61287d565b73ffffffffffffffffffffffffffffffffffffffff16610d196118f5565b73ffffffffffffffffffffffffffffffffffffffff1614610d6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6690614270565b60405180910390fd5b610d798282612a14565b5050565b6000600854905090565b600f60009054906101000a900460ff1681565b610da261287d565b73ffffffffffffffffffffffffffffffffffffffff16610dc06118f5565b73ffffffffffffffffffffffffffffffffffffffff1614610e16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0d90614270565b60405180910390fd5b6001601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060126000815480929190610ec59061479f565b91905055505050565b610edf610ed961287d565b82612a88565b610f1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1590614310565b60405180910390fd5b610f29838383612b66565b505050565b60095481565b610f3c61287d565b73ffffffffffffffffffffffffffffffffffffffff16610f5a6118f5565b73ffffffffffffffffffffffffffffffffffffffff1614610fb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa790614270565b60405180910390fd5b6009546001600854610fc2919061455f565b1115611003576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffa90614350565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff167fc1c66401eeae5b2a4ff23f6d7784eefe229334268d00c4b0e5e2c44c4ae4fda5600160085461104a919061455f565b600160405161105a9291906143eb565b60405180910390a261108e81600860008154809291906110799061479f565b919050556001611089919061455f565b612dc2565b50565b6110ac83838360405180602001604052806000815250611d83565b505050565b600d5481565b6110bf61287d565b73ffffffffffffffffffffffffffffffffffffffff166110dd6118f5565b73ffffffffffffffffffffffffffffffffffffffff1614611133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112a90614270565b60405180910390fd5b80600e9080519060200190611149929190613481565b5050565b61115561287d565b73ffffffffffffffffffffffffffffffffffffffff166111736118f5565b73ffffffffffffffffffffffffffffffffffffffff16146111c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c090614270565b60405180910390fd5b80600f60016101000a81548160ff02191690831515021790555050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561128f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611286906141b0565b60405180910390fd5b80915050919050565b600a5481565b600e80546112ab9061473c565b80601f01602080910402602001604051908101604052809291908181526020018280546112d79061473c565b80156113245780601f106112f957610100808354040283529160200191611324565b820191906000526020600020905b81548152906001019060200180831161130757829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561139d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139490614190565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113ec61287d565b73ffffffffffffffffffffffffffffffffffffffff1661140a6118f5565b73ffffffffffffffffffffffffffffffffffffffff1614611460576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145790614270565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600c5481565b600d5442101561156c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611563906142b0565b60405180910390fd5b600f60019054906101000a900460ff166115bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b290614390565b60405180910390fd5b60011515601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151461164e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164590614330565b60405180910390fd5b600081601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461169b9190614640565b10156116dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d390614130565b60405180910390fd5b600954816008546116ed919061455f565b111561172e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172590614350565b60405180910390fd5b600b548161173c91906145e6565b341461177d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611774906141f0565b60405180910390fd5b6117856118f5565b73ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f193505050501580156117ca573d6000803e3d6000fd5b5080601160006117d861287d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118219190614640565b9250508190555061183061287d565b73ffffffffffffffffffffffffffffffffffffffff167fc1c66401eeae5b2a4ff23f6d7784eefe229334268d00c4b0e5e2c44c4ae4fda56001600854611876919061455f565b83604051611885929190614414565b60405180910390a260005b818110156118de576118cb6118a361287d565b600860008154809291906118b69061479f565b9190505560016118c6919061455f565b612dc2565b80806118d69061479f565b915050611890565b5050565b600f60019054906101000a900460ff1681565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61192761287d565b73ffffffffffffffffffffffffffffffffffffffff166119456118f5565b73ffffffffffffffffffffffffffffffffffffffff161461199b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199290614270565b60405180910390fd5b80600f60006101000a81548160ff02191690831515021790555050565b6060600180546119c79061473c565b80601f01602080910402602001604051908101604052809291908181526020018280546119f39061473c565b8015611a405780601f10611a1557610100808354040283529160200191611a40565b820191906000526020600020905b815481529060010190602001808311611a2357829003601f168201915b5050505050905090565b611a5261287d565b73ffffffffffffffffffffffffffffffffffffffff16611a706118f5565b73ffffffffffffffffffffffffffffffffffffffff1614611ac6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611abd90614270565b60405180910390fd5b80600d8190555050565b600060011515601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515149050919050565b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600b5481565b611b8461287d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be990614110565b60405180910390fd5b8060056000611bff61287d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611cac61287d565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611cf19190614013565b60405180910390a35050565b611d0561287d565b73ffffffffffffffffffffffffffffffffffffffff16611d236118f5565b73ffffffffffffffffffffffffffffffffffffffff1614611d79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7090614270565b60405180910390fd5b80600b8190555050565b611d94611d8e61287d565b83612a88565b611dd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dca90614310565b60405180910390fd5b611ddf84848484612f90565b50505050565b611ded61287d565b73ffffffffffffffffffffffffffffffffffffffff16611e0b6118f5565b73ffffffffffffffffffffffffffffffffffffffff1614611e61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5890614270565b60405180910390fd5b60005b8251811015611fdc57600160106000858481518110611eac577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550818181518110611f3e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015160116000858481518110611f83577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508080611fd49061479f565b915050611e64565b505050565b611fe961287d565b73ffffffffffffffffffffffffffffffffffffffff166120076118f5565b73ffffffffffffffffffffffffffffffffffffffff161461205d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205490614270565b60405180910390fd5b60008111801561206f5750600a548111155b6120ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a5906140d0565b60405180910390fd5b600954816008546120bf919061455f565b1115612100576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f790614050565b60405180910390fd5b600b548161210e91906145e6565b341461214f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612146906143b0565b60405180910390fd5b6121576118f5565b73ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f1935050505015801561219c573d6000803e3d6000fd5b506121a561287d565b73ffffffffffffffffffffffffffffffffffffffff167fc1c66401eeae5b2a4ff23f6d7784eefe229334268d00c4b0e5e2c44c4ae4fda560016008546121eb919061455f565b836040516121fa929190614414565b60405180910390a260005b818110156122535761224061221861287d565b6008600081548092919061222b9061479f565b91905055600161223b919061455f565b612dc2565b808061224b9061479f565b915050612205565b5050565b6060612262826128ef565b6122a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229890614230565b60405180910390fd5b60006006600084815260200190815260200160002080546122c19061473c565b80601f01602080910402602001604051908101604052809291908181526020018280546122ed9061473c565b801561233a5780601f1061230f5761010080835404028352916020019161233a565b820191906000526020600020905b81548152906001019060200180831161231d57829003601f168201915b50505050509050600061234b612fec565b90506000815114156123615781925050506123a4565b60008251111561239657808260405160200161237e929190613f88565b604051602081830303815290604052925050506123a4565b61239f8461307e565b925050505b919050565b600c544210156123ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e5906142b0565b60405180910390fd5b600f60009054906101000a900460ff1661243d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243490614370565b60405180910390fd5b60008111801561244f5750600a548111155b61248e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612485906140d0565b60405180910390fd5b6009548160085461249f919061455f565b11156124e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d790614050565b60405180910390fd5b600b54816124ee91906145e6565b341461252f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612526906143b0565b60405180910390fd5b6125376118f5565b73ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f1935050505015801561257c573d6000803e3d6000fd5b5061258561287d565b73ffffffffffffffffffffffffffffffffffffffff167fc1c66401eeae5b2a4ff23f6d7784eefe229334268d00c4b0e5e2c44c4ae4fda560016008546125cb919061455f565b836040516125da929190614414565b60405180910390a260005b81811015612633576126206125f861287d565b6008600081548092919061260b9061479f565b91905055600161261b919061455f565b612dc2565b808061262b9061479f565b9150506125e5565b5050565b60085481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6126d961287d565b73ffffffffffffffffffffffffffffffffffffffff166126f76118f5565b73ffffffffffffffffffffffffffffffffffffffff161461274d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274490614270565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156127bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b490614090565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166129ce836111e6565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b612a1d826128ef565b612a5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a53906141d0565b60405180910390fd5b80600660008481526020019081526020016000209080519060200190612a83929190613481565b505050565b6000612a93826128ef565b612ad2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ac990614150565b60405180910390fd5b6000612add836111e6565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612b4c57508373ffffffffffffffffffffffffffffffffffffffff16612b3484610b56565b73ffffffffffffffffffffffffffffffffffffffff16145b80612b5d5750612b5c818561263d565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612b86826111e6565b73ffffffffffffffffffffffffffffffffffffffff1614612bdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd390614290565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c43906140f0565b60405180910390fd5b612c57838383613125565b612c6260008261295b565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612cb29190614640565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612d09919061455f565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e2990614210565b60405180910390fd5b612e3b816128ef565b15612e7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e72906140b0565b60405180910390fd5b612e8760008383613125565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ed7919061455f565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b612f9b848484612b66565b612fa78484848461312a565b612fe6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fdd90614070565b60405180910390fd5b50505050565b6060600e8054612ffb9061473c565b80601f01602080910402602001604051908101604052809291908181526020018280546130279061473c565b80156130745780601f1061304957610100808354040283529160200191613074565b820191906000526020600020905b81548152906001019060200180831161305757829003601f168201915b5050505050905090565b6060613089826128ef565b6130c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130bf906142d0565b60405180910390fd5b60006130d2612fec565b905060008151116130f2576040518060200160405280600081525061311d565b806130fc846132c1565b60405160200161310d929190613f88565b6040516020818303038152906040525b915050919050565b505050565b600061314b8473ffffffffffffffffffffffffffffffffffffffff1661346e565b156132b4578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261317461287d565b8786866040518563ffffffff1660e01b81526004016131969493929190613fc7565b602060405180830381600087803b1580156131b057600080fd5b505af19250505080156131e157506040513d601f19601f820116820180604052508101906131de91906139ee565b60015b613264573d8060008114613211576040519150601f19603f3d011682016040523d82523d6000602084013e613216565b606091505b5060008151141561325c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161325390614070565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506132b9565b600190505b949350505050565b60606000821415613309576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613469565b600082905060005b6000821461333b5780806133249061479f565b915050600a8261333491906145b5565b9150613311565b60008167ffffffffffffffff81111561337d577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156133af5781602001600182028036833780820191505090505b5090505b60008514613462576001826133c89190614640565b9150600a856133d791906147e8565b60306133e3919061455f565b60f81b81838151811061341f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561345b91906145b5565b94506133b3565b8093505050505b919050565b600080823b905060008111915050919050565b82805461348d9061473c565b90600052602060002090601f0160209004810192826134af57600085556134f6565b82601f106134c857805160ff19168380011785556134f6565b828001600101855582156134f6579182015b828111156134f55782518255916020019190600101906134da565b5b5090506135039190613507565b5090565b5b80821115613520576000816000905550600101613508565b5090565b600061353761353284614462565b61443d565b9050808382526020820190508285602086028201111561355657600080fd5b60005b85811015613586578161356c8882613678565b845260208401935060208301925050600181019050613559565b5050509392505050565b60006135a361359e8461448e565b61443d565b905080838252602082019050828560208602820111156135c257600080fd5b60005b858110156135f257816135d88882613774565b8452602084019350602083019250506001810190506135c5565b5050509392505050565b600061360f61360a846144ba565b61443d565b90508281526020810184848401111561362757600080fd5b6136328482856146fa565b509392505050565b600061364d613648846144eb565b61443d565b90508281526020810184848401111561366557600080fd5b6136708482856146fa565b509392505050565b60008135905061368781614f9c565b92915050565b600082601f83011261369e57600080fd5b81356136ae848260208601613524565b91505092915050565b600082601f8301126136c857600080fd5b81356136d8848260208601613590565b91505092915050565b6000813590506136f081614fb3565b92915050565b60008135905061370581614fca565b92915050565b60008151905061371a81614fca565b92915050565b600082601f83011261373157600080fd5b81356137418482602086016135fc565b91505092915050565b600082601f83011261375b57600080fd5b813561376b84826020860161363a565b91505092915050565b60008135905061378381614fe1565b92915050565b60006020828403121561379b57600080fd5b60006137a984828501613678565b91505092915050565b600080604083850312156137c557600080fd5b60006137d385828601613678565b92505060206137e485828601613678565b9150509250929050565b60008060006060848603121561380357600080fd5b600061381186828701613678565b935050602061382286828701613678565b925050604061383386828701613774565b9150509250925092565b6000806000806080858703121561385357600080fd5b600061386187828801613678565b945050602061387287828801613678565b935050604061388387828801613774565b925050606085013567ffffffffffffffff8111156138a057600080fd5b6138ac87828801613720565b91505092959194509250565b600080604083850312156138cb57600080fd5b60006138d985828601613678565b92505060206138ea858286016136e1565b9150509250929050565b6000806040838503121561390757600080fd5b600061391585828601613678565b925050602061392685828601613774565b9150509250929050565b6000806040838503121561394357600080fd5b600083013567ffffffffffffffff81111561395d57600080fd5b6139698582860161368d565b925050602083013567ffffffffffffffff81111561398657600080fd5b613992858286016136b7565b9150509250929050565b6000602082840312156139ae57600080fd5b60006139bc848285016136e1565b91505092915050565b6000602082840312156139d757600080fd5b60006139e5848285016136f6565b91505092915050565b600060208284031215613a0057600080fd5b6000613a0e8482850161370b565b91505092915050565b600060208284031215613a2957600080fd5b600082013567ffffffffffffffff811115613a4357600080fd5b613a4f8482850161374a565b91505092915050565b600060208284031215613a6a57600080fd5b6000613a7884828501613774565b91505092915050565b60008060408385031215613a9457600080fd5b6000613aa285828601613774565b925050602083013567ffffffffffffffff811115613abf57600080fd5b613acb8582860161374a565b9150509250929050565b613ade81614674565b82525050565b613aed81614686565b82525050565b6000613afe8261451c565b613b088185614532565b9350613b18818560208601614709565b613b21816148d5565b840191505092915050565b613b35816146e8565b82525050565b6000613b4682614527565b613b508185614543565b9350613b60818560208601614709565b613b69816148d5565b840191505092915050565b6000613b7f82614527565b613b898185614554565b9350613b99818560208601614709565b80840191505092915050565b6000613bb2600883614543565b9150613bbd826148e6565b602082019050919050565b6000613bd5603283614543565b9150613be08261490f565b604082019050919050565b6000613bf8602683614543565b9150613c038261495e565b604082019050919050565b6000613c1b601c83614543565b9150613c26826149ad565b602082019050919050565b6000613c3e601183614543565b9150613c49826149d6565b602082019050919050565b6000613c61602483614543565b9150613c6c826149ff565b604082019050919050565b6000613c84601983614543565b9150613c8f82614a4e565b602082019050919050565b6000613ca7601c83614543565b9150613cb282614a77565b602082019050919050565b6000613cca602c83614543565b9150613cd582614aa0565b604082019050919050565b6000613ced603883614543565b9150613cf882614aef565b604082019050919050565b6000613d10602a83614543565b9150613d1b82614b3e565b604082019050919050565b6000613d33602983614543565b9150613d3e82614b8d565b604082019050919050565b6000613d56602e83614543565b9150613d6182614bdc565b604082019050919050565b6000613d79601c83614543565b9150613d8482614c2b565b602082019050919050565b6000613d9c602083614543565b9150613da782614c54565b602082019050919050565b6000613dbf603183614543565b9150613dca82614c7d565b604082019050919050565b6000613de2602c83614543565b9150613ded82614ccc565b604082019050919050565b6000613e05602083614543565b9150613e1082614d1b565b602082019050919050565b6000613e28602983614543565b9150613e3382614d44565b604082019050919050565b6000613e4b600a83614543565b9150613e5682614d93565b602082019050919050565b6000613e6e602f83614543565b9150613e7982614dbc565b604082019050919050565b6000613e91602183614543565b9150613e9c82614e0b565b604082019050919050565b6000613eb4603183614543565b9150613ebf82614e5a565b604082019050919050565b6000613ed7601083614543565b9150613ee282614ea9565b602082019050919050565b6000613efa603083614543565b9150613f0582614ed2565b604082019050919050565b6000613f1d600b83614543565b9150613f2882614f21565b602082019050919050565b6000613f40601f83614543565b9150613f4b82614f4a565b602082019050919050565b6000613f63600b83614543565b9150613f6e82614f73565b602082019050919050565b613f82816146de565b82525050565b6000613f948285613b74565b9150613fa08284613b74565b91508190509392505050565b6000602082019050613fc16000830184613ad5565b92915050565b6000608082019050613fdc6000830187613ad5565b613fe96020830186613ad5565b613ff66040830185613f79565b81810360608301526140088184613af3565b905095945050505050565b60006020820190506140286000830184613ae4565b92915050565b600060208201905081810360008301526140488184613b3b565b905092915050565b6000602082019050818103600083015261406981613ba5565b9050919050565b6000602082019050818103600083015261408981613bc8565b9050919050565b600060208201905081810360008301526140a981613beb565b9050919050565b600060208201905081810360008301526140c981613c0e565b9050919050565b600060208201905081810360008301526140e981613c31565b9050919050565b6000602082019050818103600083015261410981613c54565b9050919050565b6000602082019050818103600083015261412981613c77565b9050919050565b6000602082019050818103600083015261414981613c9a565b9050919050565b6000602082019050818103600083015261416981613cbd565b9050919050565b6000602082019050818103600083015261418981613ce0565b9050919050565b600060208201905081810360008301526141a981613d03565b9050919050565b600060208201905081810360008301526141c981613d26565b9050919050565b600060208201905081810360008301526141e981613d49565b9050919050565b6000602082019050818103600083015261420981613d6c565b9050919050565b6000602082019050818103600083015261422981613d8f565b9050919050565b6000602082019050818103600083015261424981613db2565b9050919050565b6000602082019050818103600083015261426981613dd5565b9050919050565b6000602082019050818103600083015261428981613df8565b9050919050565b600060208201905081810360008301526142a981613e1b565b9050919050565b600060208201905081810360008301526142c981613e3e565b9050919050565b600060208201905081810360008301526142e981613e61565b9050919050565b6000602082019050818103600083015261430981613e84565b9050919050565b6000602082019050818103600083015261432981613ea7565b9050919050565b6000602082019050818103600083015261434981613eca565b9050919050565b6000602082019050818103600083015261436981613eed565b9050919050565b6000602082019050818103600083015261438981613f10565b9050919050565b600060208201905081810360008301526143a981613f33565b9050919050565b600060208201905081810360008301526143c981613f56565b9050919050565b60006020820190506143e56000830184613f79565b92915050565b60006040820190506144006000830185613f79565b61440d6020830184613b2c565b9392505050565b60006040820190506144296000830185613f79565b6144366020830184613f79565b9392505050565b6000614447614458565b9050614453828261476e565b919050565b6000604051905090565b600067ffffffffffffffff82111561447d5761447c6148a6565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156144a9576144a86148a6565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156144d5576144d46148a6565b5b6144de826148d5565b9050602081019050919050565b600067ffffffffffffffff821115614506576145056148a6565b5b61450f826148d5565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061456a826146de565b9150614575836146de565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156145aa576145a9614819565b5b828201905092915050565b60006145c0826146de565b91506145cb836146de565b9250826145db576145da614848565b5b828204905092915050565b60006145f1826146de565b91506145fc836146de565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561463557614634614819565b5b828202905092915050565b600061464b826146de565b9150614656836146de565b92508282101561466957614668614819565b5b828203905092915050565b600061467f826146be565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006146f3826146de565b9050919050565b82818337600083830152505050565b60005b8381101561472757808201518184015260208101905061470c565b83811115614736576000848401525b50505050565b6000600282049050600182168061475457607f821691505b6020821081141561476857614767614877565b5b50919050565b614777826148d5565b810181811067ffffffffffffffff82111715614796576147956148a6565b5b80604052505050565b60006147aa826146de565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156147dd576147dc614819565b5b600182019050919050565b60006147f3826146de565b91506147fe836146de565b92508261480e5761480d614848565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f746f6f206d756368000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f6d696e742077726f6e67206e756d626572000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4f766572206d696e74206c696d697420666f7220616464726573732e00000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60008201527f6578697374656e7420746f6b656e000000000000000000000000000000000000602082015250565b7f496e636f7272656374207472616e73616374696f6e2076616c75652e00000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f5761697420627564647900000000000000000000000000000000000000000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4e6f742077686974656c69737465642e00000000000000000000000000000000600082015250565b7f4d696e7420616d6f756e742077696c6c2065786365656420746f74616c20636f60008201527f6c6c656374696f6e20616d6f756e742e00000000000000000000000000000000602082015250565b7f6e6f742073746172746564000000000000000000000000000000000000000000600082015250565b7f48616e67206f6e20626f79732c20796f756c6c2067657420696e20736f6f6e00600082015250565b7f76616c7565206572726f72000000000000000000000000000000000000000000600082015250565b614fa581614674565b8114614fb057600080fd5b50565b614fbc81614686565b8114614fc757600080fd5b50565b614fd381614692565b8114614fde57600080fd5b50565b614fea816146de565b8114614ff557600080fd5b5056fea264697066735822122050c3cb52042f65bfe263e2ec9f58bd94b1f7253da530003723db24e02929240164736f6c63430008040033

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

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000b5361707079205365616c73000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000453415053000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : name_ (string): Sappy Seals
Arg [1] : symbol_ (string): SAPS
Arg [2] : baseURI_ (string):

-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 000000000000000000000000000000000000000000000000000000000000000b
Arg [4] : 5361707079205365616c73000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [6] : 5341505300000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

36744:5024:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38448:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20636:292;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21571:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23039:222;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22573:399;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38677:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38016:97;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37253:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41088:203;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23934:306;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36927:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40811:258;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24312:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37146:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38238:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38920:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21264:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36979:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37225:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20993:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36148:148;;;;;;;;;;;;;:::i;:::-;;37086:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40170:623;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37279:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35495:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38819:89;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21741:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38559:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41626:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39031:136;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37027:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23334:296;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38343:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24535:285;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41303:273;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39671:481;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32905:682;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39176:482;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36895:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23702:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36452:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38448:99;35727:12;:10;:12::i;:::-;35716:23;;:7;:5;:7::i;:::-;:23;;;35708:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38532:7:::1;38518:11;:21;;;;38448:99:::0;:::o;20636:292::-;20738:4;20777:25;20762:40;;;:11;:40;;;;:105;;;;20834:33;20819:48;;;:11;:48;;;;20762:105;:158;;;;20884:36;20908:11;20884:23;:36::i;:::-;20762:158;20755:165;;20636:292;;;:::o;21571:100::-;21625:13;21658:5;21651:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21571:100;:::o;23039:222::-;23115:7;23143:16;23151:7;23143;:16::i;:::-;23135:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23229:15;:24;23245:7;23229:24;;;;;;;;;;;;;;;;;;;;;23222:31;;23039:222;;;:::o;22573:399::-;22654:13;22670:23;22685:7;22670:14;:23::i;:::-;22654:39;;22718:5;22712:11;;:2;:11;;;;22704:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;22799:5;22783:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;22808:37;22825:5;22832:12;:10;:12::i;:::-;22808:16;:37::i;:::-;22783:62;22775:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;22943:21;22952:2;22956:7;22943:8;:21::i;:::-;22573:399;;;:::o;38677:133::-;35727:12;:10;:12::i;:::-;35716:23;;:7;:5;:7::i;:::-;:23;;;35708:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38769:33:::1;38782:8;38792:9;38769:12;:33::i;:::-;38677:133:::0;;:::o;38016:97::-;38068:7;38095:10;;38088:17;;38016:97;:::o;37253:19::-;;;;;;;;;;;;;:::o;41088:203::-;35727:12;:10;:12::i;:::-;35716:23;;:7;:5;:7::i;:::-;:23;;;35708:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41194:4:::1;41175:9;:16;41185:5;41175:16;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;41237:13;41209:18;:25;41228:5;41209:25;;;;;;;;;;;;;;;:41;;;;41261:20;;:22;;;;;;;;;:::i;:::-;;;;;;41088:203:::0;;:::o;23934:306::-;24095:41;24114:12;:10;:12::i;:::-;24128:7;24095:18;:41::i;:::-;24087:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24204:28;24214:4;24220:2;24224:7;24204:9;:28::i;:::-;23934:306;;;:::o;36927:33::-;;;;:::o;40811:258::-;35727:12;:10;:12::i;:::-;35716:23;;:7;:5;:7::i;:::-;:23;;;35708:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40908:10:::1;;40903:1;40890:10;;:14;;;;:::i;:::-;:28;;40882:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;40997:5;40987:33;;;41015:1;41004:10;;:12;;;;:::i;:::-;41018:1;40987:33;;;;;;;:::i;:::-;;;;;;;;41031:30;41037:5;41048:10;;:12;;;;;;;;;:::i;:::-;;;;;41044:1;:16;;;;:::i;:::-;41031:5;:30::i;:::-;40811:258:::0;:::o;24312:151::-;24416:39;24433:4;24439:2;24443:7;24416:39;;;;;;;;;;;;:16;:39::i;:::-;24312:151;;;:::o;37146:42::-;;;;:::o;38238:96::-;35727:12;:10;:12::i;:::-;35716:23;;:7;:5;:7::i;:::-;:23;;;35708:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38319:7:::1;38309;:17;;;;;;;;;;;;:::i;:::-;;38238:96:::0;:::o;38920:99::-;35727:12;:10;:12::i;:::-;35716:23;;:7;:5;:7::i;:::-;:23;;;35708:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39005:6:::1;38988:14;;:23;;;;;;;;;;;;;;;;;;38920:99:::0;:::o;21264:239::-;21336:7;21356:13;21372:7;:16;21380:7;21372:16;;;;;;;;;;;;;;;;;;;;;21356:32;;21424:1;21407:19;;:5;:19;;;;21399:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;21490:5;21483:12;;;21264:239;;;:::o;36979:28::-;;;;:::o;37225:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;20993:208::-;21065:7;21110:1;21093:19;;:5;:19;;;;21085:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;21177:9;:16;21187:5;21177:16;;;;;;;;;;;;;;;;21170:23;;20993:208;;;:::o;36148:148::-;35727:12;:10;:12::i;:::-;35716:23;;:7;:5;:7::i;:::-;:23;;;35708:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36255:1:::1;36218:40;;36239:6;;;;;;;;;;;36218:40;;;;;;;;;;;;36286:1;36269:6;;:19;;;;;;;;;;;;;;;;;;36148:148::o:0;37086:39::-;;;;:::o;40170:623::-;37662:14;;37643:15;:33;;37635:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;37710:14;;;;;;;;;;;37702:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;37804:4;37779:29;;:9;:21;37789:10;37779:21;;;;;;;;;;;;;;;;;;;;;;;;;:29;;;37771:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;40300:1:::1;40290:6;40257:18;:30;40276:10;40257:30;;;;;;;;;;;;;;;;:39;;;;:::i;:::-;:44;;40249:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;40376:10;;40366:6;40353:10;;:19;;;;:::i;:::-;:33;;40345:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;40480:5;;40471:6;:14;;;;:::i;:::-;40458:9;:27;40450:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40537:7;:5;:7::i;:::-;40529:25;;:36;40555:9;40529:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;40612:6;40576:18;:32;40595:12;:10;:12::i;:::-;40576:32;;;;;;;;;;;;;;;;:42;;;;;;;:::i;:::-;;;;;;;;40644:12;:10;:12::i;:::-;40634:45;;;40669:1;40658:10;;:12;;;;:::i;:::-;40672:6;40634:45;;;;;;;:::i;:::-;;;;;;;;40694:9;40690:96;40710:6;40707:1;:9;40690:96;;;40737:37;40743:12;:10;:12::i;:::-;40761:10;;:12;;;;;;;;;:::i;:::-;;;;;40757:1;:16;;;;:::i;:::-;40737:5;:37::i;:::-;40718:3;;;;;:::i;:::-;;;;40690:96;;;;40170:623:::0;:::o;37279:26::-;;;;;;;;;;;;;:::o;35495:87::-;35541:7;35568:6;;;;;;;;;;;35561:13;;35495:87;:::o;38819:89::-;35727:12;:10;:12::i;:::-;35716:23;;:7;:5;:7::i;:::-;:23;;;35708:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38894:6:::1;38884:7;;:16;;;;;;;;;;;;;;;;;;38819:89:::0;:::o;21741:104::-;21797:13;21830:7;21823:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21741:104;:::o;38559:109::-;35727:12;:10;:12::i;:::-;35716:23;;:7;:5;:7::i;:::-;:23;;;35708:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38653:7:::1;38636:14;:24;;;;38559:109:::0;:::o;41626:133::-;41699:4;41747;41727:24;;:9;:16;41737:5;41727:16;;;;;;;;;;;;;;;;;;;;;;;;;:24;;;41720:31;;41626:133;;;:::o;39031:136::-;39107:7;39134:18;:25;39153:5;39134:25;;;;;;;;;;;;;;;;39127:32;;39031:136;;;:::o;37027:40::-;;;;:::o;23334:296::-;23449:12;:10;:12::i;:::-;23437:24;;:8;:24;;;;23429:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;23550:8;23505:18;:32;23524:12;:10;:12::i;:::-;23505:32;;;;;;;;;;;;;;;:42;23538:8;23505:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;23603:8;23574:48;;23589:12;:10;:12::i;:::-;23574:48;;;23613:8;23574:48;;;;;;:::i;:::-;;;;;;;;23334:296;;:::o;38343:93::-;35727:12;:10;:12::i;:::-;35716:23;;:7;:5;:7::i;:::-;:23;;;35708:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38419:9:::1;38411:5;:17;;;;38343:93:::0;:::o;24535:285::-;24667:41;24686:12;:10;:12::i;:::-;24700:7;24667:18;:41::i;:::-;24659:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24773:39;24787:4;24793:2;24797:7;24806:5;24773:13;:39::i;:::-;24535:285;;;;:::o;41303:273::-;35727:12;:10;:12::i;:::-;35716:23;;:7;:5;:7::i;:::-;:23;;;35708:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41416:9:::1;41412:157;41435:5;:12;41431:1;:16;41412:157;;;41490:4;41468:9;:19;41478:5;41484:1;41478:8;;;;;;;;;;;;;;;;;;;;;;41468:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;41540:14;41555:1;41540:17;;;;;;;;;;;;;;;;;;;;;;41509:18;:28;41528:5;41534:1;41528:8;;;;;;;;;;;;;;;;;;;;;;41509:28;;;;;;;;;;;;;;;:48;;;;41449:3;;;;;:::i;:::-;;;;41412:157;;;;41303:273:::0;;:::o;39671:481::-;35727:12;:10;:12::i;:::-;35716:23;;:7;:5;:7::i;:::-;:23;;;35708:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39758:1:::1;39750:6;:9;:31;;;;;39773:8;;39763:6;:18;;39750:31;39742:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;39845:10;;39835:6;39822:10;;:19;;;;:::i;:::-;:33;;39814:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;39909:5;;39900:6;:14;;;;:::i;:::-;39887:9;:27;39879:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;39949:7;:5;:7::i;:::-;39941:25;;:36;39967:9;39941:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;40003:12;:10;:12::i;:::-;39993:45;;;40028:1;40017:10;;:12;;;;:::i;:::-;40031:6;39993:45;;;;;;;:::i;:::-;;;;;;;;40053:9;40049:96;40069:6;40066:1;:9;40049:96;;;40096:37;40102:12;:10;:12::i;:::-;40120:10;;:12;;;;;;;;;:::i;:::-;;;;;40116:1;:16;;;;:::i;:::-;40096:5;:37::i;:::-;40077:3;;;;;:::i;:::-;;;;40049:96;;;;39671:481:::0;:::o;32905:682::-;32978:13;33012:16;33020:7;33012;:16::i;:::-;33004:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;33096:23;33122:10;:19;33133:7;33122:19;;;;;;;;;;;33096:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33152:18;33173:10;:8;:10::i;:::-;33152:31;;33282:1;33266:4;33260:18;:23;33256:72;;;33307:9;33300:16;;;;;;33256:72;33458:1;33438:9;33432:23;:27;33428:108;;;33507:4;33513:9;33490:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;33476:48;;;;;;33428:108;33556:23;33571:7;33556:14;:23::i;:::-;33549:30;;;;32905:682;;;;:::o;39176:482::-;37919:11;;37900:15;:30;;37892:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;37964:7;;;;;;;;;;;37956:31;;;;;;;;;;;;:::i;:::-;;;;;;;;;39264:1:::1;39256:6;:9;:31;;;;;39279:8;;39269:6;:18;;39256:31;39248:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;39351:10;;39341:6;39328:10;;:19;;;;:::i;:::-;:33;;39320:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;39415:5;;39406:6;:14;;;;:::i;:::-;39393:9;:27;39385:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;39455:7;:5;:7::i;:::-;39447:25;;:36;39473:9;39447:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;39509:12;:10;:12::i;:::-;39499:45;;;39534:1;39523:10;;:12;;;;:::i;:::-;39537:6;39499:45;;;;;;;:::i;:::-;;;;;;;;39559:9;39555:96;39575:6;39572:1;:9;39555:96;;;39602:37;39608:12;:10;:12::i;:::-;39626:10;;:12;;;;;;;;;:::i;:::-;;;;;39622:1;:16;;;;:::i;:::-;39602:5;:37::i;:::-;39583:3;;;;;:::i;:::-;;;;39555:96;;;;39176:482:::0;:::o;36895:25::-;;;;:::o;23702:164::-;23799:4;23823:18;:25;23842:5;23823:25;;;;;;;;;;;;;;;:35;23849:8;23823:35;;;;;;;;;;;;;;;;;;;;;;;;;23816:42;;23702:164;;;;:::o;36452:244::-;35727:12;:10;:12::i;:::-;35716:23;;:7;:5;:7::i;:::-;:23;;;35708:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36561:1:::1;36541:22;;:8;:22;;;;36533:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;36651:8;36622:38;;36643:6;;;;;;;;;;;36622:38;;;;;;;;;;;;36680:8;36671:6;;:17;;;;;;;;;;;;;;;;;;36452:244:::0;:::o;15929:98::-;15982:7;16009:10;16002:17;;15929:98;:::o;19129:157::-;19214:4;19253:25;19238:40;;;:11;:40;;;;19231:47;;19129:157;;;:::o;26289:127::-;26354:4;26406:1;26378:30;;:7;:16;26386:7;26378:16;;;;;;;;;;;;;;;;;;;;;:30;;;;26371:37;;26289:127;;;:::o;30184:174::-;30286:2;30259:15;:24;30275:7;30259:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;30342:7;30338:2;30304:46;;30313:23;30328:7;30313:14;:23::i;:::-;30304:46;;;;;;;;;;;;30184:174;;:::o;33744:217::-;33844:16;33852:7;33844;:16::i;:::-;33836:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;33944:9;33922:10;:19;33933:7;33922:19;;;;;;;;;;;:31;;;;;;;;;;;;:::i;:::-;;33744:217;;:::o;26584:348::-;26677:4;26702:16;26710:7;26702;:16::i;:::-;26694:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26778:13;26794:23;26809:7;26794:14;:23::i;:::-;26778:39;;26847:5;26836:16;;:7;:16;;;:51;;;;26880:7;26856:31;;:20;26868:7;26856:11;:20::i;:::-;:31;;;26836:51;:87;;;;26891:32;26908:5;26915:7;26891:16;:32::i;:::-;26836:87;26828:96;;;26584:348;;;;:::o;29517:548::-;29642:4;29615:31;;:23;29630:7;29615:14;:23::i;:::-;:31;;;29607:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;29725:1;29711:16;;:2;:16;;;;29703:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;29782:39;29803:4;29809:2;29813:7;29782:20;:39::i;:::-;29887:29;29904:1;29908:7;29887:8;:29::i;:::-;29949:1;29930:9;:15;29940:4;29930:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;29978:1;29961:9;:13;29971:2;29961:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30009:2;29990:7;:16;29998:7;29990:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30049:7;30045:2;30030:27;;30039:4;30030:27;;;;;;;;;;;;29517:548;;;:::o;28200:385::-;28294:1;28280:16;;:2;:16;;;;28272:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;28353:16;28361:7;28353;:16::i;:::-;28352:17;28344:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;28416:45;28445:1;28449:2;28453:7;28416:20;:45::i;:::-;28492:1;28475:9;:13;28485:2;28475:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;28523:2;28504:7;:16;28512:7;28504:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;28569:7;28565:2;28544:33;;28561:1;28544:33;;;;;;;;;;;;28200:385;;:::o;25703:272::-;25817:28;25827:4;25833:2;25837:7;25817:9;:28::i;:::-;25864:48;25887:4;25893:2;25897:7;25906:5;25864:22;:48::i;:::-;25856:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;25703:272;;;;:::o;38122:107::-;38182:13;38214:7;38207:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38122:107;:::o;21917:361::-;21990:13;22024:16;22032:7;22024;:16::i;:::-;22016:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;22106:21;22130:10;:8;:10::i;:::-;22106:34;;22182:1;22164:7;22158:21;:25;:112;;;;;;;;;;;;;;;;;22223:7;22232:18;:7;:16;:18::i;:::-;22206:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;22158:112;22151:119;;;21917:361;;;:::o;32381:93::-;;;;:::o;30924:843::-;31045:4;31071:15;:2;:13;;;:15::i;:::-;31067:693;;;31123:2;31107:36;;;31144:12;:10;:12::i;:::-;31158:4;31164:7;31173:5;31107:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;31103:602;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31370:1;31353:6;:13;:18;31349:341;;;31396:60;;;;;;;;;;:::i;:::-;;;;;;;;31349:341;31640:6;31634:13;31625:6;31621:2;31617:15;31610:38;31103:602;31240:45;;;31230:55;;;:6;:55;;;;31223:62;;;;;31067:693;31744:4;31737:11;;30924:843;;;;;;;:::o;16579:724::-;16635:13;16866:1;16857:5;:10;16853:53;;;16884:10;;;;;;;;;;;;;;;;;;;;;16853:53;16916:12;16931:5;16916:20;;16947:14;16972:78;16987:1;16979:4;:9;16972:78;;17005:8;;;;;:::i;:::-;;;;17036:2;17028:10;;;;;:::i;:::-;;;16972:78;;;17060:19;17092:6;17082:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17060:39;;17110:154;17126:1;17117:5;:10;17110:154;;17154:1;17144:11;;;;;:::i;:::-;;;17221:2;17213:5;:10;;;;:::i;:::-;17200:2;:24;;;;:::i;:::-;17187:39;;17170:6;17177;17170:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;17250:2;17241:11;;;;;:::i;:::-;;;17110:154;;;17288:6;17274:21;;;;;16579:724;;;;:::o;8037:423::-;8097:4;8306:12;8417:7;8405:20;8397:28;;8451:1;8444:4;:8;8437:15;;;8037:423;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:655:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:2;;;414:1;411;404:12;350:2;450:1;435:238;460:6;457:1;454:13;435:238;;;528:3;557:37;590:3;578:10;557:37;:::i;:::-;552:3;545:50;624:4;619:3;615:14;608:21;;658:4;653:3;649:14;642:21;;495:178;482:1;479;475:9;470:14;;435:238;;;439:14;126:553;;;;;;;:::o;702:655::-;798:5;823:81;839:64;896:6;839:64;:::i;:::-;823:81;:::i;:::-;814:90;;924:5;953:6;946:5;939:21;987:4;980:5;976:16;969:23;;1013:6;1063:3;1055:4;1047:6;1043:17;1038:3;1034:27;1031:36;1028:2;;;1092:1;1089;1082:12;1028:2;1128:1;1113:238;1138:6;1135:1;1132:13;1113:238;;;1206:3;1235:37;1268:3;1256:10;1235:37;:::i;:::-;1230:3;1223:50;1302:4;1297:3;1293:14;1286:21;;1336:4;1331:3;1327:14;1320:21;;1173:178;1160:1;1157;1153:9;1148:14;;1113:238;;;1117:14;804:553;;;;;;;:::o;1363:343::-;1440:5;1465:65;1481:48;1522:6;1481:48;:::i;:::-;1465:65;:::i;:::-;1456:74;;1553:6;1546:5;1539:21;1591:4;1584:5;1580:16;1629:3;1620:6;1615:3;1611:16;1608:25;1605:2;;;1646:1;1643;1636:12;1605:2;1659:41;1693:6;1688:3;1683;1659:41;:::i;:::-;1446:260;;;;;;:::o;1712:345::-;1790:5;1815:66;1831:49;1873:6;1831:49;:::i;:::-;1815:66;:::i;:::-;1806:75;;1904:6;1897:5;1890:21;1942:4;1935:5;1931:16;1980:3;1971:6;1966:3;1962:16;1959:25;1956:2;;;1997:1;1994;1987:12;1956:2;2010:41;2044:6;2039:3;2034;2010:41;:::i;:::-;1796:261;;;;;;:::o;2063:139::-;2109:5;2147:6;2134:20;2125:29;;2163:33;2190:5;2163:33;:::i;:::-;2115:87;;;;:::o;2225:303::-;2296:5;2345:3;2338:4;2330:6;2326:17;2322:27;2312:2;;2363:1;2360;2353:12;2312:2;2403:6;2390:20;2428:94;2518:3;2510:6;2503:4;2495:6;2491:17;2428:94;:::i;:::-;2419:103;;2302:226;;;;;:::o;2551:303::-;2622:5;2671:3;2664:4;2656:6;2652:17;2648:27;2638:2;;2689:1;2686;2679:12;2638:2;2729:6;2716:20;2754:94;2844:3;2836:6;2829:4;2821:6;2817:17;2754:94;:::i;:::-;2745:103;;2628:226;;;;;:::o;2860:133::-;2903:5;2941:6;2928:20;2919:29;;2957:30;2981:5;2957:30;:::i;:::-;2909:84;;;;:::o;2999:137::-;3044:5;3082:6;3069:20;3060:29;;3098:32;3124:5;3098:32;:::i;:::-;3050:86;;;;:::o;3142:141::-;3198:5;3229:6;3223:13;3214:22;;3245:32;3271:5;3245:32;:::i;:::-;3204:79;;;;:::o;3302:271::-;3357:5;3406:3;3399:4;3391:6;3387:17;3383:27;3373:2;;3424:1;3421;3414:12;3373:2;3464:6;3451:20;3489:78;3563:3;3555:6;3548:4;3540:6;3536:17;3489:78;:::i;:::-;3480:87;;3363:210;;;;;:::o;3593:273::-;3649:5;3698:3;3691:4;3683:6;3679:17;3675:27;3665:2;;3716:1;3713;3706:12;3665:2;3756:6;3743:20;3781:79;3856:3;3848:6;3841:4;3833:6;3829:17;3781:79;:::i;:::-;3772:88;;3655:211;;;;;:::o;3872:139::-;3918:5;3956:6;3943:20;3934:29;;3972:33;3999:5;3972:33;:::i;:::-;3924:87;;;;:::o;4017:262::-;4076:6;4125:2;4113:9;4104:7;4100:23;4096:32;4093:2;;;4141:1;4138;4131:12;4093:2;4184:1;4209:53;4254:7;4245:6;4234:9;4230:22;4209:53;:::i;:::-;4199:63;;4155:117;4083:196;;;;:::o;4285:407::-;4353:6;4361;4410:2;4398:9;4389:7;4385:23;4381:32;4378:2;;;4426:1;4423;4416:12;4378:2;4469:1;4494:53;4539:7;4530:6;4519:9;4515:22;4494:53;:::i;:::-;4484:63;;4440:117;4596:2;4622:53;4667:7;4658:6;4647:9;4643:22;4622:53;:::i;:::-;4612:63;;4567:118;4368:324;;;;;:::o;4698:552::-;4775:6;4783;4791;4840:2;4828:9;4819:7;4815:23;4811:32;4808:2;;;4856:1;4853;4846:12;4808:2;4899:1;4924:53;4969:7;4960:6;4949:9;4945:22;4924:53;:::i;:::-;4914:63;;4870:117;5026:2;5052:53;5097:7;5088:6;5077:9;5073:22;5052:53;:::i;:::-;5042:63;;4997:118;5154:2;5180:53;5225:7;5216:6;5205:9;5201:22;5180:53;:::i;:::-;5170:63;;5125:118;4798:452;;;;;:::o;5256:809::-;5351:6;5359;5367;5375;5424:3;5412:9;5403:7;5399:23;5395:33;5392:2;;;5441:1;5438;5431:12;5392:2;5484:1;5509:53;5554:7;5545:6;5534:9;5530:22;5509:53;:::i;:::-;5499:63;;5455:117;5611:2;5637:53;5682:7;5673:6;5662:9;5658:22;5637:53;:::i;:::-;5627:63;;5582:118;5739:2;5765:53;5810:7;5801:6;5790:9;5786:22;5765:53;:::i;:::-;5755:63;;5710:118;5895:2;5884:9;5880:18;5867:32;5926:18;5918:6;5915:30;5912:2;;;5958:1;5955;5948:12;5912:2;5986:62;6040:7;6031:6;6020:9;6016:22;5986:62;:::i;:::-;5976:72;;5838:220;5382:683;;;;;;;:::o;6071:401::-;6136:6;6144;6193:2;6181:9;6172:7;6168:23;6164:32;6161:2;;;6209:1;6206;6199:12;6161:2;6252:1;6277:53;6322:7;6313:6;6302:9;6298:22;6277:53;:::i;:::-;6267:63;;6223:117;6379:2;6405:50;6447:7;6438:6;6427:9;6423:22;6405:50;:::i;:::-;6395:60;;6350:115;6151:321;;;;;:::o;6478:407::-;6546:6;6554;6603:2;6591:9;6582:7;6578:23;6574:32;6571:2;;;6619:1;6616;6609:12;6571:2;6662:1;6687:53;6732:7;6723:6;6712:9;6708:22;6687:53;:::i;:::-;6677:63;;6633:117;6789:2;6815:53;6860:7;6851:6;6840:9;6836:22;6815:53;:::i;:::-;6805:63;;6760:118;6561:324;;;;;:::o;6891:693::-;7009:6;7017;7066:2;7054:9;7045:7;7041:23;7037:32;7034:2;;;7082:1;7079;7072:12;7034:2;7153:1;7142:9;7138:17;7125:31;7183:18;7175:6;7172:30;7169:2;;;7215:1;7212;7205:12;7169:2;7243:78;7313:7;7304:6;7293:9;7289:22;7243:78;:::i;:::-;7233:88;;7096:235;7398:2;7387:9;7383:18;7370:32;7429:18;7421:6;7418:30;7415:2;;;7461:1;7458;7451:12;7415:2;7489:78;7559:7;7550:6;7539:9;7535:22;7489:78;:::i;:::-;7479:88;;7341:236;7024:560;;;;;:::o;7590:256::-;7646:6;7695:2;7683:9;7674:7;7670:23;7666:32;7663:2;;;7711:1;7708;7701:12;7663:2;7754:1;7779:50;7821:7;7812:6;7801:9;7797:22;7779:50;:::i;:::-;7769:60;;7725:114;7653:193;;;;:::o;7852:260::-;7910:6;7959:2;7947:9;7938:7;7934:23;7930:32;7927:2;;;7975:1;7972;7965:12;7927:2;8018:1;8043:52;8087:7;8078:6;8067:9;8063:22;8043:52;:::i;:::-;8033:62;;7989:116;7917:195;;;;:::o;8118:282::-;8187:6;8236:2;8224:9;8215:7;8211:23;8207:32;8204:2;;;8252:1;8249;8242:12;8204:2;8295:1;8320:63;8375:7;8366:6;8355:9;8351:22;8320:63;:::i;:::-;8310:73;;8266:127;8194:206;;;;:::o;8406:375::-;8475:6;8524:2;8512:9;8503:7;8499:23;8495:32;8492:2;;;8540:1;8537;8530:12;8492:2;8611:1;8600:9;8596:17;8583:31;8641:18;8633:6;8630:30;8627:2;;;8673:1;8670;8663:12;8627:2;8701:63;8756:7;8747:6;8736:9;8732:22;8701:63;:::i;:::-;8691:73;;8554:220;8482:299;;;;:::o;8787:262::-;8846:6;8895:2;8883:9;8874:7;8870:23;8866:32;8863:2;;;8911:1;8908;8901:12;8863:2;8954:1;8979:53;9024:7;9015:6;9004:9;9000:22;8979:53;:::i;:::-;8969:63;;8925:117;8853:196;;;;:::o;9055:520::-;9133:6;9141;9190:2;9178:9;9169:7;9165:23;9161:32;9158:2;;;9206:1;9203;9196:12;9158:2;9249:1;9274:53;9319:7;9310:6;9299:9;9295:22;9274:53;:::i;:::-;9264:63;;9220:117;9404:2;9393:9;9389:18;9376:32;9435:18;9427:6;9424:30;9421:2;;;9467:1;9464;9457:12;9421:2;9495:63;9550:7;9541:6;9530:9;9526:22;9495:63;:::i;:::-;9485:73;;9347:221;9148:427;;;;;:::o;9581:118::-;9668:24;9686:5;9668:24;:::i;:::-;9663:3;9656:37;9646:53;;:::o;9705:109::-;9786:21;9801:5;9786:21;:::i;:::-;9781:3;9774:34;9764:50;;:::o;9820:360::-;9906:3;9934:38;9966:5;9934:38;:::i;:::-;9988:70;10051:6;10046:3;9988:70;:::i;:::-;9981:77;;10067:52;10112:6;10107:3;10100:4;10093:5;10089:16;10067:52;:::i;:::-;10144:29;10166:6;10144:29;:::i;:::-;10139:3;10135:39;10128:46;;9910:270;;;;;:::o;10186:147::-;10281:45;10320:5;10281:45;:::i;:::-;10276:3;10269:58;10259:74;;:::o;10339:364::-;10427:3;10455:39;10488:5;10455:39;:::i;:::-;10510:71;10574:6;10569:3;10510:71;:::i;:::-;10503:78;;10590:52;10635:6;10630:3;10623:4;10616:5;10612:16;10590:52;:::i;:::-;10667:29;10689:6;10667:29;:::i;:::-;10662:3;10658:39;10651:46;;10431:272;;;;;:::o;10709:377::-;10815:3;10843:39;10876:5;10843:39;:::i;:::-;10898:89;10980:6;10975:3;10898:89;:::i;:::-;10891:96;;10996:52;11041:6;11036:3;11029:4;11022:5;11018:16;10996:52;:::i;:::-;11073:6;11068:3;11064:16;11057:23;;10819:267;;;;;:::o;11092:365::-;11234:3;11255:66;11319:1;11314:3;11255:66;:::i;:::-;11248:73;;11330:93;11419:3;11330:93;:::i;:::-;11448:2;11443:3;11439:12;11432:19;;11238:219;;;:::o;11463:366::-;11605:3;11626:67;11690:2;11685:3;11626:67;:::i;:::-;11619:74;;11702:93;11791:3;11702:93;:::i;:::-;11820:2;11815:3;11811:12;11804:19;;11609:220;;;:::o;11835:366::-;11977:3;11998:67;12062:2;12057:3;11998:67;:::i;:::-;11991:74;;12074:93;12163:3;12074:93;:::i;:::-;12192:2;12187:3;12183:12;12176:19;;11981:220;;;:::o;12207:366::-;12349:3;12370:67;12434:2;12429:3;12370:67;:::i;:::-;12363:74;;12446:93;12535:3;12446:93;:::i;:::-;12564:2;12559:3;12555:12;12548:19;;12353:220;;;:::o;12579:366::-;12721:3;12742:67;12806:2;12801:3;12742:67;:::i;:::-;12735:74;;12818:93;12907:3;12818:93;:::i;:::-;12936:2;12931:3;12927:12;12920:19;;12725:220;;;:::o;12951:366::-;13093:3;13114:67;13178:2;13173:3;13114:67;:::i;:::-;13107:74;;13190:93;13279:3;13190:93;:::i;:::-;13308:2;13303:3;13299:12;13292:19;;13097:220;;;:::o;13323:366::-;13465:3;13486:67;13550:2;13545:3;13486:67;:::i;:::-;13479:74;;13562:93;13651:3;13562:93;:::i;:::-;13680:2;13675:3;13671:12;13664:19;;13469:220;;;:::o;13695:366::-;13837:3;13858:67;13922:2;13917:3;13858:67;:::i;:::-;13851:74;;13934:93;14023:3;13934:93;:::i;:::-;14052:2;14047:3;14043:12;14036:19;;13841:220;;;:::o;14067:366::-;14209:3;14230:67;14294:2;14289:3;14230:67;:::i;:::-;14223:74;;14306:93;14395:3;14306:93;:::i;:::-;14424:2;14419:3;14415:12;14408:19;;14213:220;;;:::o;14439:366::-;14581:3;14602:67;14666:2;14661:3;14602:67;:::i;:::-;14595:74;;14678:93;14767:3;14678:93;:::i;:::-;14796:2;14791:3;14787:12;14780:19;;14585:220;;;:::o;14811:366::-;14953:3;14974:67;15038:2;15033:3;14974:67;:::i;:::-;14967:74;;15050:93;15139:3;15050:93;:::i;:::-;15168:2;15163:3;15159:12;15152:19;;14957:220;;;:::o;15183:366::-;15325:3;15346:67;15410:2;15405:3;15346:67;:::i;:::-;15339:74;;15422:93;15511:3;15422:93;:::i;:::-;15540:2;15535:3;15531:12;15524:19;;15329:220;;;:::o;15555:366::-;15697:3;15718:67;15782:2;15777:3;15718:67;:::i;:::-;15711:74;;15794:93;15883:3;15794:93;:::i;:::-;15912:2;15907:3;15903:12;15896:19;;15701:220;;;:::o;15927:366::-;16069:3;16090:67;16154:2;16149:3;16090:67;:::i;:::-;16083:74;;16166:93;16255:3;16166:93;:::i;:::-;16284:2;16279:3;16275:12;16268:19;;16073:220;;;:::o;16299:366::-;16441:3;16462:67;16526:2;16521:3;16462:67;:::i;:::-;16455:74;;16538:93;16627:3;16538:93;:::i;:::-;16656:2;16651:3;16647:12;16640:19;;16445:220;;;:::o;16671:366::-;16813:3;16834:67;16898:2;16893:3;16834:67;:::i;:::-;16827:74;;16910:93;16999:3;16910:93;:::i;:::-;17028:2;17023:3;17019:12;17012:19;;16817:220;;;:::o;17043:366::-;17185:3;17206:67;17270:2;17265:3;17206:67;:::i;:::-;17199:74;;17282:93;17371:3;17282:93;:::i;:::-;17400:2;17395:3;17391:12;17384:19;;17189:220;;;:::o;17415:366::-;17557:3;17578:67;17642:2;17637:3;17578:67;:::i;:::-;17571:74;;17654:93;17743:3;17654:93;:::i;:::-;17772:2;17767:3;17763:12;17756:19;;17561:220;;;:::o;17787:366::-;17929:3;17950:67;18014:2;18009:3;17950:67;:::i;:::-;17943:74;;18026:93;18115:3;18026:93;:::i;:::-;18144:2;18139:3;18135:12;18128:19;;17933:220;;;:::o;18159:366::-;18301:3;18322:67;18386:2;18381:3;18322:67;:::i;:::-;18315:74;;18398:93;18487:3;18398:93;:::i;:::-;18516:2;18511:3;18507:12;18500:19;;18305:220;;;:::o;18531:366::-;18673:3;18694:67;18758:2;18753:3;18694:67;:::i;:::-;18687:74;;18770:93;18859:3;18770:93;:::i;:::-;18888:2;18883:3;18879:12;18872:19;;18677:220;;;:::o;18903:366::-;19045:3;19066:67;19130:2;19125:3;19066:67;:::i;:::-;19059:74;;19142:93;19231:3;19142:93;:::i;:::-;19260:2;19255:3;19251:12;19244:19;;19049:220;;;:::o;19275:366::-;19417:3;19438:67;19502:2;19497:3;19438:67;:::i;:::-;19431:74;;19514:93;19603:3;19514:93;:::i;:::-;19632:2;19627:3;19623:12;19616:19;;19421:220;;;:::o;19647:366::-;19789:3;19810:67;19874:2;19869:3;19810:67;:::i;:::-;19803:74;;19886:93;19975:3;19886:93;:::i;:::-;20004:2;19999:3;19995:12;19988:19;;19793:220;;;:::o;20019:366::-;20161:3;20182:67;20246:2;20241:3;20182:67;:::i;:::-;20175:74;;20258:93;20347:3;20258:93;:::i;:::-;20376:2;20371:3;20367:12;20360:19;;20165:220;;;:::o;20391:366::-;20533:3;20554:67;20618:2;20613:3;20554:67;:::i;:::-;20547:74;;20630:93;20719:3;20630:93;:::i;:::-;20748:2;20743:3;20739:12;20732:19;;20537:220;;;:::o;20763:366::-;20905:3;20926:67;20990:2;20985:3;20926:67;:::i;:::-;20919:74;;21002:93;21091:3;21002:93;:::i;:::-;21120:2;21115:3;21111:12;21104:19;;20909:220;;;:::o;21135:366::-;21277:3;21298:67;21362:2;21357:3;21298:67;:::i;:::-;21291:74;;21374:93;21463:3;21374:93;:::i;:::-;21492:2;21487:3;21483:12;21476:19;;21281:220;;;:::o;21507:118::-;21594:24;21612:5;21594:24;:::i;:::-;21589:3;21582:37;21572:53;;:::o;21631:435::-;21811:3;21833:95;21924:3;21915:6;21833:95;:::i;:::-;21826:102;;21945:95;22036:3;22027:6;21945:95;:::i;:::-;21938:102;;22057:3;22050:10;;21815:251;;;;;:::o;22072:222::-;22165:4;22203:2;22192:9;22188:18;22180:26;;22216:71;22284:1;22273:9;22269:17;22260:6;22216:71;:::i;:::-;22170:124;;;;:::o;22300:640::-;22495:4;22533:3;22522:9;22518:19;22510:27;;22547:71;22615:1;22604:9;22600:17;22591:6;22547:71;:::i;:::-;22628:72;22696:2;22685:9;22681:18;22672:6;22628:72;:::i;:::-;22710;22778:2;22767:9;22763:18;22754:6;22710:72;:::i;:::-;22829:9;22823:4;22819:20;22814:2;22803:9;22799:18;22792:48;22857:76;22928:4;22919:6;22857:76;:::i;:::-;22849:84;;22500:440;;;;;;;:::o;22946:210::-;23033:4;23071:2;23060:9;23056:18;23048:26;;23084:65;23146:1;23135:9;23131:17;23122:6;23084:65;:::i;:::-;23038:118;;;;:::o;23162:313::-;23275:4;23313:2;23302:9;23298:18;23290:26;;23362:9;23356:4;23352:20;23348:1;23337:9;23333:17;23326:47;23390:78;23463:4;23454:6;23390:78;:::i;:::-;23382:86;;23280:195;;;;:::o;23481:419::-;23647:4;23685:2;23674:9;23670:18;23662:26;;23734:9;23728:4;23724:20;23720:1;23709:9;23705:17;23698:47;23762:131;23888:4;23762:131;:::i;:::-;23754:139;;23652:248;;;:::o;23906:419::-;24072:4;24110:2;24099:9;24095:18;24087:26;;24159:9;24153:4;24149:20;24145:1;24134:9;24130:17;24123:47;24187:131;24313:4;24187:131;:::i;:::-;24179:139;;24077:248;;;:::o;24331:419::-;24497:4;24535:2;24524:9;24520:18;24512:26;;24584:9;24578:4;24574:20;24570:1;24559:9;24555:17;24548:47;24612:131;24738:4;24612:131;:::i;:::-;24604:139;;24502:248;;;:::o;24756:419::-;24922:4;24960:2;24949:9;24945:18;24937:26;;25009:9;25003:4;24999:20;24995:1;24984:9;24980:17;24973:47;25037:131;25163:4;25037:131;:::i;:::-;25029:139;;24927:248;;;:::o;25181:419::-;25347:4;25385:2;25374:9;25370:18;25362:26;;25434:9;25428:4;25424:20;25420:1;25409:9;25405:17;25398:47;25462:131;25588:4;25462:131;:::i;:::-;25454:139;;25352:248;;;:::o;25606:419::-;25772:4;25810:2;25799:9;25795:18;25787:26;;25859:9;25853:4;25849:20;25845:1;25834:9;25830:17;25823:47;25887:131;26013:4;25887:131;:::i;:::-;25879:139;;25777:248;;;:::o;26031:419::-;26197:4;26235:2;26224:9;26220:18;26212:26;;26284:9;26278:4;26274:20;26270:1;26259:9;26255:17;26248:47;26312:131;26438:4;26312:131;:::i;:::-;26304:139;;26202:248;;;:::o;26456:419::-;26622:4;26660:2;26649:9;26645:18;26637:26;;26709:9;26703:4;26699:20;26695:1;26684:9;26680:17;26673:47;26737:131;26863:4;26737:131;:::i;:::-;26729:139;;26627:248;;;:::o;26881:419::-;27047:4;27085:2;27074:9;27070:18;27062:26;;27134:9;27128:4;27124:20;27120:1;27109:9;27105:17;27098:47;27162:131;27288:4;27162:131;:::i;:::-;27154:139;;27052:248;;;:::o;27306:419::-;27472:4;27510:2;27499:9;27495:18;27487:26;;27559:9;27553:4;27549:20;27545:1;27534:9;27530:17;27523:47;27587:131;27713:4;27587:131;:::i;:::-;27579:139;;27477:248;;;:::o;27731:419::-;27897:4;27935:2;27924:9;27920:18;27912:26;;27984:9;27978:4;27974:20;27970:1;27959:9;27955:17;27948:47;28012:131;28138:4;28012:131;:::i;:::-;28004:139;;27902:248;;;:::o;28156:419::-;28322:4;28360:2;28349:9;28345:18;28337:26;;28409:9;28403:4;28399:20;28395:1;28384:9;28380:17;28373:47;28437:131;28563:4;28437:131;:::i;:::-;28429:139;;28327:248;;;:::o;28581:419::-;28747:4;28785:2;28774:9;28770:18;28762:26;;28834:9;28828:4;28824:20;28820:1;28809:9;28805:17;28798:47;28862:131;28988:4;28862:131;:::i;:::-;28854:139;;28752:248;;;:::o;29006:419::-;29172:4;29210:2;29199:9;29195:18;29187:26;;29259:9;29253:4;29249:20;29245:1;29234:9;29230:17;29223:47;29287:131;29413:4;29287:131;:::i;:::-;29279:139;;29177:248;;;:::o;29431:419::-;29597:4;29635:2;29624:9;29620:18;29612:26;;29684:9;29678:4;29674:20;29670:1;29659:9;29655:17;29648:47;29712:131;29838:4;29712:131;:::i;:::-;29704:139;;29602:248;;;:::o;29856:419::-;30022:4;30060:2;30049:9;30045:18;30037:26;;30109:9;30103:4;30099:20;30095:1;30084:9;30080:17;30073:47;30137:131;30263:4;30137:131;:::i;:::-;30129:139;;30027:248;;;:::o;30281:419::-;30447:4;30485:2;30474:9;30470:18;30462:26;;30534:9;30528:4;30524:20;30520:1;30509:9;30505:17;30498:47;30562:131;30688:4;30562:131;:::i;:::-;30554:139;;30452:248;;;:::o;30706:419::-;30872:4;30910:2;30899:9;30895:18;30887:26;;30959:9;30953:4;30949:20;30945:1;30934:9;30930:17;30923:47;30987:131;31113:4;30987:131;:::i;:::-;30979:139;;30877:248;;;:::o;31131:419::-;31297:4;31335:2;31324:9;31320:18;31312:26;;31384:9;31378:4;31374:20;31370:1;31359:9;31355:17;31348:47;31412:131;31538:4;31412:131;:::i;:::-;31404:139;;31302:248;;;:::o;31556:419::-;31722:4;31760:2;31749:9;31745:18;31737:26;;31809:9;31803:4;31799:20;31795:1;31784:9;31780:17;31773:47;31837:131;31963:4;31837:131;:::i;:::-;31829:139;;31727:248;;;:::o;31981:419::-;32147:4;32185:2;32174:9;32170:18;32162:26;;32234:9;32228:4;32224:20;32220:1;32209:9;32205:17;32198:47;32262:131;32388:4;32262:131;:::i;:::-;32254:139;;32152:248;;;:::o;32406:419::-;32572:4;32610:2;32599:9;32595:18;32587:26;;32659:9;32653:4;32649:20;32645:1;32634:9;32630:17;32623:47;32687:131;32813:4;32687:131;:::i;:::-;32679:139;;32577:248;;;:::o;32831:419::-;32997:4;33035:2;33024:9;33020:18;33012:26;;33084:9;33078:4;33074:20;33070:1;33059:9;33055:17;33048:47;33112:131;33238:4;33112:131;:::i;:::-;33104:139;;33002:248;;;:::o;33256:419::-;33422:4;33460:2;33449:9;33445:18;33437:26;;33509:9;33503:4;33499:20;33495:1;33484:9;33480:17;33473:47;33537:131;33663:4;33537:131;:::i;:::-;33529:139;;33427:248;;;:::o;33681:419::-;33847:4;33885:2;33874:9;33870:18;33862:26;;33934:9;33928:4;33924:20;33920:1;33909:9;33905:17;33898:47;33962:131;34088:4;33962:131;:::i;:::-;33954:139;;33852:248;;;:::o;34106:419::-;34272:4;34310:2;34299:9;34295:18;34287:26;;34359:9;34353:4;34349:20;34345:1;34334:9;34330:17;34323:47;34387:131;34513:4;34387:131;:::i;:::-;34379:139;;34277:248;;;:::o;34531:419::-;34697:4;34735:2;34724:9;34720:18;34712:26;;34784:9;34778:4;34774:20;34770:1;34759:9;34755:17;34748:47;34812:131;34938:4;34812:131;:::i;:::-;34804:139;;34702:248;;;:::o;34956:419::-;35122:4;35160:2;35149:9;35145:18;35137:26;;35209:9;35203:4;35199:20;35195:1;35184:9;35180:17;35173:47;35237:131;35363:4;35237:131;:::i;:::-;35229:139;;35127:248;;;:::o;35381:222::-;35474:4;35512:2;35501:9;35497:18;35489:26;;35525:71;35593:1;35582:9;35578:17;35569:6;35525:71;:::i;:::-;35479:124;;;;:::o;35609:348::-;35738:4;35776:2;35765:9;35761:18;35753:26;;35789:71;35857:1;35846:9;35842:17;35833:6;35789:71;:::i;:::-;35870:80;35946:2;35935:9;35931:18;35922:6;35870:80;:::i;:::-;35743:214;;;;;:::o;35963:332::-;36084:4;36122:2;36111:9;36107:18;36099:26;;36135:71;36203:1;36192:9;36188:17;36179:6;36135:71;:::i;:::-;36216:72;36284:2;36273:9;36269:18;36260:6;36216:72;:::i;:::-;36089:206;;;;;:::o;36301:129::-;36335:6;36362:20;;:::i;:::-;36352:30;;36391:33;36419:4;36411:6;36391:33;:::i;:::-;36342:88;;;:::o;36436:75::-;36469:6;36502:2;36496:9;36486:19;;36476:35;:::o;36517:311::-;36594:4;36684:18;36676:6;36673:30;36670:2;;;36706:18;;:::i;:::-;36670:2;36756:4;36748:6;36744:17;36736:25;;36816:4;36810;36806:15;36798:23;;36599:229;;;:::o;36834:311::-;36911:4;37001:18;36993:6;36990:30;36987:2;;;37023:18;;:::i;:::-;36987:2;37073:4;37065:6;37061:17;37053:25;;37133:4;37127;37123:15;37115:23;;36916:229;;;:::o;37151:307::-;37212:4;37302:18;37294:6;37291:30;37288:2;;;37324:18;;:::i;:::-;37288:2;37362:29;37384:6;37362:29;:::i;:::-;37354:37;;37446:4;37440;37436:15;37428:23;;37217:241;;;:::o;37464:308::-;37526:4;37616:18;37608:6;37605:30;37602:2;;;37638:18;;:::i;:::-;37602:2;37676:29;37698:6;37676:29;:::i;:::-;37668:37;;37760:4;37754;37750:15;37742:23;;37531:241;;;:::o;37778:98::-;37829:6;37863:5;37857:12;37847:22;;37836:40;;;:::o;37882:99::-;37934:6;37968:5;37962:12;37952:22;;37941:40;;;:::o;37987:168::-;38070:11;38104:6;38099:3;38092:19;38144:4;38139:3;38135:14;38120:29;;38082:73;;;;:::o;38161:169::-;38245:11;38279:6;38274:3;38267:19;38319:4;38314:3;38310:14;38295:29;;38257:73;;;;:::o;38336:148::-;38438:11;38475:3;38460:18;;38450:34;;;;:::o;38490:305::-;38530:3;38549:20;38567:1;38549:20;:::i;:::-;38544:25;;38583:20;38601:1;38583:20;:::i;:::-;38578:25;;38737:1;38669:66;38665:74;38662:1;38659:81;38656:2;;;38743:18;;:::i;:::-;38656:2;38787:1;38784;38780:9;38773:16;;38534:261;;;;:::o;38801:185::-;38841:1;38858:20;38876:1;38858:20;:::i;:::-;38853:25;;38892:20;38910:1;38892:20;:::i;:::-;38887:25;;38931:1;38921:2;;38936:18;;:::i;:::-;38921:2;38978:1;38975;38971:9;38966:14;;38843:143;;;;:::o;38992:348::-;39032:7;39055:20;39073:1;39055:20;:::i;:::-;39050:25;;39089:20;39107:1;39089:20;:::i;:::-;39084:25;;39277:1;39209:66;39205:74;39202:1;39199:81;39194:1;39187:9;39180:17;39176:105;39173:2;;;39284:18;;:::i;:::-;39173:2;39332:1;39329;39325:9;39314:20;;39040:300;;;;:::o;39346:191::-;39386:4;39406:20;39424:1;39406:20;:::i;:::-;39401:25;;39440:20;39458:1;39440:20;:::i;:::-;39435:25;;39479:1;39476;39473:8;39470:2;;;39484:18;;:::i;:::-;39470:2;39529:1;39526;39522:9;39514:17;;39391:146;;;;:::o;39543:96::-;39580:7;39609:24;39627:5;39609:24;:::i;:::-;39598:35;;39588:51;;;:::o;39645:90::-;39679:7;39722:5;39715:13;39708:21;39697:32;;39687:48;;;:::o;39741:149::-;39777:7;39817:66;39810:5;39806:78;39795:89;;39785:105;;;:::o;39896:126::-;39933:7;39973:42;39966:5;39962:54;39951:65;;39941:81;;;:::o;40028:77::-;40065:7;40094:5;40083:16;;40073:32;;;:::o;40111:121::-;40169:9;40202:24;40220:5;40202:24;:::i;:::-;40189:37;;40179:53;;;:::o;40238:154::-;40322:6;40317:3;40312;40299:30;40384:1;40375:6;40370:3;40366:16;40359:27;40289:103;;;:::o;40398:307::-;40466:1;40476:113;40490:6;40487:1;40484:13;40476:113;;;40575:1;40570:3;40566:11;40560:18;40556:1;40551:3;40547:11;40540:39;40512:2;40509:1;40505:10;40500:15;;40476:113;;;40607:6;40604:1;40601:13;40598:2;;;40687:1;40678:6;40673:3;40669:16;40662:27;40598:2;40447:258;;;;:::o;40711:320::-;40755:6;40792:1;40786:4;40782:12;40772:22;;40839:1;40833:4;40829:12;40860:18;40850:2;;40916:4;40908:6;40904:17;40894:27;;40850:2;40978;40970:6;40967:14;40947:18;40944:38;40941:2;;;40997:18;;:::i;:::-;40941:2;40762:269;;;;:::o;41037:281::-;41120:27;41142:4;41120:27;:::i;:::-;41112:6;41108:40;41250:6;41238:10;41235:22;41214:18;41202:10;41199:34;41196:62;41193:2;;;41261:18;;:::i;:::-;41193:2;41301:10;41297:2;41290:22;41080:238;;;:::o;41324:233::-;41363:3;41386:24;41404:5;41386:24;:::i;:::-;41377:33;;41432:66;41425:5;41422:77;41419:2;;;41502:18;;:::i;:::-;41419:2;41549:1;41542:5;41538:13;41531:20;;41367:190;;;:::o;41563:176::-;41595:1;41612:20;41630:1;41612:20;:::i;:::-;41607:25;;41646:20;41664:1;41646:20;:::i;:::-;41641:25;;41685:1;41675:2;;41690:18;;:::i;:::-;41675:2;41731:1;41728;41724:9;41719:14;;41597:142;;;;:::o;41745:180::-;41793:77;41790:1;41783:88;41890:4;41887:1;41880:15;41914:4;41911:1;41904:15;41931:180;41979:77;41976:1;41969:88;42076:4;42073:1;42066:15;42100:4;42097:1;42090:15;42117:180;42165:77;42162:1;42155:88;42262:4;42259:1;42252:15;42286:4;42283:1;42276:15;42303:180;42351:77;42348:1;42341:88;42448:4;42445:1;42438:15;42472:4;42469:1;42462:15;42489:102;42530:6;42581:2;42577:7;42572:2;42565:5;42561:14;42557:28;42547:38;;42537:54;;;:::o;42597:158::-;42737:10;42733:1;42725:6;42721:14;42714:34;42703:52;:::o;42761:237::-;42901:34;42897:1;42889:6;42885:14;42878:58;42970:20;42965:2;42957:6;42953:15;42946:45;42867:131;:::o;43004:225::-;43144:34;43140:1;43132:6;43128:14;43121:58;43213:8;43208:2;43200:6;43196:15;43189:33;43110:119;:::o;43235:178::-;43375:30;43371:1;43363:6;43359:14;43352:54;43341:72;:::o;43419:167::-;43559:19;43555:1;43547:6;43543:14;43536:43;43525:61;:::o;43592:223::-;43732:34;43728:1;43720:6;43716:14;43709:58;43801:6;43796:2;43788:6;43784:15;43777:31;43698:117;:::o;43821:175::-;43961:27;43957:1;43949:6;43945:14;43938:51;43927:69;:::o;44002:178::-;44142:30;44138:1;44130:6;44126:14;44119:54;44108:72;:::o;44186:231::-;44326:34;44322:1;44314:6;44310:14;44303:58;44395:14;44390:2;44382:6;44378:15;44371:39;44292:125;:::o;44423:243::-;44563:34;44559:1;44551:6;44547:14;44540:58;44632:26;44627:2;44619:6;44615:15;44608:51;44529:137;:::o;44672:229::-;44812:34;44808:1;44800:6;44796:14;44789:58;44881:12;44876:2;44868:6;44864:15;44857:37;44778:123;:::o;44907:228::-;45047:34;45043:1;45035:6;45031:14;45024:58;45116:11;45111:2;45103:6;45099:15;45092:36;45013:122;:::o;45141:233::-;45281:34;45277:1;45269:6;45265:14;45258:58;45350:16;45345:2;45337:6;45333:15;45326:41;45247:127;:::o;45380:178::-;45520:30;45516:1;45508:6;45504:14;45497:54;45486:72;:::o;45564:182::-;45704:34;45700:1;45692:6;45688:14;45681:58;45670:76;:::o;45752:236::-;45892:34;45888:1;45880:6;45876:14;45869:58;45961:19;45956:2;45948:6;45944:15;45937:44;45858:130;:::o;45994:231::-;46134:34;46130:1;46122:6;46118:14;46111:58;46203:14;46198:2;46190:6;46186:15;46179:39;46100:125;:::o;46231:182::-;46371:34;46367:1;46359:6;46355:14;46348:58;46337:76;:::o;46419:228::-;46559:34;46555:1;46547:6;46543:14;46536:58;46628:11;46623:2;46615:6;46611:15;46604:36;46525:122;:::o;46653:160::-;46793:12;46789:1;46781:6;46777:14;46770:36;46759:54;:::o;46819:234::-;46959:34;46955:1;46947:6;46943:14;46936:58;47028:17;47023:2;47015:6;47011:15;47004:42;46925:128;:::o;47059:220::-;47199:34;47195:1;47187:6;47183:14;47176:58;47268:3;47263:2;47255:6;47251:15;47244:28;47165:114;:::o;47285:236::-;47425:34;47421:1;47413:6;47409:14;47402:58;47494:19;47489:2;47481:6;47477:15;47470:44;47391:130;:::o;47527:166::-;47667:18;47663:1;47655:6;47651:14;47644:42;47633:60;:::o;47699:235::-;47839:34;47835:1;47827:6;47823:14;47816:58;47908:18;47903:2;47895:6;47891:15;47884:43;47805:129;:::o;47940:161::-;48080:13;48076:1;48068:6;48064:14;48057:37;48046:55;:::o;48107:181::-;48247:33;48243:1;48235:6;48231:14;48224:57;48213:75;:::o;48294:161::-;48434:13;48430:1;48422:6;48418:14;48411:37;48400:55;:::o;48461:122::-;48534:24;48552:5;48534:24;:::i;:::-;48527:5;48524:35;48514:2;;48573:1;48570;48563:12;48514:2;48504:79;:::o;48589:116::-;48659:21;48674:5;48659:21;:::i;:::-;48652:5;48649:32;48639:2;;48695:1;48692;48685:12;48639:2;48629:76;:::o;48711:120::-;48783:23;48800:5;48783:23;:::i;:::-;48776:5;48773:34;48763:2;;48821:1;48818;48811:12;48763:2;48753:78;:::o;48837:122::-;48910:24;48928:5;48910:24;:::i;:::-;48903:5;48900:35;48890:2;;48949:1;48946;48939:12;48890:2;48880:79;:::o

Swarm Source

ipfs://50c3cb52042f65bfe263e2ec9f58bd94b1f7253da530003723db24e029292401
Loading...
Loading
Loading...
Loading
[ 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.