ERC-721
Overview
Max Total Supply
266 PUGAPES
Holders
88
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
10 PUGAPESLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
PugApesSociety
Compiler Version
v0.8.8+commit.dddeac2f
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.8; import "./ERC721.sol"; import "./IERC2981.sol"; import "./IERC20.sol"; import "./ECDSA.sol"; contract PugApesSociety is ERC721, IERC2981 { event newMint(address minter, uint id); address public devWallet; address public teamWallet; bool public mintingEnabled; bool public preMintingEnabled; uint16 public totalSupply; // total amount of minted tokens uint16 public maxSupply; uint16 public reserveAmount; uint16 public mintSupply; uint public mintPrice; uint public whitelistPrice; // uint16 public _tokenId; mapping(address => bool) claimedWithSKEY; mapping(address => uint8) amountPreMinted; mapping(bytes => bool) sigUsed; IERC721 constant old = IERC721(0x0D631e48f63C4d014667920d4a5a171A5Ab792Da); IERC721 constant baycContract = IERC721(0xBC4CA0EdA7647A8aB7C2061c2E118A18a936f13D); IERC721 constant maycContract = IERC721(0x60E4d786628Fea6478F785A6d7e704777c86a7c6); IERC20 constant sKeysContractERC20 = IERC20(0xb849C1077072466317cE9d170119A6e68C0879E7); constructor( uint _whitelistPriceInWei, uint _mintPriceInWei, uint16 _maxSupply, uint16 _reserveAmount ) ERC721("PugApe Society", "PUGAPES") { whitelistPrice = _whitelistPriceInWei; mintPrice = _mintPriceInWei; maxSupply = _maxSupply; reserveAmount = _reserveAmount; mintSupply = maxSupply - reserveAmount; } function migrateOld(address[] memory addresses, uint8[] memory amounts) external onlyOwner { for (uint8 i; i < addresses.length; i++) { address addr = addresses[i]; uint8 amount = amounts[i]; for (uint8 j; j < amount; j++) { _mintFunc(addr); } amountPreMinted[addr] = amounts[i]; } } function setWhitelistPriceWei(uint price) external onlyOwner { whitelistPrice = price; } function setMintPriceWei(uint price) external onlyOwner { mintPrice = price; } function releaseReserve(uint8 amountToRelease) external onlyOwner { uint newMintSupplyAmount = mintSupply + amountToRelease; uint newReserveAmount = reserveAmount - amountToRelease; require(newMintSupplyAmount <= maxSupply); require(newReserveAmount >= 0); reserveAmount -= amountToRelease; mintSupply = maxSupply - reserveAmount; } function addToReserve(uint8 amountToAdd) external onlyOwner { require(mintSupply - amountToAdd > totalSupply); reserveAmount += amountToAdd; mintSupply = maxSupply - reserveAmount; } function withdraw() external onlyOwner { uint bal = address(this).balance; payable(teamWallet).transfer(bal * 4 / 10); payable(devWallet).transfer(bal * 4 / 10); payable(owner()).transfer(bal * 2 / 10); } function setDevWallet(address _devWalletAddress) external onlyOwner { devWallet = _devWalletAddress; } function setTeamWallet(address _teamWalletAddress) external onlyOwner { teamWallet = _teamWalletAddress; } function getPreMintingState() external view returns(bool) { return preMintingEnabled; } function getMintingState() external view returns(bool) { return mintingEnabled; } function canPreMint(address _address, bytes memory _signature) public view returns(uint8 result) { bool inWhitelist = baycContract.balanceOf(_address) > 0 || maycContract.balanceOf(_address) > 0 || old.balanceOf(_address) > 0 || sKeysContractERC20.balanceOf(_address) > 0 || _validiateSig(_address, "whitelist", _signature); if (inWhitelist) { result = 15; } require(result >= amountPreMinted[_address], "PugApes: Address is not eligible to pre mint!"); result -= amountPreMinted[_address]; require(result > 0, "PugApes: Address is not eligible to pre mint!"); } function togglePreMinting() public onlyOwner { preMintingEnabled = !preMintingEnabled; } function togglePublicMinting() public onlyOwner { mintingEnabled = !mintingEnabled; } function _validiateSig(address _wallet, string memory s, bytes memory _signature) private view returns(bool) { return ECDSA.recover( ECDSA.toEthSignedMessageHash(keccak256(abi.encodePacked(_wallet, s))), _signature ) == owner(); } function mint(uint8 amount) public payable { mint(amount, ""); } function mint(uint8 amount, bytes memory sig) public payable { require(totalSupply + amount < mintSupply, "Purchace will exceed the token supply!"); if (!mintingEnabled) { require(preMintingEnabled, "Pre mint phase is over!"); require(msg.value == whitelistPrice * amount, "Ether value sent is not correct"); uint amountToPreMint = canPreMint(msg.sender, sig); require(amountToPreMint > 0, "Caller not eligable for a pre mint"); require(amount <= amountToPreMint, "Requested amount exeeds the amount the address can pre mint!"); _mintFuncLoop(msg.sender, amount); amountPreMinted[msg.sender] += amount; return; } require(msg.value == mintPrice * amount, "Ether value sent is not correct"); require(amount <= 10 && amount != 0, "Invalid requested amount!"); _mintFuncLoop(msg.sender, amount); } /** * @dev checks if an address is eligable to free mint (claim an airdrop) * @param _address the address to claim */ function canFreeMint(address _address, bytes memory _signature) public view returns(bool) { return _validiateSig(_address, "freemint", _signature); } function ownerMintFromReserve(uint8 amount) external onlyOwner { require(reserveAmount >= amount, "Not enough tokens left in reserve!"); _mintFuncLoop(msg.sender, amount); reserveAmount -= amount; } function claim(address to, uint8 amount, bytes calldata _signature) public { require(reserveAmount > 0, "No more tokens left to claim!"); require(reserveAmount >= amount, "Not enough tokens to claim!"); require(canFreeMint(to, _signature), "Caller is not eligable for an airdrop!"); _mintFuncLoop(to, amount); reserveAmount -= amount; } function getMessageData(address _address, string memory s) external pure returns(bytes32) { return keccak256(abi.encodePacked(_address, s)); } function _mintFuncLoop(address to, uint8 amount) private { for (uint8 i; amount > i; i++) _mintFunc(to); } function _mintFunc(address to) private { _safeMint(to, totalSupply); emit newMint(to, totalSupply); totalSupply++; } function supportsInterface(bytes4 interfaceId) public view virtual override(ERC721, IERC165) returns (bool) { return interfaceId == type(IERC2981).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC2981-royaltyInfo}. * @dev Royalty info for the exchange to read (using EIP-2981 royalty standard) * @param tokenId the token Id * @param salePrice the price the NFT was sold for * @dev returns: send a percent of the sale price to the royalty recievers address * @notice this function is to be called by exchanges to get the royalty information */ function royaltyInfo(uint256 tokenId, uint256 salePrice) external view override returns (address receiver, uint256 royaltyAmount) { require(_exists(tokenId), "ERC2981RoyaltyStandard: Royalty info for nonexistent token"); return (address(this), (salePrice * 75) / 1000); } }
// SPDX-License-Identifier: MIT // source https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Address.sol pragma solidity ^0.8.8; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } // /** // * @dev Replacement for Solidity's `transfer`: sends `amount` wei to // * `recipient`, forwarding all available gas and reverting on errors. // * // * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost // * of certain opcodes, possibly making contracts go over the 2300 gas limit // * imposed by `transfer`, making them unable to receive funds via // * `transfer`. {sendValue} removes this limitation. // * // * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. // * // * IMPORTANT: because control is transferred to `recipient`, care must be // * taken to not create reentrancy vulnerabilities. Consider using // * {ReentrancyGuard} or the // * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. // */ // function sendValue(address payable recipient, uint256 amount) internal { // require(address(this).balance >= amount, "Address: insufficient balance"); // (bool success, ) = recipient.call{value: amount}(""); // require(success, "Address: unable to send value, recipient may have reverted"); // } // /** // * @dev Performs a Solidity function call using a low level `call`. A // * plain `call` is an unsafe replacement for a function call: use this // * function instead. // * // * If `target` reverts with a revert reason, it is bubbled up by this // * function (like regular Solidity function calls). // * // * Returns the raw returned data. To convert to the expected return value, // * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. // * // * Requirements: // * // * - `target` must be a contract. // * - calling `target` with `data` must not revert. // * // * _Available since v3.1._ // */ // function functionCall(address target, bytes memory data) internal returns (bytes memory) { // return functionCall(target, data, "Address: low-level call failed"); // } // /** // * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with // * `errorMessage` as a fallback revert reason when `target` reverts. // * // * _Available since v3.1._ // */ // function functionCall( // address target, // bytes memory data, // string memory errorMessage // ) internal returns (bytes memory) { // return functionCallWithValue(target, data, 0, errorMessage); // } // /** // * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], // * but also transferring `value` wei to `target`. // * // * Requirements: // * // * - the calling contract must have an ETH balance of at least `value`. // * - the called Solidity function must be `payable`. // * // * _Available since v3.1._ // */ // function functionCallWithValue( // address target, // bytes memory data, // uint256 value // ) internal returns (bytes memory) { // return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); // } // /** // * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but // * with `errorMessage` as a fallback revert reason when `target` reverts. // * // * _Available since v3.1._ // */ // function functionCallWithValue( // address target, // bytes memory data, // uint256 value, // string memory errorMessage // ) internal returns (bytes memory) { // require(address(this).balance >= value, "Address: insufficient balance for call"); // require(isContract(target), "Address: call to non-contract"); // (bool success, bytes memory returndata) = target.call{value: value}(data); // return verifyCallResult(success, returndata, errorMessage); // } // /** // * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], // * but performing a static call. // * // * _Available since v3.3._ // */ // function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { // return functionStaticCall(target, data, "Address: low-level static call failed"); // } // /** // * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], // * but performing a static call. // * // * _Available since v3.3._ // */ // function functionStaticCall( // address target, // bytes memory data, // string memory errorMessage // ) internal view returns (bytes memory) { // require(isContract(target), "Address: static call to non-contract"); // (bool success, bytes memory returndata) = target.staticcall(data); // return verifyCallResult(success, returndata, errorMessage); // } // /** // * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], // * but performing a delegate call. // * // * _Available since v3.4._ // */ // function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { // return functionDelegateCall(target, data, "Address: low-level delegate call failed"); // } // /** // * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], // * but performing a delegate call. // * // * _Available since v3.4._ // */ // function functionDelegateCall( // address target, // bytes memory data, // string memory errorMessage // ) internal returns (bytes memory) { // require(isContract(target), "Address: delegate call to non-contract"); // (bool success, bytes memory returndata) = target.delegatecall(data); // return verifyCallResult(success, returndata, errorMessage); // } // /** // * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the // * revert reason using the provided one. // * // * _Available since v4.3._ // */ // function verifyCallResult( // bool success, // bytes memory returndata, // string memory errorMessage // ) internal pure returns (bytes memory) { // if (success) { // return returndata; // } else { // // Look for revert reason and bubble it up if present // if (returndata.length > 0) { // // The easiest way to bubble the revert reason is using memory via assembly // assembly { // let returndata_size := mload(returndata) // revert(add(32, returndata), returndata_size) // } // } else { // revert(errorMessage); // } // } // } }
// SPDX-License-Identifier: MIT // source: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Context.sol pragma solidity ^0.8.8; /** * @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.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; uint8 v; assembly { s := and(vs, 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) v := add(shr(255, vs), 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 // source: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/introspection/ERC165.sol pragma solidity ^0.8.8; 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 pragma solidity ^0.8.8; import "./IERC721.sol"; import "./IERC721Receiver.sol"; import "./IERC721Metadata.sol"; import "./Address.sol"; import "./Context.sol"; import "./Strings.sol"; import "./ERC165.sol"; import "./Ownable.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, Ownable, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // base URI string private baseURI; // 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"); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : "ipfs://QmQqXwJnNBzvQNZxYzttWf5bSYSSUMejALp16ZtsrYHayJ"; } /** * @dev sets base URI */ function setBaseURI(string memory _baseURI) public onlyOwner { baseURI = _baseURI; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.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 {} }
// SPDX-License-Identifier: MIT // source: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/introspection/IERC165.sol pragma solidity ^0.8.8; /** * @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 v4.3.2 (token/ERC20/IERC20.sol) pragma solidity ^0.8.8; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); }
// SPDX-License-Identifier: MIT // source: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/interfaces/IERC2981.sol pragma solidity ^0.8.8; import "./IERC165.sol"; /** * @dev Interface for the NFT Royalty Standard */ interface IERC2981 is IERC165 { /** * @dev Called with the sale price to determine how much royalty is owed and to whom. * @param tokenId - the NFT asset queried for royalty information * @param salePrice - the sale price of the NFT asset specified by `tokenId` * @return receiver - address of who should be sent the royalty payment * @return royaltyAmount - the royalty payment amount for `salePrice` */ function royaltyInfo(uint256 tokenId, uint256 salePrice) external view returns (address receiver, uint256 royaltyAmount); }
// SPDX-License-Identifier: MIT // source: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC721/IERC721.sol pragma solidity ^0.8.8; 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`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; }
// SPDX-License-Identifier: MIT // source: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC721/extensions/IERC721Metadata.sol pragma solidity ^0.8.8; 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 // source: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC721/IERC721Receiver.sol pragma solidity ^0.8.8; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); }
// SPDX-License-Identifier: MIT // source: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/Ownable.sol pragma solidity ^0.8.8; 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() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // source: Openzeppelin pragma solidity ^0.8.8; /** * @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
Contract ABI
API[{"inputs":[{"internalType":"uint256","name":"_whitelistPriceInWei","type":"uint256"},{"internalType":"uint256","name":"_mintPriceInWei","type":"uint256"},{"internalType":"uint16","name":"_maxSupply","type":"uint16"},{"internalType":"uint16","name":"_reserveAmount","type":"uint16"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"minter","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"}],"name":"newMint","type":"event"},{"inputs":[{"internalType":"uint8","name":"amountToAdd","type":"uint8"}],"name":"addToReserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bytes","name":"_signature","type":"bytes"}],"name":"canFreeMint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bytes","name":"_signature","type":"bytes"}],"name":"canPreMint","outputs":[{"internalType":"uint8","name":"result","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint8","name":"amount","type":"uint8"},{"internalType":"bytes","name":"_signature","type":"bytes"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"_address","type":"address"},{"internalType":"string","name":"s","type":"string"}],"name":"getMessageData","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getMintingState","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPreMintingState","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint8[]","name":"amounts","type":"uint8[]"}],"name":"migrateOld","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"amount","type":"uint8"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint8","name":"amount","type":"uint8"},{"internalType":"bytes","name":"sig","type":"bytes"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintSupply","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"uint8","name":"amount","type":"uint8"}],"name":"ownerMintFromReserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preMintingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"amountToRelease","type":"uint8"}],"name":"releaseReserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reserveAmount","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"salePrice","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"royaltyAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_devWalletAddress","type":"address"}],"name":"setDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"name":"setMintPriceWei","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_teamWalletAddress","type":"address"}],"name":"setTeamWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"name":"setWhitelistPriceWei","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"togglePreMinting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"togglePublicMinting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"whitelistPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b50604051620039c5380380620039c5833981016040819052620000349162000253565b6040518060400160405280600e81526020016d50756741706520536f636965747960901b815250604051806040016040528060078152602001665055474150455360c81b815250620000956200008f6200014160201b60201c565b62000145565b8151620000aa90600190602085019062000195565b508051620000c090600290602084019062000195565b505050600b849055600a8390556009805463ffffffff60c01b1916600160c01b61ffff858116820261ffff60d01b191692909217600160d01b858416810291909117938490556200011b93908104831692919004166200029e565b6009601c6101000a81548161ffff021916908361ffff160217905550505050506200030d565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b828054620001a390620002d0565b90600052602060002090601f016020900481019282620001c7576000855562000212565b82601f10620001e257805160ff191683800117855562000212565b8280016001018555821562000212579182015b8281111562000212578251825591602001919060010190620001f5565b506200022092915062000224565b5090565b5b8082111562000220576000815560010162000225565b805161ffff811681146200024e57600080fd5b919050565b600080600080608085870312156200026a57600080fd5b845193506020850151925062000283604086016200023b565b915062000293606086016200023b565b905092959194509250565b600061ffff83811690831681811015620002c857634e487b7160e01b600052601160045260246000fd5b039392505050565b600181811c90821680620002e557607f821691505b602082108114156200030757634e487b7160e01b600052602260045260246000fd5b50919050565b6136a8806200031d6000396000f3fe6080604052600436106102885760003560e01c80636ecd23061161015a578063ac5b4978116100c1578063d227fe1d1161007a578063d227fe1d146107d9578063d52a18e0146107f9578063d5abeb0114610819578063e985e9c51461083b578063f2fde38b14610884578063fc1a1c36146108a457600080fd5b8063ac5b497814610724578063b88d4fde14610744578063bcbd5f3914610764578063c225948314610779578063c87b56dd1461079a578063cb96bfdf146107ba57600080fd5b80638fc2866e116101135780638fc2866e1461066957806395d89b41146106895780639bb243861461069e5780639fd6db12146106b1578063a22cb465146106d2578063a7efd153146106f257600080fd5b80636ecd2306146105c35780636fba75c8146105d657806370a08231146105f6578063715018a6146106165780638da5cb5b1461062b5780638ea5220f1461064957600080fd5b80632a55205a116101fe57806355f804b3116101b757806355f804b31461050a578063587b6b271461052a57806359927044146105585780636352211e146105785780636817c76c146105985780636b8a21fc146105ae57600080fd5b80632a55205a14610434578063304efccb146104735780633ccfd60b1461049357806342842e0e146104a85780634b09b72a146104c85780634dcb2b3f146104ea57600080fd5b80631525ff7d116102505780631525ff7d1461037357806315ebd1231461039357806318160ddd146103b35780631f53ac02146103d557806323b872dd146103f557806327701f751461041557600080fd5b806301ffc9a71461028d578063045b7dca146102c257806306fdde03146102f7578063081812fc14610319578063095ea7b314610351575b600080fd5b34801561029957600080fd5b506102ad6102a8366004612c20565b6108ba565b60405190151581526020015b60405180910390f35b3480156102ce57600080fd5b506009546102e490600160e01b900461ffff1681565b60405161ffff90911681526020016102b9565b34801561030357600080fd5b5061030c6108e5565b6040516102b99190612c95565b34801561032557600080fd5b50610339610334366004612ca8565b610977565b6040516001600160a01b0390911681526020016102b9565b34801561035d57600080fd5b5061037161036c366004612cdd565b610a11565b005b34801561037f57600080fd5b5061037161038e366004612d07565b610b27565b34801561039f57600080fd5b506103716103ae366004612ca8565b610b73565b3480156103bf57600080fd5b506009546102e490600160b01b900461ffff1681565b3480156103e157600080fd5b506103716103f0366004612d07565b610ba2565b34801561040157600080fd5b50610371610410366004612d22565b610bee565b34801561042157600080fd5b50600954600160a01b900460ff166102ad565b34801561044057600080fd5b5061045461044f366004612d5e565b610c1f565b604080516001600160a01b0390931683526020830191909152016102b9565b34801561047f57600080fd5b5061037161048e366004612d91565b610cd0565b34801561049f57600080fd5b50610371610daa565b3480156104b457600080fd5b506103716104c3366004612d22565b610ec6565b3480156104d457600080fd5b506009546102e490600160d01b900461ffff1681565b3480156104f657600080fd5b50610371610505366004612d91565b610ee1565b34801561051657600080fd5b50610371610525366004612e63565b610fc0565b34801561053657600080fd5b5061054a610545366004612e98565b610ffd565b6040519081526020016102b9565b34801561056457600080fd5b50600954610339906001600160a01b031681565b34801561058457600080fd5b50610339610593366004612ca8565b611030565b3480156105a457600080fd5b5061054a600a5481565b3480156105ba57600080fd5b506103716110a7565b6103716105d1366004612d91565b6110f2565b3480156105e257600080fd5b506103716105f1366004612ca8565b61110e565b34801561060257600080fd5b5061054a610611366004612d07565b61113d565b34801561062257600080fd5b506103716111c4565b34801561063757600080fd5b506000546001600160a01b0316610339565b34801561065557600080fd5b50600854610339906001600160a01b031681565b34801561067557600080fd5b50610371610684366004612d91565b6111fa565b34801561069557600080fd5b5061030c611305565b6103716106ac366004612ee6565b611314565b3480156106bd57600080fd5b506009546102ad90600160a01b900460ff1681565b3480156106de57600080fd5b506103716106ed366004612f02565b61165c565b3480156106fe57600080fd5b5061071261070d366004612e98565b611721565b60405160ff90911681526020016102b9565b34801561073057600080fd5b5061037161073f366004612fd4565b611a46565b34801561075057600080fd5b5061037161075f36600461308a565b611b4e565b34801561077057600080fd5b50610371611b86565b34801561078557600080fd5b506009546102ad90600160a81b900460ff1681565b3480156107a657600080fd5b5061030c6107b5366004612ca8565b611bd1565b3480156107c657600080fd5b50600954600160a81b900460ff166102ad565b3480156107e557600080fd5b506103716107f43660046130f2565b611cb5565b34801561080557600080fd5b506102ad610814366004612e98565b611e57565b34801561082557600080fd5b506009546102e490600160c01b900461ffff1681565b34801561084757600080fd5b506102ad610856366004613180565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b34801561089057600080fd5b5061037161089f366004612d07565b611e8b565b3480156108b057600080fd5b5061054a600b5481565b60006001600160e01b0319821663152a902d60e11b14806108df57506108df82611f23565b92915050565b6060600180546108f4906131b3565b80601f0160208091040260200160405190810160405280929190818152602001828054610920906131b3565b801561096d5780601f106109425761010080835404028352916020019161096d565b820191906000526020600020905b81548152906001019060200180831161095057829003601f168201915b5050505050905090565b6000818152600460205260408120546001600160a01b03166109f55760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600660205260409020546001600160a01b031690565b6000610a1c82611030565b9050806001600160a01b0316836001600160a01b03161415610a8a5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016109ec565b336001600160a01b0382161480610aa65750610aa68133610856565b610b185760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016109ec565b610b228383611f73565b505050565b6000546001600160a01b03163314610b515760405162461bcd60e51b81526004016109ec906131ee565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610b9d5760405162461bcd60e51b81526004016109ec906131ee565b600a55565b6000546001600160a01b03163314610bcc5760405162461bcd60e51b81526004016109ec906131ee565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b610bf83382611fe1565b610c145760405162461bcd60e51b81526004016109ec90613223565b610b228383836120d8565b60008281526004602052604081205481906001600160a01b0316610cab5760405162461bcd60e51b815260206004820152603a60248201527f45524332393831526f79616c74795374616e646172643a20526f79616c74792060448201527f696e666f20666f72206e6f6e6578697374656e7420746f6b656e00000000000060648201526084016109ec565b306103e8610cba85604b61328a565b610cc491906132bf565b915091505b9250929050565b6000546001600160a01b03163314610cfa5760405162461bcd60e51b81526004016109ec906131ee565b60095461ffff600160b01b8204811691610d209160ff851691600160e01b9004166132d3565b61ffff1611610d2e57600080fd5b8060ff166009601a8282829054906101000a900461ffff16610d5091906132f6565b82546101009290920a61ffff818102199093169183160217909155600954610d8b9250600160d01b8104821691600160c01b909104166132d3565b6009601c6101000a81548161ffff021916908361ffff16021790555050565b6000546001600160a01b03163314610dd45760405162461bcd60e51b81526004016109ec906131ee565b60095447906001600160a01b03166108fc600a610df284600461328a565b610dfc91906132bf565b6040518115909202916000818181858888f19350505050158015610e24573d6000803e3d6000fd5b506008546001600160a01b03166108fc600a610e4184600461328a565b610e4b91906132bf565b6040518115909202916000818181858888f19350505050158015610e73573d6000803e3d6000fd5b506000546001600160a01b03166108fc600a610e9084600261328a565b610e9a91906132bf565b6040518115909202916000818181858888f19350505050158015610ec2573d6000803e3d6000fd5b5050565b610b2283838360405180602001604052806000815250611b4e565b6000546001600160a01b03163314610f0b5760405162461bcd60e51b81526004016109ec906131ee565b60095460ff8216600160d01b90910461ffff161015610f775760405162461bcd60e51b815260206004820152602260248201527f4e6f7420656e6f75676820746f6b656e73206c65667420696e20726573657276604482015261652160f01b60648201526084016109ec565b610f813382612278565b8060ff166009601a8282829054906101000a900461ffff16610fa391906132d3565b92506101000a81548161ffff021916908361ffff16021790555050565b6000546001600160a01b03163314610fea5760405162461bcd60e51b81526004016109ec906131ee565b8051610ec2906003906020840190612b71565b60008282604051602001611012929190613338565b60405160208183030381529060405280519060200120905092915050565b6000818152600460205260408120546001600160a01b0316806108df5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016109ec565b6000546001600160a01b031633146110d15760405162461bcd60e51b81526004016109ec906131ee565b6009805460ff60a01b198116600160a01b9182900460ff1615909102179055565b61110b8160405180602001604052806000815250611314565b50565b6000546001600160a01b031633146111385760405162461bcd60e51b81526004016109ec906131ee565b600b55565b60006001600160a01b0382166111a85760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016109ec565b506001600160a01b031660009081526005602052604090205490565b6000546001600160a01b031633146111ee5760405162461bcd60e51b81526004016109ec906131ee565b6111f860006122a4565b565b6000546001600160a01b031633146112245760405162461bcd60e51b81526004016109ec906131ee565b6009546000906112439060ff841690600160e01b900461ffff166132f6565b60095461ffff91821692506000916112689160ff861691600160d01b909104166132d3565b60095461ffff9182169250600160c01b90041682111561128757600080fd5b8260ff166009601a8282829054906101000a900461ffff166112a991906132d3565b82546101009290920a61ffff8181021990931691831602179091556009546112e49250600160d01b8104821691600160c01b909104166132d3565b6009601c6101000a81548161ffff021916908361ffff160217905550505050565b6060600280546108f4906131b3565b60095461ffff600160e01b820481169161133a9160ff861691600160b01b9004166132f6565b61ffff161061139a5760405162461bcd60e51b815260206004820152602660248201527f50757263686163652077696c6c206578636565642074686520746f6b656e20736044820152657570706c792160d01b60648201526084016109ec565b600954600160a01b900460ff1661159157600954600160a81b900460ff166114045760405162461bcd60e51b815260206004820152601760248201527f507265206d696e74207068617365206973206f7665722100000000000000000060448201526064016109ec565b8160ff16600b54611415919061328a565b34146114635760405162461bcd60e51b815260206004820152601f60248201527f45746865722076616c75652073656e74206973206e6f7420636f72726563740060448201526064016109ec565b600061146f3383611721565b60ff169050600081116114cf5760405162461bcd60e51b815260206004820152602260248201527f43616c6c6572206e6f7420656c696761626c6520666f72206120707265206d696044820152611b9d60f21b60648201526084016109ec565b808360ff1611156115485760405162461bcd60e51b815260206004820152603c60248201527f52657175657374656420616d6f756e74206578656564732074686520616d6f7560448201527f6e742074686520616464726573732063616e20707265206d696e74210000000060648201526084016109ec565b6115523384612278565b336000908152600d60205260408120805485929061157490849060ff16613370565b92506101000a81548160ff021916908360ff160217905550505050565b8160ff16600a546115a2919061328a565b34146115f05760405162461bcd60e51b815260206004820152601f60248201527f45746865722076616c75652073656e74206973206e6f7420636f72726563740060448201526064016109ec565b600a8260ff1611158015611606575060ff821615155b6116525760405162461bcd60e51b815260206004820152601960248201527f496e76616c69642072657175657374656420616d6f756e74210000000000000060448201526064016109ec565b610ec23383612278565b6001600160a01b0382163314156116b55760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016109ec565b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6040516370a0823160e01b81526001600160a01b03831660048201526000908190819073bc4ca0eda7647a8ab7c2061c2e118a18a936f13d906370a082319060240160206040518083038186803b15801561177b57600080fd5b505afa15801561178f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b39190613395565b118061184a57506040516370a0823160e01b81526001600160a01b03851660048201526000907360e4d786628fea6478f785a6d7e704777c86a7c6906370a082319060240160206040518083038186803b15801561181057600080fd5b505afa158015611824573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118489190613395565b115b806118e057506040516370a0823160e01b81526001600160a01b0385166004820152600090730d631e48f63c4d014667920d4a5a171a5ab792da906370a082319060240160206040518083038186803b1580156118a657600080fd5b505afa1580156118ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118de9190613395565b115b8061197657506040516370a0823160e01b81526001600160a01b038516600482015260009073b849c1077072466317ce9d170119a6e68c0879e7906370a082319060240160206040518083038186803b15801561193c57600080fd5b505afa158015611950573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119749190613395565b115b806119a857506119a884604051806040016040528060098152602001681dda1a5d195b1a5cdd60ba1b815250856122f4565b905080156119b557600f91505b6001600160a01b0384166000908152600d602052604090205460ff90811690831610156119f45760405162461bcd60e51b81526004016109ec906133ae565b6001600160a01b0384166000908152600d6020526040902054611a1a9060ff16836133fb565b915060008260ff1611611a3f5760405162461bcd60e51b81526004016109ec906133ae565b5092915050565b6000546001600160a01b03163314611a705760405162461bcd60e51b81526004016109ec906131ee565b60005b82518160ff161015610b22576000838260ff1681518110611a9657611a9661341e565b602002602001015190506000838360ff1681518110611ab757611ab761341e565b6020026020010151905060005b8160ff168160ff161015611aed57611adb8361239b565b80611ae581613434565b915050611ac4565b50838360ff1681518110611b0357611b0361341e565b6020908102919091018101516001600160a01b03939093166000908152600d90915260409020805460ff191660ff909316929092179091555080611b4681613434565b915050611a73565b611b583383611fe1565b611b745760405162461bcd60e51b81526004016109ec90613223565b611b808484848461243c565b50505050565b6000546001600160a01b03163314611bb05760405162461bcd60e51b81526004016109ec906131ee565b6009805460ff60a81b198116600160a81b9182900460ff1615909102179055565b6000818152600460205260409020546060906001600160a01b0316611c505760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016109ec565b600060038054611c5f906131b3565b905011611c845760405180606001604052806035815260200161363e603591396108df565b6003611c8f8361246f565b604051602001611ca0929190613454565b60405160208183030381529060405292915050565b600954600160d01b900461ffff16611d0f5760405162461bcd60e51b815260206004820152601d60248201527f4e6f206d6f726520746f6b656e73206c65667420746f20636c61696d2100000060448201526064016109ec565b60095460ff8416600160d01b90910461ffff161015611d705760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320746f20636c61696d21000000000060448201526064016109ec565b611db08483838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611e5792505050565b611e0b5760405162461bcd60e51b815260206004820152602660248201527f43616c6c6572206973206e6f7420656c696761626c6520666f7220616e2061696044820152657264726f702160d01b60648201526084016109ec565b611e158484612278565b8260ff166009601a8282829054906101000a900461ffff16611e3791906132d3565b92506101000a81548161ffff021916908361ffff16021790555050505050565b6000611e848360405180604001604052806008815260200167199c99595b5a5b9d60c21b815250846122f4565b9392505050565b6000546001600160a01b03163314611eb55760405162461bcd60e51b81526004016109ec906131ee565b6001600160a01b038116611f1a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109ec565b61110b816122a4565b60006001600160e01b031982166380ac58cd60e01b1480611f5457506001600160e01b03198216635b5e139f60e01b145b806108df57506301ffc9a760e01b6001600160e01b03198316146108df565b600081815260066020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611fa882611030565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600460205260408120546001600160a01b031661205a5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016109ec565b600061206583611030565b9050806001600160a01b0316846001600160a01b031614806120a05750836001600160a01b031661209584610977565b6001600160a01b0316145b806120d057506001600160a01b0380821660009081526007602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b03166120eb82611030565b6001600160a01b0316146121535760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016109ec565b6001600160a01b0382166121b55760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016109ec565b6121c0600082611f73565b6001600160a01b03831660009081526005602052604081208054600192906121e99084906134fb565b90915550506001600160a01b0382166000908152600560205260408120805460019290612217908490613512565b909155505060008181526004602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60005b8060ff168260ff161115610b22576122928361239b565b8061229c81613434565b91505061227b565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080546001600160a01b03166001600160a01b03166123896123838686604051602001612323929190613338565b60408051601f1981840301815282825280516020918201207f19457468657265756d205369676e6564204d6573736167653a0a33320000000084830152603c8085019190915282518085039091018152605c909301909152815191012090565b8461256d565b6001600160a01b031614949350505050565b6009546123b4908290600160b01b900461ffff16612591565b600954604080516001600160a01b0384168152600160b01b90920461ffff1660208301527fee5277ca3c2df86637558acbb52afd98da9dd7301f93486b0e1b47b4a45f9aaa910160405180910390a160098054600160b01b900461ffff1690601661241e8361352a565b91906101000a81548161ffff021916908361ffff1602179055505050565b6124478484846120d8565b612453848484846125ab565b611b805760405162461bcd60e51b81526004016109ec9061354c565b6060816124935750506040805180820190915260018152600360fc1b602082015290565b8160005b81156124bd57806124a78161359e565b91506124b69050600a836132bf565b9150612497565b60008167ffffffffffffffff8111156124d8576124d8612dac565b6040519080825280601f01601f191660200182016040528015612502576020820181803683370190505b5090505b84156120d0576125176001836134fb565b9150612524600a866135b9565b61252f906030613512565b60f81b8183815181106125445761254461341e565b60200101906001600160f81b031916908160001a905350612566600a866132bf565b9450612506565b600080600061257c85856126b8565b9150915061258981612725565b509392505050565b610ec28282604051806020016040528060008152506128e0565b60006001600160a01b0384163b156126ad57604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906125ef9033908990889088906004016135cd565b602060405180830381600087803b15801561260957600080fd5b505af1925050508015612639575060408051601f3d908101601f191682019092526126369181019061360a565b60015b612693573d808015612667576040519150601f19603f3d011682016040523d82523d6000602084013e61266c565b606091505b50805161268b5760405162461bcd60e51b81526004016109ec9061354c565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506120d0565b506001949350505050565b6000808251604114156126ef5760208301516040840151606085015160001a6126e387828585612913565b94509450505050610cc9565b825160401415612719576020830151604084015161270e868383612a00565b935093505050610cc9565b50600090506002610cc9565b600081600481111561273957612739613627565b14156127425750565b600181600481111561275657612756613627565b14156127a45760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016109ec565b60028160048111156127b8576127b8613627565b14156128065760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016109ec565b600381600481111561281a5761281a613627565b14156128735760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016109ec565b600481600481111561288757612887613627565b141561110b5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b60648201526084016109ec565b6128ea8383612a2f565b6128f760008484846125ab565b610b225760405162461bcd60e51b81526004016109ec9061354c565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561294a57506000905060036129f7565b8460ff16601b1415801561296257508460ff16601c14155b1561297357506000905060046129f7565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156129c7573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166129f0576000600192509250506129f7565b9150600090505b94509492505050565b6000806001600160ff1b03831660ff84901c601b01612a2187828885612913565b935093505050935093915050565b6001600160a01b038216612a855760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016109ec565b6000818152600460205260409020546001600160a01b031615612aea5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016109ec565b6001600160a01b0382166000908152600560205260408120805460019290612b13908490613512565b909155505060008181526004602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054612b7d906131b3565b90600052602060002090601f016020900481019282612b9f5760008555612be5565b82601f10612bb857805160ff1916838001178555612be5565b82800160010185558215612be5579182015b82811115612be5578251825591602001919060010190612bca565b50612bf1929150612bf5565b5090565b5b80821115612bf15760008155600101612bf6565b6001600160e01b03198116811461110b57600080fd5b600060208284031215612c3257600080fd5b8135611e8481612c0a565b60005b83811015612c58578181015183820152602001612c40565b83811115611b805750506000910152565b60008151808452612c81816020860160208601612c3d565b601f01601f19169290920160200192915050565b602081526000611e846020830184612c69565b600060208284031215612cba57600080fd5b5035919050565b80356001600160a01b0381168114612cd857600080fd5b919050565b60008060408385031215612cf057600080fd5b612cf983612cc1565b946020939093013593505050565b600060208284031215612d1957600080fd5b611e8482612cc1565b600080600060608486031215612d3757600080fd5b612d4084612cc1565b9250612d4e60208501612cc1565b9150604084013590509250925092565b60008060408385031215612d7157600080fd5b50508035926020909101359150565b803560ff81168114612cd857600080fd5b600060208284031215612da357600080fd5b611e8482612d80565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612deb57612deb612dac565b604052919050565b600082601f830112612e0457600080fd5b813567ffffffffffffffff811115612e1e57612e1e612dac565b612e31601f8201601f1916602001612dc2565b818152846020838601011115612e4657600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215612e7557600080fd5b813567ffffffffffffffff811115612e8c57600080fd5b6120d084828501612df3565b60008060408385031215612eab57600080fd5b612eb483612cc1565b9150602083013567ffffffffffffffff811115612ed057600080fd5b612edc85828601612df3565b9150509250929050565b60008060408385031215612ef957600080fd5b612eb483612d80565b60008060408385031215612f1557600080fd5b612f1e83612cc1565b915060208301358015158114612f3357600080fd5b809150509250929050565b600067ffffffffffffffff821115612f5857612f58612dac565b5060051b60200190565b600082601f830112612f7357600080fd5b81356020612f88612f8383612f3e565b612dc2565b82815260059290921b84018101918181019086841115612fa757600080fd5b8286015b84811015612fc957612fbc81612d80565b8352918301918301612fab565b509695505050505050565b60008060408385031215612fe757600080fd5b823567ffffffffffffffff80821115612fff57600080fd5b818501915085601f83011261301357600080fd5b81356020613023612f8383612f3e565b82815260059290921b8401810191818101908984111561304257600080fd5b948201945b838610156130675761305886612cc1565b82529482019490820190613047565b9650508601359250508082111561307d57600080fd5b50612edc85828601612f62565b600080600080608085870312156130a057600080fd5b6130a985612cc1565b93506130b760208601612cc1565b925060408501359150606085013567ffffffffffffffff8111156130da57600080fd5b6130e687828801612df3565b91505092959194509250565b6000806000806060858703121561310857600080fd5b61311185612cc1565b935061311f60208601612d80565b9250604085013567ffffffffffffffff8082111561313c57600080fd5b818701915087601f83011261315057600080fd5b81358181111561315f57600080fd5b88602082850101111561317157600080fd5b95989497505060200194505050565b6000806040838503121561319357600080fd5b61319c83612cc1565b91506131aa60208401612cc1565b90509250929050565b600181811c908216806131c757607f821691505b602082108114156131e857634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156132a4576132a4613274565b500290565b634e487b7160e01b600052601260045260246000fd5b6000826132ce576132ce6132a9565b500490565b600061ffff838116908316818110156132ee576132ee613274565b039392505050565b600061ffff80831681851680830382111561331357613313613274565b01949350505050565b6000815161332e818560208601612c3d565b9290920192915050565b6bffffffffffffffffffffffff198360601b16815260008251613362816014850160208701612c3d565b919091016014019392505050565b600060ff821660ff84168060ff0382111561338d5761338d613274565b019392505050565b6000602082840312156133a757600080fd5b5051919050565b6020808252602d908201527f507567417065733a2041646472657373206973206e6f7420656c696769626c6560408201526c20746f20707265206d696e742160981b606082015260800190565b600060ff821660ff84168082101561341557613415613274565b90039392505050565b634e487b7160e01b600052603260045260246000fd5b600060ff821660ff81141561344b5761344b613274565b60010192915050565b600080845481600182811c91508083168061347057607f831692505b602080841082141561349057634e487b7160e01b86526022600452602486fd5b8180156134a457600181146134b5576134e2565b60ff198616895284890196506134e2565b60008b81526020902060005b868110156134da5781548b8201529085019083016134c1565b505084890196505b5050505050506134f2818561331c565b95945050505050565b60008282101561350d5761350d613274565b500390565b6000821982111561352557613525613274565b500190565b600061ffff8083168181141561354257613542613274565b6001019392505050565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60006000198214156135b2576135b2613274565b5060010190565b6000826135c8576135c86132a9565b500690565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061360090830184612c69565b9695505050505050565b60006020828403121561361c57600080fd5b8151611e8481612c0a565b634e487b7160e01b600052602160045260246000fdfe697066733a2f2f516d517158774a6e4e427a76514e5a78597a74745766356253595353554d656a414c7031365a747372594861794aa26469706673582212200b0419e3828a34e8f65a8fb740ee706c95dbef6902877555193e2e069ab5b63164736f6c6343000808003300000000000000000000000000000000000000000000000000d529ae9e860000000000000000000000000000000000000000000000000000011c37937e08000000000000000000000000000000000000000000000000000000000000000022b80000000000000000000000000000000000000000000000000000000000000954
Deployed Bytecode
0x6080604052600436106102885760003560e01c80636ecd23061161015a578063ac5b4978116100c1578063d227fe1d1161007a578063d227fe1d146107d9578063d52a18e0146107f9578063d5abeb0114610819578063e985e9c51461083b578063f2fde38b14610884578063fc1a1c36146108a457600080fd5b8063ac5b497814610724578063b88d4fde14610744578063bcbd5f3914610764578063c225948314610779578063c87b56dd1461079a578063cb96bfdf146107ba57600080fd5b80638fc2866e116101135780638fc2866e1461066957806395d89b41146106895780639bb243861461069e5780639fd6db12146106b1578063a22cb465146106d2578063a7efd153146106f257600080fd5b80636ecd2306146105c35780636fba75c8146105d657806370a08231146105f6578063715018a6146106165780638da5cb5b1461062b5780638ea5220f1461064957600080fd5b80632a55205a116101fe57806355f804b3116101b757806355f804b31461050a578063587b6b271461052a57806359927044146105585780636352211e146105785780636817c76c146105985780636b8a21fc146105ae57600080fd5b80632a55205a14610434578063304efccb146104735780633ccfd60b1461049357806342842e0e146104a85780634b09b72a146104c85780634dcb2b3f146104ea57600080fd5b80631525ff7d116102505780631525ff7d1461037357806315ebd1231461039357806318160ddd146103b35780631f53ac02146103d557806323b872dd146103f557806327701f751461041557600080fd5b806301ffc9a71461028d578063045b7dca146102c257806306fdde03146102f7578063081812fc14610319578063095ea7b314610351575b600080fd5b34801561029957600080fd5b506102ad6102a8366004612c20565b6108ba565b60405190151581526020015b60405180910390f35b3480156102ce57600080fd5b506009546102e490600160e01b900461ffff1681565b60405161ffff90911681526020016102b9565b34801561030357600080fd5b5061030c6108e5565b6040516102b99190612c95565b34801561032557600080fd5b50610339610334366004612ca8565b610977565b6040516001600160a01b0390911681526020016102b9565b34801561035d57600080fd5b5061037161036c366004612cdd565b610a11565b005b34801561037f57600080fd5b5061037161038e366004612d07565b610b27565b34801561039f57600080fd5b506103716103ae366004612ca8565b610b73565b3480156103bf57600080fd5b506009546102e490600160b01b900461ffff1681565b3480156103e157600080fd5b506103716103f0366004612d07565b610ba2565b34801561040157600080fd5b50610371610410366004612d22565b610bee565b34801561042157600080fd5b50600954600160a01b900460ff166102ad565b34801561044057600080fd5b5061045461044f366004612d5e565b610c1f565b604080516001600160a01b0390931683526020830191909152016102b9565b34801561047f57600080fd5b5061037161048e366004612d91565b610cd0565b34801561049f57600080fd5b50610371610daa565b3480156104b457600080fd5b506103716104c3366004612d22565b610ec6565b3480156104d457600080fd5b506009546102e490600160d01b900461ffff1681565b3480156104f657600080fd5b50610371610505366004612d91565b610ee1565b34801561051657600080fd5b50610371610525366004612e63565b610fc0565b34801561053657600080fd5b5061054a610545366004612e98565b610ffd565b6040519081526020016102b9565b34801561056457600080fd5b50600954610339906001600160a01b031681565b34801561058457600080fd5b50610339610593366004612ca8565b611030565b3480156105a457600080fd5b5061054a600a5481565b3480156105ba57600080fd5b506103716110a7565b6103716105d1366004612d91565b6110f2565b3480156105e257600080fd5b506103716105f1366004612ca8565b61110e565b34801561060257600080fd5b5061054a610611366004612d07565b61113d565b34801561062257600080fd5b506103716111c4565b34801561063757600080fd5b506000546001600160a01b0316610339565b34801561065557600080fd5b50600854610339906001600160a01b031681565b34801561067557600080fd5b50610371610684366004612d91565b6111fa565b34801561069557600080fd5b5061030c611305565b6103716106ac366004612ee6565b611314565b3480156106bd57600080fd5b506009546102ad90600160a01b900460ff1681565b3480156106de57600080fd5b506103716106ed366004612f02565b61165c565b3480156106fe57600080fd5b5061071261070d366004612e98565b611721565b60405160ff90911681526020016102b9565b34801561073057600080fd5b5061037161073f366004612fd4565b611a46565b34801561075057600080fd5b5061037161075f36600461308a565b611b4e565b34801561077057600080fd5b50610371611b86565b34801561078557600080fd5b506009546102ad90600160a81b900460ff1681565b3480156107a657600080fd5b5061030c6107b5366004612ca8565b611bd1565b3480156107c657600080fd5b50600954600160a81b900460ff166102ad565b3480156107e557600080fd5b506103716107f43660046130f2565b611cb5565b34801561080557600080fd5b506102ad610814366004612e98565b611e57565b34801561082557600080fd5b506009546102e490600160c01b900461ffff1681565b34801561084757600080fd5b506102ad610856366004613180565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b34801561089057600080fd5b5061037161089f366004612d07565b611e8b565b3480156108b057600080fd5b5061054a600b5481565b60006001600160e01b0319821663152a902d60e11b14806108df57506108df82611f23565b92915050565b6060600180546108f4906131b3565b80601f0160208091040260200160405190810160405280929190818152602001828054610920906131b3565b801561096d5780601f106109425761010080835404028352916020019161096d565b820191906000526020600020905b81548152906001019060200180831161095057829003601f168201915b5050505050905090565b6000818152600460205260408120546001600160a01b03166109f55760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600660205260409020546001600160a01b031690565b6000610a1c82611030565b9050806001600160a01b0316836001600160a01b03161415610a8a5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016109ec565b336001600160a01b0382161480610aa65750610aa68133610856565b610b185760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016109ec565b610b228383611f73565b505050565b6000546001600160a01b03163314610b515760405162461bcd60e51b81526004016109ec906131ee565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610b9d5760405162461bcd60e51b81526004016109ec906131ee565b600a55565b6000546001600160a01b03163314610bcc5760405162461bcd60e51b81526004016109ec906131ee565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b610bf83382611fe1565b610c145760405162461bcd60e51b81526004016109ec90613223565b610b228383836120d8565b60008281526004602052604081205481906001600160a01b0316610cab5760405162461bcd60e51b815260206004820152603a60248201527f45524332393831526f79616c74795374616e646172643a20526f79616c74792060448201527f696e666f20666f72206e6f6e6578697374656e7420746f6b656e00000000000060648201526084016109ec565b306103e8610cba85604b61328a565b610cc491906132bf565b915091505b9250929050565b6000546001600160a01b03163314610cfa5760405162461bcd60e51b81526004016109ec906131ee565b60095461ffff600160b01b8204811691610d209160ff851691600160e01b9004166132d3565b61ffff1611610d2e57600080fd5b8060ff166009601a8282829054906101000a900461ffff16610d5091906132f6565b82546101009290920a61ffff818102199093169183160217909155600954610d8b9250600160d01b8104821691600160c01b909104166132d3565b6009601c6101000a81548161ffff021916908361ffff16021790555050565b6000546001600160a01b03163314610dd45760405162461bcd60e51b81526004016109ec906131ee565b60095447906001600160a01b03166108fc600a610df284600461328a565b610dfc91906132bf565b6040518115909202916000818181858888f19350505050158015610e24573d6000803e3d6000fd5b506008546001600160a01b03166108fc600a610e4184600461328a565b610e4b91906132bf565b6040518115909202916000818181858888f19350505050158015610e73573d6000803e3d6000fd5b506000546001600160a01b03166108fc600a610e9084600261328a565b610e9a91906132bf565b6040518115909202916000818181858888f19350505050158015610ec2573d6000803e3d6000fd5b5050565b610b2283838360405180602001604052806000815250611b4e565b6000546001600160a01b03163314610f0b5760405162461bcd60e51b81526004016109ec906131ee565b60095460ff8216600160d01b90910461ffff161015610f775760405162461bcd60e51b815260206004820152602260248201527f4e6f7420656e6f75676820746f6b656e73206c65667420696e20726573657276604482015261652160f01b60648201526084016109ec565b610f813382612278565b8060ff166009601a8282829054906101000a900461ffff16610fa391906132d3565b92506101000a81548161ffff021916908361ffff16021790555050565b6000546001600160a01b03163314610fea5760405162461bcd60e51b81526004016109ec906131ee565b8051610ec2906003906020840190612b71565b60008282604051602001611012929190613338565b60405160208183030381529060405280519060200120905092915050565b6000818152600460205260408120546001600160a01b0316806108df5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016109ec565b6000546001600160a01b031633146110d15760405162461bcd60e51b81526004016109ec906131ee565b6009805460ff60a01b198116600160a01b9182900460ff1615909102179055565b61110b8160405180602001604052806000815250611314565b50565b6000546001600160a01b031633146111385760405162461bcd60e51b81526004016109ec906131ee565b600b55565b60006001600160a01b0382166111a85760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016109ec565b506001600160a01b031660009081526005602052604090205490565b6000546001600160a01b031633146111ee5760405162461bcd60e51b81526004016109ec906131ee565b6111f860006122a4565b565b6000546001600160a01b031633146112245760405162461bcd60e51b81526004016109ec906131ee565b6009546000906112439060ff841690600160e01b900461ffff166132f6565b60095461ffff91821692506000916112689160ff861691600160d01b909104166132d3565b60095461ffff9182169250600160c01b90041682111561128757600080fd5b8260ff166009601a8282829054906101000a900461ffff166112a991906132d3565b82546101009290920a61ffff8181021990931691831602179091556009546112e49250600160d01b8104821691600160c01b909104166132d3565b6009601c6101000a81548161ffff021916908361ffff160217905550505050565b6060600280546108f4906131b3565b60095461ffff600160e01b820481169161133a9160ff861691600160b01b9004166132f6565b61ffff161061139a5760405162461bcd60e51b815260206004820152602660248201527f50757263686163652077696c6c206578636565642074686520746f6b656e20736044820152657570706c792160d01b60648201526084016109ec565b600954600160a01b900460ff1661159157600954600160a81b900460ff166114045760405162461bcd60e51b815260206004820152601760248201527f507265206d696e74207068617365206973206f7665722100000000000000000060448201526064016109ec565b8160ff16600b54611415919061328a565b34146114635760405162461bcd60e51b815260206004820152601f60248201527f45746865722076616c75652073656e74206973206e6f7420636f72726563740060448201526064016109ec565b600061146f3383611721565b60ff169050600081116114cf5760405162461bcd60e51b815260206004820152602260248201527f43616c6c6572206e6f7420656c696761626c6520666f72206120707265206d696044820152611b9d60f21b60648201526084016109ec565b808360ff1611156115485760405162461bcd60e51b815260206004820152603c60248201527f52657175657374656420616d6f756e74206578656564732074686520616d6f7560448201527f6e742074686520616464726573732063616e20707265206d696e74210000000060648201526084016109ec565b6115523384612278565b336000908152600d60205260408120805485929061157490849060ff16613370565b92506101000a81548160ff021916908360ff160217905550505050565b8160ff16600a546115a2919061328a565b34146115f05760405162461bcd60e51b815260206004820152601f60248201527f45746865722076616c75652073656e74206973206e6f7420636f72726563740060448201526064016109ec565b600a8260ff1611158015611606575060ff821615155b6116525760405162461bcd60e51b815260206004820152601960248201527f496e76616c69642072657175657374656420616d6f756e74210000000000000060448201526064016109ec565b610ec23383612278565b6001600160a01b0382163314156116b55760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016109ec565b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6040516370a0823160e01b81526001600160a01b03831660048201526000908190819073bc4ca0eda7647a8ab7c2061c2e118a18a936f13d906370a082319060240160206040518083038186803b15801561177b57600080fd5b505afa15801561178f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b39190613395565b118061184a57506040516370a0823160e01b81526001600160a01b03851660048201526000907360e4d786628fea6478f785a6d7e704777c86a7c6906370a082319060240160206040518083038186803b15801561181057600080fd5b505afa158015611824573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118489190613395565b115b806118e057506040516370a0823160e01b81526001600160a01b0385166004820152600090730d631e48f63c4d014667920d4a5a171a5ab792da906370a082319060240160206040518083038186803b1580156118a657600080fd5b505afa1580156118ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118de9190613395565b115b8061197657506040516370a0823160e01b81526001600160a01b038516600482015260009073b849c1077072466317ce9d170119a6e68c0879e7906370a082319060240160206040518083038186803b15801561193c57600080fd5b505afa158015611950573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119749190613395565b115b806119a857506119a884604051806040016040528060098152602001681dda1a5d195b1a5cdd60ba1b815250856122f4565b905080156119b557600f91505b6001600160a01b0384166000908152600d602052604090205460ff90811690831610156119f45760405162461bcd60e51b81526004016109ec906133ae565b6001600160a01b0384166000908152600d6020526040902054611a1a9060ff16836133fb565b915060008260ff1611611a3f5760405162461bcd60e51b81526004016109ec906133ae565b5092915050565b6000546001600160a01b03163314611a705760405162461bcd60e51b81526004016109ec906131ee565b60005b82518160ff161015610b22576000838260ff1681518110611a9657611a9661341e565b602002602001015190506000838360ff1681518110611ab757611ab761341e565b6020026020010151905060005b8160ff168160ff161015611aed57611adb8361239b565b80611ae581613434565b915050611ac4565b50838360ff1681518110611b0357611b0361341e565b6020908102919091018101516001600160a01b03939093166000908152600d90915260409020805460ff191660ff909316929092179091555080611b4681613434565b915050611a73565b611b583383611fe1565b611b745760405162461bcd60e51b81526004016109ec90613223565b611b808484848461243c565b50505050565b6000546001600160a01b03163314611bb05760405162461bcd60e51b81526004016109ec906131ee565b6009805460ff60a81b198116600160a81b9182900460ff1615909102179055565b6000818152600460205260409020546060906001600160a01b0316611c505760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016109ec565b600060038054611c5f906131b3565b905011611c845760405180606001604052806035815260200161363e603591396108df565b6003611c8f8361246f565b604051602001611ca0929190613454565b60405160208183030381529060405292915050565b600954600160d01b900461ffff16611d0f5760405162461bcd60e51b815260206004820152601d60248201527f4e6f206d6f726520746f6b656e73206c65667420746f20636c61696d2100000060448201526064016109ec565b60095460ff8416600160d01b90910461ffff161015611d705760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320746f20636c61696d21000000000060448201526064016109ec565b611db08483838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611e5792505050565b611e0b5760405162461bcd60e51b815260206004820152602660248201527f43616c6c6572206973206e6f7420656c696761626c6520666f7220616e2061696044820152657264726f702160d01b60648201526084016109ec565b611e158484612278565b8260ff166009601a8282829054906101000a900461ffff16611e3791906132d3565b92506101000a81548161ffff021916908361ffff16021790555050505050565b6000611e848360405180604001604052806008815260200167199c99595b5a5b9d60c21b815250846122f4565b9392505050565b6000546001600160a01b03163314611eb55760405162461bcd60e51b81526004016109ec906131ee565b6001600160a01b038116611f1a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109ec565b61110b816122a4565b60006001600160e01b031982166380ac58cd60e01b1480611f5457506001600160e01b03198216635b5e139f60e01b145b806108df57506301ffc9a760e01b6001600160e01b03198316146108df565b600081815260066020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611fa882611030565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600460205260408120546001600160a01b031661205a5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016109ec565b600061206583611030565b9050806001600160a01b0316846001600160a01b031614806120a05750836001600160a01b031661209584610977565b6001600160a01b0316145b806120d057506001600160a01b0380821660009081526007602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b03166120eb82611030565b6001600160a01b0316146121535760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016109ec565b6001600160a01b0382166121b55760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016109ec565b6121c0600082611f73565b6001600160a01b03831660009081526005602052604081208054600192906121e99084906134fb565b90915550506001600160a01b0382166000908152600560205260408120805460019290612217908490613512565b909155505060008181526004602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60005b8060ff168260ff161115610b22576122928361239b565b8061229c81613434565b91505061227b565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080546001600160a01b03166001600160a01b03166123896123838686604051602001612323929190613338565b60408051601f1981840301815282825280516020918201207f19457468657265756d205369676e6564204d6573736167653a0a33320000000084830152603c8085019190915282518085039091018152605c909301909152815191012090565b8461256d565b6001600160a01b031614949350505050565b6009546123b4908290600160b01b900461ffff16612591565b600954604080516001600160a01b0384168152600160b01b90920461ffff1660208301527fee5277ca3c2df86637558acbb52afd98da9dd7301f93486b0e1b47b4a45f9aaa910160405180910390a160098054600160b01b900461ffff1690601661241e8361352a565b91906101000a81548161ffff021916908361ffff1602179055505050565b6124478484846120d8565b612453848484846125ab565b611b805760405162461bcd60e51b81526004016109ec9061354c565b6060816124935750506040805180820190915260018152600360fc1b602082015290565b8160005b81156124bd57806124a78161359e565b91506124b69050600a836132bf565b9150612497565b60008167ffffffffffffffff8111156124d8576124d8612dac565b6040519080825280601f01601f191660200182016040528015612502576020820181803683370190505b5090505b84156120d0576125176001836134fb565b9150612524600a866135b9565b61252f906030613512565b60f81b8183815181106125445761254461341e565b60200101906001600160f81b031916908160001a905350612566600a866132bf565b9450612506565b600080600061257c85856126b8565b9150915061258981612725565b509392505050565b610ec28282604051806020016040528060008152506128e0565b60006001600160a01b0384163b156126ad57604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906125ef9033908990889088906004016135cd565b602060405180830381600087803b15801561260957600080fd5b505af1925050508015612639575060408051601f3d908101601f191682019092526126369181019061360a565b60015b612693573d808015612667576040519150601f19603f3d011682016040523d82523d6000602084013e61266c565b606091505b50805161268b5760405162461bcd60e51b81526004016109ec9061354c565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506120d0565b506001949350505050565b6000808251604114156126ef5760208301516040840151606085015160001a6126e387828585612913565b94509450505050610cc9565b825160401415612719576020830151604084015161270e868383612a00565b935093505050610cc9565b50600090506002610cc9565b600081600481111561273957612739613627565b14156127425750565b600181600481111561275657612756613627565b14156127a45760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016109ec565b60028160048111156127b8576127b8613627565b14156128065760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016109ec565b600381600481111561281a5761281a613627565b14156128735760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016109ec565b600481600481111561288757612887613627565b141561110b5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b60648201526084016109ec565b6128ea8383612a2f565b6128f760008484846125ab565b610b225760405162461bcd60e51b81526004016109ec9061354c565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561294a57506000905060036129f7565b8460ff16601b1415801561296257508460ff16601c14155b1561297357506000905060046129f7565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156129c7573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166129f0576000600192509250506129f7565b9150600090505b94509492505050565b6000806001600160ff1b03831660ff84901c601b01612a2187828885612913565b935093505050935093915050565b6001600160a01b038216612a855760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016109ec565b6000818152600460205260409020546001600160a01b031615612aea5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016109ec565b6001600160a01b0382166000908152600560205260408120805460019290612b13908490613512565b909155505060008181526004602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054612b7d906131b3565b90600052602060002090601f016020900481019282612b9f5760008555612be5565b82601f10612bb857805160ff1916838001178555612be5565b82800160010185558215612be5579182015b82811115612be5578251825591602001919060010190612bca565b50612bf1929150612bf5565b5090565b5b80821115612bf15760008155600101612bf6565b6001600160e01b03198116811461110b57600080fd5b600060208284031215612c3257600080fd5b8135611e8481612c0a565b60005b83811015612c58578181015183820152602001612c40565b83811115611b805750506000910152565b60008151808452612c81816020860160208601612c3d565b601f01601f19169290920160200192915050565b602081526000611e846020830184612c69565b600060208284031215612cba57600080fd5b5035919050565b80356001600160a01b0381168114612cd857600080fd5b919050565b60008060408385031215612cf057600080fd5b612cf983612cc1565b946020939093013593505050565b600060208284031215612d1957600080fd5b611e8482612cc1565b600080600060608486031215612d3757600080fd5b612d4084612cc1565b9250612d4e60208501612cc1565b9150604084013590509250925092565b60008060408385031215612d7157600080fd5b50508035926020909101359150565b803560ff81168114612cd857600080fd5b600060208284031215612da357600080fd5b611e8482612d80565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612deb57612deb612dac565b604052919050565b600082601f830112612e0457600080fd5b813567ffffffffffffffff811115612e1e57612e1e612dac565b612e31601f8201601f1916602001612dc2565b818152846020838601011115612e4657600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215612e7557600080fd5b813567ffffffffffffffff811115612e8c57600080fd5b6120d084828501612df3565b60008060408385031215612eab57600080fd5b612eb483612cc1565b9150602083013567ffffffffffffffff811115612ed057600080fd5b612edc85828601612df3565b9150509250929050565b60008060408385031215612ef957600080fd5b612eb483612d80565b60008060408385031215612f1557600080fd5b612f1e83612cc1565b915060208301358015158114612f3357600080fd5b809150509250929050565b600067ffffffffffffffff821115612f5857612f58612dac565b5060051b60200190565b600082601f830112612f7357600080fd5b81356020612f88612f8383612f3e565b612dc2565b82815260059290921b84018101918181019086841115612fa757600080fd5b8286015b84811015612fc957612fbc81612d80565b8352918301918301612fab565b509695505050505050565b60008060408385031215612fe757600080fd5b823567ffffffffffffffff80821115612fff57600080fd5b818501915085601f83011261301357600080fd5b81356020613023612f8383612f3e565b82815260059290921b8401810191818101908984111561304257600080fd5b948201945b838610156130675761305886612cc1565b82529482019490820190613047565b9650508601359250508082111561307d57600080fd5b50612edc85828601612f62565b600080600080608085870312156130a057600080fd5b6130a985612cc1565b93506130b760208601612cc1565b925060408501359150606085013567ffffffffffffffff8111156130da57600080fd5b6130e687828801612df3565b91505092959194509250565b6000806000806060858703121561310857600080fd5b61311185612cc1565b935061311f60208601612d80565b9250604085013567ffffffffffffffff8082111561313c57600080fd5b818701915087601f83011261315057600080fd5b81358181111561315f57600080fd5b88602082850101111561317157600080fd5b95989497505060200194505050565b6000806040838503121561319357600080fd5b61319c83612cc1565b91506131aa60208401612cc1565b90509250929050565b600181811c908216806131c757607f821691505b602082108114156131e857634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156132a4576132a4613274565b500290565b634e487b7160e01b600052601260045260246000fd5b6000826132ce576132ce6132a9565b500490565b600061ffff838116908316818110156132ee576132ee613274565b039392505050565b600061ffff80831681851680830382111561331357613313613274565b01949350505050565b6000815161332e818560208601612c3d565b9290920192915050565b6bffffffffffffffffffffffff198360601b16815260008251613362816014850160208701612c3d565b919091016014019392505050565b600060ff821660ff84168060ff0382111561338d5761338d613274565b019392505050565b6000602082840312156133a757600080fd5b5051919050565b6020808252602d908201527f507567417065733a2041646472657373206973206e6f7420656c696769626c6560408201526c20746f20707265206d696e742160981b606082015260800190565b600060ff821660ff84168082101561341557613415613274565b90039392505050565b634e487b7160e01b600052603260045260246000fd5b600060ff821660ff81141561344b5761344b613274565b60010192915050565b600080845481600182811c91508083168061347057607f831692505b602080841082141561349057634e487b7160e01b86526022600452602486fd5b8180156134a457600181146134b5576134e2565b60ff198616895284890196506134e2565b60008b81526020902060005b868110156134da5781548b8201529085019083016134c1565b505084890196505b5050505050506134f2818561331c565b95945050505050565b60008282101561350d5761350d613274565b500390565b6000821982111561352557613525613274565b500190565b600061ffff8083168181141561354257613542613274565b6001019392505050565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60006000198214156135b2576135b2613274565b5060010190565b6000826135c8576135c86132a9565b500690565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061360090830184612c69565b9695505050505050565b60006020828403121561361c57600080fd5b8151611e8481612c0a565b634e487b7160e01b600052602160045260246000fdfe697066733a2f2f516d517158774a6e4e427a76514e5a78597a74745766356253595353554d656a414c7031365a747372594861794aa26469706673582212200b0419e3828a34e8f65a8fb740ee706c95dbef6902877555193e2e069ab5b63164736f6c63430008080033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000d529ae9e860000000000000000000000000000000000000000000000000000011c37937e08000000000000000000000000000000000000000000000000000000000000000022b80000000000000000000000000000000000000000000000000000000000000954
-----Decoded View---------------
Arg [0] : _whitelistPriceInWei (uint256): 60000000000000000
Arg [1] : _mintPriceInWei (uint256): 80000000000000000
Arg [2] : _maxSupply (uint16): 8888
Arg [3] : _reserveAmount (uint16): 2388
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000d529ae9e860000
Arg [1] : 000000000000000000000000000000000000000000000000011c37937e080000
Arg [2] : 00000000000000000000000000000000000000000000000000000000000022b8
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000954
Deployed Bytecode Sourcemap
152:7736:12:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6945:237;;;;;;;;;;-1:-1:-1;6945:237:12;;;;;:::i;:::-;;:::i;:::-;;;565:14:14;;558:22;540:41;;528:2;513:18;6945:237:12;;;;;;;;504:24;;;;;;;;;;-1:-1:-1;504:24:12;;;;-1:-1:-1;;;504:24:12;;;;;;;;;766:6:14;754:19;;;736:38;;724:2;709:18;504:24:12;592:188:14;2427:98:4;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;3788:217::-;;;;;;;;;;-1:-1:-1;3788:217:4;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;1907:32:14;;;1889:51;;1877:2;1862:18;3788:217:4;1743:203:14;3326:401:4;;;;;;;;;;-1:-1:-1;3326:401:4;;;;;:::i;:::-;;:::i;:::-;;3049:118:12;;;;;;;;;;-1:-1:-1;3049:118:12;;;;;:::i;:::-;;:::i;1978:90::-;;;;;;;;;;-1:-1:-1;1978:90:12;;;;;:::i;:::-;;:::i;378:25::-;;;;;;;;;;-1:-1:-1;378:25:12;;;;-1:-1:-1;;;378:25:12;;;;;;2929:114;;;;;;;;;;-1:-1:-1;2929:114:12;;;;;:::i;:::-;;:::i;4652:330:4:-;;;;;;;;;;-1:-1:-1;4652:330:4;;;;;:::i;:::-;;:::i;3278:93:12:-;;;;;;;;;;-1:-1:-1;3350:14:12;;-1:-1:-1;;;3350:14:12;;;;3278:93;;7595:291;;;;;;;;;;-1:-1:-1;7595:291:12;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;3357:32:14;;;3339:51;;3421:2;3406:18;;3399:34;;;;3312:18;7595:291:12;3165:274:14;2466:211:12;;;;;;;;;;-1:-1:-1;2466:211:12;;;;;:::i;:::-;;:::i;2683:240::-;;;;;;;;;;;;;:::i;5048:179:4:-;;;;;;;;;;-1:-1:-1;5048:179:4;;;;;:::i;:::-;;:::i;471:27:12:-;;;;;;;;;;-1:-1:-1;471:27:12;;;;-1:-1:-1;;;471:27:12;;;;;;5887:227;;;;;;;;;;-1:-1:-1;5887:227:12;;;;;:::i;:::-;;:::i;3168:96:4:-;;;;;;;;;;-1:-1:-1;3168:96:4;;;;;:::i;:::-;;:::i;6511:154:12:-;;;;;;;;;;-1:-1:-1;6511:154:12;;;;;:::i;:::-;;:::i;:::-;;;5614:25:14;;;5602:2;5587:18;6511:154:12;5468:177:14;278:25:12;;;;;;;;;;-1:-1:-1;278:25:12;;;;-1:-1:-1;;;;;278:25:12;;;2130:235:4;;;;;;;;;;-1:-1:-1;2130:235:4;;;;;:::i;:::-;;:::i;534:21:12:-;;;;;;;;;;;;;;;;4170:97;;;;;;;;;;;;;:::i;4553:76::-;;;;;;:::i;:::-;;:::i;1872:100::-;;;;;;;;;;-1:-1:-1;1872:100:12;;;;;:::i;:::-;;:::i;1868:205:4:-;;;;;;;;;;-1:-1:-1;1868:205:4;;;;;:::i;:::-;;:::i;1706:92:11:-;;;;;;;;;;;;;:::i;1074:85::-;;;;;;;;;;-1:-1:-1;1120:7:11;1146:6;-1:-1:-1;;;;;1146:6:11;1074:85;;248:24:12;;;;;;;;;;-1:-1:-1;248:24:12;;;;-1:-1:-1;;;;;248:24:12;;;2074:386;;;;;;;;;;-1:-1:-1;2074:386:12;;;;;:::i;:::-;;:::i;2589:102:4:-;;;;;;;;;;;;;:::i;4635:942:12:-;;;;;;:::i;:::-;;:::i;310:26::-;;;;;;;;;;-1:-1:-1;310:26:12;;;;-1:-1:-1;;;310:26:12;;;;;;4072:290:4;;;;;;;;;;-1:-1:-1;4072:290:4;;;;;:::i;:::-;;:::i;3377:681:12:-;;;;;;;;;;-1:-1:-1;3377:681:12;;;;;:::i;:::-;;:::i;:::-;;;7152:4:14;7140:17;;;7122:36;;7110:2;7095:18;3377:681:12;6980:184:14;1503:363:12;;;;;;;;;;-1:-1:-1;1503:363:12;;;;;:::i;:::-;;:::i;5293:320:4:-;;;;;;;;;;-1:-1:-1;5293:320:4;;;;;:::i;:::-;;:::i;4064:100:12:-;;;;;;;;;;;;;:::i;342:29::-;;;;;;;;;;-1:-1:-1;342:29:12;;;;-1:-1:-1;;;342:29:12;;;;;;2757:363:4;;;;;;;;;;-1:-1:-1;2757:363:4;;;;;:::i;:::-;;:::i;3173:99:12:-;;;;;;;;;;-1:-1:-1;3248:17:12;;-1:-1:-1;;;3248:17:12;;;;3173:99;;6124:381;;;;;;;;;;-1:-1:-1;6124:381:12;;;;;:::i;:::-;;:::i;5720:161::-;;;;;;;;;;-1:-1:-1;5720:161:12;;;;;:::i;:::-;;:::i;442:23::-;;;;;;;;;;-1:-1:-1;442:23:12;;;;-1:-1:-1;;;442:23:12;;;;;;4428:162:4;;;;;;;;;;-1:-1:-1;4428:162:4;;;;;:::i;:::-;-1:-1:-1;;;;;4548:25:4;;;4525:4;4548:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;4428:162;1947:189:11;;;;;;;;;;-1:-1:-1;1947:189:11;;;;;:::i;:::-;;:::i;561:26:12:-;;;;;;;;;;;;;;;;6945:237;7047:4;-1:-1:-1;;;;;;7082:41:12;;-1:-1:-1;;;7082:41:12;;:93;;;7139:36;7163:11;7139:23;:36::i;:::-;7063:112;6945:237;-1:-1:-1;;6945:237:12:o;2427:98:4:-;2481:13;2513:5;2506:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2427:98;:::o;3788:217::-;3864:7;7173:16;;;:7;:16;;;;;;-1:-1:-1;;;;;7173:16:4;3883:73;;;;-1:-1:-1;;;3883:73:4;;11308:2:14;3883:73:4;;;11290:21:14;11347:2;11327:18;;;11320:30;11386:34;11366:18;;;11359:62;-1:-1:-1;;;11437:18:14;;;11430:42;11489:19;;3883:73:4;;;;;;;;;-1:-1:-1;3974:24:4;;;;:15;:24;;;;;;-1:-1:-1;;;;;3974:24:4;;3788:217::o;3326:401::-;3406:13;3422:23;3437:7;3422:14;:23::i;:::-;3406:39;;3469:5;-1:-1:-1;;;;;3463:11:4;:2;-1:-1:-1;;;;;3463:11:4;;;3455:57;;;;-1:-1:-1;;;3455:57:4;;11721:2:14;3455:57:4;;;11703:21:14;11760:2;11740:18;;;11733:30;11799:34;11779:18;;;11772:62;-1:-1:-1;;;11850:18:14;;;11843:31;11891:19;;3455:57:4;11519:397:14;3455:57:4;773:10:1;-1:-1:-1;;;;;3544:21:4;;;;:62;;-1:-1:-1;3569:37:4;3586:5;773:10:1;4428:162:4;:::i;3569:37::-;3523:165;;;;-1:-1:-1;;;3523:165:4;;12123:2:14;3523:165:4;;;12105:21:14;12162:2;12142:18;;;12135:30;12201:34;12181:18;;;12174:62;12272:26;12252:18;;;12245:54;12316:19;;3523:165:4;11921:420:14;3523:165:4;3699:21;3708:2;3712:7;3699:8;:21::i;:::-;3396:331;3326:401;;:::o;3049:118:12:-;1120:7:11;1146:6;-1:-1:-1;;;;;1146:6:11;773:10:1;1286:23:11;1278:68;;;;-1:-1:-1;;;1278:68:11;;;;;;;:::i;:::-;3129:10:12::1;:31:::0;;-1:-1:-1;;;;;;3129:31:12::1;-1:-1:-1::0;;;;;3129:31:12;;;::::1;::::0;;;::::1;::::0;;3049:118::o;1978:90::-;1120:7:11;1146:6;-1:-1:-1;;;;;1146:6:11;773:10:1;1286:23:11;1278:68;;;;-1:-1:-1;;;1278:68:11;;;;;;;:::i;:::-;2044:9:12::1;:17:::0;1978:90::o;2929:114::-;1120:7:11;1146:6;-1:-1:-1;;;;;1146:6:11;773:10:1;1286:23:11;1278:68;;;;-1:-1:-1;;;1278:68:11;;;;;;;:::i;:::-;3007:9:12::1;:29:::0;;-1:-1:-1;;;;;;3007:29:12::1;-1:-1:-1::0;;;;;3007:29:12;;;::::1;::::0;;;::::1;::::0;;2929:114::o;4652:330:4:-;4841:41;773:10:1;4874:7:4;4841:18;:41::i;:::-;4833:103;;;;-1:-1:-1;;;4833:103:4;;;;;;;:::i;:::-;4947:28;4957:4;4963:2;4967:7;4947:9;:28::i;7595:291:12:-;7684:16;7173::4;;;:7;:16;;;;;;7684::12;;-1:-1:-1;;;;;7173:16:4;7735:87:12;;;;-1:-1:-1;;;7735:87:12;;13327:2:14;7735:87:12;;;13309:21:14;13366:2;13346:18;;;13339:30;13405:34;13385:18;;;13378:62;13476:28;13456:18;;;13449:56;13522:19;;7735:87:12;13125:422:14;7735:87:12;7848:4;7874;7856:14;:9;7868:2;7856:14;:::i;:::-;7855:23;;;;:::i;:::-;7832:47;;;;7595:291;;;;;;:::o;2466:211::-;1120:7:11;1146:6;-1:-1:-1;;;;;1146:6:11;773:10:1;1286:23:11;1278:68;;;;-1:-1:-1;;;1278:68:11;;;;;;;:::i;:::-;2571:11:12::1;::::0;::::1;-1:-1:-1::0;;;2571:11:12;::::1;::::0;::::1;::::0;2544:24:::1;::::0;::::1;::::0;::::1;::::0;-1:-1:-1;;;2544:10:12;::::1;;:24;:::i;:::-;:38;;;2536:47;;;::::0;::::1;;2611:11;2594:28;;:13;;:28;;;;;;;;;;;;;;;;:::i;:::-;::::0;;::::1;::::0;;;::::1;;::::0;;::::1;;::::0;;::::1;::::0;;::::1;;;::::0;;;2657:13:::1;::::0;2645:25:::1;::::0;-1:-1:-1;;;;2657:13:12;::::1;::::0;::::1;::::0;-1:-1:-1;;;2645:9:12;;::::1;;:25;:::i;:::-;2632:10;;:38;;;;;;;;;;;;;;;;;;2466:211:::0;:::o;2683:240::-;1120:7:11;1146:6;-1:-1:-1;;;;;1146:6:11;773:10:1;1286:23:11;1278:68;;;;-1:-1:-1;;;1278:68:11;;;;;;;:::i;:::-;2782:10:12::1;::::0;2743:21:::1;::::0;-1:-1:-1;;;;;2782:10:12::1;2774:42;2813:2;2803:7;2743:21:::0;2809:1:::1;2803:7;:::i;:::-;:12;;;;:::i;:::-;2774:42;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;2834:9:12::1;::::0;-1:-1:-1;;;;;2834:9:12::1;2826:41;2864:2;2854:7;:3:::0;2860:1:::1;2854:7;:::i;:::-;:12;;;;:::i;:::-;2826:41;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;1120:7:11;1146:6;-1:-1:-1;;;;;1146:6:11;2877:39:12::1;2913:2;2903:7;:3:::0;2909:1:::1;2903:7;:::i;:::-;:12;;;;:::i;:::-;2877:39;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;2722:201;2683:240::o:0;5048:179:4:-;5181:39;5198:4;5204:2;5208:7;5181:39;;;;;;;;;;;;:16;:39::i;5887:227:12:-;1120:7:11;1146:6;-1:-1:-1;;;;;1146:6:11;773:10:1;1286:23:11;1278:68;;;;-1:-1:-1;;;1278:68:11;;;;;;;:::i;:::-;5968:13:12::1;::::0;:23:::1;::::0;::::1;-1:-1:-1::0;;;5968:13:12;;::::1;;;:23;;5960:70;;;::::0;-1:-1:-1;;;5960:70:12;;14767:2:14;5960:70:12::1;::::0;::::1;14749:21:14::0;14806:2;14786:18;;;14779:30;14845:34;14825:18;;;14818:62;-1:-1:-1;;;14896:18:14;;;14889:32;14938:19;;5960:70:12::1;14565:398:14::0;5960:70:12::1;6040:33;6054:10;6066:6;6040:13;:33::i;:::-;6101:6;6083:24;;:13;;:24;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;5887:227:::0;:::o;3168:96:4:-;1120:7:11;1146:6;-1:-1:-1;;;;;1146:6:11;773:10:1;1286:23:11;1278:68;;;;-1:-1:-1;;;1278:68:11;;;;;;;:::i;:::-;3239:18:4;;::::1;::::0;:7:::1;::::0;:18:::1;::::0;::::1;::::0;::::1;:::i;6511:154:12:-:0;6592:7;6645:8;6655:1;6628:29;;;;;;;;;:::i;:::-;;;;;;;;;;;;;6618:40;;;;;;6611:47;;6511:154;;;;:::o;2130:235:4:-;2202:7;2237:16;;;:7;:16;;;;;;-1:-1:-1;;;;;2237:16:4;2271:19;2263:73;;;;-1:-1:-1;;;2263:73:4;;15762:2:14;2263:73:4;;;15744:21:14;15801:2;15781:18;;;15774:30;15840:34;15820:18;;;15813:62;-1:-1:-1;;;15891:18:14;;;15884:39;15940:19;;2263:73:4;15560:405:14;4170:97:12;1120:7:11;1146:6;-1:-1:-1;;;;;1146:6:11;773:10:1;1286:23:11;1278:68;;;;-1:-1:-1;;;1278:68:11;;;;;;;:::i;:::-;4246:14:12::1;::::0;;-1:-1:-1;;;;4228:32:12;::::1;-1:-1:-1::0;;;4246:14:12;;;::::1;;;4245:15;4228:32:::0;;::::1;;::::0;;4170:97::o;4553:76::-;4606:16;4611:6;4606:16;;;;;;;;;;;;:4;:16::i;:::-;4553:76;:::o;1872:100::-;1120:7:11;1146:6;-1:-1:-1;;;;;1146:6:11;773:10:1;1286:23:11;1278:68;;;;-1:-1:-1;;;1278:68:11;;;;;;;:::i;:::-;1943:14:12::1;:22:::0;1872:100::o;1868:205:4:-;1940:7;-1:-1:-1;;;;;1967:19:4;;1959:74;;;;-1:-1:-1;;;1959:74:4;;16172:2:14;1959:74:4;;;16154:21:14;16211:2;16191:18;;;16184:30;16250:34;16230:18;;;16223:62;-1:-1:-1;;;16301:18:14;;;16294:40;16351:19;;1959:74:4;15970:406:14;1959:74:4;-1:-1:-1;;;;;;2050:16:4;;;;;:9;:16;;;;;;;1868:205::o;1706:92:11:-;1120:7;1146:6;-1:-1:-1;;;;;1146:6:11;773:10:1;1286:23:11;1278:68;;;;-1:-1:-1;;;1278:68:11;;;;;;;:::i;:::-;1770:21:::1;1788:1;1770:9;:21::i;:::-;1706:92::o:0;2074:386:12:-;1120:7:11;1146:6;-1:-1:-1;;;;;1146:6:11;773:10:1;1286:23:11;1278:68;;;;-1:-1:-1;;;1278:68:11;;;;;;;:::i;:::-;2177:10:12::1;::::0;2150:24:::1;::::0;2177:28:::1;::::0;::::1;::::0;::::1;::::0;-1:-1:-1;;;2177:10:12;::::1;;;:28;:::i;:::-;2239:13;::::0;2150:55:::1;::::0;;::::1;::::0;-1:-1:-1;2215:21:12::1;::::0;2239:31:::1;::::0;::::1;::::0;::::1;::::0;-1:-1:-1;;;2239:13:12;;::::1;;:31;:::i;:::-;2312:9;::::0;2215:55:::1;::::0;;::::1;::::0;-1:-1:-1;;;;2312:9:12;::::1;;2289:32:::0;::::1;;2281:41;;;::::0;::::1;;2390:15;2373:32;;:13;;:32;;;;;;;;;;;;;;;;:::i;:::-;::::0;;::::1;::::0;;;::::1;;::::0;;::::1;;::::0;;::::1;::::0;;::::1;;;::::0;;;2440:13:::1;::::0;2428:25:::1;::::0;-1:-1:-1;;;;2440:13:12;::::1;::::0;::::1;::::0;-1:-1:-1;;;2428:9:12;;::::1;;:25;:::i;:::-;2415:10;;:38;;;;;;;;;;;;;;;;;;2140:320;;2074:386:::0;:::o;2589:102:4:-;2645:13;2677:7;2670:14;;;;;:::i;4635:942:12:-;4737:10;;;-1:-1:-1;;;4737:10:12;;;;;4714:20;;;;;;-1:-1:-1;;;4714:11:12;;;:20;:::i;:::-;:33;;;4706:84;;;;-1:-1:-1;;;4706:84:12;;16583:2:14;4706:84:12;;;16565:21:14;16622:2;16602:18;;;16595:30;16661:34;16641:18;;;16634:62;-1:-1:-1;;;16712:18:14;;;16705:36;16758:19;;4706:84:12;16381:402:14;4706:84:12;4805:14;;-1:-1:-1;;;4805:14:12;;;;4800:567;;4843:17;;-1:-1:-1;;;4843:17:12;;;;4835:53;;;;-1:-1:-1;;;4835:53:12;;16990:2:14;4835:53:12;;;16972:21:14;17029:2;17009:18;;;17002:30;17068:25;17048:18;;;17041:53;17111:18;;4835:53:12;16788:347:14;4835:53:12;4940:6;4923:23;;:14;;:23;;;;:::i;:::-;4910:9;:36;4902:80;;;;-1:-1:-1;;;4902:80:12;;17342:2:14;4902:80:12;;;17324:21:14;17381:2;17361:18;;;17354:30;17420:33;17400:18;;;17393:61;17471:18;;4902:80:12;17140:355:14;4902:80:12;4996:20;5019:27;5030:10;5042:3;5019:10;:27::i;:::-;4996:50;;;;5086:1;5068:15;:19;5060:66;;;;-1:-1:-1;;;5060:66:12;;17702:2:14;5060:66:12;;;17684:21:14;17741:2;17721:18;;;17714:30;17780:34;17760:18;;;17753:62;-1:-1:-1;;;17831:18:14;;;17824:32;17873:19;;5060:66:12;17500:398:14;5060:66:12;5158:15;5148:6;:25;;;;5140:98;;;;-1:-1:-1;;;5140:98:12;;18105:2:14;5140:98:12;;;18087:21:14;18144:2;18124:18;;;18117:30;18183:34;18163:18;;;18156:62;18254:30;18234:18;;;18227:58;18302:19;;5140:98:12;17903:424:14;5140:98:12;5252:33;5266:10;5278:6;5252:13;:33::i;:::-;5315:10;5299:27;;;;:15;:27;;;;;:37;;5330:6;;5299:27;:37;;5330:6;;5299:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;5350:7;4635:942;;:::o;4800:567::-;5409:6;5397:18;;:9;;:18;;;;:::i;:::-;5384:9;:31;5376:75;;;;-1:-1:-1;;;5376:75:12;;17342:2:14;5376:75:12;;;17324:21:14;17381:2;17361:18;;;17354:30;17420:33;17400:18;;;17393:61;17471:18;;5376:75:12;17140:355:14;5376:75:12;5479:2;5469:6;:12;;;;:27;;;;-1:-1:-1;5485:11:12;;;;;5469:27;5461:65;;;;-1:-1:-1;;;5461:65:12;;18743:2:14;5461:65:12;;;18725:21:14;18782:2;18762:18;;;18755:30;18821:27;18801:18;;;18794:55;18866:18;;5461:65:12;18541:349:14;5461:65:12;5536:33;5550:10;5562:6;5536:13;:33::i;4072:290:4:-;-1:-1:-1;;;;;4174:24:4;;773:10:1;4174:24:4;;4166:62;;;;-1:-1:-1;;;4166:62:4;;19097:2:14;4166:62:4;;;19079:21:14;19136:2;19116:18;;;19109:30;19175:27;19155:18;;;19148:55;19220:18;;4166:62:4;18895:349:14;4166:62:4;773:10:1;4239:32:4;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;4239:42:4;;;;;;;;;;;;:53;;-1:-1:-1;;4239:53:4;;;;;;;;;;4307:48;;540:41:14;;;4239:42:4;;773:10:1;4307:48:4;;513:18:14;4307:48:4;;;;;;;4072:290;;:::o;3377:681:12:-;3514:32;;-1:-1:-1;;;3514:32:12;;-1:-1:-1;;;;;1907:32:14;;3514::12;;;1889:51:14;3460:12:12;;;;;;876:42;;3514:22;;1862:18:14;;3514:32:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:36;:86;;;-1:-1:-1;3564:32:12;;-1:-1:-1;;;3564:32:12;;-1:-1:-1;;;;;1907:32:14;;3564::12;;;1889:51:14;3599:1:12;;965:42;;3564:22;;1862:18:14;;3564:32:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:36;3514:86;:127;;;-1:-1:-1;3614:23:12;;-1:-1:-1;;;3614:23:12;;-1:-1:-1;;;;;1907:32:14;;3614:23:12;;;1889:51:14;3640:1:12;;787:42;;3614:13;;1862:18:14;;3614:23:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:27;3514:127;:183;;;-1:-1:-1;3655:38:12;;-1:-1:-1;;;3655:38:12;;-1:-1:-1;;;;;1907:32:14;;3655:38:12;;;1889:51:14;3696:1:12;;1058:42;;3655:28;;1862:18:14;;3655:38:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:42;3514:183;:245;;;;3711:48;3725:8;3711:48;;;;;;;;;;;;;-1:-1:-1;;;3711:48:12;;;3748:10;3711:13;:48::i;:::-;3484:275;;3774:11;3770:53;;;3810:2;3801:11;;3770:53;-1:-1:-1;;;;;3851:25:12;;;;;;:15;:25;;;;;;;;;;3841:35;;;;;3833:93;;;;-1:-1:-1;;;3833:93:12;;;;;;;:::i;:::-;-1:-1:-1;;;;;3947:25:12;;;;;;:15;:25;;;;;;3937:35;;3947:25;;3937:35;;:::i;:::-;;;4000:1;3991:6;:10;;;3983:68;;;;-1:-1:-1;;;3983:68:12;;;;;;;:::i;:::-;3474:584;3377:681;;;;:::o;1503:363::-;1120:7:11;1146:6;-1:-1:-1;;;;;1146:6:11;773:10:1;1286:23:11;1278:68;;;;-1:-1:-1;;;1278:68:11;;;;;;;:::i;:::-;1607:7:12::1;1602:260;1620:9;:16;1616:1;:20;;;1602:260;;;1655:12;1670:9;1680:1;1670:12;;;;;;;;;;:::i;:::-;;;;;;;1655:27;;1694:12;1709:7;1717:1;1709:10;;;;;;;;;;:::i;:::-;;;;;;;1694:25;;1737:7;1732:75;1750:6;1746:10;;:1;:10;;;1732:75;;;1779:15;1789:4;1779:9;:15::i;:::-;1758:3:::0;::::1;::::0;::::1;:::i;:::-;;;;1732:75;;;;1843:7;1851:1;1843:10;;;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;1819:21:12;;;::::1;;::::0;;;:15:::1;:21:::0;;;;;;:34;;-1:-1:-1;;1819:34:12::1;;::::0;;::::1;::::0;;;::::1;::::0;;;-1:-1:-1;1638:3:12;::::1;::::0;::::1;:::i;:::-;;;;1602:260;;5293:320:4::0;5462:41;773:10:1;5495:7:4;5462:18;:41::i;:::-;5454:103;;;;-1:-1:-1;;;5454:103:4;;;;;;;:::i;:::-;5567:39;5581:4;5587:2;5591:7;5600:5;5567:13;:39::i;:::-;5293:320;;;;:::o;4064:100:12:-;1120:7:11;1146:6;-1:-1:-1;;;;;1146:6:11;773:10:1;1286:23:11;1278:68;;;;-1:-1:-1;;;1278:68:11;;;;;;;:::i;:::-;4140:17:12::1;::::0;;-1:-1:-1;;;;4119:38:12;::::1;-1:-1:-1::0;;;4140:17:12;;;::::1;;;4139:18;4119:38:::0;;::::1;;::::0;;4064:100::o;2757:363:4:-;7150:4;7173:16;;;:7;:16;;;;;;2830:13;;-1:-1:-1;;;;;7173:16:4;2855:76;;;;-1:-1:-1;;;2855:76:4;;20566:2:14;2855:76:4;;;20548:21:14;20605:2;20585:18;;;20578:30;20644:34;20624:18;;;20617:62;-1:-1:-1;;;20695:18:14;;;20688:45;20750:19;;2855:76:4;20364:411:14;2855:76:4;2973:1;2955:7;2949:21;;;;;:::i;:::-;;;:25;:164;;;;;;;;;;;;;;;;;;;;;;3013:7;3022:18;:7;:16;:18::i;:::-;2996:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2942:171;2757:363;-1:-1:-1;;2757:363:4:o;6124:381:12:-;6217:13;;-1:-1:-1;;;6217:13:12;;;;6209:59;;;;-1:-1:-1;;;6209:59:12;;22287:2:14;6209:59:12;;;22269:21:14;22326:2;22306:18;;;22299:30;22365:31;22345:18;;;22338:59;22414:18;;6209:59:12;22085:353:14;6209:59:12;6286:13;;:23;;;-1:-1:-1;;;6286:13:12;;;;;:23;;6278:63;;;;-1:-1:-1;;;6278:63:12;;22645:2:14;6278:63:12;;;22627:21:14;22684:2;22664:18;;;22657:30;22723:29;22703:18;;;22696:57;22770:18;;6278:63:12;22443:351:14;6278:63:12;6359:27;6371:2;6375:10;;6359:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6359:11:12;;-1:-1:-1;;;6359:27:12:i;:::-;6351:78;;;;-1:-1:-1;;;6351:78:12;;23001:2:14;6351:78:12;;;22983:21:14;23040:2;23020:18;;;23013:30;23079:34;23059:18;;;23052:62;-1:-1:-1;;;23130:18:14;;;23123:36;23176:19;;6351:78:12;22799:402:14;6351:78:12;6440:25;6454:2;6458:6;6440:13;:25::i;:::-;6492:6;6475:23;;:13;;:23;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;6124:381;;;;:::o;5720:161::-;5804:4;5827:47;5841:8;5827:47;;;;;;;;;;;;;-1:-1:-1;;;5827:47:12;;;5863:10;5827:13;:47::i;:::-;5820:54;5720:161;-1:-1:-1;;;5720:161:12:o;1947:189:11:-;1120:7;1146:6;-1:-1:-1;;;;;1146:6:11;773:10:1;1286:23:11;1278:68;;;;-1:-1:-1;;;1278:68:11;;;;;;;:::i;:::-;-1:-1:-1;;;;;2035:22:11;::::1;2027:73;;;::::0;-1:-1:-1;;;2027:73:11;;23408:2:14;2027:73:11::1;::::0;::::1;23390:21:14::0;23447:2;23427:18;;;23420:30;23486:34;23466:18;;;23459:62;-1:-1:-1;;;23537:18:14;;;23530:36;23583:19;;2027:73:11::1;23206:402:14::0;2027:73:11::1;2110:19;2120:8;2110:9;:19::i;1509:300:4:-:0;1611:4;-1:-1:-1;;;;;;1646:40:4;;-1:-1:-1;;;1646:40:4;;:104;;-1:-1:-1;;;;;;;1702:48:4;;-1:-1:-1;;;1702:48:4;1646:104;:156;;;-1:-1:-1;;;;;;;;;;991:40:3;;;1766:36:4;883:155:3;10936:171:4;11010:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;11010:29:4;-1:-1:-1;;;;;11010:29:4;;;;;;;;:24;;11063:23;11010:24;11063:14;:23::i;:::-;-1:-1:-1;;;;;11054:46:4;;;;;;;;;;;10936:171;;:::o;7368:344::-;7461:4;7173:16;;;:7;:16;;;;;;-1:-1:-1;;;;;7173:16:4;7477:73;;;;-1:-1:-1;;;7477:73:4;;23815:2:14;7477:73:4;;;23797:21:14;23854:2;23834:18;;;23827:30;23893:34;23873:18;;;23866:62;-1:-1:-1;;;23944:18:14;;;23937:42;23996:19;;7477:73:4;23613:408:14;7477:73:4;7560:13;7576:23;7591:7;7576:14;:23::i;:::-;7560:39;;7628:5;-1:-1:-1;;;;;7617:16:4;:7;-1:-1:-1;;;;;7617:16:4;;:51;;;;7661:7;-1:-1:-1;;;;;7637:31:4;:20;7649:7;7637:11;:20::i;:::-;-1:-1:-1;;;;;7637:31:4;;7617:51;:87;;;-1:-1:-1;;;;;;4548:25:4;;;4525:4;4548:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;7672:32;7609:96;7368:344;-1:-1:-1;;;;7368:344:4:o;10265:560::-;10419:4;-1:-1:-1;;;;;10392:31:4;:23;10407:7;10392:14;:23::i;:::-;-1:-1:-1;;;;;10392:31:4;;10384:85;;;;-1:-1:-1;;;10384:85:4;;24228:2:14;10384:85:4;;;24210:21:14;24267:2;24247:18;;;24240:30;24306:34;24286:18;;;24279:62;-1:-1:-1;;;24357:18:14;;;24350:39;24406:19;;10384:85:4;24026:405:14;10384:85:4;-1:-1:-1;;;;;10487:16:4;;10479:65;;;;-1:-1:-1;;;10479:65:4;;24638:2:14;10479:65:4;;;24620:21:14;24677:2;24657:18;;;24650:30;24716:34;24696:18;;;24689:62;-1:-1:-1;;;24767:18:14;;;24760:34;24811:19;;10479:65:4;24436:400:14;10479:65:4;10656:29;10673:1;10677:7;10656:8;:29::i;:::-;-1:-1:-1;;;;;10696:15:4;;;;;;:9;:15;;;;;:20;;10715:1;;10696:15;:20;;10715:1;;10696:20;:::i;:::-;;;;-1:-1:-1;;;;;;;10726:13:4;;;;;;:9;:13;;;;;:18;;10743:1;;10726:13;:18;;10743:1;;10726:18;:::i;:::-;;;;-1:-1:-1;;10754:16:4;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;10754:21:4;-1:-1:-1;;;;;10754:21:4;;;;;;;;;10791:27;;10754:16;;10791:27;;;;;;;10265:560;;;:::o;6671:118:12:-;6743:7;6738:44;6761:1;6752:10;;:6;:10;;;6738:44;;;6769:13;6779:2;6769:9;:13::i;:::-;6764:3;;;;:::i;:::-;;;;6738:44;;2142:169:11;2197:16;2216:6;;-1:-1:-1;;;;;2232:17:11;;;-1:-1:-1;;;;;;2232:17:11;;;;;;2264:40;;2216:6;;;;;;;2264:40;;2197:16;2264:40;2187:124;2142:169;:::o;4273:274:12:-;4376:4;1146:6:11;;-1:-1:-1;;;;;1146:6:11;-1:-1:-1;;;;;4399:141:12;:130;4426:69;4482:7;4491:1;4465:28;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;4465:28:12;;;;;;;;;4455:39;;4465:28;4455:39;;;;26515:66:14;8238:58:2;;;26503:79:14;26598:12;;;;26591:28;;;;8238:58:2;;;;;;;;;;26635:12:14;;;;8238:58:2;;;8228:69;;;;;;8039:265;4426:69:12;4509:10;4399:13;:130::i;:::-;-1:-1:-1;;;;;4399:141:12;;;4273:274;-1:-1:-1;;;;4273:274:12:o;6795:144::-;6858:11;;6844:26;;6854:2;;-1:-1:-1;;;6858:11:12;;;;6844:9;:26::i;:::-;6897:11;;6885:24;;;-1:-1:-1;;;;;25295:32:14;;25277:51;;-1:-1:-1;;;6897:11:12;;;;;25359:2:14;25344:18;;25337:47;6885:24:12;;25250:18:14;6885:24:12;;;;;;;6919:11;:13;;-1:-1:-1;;;6919:13:12;;;;;:11;:13;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;6795:144;:::o;6475:307:4:-;6626:28;6636:4;6642:2;6646:7;6626:9;:28::i;:::-;6672:48;6695:4;6701:2;6705:7;6714:5;6672:22;:48::i;:::-;6664:111;;;;-1:-1:-1;;;6664:111:4;;;;;;;:::i;300:703:13:-;356:13;573:10;569:51;;-1:-1:-1;;599:10:13;;;;;;;;;;;;-1:-1:-1;;;599:10:13;;;;;300:703::o;569:51::-;644:5;629:12;683:75;690:9;;683:75;;715:8;;;;:::i;:::-;;-1:-1:-1;737:10:13;;-1:-1:-1;745:2:13;737:10;;:::i;:::-;;;683:75;;;767:19;799:6;789:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;789:17:13;;767:39;;816:150;823:10;;816:150;;849:11;859:1;849:11;;:::i;:::-;;-1:-1:-1;917:10:13;925:2;917:5;:10;:::i;:::-;904:24;;:2;:24;:::i;:::-;891:39;;874:6;881;874:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;874:56:13;;;;;;;;-1:-1:-1;944:11:13;953:2;944:11;;:::i;:::-;;;816:150;;4292:227:2;4370:7;4390:17;4409:18;4431:27;4442:4;4448:9;4431:10;:27::i;:::-;4389:69;;;;4468:18;4480:5;4468:11;:18::i;:::-;-1:-1:-1;4503:9:2;4292:227;-1:-1:-1;;;4292:227:2:o;8042:108:4:-;8117:26;8127:2;8131:7;8117:26;;;;;;;;;;;;:9;:26::i;11660:778::-;11810:4;-1:-1:-1;;;;;11830:13:4;;1140:20:0;1186:8;11826:606:4;;11865:72;;-1:-1:-1;;;11865:72:4;;-1:-1:-1;;;;;11865:36:4;;;;;:72;;773:10:1;;11916:4:4;;11922:7;;11931:5;;11865:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11865:72:4;;;;;;;;-1:-1:-1;;11865:72:4;;;;;;;;;;;;:::i;:::-;;;11861:519;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12104:13:4;;12100:266;;12146:60;;-1:-1:-1;;;12146:60:4;;;;;;;:::i;12100:266::-;12318:6;12312:13;12303:6;12299:2;12295:15;12288:38;11861:519;-1:-1:-1;;;;;;11987:51:4;-1:-1:-1;;;11987:51:4;;-1:-1:-1;11980:58:4;;11826:606;-1:-1:-1;12417:4:4;11660:778;;;;;;:::o;2227:1279:2:-;2308:7;2317:12;2538:9;:16;2558:2;2538:22;2534:966;;;2827:4;2812:20;;2806:27;2876:4;2861:20;;2855:27;2933:4;2918:20;;2912:27;2576:9;2904:36;2974:25;2985:4;2904:36;2806:27;2855;2974:10;:25::i;:::-;2967:32;;;;;;;;;2534:966;3020:9;:16;3040:2;3020:22;3016:484;;;3289:4;3274:20;;3268:27;3339:4;3324:20;;3318:27;3379:23;3390:4;3268:27;3318;3379:10;:23::i;:::-;3372:30;;;;;;;;3016:484;-1:-1:-1;3449:1:2;;-1:-1:-1;3453:35:2;3433:56;;532:631;609:20;600:5;:29;;;;;;;;:::i;:::-;;596:561;;;532:631;:::o;596:561::-;705:29;696:5;:38;;;;;;;;:::i;:::-;;692:465;;;750:34;;-1:-1:-1;;;750:34:2;;27751:2:14;750:34:2;;;27733:21:14;27790:2;27770:18;;;27763:30;27829:26;27809:18;;;27802:54;27873:18;;750:34:2;27549:348:14;692:465:2;814:35;805:5;:44;;;;;;;;:::i;:::-;;801:356;;;865:41;;-1:-1:-1;;;865:41:2;;28104:2:14;865:41:2;;;28086:21:14;28143:2;28123:18;;;28116:30;28182:33;28162:18;;;28155:61;28233:18;;865:41:2;27902:355:14;801:356:2;936:30;927:5;:39;;;;;;;;:::i;:::-;;923:234;;;982:44;;-1:-1:-1;;;982:44:2;;28464:2:14;982:44:2;;;28446:21:14;28503:2;28483:18;;;28476:30;28542:34;28522:18;;;28515:62;-1:-1:-1;;;28593:18:14;;;28586:32;28635:19;;982:44:2;28262:398:14;923:234:2;1056:30;1047:5;:39;;;;;;;;:::i;:::-;;1043:114;;;1102:44;;-1:-1:-1;;;1102:44:2;;28867:2:14;1102:44:2;;;28849:21:14;28906:2;28886:18;;;28879:30;28945:34;28925:18;;;28918:62;-1:-1:-1;;;28996:18:14;;;28989:32;29038:19;;1102:44:2;28665:398:14;8371:311:4;8496:18;8502:2;8506:7;8496:5;:18::i;:::-;8545:54;8576:1;8580:2;8584:7;8593:5;8545:22;:54::i;:::-;8524:151;;;;-1:-1:-1;;;8524:151:4;;;;;;;:::i;5743:1603:2:-;5869:7;;6793:66;6780:79;;6776:161;;;-1:-1:-1;6891:1:2;;-1:-1:-1;6895:30:2;6875:51;;6776:161;6950:1;:7;;6955:2;6950:7;;:18;;;;;6961:1;:7;;6966:2;6961:7;;6950:18;6946:100;;;-1:-1:-1;7000:1:2;;-1:-1:-1;7004:30:2;6984:51;;6946:100;7157:24;;;7140:14;7157:24;;;;;;;;;29295:25:14;;;29368:4;29356:17;;29336:18;;;29329:45;;;;29390:18;;;29383:34;;;29433:18;;;29426:34;;;7157:24:2;;29267:19:14;;7157:24:2;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7157:24:2;;-1:-1:-1;;7157:24:2;;;-1:-1:-1;;;;;;;7195:20:2;;7191:101;;7247:1;7251:29;7231:50;;;;;;;7191:101;7310:6;-1:-1:-1;7318:20:2;;-1:-1:-1;5743:1603:2;;;;;;;;:::o;4773:379::-;4883:7;;-1:-1:-1;;;;;4980:75:2;;5081:3;5077:12;;;5091:2;5073:21;5120:25;5131:4;5073:21;5140:1;4980:75;5120:10;:25::i;:::-;5113:32;;;;;;4773:379;;;;;;:::o;9004:372:4:-;-1:-1:-1;;;;;9083:16:4;;9075:61;;;;-1:-1:-1;;;9075:61:4;;29673:2:14;9075:61:4;;;29655:21:14;;;29692:18;;;29685:30;29751:34;29731:18;;;29724:62;29803:18;;9075:61:4;29471:356:14;9075:61:4;7150:4;7173:16;;;:7;:16;;;;;;-1:-1:-1;;;;;7173:16:4;:30;9146:58;;;;-1:-1:-1;;;9146:58:4;;30034:2:14;9146:58:4;;;30016:21:14;30073:2;30053:18;;;30046:30;30112;30092:18;;;30085:58;30160:18;;9146:58:4;29832:352:14;9146:58:4;-1:-1:-1;;;;;9271:13:4;;;;;;:9;:13;;;;;:18;;9288:1;;9271:13;:18;;9288:1;;9271:18;:::i;:::-;;;;-1:-1:-1;;9299:16:4;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;9299:21:4;-1:-1:-1;;;;;9299:21:4;;;;;;;;9336:33;;9299:16;;;9336:33;;9299:16;;9336:33;9004:372;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:131:14;-1:-1:-1;;;;;;88:32:14;;78:43;;68:71;;135:1;132;125:12;150:245;208:6;261:2;249:9;240:7;236:23;232:32;229:52;;;277:1;274;267:12;229:52;316:9;303:23;335:30;359:5;335:30;:::i;785:258::-;857:1;867:113;881:6;878:1;875:13;867:113;;;957:11;;;951:18;938:11;;;931:39;903:2;896:10;867:113;;;998:6;995:1;992:13;989:48;;;-1:-1:-1;;1033:1:14;1015:16;;1008:27;785:258::o;1048:269::-;1101:3;1139:5;1133:12;1166:6;1161:3;1154:19;1182:63;1238:6;1231:4;1226:3;1222:14;1215:4;1208:5;1204:16;1182:63;:::i;:::-;1299:2;1278:15;-1:-1:-1;;1274:29:14;1265:39;;;;1306:4;1261:50;;1048:269;-1:-1:-1;;1048:269:14:o;1322:231::-;1471:2;1460:9;1453:21;1434:4;1491:56;1543:2;1532:9;1528:18;1520:6;1491:56;:::i;1558:180::-;1617:6;1670:2;1658:9;1649:7;1645:23;1641:32;1638:52;;;1686:1;1683;1676:12;1638:52;-1:-1:-1;1709:23:14;;1558:180;-1:-1:-1;1558:180:14:o;1951:173::-;2019:20;;-1:-1:-1;;;;;2068:31:14;;2058:42;;2048:70;;2114:1;2111;2104:12;2048:70;1951:173;;;:::o;2129:254::-;2197:6;2205;2258:2;2246:9;2237:7;2233:23;2229:32;2226:52;;;2274:1;2271;2264:12;2226:52;2297:29;2316:9;2297:29;:::i;:::-;2287:39;2373:2;2358:18;;;;2345:32;;-1:-1:-1;;;2129:254:14:o;2388:186::-;2447:6;2500:2;2488:9;2479:7;2475:23;2471:32;2468:52;;;2516:1;2513;2506:12;2468:52;2539:29;2558:9;2539:29;:::i;2579:328::-;2656:6;2664;2672;2725:2;2713:9;2704:7;2700:23;2696:32;2693:52;;;2741:1;2738;2731:12;2693:52;2764:29;2783:9;2764:29;:::i;:::-;2754:39;;2812:38;2846:2;2835:9;2831:18;2812:38;:::i;:::-;2802:48;;2897:2;2886:9;2882:18;2869:32;2859:42;;2579:328;;;;;:::o;2912:248::-;2980:6;2988;3041:2;3029:9;3020:7;3016:23;3012:32;3009:52;;;3057:1;3054;3047:12;3009:52;-1:-1:-1;;3080:23:14;;;3150:2;3135:18;;;3122:32;;-1:-1:-1;2912:248:14:o;3444:156::-;3510:20;;3570:4;3559:16;;3549:27;;3539:55;;3590:1;3587;3580:12;3605:182;3662:6;3715:2;3703:9;3694:7;3690:23;3686:32;3683:52;;;3731:1;3728;3721:12;3683:52;3754:27;3771:9;3754:27;:::i;3792:127::-;3853:10;3848:3;3844:20;3841:1;3834:31;3884:4;3881:1;3874:15;3908:4;3905:1;3898:15;3924:275;3995:2;3989:9;4060:2;4041:13;;-1:-1:-1;;4037:27:14;4025:40;;4095:18;4080:34;;4116:22;;;4077:62;4074:88;;;4142:18;;:::i;:::-;4178:2;4171:22;3924:275;;-1:-1:-1;3924:275:14:o;4204:531::-;4247:5;4300:3;4293:4;4285:6;4281:17;4277:27;4267:55;;4318:1;4315;4308:12;4267:55;4354:6;4341:20;4380:18;4376:2;4373:26;4370:52;;;4402:18;;:::i;:::-;4446:55;4489:2;4470:13;;-1:-1:-1;;4466:27:14;4495:4;4462:38;4446:55;:::i;:::-;4526:2;4517:7;4510:19;4572:3;4565:4;4560:2;4552:6;4548:15;4544:26;4541:35;4538:55;;;4589:1;4586;4579:12;4538:55;4654:2;4647:4;4639:6;4635:17;4628:4;4619:7;4615:18;4602:55;4702:1;4677:16;;;4695:4;4673:27;4666:38;;;;4681:7;4204:531;-1:-1:-1;;;4204:531:14:o;4740:322::-;4809:6;4862:2;4850:9;4841:7;4837:23;4833:32;4830:52;;;4878:1;4875;4868:12;4830:52;4918:9;4905:23;4951:18;4943:6;4940:30;4937:50;;;4983:1;4980;4973:12;4937:50;5006;5048:7;5039:6;5028:9;5024:22;5006:50;:::i;5067:396::-;5145:6;5153;5206:2;5194:9;5185:7;5181:23;5177:32;5174:52;;;5222:1;5219;5212:12;5174:52;5245:29;5264:9;5245:29;:::i;:::-;5235:39;;5325:2;5314:9;5310:18;5297:32;5352:18;5344:6;5341:30;5338:50;;;5384:1;5381;5374:12;5338:50;5407;5449:7;5440:6;5429:9;5425:22;5407:50;:::i;:::-;5397:60;;;5067:396;;;;;:::o;5832:391::-;5907:6;5915;5968:2;5956:9;5947:7;5943:23;5939:32;5936:52;;;5984:1;5981;5974:12;5936:52;6007:27;6024:9;6007:27;:::i;6228:347::-;6293:6;6301;6354:2;6342:9;6333:7;6329:23;6325:32;6322:52;;;6370:1;6367;6360:12;6322:52;6393:29;6412:9;6393:29;:::i;:::-;6383:39;;6472:2;6461:9;6457:18;6444:32;6519:5;6512:13;6505:21;6498:5;6495:32;6485:60;;6541:1;6538;6531:12;6485:60;6564:5;6554:15;;;6228:347;;;;;:::o;7169:183::-;7229:4;7262:18;7254:6;7251:30;7248:56;;;7284:18;;:::i;:::-;-1:-1:-1;7329:1:14;7325:14;7341:4;7321:25;;7169:183::o;7357:664::-;7409:5;7462:3;7455:4;7447:6;7443:17;7439:27;7429:55;;7480:1;7477;7470:12;7429:55;7516:6;7503:20;7542:4;7566:60;7582:43;7622:2;7582:43;:::i;:::-;7566:60;:::i;:::-;7660:15;;;7746:1;7742:10;;;;7730:23;;7726:32;;;7691:12;;;;7770:15;;;7767:35;;;7798:1;7795;7788:12;7767:35;7834:2;7826:6;7822:15;7846:146;7862:6;7857:3;7854:15;7846:146;;;7928:21;7945:3;7928:21;:::i;:::-;7916:34;;7970:12;;;;7879;;7846:146;;;-1:-1:-1;8010:5:14;7357:664;-1:-1:-1;;;;;;7357:664:14:o;8026:1142::-;8142:6;8150;8203:2;8191:9;8182:7;8178:23;8174:32;8171:52;;;8219:1;8216;8209:12;8171:52;8259:9;8246:23;8288:18;8329:2;8321:6;8318:14;8315:34;;;8345:1;8342;8335:12;8315:34;8383:6;8372:9;8368:22;8358:32;;8428:7;8421:4;8417:2;8413:13;8409:27;8399:55;;8450:1;8447;8440:12;8399:55;8486:2;8473:16;8508:4;8532:60;8548:43;8588:2;8548:43;:::i;8532:60::-;8626:15;;;8708:1;8704:10;;;;8696:19;;8692:28;;;8657:12;;;;8732:19;;;8729:39;;;8764:1;8761;8754:12;8729:39;8788:11;;;;8808:148;8824:6;8819:3;8816:15;8808:148;;;8890:23;8909:3;8890:23;:::i;:::-;8878:36;;8841:12;;;;8934;;;;8808:148;;;8975:5;-1:-1:-1;;9018:18:14;;9005:32;;-1:-1:-1;;9049:16:14;;;9046:36;;;9078:1;9075;9068:12;9046:36;;9101:61;9154:7;9143:8;9132:9;9128:24;9101:61;:::i;9173:538::-;9268:6;9276;9284;9292;9345:3;9333:9;9324:7;9320:23;9316:33;9313:53;;;9362:1;9359;9352:12;9313:53;9385:29;9404:9;9385:29;:::i;:::-;9375:39;;9433:38;9467:2;9456:9;9452:18;9433:38;:::i;:::-;9423:48;;9518:2;9507:9;9503:18;9490:32;9480:42;;9573:2;9562:9;9558:18;9545:32;9600:18;9592:6;9589:30;9586:50;;;9632:1;9629;9622:12;9586:50;9655;9697:7;9688:6;9677:9;9673:22;9655:50;:::i;:::-;9645:60;;;9173:538;;;;;;;:::o;9716:735::-;9802:6;9810;9818;9826;9879:2;9867:9;9858:7;9854:23;9850:32;9847:52;;;9895:1;9892;9885:12;9847:52;9918:29;9937:9;9918:29;:::i;:::-;9908:39;;9966:36;9998:2;9987:9;9983:18;9966:36;:::i;:::-;9956:46;;10053:2;10042:9;10038:18;10025:32;10076:18;10117:2;10109:6;10106:14;10103:34;;;10133:1;10130;10123:12;10103:34;10171:6;10160:9;10156:22;10146:32;;10216:7;10209:4;10205:2;10201:13;10197:27;10187:55;;10238:1;10235;10228:12;10187:55;10278:2;10265:16;10304:2;10296:6;10293:14;10290:34;;;10320:1;10317;10310:12;10290:34;10365:7;10360:2;10351:6;10347:2;10343:15;10339:24;10336:37;10333:57;;;10386:1;10383;10376:12;10333:57;9716:735;;;;-1:-1:-1;;10417:2:14;10409:11;;-1:-1:-1;;;9716:735:14:o;10456:260::-;10524:6;10532;10585:2;10573:9;10564:7;10560:23;10556:32;10553:52;;;10601:1;10598;10591:12;10553:52;10624:29;10643:9;10624:29;:::i;:::-;10614:39;;10672:38;10706:2;10695:9;10691:18;10672:38;:::i;:::-;10662:48;;10456:260;;;;;:::o;10721:380::-;10800:1;10796:12;;;;10843;;;10864:61;;10918:4;10910:6;10906:17;10896:27;;10864:61;10971:2;10963:6;10960:14;10940:18;10937:38;10934:161;;;11017:10;11012:3;11008:20;11005:1;10998:31;11052:4;11049:1;11042:15;11080:4;11077:1;11070:15;10934:161;;10721:380;;;:::o;12346:356::-;12548:2;12530:21;;;12567:18;;;12560:30;12626:34;12621:2;12606:18;;12599:62;12693:2;12678:18;;12346:356::o;12707:413::-;12909:2;12891:21;;;12948:2;12928:18;;;12921:30;12987:34;12982:2;12967:18;;12960:62;-1:-1:-1;;;13053:2:14;13038:18;;13031:47;13110:3;13095:19;;12707:413::o;13552:127::-;13613:10;13608:3;13604:20;13601:1;13594:31;13644:4;13641:1;13634:15;13668:4;13665:1;13658:15;13684:168;13724:7;13790:1;13786;13782:6;13778:14;13775:1;13772:21;13767:1;13760:9;13753:17;13749:45;13746:71;;;13797:18;;:::i;:::-;-1:-1:-1;13837:9:14;;13684:168::o;13857:127::-;13918:10;13913:3;13909:20;13906:1;13899:31;13949:4;13946:1;13939:15;13973:4;13970:1;13963:15;13989:120;14029:1;14055;14045:35;;14060:18;;:::i;:::-;-1:-1:-1;14094:9:14;;13989:120::o;14114:217::-;14153:4;14182:6;14238:10;;;;14208;;14260:12;;;14257:38;;;14275:18;;:::i;:::-;14312:13;;14114:217;-1:-1:-1;;;14114:217:14:o;14336:224::-;14375:3;14403:6;14436:2;14433:1;14429:10;14466:2;14463:1;14459:10;14497:3;14493:2;14489:12;14484:3;14481:21;14478:47;;;14505:18;;:::i;:::-;14541:13;;14336:224;-1:-1:-1;;;;14336:224:14:o;14968:185::-;15010:3;15048:5;15042:12;15063:52;15108:6;15103:3;15096:4;15089:5;15085:16;15063:52;:::i;:::-;15131:16;;;;;14968:185;-1:-1:-1;;14968:185:14:o;15158:397::-;15372:26;15368:31;15359:6;15355:2;15351:15;15347:53;15342:3;15335:66;15317:3;15430:6;15424:13;15446:62;15501:6;15496:2;15491:3;15487:12;15480:4;15472:6;15468:17;15446:62;:::i;:::-;15528:16;;;;15546:2;15524:25;;15158:397;-1:-1:-1;;;15158:397:14:o;18332:204::-;18370:3;18406:4;18403:1;18399:12;18438:4;18435:1;18431:12;18473:3;18467:4;18463:14;18458:3;18455:23;18452:49;;;18481:18;;:::i;:::-;18517:13;;18332:204;-1:-1:-1;;;18332:204:14:o;19249:184::-;19319:6;19372:2;19360:9;19351:7;19347:23;19343:32;19340:52;;;19388:1;19385;19378:12;19340:52;-1:-1:-1;19411:16:14;;19249:184;-1:-1:-1;19249:184:14:o;19438:409::-;19640:2;19622:21;;;19679:2;19659:18;;;19652:30;19718:34;19713:2;19698:18;;19691:62;-1:-1:-1;;;19784:2:14;19769:18;;19762:43;19837:3;19822:19;;19438:409::o;19852:195::-;19890:4;19927;19924:1;19920:12;19959:4;19956:1;19952:12;19984:3;19979;19976:12;19973:38;;;19991:18;;:::i;:::-;20028:13;;;19852:195;-1:-1:-1;;;19852:195:14:o;20052:127::-;20113:10;20108:3;20104:20;20101:1;20094:31;20144:4;20141:1;20134:15;20168:4;20165:1;20158:15;20184:175;20221:3;20265:4;20258:5;20254:16;20294:4;20285:7;20282:17;20279:43;;;20302:18;;:::i;:::-;20351:1;20338:15;;20184:175;-1:-1:-1;;20184:175:14:o;20906:1174::-;21082:3;21111:1;21144:6;21138:13;21174:3;21196:1;21224:9;21220:2;21216:18;21206:28;;21284:2;21273:9;21269:18;21306;21296:61;;21350:4;21342:6;21338:17;21328:27;;21296:61;21376:2;21424;21416:6;21413:14;21393:18;21390:38;21387:165;;;-1:-1:-1;;;21451:33:14;;21507:4;21504:1;21497:15;21537:4;21458:3;21525:17;21387:165;21568:18;21595:104;;;;21713:1;21708:320;;;;21561:467;;21595:104;-1:-1:-1;;21628:24:14;;21616:37;;21673:16;;;;-1:-1:-1;21595:104:14;;21708:320;20853:1;20846:14;;;20890:4;20877:18;;21803:1;21817:165;21831:6;21828:1;21825:13;21817:165;;;21909:14;;21896:11;;;21889:35;21952:16;;;;21846:10;;21817:165;;;21821:3;;22011:6;22006:3;22002:16;21995:23;;21561:467;;;;;;;22044:30;22070:3;22062:6;22044:30;:::i;:::-;22037:37;20906:1174;-1:-1:-1;;;;;20906:1174:14:o;24841:125::-;24881:4;24909:1;24906;24903:8;24900:34;;;24914:18;;:::i;:::-;-1:-1:-1;24951:9:14;;24841:125::o;24971:128::-;25011:3;25042:1;25038:6;25035:1;25032:13;25029:39;;;25048:18;;:::i;:::-;-1:-1:-1;25084:9:14;;24971:128::o;25395:197::-;25433:3;25461:6;25502:2;25495:5;25491:14;25529:2;25520:7;25517:15;25514:41;;;25535:18;;:::i;:::-;25584:1;25571:15;;25395:197;-1:-1:-1;;;25395:197:14:o;25597:414::-;25799:2;25781:21;;;25838:2;25818:18;;;25811:30;25877:34;25872:2;25857:18;;25850:62;-1:-1:-1;;;25943:2:14;25928:18;;25921:48;26001:3;25986:19;;25597:414::o;26016:135::-;26055:3;-1:-1:-1;;26076:17:14;;26073:43;;;26096:18;;:::i;:::-;-1:-1:-1;26143:1:14;26132:13;;26016:135::o;26156:112::-;26188:1;26214;26204:35;;26219:18;;:::i;:::-;-1:-1:-1;26253:9:14;;26156:112::o;26658:500::-;-1:-1:-1;;;;;26927:15:14;;;26909:34;;26979:15;;26974:2;26959:18;;26952:43;27026:2;27011:18;;27004:34;;;27074:3;27069:2;27054:18;;27047:31;;;26852:4;;27095:57;;27132:19;;27124:6;27095:57;:::i;:::-;27087:65;26658:500;-1:-1:-1;;;;;;26658:500:14:o;27163:249::-;27232:6;27285:2;27273:9;27264:7;27260:23;27256:32;27253:52;;;27301:1;27298;27291:12;27253:52;27333:9;27327:16;27352:30;27376:5;27352:30;:::i;27417:127::-;27478:10;27473:3;27469:20;27466:1;27459:31;27509:4;27506:1;27499:15;27533:4;27530:1;27523:15
Swarm Source
ipfs://0b0419e3828a34e8f65a8fb740ee706c95dbef6902877555193e2e069ab5b631
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.