More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 307 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Sale Mint | 20332347 | 198 days ago | IN | 0.12 ETH | 0.00238425 | ||||
Withdraw Balance | 18868809 | 403 days ago | IN | 0 ETH | 0.00051352 | ||||
Withdraw Balance | 18868779 | 403 days ago | IN | 0 ETH | 0.00053572 | ||||
Sale Mint | 18763542 | 418 days ago | IN | 0.06 ETH | 0.0064033 | ||||
Sale Mint | 18712803 | 425 days ago | IN | 0.3 ETH | 0.01301281 | ||||
Withdraw Balance | 17880117 | 542 days ago | IN | 0 ETH | 0.00069054 | ||||
Withdraw Balance | 17880093 | 542 days ago | IN | 0 ETH | 0.000695 | ||||
Sale Mint | 17475360 | 599 days ago | IN | 0.06 ETH | 0.00270588 | ||||
Sale Mint | 17472879 | 599 days ago | IN | 0.06 ETH | 0.00269106 | ||||
Giveaway Mint | 17442126 | 603 days ago | IN | 0 ETH | 0.01093444 | ||||
Giveaway Mint | 17442117 | 603 days ago | IN | 0 ETH | 0.00097345 | ||||
Giveaway Mint | 17442089 | 603 days ago | IN | 0 ETH | 0.00082848 | ||||
Sale Mint | 17428668 | 605 days ago | IN | 0.06 ETH | 0.00408608 | ||||
Sale Mint | 16875716 | 683 days ago | IN | 0.06 ETH | 0.00248244 | ||||
Sale Mint | 16650524 | 715 days ago | IN | 0.06 ETH | 0.00702773 | ||||
Team Mint | 16647971 | 715 days ago | IN | 0 ETH | 0.0302897 | ||||
Team Mint | 16647953 | 715 days ago | IN | 0 ETH | 0.06711003 | ||||
Add To Approved ... | 16547755 | 729 days ago | IN | 0 ETH | 0.00076106 | ||||
Giveaway Mint | 16498052 | 736 days ago | IN | 0 ETH | 0.00234391 | ||||
Giveaway Mint | 16498049 | 736 days ago | IN | 0 ETH | 0.00236944 | ||||
Giveaway Mint | 16498048 | 736 days ago | IN | 0 ETH | 0.00241431 | ||||
Giveaway Mint | 16498048 | 736 days ago | IN | 0 ETH | 0.00241431 | ||||
Giveaway Mint | 16498047 | 736 days ago | IN | 0 ETH | 0.00250708 | ||||
Giveaway Mint | 16498047 | 736 days ago | IN | 0 ETH | 0.00250708 | ||||
Giveaway Mint | 16498046 | 736 days ago | IN | 0 ETH | 0.00226632 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
20332347 | 198 days ago | 0.1008 ETH | ||||
20332347 | 198 days ago | 0.0192 ETH | ||||
20332347 | 198 days ago | 0.12 ETH | ||||
18868809 | 403 days ago | 0.3024 ETH | ||||
18868779 | 403 days ago | 0.0576 ETH | ||||
18763542 | 418 days ago | 0.0504 ETH | ||||
18763542 | 418 days ago | 0.0096 ETH | ||||
18763542 | 418 days ago | 0.06 ETH | ||||
18712803 | 425 days ago | 0.252 ETH | ||||
18712803 | 425 days ago | 0.048 ETH | ||||
18712803 | 425 days ago | 0.3 ETH | ||||
17880117 | 542 days ago | 0.048 ETH | ||||
17880093 | 542 days ago | 0.252 ETH | ||||
17475360 | 599 days ago | 0.0504 ETH | ||||
17475360 | 599 days ago | 0.0096 ETH | ||||
17475360 | 599 days ago | 0.06 ETH | ||||
17472879 | 599 days ago | 0.0504 ETH | ||||
17472879 | 599 days ago | 0.0096 ETH | ||||
17472879 | 599 days ago | 0.06 ETH | ||||
17442126 | 603 days ago | 0.0504 ETH | ||||
17442126 | 603 days ago | 0.0096 ETH | ||||
17442126 | 603 days ago | 0.06 ETH | ||||
17442126 | 603 days ago | 0.0504 ETH | ||||
17442126 | 603 days ago | 0.0096 ETH | ||||
17442126 | 603 days ago | 0.06 ETH |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
DI
Compiler Version
v0.8.15+commit.e14f2714
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-07-11 */ // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } /** * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation. */ function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); } } // File: @openzeppelin/contracts/utils/cryptography/ECDSA.sol // OpenZeppelin Contracts (last updated v4.7.0) (utils/cryptography/ECDSA.sol) pragma solidity ^0.8.0; /** * @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. /// @solidity memory-safe-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. /// @solidity memory-safe-assembly assembly { r := mload(add(signature, 0x20)) vs := mload(add(signature, 0x40)) } return tryRecover(hash, r, vs); } else { return (address(0), RecoverError.InvalidSignatureLength); } } /** * @dev Returns the address that signed a hashed message (`hash`) with * `signature`. This address can then be used for verification purposes. * * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: * this function rejects them by requiring the `s` value to be in the lower * half order, and the `v` value to be either 27 or 28. * * IMPORTANT: `hash` _must_ be the result of a hash operation for the * verification to be secure: it is possible to craft signatures that * recover to arbitrary addresses for non-hashed data. A safe way to ensure * this is by receiving a hash of the original message (which may otherwise * be too long), and then calling {toEthSignedMessageHash} on it. */ function recover(bytes32 hash, bytes memory signature) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, signature); _throwError(error); return recovered; } /** * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately. * * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures] * * _Available since v4.3._ */ function tryRecover( bytes32 hash, bytes32 r, bytes32 vs ) internal pure returns (address, RecoverError) { bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff); uint8 v = uint8((uint256(vs) >> 255) + 27); return tryRecover(hash, v, r, s); } /** * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately. * * _Available since v4.2._ */ function recover( bytes32 hash, bytes32 r, bytes32 vs ) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, r, vs); _throwError(error); return recovered; } /** * @dev Overload of {ECDSA-tryRecover} that receives the `v`, * `r` and `s` signature fields separately. * * _Available since v4.3._ */ function tryRecover( bytes32 hash, uint8 v, bytes32 r, bytes32 s ) internal pure returns (address, RecoverError) { // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most // signatures from current libraries generate a unique signature with an s-value in the lower half order. // // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept // these malleable signatures as well. if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) { return (address(0), RecoverError.InvalidSignatureS); } if (v != 27 && v != 28) { return (address(0), RecoverError.InvalidSignatureV); } // If the signature is valid (and not malleable), return the signer address address signer = ecrecover(hash, v, r, s); if (signer == address(0)) { return (address(0), RecoverError.InvalidSignature); } return (signer, RecoverError.NoError); } /** * @dev Overload of {ECDSA-recover} that receives the `v`, * `r` and `s` signature fields separately. */ function recover( bytes32 hash, uint8 v, bytes32 r, bytes32 s ) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, v, r, s); _throwError(error); return recovered; } /** * @dev Returns an Ethereum Signed Message, created from a `hash`. This * produces hash corresponding to the one signed with the * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] * JSON-RPC method as part of EIP-191. * * See {recover}. */ function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) { // 32 is the length in bytes of hash, // enforced by the type signature above return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)); } /** * @dev Returns an Ethereum Signed Message, created from `s`. This * produces hash corresponding to the one signed with the * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] * JSON-RPC method as part of EIP-191. * * See {recover}. */ function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) { return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n", Strings.toString(s.length), s)); } /** * @dev Returns an Ethereum Signed Typed Data, created from a * `domainSeparator` and a `structHash`. This produces hash corresponding * to the one signed with the * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`] * JSON-RPC method as part of EIP-712. * * See {recover}. */ function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) { return keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash)); } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/token/ERC721/utils/ERC721Holder.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/utils/ERC721Holder.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC721Receiver} interface. * * Accepts all token transfers. * Make sure the contract is able to use its token with {IERC721-safeTransferFrom}, {IERC721-approve} or {IERC721-setApprovalForAll}. */ contract ERC721Holder is IERC721Receiver { /** * @dev See {IERC721Receiver-onERC721Received}. * * Always returns `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address, address, uint256, bytes memory ) public virtual override returns (bytes4) { return this.onERC721Received.selector; } } // File: @openzeppelin/contracts/security/ReentrancyGuard.sol // OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: contracts/DI.sol pragma solidity ^0.8.4; contract Divergents { function totalSupply() public view returns (uint256) {} function saleMint (uint[10] calldata mintList) public payable {} function charactersRemaining() public view returns (uint16[10] memory) {} function safeTransferFrom( address from, address to, uint256 tokenId ) public { safeTransferFrom(from, to, tokenId); } } contract DI is ERC721Holder, Ownable, ReentrancyGuard { address public divergentContractAddress; // mapping(address => bool) public approvedTeamMinters; // Approved Minters uint public discountedMintPrice = 50000000 gwei; uint public mintPrice = 70000000 gwei; uint public mainContractPrice = 100000000 gwei; uint public paymentGasLimit = 5000; //Tracked Variables bool public isPublicSaleOpen; bool public isWhitelistSaleOpen; // Key contract functions function setIsSaleOpen(bool _publicStatus, bool _whitelistStatus) external { require(approvedTeamMinters[msg.sender], "Requester not approved"); isPublicSaleOpen = _publicStatus; isWhitelistSaleOpen = _whitelistStatus; } function setMintPrice (uint _mintPriceInWei) external { require(approvedTeamMinters[msg.sender], "Requester not approved"); mintPrice = _mintPriceInWei; } function setDiscountedMintPrice (uint _discMintPriceInWei) external { require(approvedTeamMinters[msg.sender], "Requester not approved"); discountedMintPrice = _discMintPriceInWei; } function setMainContractPrice (uint _mainContractPriceInWei) external onlyOwner { mainContractPrice = _mainContractPriceInWei; } // Add address to approved team minters function addToApprovedTeamMinters(address[] memory _add) external onlyOwner { for (uint i = 0; i < _add.length; i++) { approvedTeamMinters[_add[i]] = true; } } // Set divergents contract address function setDivergentContractAddress(address _contractAddress) external onlyOwner { divergentContractAddress = _contractAddress; } // Fund this contract to make calls to the divergent contract function fundContract() external payable {} // Receive funds into the wallet receive() external payable { } // Get balance held in this contract function getBalance() external view returns (uint) { return address(this).balance; } // Withdraw specific amount from the balance held in this contract function withdrawBalance(uint _amount, address _recipient) external onlyOwner nonReentrant { require(_amount <= address(this).balance, "Withdrawal amount more than balance in contract"); _recipient.call{ value:_amount, gas: 5000 }(""); } // Helper functions // Standalone function to get characters remaining function charactersRemaining() public view returns (uint16[10] memory divergentCharacters) { Divergents divergent = Divergents(divergentContractAddress); return divergent.charactersRemaining(); } // Standalone function to get totalSupply function totalSupply() public view returns (uint totalRemaining) { Divergents divergent = Divergents(divergentContractAddress); return divergent.totalSupply(); } // Sum of arrays function _sumOfArray (uint[10] memory array) internal pure returns (uint sum) { for(uint i = 0; i < array.length; i++) { sum = sum + array[i]; } } // Standalone transfer function any token held by the contract to another recipient function _transferToken(uint _tokenID, address _recipient) internal { Divergents divergent = Divergents(divergentContractAddress); divergent.safeTransferFrom(address(this), _recipient, _tokenID); } // Mint call function to be used function _mintCall(uint[10] memory _mintList, address _recipient) internal { Divergents divergent = Divergents(divergentContractAddress); uint _originalTotalMinted = divergent.totalSupply(); uint _totalBeingMinted = _sumOfArray(_mintList); uint _priceToPay = mainContractPrice * _totalBeingMinted; divergent.saleMint{value: _priceToPay}(_mintList); uint _newTotalMinted = divergent.totalSupply(); for (uint m = _originalTotalMinted; m < _newTotalMinted; m++) { divergent.safeTransferFrom(address(this), _recipient, m); } } // Safety hatch to withdraw any NFTs stuck in this contract function transferUntransferredToken(uint[] calldata _tokenIDs, address _recipient) external { require(approvedTeamMinters[msg.sender], "Minter not approved"); for (uint i; i < _tokenIDs.length; i++) { _transferToken (_tokenIDs[i], _recipient); } } // Mint event - tracking total minted and price event TotalMinted (uint totalCharactersMinted, uint pricePaid); // Minting functions // Minting NFTs for team function teamMint(uint[10] memory _mintList) public { require(approvedTeamMinters[msg.sender], "Minter not approved"); for (uint256 i; i < 10; i++) { if (_mintList[i] != 0 ) { uint256[10] memory _mintRound; _mintRound[i] = uint256(_mintList[i]); _mintCall(_mintRound, msg.sender); } } } // Mint event - tracking total minted and price event AnyGiveawaysFailed (address[] addressesDidNotReceive); // Minting NFTs for giveaways function giveawayMint(address[] calldata _winners) external { require(approvedTeamMinters[msg.sender], "Minter not approved"); Divergents divergent = Divergents(divergentContractAddress); uint16[10] memory charactersRemaining = divergent.charactersRemaining(); address[] memory giveawayFailedAddresses; for (uint w = 0; w < _winners.length; w++) { uint[10] memory _mintCharacters; bytes32 newRandomSelection = keccak256(abi.encodePacked(block.difficulty, block.coinbase, w)); uint pickCharacter = uint(newRandomSelection)%10; if(charactersRemaining[pickCharacter] > 1) { _mintCharacters[pickCharacter] = 1; _mintCall(_mintCharacters, _winners[w]); charactersRemaining[pickCharacter] = charactersRemaining[pickCharacter] - 1; } else { giveawayFailedAddresses[w] = (_winners[w]); } } emit AnyGiveawaysFailed(giveawayFailedAddresses); } // Minting NFTs for public sale function saleMint (uint[10] calldata _mintList, bool _approved) public payable nonReentrant { require(isPublicSaleOpen, "Public sale not open"); uint _totalToBeMinted = _sumOfArray(_mintList); uint _mintPriceToCharge; if (!_approved && isWhitelistSaleOpen) { _mintPriceToCharge = mintPrice; } else { _mintPriceToCharge = discountedMintPrice; } uint _mintTotalValue = _mintPriceToCharge * _totalToBeMinted; require(msg.value >= _mintTotalValue, "Insufficient Payment Received"); uint _originalSupply = totalSupply(); if (_totalToBeMinted <= 10) { _mintCall(_mintList, msg.sender); } else { for (uint i; i < 10; i++) { if(_mintList[i] != 0) { uint[10] memory _mintRound; _mintRound[i] = uint256(_mintList[i]); _mintCall(_mintRound, msg.sender); } } } uint _netNewSupply = totalSupply() - _originalSupply; if (_netNewSupply < _totalToBeMinted) { uint returnValue = (_totalToBeMinted - _netNewSupply) * _mintPriceToCharge; (bool returnSuccess, ) = msg.sender.call{ value:returnValue, gas: paymentGasLimit }(""); require(returnSuccess, "Return payment failed"); emit TotalMinted(_netNewSupply, _mintPriceToCharge); } else { emit TotalMinted(_netNewSupply, _mintPriceToCharge); } } // Everything specific to free mints mapping(address => uint) public approvedFreeMints; // Approved Free Mint Recipients //Add to approved free minters function addRecipients(address[] calldata _recipients, uint[] calldata _amount) external { require(approvedTeamMinters[msg.sender], "Address not approved"); for (uint r ; r < _recipients.length; r++) { approvedFreeMints[_recipients[r]] = _amount[r]; } } function freeMint() external nonReentrant { require(approvedFreeMints[msg.sender] > 0, "No free mints for this addr"); uint _availableToMint; if(approvedFreeMints[msg.sender] <= 10) { _availableToMint = approvedFreeMints[msg.sender]; } else { _availableToMint = 10; } uint _originalSupply = totalSupply(); uint[10] memory _mintCharacters; for (uint i; i < _availableToMint; i++ ) { bytes32 newRandomSelection = keccak256(abi.encodePacked(block.difficulty, block.coinbase, i)); uint pickCharacter = uint(newRandomSelection)%10; _mintCharacters[pickCharacter] = _mintCharacters[pickCharacter] + 1; } _mintCall(_mintCharacters, msg.sender); uint _newSupply = totalSupply(); uint _netNewSupply = _newSupply - _originalSupply; approvedFreeMints[msg.sender] = approvedFreeMints[msg.sender] - _netNewSupply; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"addressesDidNotReceive","type":"address[]"}],"name":"AnyGiveawaysFailed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"totalCharactersMinted","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"pricePaid","type":"uint256"}],"name":"TotalMinted","type":"event"},{"inputs":[{"internalType":"address[]","name":"_recipients","type":"address[]"},{"internalType":"uint256[]","name":"_amount","type":"uint256[]"}],"name":"addRecipients","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_add","type":"address[]"}],"name":"addToApprovedTeamMinters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"approvedFreeMints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"approvedTeamMinters","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"charactersRemaining","outputs":[{"internalType":"uint16[10]","name":"divergentCharacters","type":"uint16[10]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"discountedMintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"divergentContractAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"freeMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"fundContract","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"getBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_winners","type":"address[]"}],"name":"giveawayMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isPublicSaleOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isWhitelistSaleOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mainContractPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paymentGasLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[10]","name":"_mintList","type":"uint256[10]"},{"internalType":"bool","name":"_approved","type":"bool"}],"name":"saleMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_discMintPriceInWei","type":"uint256"}],"name":"setDiscountedMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_contractAddress","type":"address"}],"name":"setDivergentContractAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_publicStatus","type":"bool"},{"internalType":"bool","name":"_whitelistStatus","type":"bool"}],"name":"setIsSaleOpen","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mainContractPriceInWei","type":"uint256"}],"name":"setMainContractPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintPriceInWei","type":"uint256"}],"name":"setMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[10]","name":"_mintList","type":"uint256[10]"}],"name":"teamMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"totalRemaining","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_tokenIDs","type":"uint256[]"},{"internalType":"address","name":"_recipient","type":"address"}],"name":"transferUntransferredToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_recipient","type":"address"}],"name":"withdrawBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405266b1a2bc2ec5000060045566f8b0a10e47000060055567016345785d8a000060065561138860075534801561003857600080fd5b506100423361004b565b6001805561009b565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b611e57806100aa6000396000f3fe6080604052600436106101d15760003560e01c80638cef8367116100f7578063b983362e11610095578063dc12bbf711610064578063dc12bbf71461050e578063e7755f051461052d578063f2fde38b1461054d578063f4a0a5281461056d57600080fd5b8063b983362e1461049c578063bc57d223146104bc578063bd097e21146101fd578063d6c4f4c0146104ec57600080fd5b80639dd509cb116100d15780639dd509cb146104265780639f0559ee14610446578063a0e7e84414610466578063ad5722191461048657600080fd5b80638cef8367146103d25780638da5cb5b146103f2578063903f16a31461041057600080fd5b80634b9f60de1161016f5780636817c76c1161013e5780636817c76c1461035a578063715018a6146103705780637320a5311461038557806379e81f39146103b257600080fd5b80634b9f60de146102da57806351e121dd146102ed5780635b70ea9f1461030d57806364e86e3c1461032257600080fd5b806318160ddd116101ab57806318160ddd146102655780631a6949e31461027a5780632f0db5f3146102a4578063355b14cd146102ba57600080fd5b8063053a24d6146101dd57806312065fe0146101ff578063150b7a021461022157600080fd5b366101d857005b600080fd5b3480156101e957600080fd5b506101fd6101f8366004611719565b61058d565b005b34801561020b57600080fd5b50475b6040519081526020015b60405180910390f35b34801561022d57600080fd5b5061024c61023c3660046117e8565b630a85bd0160e11b949350505050565b6040516001600160e01b03199091168152602001610218565b34801561027157600080fd5b5061020e610806565b34801561028657600080fd5b506008546102949060ff1681565b6040519015158152602001610218565b3480156102b057600080fd5b5061020e60075481565b3480156102c657600080fd5b506101fd6102d53660046118a8565b61087d565b6101fd6102e83660046118d1565b6108b1565b3480156102f957600080fd5b506101fd61030836600461190d565b610bfc565b34801561031957600080fd5b506101fd610cab565b34801561032e57600080fd5b50600254610342906001600160a01b031681565b6040516001600160a01b039091168152602001610218565b34801561036657600080fd5b5061020e60055481565b34801561037c57600080fd5b506101fd610e7b565b34801561039157600080fd5b5061020e6103a036600461196e565b60096020526000908152604090205481565b3480156103be57600080fd5b506101fd6103cd366004611990565b610eb1565b3480156103de57600080fd5b506101fd6103ed3660046119bc565b610fc8565b3480156103fe57600080fd5b506000546001600160a01b0316610342565b34801561041c57600080fd5b5061020e60045481565b34801561043257600080fd5b506101fd6104413660046119e6565b61101b565b34801561045257600080fd5b506101fd610461366004611a52565b6110f3565b34801561047257600080fd5b506101fd61048136600461196e565b611167565b34801561049257600080fd5b5061020e60065481565b3480156104a857600080fd5b506101fd6104b73660046118a8565b6111b3565b3480156104c857600080fd5b506102946104d736600461196e565b60036020526000908152604090205460ff1681565b3480156104f857600080fd5b506105016111e2565b6040516102189190611aa6565b34801561051a57600080fd5b5060085461029490610100900460ff1681565b34801561053957600080fd5b506101fd610548366004611adc565b61125a565b34801561055957600080fd5b506101fd61056836600461196e565b6112ec565b34801561057957600080fd5b506101fd6105883660046118a8565b611387565b3360009081526003602052604090205460ff166105c55760405162461bcd60e51b81526004016105bc90611b89565b60405180910390fd5b6002546040805163035b13d360e61b815290516001600160a01b0390921691600091839163d6c4f4c091600480820192610140929091908290030181865afa158015610615573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106399190611bb6565b9050606060005b848110156107c7576106506116ae565b60408051446020808301919091524160601b6bffffffffffffffffffffffff1916828401526054808301869052835180840390910181526074909201909252805191012060006106a1600a83611c1e565b905060018682600a81106106b7576106b7611c40565b602002015161ffff1611156107575760018382600a81106106da576106da611c40565b602002015261070f838a8a878181106106f5576106f5611c40565b905060200201602081019061070a919061196e565b6113bb565b60018682600a811061072357610723611c40565b60200201516107329190611c6c565b8682600a811061074457610744611c40565b61ffff90921660209290920201526107b1565b88888581811061076957610769611c40565b905060200201602081019061077e919061196e565b85858151811061079057610790611c40565b60200260200101906001600160a01b031690816001600160a01b0316815250505b50505080806107bf90611c8f565b915050610640565b507f1ac69d97b8199a27aab03661b3784356711e62e126b8689ae17d31a91144883b816040516107f79190611ca8565b60405180910390a15050505050565b600254604080516318160ddd60e01b815290516000926001600160a01b03169182916318160ddd916004808201926020929091908290030181865afa158015610853573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108779190611cf5565b91505090565b3360009081526003602052604090205460ff166108ac5760405162461bcd60e51b81526004016105bc90611d0e565b600455565b6002600154036108d35760405162461bcd60e51b81526004016105bc90611d3e565b600260015560085460ff166109215760405162461bcd60e51b8152602060048201526014602482015273283ab13634b19039b0b632903737ba1037b832b760611b60448201526064016105bc565b600061095583600a806020026040519081016040528092919082600a602002808284376000920191909152506115a3915050565b905060008215801561096e5750600854610100900460ff165b1561097c5750600554610981565b506004545b600061098d8383611d75565b9050803410156109df5760405162461bcd60e51b815260206004820152601d60248201527f496e73756666696369656e74205061796d656e7420526563656976656400000060448201526064016105bc565b60006109e9610806565b9050600a8411610a295760408051610140818101909252610a24918890600a9083908390808284376000920191909152503391506113bb9050565b610aa7565b60005b600a811015610aa5578681600a8110610a4757610a47611c40565b602002013515610a9357610a596116ae565b8782600a8110610a6b57610a6b611c40565b60200201358183600a8110610a8257610a82611c40565b6020020152610a9181336113bb565b505b80610a9d81611c8f565b915050610a2c565b505b600081610ab2610806565b610abc9190611d94565b905084811015610bb557600084610ad38388611d94565b610add9190611d75565b600754604051919250600091339190849084818181858888f193505050503d8060008114610b27576040519150601f19603f3d011682016040523d82523d6000602084013e610b2c565b606091505b5050905080610b755760405162461bcd60e51b815260206004820152601560248201527414995d1d5c9b881c185e5b595b9d0819985a5b1959605a1b60448201526064016105bc565b60408051848152602081018890527f01386660b7db4e4f854b900aa7fb54a6be406e4b6a36c26ab8492aaba07800ee910160405180910390a15050610bef565b60408051828152602081018690527f01386660b7db4e4f854b900aa7fb54a6be406e4b6a36c26ab8492aaba07800ee910160405180910390a15b5050600180555050505050565b3360009081526003602052604090205460ff16610c2b5760405162461bcd60e51b81526004016105bc90611b89565b60005b600a811015610ca7578181600a8110610c4957610c49611c40565b602002015115610c9557610c5b6116ae565b8282600a8110610c6d57610c6d611c40565b60200201518183600a8110610c8457610c84611c40565b6020020152610c9381336113bb565b505b80610c9f81611c8f565b915050610c2e565b5050565b600260015403610ccd5760405162461bcd60e51b81526004016105bc90611d3e565b600260015533600090815260096020526040902054610d2e5760405162461bcd60e51b815260206004820152601b60248201527f4e6f2066726565206d696e747320666f7220746869732061646472000000000060448201526064016105bc565b33600090815260096020526040812054600a10610d5b575033600090815260096020526040902054610d5f565b50600a5b6000610d69610806565b9050610d736116ae565b60005b83811015610e1f5760408051446020808301919091524160601b6bffffffffffffffffffffffff191682840152605480830185905283518084039091018152607490920190925280519101206000610dcf600a83611c1e565b90508381600a8110610de357610de3611c40565b6020020151610df3906001611dab565b8482600a8110610e0557610e05611c40565b602002015250819050610e1781611c8f565b915050610d76565b50610e2a81336113bb565b6000610e34610806565b90506000610e428483611d94565b33600090815260096020526040902054909150610e60908290611d94565b33600090815260096020526040902055505060018055505050565b6000546001600160a01b03163314610ea55760405162461bcd60e51b81526004016105bc90611dc3565b610eaf60006115eb565b565b6000546001600160a01b03163314610edb5760405162461bcd60e51b81526004016105bc90611dc3565b600260015403610efd5760405162461bcd60e51b81526004016105bc90611d3e565b600260015547821115610f6a5760405162461bcd60e51b815260206004820152602f60248201527f5769746864726177616c20616d6f756e74206d6f7265207468616e2062616c6160448201526e1b98d9481a5b8818dbdb9d1c9858dd608a1b60648201526084016105bc565b6040516001600160a01b038216906113889084906000818181858888f193505050503d8060008114610fb8576040519150601f19603f3d011682016040523d82523d6000602084013e610fbd565b606091505b505060018055505050565b3360009081526003602052604090205460ff16610ff75760405162461bcd60e51b81526004016105bc90611d0e565b6008805461ffff191692151561ff0019169290921761010091151591909102179055565b3360009081526003602052604090205460ff166110715760405162461bcd60e51b81526020600482015260146024820152731059191c995cdcc81b9bdd08185c1c1c9bdd995960621b60448201526064016105bc565b60005b838110156110ec5782828281811061108e5761108e611c40565b90506020020135600960008787858181106110ab576110ab611c40565b90506020020160208101906110c0919061196e565b6001600160a01b03168152602081019190915260400160002055806110e481611c8f565b915050611074565b5050505050565b3360009081526003602052604090205460ff166111225760405162461bcd60e51b81526004016105bc90611b89565b60005b828110156111615761114f84848381811061114257611142611c40565b905060200201358361163b565b8061115981611c8f565b915050611125565b50505050565b6000546001600160a01b031633146111915760405162461bcd60e51b81526004016105bc90611dc3565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146111dd5760405162461bcd60e51b81526004016105bc90611dc3565b600655565b6111ea6116ae565b6002546040805163035b13d360e61b815290516001600160a01b0390921691829163d6c4f4c0916004808301926101409291908290030181865afa158015611236573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108779190611bb6565b6000546001600160a01b031633146112845760405162461bcd60e51b81526004016105bc90611dc3565b60005b8151811015610ca7576001600360008484815181106112a8576112a8611c40565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806112e481611c8f565b915050611287565b6000546001600160a01b031633146113165760405162461bcd60e51b81526004016105bc90611dc3565b6001600160a01b03811661137b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016105bc565b611384816115eb565b50565b3360009081526003602052604090205460ff166113b65760405162461bcd60e51b81526004016105bc90611d0e565b600555565b600254604080516318160ddd60e01b815290516001600160a01b039092169160009183916318160ddd916004808201926020929091908290030181865afa15801561140a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061142e9190611cf5565b9050600061143b856115a3565b905060008160065461144d9190611d75565b9050836001600160a01b03166397b5aaee82886040518363ffffffff1660e01b815260040161147c9190611df8565b6000604051808303818588803b15801561149557600080fd5b505af11580156114a9573d6000803e3d6000fd5b50505050506000846001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115129190611cf5565b9050835b8181101561159957604051632142170760e11b81523060048201526001600160a01b038881166024830152604482018390528716906342842e0e90606401600060405180830381600087803b15801561156e57600080fd5b505af1158015611582573d6000803e3d6000fd5b50505050808061159190611c8f565b915050611516565b5050505050505050565b6000805b600a8110156115e5578281600a81106115c2576115c2611c40565b60200201516115d19083611dab565b9150806115dd81611c8f565b9150506115a7565b50919050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600254604051632142170760e11b81523060048201526001600160a01b038381166024830152604482018590529091169081906342842e0e90606401600060405180830381600087803b15801561169157600080fd5b505af11580156116a5573d6000803e3d6000fd5b50505050505050565b604051806101400160405280600a906020820280368337509192915050565b60008083601f8401126116df57600080fd5b50813567ffffffffffffffff8111156116f757600080fd5b6020830191508360208260051b850101111561171257600080fd5b9250929050565b6000806020838503121561172c57600080fd5b823567ffffffffffffffff81111561174357600080fd5b61174f858286016116cd565b90969095509350505050565b80356001600160a01b038116811461177257600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b604051610140810167ffffffffffffffff811182821017156117b1576117b1611777565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156117e0576117e0611777565b604052919050565b600080600080608085870312156117fe57600080fd5b6118078561175b565b9350602061181681870161175b565b935060408601359250606086013567ffffffffffffffff8082111561183a57600080fd5b818801915088601f83011261184e57600080fd5b81358181111561186057611860611777565b611872601f8201601f191685016117b7565b9150808252898482850101111561188857600080fd5b808484018584013760008482840101525080935050505092959194509250565b6000602082840312156118ba57600080fd5b5035919050565b8035801515811461177257600080fd5b60008061016083850312156118e557600080fd5b6101408301848111156118f757600080fd5b839250611903816118c1565b9150509250929050565b600061014080838503121561192157600080fd5b83601f84011261193057600080fd5b61193861178d565b90830190808583111561194a57600080fd5b845b8381101561196457803583526020928301920161194c565b5095945050505050565b60006020828403121561198057600080fd5b6119898261175b565b9392505050565b600080604083850312156119a357600080fd5b823591506119b36020840161175b565b90509250929050565b600080604083850312156119cf57600080fd5b6119d8836118c1565b91506119b3602084016118c1565b600080600080604085870312156119fc57600080fd5b843567ffffffffffffffff80821115611a1457600080fd5b611a20888389016116cd565b90965094506020870135915080821115611a3957600080fd5b50611a46878288016116cd565b95989497509550505050565b600080600060408486031215611a6757600080fd5b833567ffffffffffffffff811115611a7e57600080fd5b611a8a868287016116cd565b9094509250611a9d90506020850161175b565b90509250925092565b6101408101818360005b600a811015611ad357815161ffff16835260209283019290910190600101611ab0565b50505092915050565b60006020808385031215611aef57600080fd5b823567ffffffffffffffff80821115611b0757600080fd5b818501915085601f830112611b1b57600080fd5b813581811115611b2d57611b2d611777565b8060051b9150611b3e8483016117b7565b8181529183018401918481019088841115611b5857600080fd5b938501935b83851015611b7d57611b6e8561175b565b82529385019390850190611b5d565b98975050505050505050565b602080825260139082015272135a5b9d195c881b9bdd08185c1c1c9bdd9959606a1b604082015260600190565b6000610140808385031215611bca57600080fd5b83601f840112611bd957600080fd5b611be161178d565b908301908085831115611bf357600080fd5b845b8381101561196457805161ffff81168114611c105760008081fd5b835260209283019201611bf5565b600082611c3b57634e487b7160e01b600052601260045260246000fd5b500690565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600061ffff83811690831681811015611c8757611c87611c56565b039392505050565b600060018201611ca157611ca1611c56565b5060010190565b6020808252825182820181905260009190848201906040850190845b81811015611ce95783516001600160a01b031683529284019291840191600101611cc4565b50909695505050505050565b600060208284031215611d0757600080fd5b5051919050565b60208082526016908201527514995c5d595cdd195c881b9bdd08185c1c1c9bdd995960521b604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b6000816000190483118215151615611d8f57611d8f611c56565b500290565b600082821015611da657611da6611c56565b500390565b60008219821115611dbe57611dbe611c56565b500190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6101408101818360005b600a811015611ad3578151835260209283019290910190600101611e0256fea264697066735822122036d2dfdc154a430c049a33e54d41f7deb5244445ddacebc77345f07c36c76e7364736f6c634300080f0033
Deployed Bytecode
0x6080604052600436106101d15760003560e01c80638cef8367116100f7578063b983362e11610095578063dc12bbf711610064578063dc12bbf71461050e578063e7755f051461052d578063f2fde38b1461054d578063f4a0a5281461056d57600080fd5b8063b983362e1461049c578063bc57d223146104bc578063bd097e21146101fd578063d6c4f4c0146104ec57600080fd5b80639dd509cb116100d15780639dd509cb146104265780639f0559ee14610446578063a0e7e84414610466578063ad5722191461048657600080fd5b80638cef8367146103d25780638da5cb5b146103f2578063903f16a31461041057600080fd5b80634b9f60de1161016f5780636817c76c1161013e5780636817c76c1461035a578063715018a6146103705780637320a5311461038557806379e81f39146103b257600080fd5b80634b9f60de146102da57806351e121dd146102ed5780635b70ea9f1461030d57806364e86e3c1461032257600080fd5b806318160ddd116101ab57806318160ddd146102655780631a6949e31461027a5780632f0db5f3146102a4578063355b14cd146102ba57600080fd5b8063053a24d6146101dd57806312065fe0146101ff578063150b7a021461022157600080fd5b366101d857005b600080fd5b3480156101e957600080fd5b506101fd6101f8366004611719565b61058d565b005b34801561020b57600080fd5b50475b6040519081526020015b60405180910390f35b34801561022d57600080fd5b5061024c61023c3660046117e8565b630a85bd0160e11b949350505050565b6040516001600160e01b03199091168152602001610218565b34801561027157600080fd5b5061020e610806565b34801561028657600080fd5b506008546102949060ff1681565b6040519015158152602001610218565b3480156102b057600080fd5b5061020e60075481565b3480156102c657600080fd5b506101fd6102d53660046118a8565b61087d565b6101fd6102e83660046118d1565b6108b1565b3480156102f957600080fd5b506101fd61030836600461190d565b610bfc565b34801561031957600080fd5b506101fd610cab565b34801561032e57600080fd5b50600254610342906001600160a01b031681565b6040516001600160a01b039091168152602001610218565b34801561036657600080fd5b5061020e60055481565b34801561037c57600080fd5b506101fd610e7b565b34801561039157600080fd5b5061020e6103a036600461196e565b60096020526000908152604090205481565b3480156103be57600080fd5b506101fd6103cd366004611990565b610eb1565b3480156103de57600080fd5b506101fd6103ed3660046119bc565b610fc8565b3480156103fe57600080fd5b506000546001600160a01b0316610342565b34801561041c57600080fd5b5061020e60045481565b34801561043257600080fd5b506101fd6104413660046119e6565b61101b565b34801561045257600080fd5b506101fd610461366004611a52565b6110f3565b34801561047257600080fd5b506101fd61048136600461196e565b611167565b34801561049257600080fd5b5061020e60065481565b3480156104a857600080fd5b506101fd6104b73660046118a8565b6111b3565b3480156104c857600080fd5b506102946104d736600461196e565b60036020526000908152604090205460ff1681565b3480156104f857600080fd5b506105016111e2565b6040516102189190611aa6565b34801561051a57600080fd5b5060085461029490610100900460ff1681565b34801561053957600080fd5b506101fd610548366004611adc565b61125a565b34801561055957600080fd5b506101fd61056836600461196e565b6112ec565b34801561057957600080fd5b506101fd6105883660046118a8565b611387565b3360009081526003602052604090205460ff166105c55760405162461bcd60e51b81526004016105bc90611b89565b60405180910390fd5b6002546040805163035b13d360e61b815290516001600160a01b0390921691600091839163d6c4f4c091600480820192610140929091908290030181865afa158015610615573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106399190611bb6565b9050606060005b848110156107c7576106506116ae565b60408051446020808301919091524160601b6bffffffffffffffffffffffff1916828401526054808301869052835180840390910181526074909201909252805191012060006106a1600a83611c1e565b905060018682600a81106106b7576106b7611c40565b602002015161ffff1611156107575760018382600a81106106da576106da611c40565b602002015261070f838a8a878181106106f5576106f5611c40565b905060200201602081019061070a919061196e565b6113bb565b60018682600a811061072357610723611c40565b60200201516107329190611c6c565b8682600a811061074457610744611c40565b61ffff90921660209290920201526107b1565b88888581811061076957610769611c40565b905060200201602081019061077e919061196e565b85858151811061079057610790611c40565b60200260200101906001600160a01b031690816001600160a01b0316815250505b50505080806107bf90611c8f565b915050610640565b507f1ac69d97b8199a27aab03661b3784356711e62e126b8689ae17d31a91144883b816040516107f79190611ca8565b60405180910390a15050505050565b600254604080516318160ddd60e01b815290516000926001600160a01b03169182916318160ddd916004808201926020929091908290030181865afa158015610853573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108779190611cf5565b91505090565b3360009081526003602052604090205460ff166108ac5760405162461bcd60e51b81526004016105bc90611d0e565b600455565b6002600154036108d35760405162461bcd60e51b81526004016105bc90611d3e565b600260015560085460ff166109215760405162461bcd60e51b8152602060048201526014602482015273283ab13634b19039b0b632903737ba1037b832b760611b60448201526064016105bc565b600061095583600a806020026040519081016040528092919082600a602002808284376000920191909152506115a3915050565b905060008215801561096e5750600854610100900460ff165b1561097c5750600554610981565b506004545b600061098d8383611d75565b9050803410156109df5760405162461bcd60e51b815260206004820152601d60248201527f496e73756666696369656e74205061796d656e7420526563656976656400000060448201526064016105bc565b60006109e9610806565b9050600a8411610a295760408051610140818101909252610a24918890600a9083908390808284376000920191909152503391506113bb9050565b610aa7565b60005b600a811015610aa5578681600a8110610a4757610a47611c40565b602002013515610a9357610a596116ae565b8782600a8110610a6b57610a6b611c40565b60200201358183600a8110610a8257610a82611c40565b6020020152610a9181336113bb565b505b80610a9d81611c8f565b915050610a2c565b505b600081610ab2610806565b610abc9190611d94565b905084811015610bb557600084610ad38388611d94565b610add9190611d75565b600754604051919250600091339190849084818181858888f193505050503d8060008114610b27576040519150601f19603f3d011682016040523d82523d6000602084013e610b2c565b606091505b5050905080610b755760405162461bcd60e51b815260206004820152601560248201527414995d1d5c9b881c185e5b595b9d0819985a5b1959605a1b60448201526064016105bc565b60408051848152602081018890527f01386660b7db4e4f854b900aa7fb54a6be406e4b6a36c26ab8492aaba07800ee910160405180910390a15050610bef565b60408051828152602081018690527f01386660b7db4e4f854b900aa7fb54a6be406e4b6a36c26ab8492aaba07800ee910160405180910390a15b5050600180555050505050565b3360009081526003602052604090205460ff16610c2b5760405162461bcd60e51b81526004016105bc90611b89565b60005b600a811015610ca7578181600a8110610c4957610c49611c40565b602002015115610c9557610c5b6116ae565b8282600a8110610c6d57610c6d611c40565b60200201518183600a8110610c8457610c84611c40565b6020020152610c9381336113bb565b505b80610c9f81611c8f565b915050610c2e565b5050565b600260015403610ccd5760405162461bcd60e51b81526004016105bc90611d3e565b600260015533600090815260096020526040902054610d2e5760405162461bcd60e51b815260206004820152601b60248201527f4e6f2066726565206d696e747320666f7220746869732061646472000000000060448201526064016105bc565b33600090815260096020526040812054600a10610d5b575033600090815260096020526040902054610d5f565b50600a5b6000610d69610806565b9050610d736116ae565b60005b83811015610e1f5760408051446020808301919091524160601b6bffffffffffffffffffffffff191682840152605480830185905283518084039091018152607490920190925280519101206000610dcf600a83611c1e565b90508381600a8110610de357610de3611c40565b6020020151610df3906001611dab565b8482600a8110610e0557610e05611c40565b602002015250819050610e1781611c8f565b915050610d76565b50610e2a81336113bb565b6000610e34610806565b90506000610e428483611d94565b33600090815260096020526040902054909150610e60908290611d94565b33600090815260096020526040902055505060018055505050565b6000546001600160a01b03163314610ea55760405162461bcd60e51b81526004016105bc90611dc3565b610eaf60006115eb565b565b6000546001600160a01b03163314610edb5760405162461bcd60e51b81526004016105bc90611dc3565b600260015403610efd5760405162461bcd60e51b81526004016105bc90611d3e565b600260015547821115610f6a5760405162461bcd60e51b815260206004820152602f60248201527f5769746864726177616c20616d6f756e74206d6f7265207468616e2062616c6160448201526e1b98d9481a5b8818dbdb9d1c9858dd608a1b60648201526084016105bc565b6040516001600160a01b038216906113889084906000818181858888f193505050503d8060008114610fb8576040519150601f19603f3d011682016040523d82523d6000602084013e610fbd565b606091505b505060018055505050565b3360009081526003602052604090205460ff16610ff75760405162461bcd60e51b81526004016105bc90611d0e565b6008805461ffff191692151561ff0019169290921761010091151591909102179055565b3360009081526003602052604090205460ff166110715760405162461bcd60e51b81526020600482015260146024820152731059191c995cdcc81b9bdd08185c1c1c9bdd995960621b60448201526064016105bc565b60005b838110156110ec5782828281811061108e5761108e611c40565b90506020020135600960008787858181106110ab576110ab611c40565b90506020020160208101906110c0919061196e565b6001600160a01b03168152602081019190915260400160002055806110e481611c8f565b915050611074565b5050505050565b3360009081526003602052604090205460ff166111225760405162461bcd60e51b81526004016105bc90611b89565b60005b828110156111615761114f84848381811061114257611142611c40565b905060200201358361163b565b8061115981611c8f565b915050611125565b50505050565b6000546001600160a01b031633146111915760405162461bcd60e51b81526004016105bc90611dc3565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146111dd5760405162461bcd60e51b81526004016105bc90611dc3565b600655565b6111ea6116ae565b6002546040805163035b13d360e61b815290516001600160a01b0390921691829163d6c4f4c0916004808301926101409291908290030181865afa158015611236573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108779190611bb6565b6000546001600160a01b031633146112845760405162461bcd60e51b81526004016105bc90611dc3565b60005b8151811015610ca7576001600360008484815181106112a8576112a8611c40565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806112e481611c8f565b915050611287565b6000546001600160a01b031633146113165760405162461bcd60e51b81526004016105bc90611dc3565b6001600160a01b03811661137b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016105bc565b611384816115eb565b50565b3360009081526003602052604090205460ff166113b65760405162461bcd60e51b81526004016105bc90611d0e565b600555565b600254604080516318160ddd60e01b815290516001600160a01b039092169160009183916318160ddd916004808201926020929091908290030181865afa15801561140a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061142e9190611cf5565b9050600061143b856115a3565b905060008160065461144d9190611d75565b9050836001600160a01b03166397b5aaee82886040518363ffffffff1660e01b815260040161147c9190611df8565b6000604051808303818588803b15801561149557600080fd5b505af11580156114a9573d6000803e3d6000fd5b50505050506000846001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115129190611cf5565b9050835b8181101561159957604051632142170760e11b81523060048201526001600160a01b038881166024830152604482018390528716906342842e0e90606401600060405180830381600087803b15801561156e57600080fd5b505af1158015611582573d6000803e3d6000fd5b50505050808061159190611c8f565b915050611516565b5050505050505050565b6000805b600a8110156115e5578281600a81106115c2576115c2611c40565b60200201516115d19083611dab565b9150806115dd81611c8f565b9150506115a7565b50919050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600254604051632142170760e11b81523060048201526001600160a01b038381166024830152604482018590529091169081906342842e0e90606401600060405180830381600087803b15801561169157600080fd5b505af11580156116a5573d6000803e3d6000fd5b50505050505050565b604051806101400160405280600a906020820280368337509192915050565b60008083601f8401126116df57600080fd5b50813567ffffffffffffffff8111156116f757600080fd5b6020830191508360208260051b850101111561171257600080fd5b9250929050565b6000806020838503121561172c57600080fd5b823567ffffffffffffffff81111561174357600080fd5b61174f858286016116cd565b90969095509350505050565b80356001600160a01b038116811461177257600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b604051610140810167ffffffffffffffff811182821017156117b1576117b1611777565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156117e0576117e0611777565b604052919050565b600080600080608085870312156117fe57600080fd5b6118078561175b565b9350602061181681870161175b565b935060408601359250606086013567ffffffffffffffff8082111561183a57600080fd5b818801915088601f83011261184e57600080fd5b81358181111561186057611860611777565b611872601f8201601f191685016117b7565b9150808252898482850101111561188857600080fd5b808484018584013760008482840101525080935050505092959194509250565b6000602082840312156118ba57600080fd5b5035919050565b8035801515811461177257600080fd5b60008061016083850312156118e557600080fd5b6101408301848111156118f757600080fd5b839250611903816118c1565b9150509250929050565b600061014080838503121561192157600080fd5b83601f84011261193057600080fd5b61193861178d565b90830190808583111561194a57600080fd5b845b8381101561196457803583526020928301920161194c565b5095945050505050565b60006020828403121561198057600080fd5b6119898261175b565b9392505050565b600080604083850312156119a357600080fd5b823591506119b36020840161175b565b90509250929050565b600080604083850312156119cf57600080fd5b6119d8836118c1565b91506119b3602084016118c1565b600080600080604085870312156119fc57600080fd5b843567ffffffffffffffff80821115611a1457600080fd5b611a20888389016116cd565b90965094506020870135915080821115611a3957600080fd5b50611a46878288016116cd565b95989497509550505050565b600080600060408486031215611a6757600080fd5b833567ffffffffffffffff811115611a7e57600080fd5b611a8a868287016116cd565b9094509250611a9d90506020850161175b565b90509250925092565b6101408101818360005b600a811015611ad357815161ffff16835260209283019290910190600101611ab0565b50505092915050565b60006020808385031215611aef57600080fd5b823567ffffffffffffffff80821115611b0757600080fd5b818501915085601f830112611b1b57600080fd5b813581811115611b2d57611b2d611777565b8060051b9150611b3e8483016117b7565b8181529183018401918481019088841115611b5857600080fd5b938501935b83851015611b7d57611b6e8561175b565b82529385019390850190611b5d565b98975050505050505050565b602080825260139082015272135a5b9d195c881b9bdd08185c1c1c9bdd9959606a1b604082015260600190565b6000610140808385031215611bca57600080fd5b83601f840112611bd957600080fd5b611be161178d565b908301908085831115611bf357600080fd5b845b8381101561196457805161ffff81168114611c105760008081fd5b835260209283019201611bf5565b600082611c3b57634e487b7160e01b600052601260045260246000fd5b500690565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600061ffff83811690831681811015611c8757611c87611c56565b039392505050565b600060018201611ca157611ca1611c56565b5060010190565b6020808252825182820181905260009190848201906040850190845b81811015611ce95783516001600160a01b031683529284019291840191600101611cc4565b50909695505050505050565b600060208284031215611d0757600080fd5b5051919050565b60208082526016908201527514995c5d595cdd195c881b9bdd08185c1c1c9bdd995960521b604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b6000816000190483118215151615611d8f57611d8f611c56565b500290565b600082821015611da657611da6611c56565b500390565b60008219821115611dbe57611dbe611c56565b500190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6101408101818360005b600a811015611ad3578151835260209283019290910190600101611e0256fea264697066735822122036d2dfdc154a430c049a33e54d41f7deb5244445ddacebc77345f07c36c76e7364736f6c634300080f0033
Deployed Bytecode Sourcemap
20657:9505:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25980:1051;;;;;;;;;;-1:-1:-1;25980:1051:0;;;;;:::i;:::-;;:::i;:::-;;22662:98;;;;;;;;;;-1:-1:-1;22731:21:0;22662:98;;;974:25:1;;;962:2;947:18;22662:98:0;;;;;;;;13795:207;;;;;;;;;;-1:-1:-1;13795:207:0;;;;;:::i;:::-;-1:-1:-1;;;13795:207:0;;;;;;;;;;-1:-1:-1;;;;;;3004:33:1;;;2986:52;;2974:2;2959:18;13795:207:0;2842:202:1;23464:184:0;;;;;;;;;;;;;:::i;21070:28::-;;;;;;;;;;-1:-1:-1;21070:28:0;;;;;;;;;;;3214:14:1;;3207:22;3189:41;;3177:2;3162:18;21070:28:0;3049:187:1;21002:34:0;;;;;;;;;;;;;;;;21621:205;;;;;;;;;;-1:-1:-1;21621:205:0;;;;;:::i;:::-;;:::i;27080:1569::-;;;;;;:::i;:::-;;:::i;25405:411::-;;;;;;;;;;-1:-1:-1;25405:411:0;;;;;:::i;:::-;;:::i;29132:1019::-;;;;;;;;;;;;;:::i;20720:39::-;;;;;;;;;;-1:-1:-1;20720:39:0;;;;-1:-1:-1;;;;;20720:39:0;;;;;;-1:-1:-1;;;;;4711:32:1;;;4693:51;;4681:2;4666:18;20720:39:0;4547:203:1;20905:37:0;;;;;;;;;;;;;;;;19374:103;;;;;;;;;;;;;:::i;28699:49::-;;;;;;;;;;-1:-1:-1;28699:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;22840:260;;;;;;;;;;-1:-1:-1;22840:260:0;;;;;:::i;:::-;;:::i;21176:252::-;;;;;;;;;;-1:-1:-1;21176:252:0;;;;;:::i;:::-;;:::i;18723:87::-;;;;;;;;;;-1:-1:-1;18769:7:0;18796:6;-1:-1:-1;;;;;18796:6:0;18723:87;;20851:47;;;;;;;;;;;;;;;;28826:298;;;;;;;;;;-1:-1:-1;28826:298:0;;;;;:::i;:::-;;:::i;24923:292::-;;;;;;;;;;-1:-1:-1;24923:292:0;;;;;:::i;:::-;;:::i;22274:144::-;;;;;;;;;;-1:-1:-1;22274:144:0;;;;;:::i;:::-;;:::i;20949:46::-;;;;;;;;;;;;;;;;21834:142;;;;;;;;;;-1:-1:-1;21834:142:0;;;;;:::i;:::-;;:::i;20771:51::-;;;;;;;;;;-1:-1:-1;20771:51:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;23191:218;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;21105:31::-;;;;;;;;;;-1:-1:-1;21105:31:0;;;;;;;;;;;22031:195;;;;;;;;;;-1:-1:-1;22031:195:0;;;;;:::i;:::-;;:::i;19632:201::-;;;;;;;;;;-1:-1:-1;19632:201:0;;;;;:::i;:::-;;:::i;21436:177::-;;;;;;;;;;-1:-1:-1;21436:177:0;;;;;:::i;:::-;;:::i;25980:1051::-;26079:10;26059:31;;;;:19;:31;;;;;;;;26051:63;;;;-1:-1:-1;;;26051:63:0;;;;;;;:::i;:::-;;;;;;;;;26161:24;;26237:31;;;-1:-1:-1;;;26237:31:0;;;;-1:-1:-1;;;;;26161:24:0;;;;26127:20;;26161:24;;26237:29;;:31;;;;;;;;;;;;;;;26161:24;26237:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26197:71;;26279:40;26337:6;26332:633;26349:19;;;26332:633;;;26390:31;;:::i;:::-;26475:53;;;26492:16;26475:53;;;;9569:19:1;;;;26510:14:0;9626:2:1;9622:15;-1:-1:-1;;9618:53:1;9604:12;;;9597:75;9688:12;;;;9681:28;;;26475:53:0;;;;;;;;;;9725:12:1;;;;26475:53:0;;;26465:64;;;;;-1:-1:-1;26565:27:0;26590:2;26465:64;26565:27;:::i;:::-;26544:48;;26647:1;26610:19;26630:13;26610:34;;;;;;;:::i;:::-;;;;;:38;;;26607:347;;;26702:1;26669:15;26685:13;26669:30;;;;;;;:::i;:::-;;;;:34;26722:39;26732:15;26749:8;;26758:1;26749:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;26722:9;:39::i;:::-;26854:1;26817:19;26837:13;26817:34;;;;;;;:::i;:::-;;;;;:38;;;;:::i;:::-;26780:19;26800:13;26780:34;;;;;;;:::i;:::-;:75;;;;:34;;;;;;:75;26607:347;;;26926:8;;26935:1;26926:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;26896:23;26920:1;26896:26;;;;;;;;:::i;:::-;;;;;;:42;-1:-1:-1;;;;;26896:42:0;;;-1:-1:-1;;;;;26896:42:0;;;;;26607:347;26375:590;;;26370:3;;;;;:::i;:::-;;;;26332:633;;;;26980:43;26999:23;26980:43;;;;;;:::i;:::-;;;;;;;;26040:991;;;25980:1051;;:::o;23464:184::-;23574:24;;23617:23;;;-1:-1:-1;;;23617:23:0;;;;23508:19;;-1:-1:-1;;;;;23574:24:0;;;;23617:21;;:23;;;;;;;;;;;;;;;23574:24;23617:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23610:30;;;23464:184;:::o;21621:205::-;21728:10;21708:31;;;;:19;:31;;;;;;;;21700:66;;;;-1:-1:-1;;;21700:66:0;;;;;;;:::i;:::-;21777:19;:41;21621:205::o;27080:1569::-;15821:1;16419:7;;:19;16411:63;;;;-1:-1:-1;;;16411:63:0;;;;;;;:::i;:::-;15821:1;16552:7;:18;27191:16:::1;::::0;::::1;;27183:49;;;::::0;-1:-1:-1;;;27183:49:0;;12353:2:1;27183:49:0::1;::::0;::::1;12335:21:1::0;12392:2;12372:18;;;12365:30;-1:-1:-1;;;12411:18:1;;;12404:50;12471:18;;27183:49:0::1;12151:344:1::0;27183:49:0::1;27243:21;27267:22;27279:9;27267:22;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;27267:11:0::1;::::0;-1:-1:-1;;27267:22:0:i:1;:::-;27243:46;;27300:23;27341:9;27340:10;:33;;;;-1:-1:-1::0;27354:19:0::1;::::0;::::1;::::0;::::1;;;27340:33;27336:169;;;-1:-1:-1::0;27411:9:0::1;::::0;27336:169:::1;;;-1:-1:-1::0;27474:19:0::1;::::0;27336:169:::1;27517:20;27540:37;27561:16:::0;27540:18;:37:::1;:::i;:::-;27517:60;;27609:15;27596:9;:28;;27588:70;;;::::0;-1:-1:-1;;;27588:70:0;;12875:2:1;27588:70:0::1;::::0;::::1;12857:21:1::0;12914:2;12894:18;;;12887:30;12953:31;12933:18;;;12926:59;13002:18;;27588:70:0::1;12673:353:1::0;27588:70:0::1;27671:20;27694:13;:11;:13::i;:::-;27671:36;;27744:2;27724:16;:22;27720:388;;27763:32;::::0;;;;;::::1;::::0;;;::::1;::::0;27773:9;;27763:32:::1;::::0;;;27773:9;;27763:32;27773:9;27763:32;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;27784:10:0::1;::::0;-1:-1:-1;27763:9:0::1;::::0;-1:-1:-1;27763:32:0:i:1;:::-;27720:388;;;27835:6;27830:267;27847:2;27843:1;:6;27830:267;;;27878:9;27888:1;27878:12;;;;;;;:::i;:::-;;;;;:17:::0;27875:207:::1;;27920:26;;:::i;:::-;27993:9;28003:1;27993:12;;;;;;;:::i;:::-;;;;;27969:10;27980:1;27969:13;;;;;;;:::i;:::-;;;;:37:::0;28029:33:::1;28039:10:::0;28051::::1;28029:9;:33::i;:::-;27897:185;27875:207;27851:3:::0;::::1;::::0;::::1;:::i;:::-;;;;27830:267;;;;27720:388;28120:18;28157:15;28141:13;:11;:13::i;:::-;:31;;;;:::i;:::-;28120:52;;28205:16;28189:13;:32;28185:453;;;28238:16;28294:18:::0;28258:32:::1;28277:13:::0;28258:16;:32:::1;:::i;:::-;28257:55;;;;:::i;:::-;28393:15;::::0;28352:62:::1;::::0;28238:74;;-1:-1:-1;28328:18:0::1;::::0;28352:10:::1;::::0;28393:15;28238:74;;28328:18;28352:62;28328:18;28352:62;28238:74;28352:10;28393:15;28352:62:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28327:87;;;28437:13;28429:47;;;::::0;-1:-1:-1;;;28429:47:0;;13573:2:1;28429:47:0::1;::::0;::::1;13555:21:1::0;13612:2;13592:18;;;13585:30;-1:-1:-1;;;13631:18:1;;;13624:51;13692:18;;28429:47:0::1;13371:345:1::0;28429:47:0::1;28496:46;::::0;;13895:25:1;;;13951:2;13936:18;;13929:34;;;28496:46:0::1;::::0;13868:18:1;28496:46:0::1;;;;;;;28223:331;;28185:453;;;28580:46;::::0;;13895:25:1;;;13951:2;13936:18;;13929:34;;;28580:46:0::1;::::0;13868:18:1;28580:46:0::1;;;;;;;28185:453;-1:-1:-1::0;;15777:1:0;16731:22;;-1:-1:-1;;;;;27080:1569:0:o;25405:411::-;25496:10;25476:31;;;;:19;:31;;;;;;;;25468:63;;;;-1:-1:-1;;;25468:63:0;;;;;;;:::i;:::-;25549:9;25544:265;25564:2;25560:1;:6;25544:265;;;25592:9;25602:1;25592:12;;;;;;;:::i;:::-;;;;;:17;25588:196;;25631:29;;:::i;:::-;25703:9;25713:1;25703:12;;;;;;;:::i;:::-;;;;;25679:10;25690:1;25679:13;;;;;;;:::i;:::-;;;;:37;25735:33;25745:10;25757;25735:9;:33::i;:::-;25612:172;25588:196;25568:3;;;;:::i;:::-;;;;25544:265;;;;25405:411;:::o;29132:1019::-;15821:1;16419:7;;:19;16411:63;;;;-1:-1:-1;;;16411:63:0;;;;;;;:::i;:::-;15821:1;16552:7;:18;29211:10:::1;29225:1;29193:29:::0;;;:17:::1;:29;::::0;;;;;29185:73:::1;;;::::0;-1:-1:-1;;;29185:73:0;;14176:2:1;29185:73:0::1;::::0;::::1;14158:21:1::0;14215:2;14195:18;;;14188:30;14254:29;14234:18;;;14227:57;14301:18;;29185:73:0::1;13974:351:1::0;29185:73:0::1;29326:10;29271:21;29308:29:::0;;;:17:::1;:29;::::0;;;;;29341:2:::1;-1:-1:-1::0;29305:169:0::1;;-1:-1:-1::0;29397:10:0::1;29379:29;::::0;;;:17:::1;:29;::::0;;;;;29305:169:::1;;;-1:-1:-1::0;29460:2:0::1;29305:169;29496:20;29519:13;:11;:13::i;:::-;29496:36;;29545:31;;:::i;:::-;29594:6;29589:306;29606:16;29602:1;:20;29589:306;;;29684:53;::::0;;29701:16:::1;29684:53;::::0;;::::1;9569:19:1::0;;;;29719:14:0::1;9626:2:1::0;9622:15;-1:-1:-1;;9618:53:1;9604:12;;;9597:75;9688:12;;;;9681:28;;;29684:53:0;;;;;;;;;;9725:12:1;;;;29684:53:0;;;29674:64;;;::::1;::::0;-1:-1:-1;29774:27:0::1;29799:2;29674:64:::0;29774:27:::1;:::i;:::-;29753:48;;29849:15;29865:13;29849:30;;;;;;;:::i;:::-;;;;::::0;:34:::1;::::0;29882:1:::1;29849:34;:::i;:::-;29816:15;29832:13;29816:30;;;;;;;:::i;:::-;;;;:67:::0;-1:-1:-1;29624:3:0;;-1:-1:-1;29624:3:0::1;::::0;::::1;:::i;:::-;;;;29589:306;;;;29907:38;29917:15;29934:10;29907:9;:38::i;:::-;29958:15;29976:13;:11;:13::i;:::-;29958:31:::0;-1:-1:-1;30002:18:0::1;30023:28;30036:15:::0;29958:31;30023:28:::1;:::i;:::-;30114:10;30096:29;::::0;;;:17:::1;:29;::::0;;;;;30002:49;;-1:-1:-1;30096:45:0::1;::::0;30002:49;;30096:45:::1;:::i;:::-;30082:10;30064:29;::::0;;;:17:::1;:29;::::0;;;;:77;-1:-1:-1;;15777:1:0;16731:22;;-1:-1:-1;;;29132:1019:0:o;19374:103::-;18769:7;18796:6;-1:-1:-1;;;;;18796:6:0;17527:10;18943:23;18935:68;;;;-1:-1:-1;;;18935:68:0;;;;;;;:::i;:::-;19439:30:::1;19466:1;19439:18;:30::i;:::-;19374:103::o:0;22840:260::-;18769:7;18796:6;-1:-1:-1;;;;;18796:6:0;17527:10;18943:23;18935:68;;;;-1:-1:-1;;;18935:68:0;;;;;;;:::i;:::-;15821:1:::1;16419:7;;:19:::0;16411:63:::1;;;;-1:-1:-1::0;;;16411:63:0::1;;;;;;;:::i;:::-;15821:1;16552:7;:18:::0;22961:21:::2;22950:32:::0;::::2;;22942:92;;;::::0;-1:-1:-1;;;22942:92:0;;15026:2:1;22942:92:0::2;::::0;::::2;15008:21:1::0;15065:2;15045:18;;;15038:30;15104:34;15084:18;;;15077:62;-1:-1:-1;;;15155:18:1;;;15148:45;15210:19;;22942:92:0::2;14824:411:1::0;22942:92:0::2;23045:47;::::0;-1:-1:-1;;;;;23045:15:0;::::2;::::0;23082:4:::2;::::0;23068:7;;23045:47:::2;::::0;;;23068:7;23045:15;23082:4;23045:47:::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;15777:1:0::1;16731:22:::0;;-1:-1:-1;;;22840:260:0:o;21176:252::-;21290:10;21270:31;;;;:19;:31;;;;;;;;21262:66;;;;-1:-1:-1;;;21262:66:0;;;;;;;:::i;:::-;21339:16;:32;;-1:-1:-1;;21382:38:0;21339:32;;;-1:-1:-1;;21382:38:0;;;;;21339:32;21382:38;;;;;;;;;;21176:252::o;28826:298::-;28954:10;28934:31;;;;:19;:31;;;;;;;;28926:64;;;;-1:-1:-1;;;28926:64:0;;15442:2:1;28926:64:0;;;15424:21:1;15481:2;15461:18;;;15454:30;-1:-1:-1;;;15500:18:1;;;15493:50;15560:18;;28926:64:0;15240:344:1;28926:64:0;29006:6;29001:116;29015:22;;;29001:116;;;29095:7;;29103:1;29095:10;;;;;;;:::i;:::-;;;;;;;29059:17;:33;29077:11;;29089:1;29077:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;29059:33:0;;;;;;;;;;;;-1:-1:-1;29059:33:0;:46;29039:3;;;;:::i;:::-;;;;29001:116;;;;28826:298;;;;:::o;24923:292::-;25054:10;25034:31;;;;:19;:31;;;;;;;;25026:63;;;;-1:-1:-1;;;25026:63:0;;;;;;;:::i;:::-;25105:6;25100:108;25113:20;;;25100:108;;;25155:41;25171:9;;25181:1;25171:12;;;;;;;:::i;:::-;;;;;;;25185:10;25155:14;:41::i;:::-;25135:3;;;;:::i;:::-;;;;25100:108;;;;24923:292;;;:::o;22274:144::-;18769:7;18796:6;-1:-1:-1;;;;;18796:6:0;17527:10;18943:23;18935:68;;;;-1:-1:-1;;;18935:68:0;;;;;;;:::i;:::-;22367:24:::1;:43:::0;;-1:-1:-1;;;;;;22367:43:0::1;-1:-1:-1::0;;;;;22367:43:0;;;::::1;::::0;;;::::1;::::0;;22274:144::o;21834:142::-;18769:7;18796:6;-1:-1:-1;;;;;18796:6:0;17527:10;18943:23;18935:68;;;;-1:-1:-1;;;18935:68:0;;;;;;;:::i;:::-;21925:17:::1;:43:::0;21834:142::o;23191:218::-;23243:37;;:::i;:::-;23327:24;;23370:31;;;-1:-1:-1;;;23370:31:0;;;;-1:-1:-1;;;;;23327:24:0;;;;;;23370:29;;:31;;;;;;;;;;;;;;23327:24;23370:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;22031:195::-;18769:7;18796:6;-1:-1:-1;;;;;18796:6:0;17527:10;18943:23;18935:68;;;;-1:-1:-1;;;18935:68:0;;;;;;;:::i;:::-;22123:6:::1;22118:101;22139:4;:11;22135:1;:15;22118:101;;;22203:4;22172:19;:28;22192:4;22197:1;22192:7;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;22172:28:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;22172:28:0;:35;;-1:-1:-1;;22172:35:0::1;::::0;::::1;;::::0;;;::::1;::::0;;22152:3;::::1;::::0;::::1;:::i;:::-;;;;22118:101;;19632:201:::0;18769:7;18796:6;-1:-1:-1;;;;;18796:6:0;17527:10;18943:23;18935:68;;;;-1:-1:-1;;;18935:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19721:22:0;::::1;19713:73;;;::::0;-1:-1:-1;;;19713:73:0;;15791:2:1;19713:73:0::1;::::0;::::1;15773:21:1::0;15830:2;15810:18;;;15803:30;15869:34;15849:18;;;15842:62;-1:-1:-1;;;15920:18:1;;;15913:36;15966:19;;19713:73:0::1;15589:402:1::0;19713:73:0::1;19797:28;19816:8;19797:18;:28::i;:::-;19632:201:::0;:::o;21436:177::-;21529:10;21509:31;;;;:19;:31;;;;;;;;21501:66;;;;-1:-1:-1;;;21501:66:0;;;;;;;:::i;:::-;21578:9;:27;21436:177::o;24227:623::-;24347:24;;24411:23;;;-1:-1:-1;;;24411:23:0;;;;-1:-1:-1;;;;;24347:24:0;;;;24313:20;;24347:24;;24411:21;;:23;;;;;;;;;;;;;;;24347:24;24411:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24383:51;;24447:22;24472;24484:9;24472:11;:22::i;:::-;24447:47;;24505:16;24545:17;24525;;:37;;;;:::i;:::-;24505:57;;24575:9;-1:-1:-1;;;;;24575:18:0;;24601:11;24614:9;24575:49;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24637:20;24660:9;-1:-1:-1;;;;;24660:21:0;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24637:46;-1:-1:-1;24710:20:0;24696:145;24736:15;24732:1;:19;24696:145;;;24773:56;;-1:-1:-1;;;24773:56:0;;24808:4;24773:56;;;16738:34:1;-1:-1:-1;;;;;16808:15:1;;;16788:18;;;16781:43;16840:18;;;16833:34;;;24773:26:0;;;;;16673:18:1;;24773:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24753:3;;;;;:::i;:::-;;;;24696:145;;;;24302:548;;;;;24227:623;;:::o;23678:182::-;23746:8;;23767:86;23787:12;23783:1;:16;23767:86;;;23833:5;23839:1;23833:8;;;;;;;:::i;:::-;;;;;23827:14;;:3;:14;:::i;:::-;23821:20;-1:-1:-1;23801:3:0;;;;:::i;:::-;;;;23767:86;;;;23678:182;;;:::o;19993:191::-;20067:16;20086:6;;-1:-1:-1;;;;;20103:17:0;;;-1:-1:-1;;;;;;20103:17:0;;;;;;20136:40;;20086:6;;;;;;;20136:40;;20067:16;20136:40;20056:128;19993:191;:::o;23961:220::-;24074:24;;24110:63;;-1:-1:-1;;;24110:63:0;;24145:4;24110:63;;;16738:34:1;-1:-1:-1;;;;;16808:15:1;;;16788:18;;;16781:43;16840:18;;;16833:34;;;24074:24:0;;;;;;24110:26;;16673:18:1;;24110:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24029:152;23961:220;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:367:1:-;77:8;87:6;141:3;134:4;126:6;122:17;118:27;108:55;;159:1;156;149:12;108:55;-1:-1:-1;182:20:1;;225:18;214:30;;211:50;;;257:1;254;247:12;211:50;294:4;286:6;282:17;270:29;;354:3;347:4;337:6;334:1;330:14;322:6;318:27;314:38;311:47;308:67;;;371:1;368;361:12;308:67;14:367;;;;;:::o;386:437::-;472:6;480;533:2;521:9;512:7;508:23;504:32;501:52;;;549:1;546;539:12;501:52;589:9;576:23;622:18;614:6;611:30;608:50;;;654:1;651;644:12;608:50;693:70;755:7;746:6;735:9;731:22;693:70;:::i;:::-;782:8;;667:96;;-1:-1:-1;386:437:1;-1:-1:-1;;;;386:437:1:o;1010:173::-;1078:20;;-1:-1:-1;;;;;1127:31:1;;1117:42;;1107:70;;1173:1;1170;1163:12;1107:70;1010:173;;;:::o;1188:127::-;1249:10;1244:3;1240:20;1237:1;1230:31;1280:4;1277:1;1270:15;1304:4;1301:1;1294:15;1320:252;1392:2;1386:9;1434:3;1422:16;;1468:18;1453:34;;1489:22;;;1450:62;1447:88;;;1515:18;;:::i;:::-;1551:2;1544:22;1320:252;:::o;1577:275::-;1648:2;1642:9;1713:2;1694:13;;-1:-1:-1;;1690:27:1;1678:40;;1748:18;1733:34;;1769:22;;;1730:62;1727:88;;;1795:18;;:::i;:::-;1831:2;1824:22;1577:275;;-1:-1:-1;1577:275:1:o;1857:980::-;1952:6;1960;1968;1976;2029:3;2017:9;2008:7;2004:23;2000:33;1997:53;;;2046:1;2043;2036:12;1997:53;2069:29;2088:9;2069:29;:::i;:::-;2059:39;;2117:2;2138:38;2172:2;2161:9;2157:18;2138:38;:::i;:::-;2128:48;;2223:2;2212:9;2208:18;2195:32;2185:42;;2278:2;2267:9;2263:18;2250:32;2301:18;2342:2;2334:6;2331:14;2328:34;;;2358:1;2355;2348:12;2328:34;2396:6;2385:9;2381:22;2371:32;;2441:7;2434:4;2430:2;2426:13;2422:27;2412:55;;2463:1;2460;2453:12;2412:55;2499:2;2486:16;2521:2;2517;2514:10;2511:36;;;2527:18;;:::i;:::-;2569:53;2612:2;2593:13;;-1:-1:-1;;2589:27:1;2585:36;;2569:53;:::i;:::-;2556:66;;2645:2;2638:5;2631:17;2685:7;2680:2;2675;2671;2667:11;2663:20;2660:33;2657:53;;;2706:1;2703;2696:12;2657:53;2761:2;2756;2752;2748:11;2743:2;2736:5;2732:14;2719:45;2805:1;2800:2;2795;2788:5;2784:14;2780:23;2773:34;;2826:5;2816:15;;;;;1857:980;;;;;;;:::o;3241:180::-;3300:6;3353:2;3341:9;3332:7;3328:23;3324:32;3321:52;;;3369:1;3366;3359:12;3321:52;-1:-1:-1;3392:23:1;;3241:180;-1:-1:-1;3241:180:1:o;3426:160::-;3491:20;;3547:13;;3540:21;3530:32;;3520:60;;3576:1;3573;3566:12;3591:327;3682:6;3690;3743:3;3731:9;3722:7;3718:23;3714:33;3711:53;;;3760:1;3757;3750:12;3711:53;3798:3;3787:9;3783:19;3821:7;3817:2;3814:15;3811:35;;;3842:1;3839;3832:12;3811:35;3865:9;3855:19;;3893;3909:2;3893:19;:::i;:::-;3883:29;;;3591:327;;;;;:::o;3923:619::-;4006:6;4037:3;4081:2;4069:9;4060:7;4056:23;4052:32;4049:52;;;4097:1;4094;4087:12;4049:52;4146:7;4139:4;4128:9;4124:20;4120:34;4110:62;;4168:1;4165;4158:12;4110:62;4192:22;;:::i;:::-;4262:18;;;;4236:3;4292:19;;;4289:39;;;4324:1;4321;4314:12;4289:39;4348:9;4366:146;4382:6;4377:3;4374:15;4366:146;;;4450:17;;4438:30;;4497:4;4488:14;;;;4399;4366:146;;;-1:-1:-1;4531:5:1;3923:619;-1:-1:-1;;;;;3923:619:1:o;4755:186::-;4814:6;4867:2;4855:9;4846:7;4842:23;4838:32;4835:52;;;4883:1;4880;4873:12;4835:52;4906:29;4925:9;4906:29;:::i;:::-;4896:39;4755:186;-1:-1:-1;;;4755:186:1:o;4946:254::-;5014:6;5022;5075:2;5063:9;5054:7;5050:23;5046:32;5043:52;;;5091:1;5088;5081:12;5043:52;5127:9;5114:23;5104:33;;5156:38;5190:2;5179:9;5175:18;5156:38;:::i;:::-;5146:48;;4946:254;;;;;:::o;5205:248::-;5267:6;5275;5328:2;5316:9;5307:7;5303:23;5299:32;5296:52;;;5344:1;5341;5334:12;5296:52;5367:26;5383:9;5367:26;:::i;:::-;5357:36;;5412:35;5443:2;5432:9;5428:18;5412:35;:::i;5458:773::-;5580:6;5588;5596;5604;5657:2;5645:9;5636:7;5632:23;5628:32;5625:52;;;5673:1;5670;5663:12;5625:52;5713:9;5700:23;5742:18;5783:2;5775:6;5772:14;5769:34;;;5799:1;5796;5789:12;5769:34;5838:70;5900:7;5891:6;5880:9;5876:22;5838:70;:::i;:::-;5927:8;;-1:-1:-1;5812:96:1;-1:-1:-1;6015:2:1;6000:18;;5987:32;;-1:-1:-1;6031:16:1;;;6028:36;;;6060:1;6057;6050:12;6028:36;;6099:72;6163:7;6152:8;6141:9;6137:24;6099:72;:::i;:::-;5458:773;;;;-1:-1:-1;6190:8:1;-1:-1:-1;;;;5458:773:1:o;6236:511::-;6331:6;6339;6347;6400:2;6388:9;6379:7;6375:23;6371:32;6368:52;;;6416:1;6413;6406:12;6368:52;6456:9;6443:23;6489:18;6481:6;6478:30;6475:50;;;6521:1;6518;6511:12;6475:50;6560:70;6622:7;6613:6;6602:9;6598:22;6560:70;:::i;:::-;6649:8;;-1:-1:-1;6534:96:1;-1:-1:-1;6703:38:1;;-1:-1:-1;6737:2:1;6722:18;;6703:38;:::i;:::-;6693:48;;6236:511;;;;;:::o;6752:508::-;6932:3;6917:19;;6921:9;7013:6;6890:4;7047:207;7061:4;7058:1;7055:11;7047:207;;;7124:13;;7139:6;7120:26;7108:39;;7170:4;7194:12;;;;7229:15;;;;7081:1;7074:9;7047:207;;;7051:3;;;6752:508;;;;:::o;7265:952::-;7349:6;7380:2;7423;7411:9;7402:7;7398:23;7394:32;7391:52;;;7439:1;7436;7429:12;7391:52;7479:9;7466:23;7508:18;7549:2;7541:6;7538:14;7535:34;;;7565:1;7562;7555:12;7535:34;7603:6;7592:9;7588:22;7578:32;;7648:7;7641:4;7637:2;7633:13;7629:27;7619:55;;7670:1;7667;7660:12;7619:55;7706:2;7693:16;7728:2;7724;7721:10;7718:36;;;7734:18;;:::i;:::-;7780:2;7777:1;7773:10;7763:20;;7803:28;7827:2;7823;7819:11;7803:28;:::i;:::-;7865:15;;;7935:11;;;7931:20;;;7896:12;;;;7963:19;;;7960:39;;;7995:1;7992;7985:12;7960:39;8019:11;;;;8039:148;8055:6;8050:3;8047:15;8039:148;;;8121:23;8140:3;8121:23;:::i;:::-;8109:36;;8072:12;;;;8165;;;;8039:148;;;8206:5;7265:952;-1:-1:-1;;;;;;;;7265:952:1:o;8222:343::-;8424:2;8406:21;;;8463:2;8443:18;;;8436:30;-1:-1:-1;;;8497:2:1;8482:18;;8475:49;8556:2;8541:18;;8222:343::o;8570:793::-;8663:6;8694:3;8738:2;8726:9;8717:7;8713:23;8709:32;8706:52;;;8754:1;8751;8744:12;8706:52;8803:7;8796:4;8785:9;8781:20;8777:34;8767:62;;8825:1;8822;8815:12;8767:62;8849:22;;:::i;:::-;8919:18;;;;8893:3;8949:19;;;8946:39;;;8981:1;8978;8971:12;8946:39;9005:9;9023:310;9039:6;9034:3;9031:15;9023:310;;;9114:3;9108:10;9162:6;9155:5;9151:18;9144:5;9141:29;9131:127;;9212:1;9241:2;9237;9230:14;9131:127;9271:18;;9318:4;9309:14;;;;9056;9023:310;;9748:209;9780:1;9806;9796:132;;9850:10;9845:3;9841:20;9838:1;9831:31;9885:4;9882:1;9875:15;9913:4;9910:1;9903:15;9796:132;-1:-1:-1;9942:9:1;;9748:209::o;9962:127::-;10023:10;10018:3;10014:20;10011:1;10004:31;10054:4;10051:1;10044:15;10078:4;10075:1;10068:15;10094:127;10155:10;10150:3;10146:20;10143:1;10136:31;10186:4;10183:1;10176:15;10210:4;10207:1;10200:15;10226:217;10265:4;10294:6;10350:10;;;;10320;;10372:12;;;10369:38;;;10387:18;;:::i;:::-;10424:13;;10226:217;-1:-1:-1;;;10226:217:1:o;10448:135::-;10487:3;10508:17;;;10505:43;;10528:18;;:::i;:::-;-1:-1:-1;10575:1:1;10564:13;;10448:135::o;10588:658::-;10759:2;10811:21;;;10881:13;;10784:18;;;10903:22;;;10730:4;;10759:2;10982:15;;;;10956:2;10941:18;;;10730:4;11025:195;11039:6;11036:1;11033:13;11025:195;;;11104:13;;-1:-1:-1;;;;;11100:39:1;11088:52;;11195:15;;;;11160:12;;;;11136:1;11054:9;11025:195;;;-1:-1:-1;11237:3:1;;10588:658;-1:-1:-1;;;;;;10588:658:1:o;11251:184::-;11321:6;11374:2;11362:9;11353:7;11349:23;11345:32;11342:52;;;11390:1;11387;11380:12;11342:52;-1:-1:-1;11413:16:1;;11251:184;-1:-1:-1;11251:184:1:o;11440:346::-;11642:2;11624:21;;;11681:2;11661:18;;;11654:30;-1:-1:-1;;;11715:2:1;11700:18;;11693:52;11777:2;11762:18;;11440:346::o;11791:355::-;11993:2;11975:21;;;12032:2;12012:18;;;12005:30;12071:33;12066:2;12051:18;;12044:61;12137:2;12122:18;;11791:355::o;12500:168::-;12540:7;12606:1;12602;12598:6;12594:14;12591:1;12588:21;12583:1;12576:9;12569:17;12565:45;12562:71;;;12613:18;;:::i;:::-;-1:-1:-1;12653:9:1;;12500:168::o;13031:125::-;13071:4;13099:1;13096;13093:8;13090:34;;;13104:18;;:::i;:::-;-1:-1:-1;13141:9:1;;13031:125::o;14330:128::-;14370:3;14401:1;14397:6;14394:1;14391:13;14388:39;;;14407:18;;:::i;:::-;-1:-1:-1;14443:9:1;;14330:128::o;14463:356::-;14665:2;14647:21;;;14684:18;;;14677:30;14743:34;14738:2;14723:18;;14716:62;14810:2;14795:18;;14463:356::o;15996:497::-;16178:3;16163:19;;16167:9;16259:6;16136:4;16293:194;16307:4;16304:1;16301:11;16293:194;;;16366:13;;16354:26;;16403:4;16427:12;;;;16462:15;;;;16327:1;16320:9;16293:194;
Swarm Source
ipfs://36d2dfdc154a430c049a33e54d41f7deb5244445ddacebc77345f07c36c76e73
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | Ether (ETH) | 100.00% | $3,116.35 | 1.12 | $3,490.31 |
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.