ETH Price: $3,846.22 (-1.92%)

Token

BearsOnTheBlock (BEAR)
 

Overview

Max Total Supply

9,607 BEAR

Holders

3,109

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 BEAR
0x87CB6469B8d4de67220D306529beDfF53a319264
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

The companions of the Bulls on the Block. Every Bull needs a Bear! There could not have been a better companion. The two most iconic animals in the crypto space.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
BearsOnTheBlock

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
No with 200 runs

Other Settings:
istanbul EvmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
interface IERC721Receiver {
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}


pragma solidity ^0.8.0;

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

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

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

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

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


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);
    }

    function _verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) private pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

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


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


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() {
        _setOwner(_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 {
        _setOwner(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");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

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);
}

pragma solidity ^0.8.0;


/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;

    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}


pragma solidity ^0.8.0;

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

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

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


pragma solidity ^0.8.0;

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

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

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


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


pragma solidity ^0.8.0;

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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

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

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

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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

pragma solidity ^0.8.0;


abstract contract BOTB {
    function ownerOf(uint256 tokenId) public virtual view returns (address);
    function tokenOfOwnerByIndex(address owner, uint256 index) public virtual view returns (uint256);
    function balanceOf(address owner) external virtual view returns (uint256 balance);
}

contract BearsOnTheBlock is ERC721Enumerable, Ownable{
    BOTB private botb;
    uint256 public maxBears;
    uint constant public MAX_BEARS_MINT = 51;
    bool public saleIsActive = false;
    uint256 public startingIndex;
    uint256 public startingIndexBlock;
    uint256 public setBlockTimestamp;
    uint256 public revealTimestamp;
    string public BearProvenance;
    string private baseURI;

    constructor(
        string memory name,
        string memory symbol,
        uint256 maxNftSupply,
        address botbContractAddress,
        uint256 saleStart
    ) ERC721(name, symbol){
        maxBears = maxNftSupply;
        botb = BOTB(botbContractAddress);
        revealTimestamp = saleStart + (86400 * 7);
        setBlockTimestamp = saleStart + (86400 * 6);
    }

    function setRevealTimestamp(uint256 revealTimeStamp) public onlyOwner {
        revealTimestamp = revealTimeStamp;
    }

    function setStartingBlockTimestamp(uint256 startingBlockTimestamp) public onlyOwner {
        setBlockTimestamp = startingBlockTimestamp;
    }

    function setProvenanceHash(string memory provenanceHash) public onlyOwner {
        BearProvenance = provenanceHash;
    }

    function isMinted(uint256 tokenId) external view returns (bool) {
        require(tokenId < maxBears, "tokenId outside collection bounds");
        return _exists(tokenId);
    }

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

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

    function flipSaleState() public onlyOwner {
        saleIsActive = !saleIsActive;
    }

    function trySetStartingIndexBlock() private {
        if ( startingIndexBlock == 0 && (totalSupply() == maxBears || block.timestamp >= setBlockTimestamp)) {
            startingIndexBlock = block.number;
        }
    }

    function mintBear(uint256 botbTokenId) public {
        require(saleIsActive, "Sale must be active to mint a Bear");
        require(totalSupply() < maxBears, "Purchase would exceed max supply of Bears");
        require(botbTokenId < maxBears, "Requested tokenId exceeds upper bound");
        require(botb.ownerOf(botbTokenId) == msg.sender, "Must own the Bull for requested tokenId to claim a Bear");

        _safeMint(msg.sender, botbTokenId);
        trySetStartingIndexBlock();
    }

    function mintNBears(uint256[] memory tokenIds) public {
        require(saleIsActive, "Sale must be active to mint a Bear");
        uint length = tokenIds.length;
        require(length < MAX_BEARS_MINT, "Cannot claim more than fifty bears at once");
        uint balance = botb.balanceOf(msg.sender);
        require(balance >= length, "Must hold at least as many Bulls as the number of Bears you intend to claim");

        for(uint i = 0; i < balance && i < length && i < MAX_BEARS_MINT; i++) {
            require(totalSupply() < maxBears, "Cannot exceed max supply of Bears.");
            uint tokenId = tokenIds[i];
            require(botb.ownerOf(tokenId) == msg.sender, "Must own the Bull for requested tokenId to claim a Bear");
            if (!_exists(tokenId)) {
                _safeMint(msg.sender, tokenId);
            }
        }
        trySetStartingIndexBlock();
    }

    function setStartingIndex() public {
        require(startingIndex == 0, "Starting index is already set");
        require(startingIndexBlock != 0, "Starting index block must be set");
        require(block.timestamp >= revealTimestamp || totalSupply() == maxBears,
            "Must be on or after the reveal time to set starting index"
        );

        startingIndex = uint256(blockhash(startingIndexBlock)) % maxBears;

        if ((block.number - startingIndexBlock) > 255) {
            startingIndex = uint256(blockhash(block.number - 1)) % maxBears;
        }

        // Prevent default sequence
        if (startingIndex == 0) {
            startingIndex = startingIndex + 1;
        }
    }

    function emergencySetStartingIndexBlock() public onlyOwner {
        require(startingIndexBlock == 0, "Starting index block is already set");
        require(startingIndex == 0, "Starting index is already set");

        startingIndexBlock = block.number;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint256","name":"maxNftSupply","type":"uint256"},{"internalType":"address","name":"botbContractAddress","type":"address"},{"internalType":"uint256","name":"saleStart","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"BearProvenance","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_BEARS_MINT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"emergencySetStartingIndexBlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"isMinted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBears","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"botbTokenId","type":"uint256"}],"name":"mintBear","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"mintNBears","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"uri","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setBlockTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"provenanceHash","type":"string"}],"name":"setProvenanceHash","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"revealTimeStamp","type":"uint256"}],"name":"setRevealTimestamp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"startingBlockTimestamp","type":"uint256"}],"name":"setStartingBlockTimestamp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setStartingIndex","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startingIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startingIndexBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526000600d60006101000a81548160ff0219169083151502179055503480156200002c57600080fd5b50604051620050ac380380620050ac833981810160405281019062000052919062000347565b848481600090805190602001906200006c929190620001f7565b50806001908051906020019062000085929190620001f7565b505050620000a86200009c6200012960201b60201c565b6200013160201b60201c565b82600c8190555081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062093a808162000101919062000462565b6011819055506207e9008162000118919062000462565b60108190555050505050506200062a565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002059062000533565b90600052602060002090601f01602090048101928262000229576000855562000275565b82601f106200024457805160ff191683800117855562000275565b8280016001018555821562000275579182015b828111156200027457825182559160200191906001019062000257565b5b50905062000284919062000288565b5090565b5b80821115620002a357600081600090555060010162000289565b5090565b6000620002be620002b8846200042f565b620003fb565b905082815260208101848484011115620002d757600080fd5b620002e4848285620004fd565b509392505050565b600081519050620002fd81620005f6565b92915050565b600082601f8301126200031557600080fd5b815162000327848260208601620002a7565b91505092915050565b600081519050620003418162000610565b92915050565b600080600080600060a086880312156200036057600080fd5b600086015167ffffffffffffffff8111156200037b57600080fd5b620003898882890162000303565b955050602086015167ffffffffffffffff811115620003a757600080fd5b620003b58882890162000303565b9450506040620003c88882890162000330565b9350506060620003db88828901620002ec565b9250506080620003ee8882890162000330565b9150509295509295909350565b6000604051905081810181811067ffffffffffffffff82111715620004255762000424620005c7565b5b8060405250919050565b600067ffffffffffffffff8211156200044d576200044c620005c7565b5b601f19601f8301169050602081019050919050565b60006200046f82620004f3565b91506200047c83620004f3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620004b457620004b362000569565b5b828201905092915050565b6000620004cc82620004d3565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b838110156200051d57808201518184015260208101905062000500565b838111156200052d576000848401525b50505050565b600060028204905060018216806200054c57607f821691505b6020821081141562000563576200056262000598565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200060181620004bf565b81146200060d57600080fd5b50565b6200061b81620004f3565b81146200062757600080fd5b50565b614a72806200063a6000396000f3fe608060405234801561001057600080fd5b50600436106102275760003560e01c806370a0823111610130578063b88d4fde116100b8578063e985e9c51161007c578063e985e9c51461062a578063e98665501461065a578063eb8d244414610664578063f2fde38b14610682578063f62f3c111461069e57610227565b8063b88d4fde14610586578063c358575c146105a2578063c87b56dd146105be578063cb774d47146105ee578063e36d64981461060c57610227565b80638da5cb5b116100ff5780638da5cb5b146104f257806395d89b4114610510578063a0b6e9641461052e578063a22cb4651461054c578063a2b3f3301461056857610227565b806370a0823114610490578063715018a6146104c05780637d17fcbe146104ca578063818aa553146104d457610227565b806331d46ec2116101b357806342842e0e1161018257806342842e0e146103da5780634cef1fa3146103f65780634f6ccce71461041457806355f804b3146104445780636352211e1461046057610227565b806331d46ec21461036857806333c41a901461038457806334918dfd146103b45780633a66cc67146103be57610227565b8063095ea7b3116101fa578063095ea7b3146102c657806310969523146102e257806318160ddd146102fe57806323b872dd1461031c5780632f745c591461033857610227565b8063018a2c371461022c57806301ffc9a71461024857806306fdde0314610278578063081812fc14610296575b600080fd5b610246600480360381019061024191906134fb565b6106bc565b005b610262600480360381019061025d9190613468565b610742565b60405161026f91906141de565b60405180910390f35b6102806107bc565b60405161028d91906141f9565b60405180910390f35b6102b060048036038101906102ab91906134fb565b61084e565b6040516102bd9190614177565b60405180910390f35b6102e060048036038101906102db91906133eb565b6108d3565b005b6102fc60048036038101906102f791906134ba565b6109eb565b005b610306610a81565b60405161031391906145db565b60405180910390f35b610336600480360381019061033191906132e5565b610a8e565b005b610352600480360381019061034d91906133eb565b610aee565b60405161035f91906145db565b60405180910390f35b610382600480360381019061037d9190613427565b610b93565b005b61039e600480360381019061039991906134fb565b610f21565b6040516103ab91906141de565b60405180910390f35b6103bc610f77565b005b6103d860048036038101906103d391906134fb565b61101f565b005b6103f460048036038101906103ef91906132e5565b6110a5565b005b6103fe6110c5565b60405161040b91906145db565b60405180910390f35b61042e600480360381019061042991906134fb565b6110ca565b60405161043b91906145db565b60405180910390f35b61045e600480360381019061045991906134ba565b611161565b005b61047a600480360381019061047591906134fb565b6111f7565b6040516104879190614177565b60405180910390f35b6104aa60048036038101906104a59190613257565b6112a9565b6040516104b791906145db565b60405180910390f35b6104c8611361565b005b6104d26113e9565b005b6104dc6114f8565b6040516104e991906145db565b60405180910390f35b6104fa6114fe565b6040516105079190614177565b60405180910390f35b610518611528565b60405161052591906141f9565b60405180910390f35b6105366115ba565b60405161054391906141f9565b60405180910390f35b610566600480360381019061056191906133af565b611648565b005b6105706117c9565b60405161057d91906145db565b60405180910390f35b6105a0600480360381019061059b9190613334565b6117cf565b005b6105bc60048036038101906105b791906134fb565b611831565b005b6105d860048036038101906105d391906134fb565b611a3c565b6040516105e591906141f9565b60405180910390f35b6105f6611ae3565b60405161060391906145db565b60405180910390f35b610614611ae9565b60405161062191906145db565b60405180910390f35b610644600480360381019061063f91906132a9565b611aef565b60405161065191906141de565b60405180910390f35b610662611b83565b005b61066c611cde565b60405161067991906141de565b60405180910390f35b61069c60048036038101906106979190613257565b611cf1565b005b6106a6611de9565b6040516106b391906145db565b60405180910390f35b6106c4611def565b73ffffffffffffffffffffffffffffffffffffffff166106e26114fe565b73ffffffffffffffffffffffffffffffffffffffff1614610738576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161072f9061447b565b60405180910390fd5b8060118190555050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107b557506107b482611df7565b5b9050919050565b6060600080546107cb90614867565b80601f01602080910402602001604051908101604052809291908181526020018280546107f790614867565b80156108445780601f1061081957610100808354040283529160200191610844565b820191906000526020600020905b81548152906001019060200180831161082757829003601f168201915b5050505050905090565b600061085982611ed9565b610898576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088f9061445b565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108de826111f7565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561094f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109469061451b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661096e611def565b73ffffffffffffffffffffffffffffffffffffffff16148061099d575061099c81610997611def565b611aef565b5b6109dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d39061439b565b60405180910390fd5b6109e68383611f45565b505050565b6109f3611def565b73ffffffffffffffffffffffffffffffffffffffff16610a116114fe565b73ffffffffffffffffffffffffffffffffffffffff1614610a67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5e9061447b565b60405180910390fd5b8060129080519060200190610a7d929190612fbb565b5050565b6000600880549050905090565b610a9f610a99611def565b82611ffe565b610ade576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad59061455b565b60405180910390fd5b610ae98383836120dc565b505050565b6000610af9836112a9565b8210610b3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b319061421b565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600d60009054906101000a900460ff16610be2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd99061443b565b60405180910390fd5b60008151905060338110610c2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c229061429b565b60405180910390fd5b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401610c889190614177565b60206040518083038186803b158015610ca057600080fd5b505afa158015610cb4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cd89190613524565b905081811015610d1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d14906142bb565b60405180910390fd5b60005b8181108015610d2e57508281105b8015610d3a5750603381105b15610f1357600c54610d4a610a81565b10610d8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d81906145bb565b60405180910390fd5b6000848281518110610dc5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190503373ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b8152600401610e4191906145db565b60206040518083038186803b158015610e5957600080fd5b505afa158015610e6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e919190613280565b73ffffffffffffffffffffffffffffffffffffffff1614610ee7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ede906143fb565b60405180910390fd5b610ef081611ed9565b610eff57610efe3382612338565b5b508080610f0b90614899565b915050610d20565b50610f1c612356565b505050565b6000600c548210610f67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5e906144fb565b60405180910390fd5b610f7082611ed9565b9050919050565b610f7f611def565b73ffffffffffffffffffffffffffffffffffffffff16610f9d6114fe565b73ffffffffffffffffffffffffffffffffffffffff1614610ff3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fea9061447b565b60405180910390fd5b600d60009054906101000a900460ff1615600d60006101000a81548160ff021916908315150217905550565b611027611def565b73ffffffffffffffffffffffffffffffffffffffff166110456114fe565b73ffffffffffffffffffffffffffffffffffffffff161461109b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110929061447b565b60405180910390fd5b8060108190555050565b6110c0838383604051806020016040528060008152506117cf565b505050565b603381565b60006110d4610a81565b8210611115576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110c9061457b565b60405180910390fd5b6008828154811061114f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b611169611def565b73ffffffffffffffffffffffffffffffffffffffff166111876114fe565b73ffffffffffffffffffffffffffffffffffffffff16146111dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d49061447b565b60405180910390fd5b80601390805190602001906111f3929190612fbb565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156112a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611297906143db565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561131a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611311906143bb565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611369611def565b73ffffffffffffffffffffffffffffffffffffffff166113876114fe565b73ffffffffffffffffffffffffffffffffffffffff16146113dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d49061447b565b60405180910390fd5b6113e7600061238c565b565b6113f1611def565b73ffffffffffffffffffffffffffffffffffffffff1661140f6114fe565b73ffffffffffffffffffffffffffffffffffffffff1614611465576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145c9061447b565b60405180910390fd5b6000600f54146114aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a19061449b565b60405180910390fd5b6000600e54146114ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e69061435b565b60405180910390fd5b43600f81905550565b60105481565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461153790614867565b80601f016020809104026020016040519081016040528092919081815260200182805461156390614867565b80156115b05780601f10611585576101008083540402835291602001916115b0565b820191906000526020600020905b81548152906001019060200180831161159357829003601f168201915b5050505050905090565b601280546115c790614867565b80601f01602080910402602001604051908101604052809291908181526020018280546115f390614867565b80156116405780601f1061161557610100808354040283529160200191611640565b820191906000526020600020905b81548152906001019060200180831161162357829003601f168201915b505050505081565b611650611def565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b5906142fb565b60405180910390fd5b80600560006116cb611def565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611778611def565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516117bd91906141de565b60405180910390a35050565b600c5481565b6117e06117da611def565b83611ffe565b61181f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118169061455b565b60405180910390fd5b61182b84848484612452565b50505050565b600d60009054906101000a900460ff16611880576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118779061443b565b60405180910390fd5b600c5461188b610a81565b106118cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c29061459b565b60405180910390fd5b600c54811061190f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119069061437b565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b815260040161198191906145db565b60206040518083038186803b15801561199957600080fd5b505afa1580156119ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119d19190613280565b73ffffffffffffffffffffffffffffffffffffffff1614611a27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1e906143fb565b60405180910390fd5b611a313382612338565b611a39612356565b50565b6060611a4782611ed9565b611a86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7d906144db565b60405180910390fd5b6000611a906124ae565b90506000815111611ab05760405180602001604052806000815250611adb565b80611aba84612540565b604051602001611acb929190614153565b6040516020818303038152906040525b915050919050565b600e5481565b600f5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000600e5414611bc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bbf9061435b565b60405180910390fd5b6000600f541415611c0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c059061453b565b60405180910390fd5b60115442101580611c275750600c54611c25610a81565b145b611c66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5d9061431b565b60405180910390fd5b600c54600f544060001c611c7a91906148e2565b600e8190555060ff600f5443611c90919061477d565b1115611cbb57600c54600143611ca6919061477d565b4060001c611cb491906148e2565b600e819055505b6000600e541415611cdc576001600e54611cd591906146f6565b600e819055505b565b600d60009054906101000a900460ff1681565b611cf9611def565b73ffffffffffffffffffffffffffffffffffffffff16611d176114fe565b73ffffffffffffffffffffffffffffffffffffffff1614611d6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d649061447b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ddd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd49061425b565b60405180910390fd5b611de68161238c565b50565b60115481565b600033905090565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611ec257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611ed25750611ed1826126ed565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611fb8836111f7565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061200982611ed9565b612048576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203f9061433b565b60405180910390fd5b6000612053836111f7565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806120c257508373ffffffffffffffffffffffffffffffffffffffff166120aa8461084e565b73ffffffffffffffffffffffffffffffffffffffff16145b806120d357506120d28185611aef565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166120fc826111f7565b73ffffffffffffffffffffffffffffffffffffffff1614612152576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612149906144bb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156121c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b9906142db565b60405180910390fd5b6121cd838383612757565b6121d8600082611f45565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612228919061477d565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461227f91906146f6565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b61235282826040518060200160405280600081525061286b565b5050565b6000600f5414801561237d5750600c5461236e610a81565b148061237c57506010544210155b5b1561238a5743600f819055505b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61245d8484846120dc565b612469848484846128c6565b6124a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249f9061423b565b60405180910390fd5b50505050565b6060601380546124bd90614867565b80601f01602080910402602001604051908101604052809291908181526020018280546124e990614867565b80156125365780601f1061250b57610100808354040283529160200191612536565b820191906000526020600020905b81548152906001019060200180831161251957829003601f168201915b5050505050905090565b60606000821415612588576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506126e8565b600082905060005b600082146125ba5780806125a390614899565b915050600a826125b3919061474c565b9150612590565b60008167ffffffffffffffff8111156125fc577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561262e5781602001600182028036833780820191505090505b5090505b600085146126e157600182612647919061477d565b9150600a8561265691906148e2565b603061266291906146f6565b60f81b81838151811061269e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856126da919061474c565b9450612632565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612762838383612a5d565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156127a5576127a081612a62565b6127e4565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146127e3576127e28382612aab565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128275761282281612c18565b612866565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612865576128648282612d5b565b5b5b505050565b6128758383612dda565b61288260008484846128c6565b6128c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b89061423b565b60405180910390fd5b505050565b60006128e78473ffffffffffffffffffffffffffffffffffffffff16612fa8565b15612a50578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612910611def565b8786866040518563ffffffff1660e01b81526004016129329493929190614192565b602060405180830381600087803b15801561294c57600080fd5b505af192505050801561297d57506040513d601f19601f8201168201806040525081019061297a9190613491565b60015b612a00573d80600081146129ad576040519150601f19603f3d011682016040523d82523d6000602084013e6129b2565b606091505b506000815114156129f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ef9061423b565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612a55565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612ab8846112a9565b612ac2919061477d565b9050600060076000848152602001908152602001600020549050818114612ba7576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612c2c919061477d565b9050600060096000848152602001908152602001600020549050600060088381548110612c82577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110612cca577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612d3f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000612d66836112a9565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e419061441b565b60405180910390fd5b612e5381611ed9565b15612e93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e8a9061427b565b60405180910390fd5b612e9f60008383612757565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612eef91906146f6565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054612fc790614867565b90600052602060002090601f016020900481019282612fe95760008555613030565b82601f1061300257805160ff1916838001178555613030565b82800160010185558215613030579182015b8281111561302f578251825591602001919060010190613014565b5b50905061303d9190613041565b5090565b5b8082111561305a576000816000905550600101613042565b5090565b600061307161306c84614627565b6145f6565b9050808382526020820190508285602086028201111561309057600080fd5b60005b858110156130c057816130a6888261322d565b845260208401935060208301925050600181019050613093565b5050509392505050565b60006130dd6130d884614653565b6145f6565b9050828152602081018484840111156130f557600080fd5b613100848285614825565b509392505050565b600061311b61311684614683565b6145f6565b90508281526020810184848401111561313357600080fd5b61313e848285614825565b509392505050565b600081359050613155816149e0565b92915050565b60008151905061316a816149e0565b92915050565b600082601f83011261318157600080fd5b813561319184826020860161305e565b91505092915050565b6000813590506131a9816149f7565b92915050565b6000813590506131be81614a0e565b92915050565b6000815190506131d381614a0e565b92915050565b600082601f8301126131ea57600080fd5b81356131fa8482602086016130ca565b91505092915050565b600082601f83011261321457600080fd5b8135613224848260208601613108565b91505092915050565b60008135905061323c81614a25565b92915050565b60008151905061325181614a25565b92915050565b60006020828403121561326957600080fd5b600061327784828501613146565b91505092915050565b60006020828403121561329257600080fd5b60006132a08482850161315b565b91505092915050565b600080604083850312156132bc57600080fd5b60006132ca85828601613146565b92505060206132db85828601613146565b9150509250929050565b6000806000606084860312156132fa57600080fd5b600061330886828701613146565b935050602061331986828701613146565b925050604061332a8682870161322d565b9150509250925092565b6000806000806080858703121561334a57600080fd5b600061335887828801613146565b945050602061336987828801613146565b935050604061337a8782880161322d565b925050606085013567ffffffffffffffff81111561339757600080fd5b6133a3878288016131d9565b91505092959194509250565b600080604083850312156133c257600080fd5b60006133d085828601613146565b92505060206133e18582860161319a565b9150509250929050565b600080604083850312156133fe57600080fd5b600061340c85828601613146565b925050602061341d8582860161322d565b9150509250929050565b60006020828403121561343957600080fd5b600082013567ffffffffffffffff81111561345357600080fd5b61345f84828501613170565b91505092915050565b60006020828403121561347a57600080fd5b6000613488848285016131af565b91505092915050565b6000602082840312156134a357600080fd5b60006134b1848285016131c4565b91505092915050565b6000602082840312156134cc57600080fd5b600082013567ffffffffffffffff8111156134e657600080fd5b6134f284828501613203565b91505092915050565b60006020828403121561350d57600080fd5b600061351b8482850161322d565b91505092915050565b60006020828403121561353657600080fd5b600061354484828501613242565b91505092915050565b613556816147b1565b82525050565b613565816147c3565b82525050565b6000613576826146b3565b61358081856146c9565b9350613590818560208601614834565b613599816149cf565b840191505092915050565b60006135af826146be565b6135b981856146da565b93506135c9818560208601614834565b6135d2816149cf565b840191505092915050565b60006135e8826146be565b6135f281856146eb565b9350613602818560208601614834565b80840191505092915050565b600061361b602b836146da565b91507f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008301527f74206f6620626f756e64730000000000000000000000000000000000000000006020830152604082019050919050565b60006136816032836146da565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b60006136e76026836146da565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061374d601c836146da565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b600061378d602a836146da565b91507f43616e6e6f7420636c61696d206d6f7265207468616e2066696674792062656160008301527f7273206174206f6e6365000000000000000000000000000000000000000000006020830152604082019050919050565b60006137f3604b836146da565b91507f4d75737420686f6c64206174206c65617374206173206d616e792042756c6c7360008301527f20617320746865206e756d626572206f6620426561727320796f7520696e746560208301527f6e6420746f20636c61696d0000000000000000000000000000000000000000006040830152606082019050919050565b600061387f6024836146da565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006138e56019836146da565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b60006139256039836146da565b91507f4d757374206265206f6e206f72206166746572207468652072657665616c207460008301527f696d6520746f20736574207374617274696e6720696e646578000000000000006020830152604082019050919050565b600061398b602c836146da565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b60006139f1601d836146da565b91507f5374617274696e6720696e64657820697320616c7265616479207365740000006000830152602082019050919050565b6000613a316025836146da565b91507f52657175657374656420746f6b656e496420657863656564732075707065722060008301527f626f756e640000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613a976038836146da565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b6000613afd602a836146da565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b6000613b636029836146da565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000613bc96037836146da565b91507f4d757374206f776e207468652042756c6c20666f72207265717565737465642060008301527f746f6b656e496420746f20636c61696d206120426561720000000000000000006020830152604082019050919050565b6000613c2f6020836146da565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b6000613c6f6022836146da565b91507f53616c65206d7573742062652061637469766520746f206d696e74206120426560008301527f61720000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613cd5602c836146da565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000613d3b6020836146da565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613d7b6023836146da565b91507f5374617274696e6720696e64657820626c6f636b20697320616c72656164792060008301527f73657400000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613de16029836146da565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000613e47602f836146da565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b6000613ead6021836146da565b91507f746f6b656e4964206f75747369646520636f6c6c656374696f6e20626f756e6460008301527f73000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613f136021836146da565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613f796020836146da565b91507f5374617274696e6720696e64657820626c6f636b206d757374206265207365746000830152602082019050919050565b6000613fb96031836146da565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b600061401f602c836146da565b91507f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008301527f7574206f6620626f756e647300000000000000000000000000000000000000006020830152604082019050919050565b60006140856029836146da565b91507f507572636861736520776f756c6420657863656564206d617820737570706c7960008301527f206f6620426561727300000000000000000000000000000000000000000000006020830152604082019050919050565b60006140eb6022836146da565b91507f43616e6e6f7420657863656564206d617820737570706c79206f66204265617260008301527f732e0000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b61414d8161481b565b82525050565b600061415f82856135dd565b915061416b82846135dd565b91508190509392505050565b600060208201905061418c600083018461354d565b92915050565b60006080820190506141a7600083018761354d565b6141b4602083018661354d565b6141c16040830185614144565b81810360608301526141d3818461356b565b905095945050505050565b60006020820190506141f3600083018461355c565b92915050565b6000602082019050818103600083015261421381846135a4565b905092915050565b600060208201905081810360008301526142348161360e565b9050919050565b6000602082019050818103600083015261425481613674565b9050919050565b60006020820190508181036000830152614274816136da565b9050919050565b6000602082019050818103600083015261429481613740565b9050919050565b600060208201905081810360008301526142b481613780565b9050919050565b600060208201905081810360008301526142d4816137e6565b9050919050565b600060208201905081810360008301526142f481613872565b9050919050565b60006020820190508181036000830152614314816138d8565b9050919050565b6000602082019050818103600083015261433481613918565b9050919050565b600060208201905081810360008301526143548161397e565b9050919050565b60006020820190508181036000830152614374816139e4565b9050919050565b6000602082019050818103600083015261439481613a24565b9050919050565b600060208201905081810360008301526143b481613a8a565b9050919050565b600060208201905081810360008301526143d481613af0565b9050919050565b600060208201905081810360008301526143f481613b56565b9050919050565b6000602082019050818103600083015261441481613bbc565b9050919050565b6000602082019050818103600083015261443481613c22565b9050919050565b6000602082019050818103600083015261445481613c62565b9050919050565b6000602082019050818103600083015261447481613cc8565b9050919050565b6000602082019050818103600083015261449481613d2e565b9050919050565b600060208201905081810360008301526144b481613d6e565b9050919050565b600060208201905081810360008301526144d481613dd4565b9050919050565b600060208201905081810360008301526144f481613e3a565b9050919050565b6000602082019050818103600083015261451481613ea0565b9050919050565b6000602082019050818103600083015261453481613f06565b9050919050565b6000602082019050818103600083015261455481613f6c565b9050919050565b6000602082019050818103600083015261457481613fac565b9050919050565b6000602082019050818103600083015261459481614012565b9050919050565b600060208201905081810360008301526145b481614078565b9050919050565b600060208201905081810360008301526145d4816140de565b9050919050565b60006020820190506145f06000830184614144565b92915050565b6000604051905081810181811067ffffffffffffffff8211171561461d5761461c6149a0565b5b8060405250919050565b600067ffffffffffffffff821115614642576146416149a0565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561466e5761466d6149a0565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff82111561469e5761469d6149a0565b5b601f19601f8301169050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006147018261481b565b915061470c8361481b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561474157614740614913565b5b828201905092915050565b60006147578261481b565b91506147628361481b565b92508261477257614771614942565b5b828204905092915050565b60006147888261481b565b91506147938361481b565b9250828210156147a6576147a5614913565b5b828203905092915050565b60006147bc826147fb565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614852578082015181840152602081019050614837565b83811115614861576000848401525b50505050565b6000600282049050600182168061487f57607f821691505b6020821081141561489357614892614971565b5b50919050565b60006148a48261481b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156148d7576148d6614913565b5b600182019050919050565b60006148ed8261481b565b91506148f88361481b565b92508261490857614907614942565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b6149e9816147b1565b81146149f457600080fd5b50565b614a00816147c3565b8114614a0b57600080fd5b50565b614a17816147cf565b8114614a2257600080fd5b50565b614a2e8161481b565b8114614a3957600080fd5b5056fea2646970667358221220c3d173f3e46733d2aaf5e1fe3644cee361af3cefcfceb265756d7348460175a064736f6c6343000800003300000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000027100000000000000000000000003a8778a58993ba4b941f85684d74750043a4bb5f000000000000000000000000000000000000000000000000000000006105b9d0000000000000000000000000000000000000000000000000000000000000000f42656172734f6e546865426c6f636b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044245415200000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102275760003560e01c806370a0823111610130578063b88d4fde116100b8578063e985e9c51161007c578063e985e9c51461062a578063e98665501461065a578063eb8d244414610664578063f2fde38b14610682578063f62f3c111461069e57610227565b8063b88d4fde14610586578063c358575c146105a2578063c87b56dd146105be578063cb774d47146105ee578063e36d64981461060c57610227565b80638da5cb5b116100ff5780638da5cb5b146104f257806395d89b4114610510578063a0b6e9641461052e578063a22cb4651461054c578063a2b3f3301461056857610227565b806370a0823114610490578063715018a6146104c05780637d17fcbe146104ca578063818aa553146104d457610227565b806331d46ec2116101b357806342842e0e1161018257806342842e0e146103da5780634cef1fa3146103f65780634f6ccce71461041457806355f804b3146104445780636352211e1461046057610227565b806331d46ec21461036857806333c41a901461038457806334918dfd146103b45780633a66cc67146103be57610227565b8063095ea7b3116101fa578063095ea7b3146102c657806310969523146102e257806318160ddd146102fe57806323b872dd1461031c5780632f745c591461033857610227565b8063018a2c371461022c57806301ffc9a71461024857806306fdde0314610278578063081812fc14610296575b600080fd5b610246600480360381019061024191906134fb565b6106bc565b005b610262600480360381019061025d9190613468565b610742565b60405161026f91906141de565b60405180910390f35b6102806107bc565b60405161028d91906141f9565b60405180910390f35b6102b060048036038101906102ab91906134fb565b61084e565b6040516102bd9190614177565b60405180910390f35b6102e060048036038101906102db91906133eb565b6108d3565b005b6102fc60048036038101906102f791906134ba565b6109eb565b005b610306610a81565b60405161031391906145db565b60405180910390f35b610336600480360381019061033191906132e5565b610a8e565b005b610352600480360381019061034d91906133eb565b610aee565b60405161035f91906145db565b60405180910390f35b610382600480360381019061037d9190613427565b610b93565b005b61039e600480360381019061039991906134fb565b610f21565b6040516103ab91906141de565b60405180910390f35b6103bc610f77565b005b6103d860048036038101906103d391906134fb565b61101f565b005b6103f460048036038101906103ef91906132e5565b6110a5565b005b6103fe6110c5565b60405161040b91906145db565b60405180910390f35b61042e600480360381019061042991906134fb565b6110ca565b60405161043b91906145db565b60405180910390f35b61045e600480360381019061045991906134ba565b611161565b005b61047a600480360381019061047591906134fb565b6111f7565b6040516104879190614177565b60405180910390f35b6104aa60048036038101906104a59190613257565b6112a9565b6040516104b791906145db565b60405180910390f35b6104c8611361565b005b6104d26113e9565b005b6104dc6114f8565b6040516104e991906145db565b60405180910390f35b6104fa6114fe565b6040516105079190614177565b60405180910390f35b610518611528565b60405161052591906141f9565b60405180910390f35b6105366115ba565b60405161054391906141f9565b60405180910390f35b610566600480360381019061056191906133af565b611648565b005b6105706117c9565b60405161057d91906145db565b60405180910390f35b6105a0600480360381019061059b9190613334565b6117cf565b005b6105bc60048036038101906105b791906134fb565b611831565b005b6105d860048036038101906105d391906134fb565b611a3c565b6040516105e591906141f9565b60405180910390f35b6105f6611ae3565b60405161060391906145db565b60405180910390f35b610614611ae9565b60405161062191906145db565b60405180910390f35b610644600480360381019061063f91906132a9565b611aef565b60405161065191906141de565b60405180910390f35b610662611b83565b005b61066c611cde565b60405161067991906141de565b60405180910390f35b61069c60048036038101906106979190613257565b611cf1565b005b6106a6611de9565b6040516106b391906145db565b60405180910390f35b6106c4611def565b73ffffffffffffffffffffffffffffffffffffffff166106e26114fe565b73ffffffffffffffffffffffffffffffffffffffff1614610738576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161072f9061447b565b60405180910390fd5b8060118190555050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107b557506107b482611df7565b5b9050919050565b6060600080546107cb90614867565b80601f01602080910402602001604051908101604052809291908181526020018280546107f790614867565b80156108445780601f1061081957610100808354040283529160200191610844565b820191906000526020600020905b81548152906001019060200180831161082757829003601f168201915b5050505050905090565b600061085982611ed9565b610898576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088f9061445b565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108de826111f7565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561094f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109469061451b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661096e611def565b73ffffffffffffffffffffffffffffffffffffffff16148061099d575061099c81610997611def565b611aef565b5b6109dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d39061439b565b60405180910390fd5b6109e68383611f45565b505050565b6109f3611def565b73ffffffffffffffffffffffffffffffffffffffff16610a116114fe565b73ffffffffffffffffffffffffffffffffffffffff1614610a67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5e9061447b565b60405180910390fd5b8060129080519060200190610a7d929190612fbb565b5050565b6000600880549050905090565b610a9f610a99611def565b82611ffe565b610ade576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad59061455b565b60405180910390fd5b610ae98383836120dc565b505050565b6000610af9836112a9565b8210610b3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b319061421b565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600d60009054906101000a900460ff16610be2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd99061443b565b60405180910390fd5b60008151905060338110610c2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c229061429b565b60405180910390fd5b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401610c889190614177565b60206040518083038186803b158015610ca057600080fd5b505afa158015610cb4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cd89190613524565b905081811015610d1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d14906142bb565b60405180910390fd5b60005b8181108015610d2e57508281105b8015610d3a5750603381105b15610f1357600c54610d4a610a81565b10610d8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d81906145bb565b60405180910390fd5b6000848281518110610dc5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190503373ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b8152600401610e4191906145db565b60206040518083038186803b158015610e5957600080fd5b505afa158015610e6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e919190613280565b73ffffffffffffffffffffffffffffffffffffffff1614610ee7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ede906143fb565b60405180910390fd5b610ef081611ed9565b610eff57610efe3382612338565b5b508080610f0b90614899565b915050610d20565b50610f1c612356565b505050565b6000600c548210610f67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5e906144fb565b60405180910390fd5b610f7082611ed9565b9050919050565b610f7f611def565b73ffffffffffffffffffffffffffffffffffffffff16610f9d6114fe565b73ffffffffffffffffffffffffffffffffffffffff1614610ff3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fea9061447b565b60405180910390fd5b600d60009054906101000a900460ff1615600d60006101000a81548160ff021916908315150217905550565b611027611def565b73ffffffffffffffffffffffffffffffffffffffff166110456114fe565b73ffffffffffffffffffffffffffffffffffffffff161461109b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110929061447b565b60405180910390fd5b8060108190555050565b6110c0838383604051806020016040528060008152506117cf565b505050565b603381565b60006110d4610a81565b8210611115576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110c9061457b565b60405180910390fd5b6008828154811061114f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b611169611def565b73ffffffffffffffffffffffffffffffffffffffff166111876114fe565b73ffffffffffffffffffffffffffffffffffffffff16146111dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d49061447b565b60405180910390fd5b80601390805190602001906111f3929190612fbb565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156112a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611297906143db565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561131a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611311906143bb565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611369611def565b73ffffffffffffffffffffffffffffffffffffffff166113876114fe565b73ffffffffffffffffffffffffffffffffffffffff16146113dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d49061447b565b60405180910390fd5b6113e7600061238c565b565b6113f1611def565b73ffffffffffffffffffffffffffffffffffffffff1661140f6114fe565b73ffffffffffffffffffffffffffffffffffffffff1614611465576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145c9061447b565b60405180910390fd5b6000600f54146114aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a19061449b565b60405180910390fd5b6000600e54146114ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e69061435b565b60405180910390fd5b43600f81905550565b60105481565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461153790614867565b80601f016020809104026020016040519081016040528092919081815260200182805461156390614867565b80156115b05780601f10611585576101008083540402835291602001916115b0565b820191906000526020600020905b81548152906001019060200180831161159357829003601f168201915b5050505050905090565b601280546115c790614867565b80601f01602080910402602001604051908101604052809291908181526020018280546115f390614867565b80156116405780601f1061161557610100808354040283529160200191611640565b820191906000526020600020905b81548152906001019060200180831161162357829003601f168201915b505050505081565b611650611def565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b5906142fb565b60405180910390fd5b80600560006116cb611def565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611778611def565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516117bd91906141de565b60405180910390a35050565b600c5481565b6117e06117da611def565b83611ffe565b61181f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118169061455b565b60405180910390fd5b61182b84848484612452565b50505050565b600d60009054906101000a900460ff16611880576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118779061443b565b60405180910390fd5b600c5461188b610a81565b106118cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c29061459b565b60405180910390fd5b600c54811061190f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119069061437b565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b815260040161198191906145db565b60206040518083038186803b15801561199957600080fd5b505afa1580156119ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119d19190613280565b73ffffffffffffffffffffffffffffffffffffffff1614611a27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1e906143fb565b60405180910390fd5b611a313382612338565b611a39612356565b50565b6060611a4782611ed9565b611a86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7d906144db565b60405180910390fd5b6000611a906124ae565b90506000815111611ab05760405180602001604052806000815250611adb565b80611aba84612540565b604051602001611acb929190614153565b6040516020818303038152906040525b915050919050565b600e5481565b600f5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000600e5414611bc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bbf9061435b565b60405180910390fd5b6000600f541415611c0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c059061453b565b60405180910390fd5b60115442101580611c275750600c54611c25610a81565b145b611c66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5d9061431b565b60405180910390fd5b600c54600f544060001c611c7a91906148e2565b600e8190555060ff600f5443611c90919061477d565b1115611cbb57600c54600143611ca6919061477d565b4060001c611cb491906148e2565b600e819055505b6000600e541415611cdc576001600e54611cd591906146f6565b600e819055505b565b600d60009054906101000a900460ff1681565b611cf9611def565b73ffffffffffffffffffffffffffffffffffffffff16611d176114fe565b73ffffffffffffffffffffffffffffffffffffffff1614611d6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d649061447b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ddd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd49061425b565b60405180910390fd5b611de68161238c565b50565b60115481565b600033905090565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611ec257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611ed25750611ed1826126ed565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611fb8836111f7565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061200982611ed9565b612048576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203f9061433b565b60405180910390fd5b6000612053836111f7565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806120c257508373ffffffffffffffffffffffffffffffffffffffff166120aa8461084e565b73ffffffffffffffffffffffffffffffffffffffff16145b806120d357506120d28185611aef565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166120fc826111f7565b73ffffffffffffffffffffffffffffffffffffffff1614612152576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612149906144bb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156121c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b9906142db565b60405180910390fd5b6121cd838383612757565b6121d8600082611f45565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612228919061477d565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461227f91906146f6565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b61235282826040518060200160405280600081525061286b565b5050565b6000600f5414801561237d5750600c5461236e610a81565b148061237c57506010544210155b5b1561238a5743600f819055505b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61245d8484846120dc565b612469848484846128c6565b6124a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249f9061423b565b60405180910390fd5b50505050565b6060601380546124bd90614867565b80601f01602080910402602001604051908101604052809291908181526020018280546124e990614867565b80156125365780601f1061250b57610100808354040283529160200191612536565b820191906000526020600020905b81548152906001019060200180831161251957829003601f168201915b5050505050905090565b60606000821415612588576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506126e8565b600082905060005b600082146125ba5780806125a390614899565b915050600a826125b3919061474c565b9150612590565b60008167ffffffffffffffff8111156125fc577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561262e5781602001600182028036833780820191505090505b5090505b600085146126e157600182612647919061477d565b9150600a8561265691906148e2565b603061266291906146f6565b60f81b81838151811061269e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856126da919061474c565b9450612632565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612762838383612a5d565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156127a5576127a081612a62565b6127e4565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146127e3576127e28382612aab565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128275761282281612c18565b612866565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612865576128648282612d5b565b5b5b505050565b6128758383612dda565b61288260008484846128c6565b6128c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b89061423b565b60405180910390fd5b505050565b60006128e78473ffffffffffffffffffffffffffffffffffffffff16612fa8565b15612a50578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612910611def565b8786866040518563ffffffff1660e01b81526004016129329493929190614192565b602060405180830381600087803b15801561294c57600080fd5b505af192505050801561297d57506040513d601f19601f8201168201806040525081019061297a9190613491565b60015b612a00573d80600081146129ad576040519150601f19603f3d011682016040523d82523d6000602084013e6129b2565b606091505b506000815114156129f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ef9061423b565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612a55565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612ab8846112a9565b612ac2919061477d565b9050600060076000848152602001908152602001600020549050818114612ba7576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612c2c919061477d565b9050600060096000848152602001908152602001600020549050600060088381548110612c82577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110612cca577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612d3f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000612d66836112a9565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e419061441b565b60405180910390fd5b612e5381611ed9565b15612e93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e8a9061427b565b60405180910390fd5b612e9f60008383612757565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612eef91906146f6565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054612fc790614867565b90600052602060002090601f016020900481019282612fe95760008555613030565b82601f1061300257805160ff1916838001178555613030565b82800160010185558215613030579182015b8281111561302f578251825591602001919060010190613014565b5b50905061303d9190613041565b5090565b5b8082111561305a576000816000905550600101613042565b5090565b600061307161306c84614627565b6145f6565b9050808382526020820190508285602086028201111561309057600080fd5b60005b858110156130c057816130a6888261322d565b845260208401935060208301925050600181019050613093565b5050509392505050565b60006130dd6130d884614653565b6145f6565b9050828152602081018484840111156130f557600080fd5b613100848285614825565b509392505050565b600061311b61311684614683565b6145f6565b90508281526020810184848401111561313357600080fd5b61313e848285614825565b509392505050565b600081359050613155816149e0565b92915050565b60008151905061316a816149e0565b92915050565b600082601f83011261318157600080fd5b813561319184826020860161305e565b91505092915050565b6000813590506131a9816149f7565b92915050565b6000813590506131be81614a0e565b92915050565b6000815190506131d381614a0e565b92915050565b600082601f8301126131ea57600080fd5b81356131fa8482602086016130ca565b91505092915050565b600082601f83011261321457600080fd5b8135613224848260208601613108565b91505092915050565b60008135905061323c81614a25565b92915050565b60008151905061325181614a25565b92915050565b60006020828403121561326957600080fd5b600061327784828501613146565b91505092915050565b60006020828403121561329257600080fd5b60006132a08482850161315b565b91505092915050565b600080604083850312156132bc57600080fd5b60006132ca85828601613146565b92505060206132db85828601613146565b9150509250929050565b6000806000606084860312156132fa57600080fd5b600061330886828701613146565b935050602061331986828701613146565b925050604061332a8682870161322d565b9150509250925092565b6000806000806080858703121561334a57600080fd5b600061335887828801613146565b945050602061336987828801613146565b935050604061337a8782880161322d565b925050606085013567ffffffffffffffff81111561339757600080fd5b6133a3878288016131d9565b91505092959194509250565b600080604083850312156133c257600080fd5b60006133d085828601613146565b92505060206133e18582860161319a565b9150509250929050565b600080604083850312156133fe57600080fd5b600061340c85828601613146565b925050602061341d8582860161322d565b9150509250929050565b60006020828403121561343957600080fd5b600082013567ffffffffffffffff81111561345357600080fd5b61345f84828501613170565b91505092915050565b60006020828403121561347a57600080fd5b6000613488848285016131af565b91505092915050565b6000602082840312156134a357600080fd5b60006134b1848285016131c4565b91505092915050565b6000602082840312156134cc57600080fd5b600082013567ffffffffffffffff8111156134e657600080fd5b6134f284828501613203565b91505092915050565b60006020828403121561350d57600080fd5b600061351b8482850161322d565b91505092915050565b60006020828403121561353657600080fd5b600061354484828501613242565b91505092915050565b613556816147b1565b82525050565b613565816147c3565b82525050565b6000613576826146b3565b61358081856146c9565b9350613590818560208601614834565b613599816149cf565b840191505092915050565b60006135af826146be565b6135b981856146da565b93506135c9818560208601614834565b6135d2816149cf565b840191505092915050565b60006135e8826146be565b6135f281856146eb565b9350613602818560208601614834565b80840191505092915050565b600061361b602b836146da565b91507f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008301527f74206f6620626f756e64730000000000000000000000000000000000000000006020830152604082019050919050565b60006136816032836146da565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b60006136e76026836146da565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061374d601c836146da565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b600061378d602a836146da565b91507f43616e6e6f7420636c61696d206d6f7265207468616e2066696674792062656160008301527f7273206174206f6e6365000000000000000000000000000000000000000000006020830152604082019050919050565b60006137f3604b836146da565b91507f4d75737420686f6c64206174206c65617374206173206d616e792042756c6c7360008301527f20617320746865206e756d626572206f6620426561727320796f7520696e746560208301527f6e6420746f20636c61696d0000000000000000000000000000000000000000006040830152606082019050919050565b600061387f6024836146da565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006138e56019836146da565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b60006139256039836146da565b91507f4d757374206265206f6e206f72206166746572207468652072657665616c207460008301527f696d6520746f20736574207374617274696e6720696e646578000000000000006020830152604082019050919050565b600061398b602c836146da565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b60006139f1601d836146da565b91507f5374617274696e6720696e64657820697320616c7265616479207365740000006000830152602082019050919050565b6000613a316025836146da565b91507f52657175657374656420746f6b656e496420657863656564732075707065722060008301527f626f756e640000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613a976038836146da565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b6000613afd602a836146da565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b6000613b636029836146da565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000613bc96037836146da565b91507f4d757374206f776e207468652042756c6c20666f72207265717565737465642060008301527f746f6b656e496420746f20636c61696d206120426561720000000000000000006020830152604082019050919050565b6000613c2f6020836146da565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b6000613c6f6022836146da565b91507f53616c65206d7573742062652061637469766520746f206d696e74206120426560008301527f61720000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613cd5602c836146da565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000613d3b6020836146da565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613d7b6023836146da565b91507f5374617274696e6720696e64657820626c6f636b20697320616c72656164792060008301527f73657400000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613de16029836146da565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000613e47602f836146da565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b6000613ead6021836146da565b91507f746f6b656e4964206f75747369646520636f6c6c656374696f6e20626f756e6460008301527f73000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613f136021836146da565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613f796020836146da565b91507f5374617274696e6720696e64657820626c6f636b206d757374206265207365746000830152602082019050919050565b6000613fb96031836146da565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b600061401f602c836146da565b91507f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008301527f7574206f6620626f756e647300000000000000000000000000000000000000006020830152604082019050919050565b60006140856029836146da565b91507f507572636861736520776f756c6420657863656564206d617820737570706c7960008301527f206f6620426561727300000000000000000000000000000000000000000000006020830152604082019050919050565b60006140eb6022836146da565b91507f43616e6e6f7420657863656564206d617820737570706c79206f66204265617260008301527f732e0000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b61414d8161481b565b82525050565b600061415f82856135dd565b915061416b82846135dd565b91508190509392505050565b600060208201905061418c600083018461354d565b92915050565b60006080820190506141a7600083018761354d565b6141b4602083018661354d565b6141c16040830185614144565b81810360608301526141d3818461356b565b905095945050505050565b60006020820190506141f3600083018461355c565b92915050565b6000602082019050818103600083015261421381846135a4565b905092915050565b600060208201905081810360008301526142348161360e565b9050919050565b6000602082019050818103600083015261425481613674565b9050919050565b60006020820190508181036000830152614274816136da565b9050919050565b6000602082019050818103600083015261429481613740565b9050919050565b600060208201905081810360008301526142b481613780565b9050919050565b600060208201905081810360008301526142d4816137e6565b9050919050565b600060208201905081810360008301526142f481613872565b9050919050565b60006020820190508181036000830152614314816138d8565b9050919050565b6000602082019050818103600083015261433481613918565b9050919050565b600060208201905081810360008301526143548161397e565b9050919050565b60006020820190508181036000830152614374816139e4565b9050919050565b6000602082019050818103600083015261439481613a24565b9050919050565b600060208201905081810360008301526143b481613a8a565b9050919050565b600060208201905081810360008301526143d481613af0565b9050919050565b600060208201905081810360008301526143f481613b56565b9050919050565b6000602082019050818103600083015261441481613bbc565b9050919050565b6000602082019050818103600083015261443481613c22565b9050919050565b6000602082019050818103600083015261445481613c62565b9050919050565b6000602082019050818103600083015261447481613cc8565b9050919050565b6000602082019050818103600083015261449481613d2e565b9050919050565b600060208201905081810360008301526144b481613d6e565b9050919050565b600060208201905081810360008301526144d481613dd4565b9050919050565b600060208201905081810360008301526144f481613e3a565b9050919050565b6000602082019050818103600083015261451481613ea0565b9050919050565b6000602082019050818103600083015261453481613f06565b9050919050565b6000602082019050818103600083015261455481613f6c565b9050919050565b6000602082019050818103600083015261457481613fac565b9050919050565b6000602082019050818103600083015261459481614012565b9050919050565b600060208201905081810360008301526145b481614078565b9050919050565b600060208201905081810360008301526145d4816140de565b9050919050565b60006020820190506145f06000830184614144565b92915050565b6000604051905081810181811067ffffffffffffffff8211171561461d5761461c6149a0565b5b8060405250919050565b600067ffffffffffffffff821115614642576146416149a0565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561466e5761466d6149a0565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff82111561469e5761469d6149a0565b5b601f19601f8301169050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006147018261481b565b915061470c8361481b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561474157614740614913565b5b828201905092915050565b60006147578261481b565b91506147628361481b565b92508261477257614771614942565b5b828204905092915050565b60006147888261481b565b91506147938361481b565b9250828210156147a6576147a5614913565b5b828203905092915050565b60006147bc826147fb565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614852578082015181840152602081019050614837565b83811115614861576000848401525b50505050565b6000600282049050600182168061487f57607f821691505b6020821081141561489357614892614971565b5b50919050565b60006148a48261481b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156148d7576148d6614913565b5b600182019050919050565b60006148ed8261481b565b91506148f88361481b565b92508261490857614907614942565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b6149e9816147b1565b81146149f457600080fd5b50565b614a00816147c3565b8114614a0b57600080fd5b50565b614a17816147cf565b8114614a2257600080fd5b50565b614a2e8161481b565b8114614a3957600080fd5b5056fea2646970667358221220c3d173f3e46733d2aaf5e1fe3644cee361af3cefcfceb265756d7348460175a064736f6c63430008000033

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

