ETH Price: $3,912.69 (+2.57%)

Token

Awakened-Gear (Gears)
 

Overview

Max Total Supply

2,830 Gears

Holders

512

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
0x0f4bb29614ba8ce2ecc03a7e3451192fd0c05f67
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:
Gears

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
Yes with 2000 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT

pragma solidity >=0.8.0 <0.9.0;
pragma abicoder v2;

interface IAvatarsGear {
    function applyGear(uint32 avatarId, address holder, uint32 gearID) external;
}

// File: contracts/gears/IMultipassGear.sol

interface IMultipassGear {
    function applyGear(uint32 multipassId, address holder, uint16 gearId) external;
    function hasApplyGear(uint32 multipassId) external view returns(bool);
}

// 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 v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

// File: @openzeppelin/contracts/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 v4.4.1 (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.
        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. 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 v4.4.1 (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 be 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: contracts/gears/ERC1155.sol



pragma solidity >=0.8.0 <0.9.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._
 */
/**
 * @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;

    struct TokenInfo {
        uint16 hasApplyingToAvatar;         // 0: no; 1:yes
        uint16 multipassId;
        uint32 amount;
        uint32 mintedAtTimestamp;
        uint32 avatarId;

        uint32 reserve1;
        uint32 reserve2;
        uint32 reserve3;
        uint32 reserve4;
    }

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

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

    // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json
    string internal _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: balance query for the zero address");
        return _balances[id][account].amount;
    }

    /**
     * @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 {
        require(_msgSender() != operator, "ERC1155: setting approval status for self");

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_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 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: transfer caller is not 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();

        _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data);

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

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

        _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].amount;
            require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
            unchecked {
                _balances[id][from].amount = uint32(fromBalance - amount);
            }
            _balances[id][to].amount = uint32(uint(_balances[id][to].amount) + amount);
        }

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

        _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 `account`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - If `account` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _mint(
        address account,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(account != address(0), "ERC1155: mint to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);

        _balances[id][account].amount = uint32(uint(_balances[id][account].amount) + amount);
        _balances[id][account].mintedAtTimestamp = uint32(block.timestamp);
        emit TransferSingle(operator, address(0), account, id, amount);

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

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.
     *
     * 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].amount = uint32(uint(_balances[ids[i]][to].amount) + amounts[i]);
            _balances[ids[i]][to].mintedAtTimestamp = uint32(block.timestamp);
        }

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

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

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

        address operator = _msgSender();

        _beforeTokenTransfer(operator, account, address(0), _asSingletonArray(id), _asSingletonArray(amount), "");

        uint256 accountBalance = _balances[id][account].amount;
        require(accountBalance >= amount, "ERC1155: burn amount exceeds balance");
        unchecked {
            _balances[id][account].amount = uint32(accountBalance - amount);
        }

        emit TransferSingle(operator, account, address(0), id, amount);
    }

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

        address operator = _msgSender();

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

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

            uint256 accountBalance = _balances[id][account].amount;
            require(accountBalance >= amount, "ERC1155: burn amount exceeds balance");
            unchecked {
                _balances[id][account].amount = uint32(accountBalance - amount);
            }
        }

        emit TransferBatch(operator, account, address(0), ids, amounts);
    }

    /**
     * @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 `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 _beforeTokenTransfer(
        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: contracts/gears/Gears.sol



pragma solidity >=0.8.0 < 0.9.0;
pragma experimental ABIEncoderV2;





struct AvatarInfo {
    uint8  level;
    uint8  reverse1;
    uint16 reverse2;
    uint32 amount;
    uint32 gearID;
    uint32 mintedAtTimestamp;
    uint32 cityID;
    uint32 personalID;
    uint32 randReceipt;
    uint32 reverse4;    
}

contract Gears is ERC1155, Ownable {
    struct NftToken {
      uint16 mintingStatus;     // set can be mint or not
      uint16 currentMinted;
      uint16 totalSupply;
      uint16 maxSupply;
      uint16 maxMintingPerTime;
      uint16 reserve1;
      
      uint32 nftCost;           // unit is finney (0.001 ETH)
      uint32 reserve2;
      uint32 reserve3;    
      uint64 reserve4; 
    }

    NftToken public nftToken;
    address public immutable multipassAddress;
    address public immutable avatarAddress;
    mapping(address => bool) private defaultApprovals;

    event WithdrawEth(address indexed _operator, uint256 _ethWei);
    event SetMaxMintingPerTime(uint maxMintingPerTime);
    event MintGear(uint indexed gearId, uint indexed multipassId, address holder, address operator, uint timestamp);
    event DefaultApproval(address indexed operator, bool hasApproval);
    event ApplyGear(uint indexed gearId, address holder, uint newAvatarId);
    
    constructor(address _multipass, address _avatarAddress) 
      ERC1155("https://cloudflare-ipfs.com/ipns/k2k4r8p3fpywxp1hjfve019hirc4s6m7qc2f3ypiecg7ekx2u8pfik97/{id}")
    {
        nftToken.maxSupply = 10000;
        nftToken.totalSupply = 5000;
        nftToken.nftCost = 0;
        nftToken.maxMintingPerTime = 255;
        nftToken.mintingStatus = 1;
        nftToken.currentMinted = 1;         // ID from 1
        multipassAddress = _multipass;
        avatarAddress = _avatarAddress;
        setDefaultApproval(_avatarAddress, true);
    }

    function name() public pure returns (string memory)
    {
        return "Awakened-Gear";
    }

    function symbol() public pure returns (string memory)
    {
        return "Gears";
    }

    function decimals() public view virtual  returns (uint256) 
    {  
        return 0;
    }

    function totalSupply() public view returns (uint)
    {
        return nftToken.currentMinted - 1;
    }

    function maxSupply() public view returns (uint)
    {
        return nftToken.maxSupply;
    }

    function nftCost() public view returns(uint)
    {
        return nftToken.nftCost;
    }

    function mintingStatus() public view returns(uint)
    {
        return nftToken.mintingStatus;
    }

    function maxMintingPerTime() public view returns(uint)
    {
        return nftToken.maxMintingPerTime;
    }

    receive() external virtual payable { } 
    fallback() external virtual payable { }
    
    /* withdraw eth from owner */
    function withdraw(uint _amount) public onlyOwner
    {
        require(_amount <= address(this).balance, "exceed withdraw balance.");
        if (_amount == 0)
        {
            _amount = address(this).balance;
        }
        uint _devFee = _amount * 5 / 100;
        payable(0x2130C75caC9E1EF6381C6F354331B3049221391C).transfer(_devFee);
        payable(_msgSender()).transfer(_amount - _devFee);

        emit WithdrawEth(_msgSender(), _amount);
    }

    modifier canMint(uint16 _number)
    {
        require(nftToken.currentMinted + _number <= nftToken.totalSupply + 1, "Exceed the max supply!");
        require(nftToken.mintingStatus > 0, "Minting already stop now!");
        require(_number <= nftToken.maxMintingPerTime, "exceed the max minting limit per time");
        _;
    }

    /* check token exist or not */
    function existsToken(address _addr, uint _id) public view returns(bool)
    {
        return _balances[_id][_addr].amount > 0;
    }

    function isApprovedForAll(address _owner, address _operator) public virtual override(ERC1155) view returns (bool) {
        return defaultApprovals[_operator] || super.isApprovedForAll(_owner, _operator);
    }

    function setDefaultApproval(address operator, bool hasApproval) public onlyOwner {
        defaultApprovals[operator] = hasApproval;
        emit DefaultApproval(operator, hasApproval);
    }

    /* Allow the owner set how max minting per time */
    function setMaxMintingPerTime(uint16 _maxMintingPerTime) public onlyOwner
    {
      nftToken.maxMintingPerTime = _maxMintingPerTime;
      emit SetMaxMintingPerTime(_maxMintingPerTime);
    }

    // when _howManyMEth = 1, it's 0.001 ETH
    function setNftCost(uint32 _howManyFinney) external onlyOwner
    {
        nftToken.nftCost = _howManyFinney;
    }

    /* set Token URI */
    function setTokenURI(string calldata _uri, uint256 _id) external onlyOwner {
        emit URI(_uri, _id);
    }

    /* set status can be mint or not */
    function setMintingStatus(uint16 _status) public onlyOwner
    {
        nftToken.mintingStatus = _status;
    }

    /* can set total supply, but it can't never be exceed max supply */
    function setTotalSupply(uint16 _supply) external onlyOwner
    {
        require(_supply <= nftToken.maxSupply, "exceed max supply");
        nftToken.totalSupply = _supply;
    }

    function setUri(string memory newuri) external onlyOwner
    {
        _setURI(newuri);
    }

    function mint(uint16[] memory multipassIds) external canMint(uint16(multipassIds.length))
    {
        uint number = uint16(multipassIds.length);
        address holder = _msgSender();
        
        uint16 _currentMintedID = nftToken.currentMinted;
        for (uint16 i = 0; i < number; i++)
        {
            if (!IMultipassGear(multipassAddress).hasApplyGear(multipassIds[i]))
            {
                IMultipassGear(multipassAddress).applyGear(multipassIds[i], holder, _currentMintedID);
                _balances[_currentMintedID][holder].amount += 1;
                _balances[_currentMintedID][holder].multipassId = multipassIds[i];
                _balances[_currentMintedID][holder].mintedAtTimestamp = uint32(block.timestamp);

                emit TransferSingle(_msgSender(), address(0), holder, _currentMintedID, 1);
                emit MintGear(_currentMintedID, multipassIds[i], holder, holder, block.timestamp);

                _currentMintedID += 1;
            }
        }
        nftToken.currentMinted = _currentMintedID;
    }

    function applyingToAvatar(uint16[] memory gearIds, uint16[] memory avatarIds) external
    {
        address holder = _msgSender();
        require(gearIds.length == avatarIds.length, "Must the same length between avatars and gears.");
        for (uint i = 0; i < gearIds.length; i++)
        {
            require(existsToken(holder, gearIds[i]), "Holder:did not own this token");
            IAvatarsGear(avatarAddress).applyGear(avatarIds[i], holder, uint32(gearIds[i]));
            _balances[gearIds[i]][holder].amount = 0;
            emit ApplyGear(gearIds[i], holder, avatarIds[i]);
            emit TransferSingle(holder, holder, address(0), gearIds[i], 1);
        }
    }

    function mintAndApply(uint16[] memory multipassIds, uint16[] memory avatarIds) external
    {
        require(avatarIds.length == multipassIds.length, "Must the same length between multipass and avatars.");
        uint number = uint16(multipassIds.length);
        address holder = _msgSender();
        uint16 _currentMintedID = nftToken.currentMinted;

        for (uint16 i = 0; i < number; i++)
        {
            if (!IMultipassGear(multipassAddress).hasApplyGear(multipassIds[i]))
            {
                IMultipassGear(multipassAddress).applyGear(multipassIds[i], holder, _currentMintedID);
                _balances[_currentMintedID][holder].multipassId = multipassIds[i];
                _balances[_currentMintedID][holder].mintedAtTimestamp = uint32(block.timestamp);

                IAvatarsGear(avatarAddress).applyGear(avatarIds[i], holder, _currentMintedID);

                emit ApplyGear(_currentMintedID, holder, avatarIds[i]);
                emit TransferSingle(holder, holder, address(0), _currentMintedID, 1);

                _currentMintedID += 1;
            }
        }
        nftToken.currentMinted = _currentMintedID;
    }

    function batchMint(address[] memory _addrs) external onlyOwner
    {        
        require(nftToken.currentMinted + uint16(_addrs.length) <= nftToken.totalSupply + 1, "Exceed the max supply!");

        uint8 number = uint8(_addrs.length);
        uint16 _currentMintedID = nftToken.currentMinted;

        for (uint8 i = 0; i < number; i++)
        {
            _balances[_currentMintedID][_addrs[i]].amount += 1;
            _balances[_currentMintedID][_addrs[i]].mintedAtTimestamp = uint32(block.timestamp);
            _balances[_currentMintedID][_addrs[i]].multipassId = 65535;

            emit TransferSingle(_msgSender(), address(0), _addrs[i], _currentMintedID, 1);
            emit MintGear(_currentMintedID, 65535, _addrs[i], _msgSender(), block.timestamp);

            _currentMintedID++;
        }
        nftToken.currentMinted = _currentMintedID;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_multipass","type":"address"},{"internalType":"address","name":"_avatarAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"gearId","type":"uint256"},{"indexed":false,"internalType":"address","name":"holder","type":"address"},{"indexed":false,"internalType":"uint256","name":"newAvatarId","type":"uint256"}],"name":"ApplyGear","type":"event"},{"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":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"hasApproval","type":"bool"}],"name":"DefaultApproval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"gearId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"multipassId","type":"uint256"},{"indexed":false,"internalType":"address","name":"holder","type":"address"},{"indexed":false,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"MintGear","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":false,"internalType":"uint256","name":"maxMintingPerTime","type":"uint256"}],"name":"SetMaxMintingPerTime","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_operator","type":"address"},{"indexed":false,"internalType":"uint256","name":"_ethWei","type":"uint256"}],"name":"WithdrawEth","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"uint16[]","name":"gearIds","type":"uint16[]"},{"internalType":"uint16[]","name":"avatarIds","type":"uint16[]"}],"name":"applyingToAvatar","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"avatarAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"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":[{"internalType":"address[]","name":"_addrs","type":"address[]"}],"name":"batchMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"existsToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintingPerTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16[]","name":"multipassIds","type":"uint16[]"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16[]","name":"multipassIds","type":"uint16[]"},{"internalType":"uint16[]","name":"avatarIds","type":"uint16[]"}],"name":"mintAndApply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mintingStatus","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"multipassAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"nftCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftToken","outputs":[{"internalType":"uint16","name":"mintingStatus","type":"uint16"},{"internalType":"uint16","name":"currentMinted","type":"uint16"},{"internalType":"uint16","name":"totalSupply","type":"uint16"},{"internalType":"uint16","name":"maxSupply","type":"uint16"},{"internalType":"uint16","name":"maxMintingPerTime","type":"uint16"},{"internalType":"uint16","name":"reserve1","type":"uint16"},{"internalType":"uint32","name":"nftCost","type":"uint32"},{"internalType":"uint32","name":"reserve2","type":"uint32"},{"internalType":"uint32","name":"reserve3","type":"uint32"},{"internalType":"uint64","name":"reserve4","type":"uint64"}],"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":"address","name":"operator","type":"address"},{"internalType":"bool","name":"hasApproval","type":"bool"}],"name":"setDefaultApproval","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_maxMintingPerTime","type":"uint16"}],"name":"setMaxMintingPerTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_status","type":"uint16"}],"name":"setMintingStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"_howManyFinney","type":"uint32"}],"name":"setNftCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uri","type":"string"},{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"setTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_supply","type":"uint16"}],"name":"setTotalSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newuri","type":"string"}],"name":"setUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","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":"","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040523480156200001157600080fd5b5060405162003eed38038062003eed833981016040819052620000349162000299565b6040518060800160405280605e815260200162003e8f605e91396200005981620000ad565b506200006533620000c6565b60048054600165ffffffff000160501b03191668ff27101388000100011790556001600160a01b03828116608052811660a052620000a581600162000118565b50506200030e565b8051620000c2906002906020840190620001d6565b5050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6003546001600160a01b03163314620001775760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640160405180910390fd5b6001600160a01b038216600081815260056020908152604091829020805460ff191685151590811790915591519182527f270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b910160405180910390a25050565b828054620001e490620002d1565b90600052602060002090601f01602090048101928262000208576000855562000253565b82601f106200022357805160ff191683800117855562000253565b8280016001018555821562000253579182015b828111156200025357825182559160200191906001019062000236565b506200026192915062000265565b5090565b5b8082111562000261576000815560010162000266565b80516001600160a01b03811681146200029457600080fd5b919050565b60008060408385031215620002ad57600080fd5b620002b8836200027c565b9150620002c8602084016200027c565b90509250929050565b600181811c90821680620002e657607f821691505b602082108114156200030857634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a051613b316200035e6000396000818161040501528181611092015261178301526000818161083301528181610e9201528181610f4a01528181611be10152611c990152613b316000f3fe6080604052600436106102165760003560e01c8063715018a611610126578063d1822209116100a7578063e985e9c511610079578063f2fde38b11610061578063f2fde38b14610801578063fb2f494214610821578063fdd2069e1461085557005b8063e985e9c5146107c1578063f242432a146107e157005b8063d182220914610733578063d5abeb0114610753578063d67b06c114610776578063da80e59b1461079657005b80639b642de1116100f8578063a22cb465116100e0578063a22cb46514610585578063a411104c146105a5578063d06fcba8146105f557005b80639b642de1146105455780639c5e92fb1461056557005b8063715018a6146104ac578063891cb017146104c15780638da5cb5b146104e157806395d89b41146104ff57005b80632eb2c2d6116101b057806346914712116101825780634e1273f41161016a5780634e1273f41461043f57806352bdc3901461046c578063562e438b1461048c57005b806346914712146103d35780634d383176146103f357005b80632eb2c2d614610366578063313ce5671461038657806333abe5441461039a57806345a7d498146103b357005b80630e89341c116101e95780630e89341c146102f157806318054c371461031157806318160ddd146103315780632e1a7d4d1461034657005b8062fdd58e1461021f57806301ffc9a71461025257806306fdde031461028257806309a3beef146102d157005b3661021d57005b005b34801561022b57600080fd5b5061023f61023a366004613029565b61087a565b6040519081526020015b60405180910390f35b34801561025e57600080fd5b5061027261026d366004613069565b610931565b6040519015158152602001610249565b34801561028e57600080fd5b5060408051808201909152600d81527f4177616b656e65642d476561720000000000000000000000000000000000000060208201525b60405161024991906130d3565b3480156102dd57600080fd5b5061021d6102ec3660046130e6565b6109ce565b3480156102fd57600080fd5b506102c461030c36600461315e565b610a67565b34801561031d57600080fd5b5061021d61032c366004613185565b610afb565b34801561033d57600080fd5b5061023f610bb5565b34801561035257600080fd5b5061021d61036136600461315e565b610bda565b34801561037257600080fd5b5061021d610381366004613312565b610d53565b34801561039257600080fd5b50600061023f565b3480156103a657600080fd5b5060045461ffff1661023f565b3480156103bf57600080fd5b5061021d6103ce36600461343b565b610df5565b3480156103df57600080fd5b5061021d6103ee36600461349f565b61124a565b3480156103ff57600080fd5b506104277f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610249565b34801561044b57600080fd5b5061045f61045a366004613532565b6112eb565b60405161024991906135c7565b34801561047857600080fd5b5061021d6104873660046135da565b611429565b34801561049857600080fd5b5061021d6104a73660046135da565b6114f8565b3480156104b857600080fd5b5061021d6115f3565b3480156104cd57600080fd5b5061021d6104dc36600461343b565b611659565b3480156104ed57600080fd5b506003546001600160a01b0316610427565b34801561050b57600080fd5b5060408051808201909152600581527f476561727300000000000000000000000000000000000000000000000000000060208201526102c4565b34801561055157600080fd5b5061021d6105603660046135f5565b6119eb565b34801561057157600080fd5b5061021d610580366004613646565b611a51565b34801561059157600080fd5b5061021d6105a0366004613185565b611f2e565b3480156105b157600080fd5b506102726105c0366004613029565b6000908152602081815260408083206001600160a01b039490941683529290522054640100000000900463ffffffff16151590565b34801561060157600080fd5b506004546106c59061ffff808216916201000081048216916401000000008204811691660100000000000081048216916801000000000000000082048116916a010000000000000000000081049091169063ffffffff6c0100000000000000000000000082048116917001000000000000000000000000000000008104821691740100000000000000000000000000000000000000008204169067ffffffffffffffff7801000000000000000000000000000000000000000000000000909104168a565b6040805161ffff9b8c168152998b1660208b0152978a169789019790975294881660608801529287166080870152951660a085015263ffffffff94851660c0850152841660e08401529290921661010082015267ffffffffffffffff90911661012082015261014001610249565b34801561073f57600080fd5b5061021d61074e3660046135da565b612019565b34801561075f57600080fd5b506004546601000000000000900461ffff1661023f565b34801561078257600080fd5b5061021d61079136600461367b565b6120a8565b3480156107a257600080fd5b506004546c01000000000000000000000000900463ffffffff1661023f565b3480156107cd57600080fd5b506102726107dc3660046136b0565b612469565b3480156107ed57600080fd5b5061021d6107fc3660046136e3565b6124bc565b34801561080d57600080fd5b5061021d61081c366004613748565b612557565b34801561082d57600080fd5b506104277f000000000000000000000000000000000000000000000000000000000000000081565b34801561086157600080fd5b5060045468010000000000000000900461ffff1661023f565b60006001600160a01b0383166108fd5760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201527f65726f206164647265737300000000000000000000000000000000000000000060648201526084015b60405180910390fd5b506000908152602081815260408083206001600160a01b039490941683529290522054640100000000900463ffffffff1690565b60006001600160e01b031982167fd9b67a2600000000000000000000000000000000000000000000000000000000148061099457506001600160e01b031982167f0e89341c00000000000000000000000000000000000000000000000000000000145b806109c857507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b92915050565b6003546001600160a01b03163314610a285760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108f4565b807f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b8484604051610a5a929190613763565b60405180910390a2505050565b606060028054610a7690613792565b80601f0160208091040260200160405190810160405280929190818152602001828054610aa290613792565b8015610aef5780601f10610ac457610100808354040283529160200191610aef565b820191906000526020600020905b815481529060010190602001808311610ad257829003601f168201915b50505050509050919050565b6003546001600160a01b03163314610b555760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108f4565b6001600160a01b038216600081815260056020908152604091829020805460ff191685151590811790915591519182527f270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b91015b60405180910390a25050565b600454600090610bd19060019062010000900461ffff166137e3565b61ffff16905090565b6003546001600160a01b03163314610c345760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108f4565b47811115610c845760405162461bcd60e51b815260206004820152601860248201527f6578636565642077697468647261772062616c616e63652e000000000000000060448201526064016108f4565b80610c8c5750475b60006064610c9b836005613806565b610ca59190613825565b604051909150732130c75cac9e1ef6381c6f354331b3049221391c9082156108fc029083906000818181858888f19350505050158015610ce9573d6000803e3d6000fd5b50336108fc610cf88385613847565b6040518115909202916000818181858888f19350505050158015610d20573d6000803e3d6000fd5b5060405182815233907fccbd99ba6da8f29b2a4f65e474e3c3973564d356c162c08d45f3dc7f0cb5b3aa90602001610ba9565b6001600160a01b038516331480610d6f5750610d6f8533612469565b610de15760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f742060448201527f6f776e6572206e6f7220617070726f766564000000000000000000000000000060648201526084016108f4565b610dee8585858585612636565b5050505050565b8151815114610e6c5760405162461bcd60e51b815260206004820152603360248201527f4d757374207468652073616d65206c656e677468206265747765656e206d756c60448201527f74697061737320616e6420617661746172732e0000000000000000000000000060648201526084016108f4565b815160045461ffff9182169133916201000090041660005b838161ffff161015611225577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663616cd9fa878361ffff1681518110610ed557610ed561385e565b60200260200101516040518263ffffffff1660e01b8152600401610f03919061ffff91909116815260200190565b602060405180830381865afa158015610f20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f449190613874565b611213577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166309b60a27878361ffff1681518110610f8d57610f8d61385e565b60209081029190910101516040516001600160e01b031960e084901b16815261ffff91821660048201526001600160a01b03871660248201529085166044820152606401600060405180830381600087803b158015610feb57600080fd5b505af1158015610fff573d6000803e3d6000fd5b50505050858161ffff16815181106110195761101961385e565b60209081029190910181015161ffff848116600090815280845260408082206001600160a01b0389811684529552902080546bffffffff00000000ffff0000191662010000938316939093026bffffffff0000000000000000191692909217680100000000000000004263ffffffff16021790915586517f000000000000000000000000000000000000000000000000000000000000000090921691631fc68a279188919085169081106110cf576110cf61385e565b60209081029190910101516040516001600160e01b031960e084901b16815261ffff91821660048201526001600160a01b03871660248201529085166044820152606401600060405180830381600087803b15801561112d57600080fd5b505af1158015611141573d6000803e3d6000fd5b505050508161ffff167f496528518bcc717be334d30fdc9269aeae3d48b548e4033b7c1858575e3d767884878461ffff16815181106111825761118261385e565b60200260200101516040516111b09291906001600160a01b0392909216825261ffff16602082015260400190565b60405180910390a26040805161ffff84168152600160208201526000916001600160a01b0386169182917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4611210600183613891565b91505b8061121d816138b7565b915050610e84565b506004805461ffff909216620100000263ffff00001990921691909117905550505050565b6003546001600160a01b031633146112a45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108f4565b6004805463ffffffff9092166c01000000000000000000000000027fffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffffff909216919091179055565b606081518351146113645760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e67746860448201527f206d69736d61746368000000000000000000000000000000000000000000000060648201526084016108f4565b6000835167ffffffffffffffff811115611380576113806131bc565b6040519080825280602002602001820160405280156113a9578160200160208202803683370190505b50905060005b8451811015611421576113f48582815181106113cd576113cd61385e565b60200260200101518583815181106113e7576113e761385e565b602002602001015161087a565b8282815181106114065761140661385e565b602090810291909101015261141a816138d9565b90506113af565b509392505050565b6003546001600160a01b031633146114835760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108f4565b600480547fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff166801000000000000000061ffff8416908102919091179091556040519081527f0b5775d94cccfd234eaeda693f5ec7294926bb1f2d51c2faa66f7cc663b5f86c9060200160405180910390a150565b6003546001600160a01b031633146115525760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108f4565b60045461ffff6601000000000000909104811690821611156115b65760405162461bcd60e51b815260206004820152601160248201527f657863656564206d617820737570706c7900000000000000000000000000000060448201526064016108f4565b6004805461ffff909216640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff909216919091179055565b6003546001600160a01b0316331461164d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108f4565b6116576000612942565b565b805182513391146116d25760405162461bcd60e51b815260206004820152602f60248201527f4d757374207468652073616d65206c656e677468206265747765656e2061766160448201527f7461727320616e642067656172732e000000000000000000000000000000000060648201526084016108f4565b60005b83518110156119e557611735828583815181106116f4576116f461385e565b602002602001015161ffff166000908152602081815260408083206001600160a01b039490941683529290522054640100000000900463ffffffff16151590565b6117815760405162461bcd60e51b815260206004820152601d60248201527f486f6c6465723a646964206e6f74206f776e207468697320746f6b656e00000060448201526064016108f4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316631fc68a278483815181106117c2576117c261385e565b6020026020010151848785815181106117dd576117dd61385e565b60209081029190910101516040516001600160e01b031960e086901b16815261ffff93841660048201526001600160a01b039092166024830152919091166044820152606401600060405180830381600087803b15801561183d57600080fd5b505af1158015611851573d6000803e3d6000fd5b50505050600080600086848151811061186c5761186c61385e565b602002602001015161ffff1681526020019081526020016000206000846001600160a01b03166001600160a01b0316815260200190815260200160002060000160046101000a81548163ffffffff021916908363ffffffff1602179055508381815181106118dc576118dc61385e565b602002602001015161ffff167f496528518bcc717be334d30fdc9269aeae3d48b548e4033b7c1858575e3d76788385848151811061191c5761191c61385e565b602002602001015160405161194a9291906001600160a01b0392909216825261ffff16602082015260400190565b60405180910390a260006001600160a01b0316826001600160a01b0316836001600160a01b03167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628785815181106119a4576119a461385e565b602002602001015160016040516119cb92919061ffff929092168252602082015260400190565b60405180910390a4806119dd816138d9565b9150506116d5565b50505050565b6003546001600160a01b03163314611a455760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108f4565b611a4e816129ac565b50565b8051600454611a6d90640100000000900461ffff166001613891565b60045461ffff91821691611a8a9184916201000090910416613891565b61ffff161115611adc5760405162461bcd60e51b815260206004820152601660248201527f45786365656420746865206d617820737570706c79210000000000000000000060448201526064016108f4565b60045461ffff16611b2f5760405162461bcd60e51b815260206004820152601960248201527f4d696e74696e6720616c72656164792073746f70206e6f77210000000000000060448201526064016108f4565b60045461ffff6801000000000000000090910481169082161115611bbb5760405162461bcd60e51b815260206004820152602560248201527f65786365656420746865206d6178206d696e74696e67206c696d69742070657260448201527f2074696d6500000000000000000000000000000000000000000000000000000060648201526084016108f4565b815160045461ffff9182169133916201000090041660005b838161ffff161015611225577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663616cd9fa878361ffff1681518110611c2457611c2461385e565b60200260200101516040518263ffffffff1660e01b8152600401611c52919061ffff91909116815260200190565b602060405180830381865afa158015611c6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c939190613874565b611f1c577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166309b60a27878361ffff1681518110611cdc57611cdc61385e565b60209081029190910101516040516001600160e01b031960e084901b16815261ffff91821660048201526001600160a01b03871660248201529085166044820152606401600060405180830381600087803b158015611d3a57600080fd5b505af1158015611d4e573d6000803e3d6000fd5b50505061ffff83166000908152602081815260408083206001600160a01b03881684529091529020805460019250600490611d9990849063ffffffff640100000000909104166138f4565b92506101000a81548163ffffffff021916908363ffffffff160217905550858161ffff1681518110611dcd57611dcd61385e565b60209081029190910181015161ffff848116600090815280845260408082206001600160a01b0389168084529552812080546bffffffff00000000ffff000019166201000093909416929092026bffffffff0000000000000000191692909217680100000000000000004263ffffffff1602179055336040805161ffff87168152600160208201526001600160a01b0392909216917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4858161ffff1681518110611ea357611ea361385e565b602002602001015161ffff168261ffff167fa12b61d85beb74739a4e8bce8bcae3b100f55a7b5e16ab91ff117a9c69439d4e858642604051611f06939291906001600160a01b039384168152919092166020820152604081019190915260600190565b60405180910390a3611f19600183613891565b91505b80611f26816138b7565b915050611bd3565b336001600160a01b0383161415611fad5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c2073746174757360448201527f20666f722073656c66000000000000000000000000000000000000000000000060648201526084016108f4565b3360008181526001602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6003546001600160a01b031633146120735760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108f4565b600480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001661ffff92909216919091179055565b6003546001600160a01b031633146121025760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108f4565b60045461211c90640100000000900461ffff166001613891565b815160045461ffff92831692612139929162010000900416613891565b61ffff16111561218b5760405162461bcd60e51b815260206004820152601660248201527f45786365656420746865206d617820737570706c79210000000000000000000060448201526064016108f4565b805160045462010000900461ffff1660005b8260ff168160ff1610156124465760016000808461ffff1681526020019081526020016000206000868460ff16815181106121da576121da61385e565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060000160048282829054906101000a900463ffffffff1661222391906138f4565b92506101000a81548163ffffffff021916908363ffffffff160217905550426000808461ffff1681526020019081526020016000206000868460ff168151811061226f5761226f61385e565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060000160086101000a81548163ffffffff021916908363ffffffff16021790555061ffff6000808461ffff1681526020019081526020016000206000868460ff16815181106122e8576122e861385e565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060000160026101000a81548161ffff021916908361ffff160217905550838160ff16815181106123425761234261385e565b60200260200101516001600160a01b031660006001600160a01b03166123653390565b6040805161ffff87168152600160208201526001600160a01b0392909216917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a461ffff8261ffff167fa12b61d85beb74739a4e8bce8bcae3b100f55a7b5e16ab91ff117a9c69439d4e868460ff16815181106123ed576123ed61385e565b60200260200101516123fc3390565b604080516001600160a01b039384168152929091166020830152429082015260600160405180910390a381612430816138b7565b925050808061243e90613913565b91505061219d565b506004805461ffff909216620100000263ffff0000199092169190911790555050565b6001600160a01b03811660009081526005602052604081205460ff16806124b557506001600160a01b0380841660009081526001602090815260408083209386168352929052205460ff165b9392505050565b6001600160a01b0385163314806124d857506124d88533612469565b61254a5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201527f20617070726f766564000000000000000000000000000000000000000000000060648201526084016108f4565b610dee85858585856129c3565b6003546001600160a01b031633146125b15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108f4565b6001600160a01b03811661262d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016108f4565b611a4e81612942565b81518351146126ad5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060448201527f6d69736d6174636800000000000000000000000000000000000000000000000060648201526084016108f4565b6001600160a01b0384166127295760405162461bcd60e51b815260206004820152602560248201527f455243313135353a207472616e7366657220746f20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016108f4565b3360005b84518110156128d457600085828151811061274a5761274a61385e565b6020026020010151905060008583815181106127685761276861385e565b602090810291909101810151600084815280835260408082206001600160a01b038e1683529093529190912054909150640100000000900463ffffffff168181101561281c5760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60448201527f72207472616e736665720000000000000000000000000000000000000000000060648201526084016108f4565b6000838152602081815260408083206001600160a01b038e811685529252808320805467ffffffff00000000191664010000000087870363ffffffff908116820292909217909255928d16845292205461287a928592910416613933565b6000938452602084815260408086206001600160a01b038d168752909152909320805463ffffffff949094166401000000000267ffffffff000000001990941693909317909255506128cd9050816138d9565b905061272d565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161292492919061394b565b60405180910390a461293a818787878787612bf9565b505050505050565b600380546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b80516129bf906002906020840190612f74565b5050565b6001600160a01b038416612a3f5760405162461bcd60e51b815260206004820152602560248201527f455243313135353a207472616e7366657220746f20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016108f4565b33612a58818787612a4f88612de6565b610dee88612de6565b6000848152602081815260408083206001600160a01b038a168452909152902054640100000000900463ffffffff1683811015612afd5760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60448201527f72207472616e736665720000000000000000000000000000000000000000000060648201526084016108f4565b6000858152602081815260408083206001600160a01b038b811685529252808320805467ffffffff00000000191664010000000089870363ffffffff908116820292909217909255928a168452922054612b5b928792910416613933565b6000868152602081815260408083206001600160a01b038b811680865291845293829020805463ffffffff969096166401000000000267ffffffff00000000199096169590951790945580518981529182018890528a8316928616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4612bf0828888888888612e31565b50505050505050565b6001600160a01b0384163b1561293a576040517fbc197c810000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063bc197c8190612c569089908990889088908890600401613979565b6020604051808303816000875af1925050508015612c91575060408051601f3d908101601f19168201909252612c8e918101906139d7565b60015b612d4757612c9d6139f4565b806308c379a01415612cd75750612cb2613a10565b80612cbd5750612cd9565b8060405162461bcd60e51b81526004016108f491906130d3565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e204552433131353560448201527f526563656976657220696d706c656d656e74657200000000000000000000000060648201526084016108f4565b6001600160e01b031981167fbc197c810000000000000000000000000000000000000000000000000000000014612bf05760405162461bcd60e51b815260206004820152602860248201527f455243313135353a204552433131353552656365697665722072656a6563746560448201527f6420746f6b656e7300000000000000000000000000000000000000000000000060648201526084016108f4565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110612e2057612e2061385e565b602090810291909101015292915050565b6001600160a01b0384163b1561293a576040517ff23a6e610000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063f23a6e6190612e8e9089908990889088908890600401613ab8565b6020604051808303816000875af1925050508015612ec9575060408051601f3d908101601f19168201909252612ec6918101906139d7565b60015b612ed557612c9d6139f4565b6001600160e01b031981167ff23a6e610000000000000000000000000000000000000000000000000000000014612bf05760405162461bcd60e51b815260206004820152602860248201527f455243313135353a204552433131353552656365697665722072656a6563746560448201527f6420746f6b656e7300000000000000000000000000000000000000000000000060648201526084016108f4565b828054612f8090613792565b90600052602060002090601f016020900481019282612fa25760008555612fe8565b82601f10612fbb57805160ff1916838001178555612fe8565b82800160010185558215612fe8579182015b82811115612fe8578251825591602001919060010190612fcd565b50612ff4929150612ff8565b5090565b5b80821115612ff45760008155600101612ff9565b80356001600160a01b038116811461302457600080fd5b919050565b6000806040838503121561303c57600080fd5b6130458361300d565b946020939093013593505050565b6001600160e01b031981168114611a4e57600080fd5b60006020828403121561307b57600080fd5b81356124b581613053565b6000815180845260005b818110156130ac57602081850181015186830182015201613090565b818111156130be576000602083870101525b50601f01601f19169290920160200192915050565b6020815260006124b56020830184613086565b6000806000604084860312156130fb57600080fd5b833567ffffffffffffffff8082111561311357600080fd5b818601915086601f83011261312757600080fd5b81358181111561313657600080fd5b87602082850101111561314857600080fd5b6020928301989097509590910135949350505050565b60006020828403121561317057600080fd5b5035919050565b8015158114611a4e57600080fd5b6000806040838503121561319857600080fd5b6131a18361300d565b915060208301356131b181613177565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff821117156131f8576131f86131bc565b6040525050565b600067ffffffffffffffff821115613219576132196131bc565b5060051b60200190565b600082601f83011261323457600080fd5b81356020613241826131ff565b60405161324e82826131d2565b83815260059390931b850182019282810191508684111561326e57600080fd5b8286015b848110156132895780358352918301918301613272565b509695505050505050565b600067ffffffffffffffff8311156132ae576132ae6131bc565b6040516132c56020601f19601f87011601826131d2565b8091508381528484840111156132da57600080fd5b83836020830137600060208583010152509392505050565b600082601f83011261330357600080fd5b6124b583833560208501613294565b600080600080600060a0868803121561332a57600080fd5b6133338661300d565b94506133416020870161300d565b9350604086013567ffffffffffffffff8082111561335e57600080fd5b61336a89838a01613223565b9450606088013591508082111561338057600080fd5b61338c89838a01613223565b935060808801359150808211156133a257600080fd5b506133af888289016132f2565b9150509295509295909350565b803561ffff8116811461302457600080fd5b600082601f8301126133df57600080fd5b813560206133ec826131ff565b6040516133f982826131d2565b83815260059390931b850182019282810191508684111561341957600080fd5b8286015b848110156132895761342e816133bc565b835291830191830161341d565b6000806040838503121561344e57600080fd5b823567ffffffffffffffff8082111561346657600080fd5b613472868387016133ce565b9350602085013591508082111561348857600080fd5b50613495858286016133ce565b9150509250929050565b6000602082840312156134b157600080fd5b813563ffffffff811681146124b557600080fd5b600082601f8301126134d657600080fd5b813560206134e3826131ff565b6040516134f082826131d2565b83815260059390931b850182019282810191508684111561351057600080fd5b8286015b84811015613289576135258161300d565b8352918301918301613514565b6000806040838503121561354557600080fd5b823567ffffffffffffffff8082111561355d57600080fd5b613569868387016134c5565b9350602085013591508082111561357f57600080fd5b5061349585828601613223565b600081518084526020808501945080840160005b838110156135bc578151875295820195908201906001016135a0565b509495945050505050565b6020815260006124b5602083018461358c565b6000602082840312156135ec57600080fd5b6124b5826133bc565b60006020828403121561360757600080fd5b813567ffffffffffffffff81111561361e57600080fd5b8201601f8101841361362f57600080fd5b61363e84823560208401613294565b949350505050565b60006020828403121561365857600080fd5b813567ffffffffffffffff81111561366f57600080fd5b61363e848285016133ce565b60006020828403121561368d57600080fd5b813567ffffffffffffffff8111156136a457600080fd5b61363e848285016134c5565b600080604083850312156136c357600080fd5b6136cc8361300d565b91506136da6020840161300d565b90509250929050565b600080600080600060a086880312156136fb57600080fd5b6137048661300d565b94506137126020870161300d565b93506040860135925060608601359150608086013567ffffffffffffffff81111561373c57600080fd5b6133af888289016132f2565b60006020828403121561375a57600080fd5b6124b58261300d565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b600181811c908216806137a657607f821691505b602082108114156137c757634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600061ffff838116908316818110156137fe576137fe6137cd565b039392505050565b6000816000190483118215151615613820576138206137cd565b500290565b60008261384257634e487b7160e01b600052601260045260246000fd5b500490565b600082821015613859576138596137cd565b500390565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561388657600080fd5b81516124b581613177565b600061ffff8083168185168083038211156138ae576138ae6137cd565b01949350505050565b600061ffff808316818114156138cf576138cf6137cd565b6001019392505050565b60006000198214156138ed576138ed6137cd565b5060010190565b600063ffffffff8083168185168083038211156138ae576138ae6137cd565b600060ff821660ff81141561392a5761392a6137cd565b60010192915050565b60008219821115613946576139466137cd565b500190565b60408152600061395e604083018561358c565b8281036020840152613970818561358c565b95945050505050565b60006001600160a01b03808816835280871660208401525060a060408301526139a560a083018661358c565b82810360608401526139b7818661358c565b905082810360808401526139cb8185613086565b98975050505050505050565b6000602082840312156139e957600080fd5b81516124b581613053565b600060033d1115613a0d5760046000803e5060005160e01c5b90565b600060443d1015613a1e5790565b6040517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc803d016004833e81513d67ffffffffffffffff8160248401118184111715613a6c57505050505090565b8285019150815181811115613a845750505050505090565b843d8701016020828501011115613a9e5750505050505090565b613aad602082860101876131d2565b509095945050505050565b60006001600160a01b03808816835280871660208401525084604083015283606083015260a06080830152613af060a0830184613086565b97965050505050505056fea2646970667358221220ea2d5d2cacba2b60b6adf675dee0747fc61b9ae82cd7bb0ac3deed781670b2e064736f6c634300080b003368747470733a2f2f636c6f7564666c6172652d697066732e636f6d2f69706e732f6b326b347238703366707977787031686a667665303139686972633473366d37716332663379706965636737656b783275387066696b39372f7b69647d00000000000000000000000031ae5109e5adb582f4f42ca9aaa9a723a325f2140000000000000000000000002b19466ee159de81c0393b933472bba4ebd8e0be

