ETH Price: $3,424.54 (+3.39%)

Token

DeadHeads Season 1 Poster ()
 

Overview

Max Total Supply

80

Holders

77

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
0x9bbeb545c6b8700691dadd673e1c2f7ed20e985c
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
DeadHeadsSeason1Poster

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

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


// OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

    /**
     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.
     */
    function toHexString(address addr) internal pure returns (string memory) {
        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);
    }
}

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


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

pragma solidity ^0.8.0;

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

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

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


// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

pragma solidity ^0.8.0;


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

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

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

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

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

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

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


// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @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
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly
                /// @solidity memory-safe-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

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


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

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;


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

// File: @openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol


// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol)

pragma solidity ^0.8.0;


/**
 * @dev _Available since v3.1._
 */
interface IERC1155Receiver is IERC165 {
    /**
     * @dev Handles the receipt of a single ERC1155 token type. This function is
     * called at the end of a `safeTransferFrom` after the balance has been updated.
     *
     * NOTE: To accept the transfer, this must return
     * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))`
     * (i.e. 0xf23a6e61, or its own function selector).
     *
     * @param operator The address which initiated the transfer (i.e. msg.sender)
     * @param from The address which previously owned the token
     * @param id The ID of the token being transferred
     * @param value The amount of tokens being transferred
     * @param data Additional data with no specified format
     * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed
     */
    function onERC1155Received(
        address operator,
        address from,
        uint256 id,
        uint256 value,
        bytes calldata data
    ) external returns (bytes4);

    /**
     * @dev Handles the receipt of a multiple ERC1155 token types. This function
     * is called at the end of a `safeBatchTransferFrom` after the balances have
     * been updated.
     *
     * NOTE: To accept the transfer(s), this must return
     * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))`
     * (i.e. 0xbc197c81, or its own function selector).
     *
     * @param operator The address which initiated the batch transfer (i.e. msg.sender)
     * @param from The address which previously owned the token
     * @param ids An array containing ids of each token being transferred (order and length must match values array)
     * @param values An array containing amounts of each token being transferred (order and length must match ids array)
     * @param data Additional data with no specified format
     * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed
     */
    function onERC1155BatchReceived(
        address operator,
        address from,
        uint256[] calldata ids,
        uint256[] calldata values,
        bytes calldata data
    ) external returns (bytes4);
}

// File: @openzeppelin/contracts/token/ERC1155/IERC1155.sol


// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC1155/IERC1155.sol)

pragma solidity ^0.8.0;


/**
 * @dev Required interface of an ERC1155 compliant contract, as defined in the
 * https://eips.ethereum.org/EIPS/eip-1155[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155 is IERC165 {
    /**
     * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.
     */
    event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);

    /**
     * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all
     * transfers.
     */
    event TransferBatch(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256[] ids,
        uint256[] values
    );

    /**
     * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to
     * `approved`.
     */
    event ApprovalForAll(address indexed account, address indexed operator, bool approved);

    /**
     * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.
     *
     * If an {URI} event was emitted for `id`, the standard
     * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value
     * returned by {IERC1155MetadataURI-uri}.
     */
    event URI(string value, uint256 indexed id);

    /**
     * @dev Returns the amount of tokens of token type `id` owned by `account`.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) external view returns (uint256);

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids)
        external
        view
        returns (uint256[] memory);

    /**
     * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,
     *
     * Emits an {ApprovalForAll} event.
     *
     * Requirements:
     *
     * - `operator` cannot be the caller.
     */
    function setApprovalForAll(address operator, bool approved) external;

    /**
     * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.
     *
     * See {setApprovalForAll}.
     */
    function isApprovedForAll(address account, address operator) external view returns (bool);

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If the caller is not `from`, it must have been approved to spend ``from``'s tokens via {setApprovalForAll}.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes calldata data
    ) external;

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] calldata ids,
        uint256[] calldata amounts,
        bytes calldata data
    ) external;
}

// File: @openzeppelin/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol)

pragma solidity ^0.8.0;


/**
 * @dev Interface of the optional ERC1155MetadataExtension interface, as defined
 * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155MetadataURI is IERC1155 {
    /**
     * @dev Returns the URI for token type `id`.
     *
     * If the `\{id\}` substring is present in the URI, it must be replaced by
     * clients with the actual token type ID.
     */
    function uri(uint256 id) external view returns (string memory);
}

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


// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC1155/ERC1155.sol)

pragma solidity ^0.8.0;







/**
 * @dev Implementation of the basic standard multi-token.
 * See https://eips.ethereum.org/EIPS/eip-1155
 * Originally based on code by Enjin: https://github.com/enjin/erc-1155
 *
 * _Available since v3.1._
 */
contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI {
    using Address for address;

    // Mapping from token ID to account balances
    mapping(uint256 => mapping(address => uint256)) private _balances;

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

    // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json
    string private _uri;

    /**
     * @dev See {_setURI}.
     */
    constructor(string memory uri_) {
        _setURI(uri_);
    }

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

    /**
     * @dev See {IERC1155MetadataURI-uri}.
     *
     * This implementation returns the same URI for *all* token types. It relies
     * on the token type ID substitution mechanism
     * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
     *
     * Clients calling this function must replace the `\{id\}` substring with the
     * actual token type ID.
     */
    function uri(uint256) public view virtual override returns (string memory) {
        return _uri;
    }

    /**
     * @dev See {IERC1155-balanceOf}.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {
        require(account != address(0), "ERC1155: address zero is not a valid owner");
        return _balances[id][account];
    }

    /**
     * @dev See {IERC1155-balanceOfBatch}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] memory accounts, uint256[] memory ids)
        public
        view
        virtual
        override
        returns (uint256[] memory)
    {
        require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch");

        uint256[] memory batchBalances = new uint256[](accounts.length);

        for (uint256 i = 0; i < accounts.length; ++i) {
            batchBalances[i] = balanceOf(accounts[i], ids[i]);
        }

        return batchBalances;
    }

    /**
     * @dev See {IERC1155-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        _setApprovalForAll(_msgSender(), operator, approved);
    }

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

    /**
     * @dev See {IERC1155-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: caller is not token owner nor approved"
        );
        _safeTransferFrom(from, to, id, amount, data);
    }

    /**
     * @dev See {IERC1155-safeBatchTransferFrom}.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: caller is not token owner nor approved"
        );
        _safeBatchTransferFrom(from, to, ids, amounts, data);
    }

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: transfer to the zero address");

        address operator = _msgSender();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

        _beforeTokenTransfer(operator, from, to, ids, amounts, data);

        uint256 fromBalance = _balances[id][from];
        require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
        unchecked {
            _balances[id][from] = fromBalance - amount;
        }
        _balances[id][to] += amount;

        emit TransferSingle(operator, from, to, id, amount);

        _afterTokenTransfer(operator, from, to, ids, amounts, data);

        _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function _safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");
        require(to != address(0), "ERC1155: transfer to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, to, ids, amounts, data);

        for (uint256 i = 0; i < ids.length; ++i) {
            uint256 id = ids[i];
            uint256 amount = amounts[i];

            uint256 fromBalance = _balances[id][from];
            require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
            unchecked {
                _balances[id][from] = fromBalance - amount;
            }
            _balances[id][to] += amount;
        }

        emit TransferBatch(operator, from, to, ids, amounts);

        _afterTokenTransfer(operator, from, to, ids, amounts, data);

        _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);
    }

    /**
     * @dev Sets a new URI for all token types, by relying on the token type ID
     * substitution mechanism
     * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
     *
     * By this mechanism, any occurrence of the `\{id\}` substring in either the
     * URI or any of the amounts in the JSON file at said URI will be replaced by
     * clients with the token type ID.
     *
     * For example, the `https://token-cdn-domain/\{id\}.json` URI would be
     * interpreted by clients as
     * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`
     * for token type ID 0x4cce0.
     *
     * See {uri}.
     *
     * Because these URIs cannot be meaningfully represented by the {URI} event,
     * this function emits no events.
     */
    function _setURI(string memory newuri) internal virtual {
        _uri = newuri;
    }

    /**
     * @dev Creates `amount` tokens of token type `id`, and assigns them to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _mint(
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");

        address operator = _msgSender();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

        _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);

        _balances[id][to] += amount;
        emit TransferSingle(operator, address(0), to, id, amount);

        _afterTokenTransfer(operator, address(0), to, ids, amounts, data);

        _doSafeTransferAcceptanceCheck(operator, address(0), to, id, amount, data);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function _mintBatch(
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);

        for (uint256 i = 0; i < ids.length; i++) {
            _balances[ids[i]][to] += amounts[i];
        }

        emit TransferBatch(operator, address(0), to, ids, amounts);

        _afterTokenTransfer(operator, address(0), to, ids, amounts, data);

        _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);
    }

    /**
     * @dev Destroys `amount` tokens of token type `id` from `from`
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `from` must have at least `amount` tokens of token type `id`.
     */
    function _burn(
        address from,
        uint256 id,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC1155: burn from the zero address");

        address operator = _msgSender();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

        _beforeTokenTransfer(operator, from, address(0), ids, amounts, "");

        uint256 fromBalance = _balances[id][from];
        require(fromBalance >= amount, "ERC1155: burn amount exceeds balance");
        unchecked {
            _balances[id][from] = fromBalance - amount;
        }

        emit TransferSingle(operator, from, address(0), id, amount);

        _afterTokenTransfer(operator, from, address(0), ids, amounts, "");
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     */
    function _burnBatch(
        address from,
        uint256[] memory ids,
        uint256[] memory amounts
    ) internal virtual {
        require(from != address(0), "ERC1155: burn from the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, address(0), ids, amounts, "");

        for (uint256 i = 0; i < ids.length; i++) {
            uint256 id = ids[i];
            uint256 amount = amounts[i];

            uint256 fromBalance = _balances[id][from];
            require(fromBalance >= amount, "ERC1155: burn amount exceeds balance");
            unchecked {
                _balances[id][from] = fromBalance - amount;
            }
        }

        emit TransferBatch(operator, from, address(0), ids, amounts);

        _afterTokenTransfer(operator, from, address(0), ids, amounts, "");
    }

    /**
     * @dev Approve `operator` to operate on all of `owner` tokens
     *
     * Emits an {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC1155: setting approval status for self");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning, as well as batched variants.
     *
     * The same hook is called on both single and batched variants. For single
     * transfers, the length of the `ids` and `amounts` arrays will be 1.
     *
     * Calling conditions (for each `id` and `amount` pair):
     *
     * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * of token type `id` will be  transferred to `to`.
     * - When `from` is zero, `amount` tokens of token type `id` will be minted
     * for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`
     * will be burned.
     * - `from` and `to` are never both zero.
     * - `ids` and `amounts` have the same, non-zero length.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {}

    /**
     * @dev Hook that is called after any token transfer. This includes minting
     * and burning, as well as batched variants.
     *
     * The same hook is called on both single and batched variants. For single
     * transfers, the length of the `id` and `amount` arrays will be 1.
     *
     * Calling conditions (for each `id` and `amount` pair):
     *
     * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * of token type `id` will be  transferred to `to`.
     * - When `from` is zero, `amount` tokens of token type `id` will be minted
     * for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`
     * will be burned.
     * - `from` and `to` are never both zero.
     * - `ids` and `amounts` have the same, non-zero length.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {}

    function _doSafeTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) private {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {
                if (response != IERC1155Receiver.onERC1155Received.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _doSafeBatchTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) private {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (
                bytes4 response
            ) {
                if (response != IERC1155Receiver.onERC1155BatchReceived.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) {
        uint256[] memory array = new uint256[](1);
        array[0] = element;

        return array;
    }
}

// File: @openzeppelin/contracts/token/ERC1155/extensions/ERC1155Supply.sol


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC1155/extensions/ERC1155Supply.sol)

pragma solidity ^0.8.0;


/**
 * @dev Extension of ERC1155 that adds tracking of total supply per id.
 *
 * Useful for scenarios where Fungible and Non-fungible tokens have to be
 * clearly identified. Note: While a totalSupply of 1 might mean the
 * corresponding is an NFT, there is no guarantees that no other token with the
 * same id are not going to be minted.
 */
abstract contract ERC1155Supply is ERC1155 {
    mapping(uint256 => uint256) private _totalSupply;

    /**
     * @dev Total amount of tokens in with a given id.
     */
    function totalSupply(uint256 id) public view virtual returns (uint256) {
        return _totalSupply[id];
    }

    /**
     * @dev Indicates whether any token exist with a given id, or not.
     */
    function exists(uint256 id) public view virtual returns (bool) {
        return ERC1155Supply.totalSupply(id) > 0;
    }

    /**
     * @dev See {ERC1155-_beforeTokenTransfer}.
     */
    function _beforeTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual override {
        super._beforeTokenTransfer(operator, from, to, ids, amounts, data);

        if (from == address(0)) {
            for (uint256 i = 0; i < ids.length; ++i) {
                _totalSupply[ids[i]] += amounts[i];
            }
        }

        if (to == address(0)) {
            for (uint256 i = 0; i < ids.length; ++i) {
                uint256 id = ids[i];
                uint256 amount = amounts[i];
                uint256 supply = _totalSupply[id];
                require(supply >= amount, "ERC1155: burn amount exceeds totalSupply");
                unchecked {
                    _totalSupply[id] = supply - amount;
                }
            }
        }
    }
}

// File: DHSeason1Poster.sol


pragma solidity ^0.8.4;





contract DeadHeadsSeason1Poster is ERC1155, Ownable {
    constructor() ERC1155("") {
        _baseUri = "https://deadheads.mypinata.cloud/ipfs/QmVt2WFpXzKWuUsL7gdG7dnZABBzSpSPt9d68nkmdxBzwE/";
        _contractUri = "https://deadheads.mypinata.cloud/ipfs/QmXuvXS2r3QZLXSncutoqbwfjkdhngzqw6roghwJN2k6CW";
    }

    string _baseUri;
    string _contractUri;

    string public name = "DeadHeads Season 1 Poster";

    bool public isMintActive = false;

    uint256 public maxSupplyCommon = 75;
    uint256 public maxSupplyRare = 5;

    uint256 public totalSupplyCommon = 0;
    uint256 public totalSupplyRare = 0;

    uint nonce;

    function uri(uint256 tokenId) override public view returns (string memory) {
        require(tokenId >= 0 && tokenId <= 1, "ERC1155Metadata: URI query for nonexistent token");
        return string(abi.encodePacked(_baseUri, Strings.toString(tokenId), ".json"));
    }

    function mint() public {

        require(isMintActive, "Mint is not active");

        require(
            (maxSupplyCommon - totalSupplyCommon) + (maxSupplyRare - totalSupplyRare) > 0,
            "Sold out"
        );

        require(
            balanceOf(msg.sender, 0) + balanceOf(msg.sender, 1) == 0,
            "You are only allowed to mint 1."
        );

        if(totalSupplyRare == maxSupplyRare){
            _mint(msg.sender, 0, 1, "");
            totalSupplyCommon++;
        }else{
            uint rarity = random();
            if(rarity >  (maxSupplyCommon-totalSupplyCommon)){
                _mint(msg.sender, 1, 1, "");
                totalSupplyRare++;
            }else{
               _mint(msg.sender, 0, 1, "");
                totalSupplyCommon++;
            }
        }
        
    }

    function toggleMint() external onlyOwner {
        isMintActive = !isMintActive;
    }

    function setContractURI(string memory newContractURI) external onlyOwner {
        _contractUri = newContractURI;
    }

    function contractURI() public view returns (string memory) {
        return _contractUri;
    }

    function setBaseURI(string memory newBaseURI) external onlyOwner {
        _baseUri = newBaseURI;
    }

    function totalSupply() public view returns (uint){
        return totalSupplyCommon + totalSupplyRare;
    }

    function random() internal returns (uint) {
        uint maxRange = (maxSupplyCommon-totalSupplyCommon) + (maxSupplyRare-totalSupplyRare);
        uint randomnumber = (uint(keccak256(abi.encodePacked(nonce, block.timestamp, block.difficulty, msg.sender))) % maxRange)+1;
        
        nonce++;
        return randomnumber;
    }

    function withdrawAll() external onlyOwner {
        require(payable(msg.sender).send(address(this).balance));
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isMintActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupplyCommon","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupplyRare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mint","outputs":[],"stateMutability":"nonpayable","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":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","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":"newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newContractURI","type":"string"}],"name":"setContractURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toggleMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupplyCommon","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupplyRare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526040518060400160405280601981526020017f44656164486561647320536561736f6e203120506f7374657200000000000000815250600690805190602001906200005192919062000225565b506000600760006101000a81548160ff021916908315150217905550604b60085560056009556000600a556000600b553480156200008e57600080fd5b5060405180602001604052806000815250620000b0816200013b60201b60201c565b50620000d1620000c56200015760201b60201c565b6200015f60201b60201c565b60405180608001604052806055815260200162003cc260559139600490805190602001906200010292919062000225565b5060405180608001604052806054815260200162003d1760549139600590805190602001906200013492919062000225565b506200033a565b80600290805190602001906200015392919062000225565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200023390620002d5565b90600052602060002090601f016020900481019282620002575760008555620002a3565b82601f106200027257805160ff1916838001178555620002a3565b82800160010185558215620002a3579182015b82811115620002a257825182559160200191906001019062000285565b5b509050620002b29190620002b6565b5090565b5b80821115620002d1576000816000905550600101620002b7565b5090565b60006002820490506001821680620002ee57607f821691505b602082108114156200030557620003046200030b565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b613978806200034a6000396000f3fe608060405234801561001057600080fd5b50600436106101575760003560e01c8063853828b6116100c3578063e8a3d4851161007c578063e8a3d48514610368578063e985e9c514610386578063f242432a146103b6578063f2fde38b146103d2578063f52fb0e5146103ee578063fbbf79921461040c57610157565b8063853828b6146102e05780638da5cb5b146102ea578063938e3d7b14610308578063a22cb46514610324578063d3dd5fe014610340578063e5a7b05b1461034a57610157565b80632eb2c2d6116101155780632eb2c2d6146102325780634e1273f41461024e57806355f804b31461027e5780635b92ac0d1461029a578063715018a6146102b85780637a082339146102c257610157565b8062fdd58e1461015c57806301ffc9a71461018c57806306fdde03146101bc5780630e89341c146101da5780631249c58b1461020a57806318160ddd14610214575b600080fd5b61017660048036038101906101719190612481565b61042a565b6040516101839190612e4e565b60405180910390f35b6101a660048036038101906101a19190612539565b6104f3565b6040516101b39190612c11565b60405180910390f35b6101c46105d5565b6040516101d19190612c2c565b60405180910390f35b6101f460048036038101906101ef91906125dc565b610663565b6040516102019190612c2c565b60405180910390f35b6102126106e8565b005b61021c6108e1565b6040516102299190612e4e565b60405180910390f35b61024c600480360381019061024791906122db565b6108f8565b005b610268600480360381019061026391906124c1565b610999565b6040516102759190612bb8565b60405180910390f35b61029860048036038101906102939190612593565b610ab2565b005b6102a2610ad4565b6040516102af9190612c11565b60405180910390f35b6102c0610ae7565b005b6102ca610afb565b6040516102d79190612e4e565b60405180910390f35b6102e8610b01565b005b6102f2610b49565b6040516102ff9190612adb565b60405180910390f35b610322600480360381019061031d9190612593565b610b73565b005b61033e60048036038101906103399190612441565b610b95565b005b610348610bab565b005b610352610bdf565b60405161035f9190612e4e565b60405180910390f35b610370610be5565b60405161037d9190612c2c565b60405180910390f35b6103a0600480360381019061039b919061229b565b610c77565b6040516103ad9190612c11565b60405180910390f35b6103d060048036038101906103cb91906123aa565b610d0b565b005b6103ec60048036038101906103e7919061226e565b610dac565b005b6103f6610e30565b6040516104039190612e4e565b60405180910390f35b610414610e36565b6040516104219190612e4e565b60405180910390f35b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561049b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161049290612cce565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806105be57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806105ce57506105cd82610e3c565b5b9050919050565b600680546105e290613173565b80601f016020809104026020016040519081016040528092919081815260200182805461060e90613173565b801561065b5780601f106106305761010080835404028352916020019161065b565b820191906000526020600020905b81548152906001019060200180831161063e57829003601f168201915b505050505081565b606060008210158015610677575060018211155b6106b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90612d8e565b60405180910390fd5b60046106c183610ea6565b6040516020016106d2929190612a5e565b6040516020818303038152906040529050919050565b600760009054906101000a900460ff16610737576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161072e90612d6e565b60405180910390fd5b6000600b546009546107499190613089565b600a546008546107599190613089565b6107639190613002565b116107a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079a90612dae565b60405180910390fd5b60006107b033600161042a565b6107bb33600061042a565b6107c59190613002565b14610805576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107fc90612d0e565b60405180910390fd5b600954600b54141561084b5761082e336000600160405180602001604052806000815250611007565b600a6000815480929190610841906131d6565b91905055506108df565b60006108556111b8565b9050600a546008546108679190613089565b8111156108a75761088a3360018060405180602001604052806000815250611007565b600b600081548092919061089d906131d6565b91905055506108dd565b6108c4336000600160405180602001604052806000815250611007565b600a60008154809291906108d7906131d6565b91905055505b505b565b6000600b54600a546108f39190613002565b905090565b610900611254565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610946575061094585610940611254565b610c77565b5b610985576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097c90612c6e565b60405180910390fd5b610992858585858561125c565b5050505050565b606081518351146109df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d690612dee565b60405180910390fd5b6000835167ffffffffffffffff8111156109fc576109fb61333a565b5b604051908082528060200260200182016040528015610a2a5781602001602082028036833780820191505090505b50905060005b8451811015610aa757610a77858281518110610a4f57610a4e61330b565b5b6020026020010151858381518110610a6a57610a6961330b565b5b602002602001015161042a565b828281518110610a8a57610a8961330b565b5b60200260200101818152505080610aa0906131d6565b9050610a30565b508091505092915050565b610aba61157e565b8060049080519060200190610ad0929190611f46565b5050565b600760009054906101000a900460ff1681565b610aef61157e565b610af960006115fc565b565b60095481565b610b0961157e565b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050610b4757600080fd5b565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610b7b61157e565b8060059080519060200190610b91929190611f46565b5050565b610ba7610ba0611254565b83836116c2565b5050565b610bb361157e565b600760009054906101000a900460ff1615600760006101000a81548160ff021916908315150217905550565b600b5481565b606060058054610bf490613173565b80601f0160208091040260200160405190810160405280929190818152602001828054610c2090613173565b8015610c6d5780601f10610c4257610100808354040283529160200191610c6d565b820191906000526020600020905b815481529060010190602001808311610c5057829003601f168201915b5050505050905090565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610d13611254565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610d595750610d5885610d53611254565b610c77565b5b610d98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8f90612c6e565b60405180910390fd5b610da5858585858561182f565b5050505050565b610db461157e565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1b90612cae565b60405180910390fd5b610e2d816115fc565b50565b60085481565b600a5481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60606000821415610eee576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611002565b600082905060005b60008214610f20578080610f09906131d6565b915050600a82610f199190613058565b9150610ef6565b60008167ffffffffffffffff811115610f3c57610f3b61333a565b5b6040519080825280601f01601f191660200182016040528015610f6e5781602001600182028036833780820191505090505b5090505b60008514610ffb57600182610f879190613089565b9150600a85610f96919061324d565b6030610fa29190613002565b60f81b818381518110610fb857610fb761330b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85610ff49190613058565b9450610f72565b8093505050505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611077576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106e90612e2e565b60405180910390fd5b6000611081611254565b9050600061108e85611acb565b9050600061109b85611acb565b90506110ac83600089858589611b45565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461110b9190613002565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051611189929190612e69565b60405180910390a46111a083600089858589611b4d565b6111af83600089898989611b55565b50505050505050565b600080600b546009546111cb9190613089565b600a546008546111db9190613089565b6111e59190613002565b90506000600182600c544244336040516020016112059493929190612a8d565b6040516020818303038152906040528051906020012060001c611228919061324d565b6112329190613002565b9050600c6000815480929190611247906131d6565b9190505550809250505090565b600033905090565b81518351146112a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129790612e0e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611310576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130790612cee565b60405180910390fd5b600061131a611254565b905061132a818787878787611b45565b60005b84518110156114db57600085828151811061134b5761134a61330b565b5b60200260200101519050600085838151811061136a5761136961330b565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561140b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140290612d2e565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114c09190613002565b92505081905550505050806114d4906131d6565b905061132d565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611552929190612bda565b60405180910390a4611568818787878787611b4d565b611576818787878787611d3c565b505050505050565b611586611254565b73ffffffffffffffffffffffffffffffffffffffff166115a4610b49565b73ffffffffffffffffffffffffffffffffffffffff16146115fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f190612d4e565b60405180910390fd5b565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611731576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172890612dce565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118229190612c11565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561189f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189690612cee565b60405180910390fd5b60006118a9611254565b905060006118b685611acb565b905060006118c385611acb565b90506118d3838989858589611b45565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508581101561196a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196190612d2e565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a1f9190613002565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a604051611a9c929190612e69565b60405180910390a4611ab2848a8a86868a611b4d565b611ac0848a8a8a8a8a611b55565b505050505050505050565b60606000600167ffffffffffffffff811115611aea57611ae961333a565b5b604051908082528060200260200182016040528015611b185781602001602082028036833780820191505090505b5090508281600081518110611b3057611b2f61330b565b5b60200260200101818152505080915050919050565b505050505050565b505050505050565b611b748473ffffffffffffffffffffffffffffffffffffffff16611f23565b15611d34578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401611bba959493929190612b5e565b602060405180830381600087803b158015611bd457600080fd5b505af1925050508015611c0557506040513d601f19601f82011682018060405250810190611c029190612566565b60015b611cab57611c11613369565b806308c379a01415611c6e5750611c26613850565b80611c315750611c70565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c659190612c2c565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca290612c4e565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611d32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2990612c8e565b60405180910390fd5b505b505050505050565b611d5b8473ffffffffffffffffffffffffffffffffffffffff16611f23565b15611f1b578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611da1959493929190612af6565b602060405180830381600087803b158015611dbb57600080fd5b505af1925050508015611dec57506040513d601f19601f82011682018060405250810190611de99190612566565b60015b611e9257611df8613369565b806308c379a01415611e555750611e0d613850565b80611e185750611e57565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4c9190612c2c565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8990612c4e565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611f19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1090612c8e565b60405180910390fd5b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054611f5290613173565b90600052602060002090601f016020900481019282611f745760008555611fbb565b82601f10611f8d57805160ff1916838001178555611fbb565b82800160010185558215611fbb579182015b82811115611fba578251825591602001919060010190611f9f565b5b509050611fc89190611fcc565b5090565b5b80821115611fe5576000816000905550600101611fcd565b5090565b6000611ffc611ff784612eb7565b612e92565b9050808382526020820190508285602086028201111561201f5761201e613390565b5b60005b8581101561204f5781612035888261214d565b845260208401935060208301925050600181019050612022565b5050509392505050565b600061206c61206784612ee3565b612e92565b9050808382526020820190508285602086028201111561208f5761208e613390565b5b60005b858110156120bf57816120a58882612259565b845260208401935060208301925050600181019050612092565b5050509392505050565b60006120dc6120d784612f0f565b612e92565b9050828152602081018484840111156120f8576120f7613395565b5b612103848285613131565b509392505050565b600061211e61211984612f40565b612e92565b90508281526020810184848401111561213a57612139613395565b5b612145848285613131565b509392505050565b60008135905061215c816138e6565b92915050565b600082601f8301126121775761217661338b565b5b8135612187848260208601611fe9565b91505092915050565b600082601f8301126121a5576121a461338b565b5b81356121b5848260208601612059565b91505092915050565b6000813590506121cd816138fd565b92915050565b6000813590506121e281613914565b92915050565b6000815190506121f781613914565b92915050565b600082601f8301126122125761221161338b565b5b81356122228482602086016120c9565b91505092915050565b600082601f8301126122405761223f61338b565b5b813561225084826020860161210b565b91505092915050565b6000813590506122688161392b565b92915050565b6000602082840312156122845761228361339f565b5b60006122928482850161214d565b91505092915050565b600080604083850312156122b2576122b161339f565b5b60006122c08582860161214d565b92505060206122d18582860161214d565b9150509250929050565b600080600080600060a086880312156122f7576122f661339f565b5b60006123058882890161214d565b95505060206123168882890161214d565b945050604086013567ffffffffffffffff8111156123375761233661339a565b5b61234388828901612190565b935050606086013567ffffffffffffffff8111156123645761236361339a565b5b61237088828901612190565b925050608086013567ffffffffffffffff8111156123915761239061339a565b5b61239d888289016121fd565b9150509295509295909350565b600080600080600060a086880312156123c6576123c561339f565b5b60006123d48882890161214d565b95505060206123e58882890161214d565b94505060406123f688828901612259565b935050606061240788828901612259565b925050608086013567ffffffffffffffff8111156124285761242761339a565b5b612434888289016121fd565b9150509295509295909350565b600080604083850312156124585761245761339f565b5b60006124668582860161214d565b9250506020612477858286016121be565b9150509250929050565b600080604083850312156124985761249761339f565b5b60006124a68582860161214d565b92505060206124b785828601612259565b9150509250929050565b600080604083850312156124d8576124d761339f565b5b600083013567ffffffffffffffff8111156124f6576124f561339a565b5b61250285828601612162565b925050602083013567ffffffffffffffff8111156125235761252261339a565b5b61252f85828601612190565b9150509250929050565b60006020828403121561254f5761254e61339f565b5b600061255d848285016121d3565b91505092915050565b60006020828403121561257c5761257b61339f565b5b600061258a848285016121e8565b91505092915050565b6000602082840312156125a9576125a861339f565b5b600082013567ffffffffffffffff8111156125c7576125c661339a565b5b6125d38482850161222b565b91505092915050565b6000602082840312156125f2576125f161339f565b5b600061260084828501612259565b91505092915050565b60006126158383612a29565b60208301905092915050565b61262a816130bd565b82525050565b61264161263c826130bd565b61321f565b82525050565b600061265282612f96565b61265c8185612fc4565b935061266783612f71565b8060005b8381101561269857815161267f8882612609565b975061268a83612fb7565b92505060018101905061266b565b5085935050505092915050565b6126ae816130cf565b82525050565b60006126bf82612fa1565b6126c98185612fd5565b93506126d9818560208601613140565b6126e2816133a4565b840191505092915050565b60006126f882612fac565b6127028185612fe6565b9350612712818560208601613140565b61271b816133a4565b840191505092915050565b600061273182612fac565b61273b8185612ff7565b935061274b818560208601613140565b80840191505092915050565b6000815461276481613173565b61276e8186612ff7565b94506001821660008114612789576001811461279a576127cd565b60ff198316865281860193506127cd565b6127a385612f81565b60005b838110156127c5578154818901526001820191506020810190506127a6565b838801955050505b50505092915050565b60006127e3603483612fe6565b91506127ee826133cf565b604082019050919050565b6000612806602f83612fe6565b91506128118261341e565b604082019050919050565b6000612829602883612fe6565b91506128348261346d565b604082019050919050565b600061284c602683612fe6565b9150612857826134bc565b604082019050919050565b600061286f602a83612fe6565b915061287a8261350b565b604082019050919050565b6000612892602583612fe6565b915061289d8261355a565b604082019050919050565b60006128b5601f83612fe6565b91506128c0826135a9565b602082019050919050565b60006128d8602a83612fe6565b91506128e3826135d2565b604082019050919050565b60006128fb600583612ff7565b915061290682613621565b600582019050919050565b600061291e602083612fe6565b91506129298261364a565b602082019050919050565b6000612941601283612fe6565b915061294c82613673565b602082019050919050565b6000612964603083612fe6565b915061296f8261369c565b604082019050919050565b6000612987600883612fe6565b9150612992826136eb565b602082019050919050565b60006129aa602983612fe6565b91506129b582613714565b604082019050919050565b60006129cd602983612fe6565b91506129d882613763565b604082019050919050565b60006129f0602883612fe6565b91506129fb826137b2565b604082019050919050565b6000612a13602183612fe6565b9150612a1e82613801565b604082019050919050565b612a3281613127565b82525050565b612a4181613127565b82525050565b612a58612a5382613127565b613243565b82525050565b6000612a6a8285612757565b9150612a768284612726565b9150612a81826128ee565b91508190509392505050565b6000612a998287612a47565b602082019150612aa98286612a47565b602082019150612ab98285612a47565b602082019150612ac98284612630565b60148201915081905095945050505050565b6000602082019050612af06000830184612621565b92915050565b600060a082019050612b0b6000830188612621565b612b186020830187612621565b8181036040830152612b2a8186612647565b90508181036060830152612b3e8185612647565b90508181036080830152612b5281846126b4565b90509695505050505050565b600060a082019050612b736000830188612621565b612b806020830187612621565b612b8d6040830186612a38565b612b9a6060830185612a38565b8181036080830152612bac81846126b4565b90509695505050505050565b60006020820190508181036000830152612bd28184612647565b905092915050565b60006040820190508181036000830152612bf48185612647565b90508181036020830152612c088184612647565b90509392505050565b6000602082019050612c2660008301846126a5565b92915050565b60006020820190508181036000830152612c4681846126ed565b905092915050565b60006020820190508181036000830152612c67816127d6565b9050919050565b60006020820190508181036000830152612c87816127f9565b9050919050565b60006020820190508181036000830152612ca78161281c565b9050919050565b60006020820190508181036000830152612cc78161283f565b9050919050565b60006020820190508181036000830152612ce781612862565b9050919050565b60006020820190508181036000830152612d0781612885565b9050919050565b60006020820190508181036000830152612d27816128a8565b9050919050565b60006020820190508181036000830152612d47816128cb565b9050919050565b60006020820190508181036000830152612d6781612911565b9050919050565b60006020820190508181036000830152612d8781612934565b9050919050565b60006020820190508181036000830152612da781612957565b9050919050565b60006020820190508181036000830152612dc78161297a565b9050919050565b60006020820190508181036000830152612de78161299d565b9050919050565b60006020820190508181036000830152612e07816129c0565b9050919050565b60006020820190508181036000830152612e27816129e3565b9050919050565b60006020820190508181036000830152612e4781612a06565b9050919050565b6000602082019050612e636000830184612a38565b92915050565b6000604082019050612e7e6000830185612a38565b612e8b6020830184612a38565b9392505050565b6000612e9c612ead565b9050612ea882826131a5565b919050565b6000604051905090565b600067ffffffffffffffff821115612ed257612ed161333a565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612efe57612efd61333a565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612f2a57612f2961333a565b5b612f33826133a4565b9050602081019050919050565b600067ffffffffffffffff821115612f5b57612f5a61333a565b5b612f64826133a4565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061300d82613127565b915061301883613127565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561304d5761304c61327e565b5b828201905092915050565b600061306382613127565b915061306e83613127565b92508261307e5761307d6132ad565b5b828204905092915050565b600061309482613127565b915061309f83613127565b9250828210156130b2576130b161327e565b5b828203905092915050565b60006130c882613107565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561315e578082015181840152602081019050613143565b8381111561316d576000848401525b50505050565b6000600282049050600182168061318b57607f821691505b6020821081141561319f5761319e6132dc565b5b50919050565b6131ae826133a4565b810181811067ffffffffffffffff821117156131cd576131cc61333a565b5b80604052505050565b60006131e182613127565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156132145761321361327e565b5b600182019050919050565b600061322a82613231565b9050919050565b600061323c826133b5565b9050919050565b6000819050919050565b600061325882613127565b915061326383613127565b925082613273576132726132ad565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d11156133885760046000803e6133856000516133c2565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60008201527f6572206e6f7220617070726f7665640000000000000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f596f7520617265206f6e6c7920616c6c6f77656420746f206d696e7420312e00600082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4d696e74206973206e6f74206163746976650000000000000000000000000000600082015250565b7f455243313135354d657461646174613a2055524920717565727920666f72206e60008201527f6f6e6578697374656e7420746f6b656e00000000000000000000000000000000602082015250565b7f536f6c64206f7574000000000000000000000000000000000000000000000000600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d1015613860576138e3565b613868612ead565b60043d036004823e80513d602482011167ffffffffffffffff821117156138905750506138e3565b808201805167ffffffffffffffff8111156138ae57505050506138e3565b80602083010160043d0385018111156138cb5750505050506138e3565b6138da826020018501866131a5565b82955050505050505b90565b6138ef816130bd565b81146138fa57600080fd5b50565b613906816130cf565b811461391157600080fd5b50565b61391d816130db565b811461392857600080fd5b50565b61393481613127565b811461393f57600080fd5b5056fea26469706673582212200ab64edca7baf1e46063c7245f991e3cfe235e79ec4d382e0e950714447baba564736f6c6343000807003368747470733a2f2f6465616468656164732e6d7970696e6174612e636c6f75642f697066732f516d567432574670587a4b577555734c3767644737646e5a4142427a5370535074396436386e6b6d6478427a77452f68747470733a2f2f6465616468656164732e6d7970696e6174612e636c6f75642f697066732f516d5875765853327233515a4c58536e6375746f716277666a6b64686e677a717736726f6768774a4e326b364357

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101575760003560e01c8063853828b6116100c3578063e8a3d4851161007c578063e8a3d48514610368578063e985e9c514610386578063f242432a146103b6578063f2fde38b146103d2578063f52fb0e5146103ee578063fbbf79921461040c57610157565b8063853828b6146102e05780638da5cb5b146102ea578063938e3d7b14610308578063a22cb46514610324578063d3dd5fe014610340578063e5a7b05b1461034a57610157565b80632eb2c2d6116101155780632eb2c2d6146102325780634e1273f41461024e57806355f804b31461027e5780635b92ac0d1461029a578063715018a6146102b85780637a082339146102c257610157565b8062fdd58e1461015c57806301ffc9a71461018c57806306fdde03146101bc5780630e89341c146101da5780631249c58b1461020a57806318160ddd14610214575b600080fd5b61017660048036038101906101719190612481565b61042a565b6040516101839190612e4e565b60405180910390f35b6101a660048036038101906101a19190612539565b6104f3565b6040516101b39190612c11565b60405180910390f35b6101c46105d5565b6040516101d19190612c2c565b60405180910390f35b6101f460048036038101906101ef91906125dc565b610663565b6040516102019190612c2c565b60405180910390f35b6102126106e8565b005b61021c6108e1565b6040516102299190612e4e565b60405180910390f35b61024c600480360381019061024791906122db565b6108f8565b005b610268600480360381019061026391906124c1565b610999565b6040516102759190612bb8565b60405180910390f35b61029860048036038101906102939190612593565b610ab2565b005b6102a2610ad4565b6040516102af9190612c11565b60405180910390f35b6102c0610ae7565b005b6102ca610afb565b6040516102d79190612e4e565b60405180910390f35b6102e8610b01565b005b6102f2610b49565b6040516102ff9190612adb565b60405180910390f35b610322600480360381019061031d9190612593565b610b73565b005b61033e60048036038101906103399190612441565b610b95565b005b610348610bab565b005b610352610bdf565b60405161035f9190612e4e565b60405180910390f35b610370610be5565b60405161037d9190612c2c565b60405180910390f35b6103a0600480360381019061039b919061229b565b610c77565b6040516103ad9190612c11565b60405180910390f35b6103d060048036038101906103cb91906123aa565b610d0b565b005b6103ec60048036038101906103e7919061226e565b610dac565b005b6103f6610e30565b6040516104039190612e4e565b60405180910390f35b610414610e36565b6040516104219190612e4e565b60405180910390f35b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561049b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161049290612cce565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806105be57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806105ce57506105cd82610e3c565b5b9050919050565b600680546105e290613173565b80601f016020809104026020016040519081016040528092919081815260200182805461060e90613173565b801561065b5780601f106106305761010080835404028352916020019161065b565b820191906000526020600020905b81548152906001019060200180831161063e57829003601f168201915b505050505081565b606060008210158015610677575060018211155b6106b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90612d8e565b60405180910390fd5b60046106c183610ea6565b6040516020016106d2929190612a5e565b6040516020818303038152906040529050919050565b600760009054906101000a900460ff16610737576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161072e90612d6e565b60405180910390fd5b6000600b546009546107499190613089565b600a546008546107599190613089565b6107639190613002565b116107a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079a90612dae565b60405180910390fd5b60006107b033600161042a565b6107bb33600061042a565b6107c59190613002565b14610805576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107fc90612d0e565b60405180910390fd5b600954600b54141561084b5761082e336000600160405180602001604052806000815250611007565b600a6000815480929190610841906131d6565b91905055506108df565b60006108556111b8565b9050600a546008546108679190613089565b8111156108a75761088a3360018060405180602001604052806000815250611007565b600b600081548092919061089d906131d6565b91905055506108dd565b6108c4336000600160405180602001604052806000815250611007565b600a60008154809291906108d7906131d6565b91905055505b505b565b6000600b54600a546108f39190613002565b905090565b610900611254565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610946575061094585610940611254565b610c77565b5b610985576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097c90612c6e565b60405180910390fd5b610992858585858561125c565b5050505050565b606081518351146109df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d690612dee565b60405180910390fd5b6000835167ffffffffffffffff8111156109fc576109fb61333a565b5b604051908082528060200260200182016040528015610a2a5781602001602082028036833780820191505090505b50905060005b8451811015610aa757610a77858281518110610a4f57610a4e61330b565b5b6020026020010151858381518110610a6a57610a6961330b565b5b602002602001015161042a565b828281518110610a8a57610a8961330b565b5b60200260200101818152505080610aa0906131d6565b9050610a30565b508091505092915050565b610aba61157e565b8060049080519060200190610ad0929190611f46565b5050565b600760009054906101000a900460ff1681565b610aef61157e565b610af960006115fc565b565b60095481565b610b0961157e565b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050610b4757600080fd5b565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610b7b61157e565b8060059080519060200190610b91929190611f46565b5050565b610ba7610ba0611254565b83836116c2565b5050565b610bb361157e565b600760009054906101000a900460ff1615600760006101000a81548160ff021916908315150217905550565b600b5481565b606060058054610bf490613173565b80601f0160208091040260200160405190810160405280929190818152602001828054610c2090613173565b8015610c6d5780601f10610c4257610100808354040283529160200191610c6d565b820191906000526020600020905b815481529060010190602001808311610c5057829003601f168201915b5050505050905090565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610d13611254565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610d595750610d5885610d53611254565b610c77565b5b610d98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8f90612c6e565b60405180910390fd5b610da5858585858561182f565b5050505050565b610db461157e565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1b90612cae565b60405180910390fd5b610e2d816115fc565b50565b60085481565b600a5481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60606000821415610eee576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611002565b600082905060005b60008214610f20578080610f09906131d6565b915050600a82610f199190613058565b9150610ef6565b60008167ffffffffffffffff811115610f3c57610f3b61333a565b5b6040519080825280601f01601f191660200182016040528015610f6e5781602001600182028036833780820191505090505b5090505b60008514610ffb57600182610f879190613089565b9150600a85610f96919061324d565b6030610fa29190613002565b60f81b818381518110610fb857610fb761330b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85610ff49190613058565b9450610f72565b8093505050505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611077576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106e90612e2e565b60405180910390fd5b6000611081611254565b9050600061108e85611acb565b9050600061109b85611acb565b90506110ac83600089858589611b45565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461110b9190613002565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051611189929190612e69565b60405180910390a46111a083600089858589611b4d565b6111af83600089898989611b55565b50505050505050565b600080600b546009546111cb9190613089565b600a546008546111db9190613089565b6111e59190613002565b90506000600182600c544244336040516020016112059493929190612a8d565b6040516020818303038152906040528051906020012060001c611228919061324d565b6112329190613002565b9050600c6000815480929190611247906131d6565b9190505550809250505090565b600033905090565b81518351146112a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129790612e0e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611310576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130790612cee565b60405180910390fd5b600061131a611254565b905061132a818787878787611b45565b60005b84518110156114db57600085828151811061134b5761134a61330b565b5b60200260200101519050600085838151811061136a5761136961330b565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561140b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140290612d2e565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114c09190613002565b92505081905550505050806114d4906131d6565b905061132d565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611552929190612bda565b60405180910390a4611568818787878787611b4d565b611576818787878787611d3c565b505050505050565b611586611254565b73ffffffffffffffffffffffffffffffffffffffff166115a4610b49565b73ffffffffffffffffffffffffffffffffffffffff16146115fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f190612d4e565b60405180910390fd5b565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611731576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172890612dce565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118229190612c11565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561189f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189690612cee565b60405180910390fd5b60006118a9611254565b905060006118b685611acb565b905060006118c385611acb565b90506118d3838989858589611b45565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508581101561196a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196190612d2e565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a1f9190613002565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a604051611a9c929190612e69565b60405180910390a4611ab2848a8a86868a611b4d565b611ac0848a8a8a8a8a611b55565b505050505050505050565b60606000600167ffffffffffffffff811115611aea57611ae961333a565b5b604051908082528060200260200182016040528015611b185781602001602082028036833780820191505090505b5090508281600081518110611b3057611b2f61330b565b5b60200260200101818152505080915050919050565b505050505050565b505050505050565b611b748473ffffffffffffffffffffffffffffffffffffffff16611f23565b15611d34578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401611bba959493929190612b5e565b602060405180830381600087803b158015611bd457600080fd5b505af1925050508015611c0557506040513d601f19601f82011682018060405250810190611c029190612566565b60015b611cab57611c11613369565b806308c379a01415611c6e5750611c26613850565b80611c315750611c70565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c659190612c2c565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca290612c4e565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611d32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2990612c8e565b60405180910390fd5b505b505050505050565b611d5b8473ffffffffffffffffffffffffffffffffffffffff16611f23565b15611f1b578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611da1959493929190612af6565b602060405180830381600087803b158015611dbb57600080fd5b505af1925050508015611dec57506040513d601f19601f82011682018060405250810190611de99190612566565b60015b611e9257611df8613369565b806308c379a01415611e555750611e0d613850565b80611e185750611e57565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4c9190612c2c565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8990612c4e565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611f19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1090612c8e565b60405180910390fd5b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054611f5290613173565b90600052602060002090601f016020900481019282611f745760008555611fbb565b82601f10611f8d57805160ff1916838001178555611fbb565b82800160010185558215611fbb579182015b82811115611fba578251825591602001919060010190611f9f565b5b509050611fc89190611fcc565b5090565b5b80821115611fe5576000816000905550600101611fcd565b5090565b6000611ffc611ff784612eb7565b612e92565b9050808382526020820190508285602086028201111561201f5761201e613390565b5b60005b8581101561204f5781612035888261214d565b845260208401935060208301925050600181019050612022565b5050509392505050565b600061206c61206784612ee3565b612e92565b9050808382526020820190508285602086028201111561208f5761208e613390565b5b60005b858110156120bf57816120a58882612259565b845260208401935060208301925050600181019050612092565b5050509392505050565b60006120dc6120d784612f0f565b612e92565b9050828152602081018484840111156120f8576120f7613395565b5b612103848285613131565b509392505050565b600061211e61211984612f40565b612e92565b90508281526020810184848401111561213a57612139613395565b5b612145848285613131565b509392505050565b60008135905061215c816138e6565b92915050565b600082601f8301126121775761217661338b565b5b8135612187848260208601611fe9565b91505092915050565b600082601f8301126121a5576121a461338b565b5b81356121b5848260208601612059565b91505092915050565b6000813590506121cd816138fd565b92915050565b6000813590506121e281613914565b92915050565b6000815190506121f781613914565b92915050565b600082601f8301126122125761221161338b565b5b81356122228482602086016120c9565b91505092915050565b600082601f8301126122405761223f61338b565b5b813561225084826020860161210b565b91505092915050565b6000813590506122688161392b565b92915050565b6000602082840312156122845761228361339f565b5b60006122928482850161214d565b91505092915050565b600080604083850312156122b2576122b161339f565b5b60006122c08582860161214d565b92505060206122d18582860161214d565b9150509250929050565b600080600080600060a086880312156122f7576122f661339f565b5b60006123058882890161214d565b95505060206123168882890161214d565b945050604086013567ffffffffffffffff8111156123375761233661339a565b5b61234388828901612190565b935050606086013567ffffffffffffffff8111156123645761236361339a565b5b61237088828901612190565b925050608086013567ffffffffffffffff8111156123915761239061339a565b5b61239d888289016121fd565b9150509295509295909350565b600080600080600060a086880312156123c6576123c561339f565b5b60006123d48882890161214d565b95505060206123e58882890161214d565b94505060406123f688828901612259565b935050606061240788828901612259565b925050608086013567ffffffffffffffff8111156124285761242761339a565b5b612434888289016121fd565b9150509295509295909350565b600080604083850312156124585761245761339f565b5b60006124668582860161214d565b9250506020612477858286016121be565b9150509250929050565b600080604083850312156124985761249761339f565b5b60006124a68582860161214d565b92505060206124b785828601612259565b9150509250929050565b600080604083850312156124d8576124d761339f565b5b600083013567ffffffffffffffff8111156124f6576124f561339a565b5b61250285828601612162565b925050602083013567ffffffffffffffff8111156125235761252261339a565b5b61252f85828601612190565b9150509250929050565b60006020828403121561254f5761254e61339f565b5b600061255d848285016121d3565b91505092915050565b60006020828403121561257c5761257b61339f565b5b600061258a848285016121e8565b91505092915050565b6000602082840312156125a9576125a861339f565b5b600082013567ffffffffffffffff8111156125c7576125c661339a565b5b6125d38482850161222b565b91505092915050565b6000602082840312156125f2576125f161339f565b5b600061260084828501612259565b91505092915050565b60006126158383612a29565b60208301905092915050565b61262a816130bd565b82525050565b61264161263c826130bd565b61321f565b82525050565b600061265282612f96565b61265c8185612fc4565b935061266783612f71565b8060005b8381101561269857815161267f8882612609565b975061268a83612fb7565b92505060018101905061266b565b5085935050505092915050565b6126ae816130cf565b82525050565b60006126bf82612fa1565b6126c98185612fd5565b93506126d9818560208601613140565b6126e2816133a4565b840191505092915050565b60006126f882612fac565b6127028185612fe6565b9350612712818560208601613140565b61271b816133a4565b840191505092915050565b600061273182612fac565b61273b8185612ff7565b935061274b818560208601613140565b80840191505092915050565b6000815461276481613173565b61276e8186612ff7565b94506001821660008114612789576001811461279a576127cd565b60ff198316865281860193506127cd565b6127a385612f81565b60005b838110156127c5578154818901526001820191506020810190506127a6565b838801955050505b50505092915050565b60006127e3603483612fe6565b91506127ee826133cf565b604082019050919050565b6000612806602f83612fe6565b91506128118261341e565b604082019050919050565b6000612829602883612fe6565b91506128348261346d565b604082019050919050565b600061284c602683612fe6565b9150612857826134bc565b604082019050919050565b600061286f602a83612fe6565b915061287a8261350b565b604082019050919050565b6000612892602583612fe6565b915061289d8261355a565b604082019050919050565b60006128b5601f83612fe6565b91506128c0826135a9565b602082019050919050565b60006128d8602a83612fe6565b91506128e3826135d2565b604082019050919050565b60006128fb600583612ff7565b915061290682613621565b600582019050919050565b600061291e602083612fe6565b91506129298261364a565b602082019050919050565b6000612941601283612fe6565b915061294c82613673565b602082019050919050565b6000612964603083612fe6565b915061296f8261369c565b604082019050919050565b6000612987600883612fe6565b9150612992826136eb565b602082019050919050565b60006129aa602983612fe6565b91506129b582613714565b604082019050919050565b60006129cd602983612fe6565b91506129d882613763565b604082019050919050565b60006129f0602883612fe6565b91506129fb826137b2565b604082019050919050565b6000612a13602183612fe6565b9150612a1e82613801565b604082019050919050565b612a3281613127565b82525050565b612a4181613127565b82525050565b612a58612a5382613127565b613243565b82525050565b6000612a6a8285612757565b9150612a768284612726565b9150612a81826128ee565b91508190509392505050565b6000612a998287612a47565b602082019150612aa98286612a47565b602082019150612ab98285612a47565b602082019150612ac98284612630565b60148201915081905095945050505050565b6000602082019050612af06000830184612621565b92915050565b600060a082019050612b0b6000830188612621565b612b186020830187612621565b8181036040830152612b2a8186612647565b90508181036060830152612b3e8185612647565b90508181036080830152612b5281846126b4565b90509695505050505050565b600060a082019050612b736000830188612621565b612b806020830187612621565b612b8d6040830186612a38565b612b9a6060830185612a38565b8181036080830152612bac81846126b4565b90509695505050505050565b60006020820190508181036000830152612bd28184612647565b905092915050565b60006040820190508181036000830152612bf48185612647565b90508181036020830152612c088184612647565b90509392505050565b6000602082019050612c2660008301846126a5565b92915050565b60006020820190508181036000830152612c4681846126ed565b905092915050565b60006020820190508181036000830152612c67816127d6565b9050919050565b60006020820190508181036000830152612c87816127f9565b9050919050565b60006020820190508181036000830152612ca78161281c565b9050919050565b60006020820190508181036000830152612cc78161283f565b9050919050565b60006020820190508181036000830152612ce781612862565b9050919050565b60006020820190508181036000830152612d0781612885565b9050919050565b60006020820190508181036000830152612d27816128a8565b9050919050565b60006020820190508181036000830152612d47816128cb565b9050919050565b60006020820190508181036000830152612d6781612911565b9050919050565b60006020820190508181036000830152612d8781612934565b9050919050565b60006020820190508181036000830152612da781612957565b9050919050565b60006020820190508181036000830152612dc78161297a565b9050919050565b60006020820190508181036000830152612de78161299d565b9050919050565b60006020820190508181036000830152612e07816129c0565b9050919050565b60006020820190508181036000830152612e27816129e3565b9050919050565b60006020820190508181036000830152612e4781612a06565b9050919050565b6000602082019050612e636000830184612a38565b92915050565b6000604082019050612e7e6000830185612a38565b612e8b6020830184612a38565b9392505050565b6000612e9c612ead565b9050612ea882826131a5565b919050565b6000604051905090565b600067ffffffffffffffff821115612ed257612ed161333a565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612efe57612efd61333a565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612f2a57612f2961333a565b5b612f33826133a4565b9050602081019050919050565b600067ffffffffffffffff821115612f5b57612f5a61333a565b5b612f64826133a4565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061300d82613127565b915061301883613127565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561304d5761304c61327e565b5b828201905092915050565b600061306382613127565b915061306e83613127565b92508261307e5761307d6132ad565b5b828204905092915050565b600061309482613127565b915061309f83613127565b9250828210156130b2576130b161327e565b5b828203905092915050565b60006130c882613107565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561315e578082015181840152602081019050613143565b8381111561316d576000848401525b50505050565b6000600282049050600182168061318b57607f821691505b6020821081141561319f5761319e6132dc565b5b50919050565b6131ae826133a4565b810181811067ffffffffffffffff821117156131cd576131cc61333a565b5b80604052505050565b60006131e182613127565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156132145761321361327e565b5b600182019050919050565b600061322a82613231565b9050919050565b600061323c826133b5565b9050919050565b6000819050919050565b600061325882613127565b915061326383613127565b925082613273576132726132ad565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d11156133885760046000803e6133856000516133c2565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60008201527f6572206e6f7220617070726f7665640000000000000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f596f7520617265206f6e6c7920616c6c6f77656420746f206d696e7420312e00600082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4d696e74206973206e6f74206163746976650000000000000000000000000000600082015250565b7f455243313135354d657461646174613a2055524920717565727920666f72206e60008201527f6f6e6578697374656e7420746f6b656e00000000000000000000000000000000602082015250565b7f536f6c64206f7574000000000000000000000000000000000000000000000000600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d1015613860576138e3565b613868612ead565b60043d036004823e80513d602482011167ffffffffffffffff821117156138905750506138e3565b808201805167ffffffffffffffff8111156138ae57505050506138e3565b80602083010160043d0385018111156138cb5750505050506138e3565b6138da826020018501866131a5565b82955050505050505b90565b6138ef816130bd565b81146138fa57600080fd5b50565b613906816130cf565b811461391157600080fd5b50565b61391d816130db565b811461392857600080fd5b50565b61393481613127565b811461393f57600080fd5b5056fea26469706673582212200ab64edca7baf1e46063c7245f991e3cfe235e79ec4d382e0e950714447baba564736f6c63430008070033

Deployed Bytecode Sourcemap

43803:2819:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26121:230;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25144:310;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44175:48;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44461:271;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44740:848;;;:::i;:::-;;46039:110;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28065:439;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26517:524;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45926:105;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44232:32;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5273:103;;;:::i;:::-;;44315:32;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46502:117;;;:::i;:::-;;4625:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45692:121;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27114:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45596:88;;;:::i;:::-;;44399:34;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45821:97;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27341:168;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27581:407;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5531:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44273:35;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44356:36;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26121:230;26207:7;26254:1;26235:21;;:7;:21;;;;26227:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;26321:9;:13;26331:2;26321:13;;;;;;;;;;;:22;26335:7;26321:22;;;;;;;;;;;;;;;;26314:29;;26121:230;;;;:::o;25144:310::-;25246:4;25298:26;25283:41;;;:11;:41;;;;:110;;;;25356:37;25341:52;;;:11;:52;;;;25283:110;:163;;;;25410:36;25434:11;25410:23;:36::i;:::-;25283:163;25263:183;;25144:310;;;:::o;44175:48::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;44461:271::-;44521:13;44566:1;44555:7;:12;;:28;;;;;44582:1;44571:7;:12;;44555:28;44547:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;44678:8;44688:25;44705:7;44688:16;:25::i;:::-;44661:62;;;;;;;;;:::i;:::-;;;;;;;;;;;;;44647:77;;44461:271;;;:::o;44740:848::-;44784:12;;;;;;;;;;;44776:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;44930:1;44911:15;;44895:13;;:31;;;;:::i;:::-;44873:17;;44855:15;;:35;;;;:::i;:::-;44854:73;;;;:::i;:::-;:77;44832:135;;;;;;;;;;;;:::i;:::-;;;;;;;;;45057:1;45029:24;45039:10;45051:1;45029:9;:24::i;:::-;45002;45012:10;45024:1;45002:9;:24::i;:::-;:51;;;;:::i;:::-;:56;44980:137;;;;;;;;;;;;:::i;:::-;;;;;;;;;45152:13;;45133:15;;:32;45130:441;;;45181:27;45187:10;45199:1;45202;45181:27;;;;;;;;;;;;:5;:27::i;:::-;45223:17;;:19;;;;;;;;;:::i;:::-;;;;;;45130:441;;;45273:11;45287:8;:6;:8::i;:::-;45273:22;;45340:17;;45324:15;;:33;;;;:::i;:::-;45313:6;:45;45310:250;;;45378:27;45384:10;45396:1;45399;45378:27;;;;;;;;;;;;:5;:27::i;:::-;45424:15;;:17;;;;;;;;;:::i;:::-;;;;;;45310:250;;;45479:27;45485:10;45497:1;45500;45479:27;;;;;;;;;;;;:5;:27::i;:::-;45525:17;;:19;;;;;;;;;:::i;:::-;;;;;;45310:250;45258:313;45130:441;44740:848::o;46039:110::-;46083:4;46126:15;;46106:17;;:35;;;;:::i;:::-;46099:42;;46039:110;:::o;28065:439::-;28306:12;:10;:12::i;:::-;28298:20;;:4;:20;;;:60;;;;28322:36;28339:4;28345:12;:10;:12::i;:::-;28322:16;:36::i;:::-;28298:60;28276:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;28444:52;28467:4;28473:2;28477:3;28482:7;28491:4;28444:22;:52::i;:::-;28065:439;;;;;:::o;26517:524::-;26673:16;26734:3;:10;26715:8;:15;:29;26707:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;26803:30;26850:8;:15;26836:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26803:63;;26884:9;26879:122;26903:8;:15;26899:1;:19;26879:122;;;26959:30;26969:8;26978:1;26969:11;;;;;;;;:::i;:::-;;;;;;;;26982:3;26986:1;26982:6;;;;;;;;:::i;:::-;;;;;;;;26959:9;:30::i;:::-;26940:13;26954:1;26940:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;26920:3;;;;:::i;:::-;;;26879:122;;;;27020:13;27013:20;;;26517:524;;;;:::o;45926:105::-;4511:13;:11;:13::i;:::-;46013:10:::1;46002:8;:21;;;;;;;;;;;;:::i;:::-;;45926:105:::0;:::o;44232:32::-;;;;;;;;;;;;;:::o;5273:103::-;4511:13;:11;:13::i;:::-;5338:30:::1;5365:1;5338:18;:30::i;:::-;5273:103::o:0;44315:32::-;;;;:::o;46502:117::-;4511:13;:11;:13::i;:::-;46571:10:::1;46563:24;;:47;46588:21;46563:47;;;;;;;;;;;;;;;;;;;;;;;46555:56;;;::::0;::::1;;46502:117::o:0;4625:87::-;4671:7;4698:6;;;;;;;;;;;4691:13;;4625:87;:::o;45692:121::-;4511:13;:11;:13::i;:::-;45791:14:::1;45776:12;:29;;;;;;;;;;;;:::i;:::-;;45692:121:::0;:::o;27114:155::-;27209:52;27228:12;:10;:12::i;:::-;27242:8;27252;27209:18;:52::i;:::-;27114:155;;:::o;45596:88::-;4511:13;:11;:13::i;:::-;45664:12:::1;;;;;;;;;;;45663:13;45648:12;;:28;;;;;;;;;;;;;;;;;;45596:88::o:0;44399:34::-;;;;:::o;45821:97::-;45865:13;45898:12;45891:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45821:97;:::o;27341:168::-;27440:4;27464:18;:27;27483:7;27464:27;;;;;;;;;;;;;;;:37;27492:8;27464:37;;;;;;;;;;;;;;;;;;;;;;;;;27457:44;;27341:168;;;;:::o;27581:407::-;27797:12;:10;:12::i;:::-;27789:20;;:4;:20;;;:60;;;;27813:36;27830:4;27836:12;:10;:12::i;:::-;27813:16;:36::i;:::-;27789:60;27767:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;27935:45;27953:4;27959:2;27963;27967:6;27975:4;27935:17;:45::i;:::-;27581:407;;;;;:::o;5531:201::-;4511:13;:11;:13::i;:::-;5640:1:::1;5620:22;;:8;:22;;;;5612:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5696:28;5715:8;5696:18;:28::i;:::-;5531:201:::0;:::o;44273:35::-;;;;:::o;44356:36::-;;;;:::o;16425:157::-;16510:4;16549:25;16534:40;;;:11;:40;;;;16527:47;;16425:157;;;:::o;430:723::-;486:13;716:1;707:5;:10;703:53;;;734:10;;;;;;;;;;;;;;;;;;;;;703:53;766:12;781:5;766:20;;797:14;822:78;837:1;829:4;:9;822:78;;855:8;;;;;:::i;:::-;;;;886:2;878:10;;;;;:::i;:::-;;;822:78;;;910:19;942:6;932:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;910:39;;960:154;976:1;967:5;:10;960:154;;1004:1;994:11;;;;;:::i;:::-;;;1071:2;1063:5;:10;;;;:::i;:::-;1050:2;:24;;;;:::i;:::-;1037:39;;1020:6;1027;1020:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1100:2;1091:11;;;;;:::i;:::-;;;960:154;;;1138:6;1124:21;;;;;430:723;;;;:::o;32764:729::-;32931:1;32917:16;;:2;:16;;;;32909:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;32984:16;33003:12;:10;:12::i;:::-;32984:31;;33026:20;33049:21;33067:2;33049:17;:21::i;:::-;33026:44;;33081:24;33108:25;33126:6;33108:17;:25::i;:::-;33081:52;;33146:66;33167:8;33185:1;33189:2;33193:3;33198:7;33207:4;33146:20;:66::i;:::-;33246:6;33225:9;:13;33235:2;33225:13;;;;;;;;;;;:17;33239:2;33225:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;33305:2;33268:52;;33301:1;33268:52;;33283:8;33268:52;;;33309:2;33313:6;33268:52;;;;;;;:::i;:::-;;;;;;;;33333:65;33353:8;33371:1;33375:2;33379:3;33384:7;33393:4;33333:19;:65::i;:::-;33411:74;33442:8;33460:1;33464:2;33468;33472:6;33480:4;33411:30;:74::i;:::-;32898:595;;;32764:729;;;;:::o;46157:337::-;46193:4;46210:13;46279:15;;46265:13;;:29;;;;:::i;:::-;46243:17;;46227:15;;:33;;;;:::i;:::-;46226:69;;;;:::i;:::-;46210:85;;46306:17;46427:1;46417:8;46359:5;;46366:15;46383:16;46401:10;46342:70;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;46332:81;;;;;;46327:87;;:98;;;;:::i;:::-;46326:102;;;;:::i;:::-;46306:122;;46449:5;;:7;;;;;;;;;:::i;:::-;;;;;;46474:12;46467:19;;;;46157:337;:::o;3176:98::-;3229:7;3256:10;3249:17;;3176:98;:::o;30300:1146::-;30527:7;:14;30513:3;:10;:28;30505:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;30619:1;30605:16;;:2;:16;;;;30597:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;30676:16;30695:12;:10;:12::i;:::-;30676:31;;30720:60;30741:8;30751:4;30757:2;30761:3;30766:7;30775:4;30720:20;:60::i;:::-;30798:9;30793:421;30817:3;:10;30813:1;:14;30793:421;;;30849:10;30862:3;30866:1;30862:6;;;;;;;;:::i;:::-;;;;;;;;30849:19;;30883:14;30900:7;30908:1;30900:10;;;;;;;;:::i;:::-;;;;;;;;30883:27;;30927:19;30949:9;:13;30959:2;30949:13;;;;;;;;;;;:19;30963:4;30949:19;;;;;;;;;;;;;;;;30927:41;;31006:6;30991:11;:21;;30983:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;31139:6;31125:11;:20;31103:9;:13;31113:2;31103:13;;;;;;;;;;;:19;31117:4;31103:19;;;;;;;;;;;;;;;:42;;;;31196:6;31175:9;:13;31185:2;31175:13;;;;;;;;;;;:17;31189:2;31175:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;30834:380;;;30829:3;;;;:::i;:::-;;;30793:421;;;;31261:2;31231:47;;31255:4;31231:47;;31245:8;31231:47;;;31265:3;31270:7;31231:47;;;;;;;:::i;:::-;;;;;;;;31291:59;31311:8;31321:4;31327:2;31331:3;31336:7;31345:4;31291:19;:59::i;:::-;31363:75;31399:8;31409:4;31415:2;31419:3;31424:7;31433:4;31363:35;:75::i;:::-;30494:952;30300:1146;;;;;:::o;4790:132::-;4865:12;:10;:12::i;:::-;4854:23;;:7;:5;:7::i;:::-;:23;;;4846:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4790:132::o;5892:191::-;5966:16;5985:6;;;;;;;;;;;5966:25;;6011:8;6002:6;;:17;;;;;;;;;;;;;;;;;;6066:8;6035:40;;6056:8;6035:40;;;;;;;;;;;;5955:128;5892:191;:::o;37177:331::-;37332:8;37323:17;;:5;:17;;;;37315:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;37435:8;37397:18;:25;37416:5;37397:25;;;;;;;;;;;;;;;:35;37423:8;37397:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;37481:8;37459:41;;37474:5;37459:41;;;37491:8;37459:41;;;;;;:::i;:::-;;;;;;;;37177:331;;;:::o;28968:974::-;29170:1;29156:16;;:2;:16;;;;29148:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;29227:16;29246:12;:10;:12::i;:::-;29227:31;;29269:20;29292:21;29310:2;29292:17;:21::i;:::-;29269:44;;29324:24;29351:25;29369:6;29351:17;:25::i;:::-;29324:52;;29389:60;29410:8;29420:4;29426:2;29430:3;29435:7;29444:4;29389:20;:60::i;:::-;29462:19;29484:9;:13;29494:2;29484:13;;;;;;;;;;;:19;29498:4;29484:19;;;;;;;;;;;;;;;;29462:41;;29537:6;29522:11;:21;;29514:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;29662:6;29648:11;:20;29626:9;:13;29636:2;29626:13;;;;;;;;;;;:19;29640:4;29626:19;;;;;;;;;;;;;;;:42;;;;29711:6;29690:9;:13;29700:2;29690:13;;;;;;;;;;;:17;29704:2;29690:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;29766:2;29735:46;;29760:4;29735:46;;29750:8;29735:46;;;29770:2;29774:6;29735:46;;;;;;;:::i;:::-;;;;;;;;29794:59;29814:8;29824:4;29830:2;29834:3;29839:7;29848:4;29794:19;:59::i;:::-;29866:68;29897:8;29907:4;29913:2;29917;29921:6;29929:4;29866:30;:68::i;:::-;29137:805;;;;28968:974;;;;;:::o;41443:198::-;41509:16;41538:22;41577:1;41563:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41538:41;;41601:7;41590:5;41596:1;41590:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;41628:5;41621:12;;;41443:198;;;:::o;38466:221::-;;;;;;;:::o;39642:220::-;;;;;;;:::o;39870:744::-;40085:15;:2;:13;;;:15::i;:::-;40081:526;;;40138:2;40121:38;;;40160:8;40170:4;40176:2;40180:6;40188:4;40121:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;40117:479;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;40469:6;40462:14;;;;;;;;;;;:::i;:::-;;;;;;;;40117:479;;;40518:62;;;;;;;;;;:::i;:::-;;;;;;;;40117:479;40255:43;;;40243:55;;;:8;:55;;;;40239:154;;40323:50;;;;;;;;;;:::i;:::-;;;;;;;;40239:154;40194:214;40081:526;39870:744;;;;;;:::o;40622:813::-;40862:15;:2;:13;;;:15::i;:::-;40858:570;;;40915:2;40898:43;;;40942:8;40952:4;40958:3;40963:7;40972:4;40898:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;40894:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;41290:6;41283:14;;;;;;;;;;;:::i;:::-;;;;;;;;40894:523;;;41339:62;;;;;;;;;;:::i;:::-;;;;;;;;40894:523;41071:48;;;41059:60;;;:8;:60;;;;41055:159;;41144:50;;;;;;;;;;:::i;:::-;;;;;;;;41055:159;40978:251;40858:570;40622:813;;;;;;:::o;7323:326::-;7383:4;7640:1;7618:7;:19;;;:23;7611:30;;7323:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722: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:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;769:::-;865:5;890:81;906:64;963:6;906:64;:::i;:::-;890:81;:::i;:::-;881:90;;991:5;1020:6;1013:5;1006:21;1054:4;1047:5;1043:16;1036:23;;1080:6;1130:3;1122:4;1114:6;1110:17;1105:3;1101:27;1098:36;1095:143;;;1149:79;;:::i;:::-;1095:143;1262:1;1247:238;1272:6;1269:1;1266:13;1247:238;;;1340:3;1369:37;1402:3;1390:10;1369:37;:::i;:::-;1364:3;1357:50;1436:4;1431:3;1427:14;1420:21;;1470:4;1465:3;1461:14;1454:21;;1307:178;1294:1;1291;1287:9;1282:14;;1247:238;;;1251:14;871:620;;769:722;;;;;:::o;1497:410::-;1574:5;1599:65;1615:48;1656:6;1615:48;:::i;:::-;1599:65;:::i;:::-;1590:74;;1687:6;1680:5;1673:21;1725:4;1718:5;1714:16;1763:3;1754:6;1749:3;1745:16;1742:25;1739:112;;;1770:79;;:::i;:::-;1739:112;1860:41;1894:6;1889:3;1884;1860:41;:::i;:::-;1580:327;1497:410;;;;;:::o;1913:412::-;1991:5;2016:66;2032:49;2074:6;2032:49;:::i;:::-;2016:66;:::i;:::-;2007:75;;2105:6;2098:5;2091:21;2143:4;2136:5;2132:16;2181:3;2172:6;2167:3;2163:16;2160:25;2157:112;;;2188:79;;:::i;:::-;2157:112;2278:41;2312:6;2307:3;2302;2278:41;:::i;:::-;1997:328;1913:412;;;;;:::o;2331:139::-;2377:5;2415:6;2402:20;2393:29;;2431:33;2458:5;2431:33;:::i;:::-;2331:139;;;;:::o;2493:370::-;2564:5;2613:3;2606:4;2598:6;2594:17;2590:27;2580:122;;2621:79;;:::i;:::-;2580:122;2738:6;2725:20;2763:94;2853:3;2845:6;2838:4;2830:6;2826:17;2763:94;:::i;:::-;2754:103;;2570:293;2493:370;;;;:::o;2886:::-;2957:5;3006:3;2999:4;2991:6;2987:17;2983:27;2973:122;;3014:79;;:::i;:::-;2973:122;3131:6;3118:20;3156:94;3246:3;3238:6;3231:4;3223:6;3219:17;3156:94;:::i;:::-;3147:103;;2963:293;2886:370;;;;:::o;3262:133::-;3305:5;3343:6;3330:20;3321:29;;3359:30;3383:5;3359:30;:::i;:::-;3262:133;;;;:::o;3401:137::-;3446:5;3484:6;3471:20;3462:29;;3500:32;3526:5;3500:32;:::i;:::-;3401:137;;;;:::o;3544:141::-;3600:5;3631:6;3625:13;3616:22;;3647:32;3673:5;3647:32;:::i;:::-;3544:141;;;;:::o;3704:338::-;3759:5;3808:3;3801:4;3793:6;3789:17;3785:27;3775:122;;3816:79;;:::i;:::-;3775:122;3933:6;3920:20;3958:78;4032:3;4024:6;4017:4;4009:6;4005:17;3958:78;:::i;:::-;3949:87;;3765:277;3704:338;;;;:::o;4062:340::-;4118:5;4167:3;4160:4;4152:6;4148:17;4144:27;4134:122;;4175:79;;:::i;:::-;4134:122;4292:6;4279:20;4317:79;4392:3;4384:6;4377:4;4369:6;4365:17;4317:79;:::i;:::-;4308:88;;4124:278;4062:340;;;;:::o;4408:139::-;4454:5;4492:6;4479:20;4470:29;;4508:33;4535:5;4508:33;:::i;:::-;4408:139;;;;:::o;4553:329::-;4612:6;4661:2;4649:9;4640:7;4636:23;4632:32;4629:119;;;4667:79;;:::i;:::-;4629:119;4787:1;4812:53;4857:7;4848:6;4837:9;4833:22;4812:53;:::i;:::-;4802:63;;4758:117;4553:329;;;;:::o;4888:474::-;4956:6;4964;5013:2;5001:9;4992:7;4988:23;4984:32;4981:119;;;5019:79;;:::i;:::-;4981:119;5139:1;5164:53;5209:7;5200:6;5189:9;5185:22;5164:53;:::i;:::-;5154:63;;5110:117;5266:2;5292:53;5337:7;5328:6;5317:9;5313:22;5292:53;:::i;:::-;5282:63;;5237:118;4888:474;;;;;:::o;5368:1509::-;5522:6;5530;5538;5546;5554;5603:3;5591:9;5582:7;5578:23;5574:33;5571:120;;;5610:79;;:::i;:::-;5571:120;5730:1;5755:53;5800:7;5791:6;5780:9;5776:22;5755:53;:::i;:::-;5745:63;;5701:117;5857:2;5883:53;5928:7;5919:6;5908:9;5904:22;5883:53;:::i;:::-;5873:63;;5828:118;6013:2;6002:9;5998:18;5985:32;6044:18;6036:6;6033:30;6030:117;;;6066:79;;:::i;:::-;6030:117;6171:78;6241:7;6232:6;6221:9;6217:22;6171:78;:::i;:::-;6161:88;;5956:303;6326:2;6315:9;6311:18;6298:32;6357:18;6349:6;6346:30;6343:117;;;6379:79;;:::i;:::-;6343:117;6484:78;6554:7;6545:6;6534:9;6530:22;6484:78;:::i;:::-;6474:88;;6269:303;6639:3;6628:9;6624:19;6611:33;6671:18;6663:6;6660:30;6657:117;;;6693:79;;:::i;:::-;6657:117;6798:62;6852:7;6843:6;6832:9;6828:22;6798:62;:::i;:::-;6788:72;;6582:288;5368:1509;;;;;;;;:::o;6883:1089::-;6987:6;6995;7003;7011;7019;7068:3;7056:9;7047:7;7043:23;7039:33;7036:120;;;7075:79;;:::i;:::-;7036:120;7195:1;7220:53;7265:7;7256:6;7245:9;7241:22;7220:53;:::i;:::-;7210:63;;7166:117;7322:2;7348:53;7393:7;7384:6;7373:9;7369:22;7348:53;:::i;:::-;7338:63;;7293:118;7450:2;7476:53;7521:7;7512:6;7501:9;7497:22;7476:53;:::i;:::-;7466:63;;7421:118;7578:2;7604:53;7649:7;7640:6;7629:9;7625:22;7604:53;:::i;:::-;7594:63;;7549:118;7734:3;7723:9;7719:19;7706:33;7766:18;7758:6;7755:30;7752:117;;;7788:79;;:::i;:::-;7752:117;7893:62;7947:7;7938:6;7927:9;7923:22;7893:62;:::i;:::-;7883:72;;7677:288;6883:1089;;;;;;;;:::o;7978:468::-;8043:6;8051;8100:2;8088:9;8079:7;8075:23;8071:32;8068:119;;;8106:79;;:::i;:::-;8068:119;8226:1;8251:53;8296:7;8287:6;8276:9;8272:22;8251:53;:::i;:::-;8241:63;;8197:117;8353:2;8379:50;8421:7;8412:6;8401:9;8397:22;8379:50;:::i;:::-;8369:60;;8324:115;7978:468;;;;;:::o;8452:474::-;8520:6;8528;8577:2;8565:9;8556:7;8552:23;8548:32;8545:119;;;8583:79;;:::i;:::-;8545:119;8703:1;8728:53;8773:7;8764:6;8753:9;8749:22;8728:53;:::i;:::-;8718:63;;8674:117;8830:2;8856:53;8901:7;8892:6;8881:9;8877:22;8856:53;:::i;:::-;8846:63;;8801:118;8452:474;;;;;:::o;8932:894::-;9050:6;9058;9107:2;9095:9;9086:7;9082:23;9078:32;9075:119;;;9113:79;;:::i;:::-;9075:119;9261:1;9250:9;9246:17;9233:31;9291:18;9283:6;9280:30;9277:117;;;9313:79;;:::i;:::-;9277:117;9418:78;9488:7;9479:6;9468:9;9464:22;9418:78;:::i;:::-;9408:88;;9204:302;9573:2;9562:9;9558:18;9545:32;9604:18;9596:6;9593:30;9590:117;;;9626:79;;:::i;:::-;9590:117;9731:78;9801:7;9792:6;9781:9;9777:22;9731:78;:::i;:::-;9721:88;;9516:303;8932:894;;;;;:::o;9832:327::-;9890:6;9939:2;9927:9;9918:7;9914:23;9910:32;9907:119;;;9945:79;;:::i;:::-;9907:119;10065:1;10090:52;10134:7;10125:6;10114:9;10110:22;10090:52;:::i;:::-;10080:62;;10036:116;9832:327;;;;:::o;10165:349::-;10234:6;10283:2;10271:9;10262:7;10258:23;10254:32;10251:119;;;10289:79;;:::i;:::-;10251:119;10409:1;10434:63;10489:7;10480:6;10469:9;10465:22;10434:63;:::i;:::-;10424:73;;10380:127;10165:349;;;;:::o;10520:509::-;10589:6;10638:2;10626:9;10617:7;10613:23;10609:32;10606:119;;;10644:79;;:::i;:::-;10606:119;10792:1;10781:9;10777:17;10764:31;10822:18;10814:6;10811:30;10808:117;;;10844:79;;:::i;:::-;10808:117;10949:63;11004:7;10995:6;10984:9;10980:22;10949:63;:::i;:::-;10939:73;;10735:287;10520:509;;;;:::o;11035:329::-;11094:6;11143:2;11131:9;11122:7;11118:23;11114:32;11111:119;;;11149:79;;:::i;:::-;11111:119;11269:1;11294:53;11339:7;11330:6;11319:9;11315:22;11294:53;:::i;:::-;11284:63;;11240:117;11035:329;;;;:::o;11370:179::-;11439:10;11460:46;11502:3;11494:6;11460:46;:::i;:::-;11538:4;11533:3;11529:14;11515:28;;11370:179;;;;:::o;11555:118::-;11642:24;11660:5;11642:24;:::i;:::-;11637:3;11630:37;11555:118;;:::o;11679:157::-;11784:45;11804:24;11822:5;11804:24;:::i;:::-;11784:45;:::i;:::-;11779:3;11772:58;11679:157;;:::o;11872:732::-;11991:3;12020:54;12068:5;12020:54;:::i;:::-;12090:86;12169:6;12164:3;12090:86;:::i;:::-;12083:93;;12200:56;12250:5;12200:56;:::i;:::-;12279:7;12310:1;12295:284;12320:6;12317:1;12314:13;12295:284;;;12396:6;12390:13;12423:63;12482:3;12467:13;12423:63;:::i;:::-;12416:70;;12509:60;12562:6;12509:60;:::i;:::-;12499:70;;12355:224;12342:1;12339;12335:9;12330:14;;12295:284;;;12299:14;12595:3;12588:10;;11996:608;;;11872:732;;;;:::o;12610:109::-;12691:21;12706:5;12691:21;:::i;:::-;12686:3;12679:34;12610:109;;:::o;12725:360::-;12811:3;12839:38;12871:5;12839:38;:::i;:::-;12893:70;12956:6;12951:3;12893:70;:::i;:::-;12886:77;;12972:52;13017:6;13012:3;13005:4;12998:5;12994:16;12972:52;:::i;:::-;13049:29;13071:6;13049:29;:::i;:::-;13044:3;13040:39;13033:46;;12815:270;12725:360;;;;:::o;13091:364::-;13179:3;13207:39;13240:5;13207:39;:::i;:::-;13262:71;13326:6;13321:3;13262:71;:::i;:::-;13255:78;;13342:52;13387:6;13382:3;13375:4;13368:5;13364:16;13342:52;:::i;:::-;13419:29;13441:6;13419:29;:::i;:::-;13414:3;13410:39;13403:46;;13183:272;13091:364;;;;:::o;13461:377::-;13567:3;13595:39;13628:5;13595:39;:::i;:::-;13650:89;13732:6;13727:3;13650:89;:::i;:::-;13643:96;;13748:52;13793:6;13788:3;13781:4;13774:5;13770:16;13748:52;:::i;:::-;13825:6;13820:3;13816:16;13809:23;;13571:267;13461:377;;;;:::o;13868:845::-;13971:3;14008:5;14002:12;14037:36;14063:9;14037:36;:::i;:::-;14089:89;14171:6;14166:3;14089:89;:::i;:::-;14082:96;;14209:1;14198:9;14194:17;14225:1;14220:137;;;;14371:1;14366:341;;;;14187:520;;14220:137;14304:4;14300:9;14289;14285:25;14280:3;14273:38;14340:6;14335:3;14331:16;14324:23;;14220:137;;14366:341;14433:38;14465:5;14433:38;:::i;:::-;14493:1;14507:154;14521:6;14518:1;14515:13;14507:154;;;14595:7;14589:14;14585:1;14580:3;14576:11;14569:35;14645:1;14636:7;14632:15;14621:26;;14543:4;14540:1;14536:12;14531:17;;14507:154;;;14690:6;14685:3;14681:16;14674:23;;14373:334;;14187:520;;13975:738;;13868:845;;;;:::o;14719:366::-;14861:3;14882:67;14946:2;14941:3;14882:67;:::i;:::-;14875:74;;14958:93;15047:3;14958:93;:::i;:::-;15076:2;15071:3;15067:12;15060:19;;14719:366;;;:::o;15091:::-;15233:3;15254:67;15318:2;15313:3;15254:67;:::i;:::-;15247:74;;15330:93;15419:3;15330:93;:::i;:::-;15448:2;15443:3;15439:12;15432:19;;15091:366;;;:::o;15463:::-;15605:3;15626:67;15690:2;15685:3;15626:67;:::i;:::-;15619:74;;15702:93;15791:3;15702:93;:::i;:::-;15820:2;15815:3;15811:12;15804:19;;15463:366;;;:::o;15835:::-;15977:3;15998:67;16062:2;16057:3;15998:67;:::i;:::-;15991:74;;16074:93;16163:3;16074:93;:::i;:::-;16192:2;16187:3;16183:12;16176:19;;15835:366;;;:::o;16207:::-;16349:3;16370:67;16434:2;16429:3;16370:67;:::i;:::-;16363:74;;16446:93;16535:3;16446:93;:::i;:::-;16564:2;16559:3;16555:12;16548:19;;16207:366;;;:::o;16579:::-;16721:3;16742:67;16806:2;16801:3;16742:67;:::i;:::-;16735:74;;16818:93;16907:3;16818:93;:::i;:::-;16936:2;16931:3;16927:12;16920:19;;16579:366;;;:::o;16951:::-;17093:3;17114:67;17178:2;17173:3;17114:67;:::i;:::-;17107:74;;17190:93;17279:3;17190:93;:::i;:::-;17308:2;17303:3;17299:12;17292:19;;16951:366;;;:::o;17323:::-;17465:3;17486:67;17550:2;17545:3;17486:67;:::i;:::-;17479:74;;17562:93;17651:3;17562:93;:::i;:::-;17680:2;17675:3;17671:12;17664:19;;17323:366;;;:::o;17695:400::-;17855:3;17876:84;17958:1;17953:3;17876:84;:::i;:::-;17869:91;;17969:93;18058:3;17969:93;:::i;:::-;18087:1;18082:3;18078:11;18071:18;;17695:400;;;:::o;18101:366::-;18243:3;18264:67;18328:2;18323:3;18264:67;:::i;:::-;18257:74;;18340:93;18429:3;18340:93;:::i;:::-;18458:2;18453:3;18449:12;18442:19;;18101:366;;;:::o;18473:::-;18615:3;18636:67;18700:2;18695:3;18636:67;:::i;:::-;18629:74;;18712:93;18801:3;18712:93;:::i;:::-;18830:2;18825:3;18821:12;18814:19;;18473:366;;;:::o;18845:::-;18987:3;19008:67;19072:2;19067:3;19008:67;:::i;:::-;19001:74;;19084:93;19173:3;19084:93;:::i;:::-;19202:2;19197:3;19193:12;19186:19;;18845:366;;;:::o;19217:365::-;19359:3;19380:66;19444:1;19439:3;19380:66;:::i;:::-;19373:73;;19455:93;19544:3;19455:93;:::i;:::-;19573:2;19568:3;19564:12;19557:19;;19217:365;;;:::o;19588:366::-;19730:3;19751:67;19815:2;19810:3;19751:67;:::i;:::-;19744:74;;19827:93;19916:3;19827:93;:::i;:::-;19945:2;19940:3;19936:12;19929:19;;19588:366;;;:::o;19960:::-;20102:3;20123:67;20187:2;20182:3;20123:67;:::i;:::-;20116:74;;20199:93;20288:3;20199:93;:::i;:::-;20317:2;20312:3;20308:12;20301:19;;19960:366;;;:::o;20332:::-;20474:3;20495:67;20559:2;20554:3;20495:67;:::i;:::-;20488:74;;20571:93;20660:3;20571:93;:::i;:::-;20689:2;20684:3;20680:12;20673:19;;20332:366;;;:::o;20704:::-;20846:3;20867:67;20931:2;20926:3;20867:67;:::i;:::-;20860:74;;20943:93;21032:3;20943:93;:::i;:::-;21061:2;21056:3;21052:12;21045:19;;20704:366;;;:::o;21076:108::-;21153:24;21171:5;21153:24;:::i;:::-;21148:3;21141:37;21076:108;;:::o;21190:118::-;21277:24;21295:5;21277:24;:::i;:::-;21272:3;21265:37;21190:118;;:::o;21314:157::-;21419:45;21439:24;21457:5;21439:24;:::i;:::-;21419:45;:::i;:::-;21414:3;21407:58;21314:157;;:::o;21477:695::-;21755:3;21777:92;21865:3;21856:6;21777:92;:::i;:::-;21770:99;;21886:95;21977:3;21968:6;21886:95;:::i;:::-;21879:102;;21998:148;22142:3;21998:148;:::i;:::-;21991:155;;22163:3;22156:10;;21477:695;;;;;:::o;22178:679::-;22374:3;22389:75;22460:3;22451:6;22389:75;:::i;:::-;22489:2;22484:3;22480:12;22473:19;;22502:75;22573:3;22564:6;22502:75;:::i;:::-;22602:2;22597:3;22593:12;22586:19;;22615:75;22686:3;22677:6;22615:75;:::i;:::-;22715:2;22710:3;22706:12;22699:19;;22728:75;22799:3;22790:6;22728:75;:::i;:::-;22828:2;22823:3;22819:12;22812:19;;22848:3;22841:10;;22178:679;;;;;;;:::o;22863:222::-;22956:4;22994:2;22983:9;22979:18;22971:26;;23007:71;23075:1;23064:9;23060:17;23051:6;23007:71;:::i;:::-;22863:222;;;;:::o;23091:1053::-;23414:4;23452:3;23441:9;23437:19;23429:27;;23466:71;23534:1;23523:9;23519:17;23510:6;23466:71;:::i;:::-;23547:72;23615:2;23604:9;23600:18;23591:6;23547:72;:::i;:::-;23666:9;23660:4;23656:20;23651:2;23640:9;23636:18;23629:48;23694:108;23797:4;23788:6;23694:108;:::i;:::-;23686:116;;23849:9;23843:4;23839:20;23834:2;23823:9;23819:18;23812:48;23877:108;23980:4;23971:6;23877:108;:::i;:::-;23869:116;;24033:9;24027:4;24023:20;24017:3;24006:9;24002:19;23995:49;24061:76;24132:4;24123:6;24061:76;:::i;:::-;24053:84;;23091:1053;;;;;;;;:::o;24150:751::-;24373:4;24411:3;24400:9;24396:19;24388:27;;24425:71;24493:1;24482:9;24478:17;24469:6;24425:71;:::i;:::-;24506:72;24574:2;24563:9;24559:18;24550:6;24506:72;:::i;:::-;24588;24656:2;24645:9;24641:18;24632:6;24588:72;:::i;:::-;24670;24738:2;24727:9;24723:18;24714:6;24670:72;:::i;:::-;24790:9;24784:4;24780:20;24774:3;24763:9;24759:19;24752:49;24818:76;24889:4;24880:6;24818:76;:::i;:::-;24810:84;;24150:751;;;;;;;;:::o;24907:373::-;25050:4;25088:2;25077:9;25073:18;25065:26;;25137:9;25131:4;25127:20;25123:1;25112:9;25108:17;25101:47;25165:108;25268:4;25259:6;25165:108;:::i;:::-;25157:116;;24907:373;;;;:::o;25286:634::-;25507:4;25545:2;25534:9;25530:18;25522:26;;25594:9;25588:4;25584:20;25580:1;25569:9;25565:17;25558:47;25622:108;25725:4;25716:6;25622:108;:::i;:::-;25614:116;;25777:9;25771:4;25767:20;25762:2;25751:9;25747:18;25740:48;25805:108;25908:4;25899:6;25805:108;:::i;:::-;25797:116;;25286:634;;;;;:::o;25926:210::-;26013:4;26051:2;26040:9;26036:18;26028:26;;26064:65;26126:1;26115:9;26111:17;26102:6;26064:65;:::i;:::-;25926:210;;;;:::o;26142:313::-;26255:4;26293:2;26282:9;26278:18;26270:26;;26342:9;26336:4;26332:20;26328:1;26317:9;26313:17;26306:47;26370:78;26443:4;26434:6;26370:78;:::i;:::-;26362:86;;26142:313;;;;:::o;26461:419::-;26627:4;26665:2;26654:9;26650:18;26642:26;;26714:9;26708:4;26704:20;26700:1;26689:9;26685:17;26678:47;26742:131;26868:4;26742:131;:::i;:::-;26734:139;;26461:419;;;:::o;26886:::-;27052:4;27090:2;27079:9;27075:18;27067:26;;27139:9;27133:4;27129:20;27125:1;27114:9;27110:17;27103:47;27167:131;27293:4;27167:131;:::i;:::-;27159:139;;26886:419;;;:::o;27311:::-;27477:4;27515:2;27504:9;27500:18;27492:26;;27564:9;27558:4;27554:20;27550:1;27539:9;27535:17;27528:47;27592:131;27718:4;27592:131;:::i;:::-;27584:139;;27311:419;;;:::o;27736:::-;27902:4;27940:2;27929:9;27925:18;27917:26;;27989:9;27983:4;27979:20;27975:1;27964:9;27960:17;27953:47;28017:131;28143:4;28017:131;:::i;:::-;28009:139;;27736:419;;;:::o;28161:::-;28327:4;28365:2;28354:9;28350:18;28342:26;;28414:9;28408:4;28404:20;28400:1;28389:9;28385:17;28378:47;28442:131;28568:4;28442:131;:::i;:::-;28434:139;;28161:419;;;:::o;28586:::-;28752:4;28790:2;28779:9;28775:18;28767:26;;28839:9;28833:4;28829:20;28825:1;28814:9;28810:17;28803:47;28867:131;28993:4;28867:131;:::i;:::-;28859:139;;28586:419;;;:::o;29011:::-;29177:4;29215:2;29204:9;29200:18;29192:26;;29264:9;29258:4;29254:20;29250:1;29239:9;29235:17;29228:47;29292:131;29418:4;29292:131;:::i;:::-;29284:139;;29011:419;;;:::o;29436:::-;29602:4;29640:2;29629:9;29625:18;29617:26;;29689:9;29683:4;29679:20;29675:1;29664:9;29660:17;29653:47;29717:131;29843:4;29717:131;:::i;:::-;29709:139;;29436:419;;;:::o;29861:::-;30027:4;30065:2;30054:9;30050:18;30042:26;;30114:9;30108:4;30104:20;30100:1;30089:9;30085:17;30078:47;30142:131;30268:4;30142:131;:::i;:::-;30134:139;;29861:419;;;:::o;30286:::-;30452:4;30490:2;30479:9;30475:18;30467:26;;30539:9;30533:4;30529:20;30525:1;30514:9;30510:17;30503:47;30567:131;30693:4;30567:131;:::i;:::-;30559:139;;30286:419;;;:::o;30711:::-;30877:4;30915:2;30904:9;30900:18;30892:26;;30964:9;30958:4;30954:20;30950:1;30939:9;30935:17;30928:47;30992:131;31118:4;30992:131;:::i;:::-;30984:139;;30711:419;;;:::o;31136:::-;31302:4;31340:2;31329:9;31325:18;31317:26;;31389:9;31383:4;31379:20;31375:1;31364:9;31360:17;31353:47;31417:131;31543:4;31417:131;:::i;:::-;31409:139;;31136:419;;;:::o;31561:::-;31727:4;31765:2;31754:9;31750:18;31742:26;;31814:9;31808:4;31804:20;31800:1;31789:9;31785:17;31778:47;31842:131;31968:4;31842:131;:::i;:::-;31834:139;;31561:419;;;:::o;31986:::-;32152:4;32190:2;32179:9;32175:18;32167:26;;32239:9;32233:4;32229:20;32225:1;32214:9;32210:17;32203:47;32267:131;32393:4;32267:131;:::i;:::-;32259:139;;31986:419;;;:::o;32411:::-;32577:4;32615:2;32604:9;32600:18;32592:26;;32664:9;32658:4;32654:20;32650:1;32639:9;32635:17;32628:47;32692:131;32818:4;32692:131;:::i;:::-;32684:139;;32411:419;;;:::o;32836:::-;33002:4;33040:2;33029:9;33025:18;33017:26;;33089:9;33083:4;33079:20;33075:1;33064:9;33060:17;33053:47;33117:131;33243:4;33117:131;:::i;:::-;33109:139;;32836:419;;;:::o;33261:222::-;33354:4;33392:2;33381:9;33377:18;33369:26;;33405:71;33473:1;33462:9;33458:17;33449:6;33405:71;:::i;:::-;33261:222;;;;:::o;33489:332::-;33610:4;33648:2;33637:9;33633:18;33625:26;;33661:71;33729:1;33718:9;33714:17;33705:6;33661:71;:::i;:::-;33742:72;33810:2;33799:9;33795:18;33786:6;33742:72;:::i;:::-;33489:332;;;;;:::o;33827:129::-;33861:6;33888:20;;:::i;:::-;33878:30;;33917:33;33945:4;33937:6;33917:33;:::i;:::-;33827:129;;;:::o;33962:75::-;33995:6;34028:2;34022:9;34012:19;;33962:75;:::o;34043:311::-;34120:4;34210:18;34202:6;34199:30;34196:56;;;34232:18;;:::i;:::-;34196:56;34282:4;34274:6;34270:17;34262:25;;34342:4;34336;34332:15;34324:23;;34043:311;;;:::o;34360:::-;34437:4;34527:18;34519:6;34516:30;34513:56;;;34549:18;;:::i;:::-;34513:56;34599:4;34591:6;34587:17;34579:25;;34659:4;34653;34649:15;34641:23;;34360:311;;;:::o;34677:307::-;34738:4;34828:18;34820:6;34817:30;34814:56;;;34850:18;;:::i;:::-;34814:56;34888:29;34910:6;34888:29;:::i;:::-;34880:37;;34972:4;34966;34962:15;34954:23;;34677:307;;;:::o;34990:308::-;35052:4;35142:18;35134:6;35131:30;35128:56;;;35164:18;;:::i;:::-;35128:56;35202:29;35224:6;35202:29;:::i;:::-;35194:37;;35286:4;35280;35276:15;35268:23;;34990:308;;;:::o;35304:132::-;35371:4;35394:3;35386:11;;35424:4;35419:3;35415:14;35407:22;;35304:132;;;:::o;35442:141::-;35491:4;35514:3;35506:11;;35537:3;35534:1;35527:14;35571:4;35568:1;35558:18;35550:26;;35442:141;;;:::o;35589:114::-;35656:6;35690:5;35684:12;35674:22;;35589:114;;;:::o;35709:98::-;35760:6;35794:5;35788:12;35778:22;;35709:98;;;:::o;35813:99::-;35865:6;35899:5;35893:12;35883:22;;35813:99;;;:::o;35918:113::-;35988:4;36020;36015:3;36011:14;36003:22;;35918:113;;;:::o;36037:184::-;36136:11;36170:6;36165:3;36158:19;36210:4;36205:3;36201:14;36186:29;;36037:184;;;;:::o;36227:168::-;36310:11;36344:6;36339:3;36332:19;36384:4;36379:3;36375:14;36360:29;;36227:168;;;;:::o;36401:169::-;36485:11;36519:6;36514:3;36507:19;36559:4;36554:3;36550:14;36535:29;;36401:169;;;;:::o;36576:148::-;36678:11;36715:3;36700:18;;36576:148;;;;:::o;36730:305::-;36770:3;36789:20;36807:1;36789:20;:::i;:::-;36784:25;;36823:20;36841:1;36823:20;:::i;:::-;36818:25;;36977:1;36909:66;36905:74;36902:1;36899:81;36896:107;;;36983:18;;:::i;:::-;36896:107;37027:1;37024;37020:9;37013:16;;36730:305;;;;:::o;37041:185::-;37081:1;37098:20;37116:1;37098:20;:::i;:::-;37093:25;;37132:20;37150:1;37132:20;:::i;:::-;37127:25;;37171:1;37161:35;;37176:18;;:::i;:::-;37161:35;37218:1;37215;37211:9;37206:14;;37041:185;;;;:::o;37232:191::-;37272:4;37292:20;37310:1;37292:20;:::i;:::-;37287:25;;37326:20;37344:1;37326:20;:::i;:::-;37321:25;;37365:1;37362;37359:8;37356:34;;;37370:18;;:::i;:::-;37356:34;37415:1;37412;37408:9;37400:17;;37232:191;;;;:::o;37429:96::-;37466:7;37495:24;37513:5;37495:24;:::i;:::-;37484:35;;37429:96;;;:::o;37531:90::-;37565:7;37608:5;37601:13;37594:21;37583:32;;37531:90;;;:::o;37627:149::-;37663:7;37703:66;37696:5;37692:78;37681:89;;37627:149;;;:::o;37782:126::-;37819:7;37859:42;37852:5;37848:54;37837:65;;37782:126;;;:::o;37914:77::-;37951:7;37980:5;37969:16;;37914:77;;;:::o;37997:154::-;38081:6;38076:3;38071;38058:30;38143:1;38134:6;38129:3;38125:16;38118:27;37997:154;;;:::o;38157:307::-;38225:1;38235:113;38249:6;38246:1;38243:13;38235:113;;;38334:1;38329:3;38325:11;38319:18;38315:1;38310:3;38306:11;38299:39;38271:2;38268:1;38264:10;38259:15;;38235:113;;;38366:6;38363:1;38360:13;38357:101;;;38446:1;38437:6;38432:3;38428:16;38421:27;38357:101;38206:258;38157:307;;;:::o;38470:320::-;38514:6;38551:1;38545:4;38541:12;38531:22;;38598:1;38592:4;38588:12;38619:18;38609:81;;38675:4;38667:6;38663:17;38653:27;;38609:81;38737:2;38729:6;38726:14;38706:18;38703:38;38700:84;;;38756:18;;:::i;:::-;38700:84;38521:269;38470:320;;;:::o;38796:281::-;38879:27;38901:4;38879:27;:::i;:::-;38871:6;38867:40;39009:6;38997:10;38994:22;38973:18;38961:10;38958:34;38955:62;38952:88;;;39020:18;;:::i;:::-;38952:88;39060:10;39056:2;39049:22;38839:238;38796:281;;:::o;39083:233::-;39122:3;39145:24;39163:5;39145:24;:::i;:::-;39136:33;;39191:66;39184:5;39181:77;39178:103;;;39261:18;;:::i;:::-;39178:103;39308:1;39301:5;39297:13;39290:20;;39083:233;;;:::o;39322:100::-;39361:7;39390:26;39410:5;39390:26;:::i;:::-;39379:37;;39322:100;;;:::o;39428:94::-;39467:7;39496:20;39510:5;39496:20;:::i;:::-;39485:31;;39428:94;;;:::o;39528:79::-;39567:7;39596:5;39585:16;;39528:79;;;:::o;39613:176::-;39645:1;39662:20;39680:1;39662:20;:::i;:::-;39657:25;;39696:20;39714:1;39696:20;:::i;:::-;39691:25;;39735:1;39725:35;;39740:18;;:::i;:::-;39725:35;39781:1;39778;39774:9;39769:14;;39613:176;;;;:::o;39795:180::-;39843:77;39840:1;39833:88;39940:4;39937:1;39930:15;39964:4;39961:1;39954:15;39981:180;40029:77;40026:1;40019:88;40126:4;40123:1;40116:15;40150:4;40147:1;40140:15;40167:180;40215:77;40212:1;40205:88;40312:4;40309:1;40302:15;40336:4;40333:1;40326:15;40353:180;40401:77;40398:1;40391:88;40498:4;40495:1;40488:15;40522:4;40519:1;40512:15;40539:180;40587:77;40584:1;40577:88;40684:4;40681:1;40674:15;40708:4;40705:1;40698:15;40725:183;40760:3;40798:1;40780:16;40777:23;40774:128;;;40836:1;40833;40830;40815:23;40858:34;40889:1;40883:8;40858:34;:::i;:::-;40851:41;;40774:128;40725:183;:::o;40914:117::-;41023:1;41020;41013:12;41037:117;41146:1;41143;41136:12;41160:117;41269:1;41266;41259:12;41283:117;41392:1;41389;41382:12;41406:117;41515:1;41512;41505:12;41529:102;41570:6;41621:2;41617:7;41612:2;41605:5;41601:14;41597:28;41587:38;;41529:102;;;:::o;41637:94::-;41670:8;41718:5;41714:2;41710:14;41689:35;;41637:94;;;:::o;41737:106::-;41781:8;41830:5;41825:3;41821:15;41800:36;;41737:106;;;:::o;41849:239::-;41989:34;41985:1;41977:6;41973:14;41966:58;42058:22;42053:2;42045:6;42041:15;42034:47;41849:239;:::o;42094:234::-;42234:34;42230:1;42222:6;42218:14;42211:58;42303:17;42298:2;42290:6;42286:15;42279:42;42094:234;:::o;42334:227::-;42474:34;42470:1;42462:6;42458:14;42451:58;42543:10;42538:2;42530:6;42526:15;42519:35;42334:227;:::o;42567:225::-;42707:34;42703:1;42695:6;42691:14;42684:58;42776:8;42771:2;42763:6;42759:15;42752:33;42567:225;:::o;42798:229::-;42938:34;42934:1;42926:6;42922:14;42915:58;43007:12;43002:2;42994:6;42990:15;42983:37;42798:229;:::o;43033:224::-;43173:34;43169:1;43161:6;43157:14;43150:58;43242:7;43237:2;43229:6;43225:15;43218:32;43033:224;:::o;43263:181::-;43403:33;43399:1;43391:6;43387:14;43380:57;43263:181;:::o;43450:229::-;43590:34;43586:1;43578:6;43574:14;43567:58;43659:12;43654:2;43646:6;43642:15;43635:37;43450:229;:::o;43685:155::-;43825:7;43821:1;43813:6;43809:14;43802:31;43685:155;:::o;43846:182::-;43986:34;43982:1;43974:6;43970:14;43963:58;43846:182;:::o;44034:168::-;44174:20;44170:1;44162:6;44158:14;44151:44;44034:168;:::o;44208:235::-;44348:34;44344:1;44336:6;44332:14;44325:58;44417:18;44412:2;44404:6;44400:15;44393:43;44208:235;:::o;44449:158::-;44589:10;44585:1;44577:6;44573:14;44566:34;44449:158;:::o;44613:228::-;44753:34;44749:1;44741:6;44737:14;44730:58;44822:11;44817:2;44809:6;44805:15;44798:36;44613:228;:::o;44847:::-;44987:34;44983:1;44975:6;44971:14;44964:58;45056:11;45051:2;45043:6;45039:15;45032:36;44847:228;:::o;45081:227::-;45221:34;45217:1;45209:6;45205:14;45198:58;45290:10;45285:2;45277:6;45273:15;45266:35;45081:227;:::o;45314:220::-;45454:34;45450:1;45442:6;45438:14;45431:58;45523:3;45518:2;45510:6;45506:15;45499:28;45314:220;:::o;45540:711::-;45579:3;45617:4;45599:16;45596:26;45593:39;;;45625:5;;45593:39;45654:20;;:::i;:::-;45729:1;45711:16;45707:24;45704:1;45698:4;45683:49;45762:4;45756:11;45861:16;45854:4;45846:6;45842:17;45839:39;45806:18;45798:6;45795:30;45779:113;45776:146;;;45907:5;;;;45776:146;45953:6;45947:4;45943:17;45989:3;45983:10;46016:18;46008:6;46005:30;46002:43;;;46038:5;;;;;;46002:43;46086:6;46079:4;46074:3;46070:14;46066:27;46145:1;46127:16;46123:24;46117:4;46113:35;46108:3;46105:44;46102:57;;;46152:5;;;;;;;46102:57;46169;46217:6;46211:4;46207:17;46199:6;46195:30;46189:4;46169:57;:::i;:::-;46242:3;46235:10;;45583:668;;;;;45540:711;;:::o;46257:122::-;46330:24;46348:5;46330:24;:::i;:::-;46323:5;46320:35;46310:63;;46369:1;46366;46359:12;46310:63;46257:122;:::o;46385:116::-;46455:21;46470:5;46455:21;:::i;:::-;46448:5;46445:32;46435:60;;46491:1;46488;46481:12;46435:60;46385:116;:::o;46507:120::-;46579:23;46596:5;46579:23;:::i;:::-;46572:5;46569:34;46559:62;;46617:1;46614;46607:12;46559:62;46507:120;:::o;46633:122::-;46706:24;46724:5;46706:24;:::i;:::-;46699:5;46696:35;46686:63;;46745:1;46742;46735:12;46686:63;46633:122;:::o

Swarm Source

ipfs://0ab64edca7baf1e46063c7245f991e3cfe235e79ec4d382e0e950714447baba5
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.