00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000027100000000000000000000000003a8778a58993ba4b941f85684d74750043a4bb5f000000000000000000000000000000000000000000000000000000006105b9d0000000000000000000000000000000000000000000000000000000000000000f42656172734f6e546865426c6f636b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044245415200000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : name (string): BearsOnTheBlock
Arg [1] : symbol (string): BEAR
Arg [2] : maxNftSupply (uint256): 10000
Arg [3] : botbContractAddress (address): 0x3a8778A58993bA4B941f85684D74750043A4bB5f
Arg [4] : saleStart (uint256): 1627765200

-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000002710
Arg [3] : 0000000000000000000000003a8778a58993ba4b941f85684d74750043a4bb5f
Arg [4] : 000000000000000000000000000000000000000000000000000000006105b9d0
Arg [5] : 000000000000000000000000000000000000000000000000000000000000000f
Arg [6] : 42656172734f6e546865426c6f636b0000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [8] : 4245415200000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

42422:4366:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43234:122;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35945:224;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23922:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25481:221;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25004:411;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43517:124;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36585:113;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26371:339;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36253:256;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44876:907;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43649:181;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44042:89;;;:::i;:::-;;43364:145;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26781:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42536:40;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36775:233;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43946:88;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23616:239;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23346:208;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13134:94;;;:::i;:::-;;46519:266;;;:::i;:::-;;42697:32;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12483:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24091:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42773:28;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25774:295;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42506:23;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27037:328;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44370:498;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24266:334;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42622:28;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42657:33;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26140:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45791:720;;;:::i;:::-;;42583:32;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13383:192;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42736:30;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43234:122;12714:12;:10;:12::i;:::-;12703:23;;:7;:5;:7::i;:::-;:23;;;12695:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43333:15:::1;43315;:33;;;;43234:122:::0;:::o;35945:224::-;36047:4;36086:35;36071:50;;;:11;:50;;;;:90;;;;36125:36;36149:11;36125:23;:36::i;:::-;36071:90;36064:97;;35945:224;;;:::o;23922:100::-;23976:13;24009:5;24002:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23922:100;:::o;25481:221::-;25557:7;25585:16;25593:7;25585;:16::i;:::-;25577:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25670:15;:24;25686:7;25670:24;;;;;;;;;;;;;;;;;;;;;25663:31;;25481:221;;;:::o;25004:411::-;25085:13;25101:23;25116:7;25101:14;:23::i;:::-;25085:39;;25149:5;25143:11;;:2;:11;;;;25135:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;25243:5;25227:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;25252:37;25269:5;25276:12;:10;:12::i;:::-;25252:16;:37::i;:::-;25227:62;25205:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;25386:21;25395:2;25399:7;25386:8;:21::i;:::-;25004:411;;;:::o;43517:124::-;12714:12;:10;:12::i;:::-;12703:23;;:7;:5;:7::i;:::-;:23;;;12695:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43619:14:::1;43602;:31;;;;;;;;;;;;:::i;:::-;;43517:124:::0;:::o;36585:113::-;36646:7;36673:10;:17;;;;36666:24;;36585:113;:::o;26371:339::-;26566:41;26585:12;:10;:12::i;:::-;26599:7;26566:18;:41::i;:::-;26558:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;26674:28;26684:4;26690:2;26694:7;26674:9;:28::i;:::-;26371:339;;;:::o;36253:256::-;36350:7;36386:23;36403:5;36386:16;:23::i;:::-;36378:5;:31;36370:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;36475:12;:19;36488:5;36475:19;;;;;;;;;;;;;;;:26;36495:5;36475:26;;;;;;;;;;;;36468:33;;36253:256;;;;:::o;44876:907::-;44949:12;;;;;;;;;;;44941:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;45011:11;45025:8;:15;45011:29;;42574:2;45059:6;:23;45051:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;45140:12;45155:4;;;;;;;;;;;:14;;;45170:10;45155:26;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45140:41;;45211:6;45200:7;:17;;45192:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;45314:6;45310:429;45330:7;45326:1;:11;:25;;;;;45345:6;45341:1;:10;45326:25;:47;;;;;42574:2;45355:1;:18;45326:47;45310:429;;;45419:8;;45403:13;:11;:13::i;:::-;:24;45395:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;45481:12;45496:8;45505:1;45496:11;;;;;;;;;;;;;;;;;;;;;;45481:26;;45555:10;45530:35;;:4;;;;;;;;;;;:12;;;45543:7;45530:21;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:35;;;45522:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;45645:16;45653:7;45645;:16::i;:::-;45640:88;;45682:30;45692:10;45704:7;45682:9;:30::i;:::-;45640:88;45310:429;45375:3;;;;;:::i;:::-;;;;45310:429;;;;45749:26;:24;:26::i;:::-;44876:907;;;:::o;43649:181::-;43707:4;43742:8;;43732:7;:18;43724:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;43806:16;43814:7;43806;:16::i;:::-;43799:23;;43649:181;;;:::o;44042:89::-;12714:12;:10;:12::i;:::-;12703:23;;:7;:5;:7::i;:::-;:23;;;12695:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44111:12:::1;;;;;;;;;;;44110:13;44095:12;;:28;;;;;;;;;;;;;;;;;;44042:89::o:0;43364:145::-;12714:12;:10;:12::i;:::-;12703:23;;:7;:5;:7::i;:::-;:23;;;12695:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43479:22:::1;43459:17;:42;;;;43364:145:::0;:::o;26781:185::-;26919:39;26936:4;26942:2;26946:7;26919:39;;;;;;;;;;;;:16;:39::i;:::-;26781:185;;;:::o;42536:40::-;42574:2;42536:40;:::o;36775:233::-;36850:7;36886:30;:28;:30::i;:::-;36878:5;:38;36870:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;36983:10;36994:5;36983:17;;;;;;;;;;;;;;;;;;;;;;;;36976:24;;36775:233;;;:::o;43946:88::-;12714:12;:10;:12::i;:::-;12703:23;;:7;:5;:7::i;:::-;:23;;;12695:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44023:3:::1;44013:7;:13;;;;;;;;;;;;:::i;:::-;;43946:88:::0;:::o;23616:239::-;23688:7;23708:13;23724:7;:16;23732:7;23724:16;;;;;;;;;;;;;;;;;;;;;23708:32;;23776:1;23759:19;;:5;:19;;;;23751:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23842:5;23835:12;;;23616:239;;;:::o;23346:208::-;23418:7;23463:1;23446:19;;:5;:19;;;;23438:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;23530:9;:16;23540:5;23530:16;;;;;;;;;;;;;;;;23523:23;;23346:208;;;:::o;13134:94::-;12714:12;:10;:12::i;:::-;12703:23;;:7;:5;:7::i;:::-;:23;;;12695:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13199:21:::1;13217:1;13199:9;:21::i;:::-;13134:94::o:0;46519:266::-;12714:12;:10;:12::i;:::-;12703:23;;:7;:5;:7::i;:::-;:23;;;12695:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46619:1:::1;46597:18;;:23;46589:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;46696:1;46679:13;;:18;46671:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;46765:12;46744:18;:33;;;;46519:266::o:0;42697:32::-;;;;:::o;12483:87::-;12529:7;12556:6;;;;;;;;;;;12549:13;;12483:87;:::o;24091:104::-;24147:13;24180:7;24173:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24091:104;:::o;42773:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;25774:295::-;25889:12;:10;:12::i;:::-;25877:24;;:8;:24;;;;25869:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;25989:8;25944:18;:32;25963:12;:10;:12::i;:::-;25944:32;;;;;;;;;;;;;;;:42;25977:8;25944:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;26042:8;26013:48;;26028:12;:10;:12::i;:::-;26013:48;;;26052:8;26013:48;;;;;;:::i;:::-;;;;;;;;25774:295;;:::o;42506:23::-;;;;:::o;27037:328::-;27212:41;27231:12;:10;:12::i;:::-;27245:7;27212:18;:41::i;:::-;27204:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;27318:39;27332:4;27338:2;27342:7;27351:5;27318:13;:39::i;:::-;27037:328;;;;:::o;44370:498::-;44435:12;;;;;;;;;;;44427:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;44521:8;;44505:13;:11;:13::i;:::-;:24;44497:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;44608:8;;44594:11;:22;44586:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;44706:10;44677:39;;:4;;;;;;;;;;;:12;;;44690:11;44677:25;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:39;;;44669:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;44789:34;44799:10;44811:11;44789:9;:34::i;:::-;44834:26;:24;:26::i;:::-;44370:498;:::o;24266:334::-;24339:13;24373:16;24381:7;24373;:16::i;:::-;24365:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;24454:21;24478:10;:8;:10::i;:::-;24454:34;;24530:1;24512:7;24506:21;:25;:86;;;;;;;;;;;;;;;;;24558:7;24567:18;:7;:16;:18::i;:::-;24541:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;24506:86;24499:93;;;24266:334;;;:::o;42622:28::-;;;;:::o;42657:33::-;;;;:::o;26140:164::-;26237:4;26261:18;:25;26280:5;26261:25;;;;;;;;;;;;;;;:35;26287:8;26261:35;;;;;;;;;;;;;;;;;;;;;;;;;26254:42;;26140:164;;;;:::o;45791:720::-;45862:1;45845:13;;:18;45837:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;45938:1;45916:18;;:23;;45908:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46014:15;;45995;:34;;:63;;;;46050:8;;46033:13;:11;:13::i;:::-;:25;45995:63;45987:156;;;;;;;;;;;;:::i;:::-;;;;;;;;;46213:8;;46190:18;;46180:29;46172:38;;:49;;;;:::i;:::-;46156:13;:65;;;;46276:3;46254:18;;46239:12;:33;;;;:::i;:::-;46238:41;46234:137;;;46351:8;;46345:1;46330:12;:16;;;;:::i;:::-;46320:27;46312:36;;:47;;;;:::i;:::-;46296:13;:63;;;;46234:137;46441:1;46424:13;;:18;46420:84;;;46491:1;46475:13;;:17;;;;:::i;:::-;46459:13;:33;;;;46420:84;45791:720::o;42583:32::-;;;;;;;;;;;;;:::o;13383:192::-;12714:12;:10;:12::i;:::-;12703:23;;:7;:5;:7::i;:::-;:23;;;12695:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13492:1:::1;13472:22;;:8;:22;;;;13464:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;13548:19;13558:8;13548:9;:19::i;:::-;13383:192:::0;:::o;42736:30::-;;;;:::o;11330:98::-;11383:7;11410:10;11403:17;;11330:98;:::o;22977:305::-;23079:4;23131:25;23116:40;;;:11;:40;;;;:105;;;;23188:33;23173:48;;;:11;:48;;;;23116:105;:158;;;;23238:36;23262:11;23238:23;:36::i;:::-;23116:158;23096:178;;22977:305;;;:::o;28875:127::-;28940:4;28992:1;28964:30;;:7;:16;28972:7;28964:16;;;;;;;;;;;;;;;;;;;;;:30;;;;28957:37;;28875:127;;;:::o;32857:174::-;32959:2;32932:15;:24;32948:7;32932:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;33015:7;33011:2;32977:46;;32986:23;33001:7;32986:14;:23::i;:::-;32977:46;;;;;;;;;;;;32857:174;;:::o;29169:348::-;29262:4;29287:16;29295:7;29287;:16::i;:::-;29279:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29363:13;29379:23;29394:7;29379:14;:23::i;:::-;29363:39;;29432:5;29421:16;;:7;:16;;;:51;;;;29465:7;29441:31;;:20;29453:7;29441:11;:20::i;:::-;:31;;;29421:51;:87;;;;29476:32;29493:5;29500:7;29476:16;:32::i;:::-;29421:87;29413:96;;;29169:348;;;;:::o;32161:578::-;32320:4;32293:31;;:23;32308:7;32293:14;:23::i;:::-;:31;;;32285:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;32403:1;32389:16;;:2;:16;;;;32381:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;32459:39;32480:4;32486:2;32490:7;32459:20;:39::i;:::-;32563:29;32580:1;32584:7;32563:8;:29::i;:::-;32624:1;32605:9;:15;32615:4;32605:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;32653:1;32636:9;:13;32646:2;32636:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32684:2;32665:7;:16;32673:7;32665:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32723:7;32719:2;32704:27;;32713:4;32704:27;;;;;;;;;;;;32161:578;;;:::o;29859:110::-;29935:26;29945:2;29949:7;29935:26;;;;;;;;;;;;:9;:26::i;:::-;29859:110;;:::o;44139:223::-;44221:1;44199:18;;:23;:94;;;;;44244:8;;44227:13;:11;:13::i;:::-;:25;:65;;;;44275:17;;44256:15;:36;;44227:65;44199:94;44194:161;;;44331:12;44310:18;:33;;;;44194:161;44139:223::o;13583:173::-;13639:16;13658:6;;;;;;;;;;;13639:25;;13684:8;13675:6;;:17;;;;;;;;;;;;;;;;;;13739:8;13708:40;;13729:8;13708:40;;;;;;;;;;;;13583:173;;:::o;28247:315::-;28404:28;28414:4;28420:2;28424:7;28404:9;:28::i;:::-;28451:48;28474:4;28480:2;28484:7;28493:5;28451:22;:48::i;:::-;28443:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;28247:315;;;;:::o;43838:100::-;43890:13;43923:7;43916:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43838:100;:::o;1179:723::-;1235:13;1465:1;1456:5;:10;1452:53;;;1483:10;;;;;;;;;;;;;;;;;;;;;1452:53;1515:12;1530:5;1515:20;;1546:14;1571:78;1586:1;1578:4;:9;1571:78;;1604:8;;;;;:::i;:::-;;;;1635:2;1627:10;;;;;:::i;:::-;;;1571:78;;;1659:19;1691:6;1681:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1659:39;;1709:154;1725:1;1716:5;:10;1709:154;;1753:1;1743:11;;;;;:::i;:::-;;;1820:2;1812:5;:10;;;;:::i;:::-;1799:2;:24;;;;:::i;:::-;1786:39;;1769:6;1776;1769:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;1849:2;1840:11;;;;;:::i;:::-;;;1709:154;;;1887:6;1873:21;;;;;1179:723;;;;:::o;21557:157::-;21642:4;21681:25;21666:40;;;:11;:40;;;;21659:47;;21557:157;;;:::o;37621:589::-;37765:45;37792:4;37798:2;37802:7;37765:26;:45::i;:::-;37843:1;37827:18;;:4;:18;;;37823:187;;;37862:40;37894:7;37862:31;:40::i;:::-;37823:187;;;37932:2;37924:10;;:4;:10;;;37920:90;;37951:47;37984:4;37990:7;37951:32;:47::i;:::-;37920:90;37823:187;38038:1;38024:16;;:2;:16;;;38020:183;;;38057:45;38094:7;38057:36;:45::i;:::-;38020:183;;;38130:4;38124:10;;:2;:10;;;38120:83;;38151:40;38179:2;38183:7;38151:27;:40::i;:::-;38120:83;38020:183;37621:589;;;:::o;30196:321::-;30326:18;30332:2;30336:7;30326:5;:18::i;:::-;30377:54;30408:1;30412:2;30416:7;30425:5;30377:22;:54::i;:::-;30355:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;30196:321;;;:::o;33596:803::-;33751:4;33772:15;:2;:13;;;:15::i;:::-;33768:624;;;33824:2;33808:36;;;33845:12;:10;:12::i;:::-;33859:4;33865:7;33874:5;33808:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;33804:533;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34071:1;34054:6;:13;:18;34050:272;;;34097:60;;;;;;;;;;:::i;:::-;;;;;;;;34050:272;34272:6;34266:13;34257:6;34253:2;34249:15;34242:38;33804:533;33941:45;;;33931:55;;;:6;:55;;;;33924:62;;;;;33768:624;34376:4;34369:11;;33596:803;;;;;;;:::o;34971:126::-;;;;:::o;38933:164::-;39037:10;:17;;;;39010:15;:24;39026:7;39010:24;;;;;;;;;;;:44;;;;39065:10;39081:7;39065:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38933:164;:::o;39724:988::-;39990:22;40040:1;40015:22;40032:4;40015:16;:22::i;:::-;:26;;;;:::i;:::-;39990:51;;40052:18;40073:17;:26;40091:7;40073:26;;;;;;;;;;;;40052:47;;40220:14;40206:10;:28;40202:328;;40251:19;40273:12;:18;40286:4;40273:18;;;;;;;;;;;;;;;:34;40292:14;40273:34;;;;;;;;;;;;40251:56;;40357:11;40324:12;:18;40337:4;40324:18;;;;;;;;;;;;;;;:30;40343:10;40324:30;;;;;;;;;;;:44;;;;40474:10;40441:17;:30;40459:11;40441:30;;;;;;;;;;;:43;;;;40202:328;;40626:17;:26;40644:7;40626:26;;;;;;;;;;;40619:33;;;40670:12;:18;40683:4;40670:18;;;;;;;;;;;;;;;:34;40689:14;40670:34;;;;;;;;;;;40663:41;;;39724:988;;;;:::o;41007:1079::-;41260:22;41305:1;41285:10;:17;;;;:21;;;;:::i;:::-;41260:46;;41317:18;41338:15;:24;41354:7;41338:24;;;;;;;;;;;;41317:45;;41689:19;41711:10;41722:14;41711:26;;;;;;;;;;;;;;;;;;;;;;;;41689:48;;41775:11;41750:10;41761;41750:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;41886:10;41855:15;:28;41871:11;41855:28;;;;;;;;;;;:41;;;;42027:15;:24;42043:7;42027:24;;;;;;;;;;;42020:31;;;42062:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41007:1079;;;;:::o;38511:221::-;38596:14;38613:20;38630:2;38613:16;:20::i;:::-;38596:37;;38671:7;38644:12;:16;38657:2;38644:16;;;;;;;;;;;;;;;:24;38661:6;38644:24;;;;;;;;;;;:34;;;;38718:6;38689:17;:26;38707:7;38689:26;;;;;;;;;;;:35;;;;38511:221;;;:::o;30853:382::-;30947:1;30933:16;;:2;:16;;;;30925:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;31006:16;31014:7;31006;:16::i;:::-;31005:17;30997:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;31068:45;31097:1;31101:2;31105:7;31068:20;:45::i;:::-;31143:1;31126:9;:13;31136:2;31126:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31174:2;31155:7;:16;31163:7;31155:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31219:7;31215:2;31194:33;;31211:1;31194:33;;;;;;;;;;;;30853:382;;:::o;3648:387::-;3708:4;3916:12;3983:7;3971:20;3963:28;;4026:1;4019:4;:8;4012:15;;;3648:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:622:1:-;;145:80;160:64;217:6;160:64;:::i;:::-;145:80;:::i;:::-;136:89;;245:5;273:6;266:5;259:21;299:4;292:5;288:16;281:23;;324:6;374:3;366:4;358:6;354:17;349:3;345:27;342:36;339:2;;;391:1;388;381:12;339:2;419:1;404:236;429:6;426:1;423:13;404:236;;;496:3;524:37;557:3;545:10;524:37;:::i;:::-;519:3;512:50;591:4;586:3;582:14;575:21;;625:4;620:3;616:14;609:21;;464:176;451:1;448;444:9;439:14;;404:236;;;408:14;126:520;;;;;;;:::o;652:342::-;;754:64;769:48;810:6;769:48;:::i;:::-;754:64;:::i;:::-;745:73;;841:6;834:5;827:21;879:4;872:5;868:16;917:3;908:6;903:3;899:16;896:25;893:2;;;934:1;931;924:12;893:2;947:41;981:6;976:3;971;947:41;:::i;:::-;735:259;;;;;;:::o;1000:344::-;;1103:65;1118:49;1160:6;1118:49;:::i;:::-;1103:65;:::i;:::-;1094:74;;1191:6;1184:5;1177:21;1229:4;1222:5;1218:16;1267:3;1258:6;1253:3;1249:16;1246:25;1243:2;;;1284:1;1281;1274:12;1243:2;1297:41;1331:6;1326:3;1321;1297:41;:::i;:::-;1084:260;;;;;;:::o;1350:139::-;;1434:6;1421:20;1412:29;;1450:33;1477:5;1450:33;:::i;:::-;1402:87;;;;:::o;1495:143::-;;1583:6;1577:13;1568:22;;1599:33;1626:5;1599:33;:::i;:::-;1558:80;;;;:::o;1661:303::-;;1781:3;1774:4;1766:6;1762:17;1758:27;1748:2;;1799:1;1796;1789:12;1748:2;1839:6;1826:20;1864:94;1954:3;1946:6;1939:4;1931:6;1927:17;1864:94;:::i;:::-;1855:103;;1738:226;;;;;:::o;1970:133::-;;2051:6;2038:20;2029:29;;2067:30;2091:5;2067:30;:::i;:::-;2019:84;;;;:::o;2109:137::-;;2192:6;2179:20;2170:29;;2208:32;2234:5;2208:32;:::i;:::-;2160:86;;;;:::o;2252:141::-;;2339:6;2333:13;2324:22;;2355:32;2381:5;2355:32;:::i;:::-;2314:79;;;;:::o;2412:271::-;;2516:3;2509:4;2501:6;2497:17;2493:27;2483:2;;2534:1;2531;2524:12;2483:2;2574:6;2561:20;2599:78;2673:3;2665:6;2658:4;2650:6;2646:17;2599:78;:::i;:::-;2590:87;;2473:210;;;;;:::o;2703:273::-;;2808:3;2801:4;2793:6;2789:17;2785:27;2775:2;;2826:1;2823;2816:12;2775:2;2866:6;2853:20;2891:79;2966:3;2958:6;2951:4;2943:6;2939:17;2891:79;:::i;:::-;2882:88;;2765:211;;;;;:::o;2982:139::-;;3066:6;3053:20;3044:29;;3082:33;3109:5;3082:33;:::i;:::-;3034:87;;;;:::o;3127:143::-;;3215:6;3209:13;3200:22;;3231:33;3258:5;3231:33;:::i;:::-;3190:80;;;;:::o;3276:262::-;;3384:2;3372:9;3363:7;3359:23;3355:32;3352:2;;;3400:1;3397;3390:12;3352:2;3443:1;3468:53;3513:7;3504:6;3493:9;3489:22;3468:53;:::i;:::-;3458:63;;3414:117;3342:196;;;;:::o;3544:284::-;;3663:2;3651:9;3642:7;3638:23;3634:32;3631:2;;;3679:1;3676;3669:12;3631:2;3722:1;3747:64;3803:7;3794:6;3783:9;3779:22;3747:64;:::i;:::-;3737:74;;3693:128;3621:207;;;;:::o;3834:407::-;;;3959:2;3947:9;3938:7;3934:23;3930:32;3927:2;;;3975:1;3972;3965:12;3927:2;4018:1;4043:53;4088:7;4079:6;4068:9;4064:22;4043:53;:::i;:::-;4033:63;;3989:117;4145:2;4171:53;4216:7;4207:6;4196:9;4192:22;4171:53;:::i;:::-;4161:63;;4116:118;3917:324;;;;;:::o;4247:552::-;;;;4389:2;4377:9;4368:7;4364:23;4360:32;4357:2;;;4405:1;4402;4395:12;4357:2;4448:1;4473:53;4518:7;4509:6;4498:9;4494:22;4473:53;:::i;:::-;4463:63;;4419:117;4575:2;4601:53;4646:7;4637:6;4626:9;4622:22;4601:53;:::i;:::-;4591:63;;4546:118;4703:2;4729:53;4774:7;4765:6;4754:9;4750:22;4729:53;:::i;:::-;4719:63;;4674:118;4347:452;;;;;:::o;4805:809::-;;;;;4973:3;4961:9;4952:7;4948:23;4944:33;4941:2;;;4990:1;4987;4980:12;4941:2;5033:1;5058:53;5103:7;5094:6;5083:9;5079:22;5058:53;:::i;:::-;5048:63;;5004:117;5160:2;5186:53;5231:7;5222:6;5211:9;5207:22;5186:53;:::i;:::-;5176:63;;5131:118;5288:2;5314:53;5359:7;5350:6;5339:9;5335:22;5314:53;:::i;:::-;5304:63;;5259:118;5444:2;5433:9;5429:18;5416:32;5475:18;5467:6;5464:30;5461:2;;;5507:1;5504;5497:12;5461:2;5535:62;5589:7;5580:6;5569:9;5565:22;5535:62;:::i;:::-;5525:72;;5387:220;4931:683;;;;;;;:::o;5620:401::-;;;5742:2;5730:9;5721:7;5717:23;5713:32;5710:2;;;5758:1;5755;5748:12;5710:2;5801:1;5826:53;5871:7;5862:6;5851:9;5847:22;5826:53;:::i;:::-;5816:63;;5772:117;5928:2;5954:50;5996:7;5987:6;5976:9;5972:22;5954:50;:::i;:::-;5944:60;;5899:115;5700:321;;;;;:::o;6027:407::-;;;6152:2;6140:9;6131:7;6127:23;6123:32;6120:2;;;6168:1;6165;6158:12;6120:2;6211:1;6236:53;6281:7;6272:6;6261:9;6257:22;6236:53;:::i;:::-;6226:63;;6182:117;6338:2;6364:53;6409:7;6400:6;6389:9;6385:22;6364:53;:::i;:::-;6354:63;;6309:118;6110:324;;;;;:::o;6440:405::-;;6573:2;6561:9;6552:7;6548:23;6544:32;6541:2;;;6589:1;6586;6579:12;6541:2;6660:1;6649:9;6645:17;6632:31;6690:18;6682:6;6679:30;6676:2;;;6722:1;6719;6712:12;6676:2;6750:78;6820:7;6811:6;6800:9;6796:22;6750:78;:::i;:::-;6740:88;;6603:235;6531:314;;;;:::o;6851:260::-;;6958:2;6946:9;6937:7;6933:23;6929:32;6926:2;;;6974:1;6971;6964:12;6926:2;7017:1;7042:52;7086:7;7077:6;7066:9;7062:22;7042:52;:::i;:::-;7032:62;;6988:116;6916:195;;;;:::o;7117:282::-;;7235:2;7223:9;7214:7;7210:23;7206:32;7203:2;;;7251:1;7248;7241:12;7203:2;7294:1;7319:63;7374:7;7365:6;7354:9;7350:22;7319:63;:::i;:::-;7309:73;;7265:127;7193:206;;;;:::o;7405:375::-;;7523:2;7511:9;7502:7;7498:23;7494:32;7491:2;;;7539:1;7536;7529:12;7491:2;7610:1;7599:9;7595:17;7582:31;7640:18;7632:6;7629:30;7626:2;;;7672:1;7669;7662:12;7626:2;7700:63;7755:7;7746:6;7735:9;7731:22;7700:63;:::i;:::-;7690:73;;7553:220;7481:299;;;;:::o;7786:262::-;;7894:2;7882:9;7873:7;7869:23;7865:32;7862:2;;;7910:1;7907;7900:12;7862:2;7953:1;7978:53;8023:7;8014:6;8003:9;7999:22;7978:53;:::i;:::-;7968:63;;7924:117;7852:196;;;;:::o;8054:284::-;;8173:2;8161:9;8152:7;8148:23;8144:32;8141:2;;;8189:1;8186;8179:12;8141:2;8232:1;8257:64;8313:7;8304:6;8293:9;8289:22;8257:64;:::i;:::-;8247:74;;8203:128;8131:207;;;;:::o;8344:118::-;8431:24;8449:5;8431:24;:::i;:::-;8426:3;8419:37;8409:53;;:::o;8468:109::-;8549:21;8564:5;8549:21;:::i;:::-;8544:3;8537:34;8527:50;;:::o;8583:360::-;;8697:38;8729:5;8697:38;:::i;:::-;8751:70;8814:6;8809:3;8751:70;:::i;:::-;8744:77;;8830:52;8875:6;8870:3;8863:4;8856:5;8852:16;8830:52;:::i;:::-;8907:29;8929:6;8907:29;:::i;:::-;8902:3;8898:39;8891:46;;8673:270;;;;;:::o;8949:364::-;;9065:39;9098:5;9065:39;:::i;:::-;9120:71;9184:6;9179:3;9120:71;:::i;:::-;9113:78;;9200:52;9245:6;9240:3;9233:4;9226:5;9222:16;9200:52;:::i;:::-;9277:29;9299:6;9277:29;:::i;:::-;9272:3;9268:39;9261:46;;9041:272;;;;;:::o;9319:377::-;;9453:39;9486:5;9453:39;:::i;:::-;9508:89;9590:6;9585:3;9508:89;:::i;:::-;9501:96;;9606:52;9651:6;9646:3;9639:4;9632:5;9628:16;9606:52;:::i;:::-;9683:6;9678:3;9674:16;9667:23;;9429:267;;;;;:::o;9702:375::-;;9865:67;9929:2;9924:3;9865:67;:::i;:::-;9858:74;;9962:34;9958:1;9953:3;9949:11;9942:55;10028:13;10023:2;10018:3;10014:12;10007:35;10068:2;10063:3;10059:12;10052:19;;9848:229;;;:::o;10083:382::-;;10246:67;10310:2;10305:3;10246:67;:::i;:::-;10239:74;;10343:34;10339:1;10334:3;10330:11;10323:55;10409:20;10404:2;10399:3;10395:12;10388:42;10456:2;10451:3;10447:12;10440:19;;10229:236;;;:::o;10471:370::-;;10634:67;10698:2;10693:3;10634:67;:::i;:::-;10627:74;;10731:34;10727:1;10722:3;10718:11;10711:55;10797:8;10792:2;10787:3;10783:12;10776:30;10832:2;10827:3;10823:12;10816:19;;10617:224;;;:::o;10847:326::-;;11010:67;11074:2;11069:3;11010:67;:::i;:::-;11003:74;;11107:30;11103:1;11098:3;11094:11;11087:51;11164:2;11159:3;11155:12;11148:19;;10993:180;;;:::o;11179:374::-;;11342:67;11406:2;11401:3;11342:67;:::i;:::-;11335:74;;11439:34;11435:1;11430:3;11426:11;11419:55;11505:12;11500:2;11495:3;11491:12;11484:34;11544:2;11539:3;11535:12;11528:19;;11325:228;;;:::o;11559:441::-;;11722:67;11786:2;11781:3;11722:67;:::i;:::-;11715:74;;11819:34;11815:1;11810:3;11806:11;11799:55;11885:34;11880:2;11875:3;11871:12;11864:56;11951:13;11946:2;11941:3;11937:12;11930:35;11991:2;11986:3;11982:12;11975:19;;11705:295;;;:::o;12006:368::-;;12169:67;12233:2;12228:3;12169:67;:::i;:::-;12162:74;;12266:34;12262:1;12257:3;12253:11;12246:55;12332:6;12327:2;12322:3;12318:12;12311:28;12365:2;12360:3;12356:12;12349:19;;12152:222;;;:::o;12380:323::-;;12543:67;12607:2;12602:3;12543:67;:::i;:::-;12536:74;;12640:27;12636:1;12631:3;12627:11;12620:48;12694:2;12689:3;12685:12;12678:19;;12526:177;;;:::o;12709:389::-;;12872:67;12936:2;12931:3;12872:67;:::i;:::-;12865:74;;12969:34;12965:1;12960:3;12956:11;12949:55;13035:27;13030:2;13025:3;13021:12;13014:49;13089:2;13084:3;13080:12;13073:19;;12855:243;;;:::o;13104:376::-;;13267:67;13331:2;13326:3;13267:67;:::i;:::-;13260:74;;13364:34;13360:1;13355:3;13351:11;13344:55;13430:14;13425:2;13420:3;13416:12;13409:36;13471:2;13466:3;13462:12;13455:19;;13250:230;;;:::o;13486:327::-;;13649:67;13713:2;13708:3;13649:67;:::i;:::-;13642:74;;13746:31;13742:1;13737:3;13733:11;13726:52;13804:2;13799:3;13795:12;13788:19;;13632:181;;;:::o;13819:369::-;;13982:67;14046:2;14041:3;13982:67;:::i;:::-;13975:74;;14079:34;14075:1;14070:3;14066:11;14059:55;14145:7;14140:2;14135:3;14131:12;14124:29;14179:2;14174:3;14170:12;14163:19;;13965:223;;;:::o;14194:388::-;;14357:67;14421:2;14416:3;14357:67;:::i;:::-;14350:74;;14454:34;14450:1;14445:3;14441:11;14434:55;14520:26;14515:2;14510:3;14506:12;14499:48;14573:2;14568:3;14564:12;14557:19;;14340:242;;;:::o;14588:374::-;;14751:67;14815:2;14810:3;14751:67;:::i;:::-;14744:74;;14848:34;14844:1;14839:3;14835:11;14828:55;14914:12;14909:2;14904:3;14900:12;14893:34;14953:2;14948:3;14944:12;14937:19;;14734:228;;;:::o;14968:373::-;;15131:67;15195:2;15190:3;15131:67;:::i;:::-;15124:74;;15228:34;15224:1;15219:3;15215:11;15208:55;15294:11;15289:2;15284:3;15280:12;15273:33;15332:2;15327:3;15323:12;15316:19;;15114:227;;;:::o;15347:387::-;;15510:67;15574:2;15569:3;15510:67;:::i;:::-;15503:74;;15607:34;15603:1;15598:3;15594:11;15587:55;15673:25;15668:2;15663:3;15659:12;15652:47;15725:2;15720:3;15716:12;15709:19;;15493:241;;;:::o;15740:330::-;;15903:67;15967:2;15962:3;15903:67;:::i;:::-;15896:74;;16000:34;15996:1;15991:3;15987:11;15980:55;16061:2;16056:3;16052:12;16045:19;;15886:184;;;:::o;16076:366::-;;16239:67;16303:2;16298:3;16239:67;:::i;:::-;16232:74;;16336:34;16332:1;16327:3;16323:11;16316:55;16402:4;16397:2;16392:3;16388:12;16381:26;16433:2;16428:3;16424:12;16417:19;;16222:220;;;:::o;16448:376::-;;16611:67;16675:2;16670:3;16611:67;:::i;:::-;16604:74;;16708:34;16704:1;16699:3;16695:11;16688:55;16774:14;16769:2;16764:3;16760:12;16753:36;16815:2;16810:3;16806:12;16799:19;;16594:230;;;:::o;16830:330::-;;16993:67;17057:2;17052:3;16993:67;:::i;:::-;16986:74;;17090:34;17086:1;17081:3;17077:11;17070:55;17151:2;17146:3;17142:12;17135:19;;16976:184;;;:::o;17166:367::-;;17329:67;17393:2;17388:3;17329:67;:::i;:::-;17322:74;;17426:34;17422:1;17417:3;17413:11;17406:55;17492:5;17487:2;17482:3;17478:12;17471:27;17524:2;17519:3;17515:12;17508:19;;17312:221;;;:::o;17539:373::-;;17702:67;17766:2;17761:3;17702:67;:::i;:::-;17695:74;;17799:34;17795:1;17790:3;17786:11;17779:55;17865:11;17860:2;17855:3;17851:12;17844:33;17903:2;17898:3;17894:12;17887:19;;17685:227;;;:::o;17918:379::-;;18081:67;18145:2;18140:3;18081:67;:::i;:::-;18074:74;;18178:34;18174:1;18169:3;18165:11;18158:55;18244:17;18239:2;18234:3;18230:12;18223:39;18288:2;18283:3;18279:12;18272:19;;18064:233;;;:::o;18303:365::-;;18466:67;18530:2;18525:3;18466:67;:::i;:::-;18459:74;;18563:34;18559:1;18554:3;18550:11;18543:55;18629:3;18624:2;18619:3;18615:12;18608:25;18659:2;18654:3;18650:12;18643:19;;18449:219;;;:::o;18674:365::-;;18837:67;18901:2;18896:3;18837:67;:::i;:::-;18830:74;;18934:34;18930:1;18925:3;18921:11;18914:55;19000:3;18995:2;18990:3;18986:12;18979:25;19030:2;19025:3;19021:12;19014:19;;18820:219;;;:::o;19045:330::-;;19208:67;19272:2;19267:3;19208:67;:::i;:::-;19201:74;;19305:34;19301:1;19296:3;19292:11;19285:55;19366:2;19361:3;19357:12;19350:19;;19191:184;;;:::o;19381:381::-;;19544:67;19608:2;19603:3;19544:67;:::i;:::-;19537:74;;19641:34;19637:1;19632:3;19628:11;19621:55;19707:19;19702:2;19697:3;19693:12;19686:41;19753:2;19748:3;19744:12;19737:19;;19527:235;;;:::o;19768:376::-;;19931:67;19995:2;19990:3;19931:67;:::i;:::-;19924:74;;20028:34;20024:1;20019:3;20015:11;20008:55;20094:14;20089:2;20084:3;20080:12;20073:36;20135:2;20130:3;20126:12;20119:19;;19914:230;;;:::o;20150:373::-;;20313:67;20377:2;20372:3;20313:67;:::i;:::-;20306:74;;20410:34;20406:1;20401:3;20397:11;20390:55;20476:11;20471:2;20466:3;20462:12;20455:33;20514:2;20509:3;20505:12;20498:19;;20296:227;;;:::o;20529:366::-;;20692:67;20756:2;20751:3;20692:67;:::i;:::-;20685:74;;20789:34;20785:1;20780:3;20776:11;20769:55;20855:4;20850:2;20845:3;20841:12;20834:26;20886:2;20881:3;20877:12;20870:19;;20675:220;;;:::o;20901:118::-;20988:24;21006:5;20988:24;:::i;:::-;20983:3;20976:37;20966:53;;:::o;21025:435::-;;21227:95;21318:3;21309:6;21227:95;:::i;:::-;21220:102;;21339:95;21430:3;21421:6;21339:95;:::i;:::-;21332:102;;21451:3;21444:10;;21209:251;;;;;:::o;21466:222::-;;21597:2;21586:9;21582:18;21574:26;;21610:71;21678:1;21667:9;21663:17;21654:6;21610:71;:::i;:::-;21564:124;;;;:::o;21694:640::-;;21927:3;21916:9;21912:19;21904:27;;21941:71;22009:1;21998:9;21994:17;21985:6;21941:71;:::i;:::-;22022:72;22090:2;22079:9;22075:18;22066:6;22022:72;:::i;:::-;22104;22172:2;22161:9;22157:18;22148:6;22104:72;:::i;:::-;22223:9;22217:4;22213:20;22208:2;22197:9;22193:18;22186:48;22251:76;22322:4;22313:6;22251:76;:::i;:::-;22243:84;;21894:440;;;;;;;:::o;22340:210::-;;22465:2;22454:9;22450:18;22442:26;;22478:65;22540:1;22529:9;22525:17;22516:6;22478:65;:::i;:::-;22432:118;;;;:::o;22556:313::-;;22707:2;22696:9;22692:18;22684:26;;22756:9;22750:4;22746:20;22742:1;22731:9;22727:17;22720:47;22784:78;22857:4;22848:6;22784:78;:::i;:::-;22776:86;;22674:195;;;;:::o;22875:419::-;;23079:2;23068:9;23064:18;23056:26;;23128:9;23122:4;23118:20;23114:1;23103:9;23099:17;23092:47;23156:131;23282:4;23156:131;:::i;:::-;23148:139;;23046:248;;;:::o;23300:419::-;;23504:2;23493:9;23489:18;23481:26;;23553:9;23547:4;23543:20;23539:1;23528:9;23524:17;23517:47;23581:131;23707:4;23581:131;:::i;:::-;23573:139;;23471:248;;;:::o;23725:419::-;;23929:2;23918:9;23914:18;23906:26;;23978:9;23972:4;23968:20;23964:1;23953:9;23949:17;23942:47;24006:131;24132:4;24006:131;:::i;:::-;23998:139;;23896:248;;;:::o;24150:419::-;;24354:2;24343:9;24339:18;24331:26;;24403:9;24397:4;24393:20;24389:1;24378:9;24374:17;24367:47;24431:131;24557:4;24431:131;:::i;:::-;24423:139;;24321:248;;;:::o;24575:419::-;;24779:2;24768:9;24764:18;24756:26;;24828:9;24822:4;24818:20;24814:1;24803:9;24799:17;24792:47;24856:131;24982:4;24856:131;:::i;:::-;24848:139;;24746:248;;;:::o;25000:419::-;;25204:2;25193:9;25189:18;25181:26;;25253:9;25247:4;25243:20;25239:1;25228:9;25224:17;25217:47;25281:131;25407:4;25281:131;:::i;:::-;25273:139;;25171:248;;;:::o;25425:419::-;;25629:2;25618:9;25614:18;25606:26;;25678:9;25672:4;25668:20;25664:1;25653:9;25649:17;25642:47;25706:131;25832:4;25706:131;:::i;:::-;25698:139;;25596:248;;;:::o;25850:419::-;;26054:2;26043:9;26039:18;26031:26;;26103:9;26097:4;26093:20;26089:1;26078:9;26074:17;26067:47;26131:131;26257:4;26131:131;:::i;:::-;26123:139;;26021:248;;;:::o;26275:419::-;;26479:2;26468:9;26464:18;26456:26;;26528:9;26522:4;26518:20;26514:1;26503:9;26499:17;26492:47;26556:131;26682:4;26556:131;:::i;:::-;26548:139;;26446:248;;;:::o;26700:419::-;;26904:2;26893:9;26889:18;26881:26;;26953:9;26947:4;26943:20;26939:1;26928:9;26924:17;26917:47;26981:131;27107:4;26981:131;:::i;:::-;26973:139;;26871:248;;;:::o;27125:419::-;;27329:2;27318:9;27314:18;27306:26;;27378:9;27372:4;27368:20;27364:1;27353:9;27349:17;27342:47;27406:131;27532:4;27406:131;:::i;:::-;27398:139;;27296:248;;;:::o;27550:419::-;;27754:2;27743:9;27739:18;27731:26;;27803:9;27797:4;27793:20;27789:1;27778:9;27774:17;27767:47;27831:131;27957:4;27831:131;:::i;:::-;27823:139;;27721:248;;;:::o;27975:419::-;;28179:2;28168:9;28164:18;28156:26;;28228:9;28222:4;28218:20;28214:1;28203:9;28199:17;28192:47;28256:131;28382:4;28256:131;:::i;:::-;28248:139;;28146:248;;;:::o;28400:419::-;;28604:2;28593:9;28589:18;28581:26;;28653:9;28647:4;28643:20;28639:1;28628:9;28624:17;28617:47;28681:131;28807:4;28681:131;:::i;:::-;28673:139;;28571:248;;;:::o;28825:419::-;;29029:2;29018:9;29014:18;29006:26;;29078:9;29072:4;29068:20;29064:1;29053:9;29049:17;29042:47;29106:131;29232:4;29106:131;:::i;:::-;29098:139;;28996:248;;;:::o;29250:419::-;;29454:2;29443:9;29439:18;29431:26;;29503:9;29497:4;29493:20;29489:1;29478:9;29474:17;29467:47;29531:131;29657:4;29531:131;:::i;:::-;29523:139;;29421:248;;;:::o;29675:419::-;;29879:2;29868:9;29864:18;29856:26;;29928:9;29922:4;29918:20;29914:1;29903:9;29899:17;29892:47;29956:131;30082:4;29956:131;:::i;:::-;29948:139;;29846:248;;;:::o;30100:419::-;;30304:2;30293:9;30289:18;30281:26;;30353:9;30347:4;30343:20;30339:1;30328:9;30324:17;30317:47;30381:131;30507:4;30381:131;:::i;:::-;30373:139;;30271:248;;;:::o;30525:419::-;;30729:2;30718:9;30714:18;30706:26;;30778:9;30772:4;30768:20;30764:1;30753:9;30749:17;30742:47;30806:131;30932:4;30806:131;:::i;:::-;30798:139;;30696:248;;;:::o;30950:419::-;;31154:2;31143:9;31139:18;31131:26;;31203:9;31197:4;31193:20;31189:1;31178:9;31174:17;31167:47;31231:131;31357:4;31231:131;:::i;:::-;31223:139;;31121:248;;;:::o;31375:419::-;;31579:2;31568:9;31564:18;31556:26;;31628:9;31622:4;31618:20;31614:1;31603:9;31599:17;31592:47;31656:131;31782:4;31656:131;:::i;:::-;31648:139;;31546:248;;;:::o;31800:419::-;;32004:2;31993:9;31989:18;31981:26;;32053:9;32047:4;32043:20;32039:1;32028:9;32024:17;32017:47;32081:131;32207:4;32081:131;:::i;:::-;32073:139;;31971:248;;;:::o;32225:419::-;;32429:2;32418:9;32414:18;32406:26;;32478:9;32472:4;32468:20;32464:1;32453:9;32449:17;32442:47;32506:131;32632:4;32506:131;:::i;:::-;32498:139;;32396:248;;;:::o;32650:419::-;;32854:2;32843:9;32839:18;32831:26;;32903:9;32897:4;32893:20;32889:1;32878:9;32874:17;32867:47;32931:131;33057:4;32931:131;:::i;:::-;32923:139;;32821:248;;;:::o;33075:419::-;;33279:2;33268:9;33264:18;33256:26;;33328:9;33322:4;33318:20;33314:1;33303:9;33299:17;33292:47;33356:131;33482:4;33356:131;:::i;:::-;33348:139;;33246:248;;;:::o;33500:419::-;;33704:2;33693:9;33689:18;33681:26;;33753:9;33747:4;33743:20;33739:1;33728:9;33724:17;33717:47;33781:131;33907:4;33781:131;:::i;:::-;33773:139;;33671:248;;;:::o;33925:419::-;;34129:2;34118:9;34114:18;34106:26;;34178:9;34172:4;34168:20;34164:1;34153:9;34149:17;34142:47;34206:131;34332:4;34206:131;:::i;:::-;34198:139;;34096:248;;;:::o;34350:419::-;;34554:2;34543:9;34539:18;34531:26;;34603:9;34597:4;34593:20;34589:1;34578:9;34574:17;34567:47;34631:131;34757:4;34631:131;:::i;:::-;34623:139;;34521:248;;;:::o;34775:419::-;;34979:2;34968:9;34964:18;34956:26;;35028:9;35022:4;35018:20;35014:1;35003:9;34999:17;34992:47;35056:131;35182:4;35056:131;:::i;:::-;35048:139;;34946:248;;;:::o;35200:419::-;;35404:2;35393:9;35389:18;35381:26;;35453:9;35447:4;35443:20;35439:1;35428:9;35424:17;35417:47;35481:131;35607:4;35481:131;:::i;:::-;35473:139;;35371:248;;;:::o;35625:222::-;;35756:2;35745:9;35741:18;35733:26;;35769:71;35837:1;35826:9;35822:17;35813:6;35769:71;:::i;:::-;35723:124;;;;:::o;35853:283::-;;35919:2;35913:9;35903:19;;35961:4;35953:6;35949:17;36068:6;36056:10;36053:22;36032:18;36020:10;36017:34;36014:62;36011:2;;;36079:18;;:::i;:::-;36011:2;36119:10;36115:2;36108:22;35893:243;;;;:::o;36142:311::-;;36309:18;36301:6;36298:30;36295:2;;;36331:18;;:::i;:::-;36295:2;36381:4;36373:6;36369:17;36361:25;;36441:4;36435;36431:15;36423:23;;36224:229;;;:::o;36459:331::-;;36610:18;36602:6;36599:30;36596:2;;;36632:18;;:::i;:::-;36596:2;36717:4;36713:9;36706:4;36698:6;36694:17;36690:33;36682:41;;36778:4;36772;36768:15;36760:23;;36525:265;;;:::o;36796:332::-;;36948:18;36940:6;36937:30;36934:2;;;36970:18;;:::i;:::-;36934:2;37055:4;37051:9;37044:4;37036:6;37032:17;37028:33;37020:41;;37116:4;37110;37106:15;37098:23;;36863:265;;;:::o;37134:98::-;;37219:5;37213:12;37203:22;;37192:40;;;:::o;37238:99::-;;37324:5;37318:12;37308:22;;37297:40;;;:::o;37343:168::-;;37460:6;37455:3;37448:19;37500:4;37495:3;37491:14;37476:29;;37438:73;;;;:::o;37517:169::-;;37635:6;37630:3;37623:19;37675:4;37670:3;37666:14;37651:29;;37613:73;;;;:::o;37692:148::-;;37831:3;37816:18;;37806:34;;;;:::o;37846:305::-;;37905:20;37923:1;37905:20;:::i;:::-;37900:25;;37939:20;37957:1;37939:20;:::i;:::-;37934:25;;38093:1;38025:66;38021:74;38018:1;38015:81;38012:2;;;38099:18;;:::i;:::-;38012:2;38143:1;38140;38136:9;38129:16;;37890:261;;;;:::o;38157:185::-;;38214:20;38232:1;38214:20;:::i;:::-;38209:25;;38248:20;38266:1;38248:20;:::i;:::-;38243:25;;38287:1;38277:2;;38292:18;;:::i;:::-;38277:2;38334:1;38331;38327:9;38322:14;;38199:143;;;;:::o;38348:191::-;;38408:20;38426:1;38408:20;:::i;:::-;38403:25;;38442:20;38460:1;38442:20;:::i;:::-;38437:25;;38481:1;38478;38475:8;38472:2;;;38486:18;;:::i;:::-;38472:2;38531:1;38528;38524:9;38516:17;;38393:146;;;;:::o;38545:96::-;;38611:24;38629:5;38611:24;:::i;:::-;38600:35;;38590:51;;;:::o;38647:90::-;;38724:5;38717:13;38710:21;38699:32;;38689:48;;;:::o;38743:149::-;;38819:66;38812:5;38808:78;38797:89;;38787:105;;;:::o;38898:126::-;;38975:42;38968:5;38964:54;38953:65;;38943:81;;;:::o;39030:77::-;;39096:5;39085:16;;39075:32;;;:::o;39113:154::-;39197:6;39192:3;39187;39174:30;39259:1;39250:6;39245:3;39241:16;39234:27;39164:103;;;:::o;39273:307::-;39341:1;39351:113;39365:6;39362:1;39359:13;39351:113;;;39450:1;39445:3;39441:11;39435:18;39431:1;39426:3;39422:11;39415:39;39387:2;39384:1;39380:10;39375:15;;39351:113;;;39482:6;39479:1;39476:13;39473:2;;;39562:1;39553:6;39548:3;39544:16;39537:27;39473:2;39322:258;;;;:::o;39586:320::-;;39667:1;39661:4;39657:12;39647:22;;39714:1;39708:4;39704:12;39735:18;39725:2;;39791:4;39783:6;39779:17;39769:27;;39725:2;39853;39845:6;39842:14;39822:18;39819:38;39816:2;;;39872:18;;:::i;:::-;39816:2;39637:269;;;;:::o;39912:233::-;;39974:24;39992:5;39974:24;:::i;:::-;39965:33;;40020:66;40013:5;40010:77;40007:2;;;40090:18;;:::i;:::-;40007:2;40137:1;40130:5;40126:13;40119:20;;39955:190;;;:::o;40151:176::-;;40200:20;40218:1;40200:20;:::i;:::-;40195:25;;40234:20;40252:1;40234:20;:::i;:::-;40229:25;;40273:1;40263:2;;40278:18;;:::i;:::-;40263:2;40319:1;40316;40312:9;40307:14;;40185:142;;;;:::o;40333:180::-;40381:77;40378:1;40371:88;40478:4;40475:1;40468:15;40502:4;40499:1;40492:15;40519:180;40567:77;40564:1;40557:88;40664:4;40661:1;40654:15;40688:4;40685:1;40678:15;40705:180;40753:77;40750:1;40743:88;40850:4;40847:1;40840:15;40874:4;40871:1;40864:15;40891:180;40939:77;40936:1;40929:88;41036:4;41033:1;41026:15;41060:4;41057:1;41050:15;41077:102;;41169:2;41165:7;41160:2;41153:5;41149:14;41145:28;41135:38;;41125:54;;;:::o;41185:122::-;41258:24;41276:5;41258:24;:::i;:::-;41251:5;41248:35;41238:2;;41297:1;41294;41287:12;41238:2;41228:79;:::o;41313:116::-;41383:21;41398:5;41383:21;:::i;:::-;41376:5;41373:32;41363:2;;41419:1;41416;41409:12;41363:2;41353:76;:::o;41435:120::-;41507:23;41524:5;41507:23;:::i;:::-;41500:5;41497:34;41487:2;;41545:1;41542;41535:12;41487:2;41477:78;:::o;41561:122::-;41634:24;41652:5;41634:24;:::i;:::-;41627:5;41624:35;41614:2;;41673:1;41670;41663:12;41614:2;41604:79;:::o

Swarm Source

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