Deployed Bytecode

0x6080604052600436106102165760003560e01c8063715018a611610126578063d1822209116100a7578063e985e9c511610079578063f2fde38b11610061578063f2fde38b14610801578063fb2f494214610821578063fdd2069e1461085557005b8063e985e9c5146107c1578063f242432a146107e157005b8063d182220914610733578063d5abeb0114610753578063d67b06c114610776578063da80e59b1461079657005b80639b642de1116100f8578063a22cb465116100e0578063a22cb46514610585578063a411104c146105a5578063d06fcba8146105f557005b80639b642de1146105455780639c5e92fb1461056557005b8063715018a6146104ac578063891cb017146104c15780638da5cb5b146104e157806395d89b41146104ff57005b80632eb2c2d6116101b057806346914712116101825780634e1273f41161016a5780634e1273f41461043f57806352bdc3901461046c578063562e438b1461048c57005b806346914712146103d35780634d383176146103f357005b80632eb2c2d614610366578063313ce5671461038657806333abe5441461039a57806345a7d498146103b357005b80630e89341c116101e95780630e89341c146102f157806318054c371461031157806318160ddd146103315780632e1a7d4d1461034657005b8062fdd58e1461021f57806301ffc9a71461025257806306fdde031461028257806309a3beef146102d157005b3661021d57005b005b34801561022b57600080fd5b5061023f61023a366004613029565b61087a565b6040519081526020015b60405180910390f35b34801561025e57600080fd5b5061027261026d366004613069565b610931565b6040519015158152602001610249565b34801561028e57600080fd5b5060408051808201909152600d81527f4177616b656e65642d476561720000000000000000000000000000000000000060208201525b60405161024991906130d3565b3480156102dd57600080fd5b5061021d6102ec3660046130e6565b6109ce565b3480156102fd57600080fd5b506102c461030c36600461315e565b610a67565b34801561031d57600080fd5b5061021d61032c366004613185565b610afb565b34801561033d57600080fd5b5061023f610bb5565b34801561035257600080fd5b5061021d61036136600461315e565b610bda565b34801561037257600080fd5b5061021d610381366004613312565b610d53565b34801561039257600080fd5b50600061023f565b3480156103a657600080fd5b5060045461ffff1661023f565b3480156103bf57600080fd5b5061021d6103ce36600461343b565b610df5565b3480156103df57600080fd5b5061021d6103ee36600461349f565b61124a565b3480156103ff57600080fd5b506104277f0000000000000000000000002b19466ee159de81c0393b933472bba4ebd8e0be81565b6040516001600160a01b039091168152602001610249565b34801561044b57600080fd5b5061045f61045a366004613532565b6112eb565b60405161024991906135c7565b34801561047857600080fd5b5061021d6104873660046135da565b611429565b34801561049857600080fd5b5061021d6104a73660046135da565b6114f8565b3480156104b857600080fd5b5061021d6115f3565b3480156104cd57600080fd5b5061021d6104dc36600461343b565b611659565b3480156104ed57600080fd5b506003546001600160a01b0316610427565b34801561050b57600080fd5b5060408051808201909152600581527f476561727300000000000000000000000000000000000000000000000000000060208201526102c4565b34801561055157600080fd5b5061021d6105603660046135f5565b6119eb565b34801561057157600080fd5b5061021d610580366004613646565b611a51565b34801561059157600080fd5b5061021d6105a0366004613185565b611f2e565b3480156105b157600080fd5b506102726105c0366004613029565b6000908152602081815260408083206001600160a01b039490941683529290522054640100000000900463ffffffff16151590565b34801561060157600080fd5b506004546106c59061ffff808216916201000081048216916401000000008204811691660100000000000081048216916801000000000000000082048116916a010000000000000000000081049091169063ffffffff6c0100000000000000000000000082048116917001000000000000000000000000000000008104821691740100000000000000000000000000000000000000008204169067ffffffffffffffff7801000000000000000000000000000000000000000000000000909104168a565b6040805161ffff9b8c168152998b1660208b0152978a169789019790975294881660608801529287166080870152951660a085015263ffffffff94851660c0850152841660e08401529290921661010082015267ffffffffffffffff90911661012082015261014001610249565b34801561073f57600080fd5b5061021d61074e3660046135da565b612019565b34801561075f57600080fd5b506004546601000000000000900461ffff1661023f565b34801561078257600080fd5b5061021d61079136600461367b565b6120a8565b3480156107a257600080fd5b506004546c01000000000000000000000000900463ffffffff1661023f565b3480156107cd57600080fd5b506102726107dc3660046136b0565b612469565b3480156107ed57600080fd5b5061021d6107fc3660046136e3565b6124bc565b34801561080d57600080fd5b5061021d61081c366004613748565b612557565b34801561082d57600080fd5b506104277f00000000000000000000000031ae5109e5adb582f4f42ca9aaa9a723a325f21481565b34801561086157600080fd5b5060045468010000000000000000900461ffff1661023f565b60006001600160a01b0383166108fd5760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201527f65726f206164647265737300000000000000000000000000000000000000000060648201526084015b60405180910390fd5b506000908152602081815260408083206001600160a01b039490941683529290522054640100000000900463ffffffff1690565b60006001600160e01b031982167fd9b67a2600000000000000000000000000000000000000000000000000000000148061099457506001600160e01b031982167f0e89341c00000000000000000000000000000000000000000000000000000000145b806109c857507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b92915050565b6003546001600160a01b03163314610a285760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108f4565b807f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b8484604051610a5a929190613763565b60405180910390a2505050565b606060028054610a7690613792565b80601f0160208091040260200160405190810160405280929190818152602001828054610aa290613792565b8015610aef5780601f10610ac457610100808354040283529160200191610aef565b820191906000526020600020905b815481529060010190602001808311610ad257829003601f168201915b50505050509050919050565b6003546001600160a01b03163314610b555760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108f4565b6001600160a01b038216600081815260056020908152604091829020805460ff191685151590811790915591519182527f270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b91015b60405180910390a25050565b600454600090610bd19060019062010000900461ffff166137e3565b61ffff16905090565b6003546001600160a01b03163314610c345760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108f4565b47811115610c845760405162461bcd60e51b815260206004820152601860248201527f6578636565642077697468647261772062616c616e63652e000000000000000060448201526064016108f4565b80610c8c5750475b60006064610c9b836005613806565b610ca59190613825565b604051909150732130c75cac9e1ef6381c6f354331b3049221391c9082156108fc029083906000818181858888f19350505050158015610ce9573d6000803e3d6000fd5b50336108fc610cf88385613847565b6040518115909202916000818181858888f19350505050158015610d20573d6000803e3d6000fd5b5060405182815233907fccbd99ba6da8f29b2a4f65e474e3c3973564d356c162c08d45f3dc7f0cb5b3aa90602001610ba9565b6001600160a01b038516331480610d6f5750610d6f8533612469565b610de15760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f742060448201527f6f776e6572206e6f7220617070726f766564000000000000000000000000000060648201526084016108f4565b610dee8585858585612636565b5050505050565b8151815114610e6c5760405162461bcd60e51b815260206004820152603360248201527f4d757374207468652073616d65206c656e677468206265747765656e206d756c60448201527f74697061737320616e6420617661746172732e0000000000000000000000000060648201526084016108f4565b815160045461ffff9182169133916201000090041660005b838161ffff161015611225577f00000000000000000000000031ae5109e5adb582f4f42ca9aaa9a723a325f2146001600160a01b031663616cd9fa878361ffff1681518110610ed557610ed561385e565b60200260200101516040518263ffffffff1660e01b8152600401610f03919061ffff91909116815260200190565b602060405180830381865afa158015610f20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f449190613874565b611213577f00000000000000000000000031ae5109e5adb582f4f42ca9aaa9a723a325f2146001600160a01b03166309b60a27878361ffff1681518110610f8d57610f8d61385e565b60209081029190910101516040516001600160e01b031960e084901b16815261ffff91821660048201526001600160a01b03871660248201529085166044820152606401600060405180830381600087803b158015610feb57600080fd5b505af1158015610fff573d6000803e3d6000fd5b50505050858161ffff16815181106110195761101961385e565b60209081029190910181015161ffff848116600090815280845260408082206001600160a01b0389811684529552902080546bffffffff00000000ffff0000191662010000938316939093026bffffffff0000000000000000191692909217680100000000000000004263ffffffff16021790915586517f0000000000000000000000002b19466ee159de81c0393b933472bba4ebd8e0be90921691631fc68a279188919085169081106110cf576110cf61385e565b60209081029190910101516040516001600160e01b031960e084901b16815261ffff91821660048201526001600160a01b03871660248201529085166044820152606401600060405180830381600087803b15801561112d57600080fd5b505af1158015611141573d6000803e3d6000fd5b505050508161ffff167f496528518bcc717be334d30fdc9269aeae3d48b548e4033b7c1858575e3d767884878461ffff16815181106111825761118261385e565b60200260200101516040516111b09291906001600160a01b0392909216825261ffff16602082015260400190565b60405180910390a26040805161ffff84168152600160208201526000916001600160a01b0386169182917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4611210600183613891565b91505b8061121d816138b7565b915050610e84565b506004805461ffff909216620100000263ffff00001990921691909117905550505050565b6003546001600160a01b031633146112a45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108f4565b6004805463ffffffff9092166c01000000000000000000000000027fffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffffff909216919091179055565b606081518351146113645760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e67746860448201527f206d69736d61746368000000000000000000000000000000000000000000000060648201526084016108f4565b6000835167ffffffffffffffff811115611380576113806131bc565b6040519080825280602002602001820160405280156113a9578160200160208202803683370190505b50905060005b8451811015611421576113f48582815181106113cd576113cd61385e565b60200260200101518583815181106113e7576113e761385e565b602002602001015161087a565b8282815181106114065761140661385e565b602090810291909101015261141a816138d9565b90506113af565b509392505050565b6003546001600160a01b031633146114835760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108f4565b600480547fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff166801000000000000000061ffff8416908102919091179091556040519081527f0b5775d94cccfd234eaeda693f5ec7294926bb1f2d51c2faa66f7cc663b5f86c9060200160405180910390a150565b6003546001600160a01b031633146115525760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108f4565b60045461ffff6601000000000000909104811690821611156115b65760405162461bcd60e51b815260206004820152601160248201527f657863656564206d617820737570706c7900000000000000000000000000000060448201526064016108f4565b6004805461ffff909216640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff909216919091179055565b6003546001600160a01b0316331461164d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108f4565b6116576000612942565b565b805182513391146116d25760405162461bcd60e51b815260206004820152602f60248201527f4d757374207468652073616d65206c656e677468206265747765656e2061766160448201527f7461727320616e642067656172732e000000000000000000000000000000000060648201526084016108f4565b60005b83518110156119e557611735828583815181106116f4576116f461385e565b602002602001015161ffff166000908152602081815260408083206001600160a01b039490941683529290522054640100000000900463ffffffff16151590565b6117815760405162461bcd60e51b815260206004820152601d60248201527f486f6c6465723a646964206e6f74206f776e207468697320746f6b656e00000060448201526064016108f4565b7f0000000000000000000000002b19466ee159de81c0393b933472bba4ebd8e0be6001600160a01b0316631fc68a278483815181106117c2576117c261385e565b6020026020010151848785815181106117dd576117dd61385e565b60209081029190910101516040516001600160e01b031960e086901b16815261ffff93841660048201526001600160a01b039092166024830152919091166044820152606401600060405180830381600087803b15801561183d57600080fd5b505af1158015611851573d6000803e3d6000fd5b50505050600080600086848151811061186c5761186c61385e565b602002602001015161ffff1681526020019081526020016000206000846001600160a01b03166001600160a01b0316815260200190815260200160002060000160046101000a81548163ffffffff021916908363ffffffff1602179055508381815181106118dc576118dc61385e565b602002602001015161ffff167f496528518bcc717be334d30fdc9269aeae3d48b548e4033b7c1858575e3d76788385848151811061191c5761191c61385e565b602002602001015160405161194a9291906001600160a01b0392909216825261ffff16602082015260400190565b60405180910390a260006001600160a01b0316826001600160a01b0316836001600160a01b03167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628785815181106119a4576119a461385e565b602002602001015160016040516119cb92919061ffff929092168252602082015260400190565b60405180910390a4806119dd816138d9565b9150506116d5565b50505050565b6003546001600160a01b03163314611a455760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108f4565b611a4e816129ac565b50565b8051600454611a6d90640100000000900461ffff166001613891565b60045461ffff91821691611a8a9184916201000090910416613891565b61ffff161115611adc5760405162461bcd60e51b815260206004820152601660248201527f45786365656420746865206d617820737570706c79210000000000000000000060448201526064016108f4565b60045461ffff16611b2f5760405162461bcd60e51b815260206004820152601960248201527f4d696e74696e6720616c72656164792073746f70206e6f77210000000000000060448201526064016108f4565b60045461ffff6801000000000000000090910481169082161115611bbb5760405162461bcd60e51b815260206004820152602560248201527f65786365656420746865206d6178206d696e74696e67206c696d69742070657260448201527f2074696d6500000000000000000000000000000000000000000000000000000060648201526084016108f4565b815160045461ffff9182169133916201000090041660005b838161ffff161015611225577f00000000000000000000000031ae5109e5adb582f4f42ca9aaa9a723a325f2146001600160a01b031663616cd9fa878361ffff1681518110611c2457611c2461385e565b60200260200101516040518263ffffffff1660e01b8152600401611c52919061ffff91909116815260200190565b602060405180830381865afa158015611c6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c939190613874565b611f1c577f00000000000000000000000031ae5109e5adb582f4f42ca9aaa9a723a325f2146001600160a01b03166309b60a27878361ffff1681518110611cdc57611cdc61385e565b60209081029190910101516040516001600160e01b031960e084901b16815261ffff91821660048201526001600160a01b03871660248201529085166044820152606401600060405180830381600087803b158015611d3a57600080fd5b505af1158015611d4e573d6000803e3d6000fd5b50505061ffff83166000908152602081815260408083206001600160a01b03881684529091529020805460019250600490611d9990849063ffffffff640100000000909104166138f4565b92506101000a81548163ffffffff021916908363ffffffff160217905550858161ffff1681518110611dcd57611dcd61385e565b60209081029190910181015161ffff848116600090815280845260408082206001600160a01b0389168084529552812080546bffffffff00000000ffff000019166201000093909416929092026bffffffff0000000000000000191692909217680100000000000000004263ffffffff1602179055336040805161ffff87168152600160208201526001600160a01b0392909216917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4858161ffff1681518110611ea357611ea361385e565b602002602001015161ffff168261ffff167fa12b61d85beb74739a4e8bce8bcae3b100f55a7b5e16ab91ff117a9c69439d4e858642604051611f06939291906001600160a01b039384168152919092166020820152604081019190915260600190565b60405180910390a3611f19600183613891565b91505b80611f26816138b7565b915050611bd3565b336001600160a01b0383161415611fad5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c2073746174757360448201527f20666f722073656c66000000000000000000000000000000000000000000000060648201526084016108f4565b3360008181526001602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6003546001600160a01b031633146120735760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108f4565b600480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001661ffff92909216919091179055565b6003546001600160a01b031633146121025760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108f4565b60045461211c90640100000000900461ffff166001613891565b815160045461ffff92831692612139929162010000900416613891565b61ffff16111561218b5760405162461bcd60e51b815260206004820152601660248201527f45786365656420746865206d617820737570706c79210000000000000000000060448201526064016108f4565b805160045462010000900461ffff1660005b8260ff168160ff1610156124465760016000808461ffff1681526020019081526020016000206000868460ff16815181106121da576121da61385e565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060000160048282829054906101000a900463ffffffff1661222391906138f4565b92506101000a81548163ffffffff021916908363ffffffff160217905550426000808461ffff1681526020019081526020016000206000868460ff168151811061226f5761226f61385e565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060000160086101000a81548163ffffffff021916908363ffffffff16021790555061ffff6000808461ffff1681526020019081526020016000206000868460ff16815181106122e8576122e861385e565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060000160026101000a81548161ffff021916908361ffff160217905550838160ff16815181106123425761234261385e565b60200260200101516001600160a01b031660006001600160a01b03166123653390565b6040805161ffff87168152600160208201526001600160a01b0392909216917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a461ffff8261ffff167fa12b61d85beb74739a4e8bce8bcae3b100f55a7b5e16ab91ff117a9c69439d4e868460ff16815181106123ed576123ed61385e565b60200260200101516123fc3390565b604080516001600160a01b039384168152929091166020830152429082015260600160405180910390a381612430816138b7565b925050808061243e90613913565b91505061219d565b506004805461ffff909216620100000263ffff0000199092169190911790555050565b6001600160a01b03811660009081526005602052604081205460ff16806124b557506001600160a01b0380841660009081526001602090815260408083209386168352929052205460ff165b9392505050565b6001600160a01b0385163314806124d857506124d88533612469565b61254a5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201527f20617070726f766564000000000000000000000000000000000000000000000060648201526084016108f4565b610dee85858585856129c3565b6003546001600160a01b031633146125b15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108f4565b6001600160a01b03811661262d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016108f4565b611a4e81612942565b81518351146126ad5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060448201527f6d69736d6174636800000000000000000000000000000000000000000000000060648201526084016108f4565b6001600160a01b0384166127295760405162461bcd60e51b815260206004820152602560248201527f455243313135353a207472616e7366657220746f20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016108f4565b3360005b84518110156128d457600085828151811061274a5761274a61385e565b6020026020010151905060008583815181106127685761276861385e565b602090810291909101810151600084815280835260408082206001600160a01b038e1683529093529190912054909150640100000000900463ffffffff168181101561281c5760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60448201527f72207472616e736665720000000000000000000000000000000000000000000060648201526084016108f4565b6000838152602081815260408083206001600160a01b038e811685529252808320805467ffffffff00000000191664010000000087870363ffffffff908116820292909217909255928d16845292205461287a928592910416613933565b6000938452602084815260408086206001600160a01b038d168752909152909320805463ffffffff949094166401000000000267ffffffff000000001990941693909317909255506128cd9050816138d9565b905061272d565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161292492919061394b565b60405180910390a461293a818787878787612bf9565b505050505050565b600380546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b80516129bf906002906020840190612f74565b5050565b6001600160a01b038416612a3f5760405162461bcd60e51b815260206004820152602560248201527f455243313135353a207472616e7366657220746f20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016108f4565b33612a58818787612a4f88612de6565b610dee88612de6565b6000848152602081815260408083206001600160a01b038a168452909152902054640100000000900463ffffffff1683811015612afd5760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60448201527f72207472616e736665720000000000000000000000000000000000000000000060648201526084016108f4565b6000858152602081815260408083206001600160a01b038b811685529252808320805467ffffffff00000000191664010000000089870363ffffffff908116820292909217909255928a168452922054612b5b928792910416613933565b6000868152602081815260408083206001600160a01b038b811680865291845293829020805463ffffffff969096166401000000000267ffffffff00000000199096169590951790945580518981529182018890528a8316928616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4612bf0828888888888612e31565b50505050505050565b6001600160a01b0384163b1561293a576040517fbc197c810000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063bc197c8190612c569089908990889088908890600401613979565b6020604051808303816000875af1925050508015612c91575060408051601f3d908101601f19168201909252612c8e918101906139d7565b60015b612d4757612c9d6139f4565b806308c379a01415612cd75750612cb2613a10565b80612cbd5750612cd9565b8060405162461bcd60e51b81526004016108f491906130d3565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e204552433131353560448201527f526563656976657220696d706c656d656e74657200000000000000000000000060648201526084016108f4565b6001600160e01b031981167fbc197c810000000000000000000000000000000000000000000000000000000014612bf05760405162461bcd60e51b815260206004820152602860248201527f455243313135353a204552433131353552656365697665722072656a6563746560448201527f6420746f6b656e7300000000000000000000000000000000000000000000000060648201526084016108f4565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110612e2057612e2061385e565b602090810291909101015292915050565b6001600160a01b0384163b1561293a576040517ff23a6e610000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063f23a6e6190612e8e9089908990889088908890600401613ab8565b6020604051808303816000875af1925050508015612ec9575060408051601f3d908101601f19168201909252612ec6918101906139d7565b60015b612ed557612c9d6139f4565b6001600160e01b031981167ff23a6e610000000000000000000000000000000000000000000000000000000014612bf05760405162461bcd60e51b815260206004820152602860248201527f455243313135353a204552433131353552656365697665722072656a6563746560448201527f6420746f6b656e7300000000000000000000000000000000000000000000000060648201526084016108f4565b828054612f8090613792565b90600052602060002090601f016020900481019282612fa25760008555612fe8565b82601f10612fbb57805160ff1916838001178555612fe8565b82800160010185558215612fe8579182015b82811115612fe8578251825591602001919060010190612fcd565b50612ff4929150612ff8565b5090565b5b80821115612ff45760008155600101612ff9565b80356001600160a01b038116811461302457600080fd5b919050565b6000806040838503121561303c57600080fd5b6130458361300d565b946020939093013593505050565b6001600160e01b031981168114611a4e57600080fd5b60006020828403121561307b57600080fd5b81356124b581613053565b6000815180845260005b818110156130ac57602081850181015186830182015201613090565b818111156130be576000602083870101525b50601f01601f19169290920160200192915050565b6020815260006124b56020830184613086565b6000806000604084860312156130fb57600080fd5b833567ffffffffffffffff8082111561311357600080fd5b818601915086601f83011261312757600080fd5b81358181111561313657600080fd5b87602082850101111561314857600080fd5b6020928301989097509590910135949350505050565b60006020828403121561317057600080fd5b5035919050565b8015158114611a4e57600080fd5b6000806040838503121561319857600080fd5b6131a18361300d565b915060208301356131b181613177565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff821117156131f8576131f86131bc565b6040525050565b600067ffffffffffffffff821115613219576132196131bc565b5060051b60200190565b600082601f83011261323457600080fd5b81356020613241826131ff565b60405161324e82826131d2565b83815260059390931b850182019282810191508684111561326e57600080fd5b8286015b848110156132895780358352918301918301613272565b509695505050505050565b600067ffffffffffffffff8311156132ae576132ae6131bc565b6040516132c56020601f19601f87011601826131d2565b8091508381528484840111156132da57600080fd5b83836020830137600060208583010152509392505050565b600082601f83011261330357600080fd5b6124b583833560208501613294565b600080600080600060a0868803121561332a57600080fd5b6133338661300d565b94506133416020870161300d565b9350604086013567ffffffffffffffff8082111561335e57600080fd5b61336a89838a01613223565b9450606088013591508082111561338057600080fd5b61338c89838a01613223565b935060808801359150808211156133a257600080fd5b506133af888289016132f2565b9150509295509295909350565b803561ffff8116811461302457600080fd5b600082601f8301126133df57600080fd5b813560206133ec826131ff565b6040516133f982826131d2565b83815260059390931b850182019282810191508684111561341957600080fd5b8286015b848110156132895761342e816133bc565b835291830191830161341d565b6000806040838503121561344e57600080fd5b823567ffffffffffffffff8082111561346657600080fd5b613472868387016133ce565b9350602085013591508082111561348857600080fd5b50613495858286016133ce565b9150509250929050565b6000602082840312156134b157600080fd5b813563ffffffff811681146124b557600080fd5b600082601f8301126134d657600080fd5b813560206134e3826131ff565b6040516134f082826131d2565b83815260059390931b850182019282810191508684111561351057600080fd5b8286015b84811015613289576135258161300d565b8352918301918301613514565b6000806040838503121561354557600080fd5b823567ffffffffffffffff8082111561355d57600080fd5b613569868387016134c5565b9350602085013591508082111561357f57600080fd5b5061349585828601613223565b600081518084526020808501945080840160005b838110156135bc578151875295820195908201906001016135a0565b509495945050505050565b6020815260006124b5602083018461358c565b6000602082840312156135ec57600080fd5b6124b5826133bc565b60006020828403121561360757600080fd5b813567ffffffffffffffff81111561361e57600080fd5b8201601f8101841361362f57600080fd5b61363e84823560208401613294565b949350505050565b60006020828403121561365857600080fd5b813567ffffffffffffffff81111561366f57600080fd5b61363e848285016133ce565b60006020828403121561368d57600080fd5b813567ffffffffffffffff8111156136a457600080fd5b61363e848285016134c5565b600080604083850312156136c357600080fd5b6136cc8361300d565b91506136da6020840161300d565b90509250929050565b600080600080600060a086880312156136fb57600080fd5b6137048661300d565b94506137126020870161300d565b93506040860135925060608601359150608086013567ffffffffffffffff81111561373c57600080fd5b6133af888289016132f2565b60006020828403121561375a57600080fd5b6124b58261300d565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b600181811c908216806137a657607f821691505b602082108114156137c757634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600061ffff838116908316818110156137fe576137fe6137cd565b039392505050565b6000816000190483118215151615613820576138206137cd565b500290565b60008261384257634e487b7160e01b600052601260045260246000fd5b500490565b600082821015613859576138596137cd565b500390565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561388657600080fd5b81516124b581613177565b600061ffff8083168185168083038211156138ae576138ae6137cd565b01949350505050565b600061ffff808316818114156138cf576138cf6137cd565b6001019392505050565b60006000198214156138ed576138ed6137cd565b5060010190565b600063ffffffff8083168185168083038211156138ae576138ae6137cd565b600060ff821660ff81141561392a5761392a6137cd565b60010192915050565b60008219821115613946576139466137cd565b500190565b60408152600061395e604083018561358c565b8281036020840152613970818561358c565b95945050505050565b60006001600160a01b03808816835280871660208401525060a060408301526139a560a083018661358c565b82810360608401526139b7818661358c565b905082810360808401526139cb8185613086565b98975050505050505050565b6000602082840312156139e957600080fd5b81516124b581613053565b600060033d1115613a0d5760046000803e5060005160e01c5b90565b600060443d1015613a1e5790565b6040517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc803d016004833e81513d67ffffffffffffffff8160248401118184111715613a6c57505050505090565b8285019150815181811115613a845750505050505090565b843d8701016020828501011115613a9e5750505050505090565b613aad602082860101876131d2565b509095945050505050565b60006001600160a01b03808816835280871660208401525084604083015283606083015260a06080830152613af060a0830184613086565b97965050505050505056fea2646970667358221220ea2d5d2cacba2b60b6adf675dee0747fc61b9ae82cd7bb0ac3deed781670b2e064736f6c634300080b0033

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

