{"file_path":"ArtBlocksKeyMinter.sol","creation_status":"success","source_code":"// SPDX-License-Identifier: https://github.com/lendroidproject/protocol.2.0/blob/master/LICENSE.md\n\n\n// File: @openzeppelin/contracts/GSN/Context.sol\n\npragma solidity ^0.7.0;\n\n/*\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with GSN meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n    function _msgSender() internal view virtual returns (address payable) {\n        return msg.sender;\n    }\n\n    function _msgData() internal view virtual returns (bytes memory) {\n        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\n        return msg.data;\n    }\n}\n\n// File: @openzeppelin/contracts/access/Ownable.sol\n\npragma solidity ^0.7.0;\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * By default, the owner account will be the one that deploys the contract. This\n * can later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\ncontract Ownable is Context {\n    address private _owner;\n\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n    /**\n     * @dev Initializes the contract setting the deployer as the initial owner.\n     */\n    constructor () {\n        address msgSender = _msgSender();\n        _owner = msgSender;\n        emit OwnershipTransferred(address(0), msgSender);\n    }\n\n    /**\n     * @dev Returns the address of the current owner.\n     */\n    function owner() public view returns (address) {\n        return _owner;\n    }\n\n    /**\n     * @dev Throws if called by any account other than the owner.\n     */\n    modifier onlyOwner() {\n        require(_owner == _msgSender(), \"Ownable: caller is not the owner\");\n        _;\n    }\n\n    /**\n     * @dev Leaves the contract without owner. It will not be possible to call\n     * `onlyOwner` functions anymore. Can only be called by the current owner.\n     *\n     * NOTE: Renouncing ownership will leave the contract without an owner,\n     * thereby removing any functionality that is only available to the owner.\n     */\n    function renounceOwnership() public virtual onlyOwner {\n        emit OwnershipTransferred(_owner, address(0));\n        _owner = address(0);\n    }\n\n    /**\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\n     * Can only be called by the current owner.\n     */\n    function transferOwnership(address newOwner) public virtual onlyOwner {\n        require(newOwner != address(0), \"Ownable: new owner is the zero address\");\n        emit OwnershipTransferred(_owner, newOwner);\n        _owner = newOwner;\n    }\n}\n\n// File: @openzeppelin/contracts/utils/Address.sol\n\npragma solidity ^0.7.0;\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary Address {\n    /**\n     * @dev Returns true if `account` is a contract.\n     *\n     * [IMPORTANT]\n     * ====\n     * It is unsafe to assume that an address for which this function returns\n     * false is an externally-owned account (EOA) and not a contract.\n     *\n     * Among others, `isContract` will return false for the following\n     * types of addresses:\n     *\n     *  - an externally-owned account\n     *  - a contract in construction\n     *  - an address where a contract will be created\n     *  - an address where a contract lived, but was destroyed\n     * ====\n     */\n    function isContract(address account) internal view returns (bool) {\n        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts\n        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned\n        // for accounts without code, i.e. `keccak256('')`\n        bytes32 codehash;\n        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;\n        // solhint-disable-next-line no-inline-assembly\n        assembly { codehash := extcodehash(account) }\n        return (codehash != accountHash && codehash != 0x0);\n    }\n\n    /**\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n     * `recipient`, forwarding all available gas and reverting on errors.\n     *\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\n     * imposed by `transfer`, making them unable to receive funds via\n     * `transfer`. {sendValue} removes this limitation.\n     *\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n     *\n     * IMPORTANT: because control is transferred to `recipient`, care must be\n     * taken to not create reentrancy vulnerabilities. Consider using\n     * {ReentrancyGuard} or the\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\n     */\n    function sendValue(address payable recipient, uint256 amount) internal {\n        require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value\n        (bool success, ) = recipient.call{ value: amount }(\"\");\n        require(success, \"Address: unable to send value, recipient may have reverted\");\n    }\n\n    /**\n     * @dev Performs a Solidity function call using a low level `call`. A\n     * plain`call` is an unsafe replacement for a function call: use this\n     * function instead.\n     *\n     * If `target` reverts with a revert reason, it is bubbled up by this\n     * function (like regular Solidity function calls).\n     *\n     * Returns the raw returned data. To convert to the expected return value,\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n     *\n     * Requirements:\n     *\n     * - `target` must be a contract.\n     * - calling `target` with `data` must not revert.\n     *\n     * _Available since v3.1._\n     */\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n      return functionCall(target, data, \"Address: low-level call failed\");\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n     * `errorMessage` as a fallback revert reason when `target` reverts.\n     *\n     * _Available since v3.1._\n     */\n    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\n        return _functionCallWithValue(target, data, 0, errorMessage);\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n     * but also transferring `value` wei to `target`.\n     *\n     * Requirements:\n     *\n     * - the calling contract must have an ETH balance of at least `value`.\n     * - the called Solidity function must be `payable`.\n     *\n     * _Available since v3.1._\n     */\n    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\n        return functionCallWithValue(target, data, value, \"Address: low-level call with value failed\");\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\n     *\n     * _Available since v3.1._\n     */\n    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\n        require(address(this).balance >= value, \"Address: insufficient balance for call\");\n        return _functionCallWithValue(target, data, value, errorMessage);\n    }\n\n    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {\n        require(isContract(target), \"Address: call to non-contract\");\n\n        // solhint-disable-next-line avoid-low-level-calls\n        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);\n        if (success) {\n            return returndata;\n        } else {\n            // Look for revert reason and bubble it up if present\n            if (returndata.length > 0) {\n                // The easiest way to bubble the revert reason is using memory via assembly\n\n                // solhint-disable-next-line no-inline-assembly\n                assembly {\n                    let returndata_size := mload(returndata)\n                    revert(add(32, returndata), returndata_size)\n                }\n            } else {\n                revert(errorMessage);\n            }\n        }\n    }\n}\n\n// File: contracts/auctions/IRandomMinter.sol\n\npragma solidity 0.7.5;\n\n\n/**\n * @dev Required interface of an AuctionTokenProbabilityDistribution compliant contract.\n */\ninterface IRandomMinter {\n    function mintWithRandomness(uint256 randomResult, address to) external returns(\n        address newTokenAddress, uint256 newTokenId, uint256 feePercentage);\n\n    function transferOwnership(address newOwner) external;\n\n    function currentOwner() external view returns (address);\n}\n\n// File: contracts/mocks/artblocks/IGenArt721Core.sol\n\npragma solidity 0.7.5;\n\n\n/**\n * @dev Required interface of an ERC721WhaleStreet compliant contract.\n */\ninterface IGenArt721Core {\n\n    function mint(address _to, uint256 _projectId, address _by) external returns (uint256 _tokenId);\n\n    function projectIdToArtistAddress(uint256 _projectId) external view returns (address _by);\n\n}\n\n// File: contracts/mocks/artblocks/ArtBlocksKeyMinter.sol\n\npragma solidity 0.7.5;\n\n\n\n\n\n\ncontract ArtBlocksKeyMinter is IRandomMinter, Ownable {\n\n    using Address for address;\n\n    enum Rarity { REGULAR, UNIQUE, LEGENDARY }\n\n    mapping(Rarity => uint256) public artblocksProjectIds;\n\n    mapping(Rarity => uint256) public daoTreasuryFeePercentages;\n\n    IGenArt721Core public auctionToken;\n\n    // solhint-disable-next-line func-visibility\n    constructor(address auctionTokenAddress) {\n        require(auctionTokenAddress.isContract(), \"{ArtBlocksKeyMinter} : invalid auctionTokenAddress\");\n        artblocksProjectIds[Rarity.REGULAR] = 79;\n        artblocksProjectIds[Rarity.UNIQUE] = 80;\n        artblocksProjectIds[Rarity.LEGENDARY] = 81;\n        daoTreasuryFeePercentages[Rarity.REGULAR] = 50;\n        daoTreasuryFeePercentages[Rarity.UNIQUE] = 25;\n        daoTreasuryFeePercentages[Rarity.LEGENDARY] = 5;\n        auctionToken = IGenArt721Core(auctionTokenAddress);\n    }\n\n    function currentOwner() external view override returns (address) {\n        return owner();\n    }\n\n    function mintWithRandomness(uint256 randomResult, address to) public onlyOwner override returns(\n        address newTokenAddress, uint256 newTokenId, uint256 feePercentage) {\n        newTokenAddress = address(auctionToken);\n        require(newTokenAddress != address(0), \"auctionToken address is zero\");\n        require((randomResult > 0) && (randomResult <= 100), \"Invalid randomResult\");\n        uint256 projectId;\n        if (randomResult > 0 && randomResult <= 15) {\n            projectId = artblocksProjectIds[Rarity.LEGENDARY];\n            feePercentage = daoTreasuryFeePercentages[Rarity.LEGENDARY];\n        } else if (randomResult > 15 && randomResult <= 50) {\n            projectId = artblocksProjectIds[Rarity.UNIQUE];\n            feePercentage = daoTreasuryFeePercentages[Rarity.UNIQUE];\n        } else {\n            projectId = artblocksProjectIds[Rarity.REGULAR];\n            feePercentage = daoTreasuryFeePercentages[Rarity.REGULAR];\n        }\n        address artist = auctionToken.projectIdToArtistAddress(projectId);\n        newTokenId = auctionToken.mint(to, projectId, artist);\n    }\n\n    function transferOwnership(address newOwner) public override(IRandomMinter, Ownable) onlyOwner {\n        require(newOwner != address(0), \"{transferOwnership} : invalid new owner\");\n        super.transferOwnership(newOwner);\n    }\n\n}\n","deployed_bytecode":"0x608060405234801561001057600080fd5b50600436106100885760003560e01c8063b387ef921161005b578063b387ef9214610144578063c48b6ed214610178578063f2fde38b146101fe578063f96368d41461024257610088565b8063307bca291461008d578063715018a6146100d25780638da5cb5b146100dc57806399fdb32014610110575b600080fd5b6100bc600480360360208110156100a357600080fd5b81019080803560ff169060200190929190505050610287565b6040518082815260200191505060405180910390f35b6100da61029f565b005b6100e4610425565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61011861044e565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61014c610474565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101c46004803603604081101561018e57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610483565b604051808473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390f35b6102406004803603602081101561021457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610987565b005b6102716004803603602081101561025857600080fd5b81019080803560ff169060200190929190505050610ae1565b6040518082815260200191505060405180910390f35b60016020528060005260406000206000915090505481565b6102a7610b44565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610367576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061047e610425565b905090565b6000806000610490610b44565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610550576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169250600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f61756374696f6e546f6b656e2061646472657373206973207a65726f0000000081525060200191505060405180910390fd5b600085118015610629575060648511155b61069b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f496e76616c69642072616e646f6d526573756c7400000000000000000000000081525060200191505060405180910390fd5b600080861180156106ad5750600f8611155b1561070f57600160006002808111156106c257fe5b60028111156106cd57fe5b8152602001908152602001600020549050600260006002808111156106ee57fe5b60028111156106f957fe5b81526020019081526020016000205491506107de565b600f86118015610720575060328611155b1561078457600160006001600281111561073657fe5b600281111561074157fe5b8152602001908152602001600020549050600260006001600281111561076357fe5b600281111561076e57fe5b81526020019081526020016000205491506107dd565b6001600080600281111561079457fe5b600281111561079f57fe5b8152602001908152602001600020549050600260008060028111156107c057fe5b60028111156107cb57fe5b81526020019081526020016000205491505b5b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a47d29cb836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561085357600080fd5b505afa158015610867573d6000803e3d6000fd5b505050506040513d602081101561087d57600080fd5b81019080805190602001909291905050509050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630d4d15138784846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019350505050602060405180830381600087803b15801561094157600080fd5b505af1158015610955573d6000803e3d6000fd5b505050506040513d602081101561096b57600080fd5b8101908080519060200190929190505050935050509250925092565b61098f610b44565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a4f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610ad5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180610d7e6027913960400191505060405180910390fd5b610ade81610b4c565b50565b60026020528060005260406000206000915090505481565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f9150808214158015610b3b57506000801b8214155b92505050919050565b600033905090565b610b54610b44565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c14576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610c9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180610d586026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573737b7472616e736665724f776e6572736869707d203a20696e76616c6964206e6577206f776e6572a264697066735822122044ffb554f328961d350a4b1d2560ca618b71de245de4ffcdb6f098f4437618ac64736f6c63430007050033","optimization_enabled":false,"verified_twin_address_hash":null,"is_verified":true,"compiler_settings":{"evmVersion":"istanbul","libraries":{},"metadata":{"bytecodeHash":"ipfs"},"optimizer":{"enabled":false,"runs":200},"remappings":[]},"optimization_runs":null,"sourcify_repo_url":"https://repo.sourcify.dev/contracts/full_match/1/0x95004D48437E7D55f81D4fD0a4e24904890838b8/","decoded_constructor_args":[["0xa7d8d9ef8D8Ce8992Df33D8b8CF4Aebabd5bD270",{"internalType":"address","name":"auctionTokenAddress","type":"address"}]],"compiler_version":"0.7.5+commit.eb77ed08","is_verified_via_verifier_alliance":false,"verified_at":"2026-09-01T04:25:41.447010Z","implementations":[],"proxy_type":null,"external_libraries":[],"creation_bytecode":"0x60806040523480156200001157600080fd5b506040516200115b3803806200115b833981810160405260208110156200003757600080fd5b810190808051906020019092919050505060006200005a620002eb60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350620001248173ffffffffffffffffffffffffffffffffffffffff16620002f360201b62000af91760201c565b6200017b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180620011296032913960400191505060405180910390fd5b604f600160008060028111156200018e57fe5b60028111156200019a57fe5b81526020019081526020016000208190555060506001600060016002811115620001c057fe5b6002811115620001cc57fe5b815260200190815260200160002081905550605160016000600280811115620001f157fe5b6002811115620001fd57fe5b8152602001908152602001600020819055506032600260008060028111156200022257fe5b60028111156200022e57fe5b815260200190815260200160002081905550601960026000600160028111156200025457fe5b60028111156200026057fe5b8152602001908152602001600020819055506005600260006002808111156200028557fe5b60028111156200029157fe5b81526020019081526020016000208190555080600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506200033f565b600033905090565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f91508082141580156200033657506000801b8214155b92505050919050565b610dda806200034f6000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c8063b387ef921161005b578063b387ef9214610144578063c48b6ed214610178578063f2fde38b146101fe578063f96368d41461024257610088565b8063307bca291461008d578063715018a6146100d25780638da5cb5b146100dc57806399fdb32014610110575b600080fd5b6100bc600480360360208110156100a357600080fd5b81019080803560ff169060200190929190505050610287565b6040518082815260200191505060405180910390f35b6100da61029f565b005b6100e4610425565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61011861044e565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61014c610474565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101c46004803603604081101561018e57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610483565b604051808473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390f35b6102406004803603602081101561021457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610987565b005b6102716004803603602081101561025857600080fd5b81019080803560ff169060200190929190505050610ae1565b6040518082815260200191505060405180910390f35b60016020528060005260406000206000915090505481565b6102a7610b44565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610367576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061047e610425565b905090565b6000806000610490610b44565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610550576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169250600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f61756374696f6e546f6b656e2061646472657373206973207a65726f0000000081525060200191505060405180910390fd5b600085118015610629575060648511155b61069b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f496e76616c69642072616e646f6d526573756c7400000000000000000000000081525060200191505060405180910390fd5b600080861180156106ad5750600f8611155b1561070f57600160006002808111156106c257fe5b60028111156106cd57fe5b8152602001908152602001600020549050600260006002808111156106ee57fe5b60028111156106f957fe5b81526020019081526020016000205491506107de565b600f86118015610720575060328611155b1561078457600160006001600281111561073657fe5b600281111561074157fe5b8152602001908152602001600020549050600260006001600281111561076357fe5b600281111561076e57fe5b81526020019081526020016000205491506107dd565b6001600080600281111561079457fe5b600281111561079f57fe5b8152602001908152602001600020549050600260008060028111156107c057fe5b60028111156107cb57fe5b81526020019081526020016000205491505b5b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a47d29cb836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561085357600080fd5b505afa158015610867573d6000803e3d6000fd5b505050506040513d602081101561087d57600080fd5b81019080805190602001909291905050509050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630d4d15138784846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019350505050602060405180830381600087803b15801561094157600080fd5b505af1158015610955573d6000803e3d6000fd5b505050506040513d602081101561096b57600080fd5b8101908080519060200190929190505050935050509250925092565b61098f610b44565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a4f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610ad5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180610d7e6027913960400191505060405180910390fd5b610ade81610b4c565b50565b60026020528060005260406000206000915090505481565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f9150808214158015610b3b57506000801b8214155b92505050919050565b600033905090565b610b54610b44565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c14576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610c9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180610d586026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573737b7472616e736665724f776e6572736869707d203a20696e76616c6964206e6577206f776e6572a264697066735822122044ffb554f328961d350a4b1d2560ca618b71de245de4ffcdb6f098f4437618ac64736f6c634300070500337b417274426c6f636b734b65794d696e7465727d203a20696e76616c69642061756374696f6e546f6b656e41646472657373000000000000000000000000a7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270","name":"ArtBlocksKeyMinter","is_blueprint":false,"license_type":"none","is_fully_verified":true,"is_verified_via_eth_bytecode_db":true,"language":"solidity","evm_version":"istanbul","can_be_visualized_via_sol2uml":true,"is_verified_via_sourcify":true,"additional_sources":[],"certified":false,"conflicting_implementations":null,"abi":[{"inputs":[{"internalType":"address","name":"auctionTokenAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"internalType":"enum ArtBlocksKeyMinter.Rarity","name":"","type":"uint8"}],"name":"artblocksProjectIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"auctionToken","outputs":[{"internalType":"contract IGenArt721Core","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum ArtBlocksKeyMinter.Rarity","name":"","type":"uint8"}],"name":"daoTreasuryFeePercentages","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"randomResult","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"mintWithRandomness","outputs":[{"internalType":"address","name":"newTokenAddress","type":"address"},{"internalType":"uint256","name":"newTokenId","type":"uint256"},{"internalType":"uint256","name":"feePercentage","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}],"is_changed_bytecode":false,"is_partially_verified":false,"constructor_args":"0x000000000000000000000000a7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270"}