ERC-721
NFT
Overview
Max Total Supply
0 PURE
Holders
198
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Filtered by Token Holder
EGGsperience by Karrie Ross: DeployerBalance
3 PURELoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Pure
Compiler Version
v0.8.1+commit.df193b15
Contract Source Code (Solidity Multiple files format)
//Contract based on https://docs.openzeppelin.com/contracts/3.x/erc721 // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./ERC721.sol"; import "./Counters.sol"; import "./Address.sol"; import "./Ownable.sol"; import "./SafeMath.sol"; import "./ECDSA.sol"; contract Pure is ERC721, Ownable { using Strings for uint256; using SafeMath for uint256; using Counters for Counters.Counter; Counters.Counter private _tokenIdTracker; mapping (uint256 => string) private _tokenURIs; address private constant KoalaMintDevAddress = 0xD17237307b93b104c50d6F83CF1e2dB99f7a348a; address private constant CreatorAddress = 0xdd8b6fB4c5fD3eF7a45B08aa64bDe01Ddc1b207E; address private constant SignerAddress = 0x4AeA7b69ABb482e34BDd1D8C7A6B8dcA44F65775; string private baseURIextended; uint256 private constant min_price = 0 ether; uint256 private constant feeCreator = 5; uint256 private maxSupply = 4085; event KoalaMintMinted(uint256 indexed tokenId, address owner, address to, string tokenURI); event KoalaMintTransfered(address to, uint value); constructor(string memory _baseURIextended) ERC721("PURE", "PURE"){ baseURIextended = _baseURIextended; } function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual { require(_exists(tokenId), "URI set of nonexistent token"); _tokenURIs[tokenId] = _tokenURI; } function revealCollection(string memory _baseURIextended) public onlyOwner { require(keccak256(bytes(baseURIextended)) != keccak256(bytes(_baseURIextended)), "Collection already revealed"); setBaseURI(_baseURIextended); } function setBaseURI(string memory _baseURIextended) private onlyOwner { baseURIextended = _baseURIextended; } function setMaxSupply(uint256 _maxSupply) public onlyOwner { maxSupply = _maxSupply; } function _baseURI() internal view virtual override returns (string memory) { return baseURIextended; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "URI query for nonexistent token"); string memory _tokenURI = _tokenURIs[tokenId]; string memory base = _baseURI(); return string(abi.encodePacked(base, _tokenURI)); } function signatureSignerMint(address _to, string memory _tokenURI, uint256 _timestamp, uint8 v, bytes32 r, bytes32 s) public view virtual returns (address){ return ECDSA.recover(keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", keccak256(abi.encode(_to, _tokenURI, _timestamp)))), v, r, s); } function mint(address _to, string[] memory _tokensURI, uint256 _timestamp, uint8 v, bytes32 r, bytes32 s) public payable { require(msg.value >= min_price.mul(_tokensURI.length), "Value below price"); require(maxSupply >= _tokenIdTracker.current() + _tokensURI.length, "SoldOut"); require(_tokensURI.length > 0, "Minimum count"); address signerMint = signatureSignerMint(_to, _tokensURI[0], _timestamp, v, r, s); require(signerMint == SignerAddress, "Not authorized to mint"); require(_timestamp >= block.timestamp - 300, "Out of time"); for (uint8 i = 0; i < _tokensURI.length; i++){ _mintAnElement(_to, _tokensURI[i]); } uint256 _total = msg.value; if (feeCreator > 0){ uint256 _feeCreator = _total.mul(feeCreator).div(100); _total = _total - _feeCreator; transfer(KoalaMintDevAddress, _feeCreator); } transfer(CreatorAddress, _total); } function _mintAnElement(address _to, string memory _tokenURI) private { uint256 _tokenId = _tokenIdTracker.current(); _tokenIdTracker.increment(); _tokenId = _tokenId + 1; _mint(_to, _tokenId); _setTokenURI(_tokenId, _tokenURI); emit KoalaMintMinted(_tokenId, CreatorAddress, _to, _tokenURI); } function transfer(address to, uint256 value) private { (bool success, ) = to.call{value: value}(""); require(success, "Transfer failed."); emit KoalaMintTransfered(to, value); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Counters.sol) pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (utils/cryptography/ECDSA.sol) pragma solidity ^0.8.0; import "./Strings.sol"; /** * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations. * * These functions can be used to verify that a message was signed by the holder * of the private keys of a given address. */ library ECDSA { enum RecoverError { NoError, InvalidSignature, InvalidSignatureLength, InvalidSignatureS, InvalidSignatureV } function _throwError(RecoverError error) private pure { if (error == RecoverError.NoError) { return; // no error: do nothing } else if (error == RecoverError.InvalidSignature) { revert("ECDSA: invalid signature"); } else if (error == RecoverError.InvalidSignatureLength) { revert("ECDSA: invalid signature length"); } else if (error == RecoverError.InvalidSignatureS) { revert("ECDSA: invalid signature 's' value"); } else if (error == RecoverError.InvalidSignatureV) { revert("ECDSA: invalid signature 'v' value"); } } /** * @dev Returns the address that signed a hashed message (`hash`) with * `signature` or error string. This address can then be used for verification purposes. * * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: * this function rejects them by requiring the `s` value to be in the lower * half order, and the `v` value to be either 27 or 28. * * IMPORTANT: `hash` _must_ be the result of a hash operation for the * verification to be secure: it is possible to craft signatures that * recover to arbitrary addresses for non-hashed data. A safe way to ensure * this is by receiving a hash of the original message (which may otherwise * be too long), and then calling {toEthSignedMessageHash} on it. * * Documentation for signature generation: * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js] * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers] * * _Available since v4.3._ */ function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) { // Check the signature length // - case 65: r,s,v signature (standard) // - case 64: r,vs signature (cf https://eips.ethereum.org/EIPS/eip-2098) _Available since v4.1._ if (signature.length == 65) { bytes32 r; bytes32 s; uint8 v; // ecrecover takes the signature parameters, and the only way to get them // currently is to use assembly. assembly { r := mload(add(signature, 0x20)) s := mload(add(signature, 0x40)) v := byte(0, mload(add(signature, 0x60))) } return tryRecover(hash, v, r, s); } else if (signature.length == 64) { bytes32 r; bytes32 vs; // ecrecover takes the signature parameters, and the only way to get them // currently is to use assembly. assembly { r := mload(add(signature, 0x20)) vs := mload(add(signature, 0x40)) } return tryRecover(hash, r, vs); } else { return (address(0), RecoverError.InvalidSignatureLength); } } /** * @dev Returns the address that signed a hashed message (`hash`) with * `signature`. This address can then be used for verification purposes. * * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: * this function rejects them by requiring the `s` value to be in the lower * half order, and the `v` value to be either 27 or 28. * * IMPORTANT: `hash` _must_ be the result of a hash operation for the * verification to be secure: it is possible to craft signatures that * recover to arbitrary addresses for non-hashed data. A safe way to ensure * this is by receiving a hash of the original message (which may otherwise * be too long), and then calling {toEthSignedMessageHash} on it. */ function recover(bytes32 hash, bytes memory signature) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, signature); _throwError(error); return recovered; } /** * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately. * * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures] * * _Available since v4.3._ */ function tryRecover( bytes32 hash, bytes32 r, bytes32 vs ) internal pure returns (address, RecoverError) { bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff); uint8 v = uint8((uint256(vs) >> 255) + 27); return tryRecover(hash, v, r, s); } /** * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately. * * _Available since v4.2._ */ function recover( bytes32 hash, bytes32 r, bytes32 vs ) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, r, vs); _throwError(error); return recovered; } /** * @dev Overload of {ECDSA-tryRecover} that receives the `v`, * `r` and `s` signature fields separately. * * _Available since v4.3._ */ function tryRecover( bytes32 hash, uint8 v, bytes32 r, bytes32 s ) internal pure returns (address, RecoverError) { // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most // signatures from current libraries generate a unique signature with an s-value in the lower half order. // // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept // these malleable signatures as well. if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) { return (address(0), RecoverError.InvalidSignatureS); } if (v != 27 && v != 28) { return (address(0), RecoverError.InvalidSignatureV); } // If the signature is valid (and not malleable), return the signer address address signer = ecrecover(hash, v, r, s); if (signer == address(0)) { return (address(0), RecoverError.InvalidSignature); } return (signer, RecoverError.NoError); } /** * @dev Overload of {ECDSA-recover} that receives the `v`, * `r` and `s` signature fields separately. */ function recover( bytes32 hash, uint8 v, bytes32 r, bytes32 s ) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, v, r, s); _throwError(error); return recovered; } /** * @dev Returns an Ethereum Signed Message, created from a `hash`. This * produces hash corresponding to the one signed with the * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] * JSON-RPC method as part of EIP-191. * * See {recover}. */ function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) { // 32 is the length in bytes of hash, // enforced by the type signature above return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)); } /** * @dev Returns an Ethereum Signed Message, created from `s`. This * produces hash corresponding to the one signed with the * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] * JSON-RPC method as part of EIP-191. * * See {recover}. */ function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) { return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n", Strings.toString(s.length), s)); } /** * @dev Returns an Ethereum Signed Typed Data, created from a * `domainSeparator` and a `structHash`. This produces hash corresponding * to the one signed with the * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`] * JSON-RPC method as part of EIP-712. * * See {recover}. */ function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) { return keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash)); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @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; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; import "./IERC721.sol"; import "./IERC721Receiver.sol"; import "./IERC721Metadata.sol"; import "./Address.sol"; import "./Context.sol"; import "./Strings.sol"; import "./ERC165.sol"; /** * @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 overridden 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 { _setApprovalForAll(_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 || isApprovedForAll(owner, spender) || getApproved(tokenId) == 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); _afterTokenTransfer(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); _afterTokenTransfer(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 from incorrect owner"); 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); _afterTokenTransfer(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 Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @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.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 {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @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`. * * 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; /** * @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 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 the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @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); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; import "./IERC721.sol"; /** * @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); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; import "./Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol) pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the subtraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) 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); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_baseURIextended","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"string","name":"tokenURI","type":"string"}],"name":"KoalaMintMinted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"KoalaMintTransfered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"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":[{"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":"address","name":"_to","type":"address"},{"internalType":"string[]","name":"_tokensURI","type":"string[]"},{"internalType":"uint256","name":"_timestamp","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_baseURIextended","type":"string"}],"name":"revealCollection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxSupply","type":"uint256"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"string","name":"_tokenURI","type":"string"},{"internalType":"uint256","name":"_timestamp","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"signatureSignerMint","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"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"}]
Contract Creation Code
6080604052610ff5600a553480156200001757600080fd5b506040516200480c3803806200480c83398181016040528101906200003d91906200030d565b6040518060400160405280600481526020017f50555245000000000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f50555245000000000000000000000000000000000000000000000000000000008152508160009080519060200190620000c1929190620001eb565b508060019080519060200190620000da929190620001eb565b505050620000fd620000f16200011d60201b60201c565b6200012560201b60201c565b806009908051906020019062000115929190620001eb565b5050620004c2565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001f990620003e7565b90600052602060002090601f0160209004810192826200021d576000855562000269565b82601f106200023857805160ff191683800117855562000269565b8280016001018555821562000269579182015b82811115620002685782518255916020019190600101906200024b565b5b5090506200027891906200027c565b5090565b5b80821115620002975760008160009055506001016200027d565b5090565b6000620002b2620002ac846200037b565b62000352565b905082815260208101848484011115620002cb57600080fd5b620002d8848285620003b1565b509392505050565b600082601f830112620002f257600080fd5b8151620003048482602086016200029b565b91505092915050565b6000602082840312156200032057600080fd5b600082015167ffffffffffffffff8111156200033b57600080fd5b6200034984828501620002e0565b91505092915050565b60006200035e62000371565b90506200036c82826200041d565b919050565b6000604051905090565b600067ffffffffffffffff82111562000399576200039862000482565b5b620003a482620004b1565b9050602081019050919050565b60005b83811015620003d1578082015181840152602081019050620003b4565b83811115620003e1576000848401525b50505050565b600060028204905060018216806200040057607f821691505b6020821081141562000417576200041662000453565b5b50919050565b6200042882620004b1565b810181811067ffffffffffffffff821117156200044a576200044962000482565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b61433a80620004d26000396000f3fe60806040526004361061011f5760003560e01c806370a08231116100a0578063a22cb46511610064578063a22cb465146103d6578063b88d4fde146103ff578063c87b56dd14610428578063e985e9c514610465578063f2fde38b146104a25761011f565b806370a08231146102ef578063715018a61461032c57806371ca8bd3146103435780638da5cb5b1461038057806395d89b41146103ab5761011f565b80633f288cb8116100e75780633f288cb81461021b57806342842e0e1461023757806350179bae146102605780636352211e146102895780636f8b44b0146102c65761011f565b806301ffc9a71461012457806306fdde0314610161578063081812fc1461018c578063095ea7b3146101c957806323b872dd146101f2575b600080fd5b34801561013057600080fd5b5061014b60048036038101906101469190612b8f565b6104cb565b604051610158919061336b565b60405180910390f35b34801561016d57600080fd5b506101766105ad565b60405161018391906133cb565b60405180910390f35b34801561019857600080fd5b506101b360048036038101906101ae9190612c22565b61063f565b6040516101c0919061325f565b60405180910390f35b3480156101d557600080fd5b506101f060048036038101906101eb9190612b53565b6106c4565b005b3480156101fe57600080fd5b506102196004803603810190610214919061290b565b6107dc565b005b610235600480360381019061023091906129d5565b61083c565b005b34801561024357600080fd5b5061025e6004803603810190610259919061290b565b610b56565b005b34801561026c57600080fd5b5061028760048036038101906102829190612be1565b610b76565b005b34801561029557600080fd5b506102b060048036038101906102ab9190612c22565b610c5e565b6040516102bd919061325f565b60405180910390f35b3480156102d257600080fd5b506102ed60048036038101906102e89190612c22565b610d10565b005b3480156102fb57600080fd5b50610316600480360381019061031191906128a6565b610d96565b604051610323919061376d565b60405180910390f35b34801561033857600080fd5b50610341610e4e565b005b34801561034f57600080fd5b5061036a60048036038101906103659190612ab2565b610ed6565b604051610377919061325f565b60405180910390f35b34801561038c57600080fd5b50610395610f40565b6040516103a2919061325f565b60405180910390f35b3480156103b757600080fd5b506103c0610f6a565b6040516103cd91906133cb565b60405180910390f35b3480156103e257600080fd5b506103fd60048036038101906103f89190612a76565b610ffc565b005b34801561040b57600080fd5b506104266004803603810190610421919061295a565b611012565b005b34801561043457600080fd5b5061044f600480360381019061044a9190612c22565b611074565b60405161045c91906133cb565b60405180910390f35b34801561047157600080fd5b5061048c600480360381019061048791906128cf565b611195565b604051610499919061336b565b60405180910390f35b3480156104ae57600080fd5b506104c960048036038101906104c491906128a6565b611229565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061059657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806105a657506105a582611321565b5b9050919050565b6060600080546105bc90613a80565b80601f01602080910402602001604051908101604052809291908181526020018280546105e890613a80565b80156106355780601f1061060a57610100808354040283529160200191610635565b820191906000526020600020905b81548152906001019060200180831161061857829003601f168201915b5050505050905090565b600061064a8261138b565b610689576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106809061362d565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006106cf82610c5e565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610740576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610737906136ad565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661075f6113f7565b73ffffffffffffffffffffffffffffffffffffffff16148061078e575061078d816107886113f7565b611195565b5b6107cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107c49061358d565b60405180910390fd5b6107d783836113ff565b505050565b6107ed6107e76113f7565b826114b8565b61082c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108239061372d565b60405180910390fd5b610837838383611596565b505050565b610851855160006117fd90919063ffffffff16565b341015610893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088a9061366d565b60405180910390fd5b845161089f6007611813565b6108a9919061389e565b600a5410156108ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e49061340d565b60405180910390fd5b6000855111610931576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109289061374d565b60405180910390fd5b60006109828787600081518110610971577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015187878787610ed6565b9050734aea7b69abb482e34bdd1d8c7a6b8dca44f6577573ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610a06576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109fd9061356d565b60405180910390fd5b61012c42610a14919061397f565b851015610a56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4d906136ed565b60405180910390fd5b60005b86518160ff161015610ac557610ab288888360ff1681518110610aa5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151611821565b8080610abd90613ae3565b915050610a59565b506000349050600060051115610b2e576000610afe6064610af06005856117fd90919063ffffffff16565b6118b190919063ffffffff16565b90508082610b0c919061397f565b9150610b2c73d17237307b93b104c50d6f83cf1e2db99f7a348a826118c7565b505b610b4c73dd8b6fb4c5fd3ef7a45b08aa64bde01ddc1b207e826118c7565b5050505050505050565b610b7183838360405180602001604052806000815250611012565b505050565b610b7e6113f7565b73ffffffffffffffffffffffffffffffffffffffff16610b9c610f40565b73ffffffffffffffffffffffffffffffffffffffff1614610bf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be99061364d565b60405180910390fd5b80805190602001206009604051610c0991906131e9565b60405180910390201415610c52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c49906136cd565b60405180910390fd5b610c5b816119b1565b50565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610d07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfe906135cd565b60405180910390fd5b80915050919050565b610d186113f7565b73ffffffffffffffffffffffffffffffffffffffff16610d36610f40565b73ffffffffffffffffffffffffffffffffffffffff1614610d8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d839061364d565b60405180910390fd5b80600a8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610e07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfe906135ad565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e566113f7565b73ffffffffffffffffffffffffffffffffffffffff16610e74610f40565b73ffffffffffffffffffffffffffffffffffffffff1614610eca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec19061364d565b60405180910390fd5b610ed46000611a47565b565b6000610f34878787604051602001610ef093929190613304565b60405160208183030381529060405280519060200120604051602001610f169190613224565b60405160208183030381529060405280519060200120858585611b0d565b90509695505050505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610f7990613a80565b80601f0160208091040260200160405190810160405280929190818152602001828054610fa590613a80565b8015610ff25780601f10610fc757610100808354040283529160200191610ff2565b820191906000526020600020905b815481529060010190602001808311610fd557829003601f168201915b5050505050905090565b61100e6110076113f7565b8383611b38565b5050565b61102361101d6113f7565b836114b8565b611062576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110599061372d565b60405180910390fd5b61106e84848484611ca5565b50505050565b606061107f8261138b565b6110be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b59061344d565b60405180910390fd5b60006008600084815260200190815260200160002080546110de90613a80565b80601f016020809104026020016040519081016040528092919081815260200182805461110a90613a80565b80156111575780601f1061112c57610100808354040283529160200191611157565b820191906000526020600020905b81548152906001019060200180831161113a57829003601f168201915b505050505090506000611168611d01565b9050808260405160200161117d929190613200565b60405160208183030381529060405292505050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6112316113f7565b73ffffffffffffffffffffffffffffffffffffffff1661124f610f40565b73ffffffffffffffffffffffffffffffffffffffff16146112a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129c9061364d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611315576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130c9061348d565b60405180910390fd5b61131e81611a47565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661147283610c5e565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006114c38261138b565b611502576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f99061354d565b60405180910390fd5b600061150d83610c5e565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061154f575061154e8185611195565b5b8061158d57508373ffffffffffffffffffffffffffffffffffffffff166115758461063f565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166115b682610c5e565b73ffffffffffffffffffffffffffffffffffffffff161461160c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611603906134ad565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561167c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611673906134ed565b60405180910390fd5b611687838383611d93565b6116926000826113ff565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116e2919061397f565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611739919061389e565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46117f8838383611d98565b505050565b6000818361180b9190613925565b905092915050565b600081600001549050919050565b600061182d6007611813565b90506118396007611d9d565b600181611846919061389e565b90506118528382611db3565b61185c8183611f8d565b807f22f159d78f3070bdaa3a1b6adf066ff0bb90c4c161fb27506307e6af06e18dfa73dd8b6fb4c5fd3ef7a45b08aa64bde01ddc1b207e85856040516118a49392919061327a565b60405180910390a2505050565b600081836118bf91906138f4565b905092915050565b60008273ffffffffffffffffffffffffffffffffffffffff16826040516118ed9061324a565b60006040518083038185875af1925050503d806000811461192a576040519150601f19603f3d011682016040523d82523d6000602084013e61192f565b606091505b5050905080611973576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196a9061370d565b60405180910390fd5b7fcd90c098a9e93a26c6962609f457d04072f9e433f1e3bfb275e5c54d4398e79c83836040516119a4929190613342565b60405180910390a1505050565b6119b96113f7565b73ffffffffffffffffffffffffffffffffffffffff166119d7610f40565b73ffffffffffffffffffffffffffffffffffffffff1614611a2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a249061364d565b60405180910390fd5b8060099080519060200190611a43929190612619565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000806000611b1e87878787612001565b91509150611b2b8161210e565b8192505050949350505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611ba7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9e9061350d565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611c98919061336b565b60405180910390a3505050565b611cb0848484611596565b611cbc8484848461245f565b611cfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf29061346d565b60405180910390fd5b50505050565b606060098054611d1090613a80565b80601f0160208091040260200160405190810160405280929190818152602001828054611d3c90613a80565b8015611d895780601f10611d5e57610100808354040283529160200191611d89565b820191906000526020600020905b815481529060010190602001808311611d6c57829003601f168201915b5050505050905090565b505050565b505050565b6001816000016000828254019250508190555050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1a9061360d565b60405180910390fd5b611e2c8161138b565b15611e6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e63906134cd565b60405180910390fd5b611e7860008383611d93565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ec8919061389e565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611f8960008383611d98565b5050565b611f968261138b565b611fd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fcc9061368d565b60405180910390fd5b80600860008481526020019081526020016000209080519060200190611ffc929190612619565b505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c111561203c576000600391509150612105565b601b8560ff16141580156120545750601c8560ff1614155b15612066576000600491509150612105565b60006001878787876040516000815260200160405260405161208b9493929190613386565b6020604051602081039080840390855afa1580156120ad573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156120fc57600060019250925050612105565b80600092509250505b94509492505050565b60006004811115612148577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b816004811115612181577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b141561218c5761245c565b600160048111156121c6577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8160048111156121ff577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1415612240576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612237906133ed565b60405180910390fd5b6002600481111561227a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8160048111156122b3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b14156122f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122eb9061342d565b60405180910390fd5b6003600481111561232e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b816004811115612367577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b14156123a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239f9061352d565b60405180910390fd5b6004808111156123e1577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b81600481111561241a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b141561245b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612452906135ed565b60405180910390fd5b5b50565b60006124808473ffffffffffffffffffffffffffffffffffffffff166125f6565b156125e9578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026124a96113f7565b8786866040518563ffffffff1660e01b81526004016124cb94939291906132b8565b602060405180830381600087803b1580156124e557600080fd5b505af192505050801561251657506040513d601f19601f820116820180604052508101906125139190612bb8565b60015b612599573d8060008114612546576040519150601f19603f3d011682016040523d82523d6000602084013e61254b565b606091505b50600081511415612591576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125889061346d565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506125ee565b600190505b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82805461262590613a80565b90600052602060002090601f016020900481019282612647576000855561268e565b82601f1061266057805160ff191683800117855561268e565b8280016001018555821561268e579182015b8281111561268d578251825591602001919060010190612672565b5b50905061269b919061269f565b5090565b5b808211156126b85760008160009055506001016126a0565b5090565b60006126cf6126ca846137ad565b613788565b9050808382526020820190508260005b8581101561270f57813585016126f58882612852565b8452602084019350602083019250506001810190506126df565b5050509392505050565b600061272c612727846137d9565b613788565b90508281526020810184848401111561274457600080fd5b61274f848285613a3e565b509392505050565b600061276a6127658461380a565b613788565b90508281526020810184848401111561278257600080fd5b61278d848285613a3e565b509392505050565b6000813590506127a48161427a565b92915050565b600082601f8301126127bb57600080fd5b81356127cb8482602086016126bc565b91505092915050565b6000813590506127e381614291565b92915050565b6000813590506127f8816142a8565b92915050565b60008135905061280d816142bf565b92915050565b600081519050612822816142bf565b92915050565b600082601f83011261283957600080fd5b8135612849848260208601612719565b91505092915050565b600082601f83011261286357600080fd5b8135612873848260208601612757565b91505092915050565b60008135905061288b816142d6565b92915050565b6000813590506128a0816142ed565b92915050565b6000602082840312156128b857600080fd5b60006128c684828501612795565b91505092915050565b600080604083850312156128e257600080fd5b60006128f085828601612795565b925050602061290185828601612795565b9150509250929050565b60008060006060848603121561292057600080fd5b600061292e86828701612795565b935050602061293f86828701612795565b92505060406129508682870161287c565b9150509250925092565b6000806000806080858703121561297057600080fd5b600061297e87828801612795565b945050602061298f87828801612795565b93505060406129a08782880161287c565b925050606085013567ffffffffffffffff8111156129bd57600080fd5b6129c987828801612828565b91505092959194509250565b60008060008060008060c087890312156129ee57600080fd5b60006129fc89828a01612795565b965050602087013567ffffffffffffffff811115612a1957600080fd5b612a2589828a016127aa565b9550506040612a3689828a0161287c565b9450506060612a4789828a01612891565b9350506080612a5889828a016127e9565b92505060a0612a6989828a016127e9565b9150509295509295509295565b60008060408385031215612a8957600080fd5b6000612a9785828601612795565b9250506020612aa8858286016127d4565b9150509250929050565b60008060008060008060c08789031215612acb57600080fd5b6000612ad989828a01612795565b965050602087013567ffffffffffffffff811115612af657600080fd5b612b0289828a01612852565b9550506040612b1389828a0161287c565b9450506060612b2489828a01612891565b9350506080612b3589828a016127e9565b92505060a0612b4689828a016127e9565b9150509295509295509295565b60008060408385031215612b6657600080fd5b6000612b7485828601612795565b9250506020612b858582860161287c565b9150509250929050565b600060208284031215612ba157600080fd5b6000612baf848285016127fe565b91505092915050565b600060208284031215612bca57600080fd5b6000612bd884828501612813565b91505092915050565b600060208284031215612bf357600080fd5b600082013567ffffffffffffffff811115612c0d57600080fd5b612c1984828501612852565b91505092915050565b600060208284031215612c3457600080fd5b6000612c428482850161287c565b91505092915050565b612c54816139b3565b82525050565b612c63816139c5565b82525050565b612c72816139d1565b82525050565b612c89612c84826139d1565b613b0d565b82525050565b6000612c9a82613850565b612ca48185613866565b9350612cb4818560208601613a4d565b612cbd81613bd3565b840191505092915050565b60008154612cd581613a80565b612cdf8186613877565b94506001821660008114612cfa5760018114612d0b57612d3e565b60ff19831686528186019350612d3e565b612d148561383b565b60005b83811015612d3657815481890152600182019150602081019050612d17565b838801955050505b50505092915050565b6000612d528261385b565b612d5c8185613882565b9350612d6c818560208601613a4d565b612d7581613bd3565b840191505092915050565b6000612d8b8261385b565b612d958185613893565b9350612da5818560208601613a4d565b80840191505092915050565b6000612dbe601883613882565b9150612dc982613be4565b602082019050919050565b6000612de1600783613882565b9150612dec82613c0d565b602082019050919050565b6000612e04601f83613882565b9150612e0f82613c36565b602082019050919050565b6000612e27601c83613893565b9150612e3282613c5f565b601c82019050919050565b6000612e4a601f83613882565b9150612e5582613c88565b602082019050919050565b6000612e6d603283613882565b9150612e7882613cb1565b604082019050919050565b6000612e90602683613882565b9150612e9b82613d00565b604082019050919050565b6000612eb3602583613882565b9150612ebe82613d4f565b604082019050919050565b6000612ed6601c83613882565b9150612ee182613d9e565b602082019050919050565b6000612ef9602483613882565b9150612f0482613dc7565b604082019050919050565b6000612f1c601983613882565b9150612f2782613e16565b602082019050919050565b6000612f3f602283613882565b9150612f4a82613e3f565b604082019050919050565b6000612f62602c83613882565b9150612f6d82613e8e565b604082019050919050565b6000612f85601683613882565b9150612f9082613edd565b602082019050919050565b6000612fa8603883613882565b9150612fb382613f06565b604082019050919050565b6000612fcb602a83613882565b9150612fd682613f55565b604082019050919050565b6000612fee602983613882565b9150612ff982613fa4565b604082019050919050565b6000613011602283613882565b915061301c82613ff3565b604082019050919050565b6000613034602083613882565b915061303f82614042565b602082019050919050565b6000613057602c83613882565b91506130628261406b565b604082019050919050565b600061307a602083613882565b9150613085826140ba565b602082019050919050565b600061309d601183613882565b91506130a8826140e3565b602082019050919050565b60006130c0601c83613882565b91506130cb8261410c565b602082019050919050565b60006130e3602183613882565b91506130ee82614135565b604082019050919050565b6000613106601b83613882565b915061311182614184565b602082019050919050565b6000613129600b83613882565b9150613134826141ad565b602082019050919050565b600061314c600083613877565b9150613157826141d6565b600082019050919050565b600061316f601083613882565b915061317a826141d9565b602082019050919050565b6000613192603183613882565b915061319d82614202565b604082019050919050565b60006131b5600d83613882565b91506131c082614251565b602082019050919050565b6131d481613a27565b82525050565b6131e381613a31565b82525050565b60006131f58284612cc8565b915081905092915050565b600061320c8285612d80565b91506132188284612d80565b91508190509392505050565b600061322f82612e1a565b915061323b8284612c78565b60208201915081905092915050565b60006132558261313f565b9150819050919050565b60006020820190506132746000830184612c4b565b92915050565b600060608201905061328f6000830186612c4b565b61329c6020830185612c4b565b81810360408301526132ae8184612d47565b9050949350505050565b60006080820190506132cd6000830187612c4b565b6132da6020830186612c4b565b6132e760408301856131cb565b81810360608301526132f98184612c8f565b905095945050505050565b60006060820190506133196000830186612c4b565b818103602083015261332b8185612d47565b905061333a60408301846131cb565b949350505050565b60006040820190506133576000830185612c4b565b61336460208301846131cb565b9392505050565b60006020820190506133806000830184612c5a565b92915050565b600060808201905061339b6000830187612c69565b6133a860208301866131da565b6133b56040830185612c69565b6133c26060830184612c69565b95945050505050565b600060208201905081810360008301526133e58184612d47565b905092915050565b6000602082019050818103600083015261340681612db1565b9050919050565b6000602082019050818103600083015261342681612dd4565b9050919050565b6000602082019050818103600083015261344681612df7565b9050919050565b6000602082019050818103600083015261346681612e3d565b9050919050565b6000602082019050818103600083015261348681612e60565b9050919050565b600060208201905081810360008301526134a681612e83565b9050919050565b600060208201905081810360008301526134c681612ea6565b9050919050565b600060208201905081810360008301526134e681612ec9565b9050919050565b6000602082019050818103600083015261350681612eec565b9050919050565b6000602082019050818103600083015261352681612f0f565b9050919050565b6000602082019050818103600083015261354681612f32565b9050919050565b6000602082019050818103600083015261356681612f55565b9050919050565b6000602082019050818103600083015261358681612f78565b9050919050565b600060208201905081810360008301526135a681612f9b565b9050919050565b600060208201905081810360008301526135c681612fbe565b9050919050565b600060208201905081810360008301526135e681612fe1565b9050919050565b6000602082019050818103600083015261360681613004565b9050919050565b6000602082019050818103600083015261362681613027565b9050919050565b600060208201905081810360008301526136468161304a565b9050919050565b600060208201905081810360008301526136668161306d565b9050919050565b6000602082019050818103600083015261368681613090565b9050919050565b600060208201905081810360008301526136a6816130b3565b9050919050565b600060208201905081810360008301526136c6816130d6565b9050919050565b600060208201905081810360008301526136e6816130f9565b9050919050565b600060208201905081810360008301526137068161311c565b9050919050565b6000602082019050818103600083015261372681613162565b9050919050565b6000602082019050818103600083015261374681613185565b9050919050565b60006020820190508181036000830152613766816131a8565b9050919050565b600060208201905061378260008301846131cb565b92915050565b60006137926137a3565b905061379e8282613ab2565b919050565b6000604051905090565b600067ffffffffffffffff8211156137c8576137c7613ba4565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156137f4576137f3613ba4565b5b6137fd82613bd3565b9050602081019050919050565b600067ffffffffffffffff82111561382557613824613ba4565b5b61382e82613bd3565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006138a982613a27565b91506138b483613a27565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156138e9576138e8613b17565b5b828201905092915050565b60006138ff82613a27565b915061390a83613a27565b92508261391a57613919613b46565b5b828204905092915050565b600061393082613a27565b915061393b83613a27565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561397457613973613b17565b5b828202905092915050565b600061398a82613a27565b915061399583613a27565b9250828210156139a8576139a7613b17565b5b828203905092915050565b60006139be82613a07565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015613a6b578082015181840152602081019050613a50565b83811115613a7a576000848401525b50505050565b60006002820490506001821680613a9857607f821691505b60208210811415613aac57613aab613b75565b5b50919050565b613abb82613bd3565b810181811067ffffffffffffffff82111715613ada57613ad9613ba4565b5b80604052505050565b6000613aee82613a31565b915060ff821415613b0257613b01613b17565b5b600182019050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b7f536f6c644f757400000000000000000000000000000000000000000000000000600082015250565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b7f55524920717565727920666f72206e6f6e6578697374656e7420746f6b656e00600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4e6f7420617574686f72697a656420746f206d696e7400000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f45434453413a20696e76616c6964207369676e6174757265202776272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f56616c75652062656c6f77207072696365000000000000000000000000000000600082015250565b7f55524920736574206f66206e6f6e6578697374656e7420746f6b656e00000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f436f6c6c656374696f6e20616c72656164792072657665616c65640000000000600082015250565b7f4f7574206f662074696d65000000000000000000000000000000000000000000600082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4d696e696d756d20636f756e7400000000000000000000000000000000000000600082015250565b614283816139b3565b811461428e57600080fd5b50565b61429a816139c5565b81146142a557600080fd5b50565b6142b1816139d1565b81146142bc57600080fd5b50565b6142c8816139db565b81146142d357600080fd5b50565b6142df81613a27565b81146142ea57600080fd5b50565b6142f681613a31565b811461430157600080fd5b5056fea2646970667358221220741c3d45f3ac6ee0f4dab766ab565fefeb5ef3031d633e35d1fe10e28702983964736f6c634300080100330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000005b68747470733a2f2f6170692e6b6f616c616d696e742e636f6d2f643664656463623432383861643631656630643037376634643562346538346536336438336133313633383730626635396466333865663430353266616439352f0000000000
Deployed Bytecode
0x60806040526004361061011f5760003560e01c806370a08231116100a0578063a22cb46511610064578063a22cb465146103d6578063b88d4fde146103ff578063c87b56dd14610428578063e985e9c514610465578063f2fde38b146104a25761011f565b806370a08231146102ef578063715018a61461032c57806371ca8bd3146103435780638da5cb5b1461038057806395d89b41146103ab5761011f565b80633f288cb8116100e75780633f288cb81461021b57806342842e0e1461023757806350179bae146102605780636352211e146102895780636f8b44b0146102c65761011f565b806301ffc9a71461012457806306fdde0314610161578063081812fc1461018c578063095ea7b3146101c957806323b872dd146101f2575b600080fd5b34801561013057600080fd5b5061014b60048036038101906101469190612b8f565b6104cb565b604051610158919061336b565b60405180910390f35b34801561016d57600080fd5b506101766105ad565b60405161018391906133cb565b60405180910390f35b34801561019857600080fd5b506101b360048036038101906101ae9190612c22565b61063f565b6040516101c0919061325f565b60405180910390f35b3480156101d557600080fd5b506101f060048036038101906101eb9190612b53565b6106c4565b005b3480156101fe57600080fd5b506102196004803603810190610214919061290b565b6107dc565b005b610235600480360381019061023091906129d5565b61083c565b005b34801561024357600080fd5b5061025e6004803603810190610259919061290b565b610b56565b005b34801561026c57600080fd5b5061028760048036038101906102829190612be1565b610b76565b005b34801561029557600080fd5b506102b060048036038101906102ab9190612c22565b610c5e565b6040516102bd919061325f565b60405180910390f35b3480156102d257600080fd5b506102ed60048036038101906102e89190612c22565b610d10565b005b3480156102fb57600080fd5b50610316600480360381019061031191906128a6565b610d96565b604051610323919061376d565b60405180910390f35b34801561033857600080fd5b50610341610e4e565b005b34801561034f57600080fd5b5061036a60048036038101906103659190612ab2565b610ed6565b604051610377919061325f565b60405180910390f35b34801561038c57600080fd5b50610395610f40565b6040516103a2919061325f565b60405180910390f35b3480156103b757600080fd5b506103c0610f6a565b6040516103cd91906133cb565b60405180910390f35b3480156103e257600080fd5b506103fd60048036038101906103f89190612a76565b610ffc565b005b34801561040b57600080fd5b506104266004803603810190610421919061295a565b611012565b005b34801561043457600080fd5b5061044f600480360381019061044a9190612c22565b611074565b60405161045c91906133cb565b60405180910390f35b34801561047157600080fd5b5061048c600480360381019061048791906128cf565b611195565b604051610499919061336b565b60405180910390f35b3480156104ae57600080fd5b506104c960048036038101906104c491906128a6565b611229565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061059657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806105a657506105a582611321565b5b9050919050565b6060600080546105bc90613a80565b80601f01602080910402602001604051908101604052809291908181526020018280546105e890613a80565b80156106355780601f1061060a57610100808354040283529160200191610635565b820191906000526020600020905b81548152906001019060200180831161061857829003601f168201915b5050505050905090565b600061064a8261138b565b610689576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106809061362d565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006106cf82610c5e565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610740576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610737906136ad565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661075f6113f7565b73ffffffffffffffffffffffffffffffffffffffff16148061078e575061078d816107886113f7565b611195565b5b6107cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107c49061358d565b60405180910390fd5b6107d783836113ff565b505050565b6107ed6107e76113f7565b826114b8565b61082c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108239061372d565b60405180910390fd5b610837838383611596565b505050565b610851855160006117fd90919063ffffffff16565b341015610893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088a9061366d565b60405180910390fd5b845161089f6007611813565b6108a9919061389e565b600a5410156108ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e49061340d565b60405180910390fd5b6000855111610931576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109289061374d565b60405180910390fd5b60006109828787600081518110610971577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015187878787610ed6565b9050734aea7b69abb482e34bdd1d8c7a6b8dca44f6577573ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610a06576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109fd9061356d565b60405180910390fd5b61012c42610a14919061397f565b851015610a56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4d906136ed565b60405180910390fd5b60005b86518160ff161015610ac557610ab288888360ff1681518110610aa5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151611821565b8080610abd90613ae3565b915050610a59565b506000349050600060051115610b2e576000610afe6064610af06005856117fd90919063ffffffff16565b6118b190919063ffffffff16565b90508082610b0c919061397f565b9150610b2c73d17237307b93b104c50d6f83cf1e2db99f7a348a826118c7565b505b610b4c73dd8b6fb4c5fd3ef7a45b08aa64bde01ddc1b207e826118c7565b5050505050505050565b610b7183838360405180602001604052806000815250611012565b505050565b610b7e6113f7565b73ffffffffffffffffffffffffffffffffffffffff16610b9c610f40565b73ffffffffffffffffffffffffffffffffffffffff1614610bf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be99061364d565b60405180910390fd5b80805190602001206009604051610c0991906131e9565b60405180910390201415610c52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c49906136cd565b60405180910390fd5b610c5b816119b1565b50565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610d07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfe906135cd565b60405180910390fd5b80915050919050565b610d186113f7565b73ffffffffffffffffffffffffffffffffffffffff16610d36610f40565b73ffffffffffffffffffffffffffffffffffffffff1614610d8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d839061364d565b60405180910390fd5b80600a8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610e07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfe906135ad565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e566113f7565b73ffffffffffffffffffffffffffffffffffffffff16610e74610f40565b73ffffffffffffffffffffffffffffffffffffffff1614610eca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec19061364d565b60405180910390fd5b610ed46000611a47565b565b6000610f34878787604051602001610ef093929190613304565b60405160208183030381529060405280519060200120604051602001610f169190613224565b60405160208183030381529060405280519060200120858585611b0d565b90509695505050505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610f7990613a80565b80601f0160208091040260200160405190810160405280929190818152602001828054610fa590613a80565b8015610ff25780601f10610fc757610100808354040283529160200191610ff2565b820191906000526020600020905b815481529060010190602001808311610fd557829003601f168201915b5050505050905090565b61100e6110076113f7565b8383611b38565b5050565b61102361101d6113f7565b836114b8565b611062576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110599061372d565b60405180910390fd5b61106e84848484611ca5565b50505050565b606061107f8261138b565b6110be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b59061344d565b60405180910390fd5b60006008600084815260200190815260200160002080546110de90613a80565b80601f016020809104026020016040519081016040528092919081815260200182805461110a90613a80565b80156111575780601f1061112c57610100808354040283529160200191611157565b820191906000526020600020905b81548152906001019060200180831161113a57829003601f168201915b505050505090506000611168611d01565b9050808260405160200161117d929190613200565b60405160208183030381529060405292505050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6112316113f7565b73ffffffffffffffffffffffffffffffffffffffff1661124f610f40565b73ffffffffffffffffffffffffffffffffffffffff16146112a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129c9061364d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611315576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130c9061348d565b60405180910390fd5b61131e81611a47565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661147283610c5e565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006114c38261138b565b611502576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f99061354d565b60405180910390fd5b600061150d83610c5e565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061154f575061154e8185611195565b5b8061158d57508373ffffffffffffffffffffffffffffffffffffffff166115758461063f565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166115b682610c5e565b73ffffffffffffffffffffffffffffffffffffffff161461160c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611603906134ad565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561167c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611673906134ed565b60405180910390fd5b611687838383611d93565b6116926000826113ff565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116e2919061397f565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611739919061389e565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46117f8838383611d98565b505050565b6000818361180b9190613925565b905092915050565b600081600001549050919050565b600061182d6007611813565b90506118396007611d9d565b600181611846919061389e565b90506118528382611db3565b61185c8183611f8d565b807f22f159d78f3070bdaa3a1b6adf066ff0bb90c4c161fb27506307e6af06e18dfa73dd8b6fb4c5fd3ef7a45b08aa64bde01ddc1b207e85856040516118a49392919061327a565b60405180910390a2505050565b600081836118bf91906138f4565b905092915050565b60008273ffffffffffffffffffffffffffffffffffffffff16826040516118ed9061324a565b60006040518083038185875af1925050503d806000811461192a576040519150601f19603f3d011682016040523d82523d6000602084013e61192f565b606091505b5050905080611973576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196a9061370d565b60405180910390fd5b7fcd90c098a9e93a26c6962609f457d04072f9e433f1e3bfb275e5c54d4398e79c83836040516119a4929190613342565b60405180910390a1505050565b6119b96113f7565b73ffffffffffffffffffffffffffffffffffffffff166119d7610f40565b73ffffffffffffffffffffffffffffffffffffffff1614611a2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a249061364d565b60405180910390fd5b8060099080519060200190611a43929190612619565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000806000611b1e87878787612001565b91509150611b2b8161210e565b8192505050949350505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611ba7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9e9061350d565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611c98919061336b565b60405180910390a3505050565b611cb0848484611596565b611cbc8484848461245f565b611cfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf29061346d565b60405180910390fd5b50505050565b606060098054611d1090613a80565b80601f0160208091040260200160405190810160405280929190818152602001828054611d3c90613a80565b8015611d895780601f10611d5e57610100808354040283529160200191611d89565b820191906000526020600020905b815481529060010190602001808311611d6c57829003601f168201915b5050505050905090565b505050565b505050565b6001816000016000828254019250508190555050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1a9061360d565b60405180910390fd5b611e2c8161138b565b15611e6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e63906134cd565b60405180910390fd5b611e7860008383611d93565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ec8919061389e565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611f8960008383611d98565b5050565b611f968261138b565b611fd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fcc9061368d565b60405180910390fd5b80600860008481526020019081526020016000209080519060200190611ffc929190612619565b505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c111561203c576000600391509150612105565b601b8560ff16141580156120545750601c8560ff1614155b15612066576000600491509150612105565b60006001878787876040516000815260200160405260405161208b9493929190613386565b6020604051602081039080840390855afa1580156120ad573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156120fc57600060019250925050612105565b80600092509250505b94509492505050565b60006004811115612148577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b816004811115612181577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b141561218c5761245c565b600160048111156121c6577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8160048111156121ff577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1415612240576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612237906133ed565b60405180910390fd5b6002600481111561227a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8160048111156122b3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b14156122f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122eb9061342d565b60405180910390fd5b6003600481111561232e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b816004811115612367577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b14156123a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239f9061352d565b60405180910390fd5b6004808111156123e1577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b81600481111561241a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b141561245b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612452906135ed565b60405180910390fd5b5b50565b60006124808473ffffffffffffffffffffffffffffffffffffffff166125f6565b156125e9578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026124a96113f7565b8786866040518563ffffffff1660e01b81526004016124cb94939291906132b8565b602060405180830381600087803b1580156124e557600080fd5b505af192505050801561251657506040513d601f19601f820116820180604052508101906125139190612bb8565b60015b612599573d8060008114612546576040519150601f19603f3d011682016040523d82523d6000602084013e61254b565b606091505b50600081511415612591576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125889061346d565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506125ee565b600190505b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82805461262590613a80565b90600052602060002090601f016020900481019282612647576000855561268e565b82601f1061266057805160ff191683800117855561268e565b8280016001018555821561268e579182015b8281111561268d578251825591602001919060010190612672565b5b50905061269b919061269f565b5090565b5b808211156126b85760008160009055506001016126a0565b5090565b60006126cf6126ca846137ad565b613788565b9050808382526020820190508260005b8581101561270f57813585016126f58882612852565b8452602084019350602083019250506001810190506126df565b5050509392505050565b600061272c612727846137d9565b613788565b90508281526020810184848401111561274457600080fd5b61274f848285613a3e565b509392505050565b600061276a6127658461380a565b613788565b90508281526020810184848401111561278257600080fd5b61278d848285613a3e565b509392505050565b6000813590506127a48161427a565b92915050565b600082601f8301126127bb57600080fd5b81356127cb8482602086016126bc565b91505092915050565b6000813590506127e381614291565b92915050565b6000813590506127f8816142a8565b92915050565b60008135905061280d816142bf565b92915050565b600081519050612822816142bf565b92915050565b600082601f83011261283957600080fd5b8135612849848260208601612719565b91505092915050565b600082601f83011261286357600080fd5b8135612873848260208601612757565b91505092915050565b60008135905061288b816142d6565b92915050565b6000813590506128a0816142ed565b92915050565b6000602082840312156128b857600080fd5b60006128c684828501612795565b91505092915050565b600080604083850312156128e257600080fd5b60006128f085828601612795565b925050602061290185828601612795565b9150509250929050565b60008060006060848603121561292057600080fd5b600061292e86828701612795565b935050602061293f86828701612795565b92505060406129508682870161287c565b9150509250925092565b6000806000806080858703121561297057600080fd5b600061297e87828801612795565b945050602061298f87828801612795565b93505060406129a08782880161287c565b925050606085013567ffffffffffffffff8111156129bd57600080fd5b6129c987828801612828565b91505092959194509250565b60008060008060008060c087890312156129ee57600080fd5b60006129fc89828a01612795565b965050602087013567ffffffffffffffff811115612a1957600080fd5b612a2589828a016127aa565b9550506040612a3689828a0161287c565b9450506060612a4789828a01612891565b9350506080612a5889828a016127e9565b92505060a0612a6989828a016127e9565b9150509295509295509295565b60008060408385031215612a8957600080fd5b6000612a9785828601612795565b9250506020612aa8858286016127d4565b9150509250929050565b60008060008060008060c08789031215612acb57600080fd5b6000612ad989828a01612795565b965050602087013567ffffffffffffffff811115612af657600080fd5b612b0289828a01612852565b9550506040612b1389828a0161287c565b9450506060612b2489828a01612891565b9350506080612b3589828a016127e9565b92505060a0612b4689828a016127e9565b9150509295509295509295565b60008060408385031215612b6657600080fd5b6000612b7485828601612795565b9250506020612b858582860161287c565b9150509250929050565b600060208284031215612ba157600080fd5b6000612baf848285016127fe565b91505092915050565b600060208284031215612bca57600080fd5b6000612bd884828501612813565b91505092915050565b600060208284031215612bf357600080fd5b600082013567ffffffffffffffff811115612c0d57600080fd5b612c1984828501612852565b91505092915050565b600060208284031215612c3457600080fd5b6000612c428482850161287c565b91505092915050565b612c54816139b3565b82525050565b612c63816139c5565b82525050565b612c72816139d1565b82525050565b612c89612c84826139d1565b613b0d565b82525050565b6000612c9a82613850565b612ca48185613866565b9350612cb4818560208601613a4d565b612cbd81613bd3565b840191505092915050565b60008154612cd581613a80565b612cdf8186613877565b94506001821660008114612cfa5760018114612d0b57612d3e565b60ff19831686528186019350612d3e565b612d148561383b565b60005b83811015612d3657815481890152600182019150602081019050612d17565b838801955050505b50505092915050565b6000612d528261385b565b612d5c8185613882565b9350612d6c818560208601613a4d565b612d7581613bd3565b840191505092915050565b6000612d8b8261385b565b612d958185613893565b9350612da5818560208601613a4d565b80840191505092915050565b6000612dbe601883613882565b9150612dc982613be4565b602082019050919050565b6000612de1600783613882565b9150612dec82613c0d565b602082019050919050565b6000612e04601f83613882565b9150612e0f82613c36565b602082019050919050565b6000612e27601c83613893565b9150612e3282613c5f565b601c82019050919050565b6000612e4a601f83613882565b9150612e5582613c88565b602082019050919050565b6000612e6d603283613882565b9150612e7882613cb1565b604082019050919050565b6000612e90602683613882565b9150612e9b82613d00565b604082019050919050565b6000612eb3602583613882565b9150612ebe82613d4f565b604082019050919050565b6000612ed6601c83613882565b9150612ee182613d9e565b602082019050919050565b6000612ef9602483613882565b9150612f0482613dc7565b604082019050919050565b6000612f1c601983613882565b9150612f2782613e16565b602082019050919050565b6000612f3f602283613882565b9150612f4a82613e3f565b604082019050919050565b6000612f62602c83613882565b9150612f6d82613e8e565b604082019050919050565b6000612f85601683613882565b9150612f9082613edd565b602082019050919050565b6000612fa8603883613882565b9150612fb382613f06565b604082019050919050565b6000612fcb602a83613882565b9150612fd682613f55565b604082019050919050565b6000612fee602983613882565b9150612ff982613fa4565b604082019050919050565b6000613011602283613882565b915061301c82613ff3565b604082019050919050565b6000613034602083613882565b915061303f82614042565b602082019050919050565b6000613057602c83613882565b91506130628261406b565b604082019050919050565b600061307a602083613882565b9150613085826140ba565b602082019050919050565b600061309d601183613882565b91506130a8826140e3565b602082019050919050565b60006130c0601c83613882565b91506130cb8261410c565b602082019050919050565b60006130e3602183613882565b91506130ee82614135565b604082019050919050565b6000613106601b83613882565b915061311182614184565b602082019050919050565b6000613129600b83613882565b9150613134826141ad565b602082019050919050565b600061314c600083613877565b9150613157826141d6565b600082019050919050565b600061316f601083613882565b915061317a826141d9565b602082019050919050565b6000613192603183613882565b915061319d82614202565b604082019050919050565b60006131b5600d83613882565b91506131c082614251565b602082019050919050565b6131d481613a27565b82525050565b6131e381613a31565b82525050565b60006131f58284612cc8565b915081905092915050565b600061320c8285612d80565b91506132188284612d80565b91508190509392505050565b600061322f82612e1a565b915061323b8284612c78565b60208201915081905092915050565b60006132558261313f565b9150819050919050565b60006020820190506132746000830184612c4b565b92915050565b600060608201905061328f6000830186612c4b565b61329c6020830185612c4b565b81810360408301526132ae8184612d47565b9050949350505050565b60006080820190506132cd6000830187612c4b565b6132da6020830186612c4b565b6132e760408301856131cb565b81810360608301526132f98184612c8f565b905095945050505050565b60006060820190506133196000830186612c4b565b818103602083015261332b8185612d47565b905061333a60408301846131cb565b949350505050565b60006040820190506133576000830185612c4b565b61336460208301846131cb565b9392505050565b60006020820190506133806000830184612c5a565b92915050565b600060808201905061339b6000830187612c69565b6133a860208301866131da565b6133b56040830185612c69565b6133c26060830184612c69565b95945050505050565b600060208201905081810360008301526133e58184612d47565b905092915050565b6000602082019050818103600083015261340681612db1565b9050919050565b6000602082019050818103600083015261342681612dd4565b9050919050565b6000602082019050818103600083015261344681612df7565b9050919050565b6000602082019050818103600083015261346681612e3d565b9050919050565b6000602082019050818103600083015261348681612e60565b9050919050565b600060208201905081810360008301526134a681612e83565b9050919050565b600060208201905081810360008301526134c681612ea6565b9050919050565b600060208201905081810360008301526134e681612ec9565b9050919050565b6000602082019050818103600083015261350681612eec565b9050919050565b6000602082019050818103600083015261352681612f0f565b9050919050565b6000602082019050818103600083015261354681612f32565b9050919050565b6000602082019050818103600083015261356681612f55565b9050919050565b6000602082019050818103600083015261358681612f78565b9050919050565b600060208201905081810360008301526135a681612f9b565b9050919050565b600060208201905081810360008301526135c681612fbe565b9050919050565b600060208201905081810360008301526135e681612fe1565b9050919050565b6000602082019050818103600083015261360681613004565b9050919050565b6000602082019050818103600083015261362681613027565b9050919050565b600060208201905081810360008301526136468161304a565b9050919050565b600060208201905081810360008301526136668161306d565b9050919050565b6000602082019050818103600083015261368681613090565b9050919050565b600060208201905081810360008301526136a6816130b3565b9050919050565b600060208201905081810360008301526136c6816130d6565b9050919050565b600060208201905081810360008301526136e6816130f9565b9050919050565b600060208201905081810360008301526137068161311c565b9050919050565b6000602082019050818103600083015261372681613162565b9050919050565b6000602082019050818103600083015261374681613185565b9050919050565b60006020820190508181036000830152613766816131a8565b9050919050565b600060208201905061378260008301846131cb565b92915050565b60006137926137a3565b905061379e8282613ab2565b919050565b6000604051905090565b600067ffffffffffffffff8211156137c8576137c7613ba4565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156137f4576137f3613ba4565b5b6137fd82613bd3565b9050602081019050919050565b600067ffffffffffffffff82111561382557613824613ba4565b5b61382e82613bd3565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006138a982613a27565b91506138b483613a27565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156138e9576138e8613b17565b5b828201905092915050565b60006138ff82613a27565b915061390a83613a27565b92508261391a57613919613b46565b5b828204905092915050565b600061393082613a27565b915061393b83613a27565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561397457613973613b17565b5b828202905092915050565b600061398a82613a27565b915061399583613a27565b9250828210156139a8576139a7613b17565b5b828203905092915050565b60006139be82613a07565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015613a6b578082015181840152602081019050613a50565b83811115613a7a576000848401525b50505050565b60006002820490506001821680613a9857607f821691505b60208210811415613aac57613aab613b75565b5b50919050565b613abb82613bd3565b810181811067ffffffffffffffff82111715613ada57613ad9613ba4565b5b80604052505050565b6000613aee82613a31565b915060ff821415613b0257613b01613b17565b5b600182019050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b7f536f6c644f757400000000000000000000000000000000000000000000000000600082015250565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b7f55524920717565727920666f72206e6f6e6578697374656e7420746f6b656e00600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4e6f7420617574686f72697a656420746f206d696e7400000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f45434453413a20696e76616c6964207369676e6174757265202776272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f56616c75652062656c6f77207072696365000000000000000000000000000000600082015250565b7f55524920736574206f66206e6f6e6578697374656e7420746f6b656e00000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f436f6c6c656374696f6e20616c72656164792072657665616c65640000000000600082015250565b7f4f7574206f662074696d65000000000000000000000000000000000000000000600082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4d696e696d756d20636f756e7400000000000000000000000000000000000000600082015250565b614283816139b3565b811461428e57600080fd5b50565b61429a816139c5565b81146142a557600080fd5b50565b6142b1816139d1565b81146142bc57600080fd5b50565b6142c8816139db565b81146142d357600080fd5b50565b6142df81613a27565b81146142ea57600080fd5b50565b6142f681613a31565b811461430157600080fd5b5056fea2646970667358221220741c3d45f3ac6ee0f4dab766ab565fefeb5ef3031d633e35d1fe10e28702983964736f6c63430008010033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000005b68747470733a2f2f6170692e6b6f616c616d696e742e636f6d2f643664656463623432383861643631656630643037376634643562346538346536336438336133313633383730626635396466333865663430353266616439352f0000000000
-----Decoded View---------------
Arg [0] : _baseURIextended (string): https://api.koalamint.com/d6dedcb4288ad61ef0d077f4d5b4e84e63d83a3163870bf59df38ef4052fad95/
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 000000000000000000000000000000000000000000000000000000000000005b
Arg [2] : 68747470733a2f2f6170692e6b6f616c616d696e742e636f6d2f643664656463
Arg [3] : 6234323838616436316566306430373766346435623465383465363364383361
Arg [4] : 33313633383730626635396466333865663430353266616439352f0000000000
Deployed Bytecode Sourcemap
272:4024:11:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1505:300:5;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2423:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3935:217;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3473:401;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4662:330;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2705:1016:11;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5058:179:5;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1449:241:11;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2126:235:5;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1823:98:11;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1864:205:5;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1661:101:10;;;;;;;;;;;;;:::i;:::-;;2382:317:11;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1029:85:10;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2585:102:5;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4219:153;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5303:320;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2055:321:11;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4438:162:5;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1911:198:10;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1505:300:5;1607:4;1657:25;1642:40;;;:11;:40;;;;:104;;;;1713:33;1698:48;;;:11;:48;;;;1642:104;:156;;;;1762:36;1786:11;1762:23;:36::i;:::-;1642:156;1623:175;;1505:300;;;:::o;2423:98::-;2477:13;2509:5;2502:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2423:98;:::o;3935:217::-;4011:7;4038:16;4046:7;4038;:16::i;:::-;4030:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;4121:15;:24;4137:7;4121:24;;;;;;;;;;;;;;;;;;;;;4114:31;;3935:217;;;:::o;3473:401::-;3553:13;3569:23;3584:7;3569:14;:23::i;:::-;3553:39;;3616:5;3610:11;;:2;:11;;;;3602:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;3707:5;3691:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;3716:37;3733:5;3740:12;:10;:12::i;:::-;3716:16;:37::i;:::-;3691:62;3670:165;;;;;;;;;;;;:::i;:::-;;;;;;;;;3846:21;3855:2;3859:7;3846:8;:21::i;:::-;3473:401;;;:::o;4662:330::-;4851:41;4870:12;:10;:12::i;:::-;4884:7;4851:18;:41::i;:::-;4843:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;4957:28;4967:4;4973:2;4977:7;4957:9;:28::i;:::-;4662:330;;;:::o;2705:1016:11:-;2857:32;2871:10;:17;867:7;2857:13;;:32;;;;:::i;:::-;2844:9;:45;;2836:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;2970:10;:17;2942:25;:15;:23;:25::i;:::-;:45;;;;:::i;:::-;2929:9;;:58;;2921:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;3037:1;3017:10;:17;:21;3009:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;3067:18;3088:60;3108:3;3113:10;3124:1;3113:13;;;;;;;;;;;;;;;;;;;;;;3128:10;3140:1;3143;3146;3088:19;:60::i;:::-;3067:81;;745:42;3166:27;;:10;:27;;;3158:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;3271:3;3253:15;:21;;;;:::i;:::-;3239:10;:35;;3231:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;3306:7;3301:104;3323:10;:17;3319:1;:21;;;3301:104;;;3360:34;3375:3;3380:10;3391:1;3380:13;;;;;;;;;;;;;;;;;;;;;;;;3360:14;:34::i;:::-;3342:3;;;;;:::i;:::-;;;;3301:104;;;;3423:14;3440:9;3423:26;;3485:1;918;3472:14;3468:196;;;3501:19;3523:31;3550:3;3523:22;918:1;3523:6;:10;;:22;;;;:::i;:::-;:26;;:31;;;;:::i;:::-;3501:53;;3586:11;3577:6;:20;;;;:::i;:::-;3568:29;;3611:42;566;3641:11;3611:8;:42::i;:::-;3468:196;;3682:32;656:42;3707:6;3682:8;:32::i;:::-;2705:1016;;;;;;;;:::o;5058:179:5:-;5191:39;5208:4;5214:2;5218:7;5191:39;;;;;;;;;;;;:16;:39::i;:::-;5058:179;;;:::o;1449:241:11:-;1252:12:10;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1595:16:11::1;1579:34;;;;;;1558:15;1542:33;;;;;;:::i;:::-;;;;;;;;:71;;1534:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;1655:28;1666:16;1655:10;:28::i;:::-;1449:241:::0;:::o;2126:235:5:-;2198:7;2217:13;2233:7;:16;2241:7;2233:16;;;;;;;;;;;;;;;;;;;;;2217:32;;2284:1;2267:19;;:5;:19;;;;2259:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2349:5;2342:12;;;2126:235;;;:::o;1823:98:11:-;1252:12:10;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1904:10:11::1;1892:9;:22;;;;1823:98:::0;:::o;1864:205:5:-;1936:7;1980:1;1963:19;;:5;:19;;;;1955:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;2046:9;:16;2056:5;2046:16;;;;;;;;;;;;;;;;2039:23;;1864:205;;;:::o;1661:101:10:-;1252:12;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1725:30:::1;1752:1;1725:18;:30::i;:::-;1661:101::o:0;2382:317:11:-;2529:7;2554:138;2652:3;2657:9;2668:10;2641:38;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2631:49;;;;;;2578:103;;;;;;;;:::i;:::-;;;;;;;;;;;;;2568:114;;;;;;2684:1;2687;2690;2554:13;:138::i;:::-;2547:145;;2382:317;;;;;;;;:::o;1029:85:10:-;1075:7;1101:6;;;;;;;;;;;1094:13;;1029:85;:::o;2585:102:5:-;2641:13;2673:7;2666:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2585:102;:::o;4219:153::-;4313:52;4332:12;:10;:12::i;:::-;4346:8;4356;4313:18;:52::i;:::-;4219:153;;:::o;5303:320::-;5472:41;5491:12;:10;:12::i;:::-;5505:7;5472:18;:41::i;:::-;5464:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;5577:39;5591:4;5597:2;5601:7;5610:5;5577:13;:39::i;:::-;5303:320;;;;:::o;2055:321:11:-;2128:13;2161:16;2169:7;2161;:16::i;:::-;2153:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;2224:23;2250:10;:19;2261:7;2250:19;;;;;;;;;;;2224:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2279:18;2300:10;:8;:10::i;:::-;2279:31;;2352:4;2358:9;2335:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2321:48;;;;2055:321;;;:::o;4438:162:5:-;4535:4;4558:18;:25;4577:5;4558:25;;;;;;;;;;;;;;;:35;4584:8;4558:35;;;;;;;;;;;;;;;;;;;;;;;;;4551:42;;4438:162;;;;:::o;1911:198:10:-;1252:12;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2019:1:::1;1999:22;;:8;:22;;;;1991:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2074:28;2093:8;2074:18;:28::i;:::-;1911:198:::0;:::o;829:155:4:-;914:4;952:25;937:40;;;:11;:40;;;;930:47;;829:155;;;:::o;7095:125:5:-;7160:4;7211:1;7183:30;;:7;:16;7191:7;7183:16;;;;;;;;;;;;;;;;;;;;;:30;;;;7176:37;;7095:125;;;:::o;640:96:1:-;693:7;719:10;712:17;;640:96;:::o;11104:171:5:-;11205:2;11178:15;:24;11194:7;11178:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;11260:7;11256:2;11222:46;;11231:23;11246:7;11231:14;:23::i;:::-;11222:46;;;;;;;;;;;;11104:171;;:::o;7378:344::-;7471:4;7495:16;7503:7;7495;:16::i;:::-;7487:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7570:13;7586:23;7601:7;7586:14;:23::i;:::-;7570:39;;7638:5;7627:16;;:7;:16;;;:52;;;;7647:32;7664:5;7671:7;7647:16;:32::i;:::-;7627:52;:87;;;;7707:7;7683:31;;:20;7695:7;7683:11;:20::i;:::-;:31;;;7627:87;7619:96;;;7378:344;;;;:::o;10388:605::-;10542:4;10515:31;;:23;10530:7;10515:14;:23::i;:::-;:31;;;10507:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;10620:1;10606:16;;:2;:16;;;;10598:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;10674:39;10695:4;10701:2;10705:7;10674:20;:39::i;:::-;10775:29;10792:1;10796:7;10775:8;:29::i;:::-;10834:1;10815:9;:15;10825:4;10815:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;10862:1;10845:9;:13;10855:2;10845:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;10892:2;10873:7;:16;10881:7;10873:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;10929:7;10925:2;10910:27;;10919:4;10910:27;;;;;;;;;;;;10948:38;10968:4;10974:2;10978:7;10948:19;:38::i;:::-;10388:605;;;:::o;3465:96:12:-;3523:7;3553:1;3549;:5;;;;:::i;:::-;3542:12;;3465:96;;;;:::o;827:112:2:-;892:7;918;:14;;;911:21;;827:112;;;:::o;3727:356:11:-;3807:16;3826:25;:15;:23;:25::i;:::-;3807:44;;3870:27;:15;:25;:27::i;:::-;3929:1;3918:8;:12;;;;:::i;:::-;3907:23;;3940:20;3946:3;3951:8;3940:5;:20::i;:::-;3970:33;3983:8;3993:9;3970:12;:33::i;:::-;4035:8;4019:57;656:42;4061:3;4066:9;4019:57;;;;;;;;:::i;:::-;;;;;;;;3727:356;;;:::o;3850:96:12:-;3908:7;3938:1;3934;:5;;;;:::i;:::-;3927:12;;3850:96;;;;:::o;4089:205:11:-;4153:12;4171:2;:7;;4186:5;4171:25;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4152:44;;;4214:7;4206:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;4257:30;4277:2;4281:5;4257:30;;;;;;;:::i;:::-;;;;;;;;4089:205;;;:::o;1696:121::-;1252:12:10;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1794:16:11::1;1776:15;:34;;;;;;;;;;;;:::i;:::-;;1696:121:::0;:::o;2263:187:10:-;2336:16;2355:6;;;;;;;;;;;2336:25;;2380:8;2371:6;;:17;;;;;;;;;;;;;;;;;;2434:8;2403:40;;2424:8;2403:40;;;;;;;;;;;;2263:187;;:::o;7451:270:3:-;7574:7;7594:17;7613:18;7635:25;7646:4;7652:1;7655;7658;7635:10;:25::i;:::-;7593:67;;;;7670:18;7682:5;7670:11;:18::i;:::-;7705:9;7698:16;;;;7451:270;;;;;;:::o;11410:307:5:-;11560:8;11551:17;;:5;:17;;;;11543:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;11646:8;11608:18;:25;11627:5;11608:25;;;;;;;;;;;;;;;:35;11634:8;11608:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;11691:8;11669:41;;11684:5;11669:41;;;11701:8;11669:41;;;;;;:::i;:::-;;;;;;;;11410:307;;;:::o;6485:::-;6636:28;6646:4;6652:2;6656:7;6636:9;:28::i;:::-;6682:48;6705:4;6711:2;6715:7;6724:5;6682:22;:48::i;:::-;6674:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;6485:307;;;;:::o;1931:114:11:-;1991:13;2023:15;2016:22;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1931:114;:::o;13604:122:5:-;;;;:::o;14098:121::-;;;;:::o;945:123:2:-;1050:1;1032:7;:14;;;:19;;;;;;;;;;;945:123;:::o;9014:427:5:-;9107:1;9093:16;;:2;:16;;;;9085:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;9165:16;9173:7;9165;:16::i;:::-;9164:17;9156:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;9225:45;9254:1;9258:2;9262:7;9225:20;:45::i;:::-;9298:1;9281:9;:13;9291:2;9281:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;9328:2;9309:7;:16;9317:7;9309:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;9371:7;9367:2;9346:33;;9363:1;9346:33;;;;;;;;;;;;9390:44;9418:1;9422:2;9426:7;9390:19;:44::i;:::-;9014:427;;:::o;1243:196:11:-;1342:16;1350:7;1342;:16::i;:::-;1334:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;1423:9;1401:10;:19;1412:7;1401:19;;;;;;;;;;;:31;;;;;;;;;;;;:::i;:::-;;1243:196;;:::o;5715:1603:3:-;5841:7;5850:12;6765:66;6760:1;6752:10;;:79;6748:161;;;6863:1;6867:30;6847:51;;;;;;6748:161;6927:2;6922:1;:7;;;;:18;;;;;6938:2;6933:1;:7;;;;6922:18;6918:100;;;6972:1;6976:30;6956:51;;;;;;6918:100;7112:14;7129:24;7139:4;7145:1;7148;7151;7129:24;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7112:41;;7185:1;7167:20;;:6;:20;;;7163:101;;;7219:1;7223:29;7203:50;;;;;;;7163:101;7282:6;7290:20;7274:37;;;;;5715:1603;;;;;;;;:::o;547:631::-;624:20;615:29;;;;;;;;;;;;;;;;:5;:29;;;;;;;;;;;;;;;;;611:561;;;660:7;;611:561;720:29;711:38;;;;;;;;;;;;;;;;:5;:38;;;;;;;;;;;;;;;;;707:465;;;765:34;;;;;;;;;;:::i;:::-;;;;;;;;707:465;829:35;820:44;;;;;;;;;;;;;;;;:5;:44;;;;;;;;;;;;;;;;;816:356;;;880:41;;;;;;;;;;:::i;:::-;;;;;;;;816:356;951:30;942:39;;;;;;;;;;;;;;;;:5;:39;;;;;;;;;;;;;;;;;938:234;;;997:44;;;;;;;;;;:::i;:::-;;;;;;;;938:234;1071:30;1062:39;;;;;;;;;;;;;;;;:5;:39;;;;;;;;;;;;;;;;;1058:114;;;1117:44;;;;;;;;;;:::i;:::-;;;;;;;;1058:114;547:631;;:::o;12270:778:5:-;12420:4;12440:15;:2;:13;;;:15::i;:::-;12436:606;;;12491:2;12475:36;;;12512:12;:10;:12::i;:::-;12526:4;12532:7;12541:5;12475:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;12471:519;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12731:1;12714:6;:13;:18;12710:266;;;12756:60;;;;;;;;;;:::i;:::-;;;;;;;;12710:266;12928:6;12922:13;12913:6;12909:2;12905:15;12898:38;12471:519;12607:41;;;12597:51;;;:6;:51;;;;12590:58;;;;;12436:606;13027:4;13020:11;;12270:778;;;;;;;:::o;1175:320:0:-;1235:4;1487:1;1465:7;:19;;;:23;1458:30;;1175:320;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;23:616:14:-;;154:91;170:74;237:6;170:74;:::i;:::-;154:91;:::i;:::-;145:100;;265:5;293:6;286:5;279:21;319:4;312:5;308:16;301:23;;344:6;375:1;360:273;385:6;382:1;379:13;360:273;;;477:3;464:17;456:6;452:30;507:47;550:3;538:10;507:47;:::i;:::-;502:3;495:60;584:4;579:3;575:14;568:21;;618:4;613:3;609:14;602:21;;420:213;407:1;404;400:9;395:14;;360:273;;;364:14;135:504;;;;;;;:::o;645:343::-;;747:65;763:48;804:6;763:48;:::i;:::-;747:65;:::i;:::-;738:74;;835:6;828:5;821:21;873:4;866:5;862:16;911:3;902:6;897:3;893:16;890:25;887:2;;;928:1;925;918:12;887:2;941:41;975:6;970:3;965;941:41;:::i;:::-;728:260;;;;;;:::o;994:345::-;;1097:66;1113:49;1155:6;1113:49;:::i;:::-;1097:66;:::i;:::-;1088:75;;1186:6;1179:5;1172:21;1224:4;1217:5;1213:16;1262:3;1253:6;1248:3;1244:16;1241:25;1238:2;;;1279:1;1276;1269:12;1238:2;1292:41;1326:6;1321:3;1316;1292:41;:::i;:::-;1078:261;;;;;;:::o;1345:139::-;;1429:6;1416:20;1407:29;;1445:33;1472:5;1445:33;:::i;:::-;1397:87;;;;:::o;1506:323::-;;1636:3;1629:4;1621:6;1617:17;1613:27;1603:2;;1654:1;1651;1644:12;1603:2;1694:6;1681:20;1719:104;1819:3;1811:6;1804:4;1796:6;1792:17;1719:104;:::i;:::-;1710:113;;1593:236;;;;;:::o;1835:133::-;;1916:6;1903:20;1894:29;;1932:30;1956:5;1932:30;:::i;:::-;1884:84;;;;:::o;1974:139::-;;2058:6;2045:20;2036:29;;2074:33;2101:5;2074:33;:::i;:::-;2026:87;;;;:::o;2119:137::-;;2202:6;2189:20;2180:29;;2218:32;2244:5;2218:32;:::i;:::-;2170:86;;;;:::o;2262:141::-;;2349:6;2343:13;2334:22;;2365:32;2391:5;2365:32;:::i;:::-;2324:79;;;;:::o;2422:271::-;;2526:3;2519:4;2511:6;2507:17;2503:27;2493:2;;2544:1;2541;2534:12;2493:2;2584:6;2571:20;2609:78;2683:3;2675:6;2668:4;2660:6;2656:17;2609:78;:::i;:::-;2600:87;;2483:210;;;;;:::o;2713:273::-;;2818:3;2811:4;2803:6;2799:17;2795:27;2785:2;;2836:1;2833;2826:12;2785:2;2876:6;2863:20;2901:79;2976:3;2968:6;2961:4;2953:6;2949:17;2901:79;:::i;:::-;2892:88;;2775:211;;;;;:::o;2992:139::-;;3076:6;3063:20;3054:29;;3092:33;3119:5;3092:33;:::i;:::-;3044:87;;;;:::o;3137:135::-;;3219:6;3206:20;3197:29;;3235:31;3260:5;3235:31;:::i;:::-;3187:85;;;;:::o;3278:262::-;;3386:2;3374:9;3365:7;3361:23;3357:32;3354:2;;;3402:1;3399;3392:12;3354:2;3445:1;3470:53;3515:7;3506:6;3495:9;3491:22;3470:53;:::i;:::-;3460:63;;3416:117;3344:196;;;;:::o;3546:407::-;;;3671:2;3659:9;3650:7;3646:23;3642:32;3639:2;;;3687:1;3684;3677:12;3639:2;3730:1;3755:53;3800:7;3791:6;3780:9;3776:22;3755:53;:::i;:::-;3745:63;;3701:117;3857:2;3883:53;3928:7;3919:6;3908:9;3904:22;3883:53;:::i;:::-;3873:63;;3828:118;3629:324;;;;;:::o;3959:552::-;;;;4101:2;4089:9;4080:7;4076:23;4072:32;4069:2;;;4117:1;4114;4107:12;4069:2;4160:1;4185:53;4230:7;4221:6;4210:9;4206:22;4185:53;:::i;:::-;4175:63;;4131:117;4287:2;4313:53;4358:7;4349:6;4338:9;4334:22;4313:53;:::i;:::-;4303:63;;4258:118;4415:2;4441:53;4486:7;4477:6;4466:9;4462:22;4441:53;:::i;:::-;4431:63;;4386:118;4059:452;;;;;:::o;4517:809::-;;;;;4685:3;4673:9;4664:7;4660:23;4656:33;4653:2;;;4702:1;4699;4692:12;4653:2;4745:1;4770:53;4815:7;4806:6;4795:9;4791:22;4770:53;:::i;:::-;4760:63;;4716:117;4872:2;4898:53;4943:7;4934:6;4923:9;4919:22;4898:53;:::i;:::-;4888:63;;4843:118;5000:2;5026:53;5071:7;5062:6;5051:9;5047:22;5026:53;:::i;:::-;5016:63;;4971:118;5156:2;5145:9;5141:18;5128:32;5187:18;5179:6;5176:30;5173:2;;;5219:1;5216;5209:12;5173:2;5247:62;5301:7;5292:6;5281:9;5277:22;5247:62;:::i;:::-;5237:72;;5099:220;4643:683;;;;;;;:::o;5332:1149::-;;;;;;;5558:3;5546:9;5537:7;5533:23;5529:33;5526:2;;;5575:1;5572;5565:12;5526:2;5618:1;5643:53;5688:7;5679:6;5668:9;5664:22;5643:53;:::i;:::-;5633:63;;5589:117;5773:2;5762:9;5758:18;5745:32;5804:18;5796:6;5793:30;5790:2;;;5836:1;5833;5826:12;5790:2;5864:88;5944:7;5935:6;5924:9;5920:22;5864:88;:::i;:::-;5854:98;;5716:246;6001:2;6027:53;6072:7;6063:6;6052:9;6048:22;6027:53;:::i;:::-;6017:63;;5972:118;6129:2;6155:51;6198:7;6189:6;6178:9;6174:22;6155:51;:::i;:::-;6145:61;;6100:116;6255:3;6282:53;6327:7;6318:6;6307:9;6303:22;6282:53;:::i;:::-;6272:63;;6226:119;6384:3;6411:53;6456:7;6447:6;6436:9;6432:22;6411:53;:::i;:::-;6401:63;;6355:119;5516:965;;;;;;;;:::o;6487:401::-;;;6609:2;6597:9;6588:7;6584:23;6580:32;6577:2;;;6625:1;6622;6615:12;6577:2;6668:1;6693:53;6738:7;6729:6;6718:9;6714:22;6693:53;:::i;:::-;6683:63;;6639:117;6795:2;6821:50;6863:7;6854:6;6843:9;6839:22;6821:50;:::i;:::-;6811:60;;6766:115;6567:321;;;;;:::o;6894:1099::-;;;;;;;7095:3;7083:9;7074:7;7070:23;7066:33;7063:2;;;7112:1;7109;7102:12;7063:2;7155:1;7180:53;7225:7;7216:6;7205:9;7201:22;7180:53;:::i;:::-;7170:63;;7126:117;7310:2;7299:9;7295:18;7282:32;7341:18;7333:6;7330:30;7327:2;;;7373:1;7370;7363:12;7327:2;7401:63;7456:7;7447:6;7436:9;7432:22;7401:63;:::i;:::-;7391:73;;7253:221;7513:2;7539:53;7584:7;7575:6;7564:9;7560:22;7539:53;:::i;:::-;7529:63;;7484:118;7641:2;7667:51;7710:7;7701:6;7690:9;7686:22;7667:51;:::i;:::-;7657:61;;7612:116;7767:3;7794:53;7839:7;7830:6;7819:9;7815:22;7794:53;:::i;:::-;7784:63;;7738:119;7896:3;7923:53;7968:7;7959:6;7948:9;7944:22;7923:53;:::i;:::-;7913:63;;7867:119;7053:940;;;;;;;;:::o;7999:407::-;;;8124:2;8112:9;8103:7;8099:23;8095:32;8092:2;;;8140:1;8137;8130:12;8092:2;8183:1;8208:53;8253:7;8244:6;8233:9;8229:22;8208:53;:::i;:::-;8198:63;;8154:117;8310:2;8336:53;8381:7;8372:6;8361:9;8357:22;8336:53;:::i;:::-;8326:63;;8281:118;8082:324;;;;;:::o;8412:260::-;;8519:2;8507:9;8498:7;8494:23;8490:32;8487:2;;;8535:1;8532;8525:12;8487:2;8578:1;8603:52;8647:7;8638:6;8627:9;8623:22;8603:52;:::i;:::-;8593:62;;8549:116;8477:195;;;;:::o;8678:282::-;;8796:2;8784:9;8775:7;8771:23;8767:32;8764:2;;;8812:1;8809;8802:12;8764:2;8855:1;8880:63;8935:7;8926:6;8915:9;8911:22;8880:63;:::i;:::-;8870:73;;8826:127;8754:206;;;;:::o;8966:375::-;;9084:2;9072:9;9063:7;9059:23;9055:32;9052:2;;;9100:1;9097;9090:12;9052:2;9171:1;9160:9;9156:17;9143:31;9201:18;9193:6;9190:30;9187:2;;;9233:1;9230;9223:12;9187:2;9261:63;9316:7;9307:6;9296:9;9292:22;9261:63;:::i;:::-;9251:73;;9114:220;9042:299;;;;:::o;9347:262::-;;9455:2;9443:9;9434:7;9430:23;9426:32;9423:2;;;9471:1;9468;9461:12;9423:2;9514:1;9539:53;9584:7;9575:6;9564:9;9560:22;9539:53;:::i;:::-;9529:63;;9485:117;9413:196;;;;:::o;9615:118::-;9702:24;9720:5;9702:24;:::i;:::-;9697:3;9690:37;9680:53;;:::o;9739:109::-;9820:21;9835:5;9820:21;:::i;:::-;9815:3;9808:34;9798:50;;:::o;9854:118::-;9941:24;9959:5;9941:24;:::i;:::-;9936:3;9929:37;9919:53;;:::o;9978:157::-;10083:45;10103:24;10121:5;10103:24;:::i;:::-;10083:45;:::i;:::-;10078:3;10071:58;10061:74;;:::o;10141:360::-;;10255:38;10287:5;10255:38;:::i;:::-;10309:70;10372:6;10367:3;10309:70;:::i;:::-;10302:77;;10388:52;10433:6;10428:3;10421:4;10414:5;10410:16;10388:52;:::i;:::-;10465:29;10487:6;10465:29;:::i;:::-;10460:3;10456:39;10449:46;;10231:270;;;;;:::o;10529:849::-;;10671:5;10665:12;10700:36;10726:9;10700:36;:::i;:::-;10752:88;10833:6;10828:3;10752:88;:::i;:::-;10745:95;;10871:1;10860:9;10856:17;10887:1;10882:137;;;;11033:1;11028:344;;;;10849:523;;10882:137;10966:4;10962:9;10951;10947:25;10942:3;10935:38;11002:6;10997:3;10993:16;10986:23;;10882:137;;11028:344;11095:41;11130:5;11095:41;:::i;:::-;11158:1;11172:154;11186:6;11183:1;11180:13;11172:154;;;11260:7;11254:14;11250:1;11245:3;11241:11;11234:35;11310:1;11301:7;11297:15;11286:26;;11208:4;11205:1;11201:12;11196:17;;11172:154;;;11355:6;11350:3;11346:16;11339:23;;11035:337;;10849:523;;10638:740;;;;;;:::o;11384:364::-;;11500:39;11533:5;11500:39;:::i;:::-;11555:71;11619:6;11614:3;11555:71;:::i;:::-;11548:78;;11635:52;11680:6;11675:3;11668:4;11661:5;11657:16;11635:52;:::i;:::-;11712:29;11734:6;11712:29;:::i;:::-;11707:3;11703:39;11696:46;;11476:272;;;;;:::o;11754:377::-;;11888:39;11921:5;11888:39;:::i;:::-;11943:89;12025:6;12020:3;11943:89;:::i;:::-;11936:96;;12041:52;12086:6;12081:3;12074:4;12067:5;12063:16;12041:52;:::i;:::-;12118:6;12113:3;12109:16;12102:23;;11864:267;;;;;:::o;12137:366::-;;12300:67;12364:2;12359:3;12300:67;:::i;:::-;12293:74;;12376:93;12465:3;12376:93;:::i;:::-;12494:2;12489:3;12485:12;12478:19;;12283:220;;;:::o;12509:365::-;;12672:66;12736:1;12731:3;12672:66;:::i;:::-;12665:73;;12747:93;12836:3;12747:93;:::i;:::-;12865:2;12860:3;12856:12;12849:19;;12655:219;;;:::o;12880:366::-;;13043:67;13107:2;13102:3;13043:67;:::i;:::-;13036:74;;13119:93;13208:3;13119:93;:::i;:::-;13237:2;13232:3;13228:12;13221:19;;13026:220;;;:::o;13252:402::-;;13433:85;13515:2;13510:3;13433:85;:::i;:::-;13426:92;;13527:93;13616:3;13527:93;:::i;:::-;13645:2;13640:3;13636:12;13629:19;;13416:238;;;:::o;13660:366::-;;13823:67;13887:2;13882:3;13823:67;:::i;:::-;13816:74;;13899:93;13988:3;13899:93;:::i;:::-;14017:2;14012:3;14008:12;14001:19;;13806:220;;;:::o;14032:366::-;;14195:67;14259:2;14254:3;14195:67;:::i;:::-;14188:74;;14271:93;14360:3;14271:93;:::i;:::-;14389:2;14384:3;14380:12;14373:19;;14178:220;;;:::o;14404:366::-;;14567:67;14631:2;14626:3;14567:67;:::i;:::-;14560:74;;14643:93;14732:3;14643:93;:::i;:::-;14761:2;14756:3;14752:12;14745:19;;14550:220;;;:::o;14776:366::-;;14939:67;15003:2;14998:3;14939:67;:::i;:::-;14932:74;;15015:93;15104:3;15015:93;:::i;:::-;15133:2;15128:3;15124:12;15117:19;;14922:220;;;:::o;15148:366::-;;15311:67;15375:2;15370:3;15311:67;:::i;:::-;15304:74;;15387:93;15476:3;15387:93;:::i;:::-;15505:2;15500:3;15496:12;15489:19;;15294:220;;;:::o;15520:366::-;;15683:67;15747:2;15742:3;15683:67;:::i;:::-;15676:74;;15759:93;15848:3;15759:93;:::i;:::-;15877:2;15872:3;15868:12;15861:19;;15666:220;;;:::o;15892:366::-;;16055:67;16119:2;16114:3;16055:67;:::i;:::-;16048:74;;16131:93;16220:3;16131:93;:::i;:::-;16249:2;16244:3;16240:12;16233:19;;16038:220;;;:::o;16264:366::-;;16427:67;16491:2;16486:3;16427:67;:::i;:::-;16420:74;;16503:93;16592:3;16503:93;:::i;:::-;16621:2;16616:3;16612:12;16605:19;;16410:220;;;:::o;16636:366::-;;16799:67;16863:2;16858:3;16799:67;:::i;:::-;16792:74;;16875:93;16964:3;16875:93;:::i;:::-;16993:2;16988:3;16984:12;16977:19;;16782:220;;;:::o;17008:366::-;;17171:67;17235:2;17230:3;17171:67;:::i;:::-;17164:74;;17247:93;17336:3;17247:93;:::i;:::-;17365:2;17360:3;17356:12;17349:19;;17154:220;;;:::o;17380:366::-;;17543:67;17607:2;17602:3;17543:67;:::i;:::-;17536:74;;17619:93;17708:3;17619:93;:::i;:::-;17737:2;17732:3;17728:12;17721:19;;17526:220;;;:::o;17752:366::-;;17915:67;17979:2;17974:3;17915:67;:::i;:::-;17908:74;;17991:93;18080:3;17991:93;:::i;:::-;18109:2;18104:3;18100:12;18093:19;;17898:220;;;:::o;18124:366::-;;18287:67;18351:2;18346:3;18287:67;:::i;:::-;18280:74;;18363:93;18452:3;18363:93;:::i;:::-;18481:2;18476:3;18472:12;18465:19;;18270:220;;;:::o;18496:366::-;;18659:67;18723:2;18718:3;18659:67;:::i;:::-;18652:74;;18735:93;18824:3;18735:93;:::i;:::-;18853:2;18848:3;18844:12;18837:19;;18642:220;;;:::o;18868:366::-;;19031:67;19095:2;19090:3;19031:67;:::i;:::-;19024:74;;19107:93;19196:3;19107:93;:::i;:::-;19225:2;19220:3;19216:12;19209:19;;19014:220;;;:::o;19240:366::-;;19403:67;19467:2;19462:3;19403:67;:::i;:::-;19396:74;;19479:93;19568:3;19479:93;:::i;:::-;19597:2;19592:3;19588:12;19581:19;;19386:220;;;:::o;19612:366::-;;19775:67;19839:2;19834:3;19775:67;:::i;:::-;19768:74;;19851:93;19940:3;19851:93;:::i;:::-;19969:2;19964:3;19960:12;19953:19;;19758:220;;;:::o;19984:366::-;;20147:67;20211:2;20206:3;20147:67;:::i;:::-;20140:74;;20223:93;20312:3;20223:93;:::i;:::-;20341:2;20336:3;20332:12;20325:19;;20130:220;;;:::o;20356:366::-;;20519:67;20583:2;20578:3;20519:67;:::i;:::-;20512:74;;20595:93;20684:3;20595:93;:::i;:::-;20713:2;20708:3;20704:12;20697:19;;20502:220;;;:::o;20728:366::-;;20891:67;20955:2;20950:3;20891:67;:::i;:::-;20884:74;;20967:93;21056:3;20967:93;:::i;:::-;21085:2;21080:3;21076:12;21069:19;;20874:220;;;:::o;21100:366::-;;21263:67;21327:2;21322:3;21263:67;:::i;:::-;21256:74;;21339:93;21428:3;21339:93;:::i;:::-;21457:2;21452:3;21448:12;21441:19;;21246:220;;;:::o;21472:366::-;;21635:67;21699:2;21694:3;21635:67;:::i;:::-;21628:74;;21711:93;21800:3;21711:93;:::i;:::-;21829:2;21824:3;21820:12;21813:19;;21618:220;;;:::o;21844:398::-;;22024:83;22105:1;22100:3;22024:83;:::i;:::-;22017:90;;22116:93;22205:3;22116:93;:::i;:::-;22234:1;22229:3;22225:11;22218:18;;22007:235;;;:::o;22248:366::-;;22411:67;22475:2;22470:3;22411:67;:::i;:::-;22404:74;;22487:93;22576:3;22487:93;:::i;:::-;22605:2;22600:3;22596:12;22589:19;;22394:220;;;:::o;22620:366::-;;22783:67;22847:2;22842:3;22783:67;:::i;:::-;22776:74;;22859:93;22948:3;22859:93;:::i;:::-;22977:2;22972:3;22968:12;22961:19;;22766:220;;;:::o;22992:366::-;;23155:67;23219:2;23214:3;23155:67;:::i;:::-;23148:74;;23231:93;23320:3;23231:93;:::i;:::-;23349:2;23344:3;23340:12;23333:19;;23138:220;;;:::o;23364:118::-;23451:24;23469:5;23451:24;:::i;:::-;23446:3;23439:37;23429:53;;:::o;23488:112::-;23571:22;23587:5;23571:22;:::i;:::-;23566:3;23559:35;23549:51;;:::o;23606:273::-;;23759:94;23849:3;23840:6;23759:94;:::i;:::-;23752:101;;23870:3;23863:10;;23741:138;;;;:::o;23885:435::-;;24087:95;24178:3;24169:6;24087:95;:::i;:::-;24080:102;;24199:95;24290:3;24281:6;24199:95;:::i;:::-;24192:102;;24311:3;24304:10;;24069:251;;;;;:::o;24326:522::-;;24561:148;24705:3;24561:148;:::i;:::-;24554:155;;24719:75;24790:3;24781:6;24719:75;:::i;:::-;24819:2;24814:3;24810:12;24803:19;;24839:3;24832:10;;24543:305;;;;:::o;24854:379::-;;25060:147;25203:3;25060:147;:::i;:::-;25053:154;;25224:3;25217:10;;25042:191;;;:::o;25239:222::-;;25370:2;25359:9;25355:18;25347:26;;25383:71;25451:1;25440:9;25436:17;25427:6;25383:71;:::i;:::-;25337:124;;;;:::o;25467:533::-;;25674:2;25663:9;25659:18;25651:26;;25687:71;25755:1;25744:9;25740:17;25731:6;25687:71;:::i;:::-;25768:72;25836:2;25825:9;25821:18;25812:6;25768:72;:::i;:::-;25887:9;25881:4;25877:20;25872:2;25861:9;25857:18;25850:48;25915:78;25988:4;25979:6;25915:78;:::i;:::-;25907:86;;25641:359;;;;;;:::o;26006:640::-;;26239:3;26228:9;26224:19;26216:27;;26253:71;26321:1;26310:9;26306:17;26297:6;26253:71;:::i;:::-;26334:72;26402:2;26391:9;26387:18;26378:6;26334:72;:::i;:::-;26416;26484:2;26473:9;26469:18;26460:6;26416:72;:::i;:::-;26535:9;26529:4;26525:20;26520:2;26509:9;26505:18;26498:48;26563:76;26634:4;26625:6;26563:76;:::i;:::-;26555:84;;26206:440;;;;;;;:::o;26652:533::-;;26859:2;26848:9;26844:18;26836:26;;26872:71;26940:1;26929:9;26925:17;26916:6;26872:71;:::i;:::-;26990:9;26984:4;26980:20;26975:2;26964:9;26960:18;26953:48;27018:78;27091:4;27082:6;27018:78;:::i;:::-;27010:86;;27106:72;27174:2;27163:9;27159:18;27150:6;27106:72;:::i;:::-;26826:359;;;;;;:::o;27191:332::-;;27350:2;27339:9;27335:18;27327:26;;27363:71;27431:1;27420:9;27416:17;27407:6;27363:71;:::i;:::-;27444:72;27512:2;27501:9;27497:18;27488:6;27444:72;:::i;:::-;27317:206;;;;;:::o;27529:210::-;;27654:2;27643:9;27639:18;27631:26;;27667:65;27729:1;27718:9;27714:17;27705:6;27667:65;:::i;:::-;27621:118;;;;:::o;27745:545::-;;27956:3;27945:9;27941:19;27933:27;;27970:71;28038:1;28027:9;28023:17;28014:6;27970:71;:::i;:::-;28051:68;28115:2;28104:9;28100:18;28091:6;28051:68;:::i;:::-;28129:72;28197:2;28186:9;28182:18;28173:6;28129:72;:::i;:::-;28211;28279:2;28268:9;28264:18;28255:6;28211:72;:::i;:::-;27923:367;;;;;;;:::o;28296:313::-;;28447:2;28436:9;28432:18;28424:26;;28496:9;28490:4;28486:20;28482:1;28471:9;28467:17;28460:47;28524:78;28597:4;28588:6;28524:78;:::i;:::-;28516:86;;28414:195;;;;:::o;28615:419::-;;28819:2;28808:9;28804:18;28796:26;;28868:9;28862:4;28858:20;28854:1;28843:9;28839:17;28832:47;28896:131;29022:4;28896:131;:::i;:::-;28888:139;;28786:248;;;:::o;29040:419::-;;29244:2;29233:9;29229:18;29221:26;;29293:9;29287:4;29283:20;29279:1;29268:9;29264:17;29257:47;29321:131;29447:4;29321:131;:::i;:::-;29313:139;;29211:248;;;:::o;29465:419::-;;29669:2;29658:9;29654:18;29646:26;;29718:9;29712:4;29708:20;29704:1;29693:9;29689:17;29682:47;29746:131;29872:4;29746:131;:::i;:::-;29738:139;;29636:248;;;:::o;29890:419::-;;30094:2;30083:9;30079:18;30071:26;;30143:9;30137:4;30133:20;30129:1;30118:9;30114:17;30107:47;30171:131;30297:4;30171:131;:::i;:::-;30163:139;;30061:248;;;:::o;30315:419::-;;30519:2;30508:9;30504:18;30496:26;;30568:9;30562:4;30558:20;30554:1;30543:9;30539:17;30532:47;30596:131;30722:4;30596:131;:::i;:::-;30588:139;;30486:248;;;:::o;30740:419::-;;30944:2;30933:9;30929:18;30921:26;;30993:9;30987:4;30983:20;30979:1;30968:9;30964:17;30957:47;31021:131;31147:4;31021:131;:::i;:::-;31013:139;;30911:248;;;:::o;31165:419::-;;31369:2;31358:9;31354:18;31346:26;;31418:9;31412:4;31408:20;31404:1;31393:9;31389:17;31382:47;31446:131;31572:4;31446:131;:::i;:::-;31438:139;;31336:248;;;:::o;31590:419::-;;31794:2;31783:9;31779:18;31771:26;;31843:9;31837:4;31833:20;31829:1;31818:9;31814:17;31807:47;31871:131;31997:4;31871:131;:::i;:::-;31863:139;;31761:248;;;:::o;32015:419::-;;32219:2;32208:9;32204:18;32196:26;;32268:9;32262:4;32258:20;32254:1;32243:9;32239:17;32232:47;32296:131;32422:4;32296:131;:::i;:::-;32288:139;;32186:248;;;:::o;32440:419::-;;32644:2;32633:9;32629:18;32621:26;;32693:9;32687:4;32683:20;32679:1;32668:9;32664:17;32657:47;32721:131;32847:4;32721:131;:::i;:::-;32713:139;;32611:248;;;:::o;32865:419::-;;33069:2;33058:9;33054:18;33046:26;;33118:9;33112:4;33108:20;33104:1;33093:9;33089:17;33082:47;33146:131;33272:4;33146:131;:::i;:::-;33138:139;;33036:248;;;:::o;33290:419::-;;33494:2;33483:9;33479:18;33471:26;;33543:9;33537:4;33533:20;33529:1;33518:9;33514:17;33507:47;33571:131;33697:4;33571:131;:::i;:::-;33563:139;;33461:248;;;:::o;33715:419::-;;33919:2;33908:9;33904:18;33896:26;;33968:9;33962:4;33958:20;33954:1;33943:9;33939:17;33932:47;33996:131;34122:4;33996:131;:::i;:::-;33988:139;;33886:248;;;:::o;34140:419::-;;34344:2;34333:9;34329:18;34321:26;;34393:9;34387:4;34383:20;34379:1;34368:9;34364:17;34357:47;34421:131;34547:4;34421:131;:::i;:::-;34413:139;;34311:248;;;:::o;34565:419::-;;34769:2;34758:9;34754:18;34746:26;;34818:9;34812:4;34808:20;34804:1;34793:9;34789:17;34782:47;34846:131;34972:4;34846:131;:::i;:::-;34838:139;;34736:248;;;:::o;34990:419::-;;35194:2;35183:9;35179:18;35171:26;;35243:9;35237:4;35233:20;35229:1;35218:9;35214:17;35207:47;35271:131;35397:4;35271:131;:::i;:::-;35263:139;;35161:248;;;:::o;35415:419::-;;35619:2;35608:9;35604:18;35596:26;;35668:9;35662:4;35658:20;35654:1;35643:9;35639:17;35632:47;35696:131;35822:4;35696:131;:::i;:::-;35688:139;;35586:248;;;:::o;35840:419::-;;36044:2;36033:9;36029:18;36021:26;;36093:9;36087:4;36083:20;36079:1;36068:9;36064:17;36057:47;36121:131;36247:4;36121:131;:::i;:::-;36113:139;;36011:248;;;:::o;36265:419::-;;36469:2;36458:9;36454:18;36446:26;;36518:9;36512:4;36508:20;36504:1;36493:9;36489:17;36482:47;36546:131;36672:4;36546:131;:::i;:::-;36538:139;;36436:248;;;:::o;36690:419::-;;36894:2;36883:9;36879:18;36871:26;;36943:9;36937:4;36933:20;36929:1;36918:9;36914:17;36907:47;36971:131;37097:4;36971:131;:::i;:::-;36963:139;;36861:248;;;:::o;37115:419::-;;37319:2;37308:9;37304:18;37296:26;;37368:9;37362:4;37358:20;37354:1;37343:9;37339:17;37332:47;37396:131;37522:4;37396:131;:::i;:::-;37388:139;;37286:248;;;:::o;37540:419::-;;37744:2;37733:9;37729:18;37721:26;;37793:9;37787:4;37783:20;37779:1;37768:9;37764:17;37757:47;37821:131;37947:4;37821:131;:::i;:::-;37813:139;;37711:248;;;:::o;37965:419::-;;38169:2;38158:9;38154:18;38146:26;;38218:9;38212:4;38208:20;38204:1;38193:9;38189:17;38182:47;38246:131;38372:4;38246:131;:::i;:::-;38238:139;;38136:248;;;:::o;38390:419::-;;38594:2;38583:9;38579:18;38571:26;;38643:9;38637:4;38633:20;38629:1;38618:9;38614:17;38607:47;38671:131;38797:4;38671:131;:::i;:::-;38663:139;;38561:248;;;:::o;38815:419::-;;39019:2;39008:9;39004:18;38996:26;;39068:9;39062:4;39058:20;39054:1;39043:9;39039:17;39032:47;39096:131;39222:4;39096:131;:::i;:::-;39088:139;;38986:248;;;:::o;39240:419::-;;39444:2;39433:9;39429:18;39421:26;;39493:9;39487:4;39483:20;39479:1;39468:9;39464:17;39457:47;39521:131;39647:4;39521:131;:::i;:::-;39513:139;;39411:248;;;:::o;39665:419::-;;39869:2;39858:9;39854:18;39846:26;;39918:9;39912:4;39908:20;39904:1;39893:9;39889:17;39882:47;39946:131;40072:4;39946:131;:::i;:::-;39938:139;;39836:248;;;:::o;40090:419::-;;40294:2;40283:9;40279:18;40271:26;;40343:9;40337:4;40333:20;40329:1;40318:9;40314:17;40307:47;40371:131;40497:4;40371:131;:::i;:::-;40363:139;;40261:248;;;:::o;40515:222::-;;40646:2;40635:9;40631:18;40623:26;;40659:71;40727:1;40716:9;40712:17;40703:6;40659:71;:::i;:::-;40613:124;;;;:::o;40743:129::-;;40804:20;;:::i;:::-;40794:30;;40833:33;40861:4;40853:6;40833:33;:::i;:::-;40784:88;;;:::o;40878:75::-;;40944:2;40938:9;40928:19;;40918:35;:::o;40959:321::-;;41136:18;41128:6;41125:30;41122:2;;;41158:18;;:::i;:::-;41122:2;41208:4;41200:6;41196:17;41188:25;;41268:4;41262;41258:15;41250:23;;41051:229;;;:::o;41286:307::-;;41437:18;41429:6;41426:30;41423:2;;;41459:18;;:::i;:::-;41423:2;41497:29;41519:6;41497:29;:::i;:::-;41489:37;;41581:4;41575;41571:15;41563:23;;41352:241;;;:::o;41599:308::-;;41751:18;41743:6;41740:30;41737:2;;;41773:18;;:::i;:::-;41737:2;41811:29;41833:6;41811:29;:::i;:::-;41803:37;;41895:4;41889;41885:15;41877:23;;41666:241;;;:::o;41913:144::-;;41988:3;41980:11;;42011:3;42008:1;42001:14;42045:4;42042:1;42032:18;42024:26;;41970:87;;;:::o;42063:98::-;;42148:5;42142:12;42132:22;;42121:40;;;:::o;42167:99::-;;42253:5;42247:12;42237:22;;42226:40;;;:::o;42272:168::-;;42389:6;42384:3;42377:19;42429:4;42424:3;42420:14;42405:29;;42367:73;;;;:::o;42446:147::-;;42584:3;42569:18;;42559:34;;;;:::o;42599:169::-;;42717:6;42712:3;42705:19;42757:4;42752:3;42748:14;42733:29;;42695:73;;;;:::o;42774:148::-;;42913:3;42898:18;;42888:34;;;;:::o;42928:305::-;;42987:20;43005:1;42987:20;:::i;:::-;42982:25;;43021:20;43039:1;43021:20;:::i;:::-;43016:25;;43175:1;43107:66;43103:74;43100:1;43097:81;43094:2;;;43181:18;;:::i;:::-;43094:2;43225:1;43222;43218:9;43211:16;;42972:261;;;;:::o;43239:185::-;;43296:20;43314:1;43296:20;:::i;:::-;43291:25;;43330:20;43348:1;43330:20;:::i;:::-;43325:25;;43369:1;43359:2;;43374:18;;:::i;:::-;43359:2;43416:1;43413;43409:9;43404:14;;43281:143;;;;:::o;43430:348::-;;43493:20;43511:1;43493:20;:::i;:::-;43488:25;;43527:20;43545:1;43527:20;:::i;:::-;43522:25;;43715:1;43647:66;43643:74;43640:1;43637:81;43632:1;43625:9;43618:17;43614:105;43611:2;;;43722:18;;:::i;:::-;43611:2;43770:1;43767;43763:9;43752:20;;43478:300;;;;:::o;43784:191::-;;43844:20;43862:1;43844:20;:::i;:::-;43839:25;;43878:20;43896:1;43878:20;:::i;:::-;43873:25;;43917:1;43914;43911:8;43908:2;;;43922:18;;:::i;:::-;43908:2;43967:1;43964;43960:9;43952:17;;43829:146;;;;:::o;43981:96::-;;44047:24;44065:5;44047:24;:::i;:::-;44036:35;;44026:51;;;:::o;44083:90::-;;44160:5;44153:13;44146:21;44135:32;;44125:48;;;:::o;44179:77::-;;44245:5;44234:16;;44224:32;;;:::o;44262:149::-;;44338:66;44331:5;44327:78;44316:89;;44306:105;;;:::o;44417:126::-;;44494:42;44487:5;44483:54;44472:65;;44462:81;;;:::o;44549:77::-;;44615:5;44604:16;;44594:32;;;:::o;44632:86::-;;44707:4;44700:5;44696:16;44685:27;;44675:43;;;:::o;44724:154::-;44808:6;44803:3;44798;44785:30;44870:1;44861:6;44856:3;44852:16;44845:27;44775:103;;;:::o;44884:307::-;44952:1;44962:113;44976:6;44973:1;44970:13;44962:113;;;45061:1;45056:3;45052:11;45046:18;45042:1;45037:3;45033:11;45026:39;44998:2;44995:1;44991:10;44986:15;;44962:113;;;45093:6;45090:1;45087:13;45084:2;;;45173:1;45164:6;45159:3;45155:16;45148:27;45084:2;44933:258;;;;:::o;45197:320::-;;45278:1;45272:4;45268:12;45258:22;;45325:1;45319:4;45315:12;45346:18;45336:2;;45402:4;45394:6;45390:17;45380:27;;45336:2;45464;45456:6;45453:14;45433:18;45430:38;45427:2;;;45483:18;;:::i;:::-;45427:2;45248:269;;;;:::o;45523:281::-;45606:27;45628:4;45606:27;:::i;:::-;45598:6;45594:40;45736:6;45724:10;45721:22;45700:18;45688:10;45685:34;45682:62;45679:2;;;45747:18;;:::i;:::-;45679:2;45787:10;45783:2;45776:22;45566:238;;;:::o;45810:167::-;;45870:22;45886:5;45870:22;:::i;:::-;45861:31;;45914:4;45907:5;45904:15;45901:2;;;45922:18;;:::i;:::-;45901:2;45969:1;45962:5;45958:13;45951:20;;45851:126;;;:::o;45983:79::-;;46051:5;46040:16;;46030:32;;;:::o;46068:180::-;46116:77;46113:1;46106:88;46213:4;46210:1;46203:15;46237:4;46234:1;46227:15;46254:180;46302:77;46299:1;46292:88;46399:4;46396:1;46389:15;46423:4;46420:1;46413:15;46440:180;46488:77;46485:1;46478:88;46585:4;46582:1;46575:15;46609:4;46606:1;46599:15;46626:180;46674:77;46671:1;46664:88;46771:4;46768:1;46761:15;46795:4;46792:1;46785:15;46812:102;;46904:2;46900:7;46895:2;46888:5;46884:14;46880:28;46870:38;;46860:54;;;:::o;46920:174::-;47060:26;47056:1;47048:6;47044:14;47037:50;47026:68;:::o;47100:157::-;47240:9;47236:1;47228:6;47224:14;47217:33;47206:51;:::o;47263:181::-;47403:33;47399:1;47391:6;47387:14;47380:57;47369:75;:::o;47450:214::-;47590:66;47586:1;47578:6;47574:14;47567:90;47556:108;:::o;47670:181::-;47810:33;47806:1;47798:6;47794:14;47787:57;47776:75;:::o;47857:237::-;47997:34;47993:1;47985:6;47981:14;47974:58;48066:20;48061:2;48053:6;48049:15;48042:45;47963:131;:::o;48100:225::-;48240:34;48236:1;48228:6;48224:14;48217:58;48309:8;48304:2;48296:6;48292:15;48285:33;48206:119;:::o;48331:224::-;48471:34;48467:1;48459:6;48455:14;48448:58;48540:7;48535:2;48527:6;48523:15;48516:32;48437:118;:::o;48561:178::-;48701:30;48697:1;48689:6;48685:14;48678:54;48667:72;:::o;48745:223::-;48885:34;48881:1;48873:6;48869:14;48862:58;48954:6;48949:2;48941:6;48937:15;48930:31;48851:117;:::o;48974:175::-;49114:27;49110:1;49102:6;49098:14;49091:51;49080:69;:::o;49155:221::-;49295:34;49291:1;49283:6;49279:14;49272:58;49364:4;49359:2;49351:6;49347:15;49340:29;49261:115;:::o;49382:231::-;49522:34;49518:1;49510:6;49506:14;49499:58;49591:14;49586:2;49578:6;49574:15;49567:39;49488:125;:::o;49619:172::-;49759:24;49755:1;49747:6;49743:14;49736:48;49725:66;:::o;49797:243::-;49937:34;49933:1;49925:6;49921:14;49914:58;50006:26;50001:2;49993:6;49989:15;49982:51;49903:137;:::o;50046:229::-;50186:34;50182:1;50174:6;50170:14;50163:58;50255:12;50250:2;50242:6;50238:15;50231:37;50152:123;:::o;50281:228::-;50421:34;50417:1;50409:6;50405:14;50398:58;50490:11;50485:2;50477:6;50473:15;50466:36;50387:122;:::o;50515:221::-;50655:34;50651:1;50643:6;50639:14;50632:58;50724:4;50719:2;50711:6;50707:15;50700:29;50621:115;:::o;50742:182::-;50882:34;50878:1;50870:6;50866:14;50859:58;50848:76;:::o;50930:231::-;51070:34;51066:1;51058:6;51054:14;51047:58;51139:14;51134:2;51126:6;51122:15;51115:39;51036:125;:::o;51167:182::-;51307:34;51303:1;51295:6;51291:14;51284:58;51273:76;:::o;51355:167::-;51495:19;51491:1;51483:6;51479:14;51472:43;51461:61;:::o;51528:178::-;51668:30;51664:1;51656:6;51652:14;51645:54;51634:72;:::o;51712:220::-;51852:34;51848:1;51840:6;51836:14;51829:58;51921:3;51916:2;51908:6;51904:15;51897:28;51818:114;:::o;51938:177::-;52078:29;52074:1;52066:6;52062:14;52055:53;52044:71;:::o;52121:161::-;52261:13;52257:1;52249:6;52245:14;52238:37;52227:55;:::o;52288:114::-;52394:8;:::o;52408:166::-;52548:18;52544:1;52536:6;52532:14;52525:42;52514:60;:::o;52580:236::-;52720:34;52716:1;52708:6;52704:14;52697:58;52789:19;52784:2;52776:6;52772:15;52765:44;52686:130;:::o;52822:163::-;52962:15;52958:1;52950:6;52946:14;52939:39;52928:57;:::o;52991:122::-;53064:24;53082:5;53064:24;:::i;:::-;53057:5;53054:35;53044:2;;53103:1;53100;53093:12;53044:2;53034:79;:::o;53119:116::-;53189:21;53204:5;53189:21;:::i;:::-;53182:5;53179:32;53169:2;;53225:1;53222;53215:12;53169:2;53159:76;:::o;53241:122::-;53314:24;53332:5;53314:24;:::i;:::-;53307:5;53304:35;53294:2;;53353:1;53350;53343:12;53294:2;53284:79;:::o;53369:120::-;53441:23;53458:5;53441:23;:::i;:::-;53434:5;53431:34;53421:2;;53479:1;53476;53469:12;53421:2;53411:78;:::o;53495:122::-;53568:24;53586:5;53568:24;:::i;:::-;53561:5;53558:35;53548:2;;53607:1;53604;53597:12;53548:2;53538:79;:::o;53623:118::-;53694:22;53710:5;53694:22;:::i;:::-;53687:5;53684:33;53674:2;;53731:1;53728;53721:12;53674:2;53664:77;:::o
Swarm Source
ipfs://741c3d45f3ac6ee0f4dab766ab565fefeb5ef3031d633e35d1fe10e287029839
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.