00000000000000000000000031ae5109e5adb582f4f42ca9aaa9a723a325f2140000000000000000000000002b19466ee159de81c0393b933472bba4ebd8e0be

-----Decoded View---------------
Arg [0] : _multipass (address): 0x31aE5109E5ADB582F4F42cA9AAA9a723a325f214
Arg [1] : _avatarAddress (address): 0x2B19466eE159DE81c0393b933472BbA4EbD8E0BE

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 00000000000000000000000031ae5109e5adb582f4f42ca9aaa9a723a325f214
Arg [1] : 0000000000000000000000002b19466ee159de81c0393b933472bba4ebd8e0be


Deployed Bytecode Sourcemap

38007:8978:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23888:238;;;;;;;;;;-1:-1:-1;23888:238:0;;;;;:::i;:::-;;:::i;:::-;;;620:25:1;;;608:2;593:18;23888:238:0;;;;;;;;22911:310;;;;;;;;;;-1:-1:-1;22911:310:0;;;;;:::i;:::-;;:::i;:::-;;;1253:14:1;;1246:22;1228:41;;1216:2;1201:18;22911:310:0;1088:187:1;39573:98:0;;;;;;;;;;-1:-1:-1;39641:22:0;;;;;;;;;;;;;;;;;39573:98;;;;;;;:::i;42449:113::-;;;;;;;;;;-1:-1:-1;42449:113:0;;;;;:::i;:::-;;:::i;23632:105::-;;;;;;;;;;-1:-1:-1;23632:105:0;;;;;:::i;:::-;;:::i;41788:194::-;;;;;;;;;;-1:-1:-1;41788:194:0;;;;;:::i;:::-;;:::i;39881:107::-;;;;;;;;;;;;;:::i;40564:472::-;;;;;;;;;;-1:-1:-1;40564:472:0;;;;;:::i;:::-;;:::i;25990:442::-;;;;;;;;;;-1:-1:-1;25990:442:0;;;;;:::i;:::-;;:::i;39779:94::-;;;;;;;;;;-1:-1:-1;39829:7:0;39779:94;;40201:104;;;;;;;;;;-1:-1:-1;40275:8:0;:22;;;40201:104;;44897:1187;;;;;;;;;;-1:-1:-1;44897:1187:0;;;;;:::i;:::-;;:::i;42297:119::-;;;;;;;;;;-1:-1:-1;42297:119:0;;;;;:::i;:::-;;:::i;38505:38::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8402:55:1;;;8384:74;;8372:2;8357:18;38505:38:0;8238:226:1;24292:524:0;;;;;;;;;;-1:-1:-1;24292:524:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;42046:197::-;;;;;;;;;;-1:-1:-1;42046:197:0;;;;;:::i;:::-;;:::i;42807:183::-;;;;;;;;;;-1:-1:-1;42807:183:0;;;;;:::i;:::-;;:::i;3051:103::-;;;;;;;;;;;;;:::i;44194:695::-;;;;;;;;;;-1:-1:-1;44194:695:0;;;;;:::i;:::-;;:::i;2400:87::-;;;;;;;;;;-1:-1:-1;2473:6:0;;-1:-1:-1;;;;;2473:6:0;2400:87;;39679:92;;;;;;;;;;-1:-1:-1;39749:14:0;;;;;;;;;;;;;;;;;39679:92;;42998:96;;;;;;;;;;-1:-1:-1;42998:96:0;;;;;:::i;:::-;;:::i;43102:1084::-;;;;;;;;;;-1:-1:-1;43102:1084:0;;;;;:::i;:::-;;:::i;24889:311::-;;;;;;;;;;-1:-1:-1;24889:311:0;;;;;:::i;:::-;;:::i;41425:135::-;;;;;;;;;;-1:-1:-1;41425:135:0;;;;;:::i;:::-;41491:4;41520:14;;;;;;;;;;;-1:-1:-1;;;;;41520:21:0;;;;;;;;;;:28;;;;;;:32;;;41425:135;38426:24;;;;;;;;;;-1:-1:-1;38426:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11894:6:1;11927:15;;;11909:34;;11979:15;;;11974:2;11959:18;;11952:43;12031:15;;;12011:18;;;12004:43;;;;12083:15;;;12078:2;12063:18;;12056:43;12136:15;;;12130:3;12115:19;;12108:44;12189:15;;12183:3;12168:19;;12161:44;12224:10;12271:15;;;12265:3;12250:19;;12243:44;12324:15;;12318:3;12303:19;;12296:44;12377:15;;;;12371:3;12356:19;;12349:44;12442:18;12430:31;;;12424:3;12409:19;;12402:60;11871:3;11856:19;38426:24:0;11505:963:1;42611:115:0;;;;;;;;;;-1:-1:-1;42611:115:0;;;;;:::i;:::-;;:::i;39996:97::-;;;;;;;;;;-1:-1:-1;40067:8:0;:18;;;;;;39996:97;;46092:890;;;;;;;;;;-1:-1:-1;46092:890:0;;;;;:::i;:::-;;:::i;40101:92::-;;;;;;;;;;-1:-1:-1;40169:8:0;:16;;;;;;40101:92;;41568:212;;;;;;;;;;-1:-1:-1;41568:212:0;;;;;:::i;:::-;;:::i;25512:401::-;;;;;;;;;;-1:-1:-1;25512:401:0;;;;;:::i;:::-;;:::i;3309:201::-;;;;;;;;;;-1:-1:-1;3309:201:0;;;;;:::i;:::-;;:::i;38457:41::-;;;;;;;;;;;;;;;40313:112;;;;;;;;;;-1:-1:-1;40391:8:0;:26;;;;;;40313:112;;23888:238;23974:7;-1:-1:-1;;;;;24002:21:0;;23994:77;;;;-1:-1:-1;;;23994:77:0;;14095:2:1;23994:77:0;;;14077:21:1;14134:2;14114:18;;;14107:30;14173:34;14153:18;;;14146:62;14244:13;14224:18;;;14217:41;14275:19;;23994:77:0;;;;;;;;;-1:-1:-1;24089:9:0;:13;;;;;;;;;;;-1:-1:-1;;;;;24089:22:0;;;;;;;;;;:29;;;;;;;23888:238::o;22911:310::-;23013:4;-1:-1:-1;;;;;;23050:41:0;;23065:26;23050:41;;:110;;-1:-1:-1;;;;;;;23108:52:0;;23123:37;23108:52;23050:110;:163;;;-1:-1:-1;13925:25:0;-1:-1:-1;;;;;;13910:40:0;;;23177:36;23030:183;22911:310;-1:-1:-1;;22911:310:0:o;42449:113::-;2473:6;;-1:-1:-1;;;;;2473:6:0;1204:10;2620:23;2612:68;;;;-1:-1:-1;;;2612:68:0;;14507:2:1;2612:68:0;;;14489:21:1;;;14526:18;;;14519:30;14585:34;14565:18;;;14558:62;14637:18;;2612:68:0;14305:356:1;2612:68:0;42550:3:::1;42540:14;42544:4;;42540:14;;;;;;;:::i;:::-;;;;;;;;42449:113:::0;;;:::o;23632:105::-;23692:13;23725:4;23718:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23632:105;;;:::o;41788:194::-;2473:6;;-1:-1:-1;;;;;2473:6:0;1204:10;2620:23;2612:68;;;;-1:-1:-1;;;2612:68:0;;14507:2:1;2612:68:0;;;14489:21:1;;;14526:18;;;14519:30;14585:34;14565:18;;;14558:62;14637:18;;2612:68:0;14305:356:1;2612:68:0;-1:-1:-1;;;;;41880:26:0;::::1;;::::0;;;:16:::1;:26;::::0;;;;;;;;:40;;-1:-1:-1;;41880:40:0::1;::::0;::::1;;::::0;;::::1;::::0;;;41936:38;;1228:41:1;;;41936:38:0::1;::::0;1201:18:1;41936:38:0::1;;;;;;;;41788:194:::0;;:::o;39881:107::-;39954:8;:22;39925:4;;39954:26;;39979:1;;39954:22;;;;;:26;:::i;:::-;39947:33;;;;39881:107;:::o;40564:472::-;2473:6;;-1:-1:-1;;;;;2473:6:0;1204:10;2620:23;2612:68;;;;-1:-1:-1;;;2612:68:0;;14507:2:1;2612:68:0;;;14489:21:1;;;14526:18;;;14519:30;14585:34;14565:18;;;14558:62;14637:18;;2612:68:0;14305:356:1;2612:68:0;40648:21:::1;40637:7;:32;;40629:69;;;::::0;-1:-1:-1;;;40629:69:0;;16175:2:1;40629:69:0::1;::::0;::::1;16157:21:1::0;16214:2;16194:18;;;16187:30;16253:26;16233:18;;;16226:54;16297:18;;40629:69:0::1;15973:348:1::0;40629:69:0::1;40713:12:::0;40709:85:::1;;-1:-1:-1::0;40761:21:0::1;40709:85;40804:12;40833:3;40819:11;:7:::0;40829:1:::1;40819:11;:::i;:::-;:17;;;;:::i;:::-;40847:69;::::0;40804:32;;-1:-1:-1;40855:42:0::1;::::0;40847:69;::::1;;;::::0;40804:32;;40847:69:::1;::::0;;;40804:32;40855:42;40847:69;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;1204:10:0;40927:49:::1;40958:17;40968:7:::0;40958;:17:::1;:::i;:::-;40927:49;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;40994:34:0::1;::::0;620:25:1;;;1204:10:0;;40994:34:::1;::::0;608:2:1;593:18;40994:34:0::1;474:177:1::0;25990:442:0;-1:-1:-1;;;;;26223:20:0;;1204:10;26223:20;;:60;;-1:-1:-1;26247:36:0;26264:4;1204:10;41568:212;:::i;26247:36::-;26201:160;;;;-1:-1:-1;;;26201:160:0;;17170:2:1;26201:160:0;;;17152:21:1;17209:2;17189:18;;;17182:30;17248:34;17228:18;;;17221:62;17319:20;17299:18;;;17292:48;17357:19;;26201:160:0;16968:414:1;26201:160:0;26372:52;26395:4;26401:2;26405:3;26410:7;26419:4;26372:22;:52::i;:::-;25990:442;;;;;:::o;44897:1187::-;45029:12;:19;45009:9;:16;:39;45001:103;;;;-1:-1:-1;;;45001:103:0;;17589:2:1;45001:103:0;;;17571:21:1;17628:2;17608:18;;;17601:30;17667:34;17647:18;;;17640:62;17738:21;17718:18;;;17711:49;17777:19;;45001:103:0;17387:415:1;45001:103:0;45136:19;;45233:8;:22;45115:41;;;;;1204:10;;45233:22;;;;45115:11;45268:757;45291:6;45287:1;:10;;;45268:757;;;45348:16;-1:-1:-1;;;;;45333:45:0;;45379:12;45392:1;45379:15;;;;;;;;;;:::i;:::-;;;;;;;45333:62;;;;;;;;;;;;;;18170:6:1;18158:19;;;;18140:38;;18128:2;18113:18;;17996:188;45333:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45328:686;;45444:16;-1:-1:-1;;;;;45429:42:0;;45472:12;45485:1;45472:15;;;;;;;;;;:::i;:::-;;;;;;;;;;;45429:85;;-1:-1:-1;;;;;;45429:85:0;;;;;;;18647:6:1;18680:15;;;45429:85:0;;;18662:34:1;-1:-1:-1;;;;;18732:55:1;;18712:18;;;18705:83;18824:15;;;18804:18;;;18797:43;18610:18;;45429:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45583:12;45596:1;45583:15;;;;;;;;;;:::i;:::-;;;;;;;;;;;;45533:27;;;;:9;:27;;;;;;;;;;-1:-1:-1;;;;;45533:35:0;;;;;;;;;:65;;-1:-1:-1;;45617:79:0;45533:65;;;;;;;;-1:-1:-1;;45617:79:0;;;;;;45680:15;45617:79;;;;;;;45755:12;;45730:13;45717:37;;;;;;45755:12;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;45717:77;;-1:-1:-1;;;;;;45717:77:0;;;;;;;18647:6:1;18680:15;;;45717:77:0;;;18662:34:1;-1:-1:-1;;;;;18732:55:1;;18712:18;;;18705:83;18824:15;;;18804:18;;;18797:43;18610:18;;45717:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45830:16;45820:49;;;45848:6;45856:9;45866:1;45856:12;;;;;;;;;;:::i;:::-;;;;;;;45820:49;;;;;;-1:-1:-1;;;;;19454:55:1;;;;19436:74;;19558:6;19546:19;19541:2;19526:18;;19519:47;19424:2;19409:18;;19263:309;45820:49:0;;;;;;;;45893:63;;;19788:6:1;19776:19;;19758:38;;45954:1:0;19827:2:1;19812:18;;19805:34;45932:1:0;;-1:-1:-1;;;;;45893:63:0;;;;;;;19731:18:1;45893:63:0;;;;;;;45977:21;45997:1;45977:21;;:::i;:::-;;;45328:686;45299:3;;;;:::i;:::-;;;;45268:757;;;-1:-1:-1;46035:8:0;:41;;;;;;;;-1:-1:-1;;46035:41:0;;;;;;;;;-1:-1:-1;;;;44897:1187:0:o;42297:119::-;2473:6;;-1:-1:-1;;;;;2473:6:0;1204:10;2620:23;2612:68;;;;-1:-1:-1;;;2612:68:0;;14507:2:1;2612:68:0;;;14489:21:1;;;14526:18;;;14519:30;14585:34;14565:18;;;14558:62;14637:18;;2612:68:0;14305:356:1;2612:68:0;42375:8:::1;:33:::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;42297:119::o;24292:524::-;24448:16;24509:3;:10;24490:8;:15;:29;24482:83;;;;-1:-1:-1;;;24482:83:0;;20483:2:1;24482:83:0;;;20465:21:1;20522:2;20502:18;;;20495:30;20561:34;20541:18;;;20534:62;20632:11;20612:18;;;20605:39;20661:19;;24482:83:0;20281:405:1;24482:83:0;24578:30;24625:8;:15;24611:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24611:30:0;;24578:63;;24659:9;24654:122;24678:8;:15;24674:1;:19;24654:122;;;24734:30;24744:8;24753:1;24744:11;;;;;;;;:::i;:::-;;;;;;;24757:3;24761:1;24757:6;;;;;;;;:::i;:::-;;;;;;;24734:9;:30::i;:::-;24715:13;24729:1;24715:16;;;;;;;;:::i;:::-;;;;;;;;;;:49;24695:3;;;:::i;:::-;;;24654:122;;;-1:-1:-1;24795:13:0;24292:524;-1:-1:-1;;;24292:524:0:o;42046:197::-;2473:6;;-1:-1:-1;;;;;2473:6:0;1204:10;2620:23;2612:68;;;;-1:-1:-1;;;2612:68:0;;14507:2:1;2612:68:0;;;14489:21:1;;;14526:18;;;14519:30;14585:34;14565:18;;;14558:62;14637:18;;2612:68:0;14305:356:1;2612:68:0;42134:8:::1;:47:::0;;;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;42195:40:::1;::::0;18140:38:1;;;42195:40:0::1;::::0;18128:2:1;18113:18;42195:40:0::1;;;;;;;42046:197:::0;:::o;42807:183::-;2473:6;;-1:-1:-1;;;;;2473:6:0;1204:10;2620:23;2612:68;;;;-1:-1:-1;;;2612:68:0;;14507:2:1;2612:68:0;;;14489:21:1;;;14526:18;;;14519:30;14585:34;14565:18;;;14558:62;14637:18;;2612:68:0;14305:356:1;2612:68:0;42901:8:::1;:18:::0;::::1;::::0;;;::::1;::::0;::::1;42890:29:::0;;::::1;;;42882:59;;;::::0;-1:-1:-1;;;42882:59:0;;21287:2:1;42882:59:0::1;::::0;::::1;21269:21:1::0;21326:2;21306:18;;;21299:30;21365:19;21345:18;;;21338:47;21402:18;;42882:59:0::1;21085:341:1::0;42882:59:0::1;42952:8;:30:::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;42807:183::o;3051:103::-;2473:6;;-1:-1:-1;;;;;2473:6:0;1204:10;2620:23;2612:68;;;;-1:-1:-1;;;2612:68:0;;14507:2:1;2612:68:0;;;14489:21:1;;;14526:18;;;14519:30;14585:34;14565:18;;;14558:62;14637:18;;2612:68:0;14305:356:1;2612:68:0;3116:30:::1;3143:1;3116:18;:30::i;:::-;3051:103::o:0;44194:695::-;44363:16;;44345:14;;1204:10;;44345:34;44337:94;;;;-1:-1:-1;;;44337:94:0;;21633:2:1;44337:94:0;;;21615:21:1;21672:2;21652:18;;;21645:30;21711:34;21691:18;;;21684:62;21782:17;21762:18;;;21755:45;21817:19;;44337:94:0;21431:411:1;44337:94:0;44447:6;44442:440;44463:7;:14;44459:1;:18;44442:440;;;44516:31;44528:6;44536:7;44544:1;44536:10;;;;;;;;:::i;:::-;;;;;;;44516:31;;41491:4;41520:14;;;;;;;;;;;-1:-1:-1;;;;;41520:21:0;;;;;;;;;;:28;;;;;;:32;;;41425:135;44516:31;44508:73;;;;-1:-1:-1;;;44508:73:0;;22049:2:1;44508:73:0;;;22031:21:1;22088:2;22068:18;;;22061:30;22127:31;22107:18;;;22100:59;22176:18;;44508:73:0;21847:353:1;44508:73:0;44609:13;-1:-1:-1;;;;;44596:37:0;;44634:9;44644:1;44634:12;;;;;;;;:::i;:::-;;;;;;;44648:6;44663:7;44671:1;44663:10;;;;;;;;:::i;:::-;;;;;;;;;;;44596:79;;-1:-1:-1;;;;;;44596:79:0;;;;;;;44656:18;22421:19:1;;;44596:79:0;;;22403:38:1;-1:-1:-1;;;;;22477:55:1;;;22457:18;;;22450:83;44656:18:0;;;;22549::1;;;22542:51;22376:18;;44596:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44729:1;44690:9;:21;44700:7;44708:1;44700:10;;;;;;;;:::i;:::-;;;;;;;44690:21;;;;;;;;;;;;;:29;44712:6;-1:-1:-1;;;;;44690:29:0;-1:-1:-1;;;;;44690:29:0;;;;;;;;;;;;:36;;;:40;;;;;;;;;;;;;;;;;;44760:7;44768:1;44760:10;;;;;;;;:::i;:::-;;;;;;;44750:43;;;44772:6;44780:9;44790:1;44780:12;;;;;;;;:::i;:::-;;;;;;;44750:43;;;;;;-1:-1:-1;;;;;19454:55:1;;;;19436:74;;19558:6;19546:19;19541:2;19526:18;;19519:47;19424:2;19409:18;;19263:309;44750:43:0;;;;;;;;44852:1;-1:-1:-1;;;;;44813:57:0;44836:6;-1:-1:-1;;;;;44813:57:0;44828:6;-1:-1:-1;;;;;44813:57:0;;44856:7;44864:1;44856:10;;;;;;;;:::i;:::-;;;;;;;44868:1;44813:57;;;;;;19788:6:1;19776:19;;;;19758:38;;19827:2;19812:18;;19805:34;19746:2;19731:18;;19577:268;44813:57:0;;;;;;;;44479:3;;;;:::i;:::-;;;;44442:440;;;;44286:603;44194:695;;:::o;42998:96::-;2473:6;;-1:-1:-1;;;;;2473:6:0;1204:10;2620:23;2612:68;;;;-1:-1:-1;;;2612:68:0;;14507:2:1;2612:68:0;;;14489:21:1;;;14526:18;;;14519:30;14585:34;14565:18;;;14558:62;14637:18;;2612:68:0;14305:356:1;2612:68:0;43071:15:::1;43079:6;43071:7;:15::i;:::-;42998:96:::0;:::o;43102:1084::-;43170:19;;41137:8;:20;:24;;:20;;;;;41160:1;41137:24;:::i;:::-;41101:8;:22;:60;;;;;:32;;41126:7;;41101:22;;;;;:32;:::i;:::-;:60;;;;41093:95;;;;-1:-1:-1;;;41093:95:0;;22806:2:1;41093:95:0;;;22788:21:1;22845:2;22825:18;;;22818:30;22884:24;22864:18;;;22857:52;22926:18;;41093:95:0;22604:346:1;41093:95:0;41207:8;:22;;;41199:64;;;;-1:-1:-1;;;41199:64:0;;23157:2:1;41199:64:0;;;23139:21:1;23196:2;23176:18;;;23169:30;23235:27;23215:18;;;23208:55;23280:18;;41199:64:0;22955:349:1;41199:64:0;41293:8;:26;;;;;;;;41282:37;;;;;41274:87;;;;-1:-1:-1;;;41274:87:0;;23511:2:1;41274:87:0;;;23493:21:1;23550:2;23530:18;;;23523:30;23589:34;23569:18;;;23562:62;23660:7;23640:18;;;23633:35;23685:19;;41274:87:0;23309:401:1;41274:87:0;43229:19;;43336:8:::1;:22:::0;43208:41:::1;::::0;;::::1;::::0;1204:10;;43336:22;;::::1;;43208:11;43369:758;43392:6;43388:1;:10;;;43369:758;;;43449:16;-1:-1:-1::0;;;;;43434:45:0::1;;43480:12;43493:1;43480:15;;;;;;;;;;:::i;:::-;;;;;;;43434:62;;;;;;;;;;;;;;18170:6:1::0;18158:19;;;;18140:38;;18128:2;18113:18;;17996:188;43434:62:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43429:687;;43545:16;-1:-1:-1::0;;;;;43530:42:0::1;;43573:12;43586:1;43573:15;;;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;43530:85:::1;::::0;-1:-1:-1;;;;;;43530:85:0::1;::::0;;;;;;18647:6:1;18680:15;;;43530:85:0::1;::::0;::::1;18662:34:1::0;-1:-1:-1;;;;;18732:55:1;;18712:18;;;18705:83;18824:15;;;18804:18;;;18797:43;18610:18;;43530:85:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;;43634:27:0::1;::::0;::::1;:9;:27:::0;;;::::1;::::0;;;;;;;-1:-1:-1;;;;;43634:35:0;::::1;::::0;;;;;;;:47;;43680:1:::1;::::0;-1:-1:-1;43634:42:0::1;::::0;:47:::1;::::0;43680:1;;43634:47:::1;::::0;;;::::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;43750:12;43763:1;43750:15;;;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;43700:27:::1;::::0;;::::1;:9;:27:::0;;;;;;;;;;-1:-1:-1;;;;;43700:35:0;::::1;::::0;;;;;;;:65;;-1:-1:-1;;43784:79:0;43700:65;;;;::::1;::::0;;;::::1;-1:-1:-1::0;;43784:79:0;;;;;;43847:15:::1;43784:79;;;;::::0;;1204:10;43889:69:::1;::::0;;19788:6:1;19776:19;;19758:38;;43956:1:0::1;19827:2:1::0;19812:18;;19805:34;-1:-1:-1;;;;;43889:69:0;;;::::1;::::0;::::1;::::0;19731:18:1;43889:69:0::1;;;;;;;44009:12;44022:1;44009:15;;;;;;;;;;:::i;:::-;;;;;;;43982:76;;43991:16;43982:76;;;44026:6;44034;44042:15;43982:76;;;;;;;-1:-1:-1::0;;;;;24229:15:1;;;24211:34;;24281:15;;;;24276:2;24261:18;;24254:43;24328:2;24313:18;;24306:34;;;;24138:2;24123:18;;23948:398;43982:76:0::1;;;;;;;;44079:21;44099:1;44079:21:::0;::::1;:::i;:::-;;;43429:687;43400:3:::0;::::1;::::0;::::1;:::i;:::-;;;;43369:758;;24889:311:::0;1204:10;-1:-1:-1;;;;;24992:24:0;;;;24984:78;;;;-1:-1:-1;;;24984:78:0;;24553:2:1;24984:78:0;;;24535:21:1;24592:2;24572:18;;;24565:30;24631:34;24611:18;;;24604:62;24702:11;24682:18;;;24675:39;24731:19;;24984:78:0;24351:405:1;24984:78:0;1204:10;25075:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;25075:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;25075:53:0;;;;;;;;;;25144:48;;1228:41:1;;;25075:42:0;;1204:10;25144:48;;1201:18:1;25144:48:0;;;;;;;24889:311;;:::o;42611:115::-;2473:6;;-1:-1:-1;;;;;2473:6:0;1204:10;2620:23;2612:68;;;;-1:-1:-1;;;2612:68:0;;14507:2:1;2612:68:0;;;14489:21:1;;;14526:18;;;14519:30;14585:34;14565:18;;;14558:62;14637:18;;2612:68:0;14305:356:1;2612:68:0;42686:8:::1;:32:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;42611:115::o;46092:890::-;2473:6;;-1:-1:-1;;;;;2473:6:0;1204:10;2620:23;2612:68;;;;-1:-1:-1;;;2612:68:0;;14507:2:1;2612:68:0;;;14489:21:1;;;14526:18;;;14519:30;14585:34;14565:18;;;14558:62;14637:18;;2612:68:0;14305:356:1;2612:68:0;46237:8:::1;:20:::0;:24:::1;::::0;:20;;::::1;;;46260:1;46237:24;:::i;:::-;46219:13:::0;;46187:8:::1;:22:::0;:74:::1;::::0;;::::1;::::0;:46:::1;::::0;46219:13;46187:22;;::::1;;:46;:::i;:::-;:74;;;;46179:109;;;::::0;-1:-1:-1;;;46179:109:0;;22806:2:1;46179:109:0::1;::::0;::::1;22788:21:1::0;22845:2;22825:18;;;22818:30;22884:24;22864:18;;;22857:52;22926:18;;46179:109:0::1;22604:346:1::0;46179:109:0::1;46322:13:::0;;46373:8:::1;:22:::0;;;::::1;;;46301:12;46408:515;46430:6;46426:10;;:1;:10;;;46408:515;;;46516:1;46467:9;:27:::0;46477:16:::1;46467:27;;;;;;;;;;;;;:38;46495:6;46502:1;46495:9;;;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;46467:38:0::1;-1:-1:-1::0;;;;;46467:38:0::1;;;;;;;;;;;;:45;;;:50;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;46598:15;46532:9;:27:::0;46542:16:::1;46532:27;;;;;;;;;;;;;:38;46560:6;46567:1;46560:9;;;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;46532:38:0::1;-1:-1:-1::0;;;;;46532:38:0::1;;;;;;;;;;;;:56;;;:82;;;;;;;;;;;;;;;;;;46682:5;46629:9;:27:::0;46639:16:::1;46629:27;;;;;;;;;;;;;:38;46657:6;46664:1;46657:9;;;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;46629:38:0::1;-1:-1:-1::0;;;;;46629:38:0::1;;;;;;;;;;;;:50;;;:58;;;;;;;;;;;;;;;;;;46750:6;46757:1;46750:9;;;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;46709:72:0::1;46746:1;-1:-1:-1::0;;;;;46709:72:0::1;46724:12;1204:10:::0;;1124:98;46724:12:::1;46709:72;::::0;;19788:6:1;19776:19;;19758:38;;46779:1:0::1;19827:2:1::0;19812:18;;19805:34;-1:-1:-1;;;;;46709:72:0;;;::::1;::::0;::::1;::::0;19731:18:1;46709:72:0::1;;;;;;;46828:5;46810:16;46801:75;;;46835:6;46842:1;46835:9;;;;;;;;;;:::i;:::-;;;;;;;46846:12;1204:10:::0;;1124:98;46846:12:::1;46801:75;::::0;;-1:-1:-1;;;;;24229:15:1;;;24211:34;;24281:15;;;;24276:2;24261:18;;24254:43;46860:15:0::1;24313:18:1::0;;;24306:34;24138:2;24123:18;46801:75:0::1;;;;;;;46893:18:::0;::::1;::::0;::::1;:::i;:::-;;;;46438:3;;;;;:::i;:::-;;;;46408:515;;;-1:-1:-1::0;46933:8:0::1;:41:::0;;::::1;::::0;;::::1;::::0;::::1;-1:-1:-1::0;;46933:41:0;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;46092:890:0:o;41568:212::-;-1:-1:-1;;;;;41700:27:0;;41676:4;41700:27;;;:16;:27;;;;;;;;;:72;;-1:-1:-1;;;;;;25395:27:0;;;25371:4;25395:27;;;:18;:27;;;;;;;;:37;;;;;;;;;;;;41731:41;41693:79;41568:212;-1:-1:-1;;;41568:212:0:o;25512:401::-;-1:-1:-1;;;;;25720:20:0;;1204:10;25720:20;;:60;;-1:-1:-1;25744:36:0;25761:4;1204:10;41568:212;:::i;25744:36::-;25698:151;;;;-1:-1:-1;;;25698:151:0;;25143:2:1;25698:151:0;;;25125:21:1;25182:2;25162:18;;;25155:30;25221:34;25201:18;;;25194:62;25292:11;25272:18;;;25265:39;25321:19;;25698:151:0;24941:405:1;25698:151:0;25860:45;25878:4;25884:2;25888;25892:6;25900:4;25860:17;:45::i;3309:201::-;2473:6;;-1:-1:-1;;;;;2473:6:0;1204:10;2620:23;2612:68;;;;-1:-1:-1;;;2612:68:0;;14507:2:1;2612:68:0;;;14489:21:1;;;14526:18;;;14519:30;14585:34;14565:18;;;14558:62;14637:18;;2612:68:0;14305:356:1;2612:68:0;-1:-1:-1;;;;;3398:22:0;::::1;3390:73;;;::::0;-1:-1:-1;;;3390:73:0;;25553:2:1;3390:73:0::1;::::0;::::1;25535:21:1::0;25592:2;25572:18;;;25565:30;25631:34;25611:18;;;25604:62;25702:8;25682:18;;;25675:36;25728:19;;3390:73:0::1;25351:402:1::0;3390:73:0::1;3474:28;3493:8;3474:18;:28::i;28143:1143::-:0;28370:7;:14;28356:3;:10;:28;28348:81;;;;-1:-1:-1;;;28348:81:0;;25960:2:1;28348:81:0;;;25942:21:1;25999:2;25979:18;;;25972:30;26038:34;26018:18;;;26011:62;26109:10;26089:18;;;26082:38;26137:19;;28348:81:0;25758:404:1;28348:81:0;-1:-1:-1;;;;;28448:16:0;;28440:66;;;;-1:-1:-1;;;28440:66:0;;26369:2:1;28440:66:0;;;26351:21:1;26408:2;26388:18;;;26381:30;26447:34;26427:18;;;26420:62;26518:7;26498:18;;;26491:35;26543:19;;28440:66:0;26167:401:1;28440:66:0;1204:10;28519:16;28636:490;28660:3;:10;28656:1;:14;28636:490;;;28692:10;28705:3;28709:1;28705:6;;;;;;;;:::i;:::-;;;;;;;28692:19;;28726:14;28743:7;28751:1;28743:10;;;;;;;;:::i;:::-;;;;;;;;;;;;28770:19;28792:13;;;;;;;;;;-1:-1:-1;;;;;28792:19:0;;;;;;;;;;;:26;28743:10;;-1:-1:-1;28792:26:0;;;;;28841:21;;;;28833:76;;;;-1:-1:-1;;;28833:76:0;;26775:2:1;28833:76:0;;;26757:21:1;26814:2;26794:18;;;26787:30;26853:34;26833:18;;;26826:62;26924:12;26904:18;;;26897:40;26954:19;;28833:76:0;26573:406:1;28833:76:0;28953:9;:13;;;;;;;;;;;-1:-1:-1;;;;;28953:19:0;;;;;;;;;;:57;;-1:-1:-1;;28953:57:0;;28989:20;;;28953:57;;;;;;;;;;;;;29079:17;;;;;;;:24;29074:39;;28989:20;;29079:24;;;29074:39;:::i;:::-;29040:9;:13;;;;;;;;;;;-1:-1:-1;;;;;29040:17:0;;;;;;;;;;:74;;;;;;;;;-1:-1:-1;;29040:74:0;;;;;;;;;;-1:-1:-1;28672:3:0;;-1:-1:-1;28672:3:0;;:::i;:::-;;;28636:490;;;;29173:2;-1:-1:-1;;;;;29143:47:0;29167:4;-1:-1:-1;;;;;29143:47:0;29157:8;-1:-1:-1;;;;;29143:47:0;;29177:3;29182:7;29143:47;;;;;;;:::i;:::-;;;;;;;;29203:75;29239:8;29249:4;29255:2;29259:3;29264:7;29273:4;29203:35;:75::i;:::-;28337:949;28143:1143;;;;;:::o;3670:191::-;3763:6;;;-1:-1:-1;;;;;3780:17:0;;;;;;;;;;;3813:40;;3763:6;;;3780:17;3763:6;;3813:40;;3744:16;;3813:40;3733:128;3670:191;:::o;30130:88::-;30197:13;;;;:4;;:13;;;;;:::i;:::-;;30130:88;:::o;26896:889::-;-1:-1:-1;;;;;27084:16:0;;27076:66;;;;-1:-1:-1;;;27076:66:0;;26369:2:1;27076:66:0;;;26351:21:1;26408:2;26388:18;;;26381:30;26447:34;26427:18;;;26420:62;26518:7;26498:18;;;26491:35;26543:19;;27076:66:0;26167:401:1;27076:66:0;1204:10;27199:96;1204:10;27230:4;27236:2;27240:21;27258:2;27240:17;:21::i;:::-;27263:25;27281:6;27263:17;:25::i;27199:96::-;27308:19;27330:13;;;;;;;;;;;-1:-1:-1;;;;;27330:19:0;;;;;;;;;:26;;;;;;27375:21;;;;27367:76;;;;-1:-1:-1;;;27367:76:0;;26775:2:1;27367:76:0;;;26757:21:1;26814:2;26794:18;;;26787:30;26853:34;26833:18;;;26826:62;26924:12;26904:18;;;26897:40;26954:19;;27367:76:0;26573:406:1;27367:76:0;27479:9;:13;;;;;;;;;;;-1:-1:-1;;;;;27479:19:0;;;;;;;;;;:57;;-1:-1:-1;;27479:57:0;;27515:20;;;27479:57;;;;;;;;;;;;;27597:17;;;;;;;:24;27592:39;;27515:20;;27597:24;;;27592:39;:::i;:::-;27558:9;:13;;;;;;;;;;;-1:-1:-1;;;;;27558:17:0;;;;;;;;;;;;;:74;;;;;;;;;-1:-1:-1;;27558:74:0;;;;;;;;;;27650:46;;27761:25:1;;;27802:18;;;27795:34;;;27650:46:0;;;;;;;;;27734:18:1;27650:46:0;;;;;;;27709:68;27740:8;27750:4;27756:2;27760;27764:6;27772:4;27709:30;:68::i;:::-;27065:720;;26896:889;;;;;:::o;36605:813::-;-1:-1:-1;;;;;36845:13:0;;5011:20;5059:8;36841:570;;36881:79;;;;;-1:-1:-1;;;;;36881:43:0;;;;;:79;;36925:8;;36935:4;;36941:3;;36946:7;;36955:4;;36881:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36881:79:0;;;;;;;;-1:-1:-1;;36881:79:0;;;;;;;;;;;;:::i;:::-;;;36877:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;37273:6;37266:14;;-1:-1:-1;;;37266:14:0;;;;;;;;:::i;36877:523::-;;;37322:62;;-1:-1:-1;;;37322:62:0;;30071:2:1;37322:62:0;;;30053:21:1;30110:2;30090:18;;;30083:30;30149:34;30129:18;;;30122:62;30220:22;30200:18;;;30193:50;30260:19;;37322:62:0;29869:416:1;36877:523:0;-1:-1:-1;;;;;;37042:60:0;;37054:48;37042:60;37038:159;;37127:50;;-1:-1:-1;;;37127:50:0;;30492:2:1;37127:50:0;;;30474:21:1;30531:2;30511:18;;;30504:30;30570:34;30550:18;;;30543:62;30641:10;30621:18;;;30614:38;30669:19;;37127:50:0;30290:404:1;37426:198:0;37546:16;;;37560:1;37546:16;;;;;;;;;37492;;37521:22;;37546:16;;;;;;;;;;;;-1:-1:-1;37546:16:0;37521:41;;37584:7;37573:5;37579:1;37573:8;;;;;;;;:::i;:::-;;;;;;;;;;:18;37611:5;37426:198;-1:-1:-1;;37426:198:0:o;35853:744::-;-1:-1:-1;;;;;36068:13:0;;5011:20;5059:8;36064:526;;36104:72;;;;;-1:-1:-1;;;;;36104:38:0;;;;;:72;;36143:8;;36153:4;;36159:2;;36163:6;;36171:4;;36104:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36104:72:0;;;;;;;;-1:-1:-1;;36104:72:0;;;;;;;;;;;;:::i;:::-;;;36100:479;;;;:::i;:::-;-1:-1:-1;;;;;;36226:55:0;;36238:43;36226:55;36222:154;;36306:50;;-1:-1:-1;;;36306:50:0;;30492:2:1;36306:50:0;;;30474:21:1;30531:2;30511:18;;;30504:30;30570:34;30550:18;;;30543:62;30641:10;30621:18;;;30614:38;30669:19;;36306:50:0;30290:404:1;-1:-1:-1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:196:1;82:20;;-1:-1:-1;;;;;131:54:1;;121:65;;111:93;;200:1;197;190:12;111:93;14:196;;;:::o;215:254::-;283:6;291;344:2;332:9;323:7;319:23;315:32;312:52;;;360:1;357;350:12;312:52;383:29;402:9;383:29;:::i;:::-;373:39;459:2;444:18;;;;431:32;;-1:-1:-1;;;215:254:1:o;656:177::-;-1:-1:-1;;;;;;734:5:1;730:78;723:5;720:89;710:117;;823:1;820;813:12;838:245;896:6;949:2;937:9;928:7;924:23;920:32;917:52;;;965:1;962;955:12;917:52;1004:9;991:23;1023:30;1047:5;1023:30;:::i;1280:531::-;1322:3;1360:5;1354:12;1387:6;1382:3;1375:19;1412:1;1422:162;1436:6;1433:1;1430:13;1422:162;;;1498:4;1554:13;;;1550:22;;1544:29;1526:11;;;1522:20;;1515:59;1451:12;1422:162;;;1602:6;1599:1;1596:13;1593:87;;;1668:1;1661:4;1652:6;1647:3;1643:16;1639:27;1632:38;1593:87;-1:-1:-1;1725:2:1;1713:15;-1:-1:-1;;1709:88:1;1700:98;;;;1800:4;1696:109;;1280:531;-1:-1:-1;;1280:531:1:o;1816:220::-;1965:2;1954:9;1947:21;1928:4;1985:45;2026:2;2015:9;2011:18;2003:6;1985:45;:::i;2041:666::-;2121:6;2129;2137;2190:2;2178:9;2169:7;2165:23;2161:32;2158:52;;;2206:1;2203;2196:12;2158:52;2246:9;2233:23;2275:18;2316:2;2308:6;2305:14;2302:34;;;2332:1;2329;2322:12;2302:34;2370:6;2359:9;2355:22;2345:32;;2415:7;2408:4;2404:2;2400:13;2396:27;2386:55;;2437:1;2434;2427:12;2386:55;2477:2;2464:16;2503:2;2495:6;2492:14;2489:34;;;2519:1;2516;2509:12;2489:34;2566:7;2559:4;2550:6;2546:2;2542:15;2538:26;2535:39;2532:59;;;2587:1;2584;2577:12;2532:59;2618:4;2610:13;;;;2642:6;;-1:-1:-1;2680:20:1;;;;2667:34;;2041:666;-1:-1:-1;;;;2041:666:1:o;2712:180::-;2771:6;2824:2;2812:9;2803:7;2799:23;2795:32;2792:52;;;2840:1;2837;2830:12;2792:52;-1:-1:-1;2863:23:1;;2712:180;-1:-1:-1;2712:180:1:o;2897:118::-;2983:5;2976:13;2969:21;2962:5;2959:32;2949:60;;3005:1;3002;2995:12;3020:315;3085:6;3093;3146:2;3134:9;3125:7;3121:23;3117:32;3114:52;;;3162:1;3159;3152:12;3114:52;3185:29;3204:9;3185:29;:::i;:::-;3175:39;;3264:2;3253:9;3249:18;3236:32;3277:28;3299:5;3277:28;:::i;:::-;3324:5;3314:15;;;3020:315;;;;;:::o;3340:184::-;-1:-1:-1;;;3389:1:1;3382:88;3489:4;3486:1;3479:15;3513:4;3510:1;3503:15;3529:308;-1:-1:-1;;3630:2:1;3624:4;3620:13;3616:86;3608:6;3604:99;3769:6;3757:10;3754:22;3733:18;3721:10;3718:34;3715:62;3712:88;;;3780:18;;:::i;:::-;3816:2;3809:22;-1:-1:-1;;3529:308:1:o;3842:183::-;3902:4;3935:18;3927:6;3924:30;3921:56;;;3957:18;;:::i;:::-;-1:-1:-1;4002:1:1;3998:14;4014:4;3994:25;;3842:183::o;4030:724::-;4084:5;4137:3;4130:4;4122:6;4118:17;4114:27;4104:55;;4155:1;4152;4145:12;4104:55;4191:6;4178:20;4217:4;4240:43;4280:2;4240:43;:::i;:::-;4312:2;4306:9;4324:31;4352:2;4344:6;4324:31;:::i;:::-;4390:18;;;4482:1;4478:10;;;;4466:23;;4462:32;;;4424:15;;;;-1:-1:-1;4506:15:1;;;4503:35;;;4534:1;4531;4524:12;4503:35;4570:2;4562:6;4558:15;4582:142;4598:6;4593:3;4590:15;4582:142;;;4664:17;;4652:30;;4702:12;;;;4615;;4582:142;;;-1:-1:-1;4742:6:1;4030:724;-1:-1:-1;;;;;;4030:724:1:o;4759:527::-;4823:5;4857:18;4849:6;4846:30;4843:56;;;4879:18;;:::i;:::-;4928:2;4922:9;4940:128;5062:4;-1:-1:-1;;4988:2:1;4980:6;4976:15;4972:88;4968:99;4960:6;4940:128;:::i;:::-;5086:6;5077:15;;5116:6;5108;5101:22;5156:3;5147:6;5142:3;5138:16;5135:25;5132:45;;;5173:1;5170;5163:12;5132:45;5223:6;5218:3;5211:4;5203:6;5199:17;5186:44;5278:1;5271:4;5262:6;5254;5250:19;5246:30;5239:41;;4759:527;;;;;:::o;5291:220::-;5333:5;5386:3;5379:4;5371:6;5367:17;5363:27;5353:55;;5404:1;5401;5394:12;5353:55;5426:79;5501:3;5492:6;5479:20;5472:4;5464:6;5460:17;5426:79;:::i;5516:943::-;5670:6;5678;5686;5694;5702;5755:3;5743:9;5734:7;5730:23;5726:33;5723:53;;;5772:1;5769;5762:12;5723:53;5795:29;5814:9;5795:29;:::i;:::-;5785:39;;5843:38;5877:2;5866:9;5862:18;5843:38;:::i;:::-;5833:48;;5932:2;5921:9;5917:18;5904:32;5955:18;5996:2;5988:6;5985:14;5982:34;;;6012:1;6009;6002:12;5982:34;6035:61;6088:7;6079:6;6068:9;6064:22;6035:61;:::i;:::-;6025:71;;6149:2;6138:9;6134:18;6121:32;6105:48;;6178:2;6168:8;6165:16;6162:36;;;6194:1;6191;6184:12;6162:36;6217:63;6272:7;6261:8;6250:9;6246:24;6217:63;:::i;:::-;6207:73;;6333:3;6322:9;6318:19;6305:33;6289:49;;6363:2;6353:8;6350:16;6347:36;;;6379:1;6376;6369:12;6347:36;;6402:51;6445:7;6434:8;6423:9;6419:24;6402:51;:::i;:::-;6392:61;;;5516:943;;;;;;;;:::o;6464:159::-;6531:20;;6591:6;6580:18;;6570:29;;6560:57;;6613:1;6610;6603:12;6628:728;6681:5;6734:3;6727:4;6719:6;6715:17;6711:27;6701:55;;6752:1;6749;6742:12;6701:55;6788:6;6775:20;6814:4;6837:43;6877:2;6837:43;:::i;:::-;6909:2;6903:9;6921:31;6949:2;6941:6;6921:31;:::i;:::-;6987:18;;;7079:1;7075:10;;;;7063:23;;7059:32;;;7021:15;;;;-1:-1:-1;7103:15:1;;;7100:35;;;7131:1;7128;7121:12;7100:35;7167:2;7159:6;7155:15;7179:147;7195:6;7190:3;7187:15;7179:147;;;7261:22;7279:3;7261:22;:::i;:::-;7249:35;;7304:12;;;;7212;;7179:147;;7361:591;7477:6;7485;7538:2;7526:9;7517:7;7513:23;7509:32;7506:52;;;7554:1;7551;7544:12;7506:52;7594:9;7581:23;7623:18;7664:2;7656:6;7653:14;7650:34;;;7680:1;7677;7670:12;7650:34;7703:60;7755:7;7746:6;7735:9;7731:22;7703:60;:::i;:::-;7693:70;;7816:2;7805:9;7801:18;7788:32;7772:48;;7845:2;7835:8;7832:16;7829:36;;;7861:1;7858;7851:12;7829:36;;7884:62;7938:7;7927:8;7916:9;7912:24;7884:62;:::i;:::-;7874:72;;;7361:591;;;;;:::o;7957:276::-;8015:6;8068:2;8056:9;8047:7;8043:23;8039:32;8036:52;;;8084:1;8081;8074:12;8036:52;8123:9;8110:23;8173:10;8166:5;8162:22;8155:5;8152:33;8142:61;;8199:1;8196;8189:12;8469:730;8523:5;8576:3;8569:4;8561:6;8557:17;8553:27;8543:55;;8594:1;8591;8584:12;8543:55;8630:6;8617:20;8656:4;8679:43;8719:2;8679:43;:::i;:::-;8751:2;8745:9;8763:31;8791:2;8783:6;8763:31;:::i;:::-;8829:18;;;8921:1;8917:10;;;;8905:23;;8901:32;;;8863:15;;;;-1:-1:-1;8945:15:1;;;8942:35;;;8973:1;8970;8963:12;8942:35;9009:2;9001:6;8997:15;9021:148;9037:6;9032:3;9029:15;9021:148;;;9103:23;9122:3;9103:23;:::i;:::-;9091:36;;9147:12;;;;9054;;9021:148;;9204:595;9322:6;9330;9383:2;9371:9;9362:7;9358:23;9354:32;9351:52;;;9399:1;9396;9389:12;9351:52;9439:9;9426:23;9468:18;9509:2;9501:6;9498:14;9495:34;;;9525:1;9522;9515:12;9495:34;9548:61;9601:7;9592:6;9581:9;9577:22;9548:61;:::i;:::-;9538:71;;9662:2;9651:9;9647:18;9634:32;9618:48;;9691:2;9681:8;9678:16;9675:36;;;9707:1;9704;9697:12;9675:36;;9730:63;9785:7;9774:8;9763:9;9759:24;9730:63;:::i;9804:435::-;9857:3;9895:5;9889:12;9922:6;9917:3;9910:19;9948:4;9977:2;9972:3;9968:12;9961:19;;10014:2;10007:5;10003:14;10035:1;10045:169;10059:6;10056:1;10053:13;10045:169;;;10120:13;;10108:26;;10154:12;;;;10189:15;;;;10081:1;10074:9;10045:169;;;-1:-1:-1;10230:3:1;;9804:435;-1:-1:-1;;;;;9804:435:1:o;10244:261::-;10423:2;10412:9;10405:21;10386:4;10443:56;10495:2;10484:9;10480:18;10472:6;10443:56;:::i;10510:184::-;10568:6;10621:2;10609:9;10600:7;10596:23;10592:32;10589:52;;;10637:1;10634;10627:12;10589:52;10660:28;10678:9;10660:28;:::i;10699:450::-;10768:6;10821:2;10809:9;10800:7;10796:23;10792:32;10789:52;;;10837:1;10834;10827:12;10789:52;10877:9;10864:23;10910:18;10902:6;10899:30;10896:50;;;10942:1;10939;10932:12;10896:50;10965:22;;11018:4;11010:13;;11006:27;-1:-1:-1;10996:55:1;;11047:1;11044;11037:12;10996:55;11070:73;11135:7;11130:2;11117:16;11112:2;11108;11104:11;11070:73;:::i;:::-;11060:83;10699:450;-1:-1:-1;;;;10699:450:1:o;11154:346::-;11237:6;11290:2;11278:9;11269:7;11265:23;11261:32;11258:52;;;11306:1;11303;11296:12;11258:52;11346:9;11333:23;11379:18;11371:6;11368:30;11365:50;;;11411:1;11408;11401:12;11365:50;11434:60;11486:7;11477:6;11466:9;11462:22;11434:60;:::i;12473:348::-;12557:6;12610:2;12598:9;12589:7;12585:23;12581:32;12578:52;;;12626:1;12623;12616:12;12578:52;12666:9;12653:23;12699:18;12691:6;12688:30;12685:50;;;12731:1;12728;12721:12;12685:50;12754:61;12807:7;12798:6;12787:9;12783:22;12754:61;:::i;12826:260::-;12894:6;12902;12955:2;12943:9;12934:7;12930:23;12926:32;12923:52;;;12971:1;12968;12961:12;12923:52;12994:29;13013:9;12994:29;:::i;:::-;12984:39;;13042:38;13076:2;13065:9;13061:18;13042:38;:::i;:::-;13032:48;;12826:260;;;;;:::o;13091:606::-;13195:6;13203;13211;13219;13227;13280:3;13268:9;13259:7;13255:23;13251:33;13248:53;;;13297:1;13294;13287:12;13248:53;13320:29;13339:9;13320:29;:::i;:::-;13310:39;;13368:38;13402:2;13391:9;13387:18;13368:38;:::i;:::-;13358:48;;13453:2;13442:9;13438:18;13425:32;13415:42;;13504:2;13493:9;13489:18;13476:32;13466:42;;13559:3;13548:9;13544:19;13531:33;13587:18;13579:6;13576:30;13573:50;;;13619:1;13616;13609:12;13573:50;13642:49;13683:7;13674:6;13663:9;13659:22;13642:49;:::i;13702:186::-;13761:6;13814:2;13802:9;13793:7;13789:23;13785:32;13782:52;;;13830:1;13827;13820:12;13782:52;13853:29;13872:9;13853:29;:::i;14666:449::-;14825:2;14814:9;14807:21;14864:6;14859:2;14848:9;14844:18;14837:34;14921:6;14913;14908:2;14897:9;14893:18;14880:48;14977:1;14948:22;;;14972:2;14944:31;;;14937:42;;;;15031:2;15019:15;;;-1:-1:-1;;15015:88:1;15000:104;14996:113;;14666:449;-1:-1:-1;14666:449:1:o;15120:437::-;15199:1;15195:12;;;;15242;;;15263:61;;15317:4;15309:6;15305:17;15295:27;;15263:61;15370:2;15362:6;15359:14;15339:18;15336:38;15333:218;;;-1:-1:-1;;;15404:1:1;15397:88;15508:4;15505:1;15498:15;15536:4;15533:1;15526:15;15333:218;;15120:437;;;:::o;15562:184::-;-1:-1:-1;;;15611:1:1;15604:88;15711:4;15708:1;15701:15;15735:4;15732:1;15725:15;15751:217;15790:4;15819:6;15875:10;;;;15845;;15897:12;;;15894:38;;;15912:18;;:::i;:::-;15949:13;;15751:217;-1:-1:-1;;;15751:217:1:o;16326:228::-;16366:7;16492:1;-1:-1:-1;;16420:74:1;16417:1;16414:81;16409:1;16402:9;16395:17;16391:105;16388:131;;;16499:18;;:::i;:::-;-1:-1:-1;16539:9:1;;16326:228::o;16559:274::-;16599:1;16625;16615:189;;-1:-1:-1;;;16657:1:1;16650:88;16761:4;16758:1;16751:15;16789:4;16786:1;16779:15;16615:189;-1:-1:-1;16818:9:1;;16559:274::o;16838:125::-;16878:4;16906:1;16903;16900:8;16897:34;;;16911:18;;:::i;:::-;-1:-1:-1;16948:9:1;;16838:125::o;17807:184::-;-1:-1:-1;;;17856:1:1;17849:88;17956:4;17953:1;17946:15;17980:4;17977:1;17970:15;18189:245;18256:6;18309:2;18297:9;18288:7;18284:23;18280:32;18277:52;;;18325:1;18322;18315:12;18277:52;18357:9;18351:16;18376:28;18398:5;18376:28;:::i;19850:224::-;19889:3;19917:6;19950:2;19947:1;19943:10;19980:2;19977:1;19973:10;20011:3;20007:2;20003:12;19998:3;19995:21;19992:47;;;20019:18;;:::i;:::-;20055:13;;19850:224;-1:-1:-1;;;;19850:224:1:o;20079:197::-;20117:3;20145:6;20186:2;20179:5;20175:14;20213:2;20204:7;20201:15;20198:41;;;20219:18;;:::i;:::-;20268:1;20255:15;;20079:197;-1:-1:-1;;;20079:197:1:o;20691:195::-;20730:3;-1:-1:-1;;20754:5:1;20751:77;20748:103;;;20831:18;;:::i;:::-;-1:-1:-1;20878:1:1;20867:13;;20691:195::o;23715:228::-;23754:3;23782:10;23819:2;23816:1;23812:10;23849:2;23846:1;23842:10;23880:3;23876:2;23872:12;23867:3;23864:21;23861:47;;;23888:18;;:::i;24761:175::-;24798:3;24842:4;24835:5;24831:16;24871:4;24862:7;24859:17;24856:43;;;24879:18;;:::i;:::-;24928:1;24915:15;;24761:175;-1:-1:-1;;24761:175:1:o;26984:128::-;27024:3;27055:1;27051:6;27048:1;27045:13;27042:39;;;27061:18;;:::i;:::-;-1:-1:-1;27097:9:1;;26984:128::o;27117:465::-;27374:2;27363:9;27356:21;27337:4;27400:56;27452:2;27441:9;27437:18;27429:6;27400:56;:::i;:::-;27504:9;27496:6;27492:22;27487:2;27476:9;27472:18;27465:50;27532:44;27569:6;27561;27532:44;:::i;:::-;27524:52;27117:465;-1:-1:-1;;;;;27117:465:1:o;27840:850::-;28162:4;-1:-1:-1;;;;;28272:2:1;28264:6;28260:15;28249:9;28242:34;28324:2;28316:6;28312:15;28307:2;28296:9;28292:18;28285:43;;28364:3;28359:2;28348:9;28344:18;28337:31;28391:57;28443:3;28432:9;28428:19;28420:6;28391:57;:::i;:::-;28496:9;28488:6;28484:22;28479:2;28468:9;28464:18;28457:50;28530:44;28567:6;28559;28530:44;:::i;:::-;28516:58;;28623:9;28615:6;28611:22;28605:3;28594:9;28590:19;28583:51;28651:33;28677:6;28669;28651:33;:::i;:::-;28643:41;27840:850;-1:-1:-1;;;;;;;;27840:850:1:o;28695:249::-;28764:6;28817:2;28805:9;28796:7;28792:23;28788:32;28785:52;;;28833:1;28830;28823:12;28785:52;28865:9;28859:16;28884:30;28908:5;28884:30;:::i;28949:179::-;28984:3;29026:1;29008:16;29005:23;29002:120;;;29072:1;29069;29066;29051:23;-1:-1:-1;29109:1:1;29103:8;29098:3;29094:18;29002:120;28949:179;:::o;29133:731::-;29172:3;29214:4;29196:16;29193:26;29190:39;;;29133:731;:::o;29190:39::-;29256:2;29250:9;29278:66;29399:2;29381:16;29377:25;29374:1;29368:4;29353:50;29432:4;29426:11;29456:16;29491:18;29562:2;29555:4;29547:6;29543:17;29540:25;29535:2;29527:6;29524:14;29521:45;29518:58;;;29569:5;;;;;29133:731;:::o;29518:58::-;29606:6;29600:4;29596:17;29585:28;;29642:3;29636:10;29669:2;29661:6;29658:14;29655:27;;;29675:5;;;;;;29133:731;:::o;29655:27::-;29759:2;29740:16;29734:4;29730:27;29726:36;29719:4;29710:6;29705:3;29701:16;29697:27;29694:69;29691:82;;;29766:5;;;;;;29133:731;:::o;29691:82::-;29782:57;29833:4;29824:6;29816;29812:19;29808:30;29802:4;29782:57;:::i;:::-;-1:-1:-1;29855:3:1;;29133:731;-1:-1:-1;;;;;29133:731:1:o;30699:584::-;30921:4;-1:-1:-1;;;;;31031:2:1;31023:6;31019:15;31008:9;31001:34;31083:2;31075:6;31071:15;31066:2;31055:9;31051:18;31044:43;;31123:6;31118:2;31107:9;31103:18;31096:34;31166:6;31161:2;31150:9;31146:18;31139:34;31210:3;31204;31193:9;31189:19;31182:32;31231:46;31272:3;31261:9;31257:19;31249:6;31231:46;:::i;:::-;31223:54;30699:584;-1:-1:-1;;;;;;;30699:584:1:o

Swarm Source

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