From 81b446534135796843589b36bac791ef9aeca879 Mon Sep 17 00:00:00 2001 From: zhl Date: Wed, 26 Apr 2023 16:22:32 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E6=89=B9=E9=87=8Fmint?= =?UTF-8?q?=E6=97=B6=EF=BC=8C=20=E5=A6=82=E6=9E=9C=E4=BC=A0=E5=85=A5?= =?UTF-8?q?=E6=95=B0=E9=87=8F=E5=B0=91=E4=BA=8E=E7=94=A8=E6=88=B7=E5=8F=AF?= =?UTF-8?q?mint=E6=95=B0=E9=87=8F=E6=97=B6=EF=BC=8C=20=E4=BC=9A=E8=A2=AB?= =?UTF-8?q?=E6=92=A4=E9=94=80=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build/contracts/BEBadge.json | 2 +- build/contracts/BEMultiSigWallet.json | 2 +- build/contracts/BEUSDT.json | 2 +- build/contracts/Migrations.json | 2 +- build/contracts/NftDistributor.json | 1116 +++++++++++++------------ contracts/logic/NftDistributor.sol | 2 +- contracts/tokens/erc721/BEBadge.sol | 6 - migrations/2_depoly_etc.js | 28 +- 8 files changed, 607 insertions(+), 553 deletions(-) diff --git a/build/contracts/BEBadge.json b/build/contracts/BEBadge.json index 15c5723..5ea63a9 100644 --- a/build/contracts/BEBadge.json +++ b/build/contracts/BEBadge.json @@ -31421,7 +31421,7 @@ } }, "schemaVersion": "3.4.11", - "updatedAt": "2023-04-23T02:44:39.956Z", + "updatedAt": "2023-04-26T07:39:54.101Z", "networkType": "ethereum", "devdoc": { "kind": "dev", diff --git a/build/contracts/BEMultiSigWallet.json b/build/contracts/BEMultiSigWallet.json index 6ef0c8f..31ab8cd 100644 --- a/build/contracts/BEMultiSigWallet.json +++ b/build/contracts/BEMultiSigWallet.json @@ -34799,7 +34799,7 @@ } }, "schemaVersion": "3.4.11", - "updatedAt": "2023-04-23T02:44:39.976Z", + "updatedAt": "2023-04-26T07:39:54.120Z", "networkType": "ethereum", "devdoc": { "events": { diff --git a/build/contracts/BEUSDT.json b/build/contracts/BEUSDT.json index c1046a2..1a91d9f 100644 --- a/build/contracts/BEUSDT.json +++ b/build/contracts/BEUSDT.json @@ -16789,7 +16789,7 @@ } }, "schemaVersion": "3.4.11", - "updatedAt": "2023-04-23T02:44:39.968Z", + "updatedAt": "2023-04-26T07:39:54.112Z", "networkType": "ethereum", "devdoc": { "kind": "dev", diff --git a/build/contracts/Migrations.json b/build/contracts/Migrations.json index ad2a683..351c06a 100644 --- a/build/contracts/Migrations.json +++ b/build/contracts/Migrations.json @@ -3235,7 +3235,7 @@ } }, "schemaVersion": "3.4.11", - "updatedAt": "2023-04-23T02:44:39.989Z", + "updatedAt": "2023-04-26T07:39:54.133Z", "networkType": "ethereum", "devdoc": { "kind": "dev", diff --git a/build/contracts/NftDistributor.json b/build/contracts/NftDistributor.json index 0cb2723..220d6f6 100644 --- a/build/contracts/NftDistributor.json +++ b/build/contracts/NftDistributor.json @@ -451,9 +451,9 @@ "constant": true } ], - "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_nftTarget\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"_manageAddress\",\"type\":\"address[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"nft\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"nftSIds\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"nftTIds\",\"type\":\"uint256[]\"}],\"name\":\"Minted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MANAGE_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_user\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"_nftIds\",\"type\":\"uint256[]\"}],\"name\":\"addNFTData\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_user\",\"type\":\"address\"}],\"name\":\"getMintableCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_user\",\"type\":\"address\"}],\"name\":\"getMintableNftIds\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"getRoleMember\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleMemberCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_user\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"count\",\"type\":\"uint256\"}],\"name\":\"mintToUser\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nft\",\"outputs\":[{\"internalType\":\"contract IBEERC721\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"nftMinted\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"ownerToNFTs\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"addNFTData(address,uint256[])\":{\"details\":\"The addNFTData function adds an array of NFT IDs to the list of NFT IDs owned by a user. mintToUser method would check if target user had permission to mint NFTs. Only functions called by an address with the MANAGE_ROLE permission can access this function. The function takes in the address of the user and an array of NFT IDs. It then loops through the array of NFT IDs, and adds each one to the end of the array of NFTs owned by that user to update their ownership data.\",\"params\":{\"_nftIds\":\"- An array of NFT IDs being added to the user's NFT data\",\"_user\":\"- The address of the user being updated with new NFT data\"}},\"constructor\":{\"details\":\"Contract constructor. Initializes the contract with the specified addresses and sets the admin and management roles. Parameters: - _nftTarget: The address of NFT that will be minted by this contract. Need MINTER_ROLE - _nftSource: The address of the source NFT that will check if user has mint permission. - _manageAddress: The address that will have the MANAGE_ROLE assigned.\"},\"getMintableCount(address)\":{\"details\":\"The getMintableCount function gets the number of NFTs owned by a user that have not yet been minted. This is a read-only function, meaning it doesn't modify the state of the blockchain. It takes in the address of the user whose mintable count is being determined, and returns the number of NFTs owned by the user that have not yet been minted.\",\"params\":{\"_user\":\"- The address of the user whose mintable count is being determined\"},\"returns\":{\"_0\":\"count - The number of NFTs owned by the user that have not yet been minted\"}},\"getMintableNftIds(address)\":{\"details\":\"The getMintableNftIds function gets an array of NFT IDs owned by a user that have not yet been minted. This is a read-only function, meaning it doesn't modify the state of the blockchain. It takes in the address of the user whose mintable NFT IDs are being determined, and returns an array of the NFT IDs owned by the user that have not yet been minted.\",\"params\":{\"_user\":\"- The address of the user whose mintable NFT IDs are being determined\"},\"returns\":{\"_0\":\"mintableNftIds - An array of the NFT IDs owned by the user that have not yet been minted\"}},\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}.\"},\"getRoleMember(bytes32,uint256)\":{\"details\":\"Returns one of the accounts that have `role`. `index` must be a value between 0 and {getRoleMemberCount}, non-inclusive. Role bearers are not sorted in any particular way, and their ordering may change at any point. WARNING: When using {getRoleMember} and {getRoleMemberCount}, make sure you perform all queries on the same block. See the following https://forum.openzeppelin.com/t/iterating-over-elements-on-enumerableset-in-openzeppelin-contracts/2296[forum post] for more information.\"},\"getRoleMemberCount(bytes32)\":{\"details\":\"Returns the number of accounts that have `role`. Can be used together with {getRoleMember} to enumerate all bearers of a role.\"},\"grantRole(bytes32,address)\":{\"details\":\"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role.\"},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"mintToUser(address,uint256)\":{\"details\":\"The mintToUser function mints NFTs to a given user. Only functions called by an address with the MANAGE_ROLE permission can access this function. The function takes an array of nftIds and checks that there are enough mintable NFTs for the user. It then loops through the user's owned NFTs, checking if each is mintable, and if so, adds it to a list to be minted. Then it emits the Minted event with details of the operation.\",\"params\":{\"_user\":\"- The address of the user receiving the NFTs\"}},\"renounceRole(bytes32,address)\":{\"details\":\"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `account`.\"},\"revokeRole(bytes32,address)\":{\"details\":\"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role.\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"project:/contracts/logic/NftDistributor.sol\":\"NftDistributor\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/AccessControl.sol\":{\"keccak256\":\"0x4a1a0ba12bf1a33f10d9fe226278cf59675c0b929d29e4da99658a079b27fb84\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bda1319db846d6d6f92d8a57a9bdee8bde1dc39aa7546165791692c24dd6f30a\",\"dweb:/ipfs/Qma5oZ7DmbdAjd8mpiW7mx896PDtwsQtCQ2hj9Upf7b7JK\"]},\"@openzeppelin/contracts/access/AccessControlEnumerable.sol\":{\"keccak256\":\"0x13f5e15f2a0650c0b6aaee2ef19e89eaf4870d6e79662d572a393334c1397247\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7ee05f28f549a5d6515e152580716b87636ed4bfab9812499a6e3803df88288b\",\"dweb:/ipfs/QmeEnhdwY1t5Y3YU5a4ffzgXuToydH2PNdNxV9W7dEPRQJ\"]},\"@openzeppelin/contracts/access/IAccessControl.sol\":{\"keccak256\":\"0x59ce320a585d7e1f163cd70390a0ef2ff9cec832e2aa544293a00692465a7a57\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bb2c137c343ef0c4c7ce7b18c1d108afdc9d315a04e48307288d2d05adcbde3a\",\"dweb:/ipfs/QmUxhrAQM3MM3FF5j7AtcXLXguWCJBHJ14BRdVtuoQc8Fh\"]},\"@openzeppelin/contracts/access/IAccessControlEnumerable.sol\":{\"keccak256\":\"0xba4459ab871dfa300f5212c6c30178b63898c03533a1ede28436f11546626676\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3dcc7b09bfa6e18aab262ca372f4a9b1fc82e294b430706a4e1378cf58e6a276\",\"dweb:/ipfs/QmT8oSAcesdctR15HMLhr2a1HRpXymxdjTfdtfTYJcj2N2\"]},\"@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0x516a22876c1fab47f49b1bc22b4614491cd05338af8bd2e7b382da090a079990\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a439187f7126d31add4557f82d8aed6be0162007cd7182c48fd934dbab8f3849\",\"dweb:/ipfs/QmRPLguRFvrRJS7r6F1bcLvsx6q1VrgjEpZafyeL8D7xZh\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]},\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x32c202bd28995dd20c4347b7c6467a6d3241c74c8ad3edcbb610cd9205916c45\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8179c356adb19e70d6b31a1eedc8c5c7f0c00e669e2540f4099e3844c6074d30\",\"dweb:/ipfs/QmWFbivarEobbqhS1go64ootVuHfVohBseerYy9FTEd1W2\"]},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xd10975de010d89fd1c78dc5e8a9a7e7f496198085c151648f20cba166b32582b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fb0048dee081f6fffa5f74afc3fb328483c2a30504e94a0ddd2a5114d731ec4d\",\"dweb:/ipfs/QmZptt1nmYoA5SgjwnSgWqgUSDgm4q52Yos3xhnMv3MV43\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f\",\"dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy\"]},\"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":{\"keccak256\":\"0x9772845c886f87a3aab315f8d6b68aa599027c20f441b131cd4afaf65b588900\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ad2f29a9c17a4f746416c9e254e17671f43c409dbfa6e4d7d76c3e4a83212d31\",\"dweb:/ipfs/QmTqU65L6iu6yqmXKzcNLPioR8etzKPWycpDJCm17ifVdS\"]},\"project:/contracts/interfaces/IBEERC721.sol\":{\"keccak256\":\"0x20027b750379b3699f109326d0e2d75794fd7af357dd7baceff59b7f26ccc4ae\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://37b2a85036c0a234c5347794e832643b3db4550cc86f7062c111cd30de93d656\",\"dweb:/ipfs/QmPMszafR7MJER2PgUvktY8V3krBLT2u7zyB4PQCfBCdY5\"]},\"project:/contracts/logic/NftDistributor.sol\":{\"keccak256\":\"0x68348320fbd7ee5038778d29a647b04cdda43354153d8a5337b30e783455653b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e49bb84bf5844c66f12ed448bb6ceefc0aaf35b5e0d369c233d2967d31439f92\",\"dweb:/ipfs/QmbZkfzkzZQbCQEQB4RaogvjKiy69BVQKXSWK19oMGQPFt\"]}},\"version\":1}", - "bytecode": "0x60806040523480156200001157600080fd5b50604051620029d6380380620029d6833981810160405281019062000037919062000650565b6200006c7fa076a07f65bcd51bcb15a0f01a65bc18f2d922acb81bcfd8af4caf5adb5570916000801b6200014a60201b60201c565b620000906000801b62000084620001ad60201b60201c565b620001b560201b60201c565b60005b81518110156200010057620000ec7fa076a07f65bcd51bcb15a0f01a65bc18f2d922acb81bcfd8af4caf5adb557091838381518110620000d857620000d7620006b6565b5b6020026020010151620001b560201b60201c565b80620000f8906200071e565b905062000093565b5081600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050506200076c565b60006200015d83620001cb60201b60201c565b905081600080858152602001908152602001600020600101819055508181847fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff60405160405180910390a4505050565b600033905090565b620001c78282620001ea60201b60201c565b5050565b6000806000838152602001908152602001600020600101549050919050565b6200020182826200023260201b62000d341760201c565b6200022d81600160008581526020019081526020016000206200032360201b62000e141790919060201c565b505050565b6200024482826200035b60201b60201c565b6200031f57600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620002c4620001ad60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b600062000353836000018373ffffffffffffffffffffffffffffffffffffffff1660001b620003c560201b60201c565b905092915050565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000620003d983836200043f60201b60201c565b6200043457826000018290806001815401808255809150506001900390600052602060002001600090919091909150558260000180549050836001016000848152602001908152602001600020819055506001905062000439565b600090505b92915050565b600080836001016000848152602001908152602001600020541415905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620004a38262000476565b9050919050565b620004b58162000496565b8114620004c157600080fd5b50565b600081519050620004d581620004aa565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200052b82620004e0565b810181811067ffffffffffffffff821117156200054d576200054c620004f1565b5b80604052505050565b60006200056262000462565b905062000570828262000520565b919050565b600067ffffffffffffffff821115620005935762000592620004f1565b5b602082029050602081019050919050565b600080fd5b6000620005c0620005ba8462000575565b62000556565b90508083825260208201905060208402830185811115620005e657620005e5620005a4565b5b835b81811015620006135780620005fe8882620004c4565b845260208401935050602081019050620005e8565b5050509392505050565b600082601f830112620006355762000634620004db565b5b815162000647848260208601620005a9565b91505092915050565b600080604083850312156200066a57620006696200046c565b5b60006200067a85828601620004c4565b925050602083015167ffffffffffffffff8111156200069e576200069d62000471565b5b620006ac858286016200061d565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000819050919050565b60006200072b8262000714565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415620007615762000760620006e5565b5b600182019050919050565b61225a806200077c6000396000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c806384be00e4116100a2578063a217fddf11610071578063a217fddf146102dc578063ad0f93ad146102fa578063ca15c8731461032a578063d547741f1461035a578063ffd68f15146103765761010b565b806384be00e4146102445780639010d07c1461026057806391d14854146102905780639533a384146102c05761010b565b80632f2ff15d116100de5780632f2ff15d146101d057806336568abe146101ec57806347ccca021461020857806360a4b76a146102265761010b565b806301ffc9a714610110578063032221ad146101405780630431f20514610170578063248a9ca3146101a0575b600080fd5b61012a60048036038101906101259190611600565b6103a6565b6040516101379190611648565b60405180910390f35b61015a600480360381019061015591906116c1565b610420565b60405161016791906117b6565b60405180910390f35b61018a600480360381019061018591906116c1565b6105a2565b60405161019791906117e7565b60405180910390f35b6101ba60048036038101906101b59190611838565b6106b4565b6040516101c79190611874565b60405180910390f35b6101ea60048036038101906101e5919061188f565b6106d3565b005b6102066004803603810190610201919061188f565b6106fc565b005b61021061077f565b60405161021d919061192e565b60405180910390f35b61022e6107a5565b60405161023b9190611874565b60405180910390f35b61025e600480360381019061025991906119ae565b6107c9565b005b61027a60048036038101906102759190611a3a565b6108a0565b6040516102879190611a89565b60405180910390f35b6102aa60048036038101906102a5919061188f565b6108cf565b6040516102b79190611648565b60405180910390f35b6102da60048036038101906102d59190611aa4565b610939565b005b6102e4610c8f565b6040516102f19190611874565b60405180910390f35b610314600480360381019061030f9190611aa4565b610c96565b60405161032191906117e7565b60405180910390f35b610344600480360381019061033f9190611838565b610cc7565b60405161035191906117e7565b60405180910390f35b610374600480360381019061036f919061188f565b610ceb565b005b610390600480360381019061038b9190611ae4565b610d14565b60405161039d9190611648565b60405180910390f35b60007f5a05180f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610419575061041882610e44565b5b9050919050565b60606000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156104ad57602002820191906000526020600020905b815481526020019060010190808311610499575b505050505090506000815167ffffffffffffffff8111156104d1576104d0611b11565b5b6040519080825280602002602001820160405280156104ff5781602001602082028036833780820191505090505b5090506000805b835181101561059657600084828151811061052457610523611b40565b5b602002602001015190506003600082815260200190815260200160002060009054906101000a900460ff16610582578084848151811061056757610566611b40565b5b602002602001018181525050828061057e90611b9e565b9350505b50808061058e90611b9e565b915050610506565b50819350505050919050565b600080600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561062e57602002820191906000526020600020905b81548152602001906001019080831161061a575b505050505090506000805b82518110156106a957600083828151811061065757610656611b40565b5b602002602001015190506003600082815260200190815260200160002060009054906101000a900460ff1661069557828061069190611b9e565b9350505b5080806106a190611b9e565b915050610639565b508092505050919050565b6000806000838152602001908152602001600020600101549050919050565b6106dc826106b4565b6106ed816106e8610ebe565b610ec6565b6106f78383610f63565b505050565b610704610ebe565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610771576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076890611c6a565b60405180910390fd5b61077b8282610f97565b5050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7fa076a07f65bcd51bcb15a0f01a65bc18f2d922acb81bcfd8af4caf5adb55709181565b6107fa7fa076a07f65bcd51bcb15a0f01a65bc18f2d922acb81bcfd8af4caf5adb5570916107f5610ebe565b610ec6565b60005b8282905081101561089a57600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083838381811061085a57610859611b40565b5b905060200201359080600181540180825580915050600190039060005260206000200160009091909190915055808061089290611b9e565b9150506107fd565b50505050565b60006108c78260016000868152602001908152602001600020610fcb90919063ffffffff16565b905092915050565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61096a7fa076a07f65bcd51bcb15a0f01a65bc18f2d922acb81bcfd8af4caf5adb557091610965610ebe565b610ec6565b610973826105a2565b8111156109b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ac90611cd6565b60405180910390fd5b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015610a4057602002820191906000526020600020905b815481526020019060010190808311610a2c575b505050505090506000808367ffffffffffffffff811115610a6457610a63611b11565b5b604051908082528060200260200182016040528015610a925781602001602082028036833780820191505090505b50905060005b8351811015610b54576000848281518110610ab657610ab5611b40565b5b602002602001015190506003600082815260200190815260200160002060009054906101000a900460ff16610b405780838581518110610af957610af8611b40565b5b60200260200101818152505060016003600083815260200190815260200160002060006101000a81548160ff0219169083151502179055508380610b3c90611b9e565b9450505b508080610b4c90611b9e565b915050610a98565b506000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166343508b0587876040518363ffffffff1660e01b8152600401610bb4929190611cf6565b6000604051808303816000875af1158015610bd3573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190610bfc9190611e54565b9050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f044ffb6dcd4ec715d7d57b6c88fa43e63f1e156efb2a93d1072314f910286e9d8484604051610c7f929190611e9d565b60405180910390a3505050505050565b6000801b81565b60026020528160005260406000208181548110610cb257600080fd5b90600052602060002001600091509150505481565b6000610ce460016000848152602001908152602001600020610fe5565b9050919050565b610cf4826106b4565b610d0581610d00610ebe565b610ec6565b610d0f8383610f97565b505050565b60036020528060005260406000206000915054906101000a900460ff1681565b610d3e82826108cf565b610e1057600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550610db5610ebe565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6000610e3c836000018373ffffffffffffffffffffffffffffffffffffffff1660001b610ffa565b905092915050565b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610eb75750610eb68261106a565b5b9050919050565b600033905090565b610ed082826108cf565b610f5f57610ef58173ffffffffffffffffffffffffffffffffffffffff1660146110d4565b610f038360001c60206110d4565b604051602001610f14929190611fe6565b6040516020818303038152906040526040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f569190612059565b60405180910390fd5b5050565b610f6d8282610d34565b610f928160016000858152602001908152602001600020610e1490919063ffffffff16565b505050565b610fa18282611310565b610fc681600160008581526020019081526020016000206113f190919063ffffffff16565b505050565b6000610fda8360000183611421565b60001c905092915050565b6000610ff38260000161144c565b9050919050565b6000611006838361145d565b61105f578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050611064565b600090505b92915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6060600060028360026110e7919061207b565b6110f191906120d5565b67ffffffffffffffff81111561110a57611109611b11565b5b6040519080825280601f01601f19166020018201604052801561113c5781602001600182028036833780820191505090505b5090507f30000000000000000000000000000000000000000000000000000000000000008160008151811061117457611173611b40565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f7800000000000000000000000000000000000000000000000000000000000000816001815181106111d8576111d7611b40565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060006001846002611218919061207b565b61122291906120d5565b90505b60018111156112c2577f3031323334353637383961626364656600000000000000000000000000000000600f86166010811061126457611263611b40565b5b1a60f81b82828151811061127b5761127a611b40565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c9450806112bb9061212b565b9050611225565b5060008414611306576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fd906121a1565b60405180910390fd5b8091505092915050565b61131a82826108cf565b156113ed57600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611392610ebe565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b6000611419836000018373ffffffffffffffffffffffffffffffffffffffff1660001b611480565b905092915050565b600082600001828154811061143957611438611b40565b5b9060005260206000200154905092915050565b600081600001805490509050919050565b600080836001016000848152602001908152602001600020541415905092915050565b600080836001016000848152602001908152602001600020549050600081146115885760006001826114b291906121c1565b90506000600186600001805490506114ca91906121c1565b90508181146115395760008660000182815481106114eb576114ea611b40565b5b906000526020600020015490508087600001848154811061150f5761150e611b40565b5b90600052602060002001819055508387600101600083815260200190815260200160002081905550505b8560000180548061154d5761154c6121f5565b5b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061158e565b60009150505b92915050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6115dd816115a8565b81146115e857600080fd5b50565b6000813590506115fa816115d4565b92915050565b6000602082840312156116165761161561159e565b5b6000611624848285016115eb565b91505092915050565b60008115159050919050565b6116428161162d565b82525050565b600060208201905061165d6000830184611639565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061168e82611663565b9050919050565b61169e81611683565b81146116a957600080fd5b50565b6000813590506116bb81611695565b92915050565b6000602082840312156116d7576116d661159e565b5b60006116e5848285016116ac565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6000819050919050565b61172d8161171a565b82525050565b600061173f8383611724565b60208301905092915050565b6000602082019050919050565b6000611763826116ee565b61176d81856116f9565b93506117788361170a565b8060005b838110156117a95781516117908882611733565b975061179b8361174b565b92505060018101905061177c565b5085935050505092915050565b600060208201905081810360008301526117d08184611758565b905092915050565b6117e18161171a565b82525050565b60006020820190506117fc60008301846117d8565b92915050565b6000819050919050565b61181581611802565b811461182057600080fd5b50565b6000813590506118328161180c565b92915050565b60006020828403121561184e5761184d61159e565b5b600061185c84828501611823565b91505092915050565b61186e81611802565b82525050565b60006020820190506118896000830184611865565b92915050565b600080604083850312156118a6576118a561159e565b5b60006118b485828601611823565b92505060206118c5858286016116ac565b9150509250929050565b6000819050919050565b60006118f46118ef6118ea84611663565b6118cf565b611663565b9050919050565b6000611906826118d9565b9050919050565b6000611918826118fb565b9050919050565b6119288161190d565b82525050565b6000602082019050611943600083018461191f565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261196e5761196d611949565b5b8235905067ffffffffffffffff81111561198b5761198a61194e565b5b6020830191508360208202830111156119a7576119a6611953565b5b9250929050565b6000806000604084860312156119c7576119c661159e565b5b60006119d5868287016116ac565b935050602084013567ffffffffffffffff8111156119f6576119f56115a3565b5b611a0286828701611958565b92509250509250925092565b611a178161171a565b8114611a2257600080fd5b50565b600081359050611a3481611a0e565b92915050565b60008060408385031215611a5157611a5061159e565b5b6000611a5f85828601611823565b9250506020611a7085828601611a25565b9150509250929050565b611a8381611683565b82525050565b6000602082019050611a9e6000830184611a7a565b92915050565b60008060408385031215611abb57611aba61159e565b5b6000611ac9858286016116ac565b9250506020611ada85828601611a25565b9150509250929050565b600060208284031215611afa57611af961159e565b5b6000611b0884828501611a25565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611ba98261171a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611bdc57611bdb611b6f565b5b600182019050919050565b600082825260208201905092915050565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b6000611c54602f83611be7565b9150611c5f82611bf8565b604082019050919050565b60006020820190508181036000830152611c8381611c47565b9050919050565b7f4d696e7461626c6520636f756e74206973206e6f7420656e6f75676800000000600082015250565b6000611cc0601c83611be7565b9150611ccb82611c8a565b602082019050919050565b60006020820190508181036000830152611cef81611cb3565b9050919050565b6000604082019050611d0b6000830185611a7a565b611d1860208301846117d8565b9392505050565b6000601f19601f8301169050919050565b611d3982611d1f565b810181811067ffffffffffffffff82111715611d5857611d57611b11565b5b80604052505050565b6000611d6b611594565b9050611d778282611d30565b919050565b600067ffffffffffffffff821115611d9757611d96611b11565b5b602082029050602081019050919050565b600081519050611db781611a0e565b92915050565b6000611dd0611dcb84611d7c565b611d61565b90508083825260208201905060208402830185811115611df357611df2611953565b5b835b81811015611e1c5780611e088882611da8565b845260208401935050602081019050611df5565b5050509392505050565b600082601f830112611e3b57611e3a611949565b5b8151611e4b848260208601611dbd565b91505092915050565b600060208284031215611e6a57611e6961159e565b5b600082015167ffffffffffffffff811115611e8857611e876115a3565b5b611e9484828501611e26565b91505092915050565b60006040820190508181036000830152611eb78185611758565b90508181036020830152611ecb8184611758565b90509392505050565b600081905092915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b6000611f15601783611ed4565b9150611f2082611edf565b601782019050919050565b600081519050919050565b60005b83811015611f54578082015181840152602081019050611f39565b83811115611f63576000848401525b50505050565b6000611f7482611f2b565b611f7e8185611ed4565b9350611f8e818560208601611f36565b80840191505092915050565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b6000611fd0601183611ed4565b9150611fdb82611f9a565b601182019050919050565b6000611ff182611f08565b9150611ffd8285611f69565b915061200882611fc3565b91506120148284611f69565b91508190509392505050565b600061202b82611f2b565b6120358185611be7565b9350612045818560208601611f36565b61204e81611d1f565b840191505092915050565b600060208201905081810360008301526120738184612020565b905092915050565b60006120868261171a565b91506120918361171a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156120ca576120c9611b6f565b5b828202905092915050565b60006120e08261171a565b91506120eb8361171a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156121205761211f611b6f565b5b828201905092915050565b60006121368261171a565b9150600082141561214a57612149611b6f565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b600061218b602083611be7565b915061219682612155565b602082019050919050565b600060208201905081810360008301526121ba8161217e565b9050919050565b60006121cc8261171a565b91506121d78361171a565b9250828210156121ea576121e9611b6f565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220152fef5f444e489125fdb279f62039ba8fd2b719b3ba95961009ac07eeefa75864736f6c634300080a0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061010b5760003560e01c806384be00e4116100a2578063a217fddf11610071578063a217fddf146102dc578063ad0f93ad146102fa578063ca15c8731461032a578063d547741f1461035a578063ffd68f15146103765761010b565b806384be00e4146102445780639010d07c1461026057806391d14854146102905780639533a384146102c05761010b565b80632f2ff15d116100de5780632f2ff15d146101d057806336568abe146101ec57806347ccca021461020857806360a4b76a146102265761010b565b806301ffc9a714610110578063032221ad146101405780630431f20514610170578063248a9ca3146101a0575b600080fd5b61012a60048036038101906101259190611600565b6103a6565b6040516101379190611648565b60405180910390f35b61015a600480360381019061015591906116c1565b610420565b60405161016791906117b6565b60405180910390f35b61018a600480360381019061018591906116c1565b6105a2565b60405161019791906117e7565b60405180910390f35b6101ba60048036038101906101b59190611838565b6106b4565b6040516101c79190611874565b60405180910390f35b6101ea60048036038101906101e5919061188f565b6106d3565b005b6102066004803603810190610201919061188f565b6106fc565b005b61021061077f565b60405161021d919061192e565b60405180910390f35b61022e6107a5565b60405161023b9190611874565b60405180910390f35b61025e600480360381019061025991906119ae565b6107c9565b005b61027a60048036038101906102759190611a3a565b6108a0565b6040516102879190611a89565b60405180910390f35b6102aa60048036038101906102a5919061188f565b6108cf565b6040516102b79190611648565b60405180910390f35b6102da60048036038101906102d59190611aa4565b610939565b005b6102e4610c8f565b6040516102f19190611874565b60405180910390f35b610314600480360381019061030f9190611aa4565b610c96565b60405161032191906117e7565b60405180910390f35b610344600480360381019061033f9190611838565b610cc7565b60405161035191906117e7565b60405180910390f35b610374600480360381019061036f919061188f565b610ceb565b005b610390600480360381019061038b9190611ae4565b610d14565b60405161039d9190611648565b60405180910390f35b60007f5a05180f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610419575061041882610e44565b5b9050919050565b60606000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156104ad57602002820191906000526020600020905b815481526020019060010190808311610499575b505050505090506000815167ffffffffffffffff8111156104d1576104d0611b11565b5b6040519080825280602002602001820160405280156104ff5781602001602082028036833780820191505090505b5090506000805b835181101561059657600084828151811061052457610523611b40565b5b602002602001015190506003600082815260200190815260200160002060009054906101000a900460ff16610582578084848151811061056757610566611b40565b5b602002602001018181525050828061057e90611b9e565b9350505b50808061058e90611b9e565b915050610506565b50819350505050919050565b600080600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561062e57602002820191906000526020600020905b81548152602001906001019080831161061a575b505050505090506000805b82518110156106a957600083828151811061065757610656611b40565b5b602002602001015190506003600082815260200190815260200160002060009054906101000a900460ff1661069557828061069190611b9e565b9350505b5080806106a190611b9e565b915050610639565b508092505050919050565b6000806000838152602001908152602001600020600101549050919050565b6106dc826106b4565b6106ed816106e8610ebe565b610ec6565b6106f78383610f63565b505050565b610704610ebe565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610771576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076890611c6a565b60405180910390fd5b61077b8282610f97565b5050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7fa076a07f65bcd51bcb15a0f01a65bc18f2d922acb81bcfd8af4caf5adb55709181565b6107fa7fa076a07f65bcd51bcb15a0f01a65bc18f2d922acb81bcfd8af4caf5adb5570916107f5610ebe565b610ec6565b60005b8282905081101561089a57600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083838381811061085a57610859611b40565b5b905060200201359080600181540180825580915050600190039060005260206000200160009091909190915055808061089290611b9e565b9150506107fd565b50505050565b60006108c78260016000868152602001908152602001600020610fcb90919063ffffffff16565b905092915050565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61096a7fa076a07f65bcd51bcb15a0f01a65bc18f2d922acb81bcfd8af4caf5adb557091610965610ebe565b610ec6565b610973826105a2565b8111156109b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ac90611cd6565b60405180910390fd5b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015610a4057602002820191906000526020600020905b815481526020019060010190808311610a2c575b505050505090506000808367ffffffffffffffff811115610a6457610a63611b11565b5b604051908082528060200260200182016040528015610a925781602001602082028036833780820191505090505b50905060005b8351811015610b54576000848281518110610ab657610ab5611b40565b5b602002602001015190506003600082815260200190815260200160002060009054906101000a900460ff16610b405780838581518110610af957610af8611b40565b5b60200260200101818152505060016003600083815260200190815260200160002060006101000a81548160ff0219169083151502179055508380610b3c90611b9e565b9450505b508080610b4c90611b9e565b915050610a98565b506000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166343508b0587876040518363ffffffff1660e01b8152600401610bb4929190611cf6565b6000604051808303816000875af1158015610bd3573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190610bfc9190611e54565b9050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f044ffb6dcd4ec715d7d57b6c88fa43e63f1e156efb2a93d1072314f910286e9d8484604051610c7f929190611e9d565b60405180910390a3505050505050565b6000801b81565b60026020528160005260406000208181548110610cb257600080fd5b90600052602060002001600091509150505481565b6000610ce460016000848152602001908152602001600020610fe5565b9050919050565b610cf4826106b4565b610d0581610d00610ebe565b610ec6565b610d0f8383610f97565b505050565b60036020528060005260406000206000915054906101000a900460ff1681565b610d3e82826108cf565b610e1057600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550610db5610ebe565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6000610e3c836000018373ffffffffffffffffffffffffffffffffffffffff1660001b610ffa565b905092915050565b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610eb75750610eb68261106a565b5b9050919050565b600033905090565b610ed082826108cf565b610f5f57610ef58173ffffffffffffffffffffffffffffffffffffffff1660146110d4565b610f038360001c60206110d4565b604051602001610f14929190611fe6565b6040516020818303038152906040526040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f569190612059565b60405180910390fd5b5050565b610f6d8282610d34565b610f928160016000858152602001908152602001600020610e1490919063ffffffff16565b505050565b610fa18282611310565b610fc681600160008581526020019081526020016000206113f190919063ffffffff16565b505050565b6000610fda8360000183611421565b60001c905092915050565b6000610ff38260000161144c565b9050919050565b6000611006838361145d565b61105f578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050611064565b600090505b92915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6060600060028360026110e7919061207b565b6110f191906120d5565b67ffffffffffffffff81111561110a57611109611b11565b5b6040519080825280601f01601f19166020018201604052801561113c5781602001600182028036833780820191505090505b5090507f30000000000000000000000000000000000000000000000000000000000000008160008151811061117457611173611b40565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f7800000000000000000000000000000000000000000000000000000000000000816001815181106111d8576111d7611b40565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060006001846002611218919061207b565b61122291906120d5565b90505b60018111156112c2577f3031323334353637383961626364656600000000000000000000000000000000600f86166010811061126457611263611b40565b5b1a60f81b82828151811061127b5761127a611b40565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c9450806112bb9061212b565b9050611225565b5060008414611306576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fd906121a1565b60405180910390fd5b8091505092915050565b61131a82826108cf565b156113ed57600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611392610ebe565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b6000611419836000018373ffffffffffffffffffffffffffffffffffffffff1660001b611480565b905092915050565b600082600001828154811061143957611438611b40565b5b9060005260206000200154905092915050565b600081600001805490509050919050565b600080836001016000848152602001908152602001600020541415905092915050565b600080836001016000848152602001908152602001600020549050600081146115885760006001826114b291906121c1565b90506000600186600001805490506114ca91906121c1565b90508181146115395760008660000182815481106114eb576114ea611b40565b5b906000526020600020015490508087600001848154811061150f5761150e611b40565b5b90600052602060002001819055508387600101600083815260200190815260200160002081905550505b8560000180548061154d5761154c6121f5565b5b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061158e565b60009150505b92915050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6115dd816115a8565b81146115e857600080fd5b50565b6000813590506115fa816115d4565b92915050565b6000602082840312156116165761161561159e565b5b6000611624848285016115eb565b91505092915050565b60008115159050919050565b6116428161162d565b82525050565b600060208201905061165d6000830184611639565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061168e82611663565b9050919050565b61169e81611683565b81146116a957600080fd5b50565b6000813590506116bb81611695565b92915050565b6000602082840312156116d7576116d661159e565b5b60006116e5848285016116ac565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6000819050919050565b61172d8161171a565b82525050565b600061173f8383611724565b60208301905092915050565b6000602082019050919050565b6000611763826116ee565b61176d81856116f9565b93506117788361170a565b8060005b838110156117a95781516117908882611733565b975061179b8361174b565b92505060018101905061177c565b5085935050505092915050565b600060208201905081810360008301526117d08184611758565b905092915050565b6117e18161171a565b82525050565b60006020820190506117fc60008301846117d8565b92915050565b6000819050919050565b61181581611802565b811461182057600080fd5b50565b6000813590506118328161180c565b92915050565b60006020828403121561184e5761184d61159e565b5b600061185c84828501611823565b91505092915050565b61186e81611802565b82525050565b60006020820190506118896000830184611865565b92915050565b600080604083850312156118a6576118a561159e565b5b60006118b485828601611823565b92505060206118c5858286016116ac565b9150509250929050565b6000819050919050565b60006118f46118ef6118ea84611663565b6118cf565b611663565b9050919050565b6000611906826118d9565b9050919050565b6000611918826118fb565b9050919050565b6119288161190d565b82525050565b6000602082019050611943600083018461191f565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261196e5761196d611949565b5b8235905067ffffffffffffffff81111561198b5761198a61194e565b5b6020830191508360208202830111156119a7576119a6611953565b5b9250929050565b6000806000604084860312156119c7576119c661159e565b5b60006119d5868287016116ac565b935050602084013567ffffffffffffffff8111156119f6576119f56115a3565b5b611a0286828701611958565b92509250509250925092565b611a178161171a565b8114611a2257600080fd5b50565b600081359050611a3481611a0e565b92915050565b60008060408385031215611a5157611a5061159e565b5b6000611a5f85828601611823565b9250506020611a7085828601611a25565b9150509250929050565b611a8381611683565b82525050565b6000602082019050611a9e6000830184611a7a565b92915050565b60008060408385031215611abb57611aba61159e565b5b6000611ac9858286016116ac565b9250506020611ada85828601611a25565b9150509250929050565b600060208284031215611afa57611af961159e565b5b6000611b0884828501611a25565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611ba98261171a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611bdc57611bdb611b6f565b5b600182019050919050565b600082825260208201905092915050565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b6000611c54602f83611be7565b9150611c5f82611bf8565b604082019050919050565b60006020820190508181036000830152611c8381611c47565b9050919050565b7f4d696e7461626c6520636f756e74206973206e6f7420656e6f75676800000000600082015250565b6000611cc0601c83611be7565b9150611ccb82611c8a565b602082019050919050565b60006020820190508181036000830152611cef81611cb3565b9050919050565b6000604082019050611d0b6000830185611a7a565b611d1860208301846117d8565b9392505050565b6000601f19601f8301169050919050565b611d3982611d1f565b810181811067ffffffffffffffff82111715611d5857611d57611b11565b5b80604052505050565b6000611d6b611594565b9050611d778282611d30565b919050565b600067ffffffffffffffff821115611d9757611d96611b11565b5b602082029050602081019050919050565b600081519050611db781611a0e565b92915050565b6000611dd0611dcb84611d7c565b611d61565b90508083825260208201905060208402830185811115611df357611df2611953565b5b835b81811015611e1c5780611e088882611da8565b845260208401935050602081019050611df5565b5050509392505050565b600082601f830112611e3b57611e3a611949565b5b8151611e4b848260208601611dbd565b91505092915050565b600060208284031215611e6a57611e6961159e565b5b600082015167ffffffffffffffff811115611e8857611e876115a3565b5b611e9484828501611e26565b91505092915050565b60006040820190508181036000830152611eb78185611758565b90508181036020830152611ecb8184611758565b90509392505050565b600081905092915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b6000611f15601783611ed4565b9150611f2082611edf565b601782019050919050565b600081519050919050565b60005b83811015611f54578082015181840152602081019050611f39565b83811115611f63576000848401525b50505050565b6000611f7482611f2b565b611f7e8185611ed4565b9350611f8e818560208601611f36565b80840191505092915050565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b6000611fd0601183611ed4565b9150611fdb82611f9a565b601182019050919050565b6000611ff182611f08565b9150611ffd8285611f69565b915061200882611fc3565b91506120148284611f69565b91508190509392505050565b600061202b82611f2b565b6120358185611be7565b9350612045818560208601611f36565b61204e81611d1f565b840191505092915050565b600060208201905081810360008301526120738184612020565b905092915050565b60006120868261171a565b91506120918361171a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156120ca576120c9611b6f565b5b828202905092915050565b60006120e08261171a565b91506120eb8361171a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156121205761211f611b6f565b5b828201905092915050565b60006121368261171a565b9150600082141561214a57612149611b6f565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b600061218b602083611be7565b915061219682612155565b602082019050919050565b600060208201905081810360008301526121ba8161217e565b9050919050565b60006121cc8261171a565b91506121d78361171a565b9250828210156121ea576121e9611b6f565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220152fef5f444e489125fdb279f62039ba8fd2b719b3ba95961009ac07eeefa75864736f6c634300080a0033", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_nftTarget\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"_manageAddress\",\"type\":\"address[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"nft\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"nftSIds\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"nftTIds\",\"type\":\"uint256[]\"}],\"name\":\"Minted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MANAGE_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_user\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"_nftIds\",\"type\":\"uint256[]\"}],\"name\":\"addNFTData\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_user\",\"type\":\"address\"}],\"name\":\"getMintableCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_user\",\"type\":\"address\"}],\"name\":\"getMintableNftIds\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"getRoleMember\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleMemberCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_user\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"count\",\"type\":\"uint256\"}],\"name\":\"mintToUser\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nft\",\"outputs\":[{\"internalType\":\"contract IBEERC721\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"nftMinted\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"ownerToNFTs\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"addNFTData(address,uint256[])\":{\"details\":\"The addNFTData function adds an array of NFT IDs to the list of NFT IDs owned by a user. mintToUser method would check if target user had permission to mint NFTs. Only functions called by an address with the MANAGE_ROLE permission can access this function. The function takes in the address of the user and an array of NFT IDs. It then loops through the array of NFT IDs, and adds each one to the end of the array of NFTs owned by that user to update their ownership data.\",\"params\":{\"_nftIds\":\"- An array of NFT IDs being added to the user's NFT data\",\"_user\":\"- The address of the user being updated with new NFT data\"}},\"constructor\":{\"details\":\"Contract constructor. Initializes the contract with the specified addresses and sets the admin and management roles. Parameters: - _nftTarget: The address of NFT that will be minted by this contract. Need MINTER_ROLE - _nftSource: The address of the source NFT that will check if user has mint permission. - _manageAddress: The address that will have the MANAGE_ROLE assigned.\"},\"getMintableCount(address)\":{\"details\":\"The getMintableCount function gets the number of NFTs owned by a user that have not yet been minted. This is a read-only function, meaning it doesn't modify the state of the blockchain. It takes in the address of the user whose mintable count is being determined, and returns the number of NFTs owned by the user that have not yet been minted.\",\"params\":{\"_user\":\"- The address of the user whose mintable count is being determined\"},\"returns\":{\"_0\":\"count - The number of NFTs owned by the user that have not yet been minted\"}},\"getMintableNftIds(address)\":{\"details\":\"The getMintableNftIds function gets an array of NFT IDs owned by a user that have not yet been minted. This is a read-only function, meaning it doesn't modify the state of the blockchain. It takes in the address of the user whose mintable NFT IDs are being determined, and returns an array of the NFT IDs owned by the user that have not yet been minted.\",\"params\":{\"_user\":\"- The address of the user whose mintable NFT IDs are being determined\"},\"returns\":{\"_0\":\"mintableNftIds - An array of the NFT IDs owned by the user that have not yet been minted\"}},\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}.\"},\"getRoleMember(bytes32,uint256)\":{\"details\":\"Returns one of the accounts that have `role`. `index` must be a value between 0 and {getRoleMemberCount}, non-inclusive. Role bearers are not sorted in any particular way, and their ordering may change at any point. WARNING: When using {getRoleMember} and {getRoleMemberCount}, make sure you perform all queries on the same block. See the following https://forum.openzeppelin.com/t/iterating-over-elements-on-enumerableset-in-openzeppelin-contracts/2296[forum post] for more information.\"},\"getRoleMemberCount(bytes32)\":{\"details\":\"Returns the number of accounts that have `role`. Can be used together with {getRoleMember} to enumerate all bearers of a role.\"},\"grantRole(bytes32,address)\":{\"details\":\"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role.\"},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"mintToUser(address,uint256)\":{\"details\":\"The mintToUser function mints NFTs to a given user. Only functions called by an address with the MANAGE_ROLE permission can access this function. The function takes an array of nftIds and checks that there are enough mintable NFTs for the user. It then loops through the user's owned NFTs, checking if each is mintable, and if so, adds it to a list to be minted. Then it emits the Minted event with details of the operation.\",\"params\":{\"_user\":\"- The address of the user receiving the NFTs\"}},\"renounceRole(bytes32,address)\":{\"details\":\"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `account`.\"},\"revokeRole(bytes32,address)\":{\"details\":\"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role.\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"project:/contracts/logic/NftDistributor.sol\":\"NftDistributor\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/AccessControl.sol\":{\"keccak256\":\"0x4a1a0ba12bf1a33f10d9fe226278cf59675c0b929d29e4da99658a079b27fb84\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bda1319db846d6d6f92d8a57a9bdee8bde1dc39aa7546165791692c24dd6f30a\",\"dweb:/ipfs/Qma5oZ7DmbdAjd8mpiW7mx896PDtwsQtCQ2hj9Upf7b7JK\"]},\"@openzeppelin/contracts/access/AccessControlEnumerable.sol\":{\"keccak256\":\"0x13f5e15f2a0650c0b6aaee2ef19e89eaf4870d6e79662d572a393334c1397247\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7ee05f28f549a5d6515e152580716b87636ed4bfab9812499a6e3803df88288b\",\"dweb:/ipfs/QmeEnhdwY1t5Y3YU5a4ffzgXuToydH2PNdNxV9W7dEPRQJ\"]},\"@openzeppelin/contracts/access/IAccessControl.sol\":{\"keccak256\":\"0x59ce320a585d7e1f163cd70390a0ef2ff9cec832e2aa544293a00692465a7a57\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bb2c137c343ef0c4c7ce7b18c1d108afdc9d315a04e48307288d2d05adcbde3a\",\"dweb:/ipfs/QmUxhrAQM3MM3FF5j7AtcXLXguWCJBHJ14BRdVtuoQc8Fh\"]},\"@openzeppelin/contracts/access/IAccessControlEnumerable.sol\":{\"keccak256\":\"0xba4459ab871dfa300f5212c6c30178b63898c03533a1ede28436f11546626676\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3dcc7b09bfa6e18aab262ca372f4a9b1fc82e294b430706a4e1378cf58e6a276\",\"dweb:/ipfs/QmT8oSAcesdctR15HMLhr2a1HRpXymxdjTfdtfTYJcj2N2\"]},\"@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0x516a22876c1fab47f49b1bc22b4614491cd05338af8bd2e7b382da090a079990\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a439187f7126d31add4557f82d8aed6be0162007cd7182c48fd934dbab8f3849\",\"dweb:/ipfs/QmRPLguRFvrRJS7r6F1bcLvsx6q1VrgjEpZafyeL8D7xZh\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]},\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x32c202bd28995dd20c4347b7c6467a6d3241c74c8ad3edcbb610cd9205916c45\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8179c356adb19e70d6b31a1eedc8c5c7f0c00e669e2540f4099e3844c6074d30\",\"dweb:/ipfs/QmWFbivarEobbqhS1go64ootVuHfVohBseerYy9FTEd1W2\"]},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xd10975de010d89fd1c78dc5e8a9a7e7f496198085c151648f20cba166b32582b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fb0048dee081f6fffa5f74afc3fb328483c2a30504e94a0ddd2a5114d731ec4d\",\"dweb:/ipfs/QmZptt1nmYoA5SgjwnSgWqgUSDgm4q52Yos3xhnMv3MV43\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f\",\"dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy\"]},\"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":{\"keccak256\":\"0x9772845c886f87a3aab315f8d6b68aa599027c20f441b131cd4afaf65b588900\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ad2f29a9c17a4f746416c9e254e17671f43c409dbfa6e4d7d76c3e4a83212d31\",\"dweb:/ipfs/QmTqU65L6iu6yqmXKzcNLPioR8etzKPWycpDJCm17ifVdS\"]},\"project:/contracts/interfaces/IBEERC721.sol\":{\"keccak256\":\"0x20027b750379b3699f109326d0e2d75794fd7af357dd7baceff59b7f26ccc4ae\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://37b2a85036c0a234c5347794e832643b3db4550cc86f7062c111cd30de93d656\",\"dweb:/ipfs/QmPMszafR7MJER2PgUvktY8V3krBLT2u7zyB4PQCfBCdY5\"]},\"project:/contracts/logic/NftDistributor.sol\":{\"keccak256\":\"0x49a702365de385f61e6931c1c0666e93162712b97e1451c4a73797016fc7a69b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://989a9f11761f055a145ec3048cbdb3544dbbd9ab56eb464cb700f8af0cf39754\",\"dweb:/ipfs/QmRCLFFFzo3jHcm6uixLwZsHrdyDs96Tm6cjABxWUhch28\"]}},\"version\":1}", + "bytecode": "0x60806040523480156200001157600080fd5b50604051620029e3380380620029e3833981810160405281019062000037919062000650565b6200006c7fa076a07f65bcd51bcb15a0f01a65bc18f2d922acb81bcfd8af4caf5adb5570916000801b6200014a60201b60201c565b620000906000801b62000084620001ad60201b60201c565b620001b560201b60201c565b60005b81518110156200010057620000ec7fa076a07f65bcd51bcb15a0f01a65bc18f2d922acb81bcfd8af4caf5adb557091838381518110620000d857620000d7620006b6565b5b6020026020010151620001b560201b60201c565b80620000f8906200071e565b905062000093565b5081600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050506200076c565b60006200015d83620001cb60201b60201c565b905081600080858152602001908152602001600020600101819055508181847fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff60405160405180910390a4505050565b600033905090565b620001c78282620001ea60201b60201c565b5050565b6000806000838152602001908152602001600020600101549050919050565b6200020182826200023260201b62000d411760201c565b6200022d81600160008581526020019081526020016000206200032360201b62000e211790919060201c565b505050565b6200024482826200035b60201b60201c565b6200031f57600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620002c4620001ad60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b600062000353836000018373ffffffffffffffffffffffffffffffffffffffff1660001b620003c560201b60201c565b905092915050565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000620003d983836200043f60201b60201c565b6200043457826000018290806001815401808255809150506001900390600052602060002001600090919091909150558260000180549050836001016000848152602001908152602001600020819055506001905062000439565b600090505b92915050565b600080836001016000848152602001908152602001600020541415905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620004a38262000476565b9050919050565b620004b58162000496565b8114620004c157600080fd5b50565b600081519050620004d581620004aa565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200052b82620004e0565b810181811067ffffffffffffffff821117156200054d576200054c620004f1565b5b80604052505050565b60006200056262000462565b905062000570828262000520565b919050565b600067ffffffffffffffff821115620005935762000592620004f1565b5b602082029050602081019050919050565b600080fd5b6000620005c0620005ba8462000575565b62000556565b90508083825260208201905060208402830185811115620005e657620005e5620005a4565b5b835b81811015620006135780620005fe8882620004c4565b845260208401935050602081019050620005e8565b5050509392505050565b600082601f830112620006355762000634620004db565b5b815162000647848260208601620005a9565b91505092915050565b600080604083850312156200066a57620006696200046c565b5b60006200067a85828601620004c4565b925050602083015167ffffffffffffffff8111156200069e576200069d62000471565b5b620006ac858286016200061d565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000819050919050565b60006200072b8262000714565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415620007615762000760620006e5565b5b600182019050919050565b612267806200077c6000396000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c806384be00e4116100a2578063a217fddf11610071578063a217fddf146102dc578063ad0f93ad146102fa578063ca15c8731461032a578063d547741f1461035a578063ffd68f15146103765761010b565b806384be00e4146102445780639010d07c1461026057806391d14854146102905780639533a384146102c05761010b565b80632f2ff15d116100de5780632f2ff15d146101d057806336568abe146101ec57806347ccca021461020857806360a4b76a146102265761010b565b806301ffc9a714610110578063032221ad146101405780630431f20514610170578063248a9ca3146101a0575b600080fd5b61012a6004803603810190610125919061160d565b6103a6565b6040516101379190611655565b60405180910390f35b61015a600480360381019061015591906116ce565b610420565b60405161016791906117c3565b60405180910390f35b61018a600480360381019061018591906116ce565b6105a2565b60405161019791906117f4565b60405180910390f35b6101ba60048036038101906101b59190611845565b6106b4565b6040516101c79190611881565b60405180910390f35b6101ea60048036038101906101e5919061189c565b6106d3565b005b6102066004803603810190610201919061189c565b6106fc565b005b61021061077f565b60405161021d919061193b565b60405180910390f35b61022e6107a5565b60405161023b9190611881565b60405180910390f35b61025e600480360381019061025991906119bb565b6107c9565b005b61027a60048036038101906102759190611a47565b6108a0565b6040516102879190611a96565b60405180910390f35b6102aa60048036038101906102a5919061189c565b6108cf565b6040516102b79190611655565b60405180910390f35b6102da60048036038101906102d59190611ab1565b610939565b005b6102e4610c9c565b6040516102f19190611881565b60405180910390f35b610314600480360381019061030f9190611ab1565b610ca3565b60405161032191906117f4565b60405180910390f35b610344600480360381019061033f9190611845565b610cd4565b60405161035191906117f4565b60405180910390f35b610374600480360381019061036f919061189c565b610cf8565b005b610390600480360381019061038b9190611af1565b610d21565b60405161039d9190611655565b60405180910390f35b60007f5a05180f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610419575061041882610e51565b5b9050919050565b60606000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156104ad57602002820191906000526020600020905b815481526020019060010190808311610499575b505050505090506000815167ffffffffffffffff8111156104d1576104d0611b1e565b5b6040519080825280602002602001820160405280156104ff5781602001602082028036833780820191505090505b5090506000805b835181101561059657600084828151811061052457610523611b4d565b5b602002602001015190506003600082815260200190815260200160002060009054906101000a900460ff16610582578084848151811061056757610566611b4d565b5b602002602001018181525050828061057e90611bab565b9350505b50808061058e90611bab565b915050610506565b50819350505050919050565b600080600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561062e57602002820191906000526020600020905b81548152602001906001019080831161061a575b505050505090506000805b82518110156106a957600083828151811061065757610656611b4d565b5b602002602001015190506003600082815260200190815260200160002060009054906101000a900460ff1661069557828061069190611bab565b9350505b5080806106a190611bab565b915050610639565b508092505050919050565b6000806000838152602001908152602001600020600101549050919050565b6106dc826106b4565b6106ed816106e8610ecb565b610ed3565b6106f78383610f70565b505050565b610704610ecb565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610771576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076890611c77565b60405180910390fd5b61077b8282610fa4565b5050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7fa076a07f65bcd51bcb15a0f01a65bc18f2d922acb81bcfd8af4caf5adb55709181565b6107fa7fa076a07f65bcd51bcb15a0f01a65bc18f2d922acb81bcfd8af4caf5adb5570916107f5610ecb565b610ed3565b60005b8282905081101561089a57600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083838381811061085a57610859611b4d565b5b905060200201359080600181540180825580915050600190039060005260206000200160009091909190915055808061089290611bab565b9150506107fd565b50505050565b60006108c78260016000868152602001908152602001600020610fd890919063ffffffff16565b905092915050565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61096a7fa076a07f65bcd51bcb15a0f01a65bc18f2d922acb81bcfd8af4caf5adb557091610965610ecb565b610ed3565b610973826105a2565b8111156109b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ac90611ce3565b60405180910390fd5b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015610a4057602002820191906000526020600020905b815481526020019060010190808311610a2c575b505050505090506000808367ffffffffffffffff811115610a6457610a63611b1e565b5b604051908082528060200260200182016040528015610a925781602001602082028036833780820191505090505b50905060005b8351811015610b61576000848281518110610ab657610ab5611b4d565b5b602002602001015190506003600082815260200190815260200160002060009054906101000a900460ff16158015610aed57508584105b15610b4d5780838581518110610b0657610b05611b4d565b5b60200260200101818152505060016003600083815260200190815260200160002060006101000a81548160ff0219169083151502179055508380610b4990611bab565b9450505b508080610b5990611bab565b915050610a98565b506000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166343508b0587876040518363ffffffff1660e01b8152600401610bc1929190611d03565b6000604051808303816000875af1158015610be0573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190610c099190611e61565b9050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f044ffb6dcd4ec715d7d57b6c88fa43e63f1e156efb2a93d1072314f910286e9d8484604051610c8c929190611eaa565b60405180910390a3505050505050565b6000801b81565b60026020528160005260406000208181548110610cbf57600080fd5b90600052602060002001600091509150505481565b6000610cf160016000848152602001908152602001600020610ff2565b9050919050565b610d01826106b4565b610d1281610d0d610ecb565b610ed3565b610d1c8383610fa4565b505050565b60036020528060005260406000206000915054906101000a900460ff1681565b610d4b82826108cf565b610e1d57600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550610dc2610ecb565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6000610e49836000018373ffffffffffffffffffffffffffffffffffffffff1660001b611007565b905092915050565b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610ec45750610ec382611077565b5b9050919050565b600033905090565b610edd82826108cf565b610f6c57610f028173ffffffffffffffffffffffffffffffffffffffff1660146110e1565b610f108360001c60206110e1565b604051602001610f21929190611ff3565b6040516020818303038152906040526040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f639190612066565b60405180910390fd5b5050565b610f7a8282610d41565b610f9f8160016000858152602001908152602001600020610e2190919063ffffffff16565b505050565b610fae828261131d565b610fd381600160008581526020019081526020016000206113fe90919063ffffffff16565b505050565b6000610fe7836000018361142e565b60001c905092915050565b600061100082600001611459565b9050919050565b6000611013838361146a565b61106c578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050611071565b600090505b92915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6060600060028360026110f49190612088565b6110fe91906120e2565b67ffffffffffffffff81111561111757611116611b1e565b5b6040519080825280601f01601f1916602001820160405280156111495781602001600182028036833780820191505090505b5090507f30000000000000000000000000000000000000000000000000000000000000008160008151811061118157611180611b4d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f7800000000000000000000000000000000000000000000000000000000000000816001815181106111e5576111e4611b4d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600060018460026112259190612088565b61122f91906120e2565b90505b60018111156112cf577f3031323334353637383961626364656600000000000000000000000000000000600f86166010811061127157611270611b4d565b5b1a60f81b82828151811061128857611287611b4d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c9450806112c890612138565b9050611232565b5060008414611313576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130a906121ae565b60405180910390fd5b8091505092915050565b61132782826108cf565b156113fa57600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061139f610ecb565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b6000611426836000018373ffffffffffffffffffffffffffffffffffffffff1660001b61148d565b905092915050565b600082600001828154811061144657611445611b4d565b5b9060005260206000200154905092915050565b600081600001805490509050919050565b600080836001016000848152602001908152602001600020541415905092915050565b600080836001016000848152602001908152602001600020549050600081146115955760006001826114bf91906121ce565b90506000600186600001805490506114d791906121ce565b90508181146115465760008660000182815481106114f8576114f7611b4d565b5b906000526020600020015490508087600001848154811061151c5761151b611b4d565b5b90600052602060002001819055508387600101600083815260200190815260200160002081905550505b8560000180548061155a57611559612202565b5b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061159b565b60009150505b92915050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6115ea816115b5565b81146115f557600080fd5b50565b600081359050611607816115e1565b92915050565b600060208284031215611623576116226115ab565b5b6000611631848285016115f8565b91505092915050565b60008115159050919050565b61164f8161163a565b82525050565b600060208201905061166a6000830184611646565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061169b82611670565b9050919050565b6116ab81611690565b81146116b657600080fd5b50565b6000813590506116c8816116a2565b92915050565b6000602082840312156116e4576116e36115ab565b5b60006116f2848285016116b9565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6000819050919050565b61173a81611727565b82525050565b600061174c8383611731565b60208301905092915050565b6000602082019050919050565b6000611770826116fb565b61177a8185611706565b935061178583611717565b8060005b838110156117b657815161179d8882611740565b97506117a883611758565b925050600181019050611789565b5085935050505092915050565b600060208201905081810360008301526117dd8184611765565b905092915050565b6117ee81611727565b82525050565b600060208201905061180960008301846117e5565b92915050565b6000819050919050565b6118228161180f565b811461182d57600080fd5b50565b60008135905061183f81611819565b92915050565b60006020828403121561185b5761185a6115ab565b5b600061186984828501611830565b91505092915050565b61187b8161180f565b82525050565b60006020820190506118966000830184611872565b92915050565b600080604083850312156118b3576118b26115ab565b5b60006118c185828601611830565b92505060206118d2858286016116b9565b9150509250929050565b6000819050919050565b60006119016118fc6118f784611670565b6118dc565b611670565b9050919050565b6000611913826118e6565b9050919050565b600061192582611908565b9050919050565b6119358161191a565b82525050565b6000602082019050611950600083018461192c565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261197b5761197a611956565b5b8235905067ffffffffffffffff8111156119985761199761195b565b5b6020830191508360208202830111156119b4576119b3611960565b5b9250929050565b6000806000604084860312156119d4576119d36115ab565b5b60006119e2868287016116b9565b935050602084013567ffffffffffffffff811115611a0357611a026115b0565b5b611a0f86828701611965565b92509250509250925092565b611a2481611727565b8114611a2f57600080fd5b50565b600081359050611a4181611a1b565b92915050565b60008060408385031215611a5e57611a5d6115ab565b5b6000611a6c85828601611830565b9250506020611a7d85828601611a32565b9150509250929050565b611a9081611690565b82525050565b6000602082019050611aab6000830184611a87565b92915050565b60008060408385031215611ac857611ac76115ab565b5b6000611ad6858286016116b9565b9250506020611ae785828601611a32565b9150509250929050565b600060208284031215611b0757611b066115ab565b5b6000611b1584828501611a32565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611bb682611727565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611be957611be8611b7c565b5b600182019050919050565b600082825260208201905092915050565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b6000611c61602f83611bf4565b9150611c6c82611c05565b604082019050919050565b60006020820190508181036000830152611c9081611c54565b9050919050565b7f4d696e7461626c6520636f756e74206973206e6f7420656e6f75676800000000600082015250565b6000611ccd601c83611bf4565b9150611cd882611c97565b602082019050919050565b60006020820190508181036000830152611cfc81611cc0565b9050919050565b6000604082019050611d186000830185611a87565b611d2560208301846117e5565b9392505050565b6000601f19601f8301169050919050565b611d4682611d2c565b810181811067ffffffffffffffff82111715611d6557611d64611b1e565b5b80604052505050565b6000611d786115a1565b9050611d848282611d3d565b919050565b600067ffffffffffffffff821115611da457611da3611b1e565b5b602082029050602081019050919050565b600081519050611dc481611a1b565b92915050565b6000611ddd611dd884611d89565b611d6e565b90508083825260208201905060208402830185811115611e0057611dff611960565b5b835b81811015611e295780611e158882611db5565b845260208401935050602081019050611e02565b5050509392505050565b600082601f830112611e4857611e47611956565b5b8151611e58848260208601611dca565b91505092915050565b600060208284031215611e7757611e766115ab565b5b600082015167ffffffffffffffff811115611e9557611e946115b0565b5b611ea184828501611e33565b91505092915050565b60006040820190508181036000830152611ec48185611765565b90508181036020830152611ed88184611765565b90509392505050565b600081905092915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b6000611f22601783611ee1565b9150611f2d82611eec565b601782019050919050565b600081519050919050565b60005b83811015611f61578082015181840152602081019050611f46565b83811115611f70576000848401525b50505050565b6000611f8182611f38565b611f8b8185611ee1565b9350611f9b818560208601611f43565b80840191505092915050565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b6000611fdd601183611ee1565b9150611fe882611fa7565b601182019050919050565b6000611ffe82611f15565b915061200a8285611f76565b915061201582611fd0565b91506120218284611f76565b91508190509392505050565b600061203882611f38565b6120428185611bf4565b9350612052818560208601611f43565b61205b81611d2c565b840191505092915050565b60006020820190508181036000830152612080818461202d565b905092915050565b600061209382611727565b915061209e83611727565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156120d7576120d6611b7c565b5b828202905092915050565b60006120ed82611727565b91506120f883611727565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561212d5761212c611b7c565b5b828201905092915050565b600061214382611727565b9150600082141561215757612156611b7c565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b6000612198602083611bf4565b91506121a382612162565b602082019050919050565b600060208201905081810360008301526121c78161218b565b9050919050565b60006121d982611727565b91506121e483611727565b9250828210156121f7576121f6611b7c565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea264697066735822122069ad5c4797bdadcda346693d13ede91da3fa42a13e93f6f4f077e4fb0891d25664736f6c634300080a0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061010b5760003560e01c806384be00e4116100a2578063a217fddf11610071578063a217fddf146102dc578063ad0f93ad146102fa578063ca15c8731461032a578063d547741f1461035a578063ffd68f15146103765761010b565b806384be00e4146102445780639010d07c1461026057806391d14854146102905780639533a384146102c05761010b565b80632f2ff15d116100de5780632f2ff15d146101d057806336568abe146101ec57806347ccca021461020857806360a4b76a146102265761010b565b806301ffc9a714610110578063032221ad146101405780630431f20514610170578063248a9ca3146101a0575b600080fd5b61012a6004803603810190610125919061160d565b6103a6565b6040516101379190611655565b60405180910390f35b61015a600480360381019061015591906116ce565b610420565b60405161016791906117c3565b60405180910390f35b61018a600480360381019061018591906116ce565b6105a2565b60405161019791906117f4565b60405180910390f35b6101ba60048036038101906101b59190611845565b6106b4565b6040516101c79190611881565b60405180910390f35b6101ea60048036038101906101e5919061189c565b6106d3565b005b6102066004803603810190610201919061189c565b6106fc565b005b61021061077f565b60405161021d919061193b565b60405180910390f35b61022e6107a5565b60405161023b9190611881565b60405180910390f35b61025e600480360381019061025991906119bb565b6107c9565b005b61027a60048036038101906102759190611a47565b6108a0565b6040516102879190611a96565b60405180910390f35b6102aa60048036038101906102a5919061189c565b6108cf565b6040516102b79190611655565b60405180910390f35b6102da60048036038101906102d59190611ab1565b610939565b005b6102e4610c9c565b6040516102f19190611881565b60405180910390f35b610314600480360381019061030f9190611ab1565b610ca3565b60405161032191906117f4565b60405180910390f35b610344600480360381019061033f9190611845565b610cd4565b60405161035191906117f4565b60405180910390f35b610374600480360381019061036f919061189c565b610cf8565b005b610390600480360381019061038b9190611af1565b610d21565b60405161039d9190611655565b60405180910390f35b60007f5a05180f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610419575061041882610e51565b5b9050919050565b60606000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156104ad57602002820191906000526020600020905b815481526020019060010190808311610499575b505050505090506000815167ffffffffffffffff8111156104d1576104d0611b1e565b5b6040519080825280602002602001820160405280156104ff5781602001602082028036833780820191505090505b5090506000805b835181101561059657600084828151811061052457610523611b4d565b5b602002602001015190506003600082815260200190815260200160002060009054906101000a900460ff16610582578084848151811061056757610566611b4d565b5b602002602001018181525050828061057e90611bab565b9350505b50808061058e90611bab565b915050610506565b50819350505050919050565b600080600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561062e57602002820191906000526020600020905b81548152602001906001019080831161061a575b505050505090506000805b82518110156106a957600083828151811061065757610656611b4d565b5b602002602001015190506003600082815260200190815260200160002060009054906101000a900460ff1661069557828061069190611bab565b9350505b5080806106a190611bab565b915050610639565b508092505050919050565b6000806000838152602001908152602001600020600101549050919050565b6106dc826106b4565b6106ed816106e8610ecb565b610ed3565b6106f78383610f70565b505050565b610704610ecb565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610771576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076890611c77565b60405180910390fd5b61077b8282610fa4565b5050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7fa076a07f65bcd51bcb15a0f01a65bc18f2d922acb81bcfd8af4caf5adb55709181565b6107fa7fa076a07f65bcd51bcb15a0f01a65bc18f2d922acb81bcfd8af4caf5adb5570916107f5610ecb565b610ed3565b60005b8282905081101561089a57600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083838381811061085a57610859611b4d565b5b905060200201359080600181540180825580915050600190039060005260206000200160009091909190915055808061089290611bab565b9150506107fd565b50505050565b60006108c78260016000868152602001908152602001600020610fd890919063ffffffff16565b905092915050565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61096a7fa076a07f65bcd51bcb15a0f01a65bc18f2d922acb81bcfd8af4caf5adb557091610965610ecb565b610ed3565b610973826105a2565b8111156109b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ac90611ce3565b60405180910390fd5b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015610a4057602002820191906000526020600020905b815481526020019060010190808311610a2c575b505050505090506000808367ffffffffffffffff811115610a6457610a63611b1e565b5b604051908082528060200260200182016040528015610a925781602001602082028036833780820191505090505b50905060005b8351811015610b61576000848281518110610ab657610ab5611b4d565b5b602002602001015190506003600082815260200190815260200160002060009054906101000a900460ff16158015610aed57508584105b15610b4d5780838581518110610b0657610b05611b4d565b5b60200260200101818152505060016003600083815260200190815260200160002060006101000a81548160ff0219169083151502179055508380610b4990611bab565b9450505b508080610b5990611bab565b915050610a98565b506000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166343508b0587876040518363ffffffff1660e01b8152600401610bc1929190611d03565b6000604051808303816000875af1158015610be0573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190610c099190611e61565b9050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f044ffb6dcd4ec715d7d57b6c88fa43e63f1e156efb2a93d1072314f910286e9d8484604051610c8c929190611eaa565b60405180910390a3505050505050565b6000801b81565b60026020528160005260406000208181548110610cbf57600080fd5b90600052602060002001600091509150505481565b6000610cf160016000848152602001908152602001600020610ff2565b9050919050565b610d01826106b4565b610d1281610d0d610ecb565b610ed3565b610d1c8383610fa4565b505050565b60036020528060005260406000206000915054906101000a900460ff1681565b610d4b82826108cf565b610e1d57600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550610dc2610ecb565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6000610e49836000018373ffffffffffffffffffffffffffffffffffffffff1660001b611007565b905092915050565b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610ec45750610ec382611077565b5b9050919050565b600033905090565b610edd82826108cf565b610f6c57610f028173ffffffffffffffffffffffffffffffffffffffff1660146110e1565b610f108360001c60206110e1565b604051602001610f21929190611ff3565b6040516020818303038152906040526040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f639190612066565b60405180910390fd5b5050565b610f7a8282610d41565b610f9f8160016000858152602001908152602001600020610e2190919063ffffffff16565b505050565b610fae828261131d565b610fd381600160008581526020019081526020016000206113fe90919063ffffffff16565b505050565b6000610fe7836000018361142e565b60001c905092915050565b600061100082600001611459565b9050919050565b6000611013838361146a565b61106c578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050611071565b600090505b92915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6060600060028360026110f49190612088565b6110fe91906120e2565b67ffffffffffffffff81111561111757611116611b1e565b5b6040519080825280601f01601f1916602001820160405280156111495781602001600182028036833780820191505090505b5090507f30000000000000000000000000000000000000000000000000000000000000008160008151811061118157611180611b4d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f7800000000000000000000000000000000000000000000000000000000000000816001815181106111e5576111e4611b4d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600060018460026112259190612088565b61122f91906120e2565b90505b60018111156112cf577f3031323334353637383961626364656600000000000000000000000000000000600f86166010811061127157611270611b4d565b5b1a60f81b82828151811061128857611287611b4d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c9450806112c890612138565b9050611232565b5060008414611313576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130a906121ae565b60405180910390fd5b8091505092915050565b61132782826108cf565b156113fa57600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061139f610ecb565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b6000611426836000018373ffffffffffffffffffffffffffffffffffffffff1660001b61148d565b905092915050565b600082600001828154811061144657611445611b4d565b5b9060005260206000200154905092915050565b600081600001805490509050919050565b600080836001016000848152602001908152602001600020541415905092915050565b600080836001016000848152602001908152602001600020549050600081146115955760006001826114bf91906121ce565b90506000600186600001805490506114d791906121ce565b90508181146115465760008660000182815481106114f8576114f7611b4d565b5b906000526020600020015490508087600001848154811061151c5761151b611b4d565b5b90600052602060002001819055508387600101600083815260200190815260200160002081905550505b8560000180548061155a57611559612202565b5b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061159b565b60009150505b92915050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6115ea816115b5565b81146115f557600080fd5b50565b600081359050611607816115e1565b92915050565b600060208284031215611623576116226115ab565b5b6000611631848285016115f8565b91505092915050565b60008115159050919050565b61164f8161163a565b82525050565b600060208201905061166a6000830184611646565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061169b82611670565b9050919050565b6116ab81611690565b81146116b657600080fd5b50565b6000813590506116c8816116a2565b92915050565b6000602082840312156116e4576116e36115ab565b5b60006116f2848285016116b9565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6000819050919050565b61173a81611727565b82525050565b600061174c8383611731565b60208301905092915050565b6000602082019050919050565b6000611770826116fb565b61177a8185611706565b935061178583611717565b8060005b838110156117b657815161179d8882611740565b97506117a883611758565b925050600181019050611789565b5085935050505092915050565b600060208201905081810360008301526117dd8184611765565b905092915050565b6117ee81611727565b82525050565b600060208201905061180960008301846117e5565b92915050565b6000819050919050565b6118228161180f565b811461182d57600080fd5b50565b60008135905061183f81611819565b92915050565b60006020828403121561185b5761185a6115ab565b5b600061186984828501611830565b91505092915050565b61187b8161180f565b82525050565b60006020820190506118966000830184611872565b92915050565b600080604083850312156118b3576118b26115ab565b5b60006118c185828601611830565b92505060206118d2858286016116b9565b9150509250929050565b6000819050919050565b60006119016118fc6118f784611670565b6118dc565b611670565b9050919050565b6000611913826118e6565b9050919050565b600061192582611908565b9050919050565b6119358161191a565b82525050565b6000602082019050611950600083018461192c565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261197b5761197a611956565b5b8235905067ffffffffffffffff8111156119985761199761195b565b5b6020830191508360208202830111156119b4576119b3611960565b5b9250929050565b6000806000604084860312156119d4576119d36115ab565b5b60006119e2868287016116b9565b935050602084013567ffffffffffffffff811115611a0357611a026115b0565b5b611a0f86828701611965565b92509250509250925092565b611a2481611727565b8114611a2f57600080fd5b50565b600081359050611a4181611a1b565b92915050565b60008060408385031215611a5e57611a5d6115ab565b5b6000611a6c85828601611830565b9250506020611a7d85828601611a32565b9150509250929050565b611a9081611690565b82525050565b6000602082019050611aab6000830184611a87565b92915050565b60008060408385031215611ac857611ac76115ab565b5b6000611ad6858286016116b9565b9250506020611ae785828601611a32565b9150509250929050565b600060208284031215611b0757611b066115ab565b5b6000611b1584828501611a32565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611bb682611727565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611be957611be8611b7c565b5b600182019050919050565b600082825260208201905092915050565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b6000611c61602f83611bf4565b9150611c6c82611c05565b604082019050919050565b60006020820190508181036000830152611c9081611c54565b9050919050565b7f4d696e7461626c6520636f756e74206973206e6f7420656e6f75676800000000600082015250565b6000611ccd601c83611bf4565b9150611cd882611c97565b602082019050919050565b60006020820190508181036000830152611cfc81611cc0565b9050919050565b6000604082019050611d186000830185611a87565b611d2560208301846117e5565b9392505050565b6000601f19601f8301169050919050565b611d4682611d2c565b810181811067ffffffffffffffff82111715611d6557611d64611b1e565b5b80604052505050565b6000611d786115a1565b9050611d848282611d3d565b919050565b600067ffffffffffffffff821115611da457611da3611b1e565b5b602082029050602081019050919050565b600081519050611dc481611a1b565b92915050565b6000611ddd611dd884611d89565b611d6e565b90508083825260208201905060208402830185811115611e0057611dff611960565b5b835b81811015611e295780611e158882611db5565b845260208401935050602081019050611e02565b5050509392505050565b600082601f830112611e4857611e47611956565b5b8151611e58848260208601611dca565b91505092915050565b600060208284031215611e7757611e766115ab565b5b600082015167ffffffffffffffff811115611e9557611e946115b0565b5b611ea184828501611e33565b91505092915050565b60006040820190508181036000830152611ec48185611765565b90508181036020830152611ed88184611765565b90509392505050565b600081905092915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b6000611f22601783611ee1565b9150611f2d82611eec565b601782019050919050565b600081519050919050565b60005b83811015611f61578082015181840152602081019050611f46565b83811115611f70576000848401525b50505050565b6000611f8182611f38565b611f8b8185611ee1565b9350611f9b818560208601611f43565b80840191505092915050565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b6000611fdd601183611ee1565b9150611fe882611fa7565b601182019050919050565b6000611ffe82611f15565b915061200a8285611f76565b915061201582611fd0565b91506120218284611f76565b91508190509392505050565b600061203882611f38565b6120428185611bf4565b9350612052818560208601611f43565b61205b81611d2c565b840191505092915050565b60006020820190508181036000830152612080818461202d565b905092915050565b600061209382611727565b915061209e83611727565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156120d7576120d6611b7c565b5b828202905092915050565b60006120ed82611727565b91506120f883611727565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561212d5761212c611b7c565b5b828201905092915050565b600061214382611727565b9150600082141561215757612156611b7c565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b6000612198602083611bf4565b91506121a382612162565b602082019050919050565b600060208201905081810360008301526121c78161218b565b9050919050565b60006121d982611727565b91506121e483611727565b9250828210156121f7576121f6611b7c565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea264697066735822122069ad5c4797bdadcda346693d13ede91da3fa42a13e93f6f4f077e4fb0891d25664736f6c634300080a0033", "immutableReferences": {}, "generatedSources": [ { @@ -13860,9 +13860,9 @@ "name": "#utility.yul" } ], - "sourceMap": "165:7166:11:-:0;;;1013:552;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1129:46;258:24;2072:4:0;1156:18:11;;1129:13;;;:46;;:::i;:::-;1253:44;2072:4:0;1264:18:11;;1284:12;:10;;;:12;;:::i;:::-;1253:10;;;:44;;:::i;:::-;1363:9;1358:109;1382:14;:21;1378:1;:25;1358:109;;;1418:42;258:24;1442:14;1457:1;1442:17;;;;;;;;:::i;:::-;;;;;;;;1418:10;;;:42;;:::i;:::-;1405:3;;;;:::i;:::-;;;1358:109;;;;1549:10;1533:3;;:27;;;;;;;;;;;;;;;;;;1013:552;;165:7166;;6492:247:0;6575:25;6603:18;6616:4;6603:12;;;:18;;:::i;:::-;6575:46;;6656:9;6631:6;:12;6638:4;6631:12;;;;;;;;;;;:22;;:34;;;;6722:9;6703:17;6697:4;6680:52;;;;;;;;;;6565:174;6492:247;;:::o;640:96:5:-;693:7;719:10;712:17;;640:96;:::o;6257:110:0:-;6335:25;6346:4;6352:7;6335:10;;;:25;;:::i;:::-;6257:110;;:::o;4008:129::-;4082:7;4108:6;:12;4115:4;4108:12;;;;;;;;;;;:22;;;4101:29;;4008:129;;;:::o;1978:166:1:-;2065:31;2082:4;2088:7;2065:16;;;;;:31;;:::i;:::-;2106;2129:7;2106:12;:18;2119:4;2106:18;;;;;;;;;;;:22;;;;;;:31;;;;:::i;:::-;;1978:166;;:::o;6861:233:0:-;6944:22;6952:4;6958:7;6944;;;:22;;:::i;:::-;6939:149;;7014:4;6982:6;:12;6989:4;6982:12;;;;;;;;;;;:20;;:29;7003:7;6982:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;7064:12;:10;;;:12;;:::i;:::-;7037:40;;7055:7;7037:40;;7049:4;7037:40;;;;;;;;;;6939:149;6861:233;;:::o;7612:150:9:-;7682:4;7705:50;7710:3;:10;;7746:5;7730:23;;7722:32;;7705:4;;;:50;;:::i;:::-;7698:57;;7612:150;;;;:::o;2909:145:0:-;2995:4;3018:6;:12;3025:4;3018:12;;;;;;;;;;;:20;;:29;3039:7;3018:29;;;;;;;;;;;;;;;;;;;;;;;;;3011:36;;2909:145;;;;:::o;1697:404:9:-;1760:4;1781:21;1791:3;1796:5;1781:9;;;:21;;:::i;:::-;1776:319;;1818:3;:11;;1835:5;1818:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1998:3;:11;;:18;;;;1976:3;:12;;:19;1989:5;1976:19;;;;;;;;;;;:40;;;;2037:4;2030:11;;;;1776:319;2079:5;2072:12;;1697:404;;;;;:::o;3738:127::-;3811:4;3857:1;3834:3;:12;;:19;3847:5;3834:19;;;;;;;;;;;;:24;;3827:31;;3738:127;;;;:::o;7:75:12:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:143::-;753:5;784:6;778:13;769:22;;800:33;827:5;800:33;:::i;:::-;696:143;;;;:::o;845:117::-;954:1;951;944:12;968:102;1009:6;1060:2;1056:7;1051:2;1044:5;1040:14;1036:28;1026:38;;968:102;;;:::o;1076:180::-;1124:77;1121:1;1114:88;1221:4;1218:1;1211:15;1245:4;1242:1;1235:15;1262:281;1345:27;1367:4;1345:27;:::i;:::-;1337:6;1333:40;1475:6;1463:10;1460:22;1439:18;1427:10;1424:34;1421:62;1418:88;;;1486:18;;:::i;:::-;1418:88;1526:10;1522:2;1515:22;1305:238;1262:281;;:::o;1549:129::-;1583:6;1610:20;;:::i;:::-;1600:30;;1639:33;1667:4;1659:6;1639:33;:::i;:::-;1549:129;;;:::o;1684:311::-;1761:4;1851:18;1843:6;1840:30;1837:56;;;1873:18;;:::i;:::-;1837:56;1923:4;1915:6;1911:17;1903:25;;1983:4;1977;1973:15;1965:23;;1684:311;;;:::o;2001:117::-;2110:1;2107;2100:12;2141:732;2248:5;2273:81;2289:64;2346:6;2289:64;:::i;:::-;2273:81;:::i;:::-;2264:90;;2374:5;2403:6;2396:5;2389:21;2437:4;2430:5;2426:16;2419:23;;2490:4;2482:6;2478:17;2470:6;2466:30;2519:3;2511:6;2508:15;2505:122;;;2538:79;;:::i;:::-;2505:122;2653:6;2636:231;2670:6;2665:3;2662:15;2636:231;;;2745:3;2774:48;2818:3;2806:10;2774:48;:::i;:::-;2769:3;2762:61;2852:4;2847:3;2843:14;2836:21;;2712:155;2696:4;2691:3;2687:14;2680:21;;2636:231;;;2640:21;2254:619;;2141:732;;;;;:::o;2896:385::-;2978:5;3027:3;3020:4;3012:6;3008:17;3004:27;2994:122;;3035:79;;:::i;:::-;2994:122;3145:6;3139:13;3170:105;3271:3;3263:6;3256:4;3248:6;3244:17;3170:105;:::i;:::-;3161:114;;2984:297;2896:385;;;;:::o;3287:710::-;3391:6;3399;3448:2;3436:9;3427:7;3423:23;3419:32;3416:119;;;3454:79;;:::i;:::-;3416:119;3574:1;3599:64;3655:7;3646:6;3635:9;3631:22;3599:64;:::i;:::-;3589:74;;3545:128;3733:2;3722:9;3718:18;3712:25;3764:18;3756:6;3753:30;3750:117;;;3786:79;;:::i;:::-;3750:117;3891:89;3972:7;3963:6;3952:9;3948:22;3891:89;:::i;:::-;3881:99;;3683:307;3287:710;;;;;:::o;4003:180::-;4051:77;4048:1;4041:88;4148:4;4145:1;4138:15;4172:4;4169:1;4162:15;4189:180;4237:77;4234:1;4227:88;4334:4;4331:1;4324:15;4358:4;4355:1;4348:15;4375:77;4412:7;4441:5;4430:16;;4375:77;;;:::o;4458:233::-;4497:3;4520:24;4538:5;4520:24;:::i;:::-;4511:33;;4566:66;4559:5;4556:77;4553:103;;;4636:18;;:::i;:::-;4553:103;4683:1;4676:5;4672:13;4665:20;;4458:233;;;:::o;165:7166:11:-;;;;;;;", - "deployedSourceMap": "165:7166:11:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;634:212:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6388:941:11;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5144:649;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4008:129:0;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4387:145;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5404:214;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;436:20:11;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;220:62;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4259:317;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1431:151:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2909:145:0;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2597:975:11;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2027:49:0;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;316:48:11;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1750:140:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4766:147:0;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;390:41:11;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;634:212:1;719:4;757:42;742:57;;;:11;:57;;;;:97;;;;803:36;827:11;803:23;:36::i;:::-;742:97;735:104;;634:212;;;:::o;6388:941:11:-;6461:16;6538:21;6562:11;:18;6574:5;6562:18;;;;;;;;;;;;;;;6538:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6683:31;6731:4;:11;6717:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6683:60;;6792:13;6861:9;6856:398;6880:4;:11;6876:1;:15;6856:398;;;6956:13;6972:4;6977:1;6972:7;;;;;;;;:::i;:::-;;;;;;;;6956:23;;7042:9;:16;7052:5;7042:16;;;;;;;;;;;;;;;;;;;;;7037:211;;7178:5;7154:14;7169:5;7154:21;;;;;;;;:::i;:::-;;;;;;;:29;;;;;7232:7;;;;;:::i;:::-;;;;7037:211;6898:356;6893:3;;;;;:::i;:::-;;;;6856:398;;;;7310:14;7303:21;;;;;6388:941;;;:::o;5144:649::-;5206:7;5274:21;5298:11;:18;5310:5;5298:18;;;;;;;;;;;;;;;5274:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5354:13;5423:9;5418:314;5442:4;:11;5438:1;:15;5418:314;;;5518:14;5535:4;5540:1;5535:7;;;;;;;;:::i;:::-;;;;;;;;5518:24;;5605:9;:17;5615:6;5605:17;;;;;;;;;;;;;;;;;;;;;5600:126;;5710:7;;;;;:::i;:::-;;;;5600:126;5460:272;5455:3;;;;;:::i;:::-;;;;5418:314;;;;5783:5;5776:12;;;;5144:649;;;:::o;4008:129:0:-;4082:7;4108:6;:12;4115:4;4108:12;;;;;;;;;;;:22;;;4101:29;;4008:129;;;:::o;4387:145::-;4470:18;4483:4;4470:12;:18::i;:::-;2505:30;2516:4;2522:12;:10;:12::i;:::-;2505:10;:30::i;:::-;4500:25:::1;4511:4;4517:7;4500:10;:25::i;:::-;4387:145:::0;;;:::o;5404:214::-;5510:12;:10;:12::i;:::-;5499:23;;:7;:23;;;5491:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;5585:26;5597:4;5603:7;5585:11;:26::i;:::-;5404:214;;:::o;436:20:11:-;;;;;;;;;;;;;:::o;220:62::-;258:24;220:62;:::o;4259:317::-;1912:37;258:24;1936:12;:10;:12::i;:::-;1912:10;:37::i;:::-;4407:9:::1;4402:170;4426:7;;:14;;4422:1;:18;4402:170;;;4530:11;:18;4542:5;4530:18;;;;;;;;;;;;;;;4554:7;;4562:1;4554:10;;;;;;;:::i;:::-;;;;;;;;4530:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4442:3;;;;;:::i;:::-;;;;4402:170;;;;4259:317:::0;;;:::o;1431:151:1:-;1521:7;1547:28;1569:5;1547:12;:18;1560:4;1547:18;;;;;;;;;;;:21;;:28;;;;:::i;:::-;1540:35;;1431:151;;;;:::o;2909:145:0:-;2995:4;3018:6;:12;3025:4;3018:12;;;;;;;;;;;:20;;:29;3039:7;3018:29;;;;;;;;;;;;;;;;;;;;;;;;;3011:36;;2909:145;;;;:::o;2597:975:11:-;1912:37;258:24;1936:12;:10;:12::i;:::-;1912:10;:37::i;:::-;2740:23:::1;2757:5;2740:16;:23::i;:::-;2731:5;:32;;2723:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2848:21;2872:11;:18;2884:5;2872:18;;;;;;;;;;;;;;;2848:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2924:13;2947:26:::0;2990:5:::1;2976:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2947:49;;3050:9;3045:349;3069:4;:11;3065:1;:15;3045:349;;;3095:14;3112:4;3117:1;3112:7;;;;;;;;:::i;:::-;;;;;;;;3095:24;;3170:9;:17;3180:6;3170:17;;;;;;;;;;;;;;;;;;;;;3165:223;;3276:6;3257:9;3267:5;3257:16;;;;;;;;:::i;:::-;;;;;;;:25;;;::::0;::::1;3312:4;3292:9;:17;3302:6;3292:17;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;3372:7;;;;;:::i;:::-;;;;3165:223;3087:307;3082:3;;;;;:::i;:::-;;;;3045:349;;;;3399:24;3426:3;;;;;;;;;;;:13;;;3440:5;3447;3426:27;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3399:54;;3542:3;;;;;;;;;;;3520:47;;3527:5;3520:47;;;3548:9;3559:7;3520:47;;;;;;;:::i;:::-;;;;;;;;2668:904;;;;2597:975:::0;;:::o;2027:49:0:-;2072:4;2027:49;;;:::o;316:48:11:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1750:140:1:-;1830:7;1856:27;:12;:18;1869:4;1856:18;;;;;;;;;;;:25;:27::i;:::-;1849:34;;1750:140;;;:::o;4766:147:0:-;4850:18;4863:4;4850:12;:18::i;:::-;2505:30;2516:4;2522:12;:10;:12::i;:::-;2505:10;:30::i;:::-;4880:26:::1;4892:4;4898:7;4880:11;:26::i;:::-;4766:147:::0;;;:::o;390:41:11:-;;;;;;;;;;;;;;;;;;;;;;:::o;6861:233:0:-;6944:22;6952:4;6958:7;6944;:22::i;:::-;6939:149;;7014:4;6982:6;:12;6989:4;6982:12;;;;;;;;;;;:20;;:29;7003:7;6982:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;7064:12;:10;:12::i;:::-;7037:40;;7055:7;7037:40;;7049:4;7037:40;;;;;;;;;;6939:149;6861:233;;:::o;7612:150:9:-;7682:4;7705:50;7710:3;:10;;7746:5;7730:23;;7722:32;;7705:4;:50::i;:::-;7698:57;;7612:150;;;;:::o;2620:202:0:-;2705:4;2743:32;2728:47;;;:11;:47;;;;:87;;;;2779:36;2803:11;2779:23;:36::i;:::-;2728:87;2721:94;;2620:202;;;:::o;640:96:5:-;693:7;719:10;712:17;;640:96;:::o;3335:492:0:-;3423:22;3431:4;3437:7;3423;:22::i;:::-;3418:403;;3606:41;3634:7;3606:41;;3644:2;3606:19;:41::i;:::-;3718:38;3746:4;3738:13;;3753:2;3718:19;:38::i;:::-;3513:265;;;;;;;;;:::i;:::-;;;;;;;;;;;;;3461:349;;;;;;;;;;;:::i;:::-;;;;;;;;3418:403;3335:492;;:::o;1978:166:1:-;2065:31;2082:4;2088:7;2065:16;:31::i;:::-;2106;2129:7;2106:12;:18;2119:4;2106:18;;;;;;;;;;;:22;;:31;;;;:::i;:::-;;1978:166;;:::o;2233:171::-;2321:32;2339:4;2345:7;2321:17;:32::i;:::-;2363:34;2389:7;2363:12;:18;2376:4;2363:18;;;;;;;;;;;:25;;:34;;;;:::i;:::-;;2233:171;;:::o;8870:156:9:-;8944:7;8994:22;8998:3;:10;;9010:5;8994:3;:22::i;:::-;8986:31;;8963:56;;8870:156;;;;:::o;8413:115::-;8476:7;8502:19;8510:3;:10;;8502:7;:19::i;:::-;8495:26;;8413:115;;;:::o;1697:404::-;1760:4;1781:21;1791:3;1796:5;1781:9;:21::i;:::-;1776:319;;1818:3;:11;;1835:5;1818:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1998:3;:11;;:18;;;;1976:3;:12;;:19;1989:5;1976:19;;;;;;;;;;;:40;;;;2037:4;2030:11;;;;1776:319;2079:5;2072:12;;1697:404;;;;;:::o;829:155:7:-;914:4;952:25;937:40;;;:11;:40;;;;930:47;;829:155;;;:::o;1588:441:6:-;1663:13;1688:19;1733:1;1724:6;1720:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;1710:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1688:47;;1745:15;:6;1752:1;1745:9;;;;;;;;:::i;:::-;;;;;:15;;;;;;;;;;;1770;:6;1777:1;1770:9;;;;;;;;:::i;:::-;;;;;:15;;;;;;;;;;;1800:9;1825:1;1816:6;1812:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;1800:26;;1795:132;1832:1;1828;:5;1795:132;;;1866:12;1887:3;1879:5;:11;1866:25;;;;;;;:::i;:::-;;;;;1854:6;1861:1;1854:9;;;;;;;;:::i;:::-;;;;;:37;;;;;;;;;;;1915:1;1905:11;;;;;1835:3;;;;:::i;:::-;;;1795:132;;;;1953:1;1944:5;:10;1936:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;2015:6;2001:21;;;1588:441;;;;:::o;7219:234:0:-;7302:22;7310:4;7316:7;7302;:22::i;:::-;7298:149;;;7372:5;7340:6;:12;7347:4;7340:12;;;;;;;;;;;:20;;:29;7361:7;7340:29;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;7423:12;:10;:12::i;:::-;7396:40;;7414:7;7396:40;;7408:4;7396:40;;;;;;;;;;7298:149;7219:234;;:::o;7930:156:9:-;8003:4;8026:53;8034:3;:10;;8070:5;8054:23;;8046:32;;8026:7;:53::i;:::-;8019:60;;7930:156;;;;:::o;4395:118::-;4462:7;4488:3;:11;;4500:5;4488:18;;;;;;;;:::i;:::-;;;;;;;;;;4481:25;;4395:118;;;;:::o;3946:107::-;4002:7;4028:3;:11;;:18;;;;4021:25;;3946:107;;;:::o;3738:127::-;3811:4;3857:1;3834:3;:12;;:19;3847:5;3834:19;;;;;;;;;;;;:24;;3827:31;;3738:127;;;;:::o;2269:1388::-;2335:4;2451:18;2472:3;:12;;:19;2485:5;2472:19;;;;;;;;;;;;2451:40;;2520:1;2506:10;:15;2502:1149;;2875:21;2912:1;2899:10;:14;;;;:::i;:::-;2875:38;;2927:17;2968:1;2947:3;:11;;:18;;;;:22;;;;:::i;:::-;2927:42;;3001:13;2988:9;:26;2984:398;;3034:17;3054:3;:11;;3066:9;3054:22;;;;;;;;:::i;:::-;;;;;;;;;;3034:42;;3205:9;3176:3;:11;;3188:13;3176:26;;;;;;;;:::i;:::-;;;;;;;;;:38;;;;3314:10;3288:3;:12;;:23;3301:9;3288:23;;;;;;;;;;;:36;;;;3016:366;2984:398;3460:3;:11;;:17;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3552:3;:12;;:19;3565:5;3552:19;;;;;;;;;;;3545:26;;;3593:4;3586:11;;;;;;;2502:1149;3635:5;3628:12;;;2269:1388;;;;;:::o;7:75:12:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:126::-;1555:7;1595:42;1588:5;1584:54;1573:65;;1518:126;;;:::o;1650:96::-;1687:7;1716:24;1734:5;1716:24;:::i;:::-;1705:35;;1650:96;;;:::o;1752:122::-;1825:24;1843:5;1825:24;:::i;:::-;1818:5;1815:35;1805:63;;1864:1;1861;1854:12;1805:63;1752:122;:::o;1880:139::-;1926:5;1964:6;1951:20;1942:29;;1980:33;2007:5;1980:33;:::i;:::-;1880:139;;;;:::o;2025:329::-;2084:6;2133:2;2121:9;2112:7;2108:23;2104:32;2101:119;;;2139:79;;:::i;:::-;2101:119;2259:1;2284:53;2329:7;2320:6;2309:9;2305:22;2284:53;:::i;:::-;2274:63;;2230:117;2025:329;;;;:::o;2360:114::-;2427:6;2461:5;2455:12;2445:22;;2360:114;;;:::o;2480:184::-;2579:11;2613:6;2608:3;2601:19;2653:4;2648:3;2644:14;2629:29;;2480:184;;;;:::o;2670:132::-;2737:4;2760:3;2752:11;;2790:4;2785:3;2781:14;2773:22;;2670:132;;;:::o;2808:77::-;2845:7;2874:5;2863:16;;2808:77;;;:::o;2891:108::-;2968:24;2986:5;2968:24;:::i;:::-;2963:3;2956:37;2891:108;;:::o;3005:179::-;3074:10;3095:46;3137:3;3129:6;3095:46;:::i;:::-;3173:4;3168:3;3164:14;3150:28;;3005:179;;;;:::o;3190:113::-;3260:4;3292;3287:3;3283:14;3275:22;;3190:113;;;:::o;3339:732::-;3458:3;3487:54;3535:5;3487:54;:::i;:::-;3557:86;3636:6;3631:3;3557:86;:::i;:::-;3550:93;;3667:56;3717:5;3667:56;:::i;:::-;3746:7;3777:1;3762:284;3787:6;3784:1;3781:13;3762:284;;;3863:6;3857:13;3890:63;3949:3;3934:13;3890:63;:::i;:::-;3883:70;;3976:60;4029:6;3976:60;:::i;:::-;3966:70;;3822:224;3809:1;3806;3802:9;3797:14;;3762:284;;;3766:14;4062:3;4055:10;;3463:608;;;3339:732;;;;:::o;4077:373::-;4220:4;4258:2;4247:9;4243:18;4235:26;;4307:9;4301:4;4297:20;4293:1;4282:9;4278:17;4271:47;4335:108;4438:4;4429:6;4335:108;:::i;:::-;4327:116;;4077:373;;;;:::o;4456:118::-;4543:24;4561:5;4543:24;:::i;:::-;4538:3;4531:37;4456:118;;:::o;4580:222::-;4673:4;4711:2;4700:9;4696:18;4688:26;;4724:71;4792:1;4781:9;4777:17;4768:6;4724:71;:::i;:::-;4580:222;;;;:::o;4808:77::-;4845:7;4874:5;4863:16;;4808:77;;;:::o;4891:122::-;4964:24;4982:5;4964:24;:::i;:::-;4957:5;4954:35;4944:63;;5003:1;5000;4993:12;4944:63;4891:122;:::o;5019:139::-;5065:5;5103:6;5090:20;5081:29;;5119:33;5146:5;5119:33;:::i;:::-;5019:139;;;;:::o;5164:329::-;5223:6;5272:2;5260:9;5251:7;5247:23;5243:32;5240:119;;;5278:79;;:::i;:::-;5240:119;5398:1;5423:53;5468:7;5459:6;5448:9;5444:22;5423:53;:::i;:::-;5413:63;;5369:117;5164:329;;;;:::o;5499:118::-;5586:24;5604:5;5586:24;:::i;:::-;5581:3;5574:37;5499:118;;:::o;5623:222::-;5716:4;5754:2;5743:9;5739:18;5731:26;;5767:71;5835:1;5824:9;5820:17;5811:6;5767:71;:::i;:::-;5623:222;;;;:::o;5851:474::-;5919:6;5927;5976:2;5964:9;5955:7;5951:23;5947:32;5944:119;;;5982:79;;:::i;:::-;5944:119;6102:1;6127:53;6172:7;6163:6;6152:9;6148:22;6127:53;:::i;:::-;6117:63;;6073:117;6229:2;6255:53;6300:7;6291:6;6280:9;6276:22;6255:53;:::i;:::-;6245:63;;6200:118;5851:474;;;;;:::o;6331:60::-;6359:3;6380:5;6373:12;;6331:60;;;:::o;6397:142::-;6447:9;6480:53;6498:34;6507:24;6525:5;6507:24;:::i;:::-;6498:34;:::i;:::-;6480:53;:::i;:::-;6467:66;;6397:142;;;:::o;6545:126::-;6595:9;6628:37;6659:5;6628:37;:::i;:::-;6615:50;;6545:126;;;:::o;6677:144::-;6745:9;6778:37;6809:5;6778:37;:::i;:::-;6765:50;;6677:144;;;:::o;6827:167::-;6932:55;6981:5;6932:55;:::i;:::-;6927:3;6920:68;6827:167;;:::o;7000:258::-;7111:4;7149:2;7138:9;7134:18;7126:26;;7162:89;7248:1;7237:9;7233:17;7224:6;7162:89;:::i;:::-;7000:258;;;;:::o;7264:117::-;7373:1;7370;7363:12;7387:117;7496:1;7493;7486:12;7510:117;7619:1;7616;7609:12;7650:568;7723:8;7733:6;7783:3;7776:4;7768:6;7764:17;7760:27;7750:122;;7791:79;;:::i;:::-;7750:122;7904:6;7891:20;7881:30;;7934:18;7926:6;7923:30;7920:117;;;7956:79;;:::i;:::-;7920:117;8070:4;8062:6;8058:17;8046:29;;8124:3;8116:4;8108:6;8104:17;8094:8;8090:32;8087:41;8084:128;;;8131:79;;:::i;:::-;8084:128;7650:568;;;;;:::o;8224:704::-;8319:6;8327;8335;8384:2;8372:9;8363:7;8359:23;8355:32;8352:119;;;8390:79;;:::i;:::-;8352:119;8510:1;8535:53;8580:7;8571:6;8560:9;8556:22;8535:53;:::i;:::-;8525:63;;8481:117;8665:2;8654:9;8650:18;8637:32;8696:18;8688:6;8685:30;8682:117;;;8718:79;;:::i;:::-;8682:117;8831:80;8903:7;8894:6;8883:9;8879:22;8831:80;:::i;:::-;8813:98;;;;8608:313;8224:704;;;;;:::o;8934:122::-;9007:24;9025:5;9007:24;:::i;:::-;9000:5;8997:35;8987:63;;9046:1;9043;9036:12;8987:63;8934:122;:::o;9062:139::-;9108:5;9146:6;9133:20;9124:29;;9162:33;9189:5;9162:33;:::i;:::-;9062:139;;;;:::o;9207:474::-;9275:6;9283;9332:2;9320:9;9311:7;9307:23;9303:32;9300:119;;;9338:79;;:::i;:::-;9300:119;9458:1;9483:53;9528:7;9519:6;9508:9;9504:22;9483:53;:::i;:::-;9473:63;;9429:117;9585:2;9611:53;9656:7;9647:6;9636:9;9632:22;9611:53;:::i;:::-;9601:63;;9556:118;9207:474;;;;;:::o;9687:118::-;9774:24;9792:5;9774:24;:::i;:::-;9769:3;9762:37;9687:118;;:::o;9811:222::-;9904:4;9942:2;9931:9;9927:18;9919:26;;9955:71;10023:1;10012:9;10008:17;9999:6;9955:71;:::i;:::-;9811:222;;;;:::o;10039:474::-;10107:6;10115;10164:2;10152:9;10143:7;10139:23;10135:32;10132:119;;;10170:79;;:::i;:::-;10132:119;10290:1;10315:53;10360:7;10351:6;10340:9;10336:22;10315:53;:::i;:::-;10305:63;;10261:117;10417:2;10443:53;10488:7;10479:6;10468:9;10464:22;10443:53;:::i;:::-;10433:63;;10388:118;10039:474;;;;;:::o;10519:329::-;10578:6;10627:2;10615:9;10606:7;10602:23;10598:32;10595:119;;;10633:79;;:::i;:::-;10595:119;10753:1;10778:53;10823:7;10814:6;10803:9;10799:22;10778:53;:::i;:::-;10768:63;;10724:117;10519:329;;;;:::o;10854:180::-;10902:77;10899:1;10892:88;10999:4;10996:1;10989:15;11023:4;11020:1;11013:15;11040:180;11088:77;11085:1;11078:88;11185:4;11182:1;11175:15;11209:4;11206:1;11199:15;11226:180;11274:77;11271:1;11264:88;11371:4;11368:1;11361:15;11395:4;11392:1;11385:15;11412:233;11451:3;11474:24;11492:5;11474:24;:::i;:::-;11465:33;;11520:66;11513:5;11510:77;11507:103;;;11590:18;;:::i;:::-;11507:103;11637:1;11630:5;11626:13;11619:20;;11412:233;;;:::o;11651:169::-;11735:11;11769:6;11764:3;11757:19;11809:4;11804:3;11800:14;11785:29;;11651:169;;;;:::o;11826:234::-;11966:34;11962:1;11954:6;11950:14;11943:58;12035:17;12030:2;12022:6;12018:15;12011:42;11826:234;:::o;12066:366::-;12208:3;12229:67;12293:2;12288:3;12229:67;:::i;:::-;12222:74;;12305:93;12394:3;12305:93;:::i;:::-;12423:2;12418:3;12414:12;12407:19;;12066:366;;;:::o;12438:419::-;12604:4;12642:2;12631:9;12627:18;12619:26;;12691:9;12685:4;12681:20;12677:1;12666:9;12662:17;12655:47;12719:131;12845:4;12719:131;:::i;:::-;12711:139;;12438:419;;;:::o;12863:178::-;13003:30;12999:1;12991:6;12987:14;12980:54;12863:178;:::o;13047:366::-;13189:3;13210:67;13274:2;13269:3;13210:67;:::i;:::-;13203:74;;13286:93;13375:3;13286:93;:::i;:::-;13404:2;13399:3;13395:12;13388:19;;13047:366;;;:::o;13419:419::-;13585:4;13623:2;13612:9;13608:18;13600:26;;13672:9;13666:4;13662:20;13658:1;13647:9;13643:17;13636:47;13700:131;13826:4;13700:131;:::i;:::-;13692:139;;13419:419;;;:::o;13844:332::-;13965:4;14003:2;13992:9;13988:18;13980:26;;14016:71;14084:1;14073:9;14069:17;14060:6;14016:71;:::i;:::-;14097:72;14165:2;14154:9;14150:18;14141:6;14097:72;:::i;:::-;13844:332;;;;;:::o;14182:102::-;14223:6;14274:2;14270:7;14265:2;14258:5;14254:14;14250:28;14240:38;;14182:102;;;:::o;14290:281::-;14373:27;14395:4;14373:27;:::i;:::-;14365:6;14361:40;14503:6;14491:10;14488:22;14467:18;14455:10;14452:34;14449:62;14446:88;;;14514:18;;:::i;:::-;14446:88;14554:10;14550:2;14543:22;14333:238;14290:281;;:::o;14577:129::-;14611:6;14638:20;;:::i;:::-;14628:30;;14667:33;14695:4;14687:6;14667:33;:::i;:::-;14577:129;;;:::o;14712:311::-;14789:4;14879:18;14871:6;14868:30;14865:56;;;14901:18;;:::i;:::-;14865:56;14951:4;14943:6;14939:17;14931:25;;15011:4;15005;15001:15;14993:23;;14712:311;;;:::o;15029:143::-;15086:5;15117:6;15111:13;15102:22;;15133:33;15160:5;15133:33;:::i;:::-;15029:143;;;;:::o;15195:732::-;15302:5;15327:81;15343:64;15400:6;15343:64;:::i;:::-;15327:81;:::i;:::-;15318:90;;15428:5;15457:6;15450:5;15443:21;15491:4;15484:5;15480:16;15473:23;;15544:4;15536:6;15532:17;15524:6;15520:30;15573:3;15565:6;15562:15;15559:122;;;15592:79;;:::i;:::-;15559:122;15707:6;15690:231;15724:6;15719:3;15716:15;15690:231;;;15799:3;15828:48;15872:3;15860:10;15828:48;:::i;:::-;15823:3;15816:61;15906:4;15901:3;15897:14;15890:21;;15766:155;15750:4;15745:3;15741:14;15734:21;;15690:231;;;15694:21;15308:619;;15195:732;;;;;:::o;15950:385::-;16032:5;16081:3;16074:4;16066:6;16062:17;16058:27;16048:122;;16089:79;;:::i;:::-;16048:122;16199:6;16193:13;16224:105;16325:3;16317:6;16310:4;16302:6;16298:17;16224:105;:::i;:::-;16215:114;;16038:297;15950:385;;;;:::o;16341:554::-;16436:6;16485:2;16473:9;16464:7;16460:23;16456:32;16453:119;;;16491:79;;:::i;:::-;16453:119;16632:1;16621:9;16617:17;16611:24;16662:18;16654:6;16651:30;16648:117;;;16684:79;;:::i;:::-;16648:117;16789:89;16870:7;16861:6;16850:9;16846:22;16789:89;:::i;:::-;16779:99;;16582:306;16341:554;;;;:::o;16901:634::-;17122:4;17160:2;17149:9;17145:18;17137:26;;17209:9;17203:4;17199:20;17195:1;17184:9;17180:17;17173:47;17237:108;17340:4;17331:6;17237:108;:::i;:::-;17229:116;;17392:9;17386:4;17382:20;17377:2;17366:9;17362:18;17355:48;17420:108;17523:4;17514:6;17420:108;:::i;:::-;17412:116;;16901:634;;;;;:::o;17541:148::-;17643:11;17680:3;17665:18;;17541:148;;;;:::o;17695:173::-;17835:25;17831:1;17823:6;17819:14;17812:49;17695:173;:::o;17874:402::-;18034:3;18055:85;18137:2;18132:3;18055:85;:::i;:::-;18048:92;;18149:93;18238:3;18149:93;:::i;:::-;18267:2;18262:3;18258:12;18251:19;;17874:402;;;:::o;18282:99::-;18334:6;18368:5;18362:12;18352:22;;18282:99;;;:::o;18387:307::-;18455:1;18465:113;18479:6;18476:1;18473:13;18465:113;;;18564:1;18559:3;18555:11;18549:18;18545:1;18540:3;18536:11;18529:39;18501:2;18498:1;18494:10;18489:15;;18465:113;;;18596:6;18593:1;18590:13;18587:101;;;18676:1;18667:6;18662:3;18658:16;18651:27;18587:101;18436:258;18387:307;;;:::o;18700:377::-;18806:3;18834:39;18867:5;18834:39;:::i;:::-;18889:89;18971:6;18966:3;18889:89;:::i;:::-;18882:96;;18987:52;19032:6;19027:3;19020:4;19013:5;19009:16;18987:52;:::i;:::-;19064:6;19059:3;19055:16;19048:23;;18810:267;18700:377;;;;:::o;19083:167::-;19223:19;19219:1;19211:6;19207:14;19200:43;19083:167;:::o;19256:402::-;19416:3;19437:85;19519:2;19514:3;19437:85;:::i;:::-;19430:92;;19531:93;19620:3;19531:93;:::i;:::-;19649:2;19644:3;19640:12;19633:19;;19256:402;;;:::o;19664:967::-;20046:3;20068:148;20212:3;20068:148;:::i;:::-;20061:155;;20233:95;20324:3;20315:6;20233:95;:::i;:::-;20226:102;;20345:148;20489:3;20345:148;:::i;:::-;20338:155;;20510:95;20601:3;20592:6;20510:95;:::i;:::-;20503:102;;20622:3;20615:10;;19664:967;;;;;:::o;20637:364::-;20725:3;20753:39;20786:5;20753:39;:::i;:::-;20808:71;20872:6;20867:3;20808:71;:::i;:::-;20801:78;;20888:52;20933:6;20928:3;20921:4;20914:5;20910:16;20888:52;:::i;:::-;20965:29;20987:6;20965:29;:::i;:::-;20960:3;20956:39;20949:46;;20729:272;20637:364;;;;:::o;21007:313::-;21120:4;21158:2;21147:9;21143:18;21135:26;;21207:9;21201:4;21197:20;21193:1;21182:9;21178:17;21171:47;21235:78;21308:4;21299:6;21235:78;:::i;:::-;21227:86;;21007:313;;;;:::o;21326:348::-;21366:7;21389:20;21407:1;21389:20;:::i;:::-;21384:25;;21423:20;21441:1;21423:20;:::i;:::-;21418:25;;21611:1;21543:66;21539:74;21536:1;21533:81;21528:1;21521:9;21514:17;21510:105;21507:131;;;21618:18;;:::i;:::-;21507:131;21666:1;21663;21659:9;21648:20;;21326:348;;;;:::o;21680:305::-;21720:3;21739:20;21757:1;21739:20;:::i;:::-;21734:25;;21773:20;21791:1;21773:20;:::i;:::-;21768:25;;21927:1;21859:66;21855:74;21852:1;21849:81;21846:107;;;21933:18;;:::i;:::-;21846:107;21977:1;21974;21970:9;21963:16;;21680:305;;;;:::o;21991:171::-;22030:3;22053:24;22071:5;22053:24;:::i;:::-;22044:33;;22099:4;22092:5;22089:15;22086:41;;;22107:18;;:::i;:::-;22086:41;22154:1;22147:5;22143:13;22136:20;;21991:171;;;:::o;22168:182::-;22308:34;22304:1;22296:6;22292:14;22285:58;22168:182;:::o;22356:366::-;22498:3;22519:67;22583:2;22578:3;22519:67;:::i;:::-;22512:74;;22595:93;22684:3;22595:93;:::i;:::-;22713:2;22708:3;22704:12;22697:19;;22356:366;;;:::o;22728:419::-;22894:4;22932:2;22921:9;22917:18;22909:26;;22981:9;22975:4;22971:20;22967:1;22956:9;22952:17;22945:47;23009:131;23135:4;23009:131;:::i;:::-;23001:139;;22728:419;;;:::o;23153:191::-;23193:4;23213:20;23231:1;23213:20;:::i;:::-;23208:25;;23247:20;23265:1;23247:20;:::i;:::-;23242:25;;23286:1;23283;23280:8;23277:34;;;23291:18;;:::i;:::-;23277:34;23336:1;23333;23329:9;23321:17;;23153:191;;;;:::o;23350:180::-;23398:77;23395:1;23388:88;23495:4;23492:1;23485:15;23519:4;23516:1;23509:15", - "source": "// SPDX-License-Identifier: MIT\npragma solidity 0.8.10;\n\nimport \"@openzeppelin/contracts/access/AccessControlEnumerable.sol\";\nimport \"../interfaces/IBEERC721.sol\";\n\ncontract NftDistributor is AccessControlEnumerable {\n bytes32 public constant MANAGE_ROLE = keccak256(\"MANAGE_ROLE\");\n\n // user address => nft ids\n mapping(address => uint256[]) public ownerToNFTs;\n // nft id => minted\n mapping(uint256 => bool) public nftMinted;\n\n IBEERC721 public nft;\n\n event Minted(\n address indexed user,\n address indexed nft,\n uint256[] nftSIds,\n uint256[] nftTIds\n );\n\n /**\n * @dev Contract constructor.\n *\n * Initializes the contract with the specified addresses and sets the admin and management roles.\n *\n * Parameters:\n * - _nftTarget: The address of NFT that will be minted by this contract. Need MINTER_ROLE\n * - _nftSource: The address of the source NFT that will check if user has mint permission.\n * - _manageAddress: The address that will have the MANAGE_ROLE assigned.\n */\n constructor(address _nftTarget, address[] memory _manageAddress) {\n // Set up the ADMIN_ROLE and MANAGE_ROLE\n _setRoleAdmin(MANAGE_ROLE, DEFAULT_ADMIN_ROLE);\n\n // Grant the ADMIN_ROLE to the deployer and to the contract itself\n _setupRole(DEFAULT_ADMIN_ROLE, _msgSender());\n\n // Grant the MANAGE_ROLE to the specified address\n for (uint256 i = 0; i < _manageAddress.length; ++i) {\n _setupRole(MANAGE_ROLE, _manageAddress[i]);\n }\n\n // Initialize the nft contract with IBEERC721 interface\n nft = IBEERC721(_nftTarget);\n }\n\n /**\n * @dev Modifier that checks if the caller has the MANAGE_ROLE.\n *\n * The function uses the _checkRole() function from the AccessControl library.\n * If the check is successful, the code defined by the function that uses this modifier is executed.\n */\n modifier onlyManager() {\n // Check if the caller has the MANAGE_ROLE\n _checkRole(MANAGE_ROLE, _msgSender());\n // If the check is successful, execute the code in the function that uses this modifier\n _;\n }\n\n /**\n * @dev The mintToUser function mints NFTs to a given user.\n *\n * Only functions called by an address with the MANAGE_ROLE permission can access this function.\n * The function takes an array of nftIds and checks that there are enough mintable NFTs for the user.\n * It then loops through the user's owned NFTs, checking if each is mintable, and if so, adds it to a list to be minted.\n * Then it emits the Minted event with details of the operation.\n *\n * @param _user - The address of the user receiving the NFTs\n */\n function mintToUser(address _user, uint256 count) external onlyManager {\n // Check that there are enough mintable NFTs\n require(count <= getMintableCount(_user), \"Mintable count is not enough\");\n // Get the array of the user's owned NFTs\n uint256[] memory nfts = ownerToNFTs[_user];\n // Initialize variables\n uint256 index = 0;\n uint256[] memory nftSource = new uint256[](count);\n\n // Loop through the user's owned NFTs\n for (uint256 i = 0; i < nfts.length; i++) {\n uint256 nftSId = nfts[i];\n // Check if the NFT is mintable\n if (!nftMinted[nftSId]) {\n // Add the NFT's source ID to the list of sources\n nftSource[index] = nftSId;\n nftMinted[nftSId] = true;\n // Mint the NFT to the user's address\n index++;\n }\n }\n uint256[] memory _nftIds = nft.batchMint(_user, count);\n // Emit event with details of the minting operation\n emit Minted(_user, address(nft), nftSource, _nftIds);\n }\n\n /**\n * @dev The addNFTData function adds an array of NFT IDs to the list of NFT IDs owned by a user.\n * mintToUser method would check if target user had permission to mint NFTs.\n *\n * Only functions called by an address with the MANAGE_ROLE permission can access this function.\n * The function takes in the address of the user and an array of NFT IDs. It then loops through the array\n * of NFT IDs, and adds each one to the end of the array of NFTs owned by that user to update their ownership data.\n *\n * @param _user - The address of the user being updated with new NFT data\n * @param _nftIds - An array of NFT IDs being added to the user's NFT data\n */\n function addNFTData(\n address _user,\n uint256[] calldata _nftIds\n ) external onlyManager {\n // Loop through the array of NFT IDs\n for (uint256 i = 0; i < _nftIds.length; i++) {\n // Add each NFT ID to the end of the array of NFTs owned by the user\n ownerToNFTs[_user].push(_nftIds[i]);\n }\n }\n\n /**\n * @dev The getMintableCount function gets the number of NFTs owned by a user that have not yet been minted.\n *\n * This is a read-only function, meaning it doesn't modify the state of the blockchain.\n * It takes in the address of the user whose mintable count is being determined,\n * and returns the number of NFTs owned by the user that have not yet been minted.\n *\n * @param _user - The address of the user whose mintable count is being determined\n * @return count - The number of NFTs owned by the user that have not yet been minted\n */\n function getMintableCount(address _user) public view returns (uint256) {\n // Get an array of all NFT IDs owned by the user\n uint256[] memory nfts = ownerToNFTs[_user];\n // Initialize count to zero\n uint256 count = 0;\n // Loop through the array of NFT IDs\n for (uint256 i = 0; i < nfts.length; i++) {\n // Get the NFT ID at this index of the loop\n uint256 nftAId = nfts[i];\n // Check if the NFT has not yet been minted\n if (!nftMinted[nftAId]) {\n // If the NFT has not yet been minted, increment the mintable count\n count++;\n }\n }\n // Return the final mintable count\n return count;\n }\n\n /**\n * @dev The getMintableNftIds function gets an array of NFT IDs owned by a user that have not yet been minted.\n *\n * This is a read-only function, meaning it doesn't modify the state of the blockchain.\n * It takes in the address of the user whose mintable NFT IDs are being determined,\n * and returns an array of the NFT IDs owned by the user that have not yet been minted.\n *\n * @param _user - The address of the user whose mintable NFT IDs are being determined\n * @return mintableNftIds - An array of the NFT IDs owned by the user that have not yet been minted\n */\n function getMintableNftIds(\n address _user\n ) external view returns (uint256[] memory) {\n // Get an array of all NFT IDs owned by the user\n uint256[] memory nfts = ownerToNFTs[_user];\n // Initialize an array for mintable NFT IDs with the same length as the array of all NFT IDs\n uint256[] memory mintableNftIds = new uint256[](nfts.length);\n // Initialize an index counter to zero\n uint256 index = 0;\n // Loop through the array of NFT IDs\n for (uint256 i = 0; i < nfts.length; i++) {\n // Get the NFT ID at this index of the loop\n uint256 nftId = nfts[i];\n // Check if the NFT has not yet been minted\n if (!nftMinted[nftId]) {\n // If the NFT has not yet been minted, add it to the mintable NFT IDs array\n mintableNftIds[index] = nftId;\n // Increment the index counter\n index++;\n }\n }\n // Return the array of mintable NFT IDs\n return mintableNftIds;\n }\n}\n", + "sourceMap": "165:7183:11:-:0;;;1013:552;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1129:46;258:24;2072:4:0;1156:18:11;;1129:13;;;:46;;:::i;:::-;1253:44;2072:4:0;1264:18:11;;1284:12;:10;;;:12;;:::i;:::-;1253:10;;;:44;;:::i;:::-;1363:9;1358:109;1382:14;:21;1378:1;:25;1358:109;;;1418:42;258:24;1442:14;1457:1;1442:17;;;;;;;;:::i;:::-;;;;;;;;1418:10;;;:42;;:::i;:::-;1405:3;;;;:::i;:::-;;;1358:109;;;;1549:10;1533:3;;:27;;;;;;;;;;;;;;;;;;1013:552;;165:7183;;6492:247:0;6575:25;6603:18;6616:4;6603:12;;;:18;;:::i;:::-;6575:46;;6656:9;6631:6;:12;6638:4;6631:12;;;;;;;;;;;:22;;:34;;;;6722:9;6703:17;6697:4;6680:52;;;;;;;;;;6565:174;6492:247;;:::o;640:96:5:-;693:7;719:10;712:17;;640:96;:::o;6257:110:0:-;6335:25;6346:4;6352:7;6335:10;;;:25;;:::i;:::-;6257:110;;:::o;4008:129::-;4082:7;4108:6;:12;4115:4;4108:12;;;;;;;;;;;:22;;;4101:29;;4008:129;;;:::o;1978:166:1:-;2065:31;2082:4;2088:7;2065:16;;;;;:31;;:::i;:::-;2106;2129:7;2106:12;:18;2119:4;2106:18;;;;;;;;;;;:22;;;;;;:31;;;;:::i;:::-;;1978:166;;:::o;6861:233:0:-;6944:22;6952:4;6958:7;6944;;;:22;;:::i;:::-;6939:149;;7014:4;6982:6;:12;6989:4;6982:12;;;;;;;;;;;:20;;:29;7003:7;6982:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;7064:12;:10;;;:12;;:::i;:::-;7037:40;;7055:7;7037:40;;7049:4;7037:40;;;;;;;;;;6939:149;6861:233;;:::o;7612:150:9:-;7682:4;7705:50;7710:3;:10;;7746:5;7730:23;;7722:32;;7705:4;;;:50;;:::i;:::-;7698:57;;7612:150;;;;:::o;2909:145:0:-;2995:4;3018:6;:12;3025:4;3018:12;;;;;;;;;;;:20;;:29;3039:7;3018:29;;;;;;;;;;;;;;;;;;;;;;;;;3011:36;;2909:145;;;;:::o;1697:404:9:-;1760:4;1781:21;1791:3;1796:5;1781:9;;;:21;;:::i;:::-;1776:319;;1818:3;:11;;1835:5;1818:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1998:3;:11;;:18;;;;1976:3;:12;;:19;1989:5;1976:19;;;;;;;;;;;:40;;;;2037:4;2030:11;;;;1776:319;2079:5;2072:12;;1697:404;;;;;:::o;3738:127::-;3811:4;3857:1;3834:3;:12;;:19;3847:5;3834:19;;;;;;;;;;;;:24;;3827:31;;3738:127;;;;:::o;7:75:12:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:143::-;753:5;784:6;778:13;769:22;;800:33;827:5;800:33;:::i;:::-;696:143;;;;:::o;845:117::-;954:1;951;944:12;968:102;1009:6;1060:2;1056:7;1051:2;1044:5;1040:14;1036:28;1026:38;;968:102;;;:::o;1076:180::-;1124:77;1121:1;1114:88;1221:4;1218:1;1211:15;1245:4;1242:1;1235:15;1262:281;1345:27;1367:4;1345:27;:::i;:::-;1337:6;1333:40;1475:6;1463:10;1460:22;1439:18;1427:10;1424:34;1421:62;1418:88;;;1486:18;;:::i;:::-;1418:88;1526:10;1522:2;1515:22;1305:238;1262:281;;:::o;1549:129::-;1583:6;1610:20;;:::i;:::-;1600:30;;1639:33;1667:4;1659:6;1639:33;:::i;:::-;1549:129;;;:::o;1684:311::-;1761:4;1851:18;1843:6;1840:30;1837:56;;;1873:18;;:::i;:::-;1837:56;1923:4;1915:6;1911:17;1903:25;;1983:4;1977;1973:15;1965:23;;1684:311;;;:::o;2001:117::-;2110:1;2107;2100:12;2141:732;2248:5;2273:81;2289:64;2346:6;2289:64;:::i;:::-;2273:81;:::i;:::-;2264:90;;2374:5;2403:6;2396:5;2389:21;2437:4;2430:5;2426:16;2419:23;;2490:4;2482:6;2478:17;2470:6;2466:30;2519:3;2511:6;2508:15;2505:122;;;2538:79;;:::i;:::-;2505:122;2653:6;2636:231;2670:6;2665:3;2662:15;2636:231;;;2745:3;2774:48;2818:3;2806:10;2774:48;:::i;:::-;2769:3;2762:61;2852:4;2847:3;2843:14;2836:21;;2712:155;2696:4;2691:3;2687:14;2680:21;;2636:231;;;2640:21;2254:619;;2141:732;;;;;:::o;2896:385::-;2978:5;3027:3;3020:4;3012:6;3008:17;3004:27;2994:122;;3035:79;;:::i;:::-;2994:122;3145:6;3139:13;3170:105;3271:3;3263:6;3256:4;3248:6;3244:17;3170:105;:::i;:::-;3161:114;;2984:297;2896:385;;;;:::o;3287:710::-;3391:6;3399;3448:2;3436:9;3427:7;3423:23;3419:32;3416:119;;;3454:79;;:::i;:::-;3416:119;3574:1;3599:64;3655:7;3646:6;3635:9;3631:22;3599:64;:::i;:::-;3589:74;;3545:128;3733:2;3722:9;3718:18;3712:25;3764:18;3756:6;3753:30;3750:117;;;3786:79;;:::i;:::-;3750:117;3891:89;3972:7;3963:6;3952:9;3948:22;3891:89;:::i;:::-;3881:99;;3683:307;3287:710;;;;;:::o;4003:180::-;4051:77;4048:1;4041:88;4148:4;4145:1;4138:15;4172:4;4169:1;4162:15;4189:180;4237:77;4234:1;4227:88;4334:4;4331:1;4324:15;4358:4;4355:1;4348:15;4375:77;4412:7;4441:5;4430:16;;4375:77;;;:::o;4458:233::-;4497:3;4520:24;4538:5;4520:24;:::i;:::-;4511:33;;4566:66;4559:5;4556:77;4553:103;;;4636:18;;:::i;:::-;4553:103;4683:1;4676:5;4672:13;4665:20;;4458:233;;;:::o;165:7183:11:-;;;;;;;", + "deployedSourceMap": "165:7183:11:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;634:212:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6405:941:11;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5161:649;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4008:129:0;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4387:145;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5404:214;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;436:20:11;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;220:62;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4276:317;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1431:151:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2909:145:0;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2597:992:11;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2027:49:0;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;316:48:11;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1750:140:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4766:147:0;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;390:41:11;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;634:212:1;719:4;757:42;742:57;;;:11;:57;;;;:97;;;;803:36;827:11;803:23;:36::i;:::-;742:97;735:104;;634:212;;;:::o;6405:941:11:-;6478:16;6555:21;6579:11;:18;6591:5;6579:18;;;;;;;;;;;;;;;6555:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6700:31;6748:4;:11;6734:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6700:60;;6809:13;6878:9;6873:398;6897:4;:11;6893:1;:15;6873:398;;;6973:13;6989:4;6994:1;6989:7;;;;;;;;:::i;:::-;;;;;;;;6973:23;;7059:9;:16;7069:5;7059:16;;;;;;;;;;;;;;;;;;;;;7054:211;;7195:5;7171:14;7186:5;7171:21;;;;;;;;:::i;:::-;;;;;;;:29;;;;;7249:7;;;;;:::i;:::-;;;;7054:211;6915:356;6910:3;;;;;:::i;:::-;;;;6873:398;;;;7327:14;7320:21;;;;;6405:941;;;:::o;5161:649::-;5223:7;5291:21;5315:11;:18;5327:5;5315:18;;;;;;;;;;;;;;;5291:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5371:13;5440:9;5435:314;5459:4;:11;5455:1;:15;5435:314;;;5535:14;5552:4;5557:1;5552:7;;;;;;;;:::i;:::-;;;;;;;;5535:24;;5622:9;:17;5632:6;5622:17;;;;;;;;;;;;;;;;;;;;;5617:126;;5727:7;;;;;:::i;:::-;;;;5617:126;5477:272;5472:3;;;;;:::i;:::-;;;;5435:314;;;;5800:5;5793:12;;;;5161:649;;;:::o;4008:129:0:-;4082:7;4108:6;:12;4115:4;4108:12;;;;;;;;;;;:22;;;4101:29;;4008:129;;;:::o;4387:145::-;4470:18;4483:4;4470:12;:18::i;:::-;2505:30;2516:4;2522:12;:10;:12::i;:::-;2505:10;:30::i;:::-;4500:25:::1;4511:4;4517:7;4500:10;:25::i;:::-;4387:145:::0;;;:::o;5404:214::-;5510:12;:10;:12::i;:::-;5499:23;;:7;:23;;;5491:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;5585:26;5597:4;5603:7;5585:11;:26::i;:::-;5404:214;;:::o;436:20:11:-;;;;;;;;;;;;;:::o;220:62::-;258:24;220:62;:::o;4276:317::-;1912:37;258:24;1936:12;:10;:12::i;:::-;1912:10;:37::i;:::-;4424:9:::1;4419:170;4443:7;;:14;;4439:1;:18;4419:170;;;4547:11;:18;4559:5;4547:18;;;;;;;;;;;;;;;4571:7;;4579:1;4571:10;;;;;;;:::i;:::-;;;;;;;;4547:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4459:3;;;;;:::i;:::-;;;;4419:170;;;;4276:317:::0;;;:::o;1431:151:1:-;1521:7;1547:28;1569:5;1547:12;:18;1560:4;1547:18;;;;;;;;;;;:21;;:28;;;;:::i;:::-;1540:35;;1431:151;;;;:::o;2909:145:0:-;2995:4;3018:6;:12;3025:4;3018:12;;;;;;;;;;;:20;;:29;3039:7;3018:29;;;;;;;;;;;;;;;;;;;;;;;;;3011:36;;2909:145;;;;:::o;2597:992:11:-;1912:37;258:24;1936:12;:10;:12::i;:::-;1912:10;:37::i;:::-;2740:23:::1;2757:5;2740:16;:23::i;:::-;2731:5;:32;;2723:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2848:21;2872:11;:18;2884:5;2872:18;;;;;;;;;;;;;;;2848:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2924:13;2947:26:::0;2990:5:::1;2976:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2947:49;;3050:9;3045:366;3069:4;:11;3065:1;:15;3045:366;;;3095:14;3112:4;3117:1;3112:7;;;;;;;;:::i;:::-;;;;;;;;3095:24;;3170:9;:17;3180:6;3170:17;;;;;;;;;;;;;;;;;;;;;3169:18;:35;;;;;3199:5;3191;:13;3169:35;3165:240;;;3293:6;3274:9;3284:5;3274:16;;;;;;;;:::i;:::-;;;;;;;:25;;;::::0;::::1;3329:4;3309:9;:17;3319:6;3309:17;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;3389:7;;;;;:::i;:::-;;;;3165:240;3087:324;3082:3;;;;;:::i;:::-;;;;3045:366;;;;3416:24;3443:3;;;;;;;;;;;:13;;;3457:5;3464;3443:27;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3416:54;;3559:3;;;;;;;;;;;3537:47;;3544:5;3537:47;;;3565:9;3576:7;3537:47;;;;;;;:::i;:::-;;;;;;;;2668:921;;;;2597:992:::0;;:::o;2027:49:0:-;2072:4;2027:49;;;:::o;316:48:11:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1750:140:1:-;1830:7;1856:27;:12;:18;1869:4;1856:18;;;;;;;;;;;:25;:27::i;:::-;1849:34;;1750:140;;;:::o;4766:147:0:-;4850:18;4863:4;4850:12;:18::i;:::-;2505:30;2516:4;2522:12;:10;:12::i;:::-;2505:10;:30::i;:::-;4880:26:::1;4892:4;4898:7;4880:11;:26::i;:::-;4766:147:::0;;;:::o;390:41:11:-;;;;;;;;;;;;;;;;;;;;;;:::o;6861:233:0:-;6944:22;6952:4;6958:7;6944;:22::i;:::-;6939:149;;7014:4;6982:6;:12;6989:4;6982:12;;;;;;;;;;;:20;;:29;7003:7;6982:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;7064:12;:10;:12::i;:::-;7037:40;;7055:7;7037:40;;7049:4;7037:40;;;;;;;;;;6939:149;6861:233;;:::o;7612:150:9:-;7682:4;7705:50;7710:3;:10;;7746:5;7730:23;;7722:32;;7705:4;:50::i;:::-;7698:57;;7612:150;;;;:::o;2620:202:0:-;2705:4;2743:32;2728:47;;;:11;:47;;;;:87;;;;2779:36;2803:11;2779:23;:36::i;:::-;2728:87;2721:94;;2620:202;;;:::o;640:96:5:-;693:7;719:10;712:17;;640:96;:::o;3335:492:0:-;3423:22;3431:4;3437:7;3423;:22::i;:::-;3418:403;;3606:41;3634:7;3606:41;;3644:2;3606:19;:41::i;:::-;3718:38;3746:4;3738:13;;3753:2;3718:19;:38::i;:::-;3513:265;;;;;;;;;:::i;:::-;;;;;;;;;;;;;3461:349;;;;;;;;;;;:::i;:::-;;;;;;;;3418:403;3335:492;;:::o;1978:166:1:-;2065:31;2082:4;2088:7;2065:16;:31::i;:::-;2106;2129:7;2106:12;:18;2119:4;2106:18;;;;;;;;;;;:22;;:31;;;;:::i;:::-;;1978:166;;:::o;2233:171::-;2321:32;2339:4;2345:7;2321:17;:32::i;:::-;2363:34;2389:7;2363:12;:18;2376:4;2363:18;;;;;;;;;;;:25;;:34;;;;:::i;:::-;;2233:171;;:::o;8870:156:9:-;8944:7;8994:22;8998:3;:10;;9010:5;8994:3;:22::i;:::-;8986:31;;8963:56;;8870:156;;;;:::o;8413:115::-;8476:7;8502:19;8510:3;:10;;8502:7;:19::i;:::-;8495:26;;8413:115;;;:::o;1697:404::-;1760:4;1781:21;1791:3;1796:5;1781:9;:21::i;:::-;1776:319;;1818:3;:11;;1835:5;1818:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1998:3;:11;;:18;;;;1976:3;:12;;:19;1989:5;1976:19;;;;;;;;;;;:40;;;;2037:4;2030:11;;;;1776:319;2079:5;2072:12;;1697:404;;;;;:::o;829:155:7:-;914:4;952:25;937:40;;;:11;:40;;;;930:47;;829:155;;;:::o;1588:441:6:-;1663:13;1688:19;1733:1;1724:6;1720:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;1710:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1688:47;;1745:15;:6;1752:1;1745:9;;;;;;;;:::i;:::-;;;;;:15;;;;;;;;;;;1770;:6;1777:1;1770:9;;;;;;;;:::i;:::-;;;;;:15;;;;;;;;;;;1800:9;1825:1;1816:6;1812:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;1800:26;;1795:132;1832:1;1828;:5;1795:132;;;1866:12;1887:3;1879:5;:11;1866:25;;;;;;;:::i;:::-;;;;;1854:6;1861:1;1854:9;;;;;;;;:::i;:::-;;;;;:37;;;;;;;;;;;1915:1;1905:11;;;;;1835:3;;;;:::i;:::-;;;1795:132;;;;1953:1;1944:5;:10;1936:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;2015:6;2001:21;;;1588:441;;;;:::o;7219:234:0:-;7302:22;7310:4;7316:7;7302;:22::i;:::-;7298:149;;;7372:5;7340:6;:12;7347:4;7340:12;;;;;;;;;;;:20;;:29;7361:7;7340:29;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;7423:12;:10;:12::i;:::-;7396:40;;7414:7;7396:40;;7408:4;7396:40;;;;;;;;;;7298:149;7219:234;;:::o;7930:156:9:-;8003:4;8026:53;8034:3;:10;;8070:5;8054:23;;8046:32;;8026:7;:53::i;:::-;8019:60;;7930:156;;;;:::o;4395:118::-;4462:7;4488:3;:11;;4500:5;4488:18;;;;;;;;:::i;:::-;;;;;;;;;;4481:25;;4395:118;;;;:::o;3946:107::-;4002:7;4028:3;:11;;:18;;;;4021:25;;3946:107;;;:::o;3738:127::-;3811:4;3857:1;3834:3;:12;;:19;3847:5;3834:19;;;;;;;;;;;;:24;;3827:31;;3738:127;;;;:::o;2269:1388::-;2335:4;2451:18;2472:3;:12;;:19;2485:5;2472:19;;;;;;;;;;;;2451:40;;2520:1;2506:10;:15;2502:1149;;2875:21;2912:1;2899:10;:14;;;;:::i;:::-;2875:38;;2927:17;2968:1;2947:3;:11;;:18;;;;:22;;;;:::i;:::-;2927:42;;3001:13;2988:9;:26;2984:398;;3034:17;3054:3;:11;;3066:9;3054:22;;;;;;;;:::i;:::-;;;;;;;;;;3034:42;;3205:9;3176:3;:11;;3188:13;3176:26;;;;;;;;:::i;:::-;;;;;;;;;:38;;;;3314:10;3288:3;:12;;:23;3301:9;3288:23;;;;;;;;;;;:36;;;;3016:366;2984:398;3460:3;:11;;:17;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3552:3;:12;;:19;3565:5;3552:19;;;;;;;;;;;3545:26;;;3593:4;3586:11;;;;;;;2502:1149;3635:5;3628:12;;;2269:1388;;;;;:::o;7:75:12:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:126::-;1555:7;1595:42;1588:5;1584:54;1573:65;;1518:126;;;:::o;1650:96::-;1687:7;1716:24;1734:5;1716:24;:::i;:::-;1705:35;;1650:96;;;:::o;1752:122::-;1825:24;1843:5;1825:24;:::i;:::-;1818:5;1815:35;1805:63;;1864:1;1861;1854:12;1805:63;1752:122;:::o;1880:139::-;1926:5;1964:6;1951:20;1942:29;;1980:33;2007:5;1980:33;:::i;:::-;1880:139;;;;:::o;2025:329::-;2084:6;2133:2;2121:9;2112:7;2108:23;2104:32;2101:119;;;2139:79;;:::i;:::-;2101:119;2259:1;2284:53;2329:7;2320:6;2309:9;2305:22;2284:53;:::i;:::-;2274:63;;2230:117;2025:329;;;;:::o;2360:114::-;2427:6;2461:5;2455:12;2445:22;;2360:114;;;:::o;2480:184::-;2579:11;2613:6;2608:3;2601:19;2653:4;2648:3;2644:14;2629:29;;2480:184;;;;:::o;2670:132::-;2737:4;2760:3;2752:11;;2790:4;2785:3;2781:14;2773:22;;2670:132;;;:::o;2808:77::-;2845:7;2874:5;2863:16;;2808:77;;;:::o;2891:108::-;2968:24;2986:5;2968:24;:::i;:::-;2963:3;2956:37;2891:108;;:::o;3005:179::-;3074:10;3095:46;3137:3;3129:6;3095:46;:::i;:::-;3173:4;3168:3;3164:14;3150:28;;3005:179;;;;:::o;3190:113::-;3260:4;3292;3287:3;3283:14;3275:22;;3190:113;;;:::o;3339:732::-;3458:3;3487:54;3535:5;3487:54;:::i;:::-;3557:86;3636:6;3631:3;3557:86;:::i;:::-;3550:93;;3667:56;3717:5;3667:56;:::i;:::-;3746:7;3777:1;3762:284;3787:6;3784:1;3781:13;3762:284;;;3863:6;3857:13;3890:63;3949:3;3934:13;3890:63;:::i;:::-;3883:70;;3976:60;4029:6;3976:60;:::i;:::-;3966:70;;3822:224;3809:1;3806;3802:9;3797:14;;3762:284;;;3766:14;4062:3;4055:10;;3463:608;;;3339:732;;;;:::o;4077:373::-;4220:4;4258:2;4247:9;4243:18;4235:26;;4307:9;4301:4;4297:20;4293:1;4282:9;4278:17;4271:47;4335:108;4438:4;4429:6;4335:108;:::i;:::-;4327:116;;4077:373;;;;:::o;4456:118::-;4543:24;4561:5;4543:24;:::i;:::-;4538:3;4531:37;4456:118;;:::o;4580:222::-;4673:4;4711:2;4700:9;4696:18;4688:26;;4724:71;4792:1;4781:9;4777:17;4768:6;4724:71;:::i;:::-;4580:222;;;;:::o;4808:77::-;4845:7;4874:5;4863:16;;4808:77;;;:::o;4891:122::-;4964:24;4982:5;4964:24;:::i;:::-;4957:5;4954:35;4944:63;;5003:1;5000;4993:12;4944:63;4891:122;:::o;5019:139::-;5065:5;5103:6;5090:20;5081:29;;5119:33;5146:5;5119:33;:::i;:::-;5019:139;;;;:::o;5164:329::-;5223:6;5272:2;5260:9;5251:7;5247:23;5243:32;5240:119;;;5278:79;;:::i;:::-;5240:119;5398:1;5423:53;5468:7;5459:6;5448:9;5444:22;5423:53;:::i;:::-;5413:63;;5369:117;5164:329;;;;:::o;5499:118::-;5586:24;5604:5;5586:24;:::i;:::-;5581:3;5574:37;5499:118;;:::o;5623:222::-;5716:4;5754:2;5743:9;5739:18;5731:26;;5767:71;5835:1;5824:9;5820:17;5811:6;5767:71;:::i;:::-;5623:222;;;;:::o;5851:474::-;5919:6;5927;5976:2;5964:9;5955:7;5951:23;5947:32;5944:119;;;5982:79;;:::i;:::-;5944:119;6102:1;6127:53;6172:7;6163:6;6152:9;6148:22;6127:53;:::i;:::-;6117:63;;6073:117;6229:2;6255:53;6300:7;6291:6;6280:9;6276:22;6255:53;:::i;:::-;6245:63;;6200:118;5851:474;;;;;:::o;6331:60::-;6359:3;6380:5;6373:12;;6331:60;;;:::o;6397:142::-;6447:9;6480:53;6498:34;6507:24;6525:5;6507:24;:::i;:::-;6498:34;:::i;:::-;6480:53;:::i;:::-;6467:66;;6397:142;;;:::o;6545:126::-;6595:9;6628:37;6659:5;6628:37;:::i;:::-;6615:50;;6545:126;;;:::o;6677:144::-;6745:9;6778:37;6809:5;6778:37;:::i;:::-;6765:50;;6677:144;;;:::o;6827:167::-;6932:55;6981:5;6932:55;:::i;:::-;6927:3;6920:68;6827:167;;:::o;7000:258::-;7111:4;7149:2;7138:9;7134:18;7126:26;;7162:89;7248:1;7237:9;7233:17;7224:6;7162:89;:::i;:::-;7000:258;;;;:::o;7264:117::-;7373:1;7370;7363:12;7387:117;7496:1;7493;7486:12;7510:117;7619:1;7616;7609:12;7650:568;7723:8;7733:6;7783:3;7776:4;7768:6;7764:17;7760:27;7750:122;;7791:79;;:::i;:::-;7750:122;7904:6;7891:20;7881:30;;7934:18;7926:6;7923:30;7920:117;;;7956:79;;:::i;:::-;7920:117;8070:4;8062:6;8058:17;8046:29;;8124:3;8116:4;8108:6;8104:17;8094:8;8090:32;8087:41;8084:128;;;8131:79;;:::i;:::-;8084:128;7650:568;;;;;:::o;8224:704::-;8319:6;8327;8335;8384:2;8372:9;8363:7;8359:23;8355:32;8352:119;;;8390:79;;:::i;:::-;8352:119;8510:1;8535:53;8580:7;8571:6;8560:9;8556:22;8535:53;:::i;:::-;8525:63;;8481:117;8665:2;8654:9;8650:18;8637:32;8696:18;8688:6;8685:30;8682:117;;;8718:79;;:::i;:::-;8682:117;8831:80;8903:7;8894:6;8883:9;8879:22;8831:80;:::i;:::-;8813:98;;;;8608:313;8224:704;;;;;:::o;8934:122::-;9007:24;9025:5;9007:24;:::i;:::-;9000:5;8997:35;8987:63;;9046:1;9043;9036:12;8987:63;8934:122;:::o;9062:139::-;9108:5;9146:6;9133:20;9124:29;;9162:33;9189:5;9162:33;:::i;:::-;9062:139;;;;:::o;9207:474::-;9275:6;9283;9332:2;9320:9;9311:7;9307:23;9303:32;9300:119;;;9338:79;;:::i;:::-;9300:119;9458:1;9483:53;9528:7;9519:6;9508:9;9504:22;9483:53;:::i;:::-;9473:63;;9429:117;9585:2;9611:53;9656:7;9647:6;9636:9;9632:22;9611:53;:::i;:::-;9601:63;;9556:118;9207:474;;;;;:::o;9687:118::-;9774:24;9792:5;9774:24;:::i;:::-;9769:3;9762:37;9687:118;;:::o;9811:222::-;9904:4;9942:2;9931:9;9927:18;9919:26;;9955:71;10023:1;10012:9;10008:17;9999:6;9955:71;:::i;:::-;9811:222;;;;:::o;10039:474::-;10107:6;10115;10164:2;10152:9;10143:7;10139:23;10135:32;10132:119;;;10170:79;;:::i;:::-;10132:119;10290:1;10315:53;10360:7;10351:6;10340:9;10336:22;10315:53;:::i;:::-;10305:63;;10261:117;10417:2;10443:53;10488:7;10479:6;10468:9;10464:22;10443:53;:::i;:::-;10433:63;;10388:118;10039:474;;;;;:::o;10519:329::-;10578:6;10627:2;10615:9;10606:7;10602:23;10598:32;10595:119;;;10633:79;;:::i;:::-;10595:119;10753:1;10778:53;10823:7;10814:6;10803:9;10799:22;10778:53;:::i;:::-;10768:63;;10724:117;10519:329;;;;:::o;10854:180::-;10902:77;10899:1;10892:88;10999:4;10996:1;10989:15;11023:4;11020:1;11013:15;11040:180;11088:77;11085:1;11078:88;11185:4;11182:1;11175:15;11209:4;11206:1;11199:15;11226:180;11274:77;11271:1;11264:88;11371:4;11368:1;11361:15;11395:4;11392:1;11385:15;11412:233;11451:3;11474:24;11492:5;11474:24;:::i;:::-;11465:33;;11520:66;11513:5;11510:77;11507:103;;;11590:18;;:::i;:::-;11507:103;11637:1;11630:5;11626:13;11619:20;;11412:233;;;:::o;11651:169::-;11735:11;11769:6;11764:3;11757:19;11809:4;11804:3;11800:14;11785:29;;11651:169;;;;:::o;11826:234::-;11966:34;11962:1;11954:6;11950:14;11943:58;12035:17;12030:2;12022:6;12018:15;12011:42;11826:234;:::o;12066:366::-;12208:3;12229:67;12293:2;12288:3;12229:67;:::i;:::-;12222:74;;12305:93;12394:3;12305:93;:::i;:::-;12423:2;12418:3;12414:12;12407:19;;12066:366;;;:::o;12438:419::-;12604:4;12642:2;12631:9;12627:18;12619:26;;12691:9;12685:4;12681:20;12677:1;12666:9;12662:17;12655:47;12719:131;12845:4;12719:131;:::i;:::-;12711:139;;12438:419;;;:::o;12863:178::-;13003:30;12999:1;12991:6;12987:14;12980:54;12863:178;:::o;13047:366::-;13189:3;13210:67;13274:2;13269:3;13210:67;:::i;:::-;13203:74;;13286:93;13375:3;13286:93;:::i;:::-;13404:2;13399:3;13395:12;13388:19;;13047:366;;;:::o;13419:419::-;13585:4;13623:2;13612:9;13608:18;13600:26;;13672:9;13666:4;13662:20;13658:1;13647:9;13643:17;13636:47;13700:131;13826:4;13700:131;:::i;:::-;13692:139;;13419:419;;;:::o;13844:332::-;13965:4;14003:2;13992:9;13988:18;13980:26;;14016:71;14084:1;14073:9;14069:17;14060:6;14016:71;:::i;:::-;14097:72;14165:2;14154:9;14150:18;14141:6;14097:72;:::i;:::-;13844:332;;;;;:::o;14182:102::-;14223:6;14274:2;14270:7;14265:2;14258:5;14254:14;14250:28;14240:38;;14182:102;;;:::o;14290:281::-;14373:27;14395:4;14373:27;:::i;:::-;14365:6;14361:40;14503:6;14491:10;14488:22;14467:18;14455:10;14452:34;14449:62;14446:88;;;14514:18;;:::i;:::-;14446:88;14554:10;14550:2;14543:22;14333:238;14290:281;;:::o;14577:129::-;14611:6;14638:20;;:::i;:::-;14628:30;;14667:33;14695:4;14687:6;14667:33;:::i;:::-;14577:129;;;:::o;14712:311::-;14789:4;14879:18;14871:6;14868:30;14865:56;;;14901:18;;:::i;:::-;14865:56;14951:4;14943:6;14939:17;14931:25;;15011:4;15005;15001:15;14993:23;;14712:311;;;:::o;15029:143::-;15086:5;15117:6;15111:13;15102:22;;15133:33;15160:5;15133:33;:::i;:::-;15029:143;;;;:::o;15195:732::-;15302:5;15327:81;15343:64;15400:6;15343:64;:::i;:::-;15327:81;:::i;:::-;15318:90;;15428:5;15457:6;15450:5;15443:21;15491:4;15484:5;15480:16;15473:23;;15544:4;15536:6;15532:17;15524:6;15520:30;15573:3;15565:6;15562:15;15559:122;;;15592:79;;:::i;:::-;15559:122;15707:6;15690:231;15724:6;15719:3;15716:15;15690:231;;;15799:3;15828:48;15872:3;15860:10;15828:48;:::i;:::-;15823:3;15816:61;15906:4;15901:3;15897:14;15890:21;;15766:155;15750:4;15745:3;15741:14;15734:21;;15690:231;;;15694:21;15308:619;;15195:732;;;;;:::o;15950:385::-;16032:5;16081:3;16074:4;16066:6;16062:17;16058:27;16048:122;;16089:79;;:::i;:::-;16048:122;16199:6;16193:13;16224:105;16325:3;16317:6;16310:4;16302:6;16298:17;16224:105;:::i;:::-;16215:114;;16038:297;15950:385;;;;:::o;16341:554::-;16436:6;16485:2;16473:9;16464:7;16460:23;16456:32;16453:119;;;16491:79;;:::i;:::-;16453:119;16632:1;16621:9;16617:17;16611:24;16662:18;16654:6;16651:30;16648:117;;;16684:79;;:::i;:::-;16648:117;16789:89;16870:7;16861:6;16850:9;16846:22;16789:89;:::i;:::-;16779:99;;16582:306;16341:554;;;;:::o;16901:634::-;17122:4;17160:2;17149:9;17145:18;17137:26;;17209:9;17203:4;17199:20;17195:1;17184:9;17180:17;17173:47;17237:108;17340:4;17331:6;17237:108;:::i;:::-;17229:116;;17392:9;17386:4;17382:20;17377:2;17366:9;17362:18;17355:48;17420:108;17523:4;17514:6;17420:108;:::i;:::-;17412:116;;16901:634;;;;;:::o;17541:148::-;17643:11;17680:3;17665:18;;17541:148;;;;:::o;17695:173::-;17835:25;17831:1;17823:6;17819:14;17812:49;17695:173;:::o;17874:402::-;18034:3;18055:85;18137:2;18132:3;18055:85;:::i;:::-;18048:92;;18149:93;18238:3;18149:93;:::i;:::-;18267:2;18262:3;18258:12;18251:19;;17874:402;;;:::o;18282:99::-;18334:6;18368:5;18362:12;18352:22;;18282:99;;;:::o;18387:307::-;18455:1;18465:113;18479:6;18476:1;18473:13;18465:113;;;18564:1;18559:3;18555:11;18549:18;18545:1;18540:3;18536:11;18529:39;18501:2;18498:1;18494:10;18489:15;;18465:113;;;18596:6;18593:1;18590:13;18587:101;;;18676:1;18667:6;18662:3;18658:16;18651:27;18587:101;18436:258;18387:307;;;:::o;18700:377::-;18806:3;18834:39;18867:5;18834:39;:::i;:::-;18889:89;18971:6;18966:3;18889:89;:::i;:::-;18882:96;;18987:52;19032:6;19027:3;19020:4;19013:5;19009:16;18987:52;:::i;:::-;19064:6;19059:3;19055:16;19048:23;;18810:267;18700:377;;;;:::o;19083:167::-;19223:19;19219:1;19211:6;19207:14;19200:43;19083:167;:::o;19256:402::-;19416:3;19437:85;19519:2;19514:3;19437:85;:::i;:::-;19430:92;;19531:93;19620:3;19531:93;:::i;:::-;19649:2;19644:3;19640:12;19633:19;;19256:402;;;:::o;19664:967::-;20046:3;20068:148;20212:3;20068:148;:::i;:::-;20061:155;;20233:95;20324:3;20315:6;20233:95;:::i;:::-;20226:102;;20345:148;20489:3;20345:148;:::i;:::-;20338:155;;20510:95;20601:3;20592:6;20510:95;:::i;:::-;20503:102;;20622:3;20615:10;;19664:967;;;;;:::o;20637:364::-;20725:3;20753:39;20786:5;20753:39;:::i;:::-;20808:71;20872:6;20867:3;20808:71;:::i;:::-;20801:78;;20888:52;20933:6;20928:3;20921:4;20914:5;20910:16;20888:52;:::i;:::-;20965:29;20987:6;20965:29;:::i;:::-;20960:3;20956:39;20949:46;;20729:272;20637:364;;;;:::o;21007:313::-;21120:4;21158:2;21147:9;21143:18;21135:26;;21207:9;21201:4;21197:20;21193:1;21182:9;21178:17;21171:47;21235:78;21308:4;21299:6;21235:78;:::i;:::-;21227:86;;21007:313;;;;:::o;21326:348::-;21366:7;21389:20;21407:1;21389:20;:::i;:::-;21384:25;;21423:20;21441:1;21423:20;:::i;:::-;21418:25;;21611:1;21543:66;21539:74;21536:1;21533:81;21528:1;21521:9;21514:17;21510:105;21507:131;;;21618:18;;:::i;:::-;21507:131;21666:1;21663;21659:9;21648:20;;21326:348;;;;:::o;21680:305::-;21720:3;21739:20;21757:1;21739:20;:::i;:::-;21734:25;;21773:20;21791:1;21773:20;:::i;:::-;21768:25;;21927:1;21859:66;21855:74;21852:1;21849:81;21846:107;;;21933:18;;:::i;:::-;21846:107;21977:1;21974;21970:9;21963:16;;21680:305;;;;:::o;21991:171::-;22030:3;22053:24;22071:5;22053:24;:::i;:::-;22044:33;;22099:4;22092:5;22089:15;22086:41;;;22107:18;;:::i;:::-;22086:41;22154:1;22147:5;22143:13;22136:20;;21991:171;;;:::o;22168:182::-;22308:34;22304:1;22296:6;22292:14;22285:58;22168:182;:::o;22356:366::-;22498:3;22519:67;22583:2;22578:3;22519:67;:::i;:::-;22512:74;;22595:93;22684:3;22595:93;:::i;:::-;22713:2;22708:3;22704:12;22697:19;;22356:366;;;:::o;22728:419::-;22894:4;22932:2;22921:9;22917:18;22909:26;;22981:9;22975:4;22971:20;22967:1;22956:9;22952:17;22945:47;23009:131;23135:4;23009:131;:::i;:::-;23001:139;;22728:419;;;:::o;23153:191::-;23193:4;23213:20;23231:1;23213:20;:::i;:::-;23208:25;;23247:20;23265:1;23247:20;:::i;:::-;23242:25;;23286:1;23283;23280:8;23277:34;;;23291:18;;:::i;:::-;23277:34;23336:1;23333;23329:9;23321:17;;23153:191;;;;:::o;23350:180::-;23398:77;23395:1;23388:88;23495:4;23492:1;23485:15;23519:4;23516:1;23509:15", + "source": "// SPDX-License-Identifier: MIT\npragma solidity 0.8.10;\n\nimport \"@openzeppelin/contracts/access/AccessControlEnumerable.sol\";\nimport \"../interfaces/IBEERC721.sol\";\n\ncontract NftDistributor is AccessControlEnumerable {\n bytes32 public constant MANAGE_ROLE = keccak256(\"MANAGE_ROLE\");\n\n // user address => nft ids\n mapping(address => uint256[]) public ownerToNFTs;\n // nft id => minted\n mapping(uint256 => bool) public nftMinted;\n\n IBEERC721 public nft;\n\n event Minted(\n address indexed user,\n address indexed nft,\n uint256[] nftSIds,\n uint256[] nftTIds\n );\n\n /**\n * @dev Contract constructor.\n *\n * Initializes the contract with the specified addresses and sets the admin and management roles.\n *\n * Parameters:\n * - _nftTarget: The address of NFT that will be minted by this contract. Need MINTER_ROLE\n * - _nftSource: The address of the source NFT that will check if user has mint permission.\n * - _manageAddress: The address that will have the MANAGE_ROLE assigned.\n */\n constructor(address _nftTarget, address[] memory _manageAddress) {\n // Set up the ADMIN_ROLE and MANAGE_ROLE\n _setRoleAdmin(MANAGE_ROLE, DEFAULT_ADMIN_ROLE);\n\n // Grant the ADMIN_ROLE to the deployer and to the contract itself\n _setupRole(DEFAULT_ADMIN_ROLE, _msgSender());\n\n // Grant the MANAGE_ROLE to the specified address\n for (uint256 i = 0; i < _manageAddress.length; ++i) {\n _setupRole(MANAGE_ROLE, _manageAddress[i]);\n }\n\n // Initialize the nft contract with IBEERC721 interface\n nft = IBEERC721(_nftTarget);\n }\n\n /**\n * @dev Modifier that checks if the caller has the MANAGE_ROLE.\n *\n * The function uses the _checkRole() function from the AccessControl library.\n * If the check is successful, the code defined by the function that uses this modifier is executed.\n */\n modifier onlyManager() {\n // Check if the caller has the MANAGE_ROLE\n _checkRole(MANAGE_ROLE, _msgSender());\n // If the check is successful, execute the code in the function that uses this modifier\n _;\n }\n\n /**\n * @dev The mintToUser function mints NFTs to a given user.\n *\n * Only functions called by an address with the MANAGE_ROLE permission can access this function.\n * The function takes an array of nftIds and checks that there are enough mintable NFTs for the user.\n * It then loops through the user's owned NFTs, checking if each is mintable, and if so, adds it to a list to be minted.\n * Then it emits the Minted event with details of the operation.\n *\n * @param _user - The address of the user receiving the NFTs\n */\n function mintToUser(address _user, uint256 count) external onlyManager {\n // Check that there are enough mintable NFTs\n require(count <= getMintableCount(_user), \"Mintable count is not enough\");\n // Get the array of the user's owned NFTs\n uint256[] memory nfts = ownerToNFTs[_user];\n // Initialize variables\n uint256 index = 0;\n uint256[] memory nftSource = new uint256[](count);\n\n // Loop through the user's owned NFTs\n for (uint256 i = 0; i < nfts.length; i++) {\n uint256 nftSId = nfts[i];\n // Check if the NFT is mintable\n if (!nftMinted[nftSId] && index < count) {\n // Add the NFT's source ID to the list of sources\n nftSource[index] = nftSId;\n nftMinted[nftSId] = true;\n // Mint the NFT to the user's address\n index++;\n }\n }\n uint256[] memory _nftIds = nft.batchMint(_user, count);\n // Emit event with details of the minting operation\n emit Minted(_user, address(nft), nftSource, _nftIds);\n }\n\n /**\n * @dev The addNFTData function adds an array of NFT IDs to the list of NFT IDs owned by a user.\n * mintToUser method would check if target user had permission to mint NFTs.\n *\n * Only functions called by an address with the MANAGE_ROLE permission can access this function.\n * The function takes in the address of the user and an array of NFT IDs. It then loops through the array\n * of NFT IDs, and adds each one to the end of the array of NFTs owned by that user to update their ownership data.\n *\n * @param _user - The address of the user being updated with new NFT data\n * @param _nftIds - An array of NFT IDs being added to the user's NFT data\n */\n function addNFTData(\n address _user,\n uint256[] calldata _nftIds\n ) external onlyManager {\n // Loop through the array of NFT IDs\n for (uint256 i = 0; i < _nftIds.length; i++) {\n // Add each NFT ID to the end of the array of NFTs owned by the user\n ownerToNFTs[_user].push(_nftIds[i]);\n }\n }\n\n /**\n * @dev The getMintableCount function gets the number of NFTs owned by a user that have not yet been minted.\n *\n * This is a read-only function, meaning it doesn't modify the state of the blockchain.\n * It takes in the address of the user whose mintable count is being determined,\n * and returns the number of NFTs owned by the user that have not yet been minted.\n *\n * @param _user - The address of the user whose mintable count is being determined\n * @return count - The number of NFTs owned by the user that have not yet been minted\n */\n function getMintableCount(address _user) public view returns (uint256) {\n // Get an array of all NFT IDs owned by the user\n uint256[] memory nfts = ownerToNFTs[_user];\n // Initialize count to zero\n uint256 count = 0;\n // Loop through the array of NFT IDs\n for (uint256 i = 0; i < nfts.length; i++) {\n // Get the NFT ID at this index of the loop\n uint256 nftAId = nfts[i];\n // Check if the NFT has not yet been minted\n if (!nftMinted[nftAId]) {\n // If the NFT has not yet been minted, increment the mintable count\n count++;\n }\n }\n // Return the final mintable count\n return count;\n }\n\n /**\n * @dev The getMintableNftIds function gets an array of NFT IDs owned by a user that have not yet been minted.\n *\n * This is a read-only function, meaning it doesn't modify the state of the blockchain.\n * It takes in the address of the user whose mintable NFT IDs are being determined,\n * and returns an array of the NFT IDs owned by the user that have not yet been minted.\n *\n * @param _user - The address of the user whose mintable NFT IDs are being determined\n * @return mintableNftIds - An array of the NFT IDs owned by the user that have not yet been minted\n */\n function getMintableNftIds(\n address _user\n ) external view returns (uint256[] memory) {\n // Get an array of all NFT IDs owned by the user\n uint256[] memory nfts = ownerToNFTs[_user];\n // Initialize an array for mintable NFT IDs with the same length as the array of all NFT IDs\n uint256[] memory mintableNftIds = new uint256[](nfts.length);\n // Initialize an index counter to zero\n uint256 index = 0;\n // Loop through the array of NFT IDs\n for (uint256 i = 0; i < nfts.length; i++) {\n // Get the NFT ID at this index of the loop\n uint256 nftId = nfts[i];\n // Check if the NFT has not yet been minted\n if (!nftMinted[nftId]) {\n // If the NFT has not yet been minted, add it to the mintable NFT IDs array\n mintableNftIds[index] = nftId;\n // Increment the index counter\n index++;\n }\n }\n // Return the array of mintable NFT IDs\n return mintableNftIds;\n }\n}\n", "sourcePath": "/Users/zhl/Documents/workspace/crypto/becrypto/contracts/logic/NftDistributor.sol", "ast": { "absolutePath": "project:/contracts/logic/NftDistributor.sol", @@ -13898,13 +13898,13 @@ 647 ], "NftDistributor": [ - 1907 + 1911 ], "Strings": [ 872 ] }, - "id": 1908, + "id": 1912, "license": "MIT", "nodeType": "SourceUnit", "nodes": [ @@ -13924,7 +13924,7 @@ "id": 1554, "nameLocation": "-1:-1:-1", "nodeType": "ImportDirective", - "scope": 1908, + "scope": 1912, "sourceUnit": 434, "src": "57:68:11", "symbolAliases": [], @@ -13936,7 +13936,7 @@ "id": 1555, "nameLocation": "-1:-1:-1", "nodeType": "ImportDirective", - "scope": 1908, + "scope": 1912, "sourceUnit": 1552, "src": "126:37:11", "symbolAliases": [], @@ -13962,9 +13962,9 @@ "contractDependencies": [], "contractKind": "contract", "fullyImplemented": true, - "id": 1907, + "id": 1911, "linearizedBaseContracts": [ - 1907, + 1911, 433, 308, 896, @@ -13985,7 +13985,7 @@ "name": "MANAGE_ROLE", "nameLocation": "244:11:11", "nodeType": "VariableDeclaration", - "scope": 1907, + "scope": 1911, "src": "220:62:11", "stateVariable": true, "storageLocation": "default", @@ -14065,7 +14065,7 @@ "name": "ownerToNFTs", "nameLocation": "353:11:11", "nodeType": "VariableDeclaration", - "scope": 1907, + "scope": 1911, "src": "316:48:11", "stateVariable": true, "storageLocation": "default", @@ -14121,7 +14121,7 @@ "name": "nftMinted", "nameLocation": "422:9:11", "nodeType": "VariableDeclaration", - "scope": 1907, + "scope": 1911, "src": "390:41:11", "stateVariable": true, "storageLocation": "default", @@ -14168,7 +14168,7 @@ "name": "nft", "nameLocation": "453:3:11", "nodeType": "VariableDeclaration", - "scope": 1907, + "scope": 1911, "src": "436:20:11", "stateVariable": true, "storageLocation": "default", @@ -14923,7 +14923,7 @@ "parameters": [], "src": "1078:0:11" }, - "scope": 1907, + "scope": 1911, "src": "1013:552:11", "stateMutability": "nonpayable", "virtual": false, @@ -15051,9 +15051,9 @@ }, { "body": { - "id": 1748, + "id": 1752, "nodeType": "Block", - "src": "2668:904:11", + "src": "2668:921:11", "statements": [ { "expression": { @@ -15108,7 +15108,7 @@ "name": "getMintableCount", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1835, + "referencedDeclaration": 1839, "src": "2740:16:11", "typeDescriptions": { "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$", @@ -15209,7 +15209,7 @@ "name": "nfts", "nameLocation": "2865:4:11", "nodeType": "VariableDeclaration", - "scope": 1748, + "scope": 1752, "src": "2848:21:11", "stateVariable": false, "storageLocation": "memory", @@ -15292,7 +15292,7 @@ "name": "index", "nameLocation": "2932:5:11", "nodeType": "VariableDeclaration", - "scope": 1748, + "scope": 1752, "src": "2924:13:11", "stateVariable": false, "storageLocation": "default", @@ -15345,7 +15345,7 @@ "name": "nftSource", "nameLocation": "2964:9:11", "nodeType": "VariableDeclaration", - "scope": 1748, + "scope": 1752, "src": "2947:26:11", "stateVariable": false, "storageLocation": "memory", @@ -15449,9 +15449,9 @@ }, { "body": { - "id": 1725, + "id": 1729, "nodeType": "Block", - "src": "3087:307:11", + "src": "3087:324:11", "statements": [ { "assignments": [ @@ -15465,7 +15465,7 @@ "name": "nftSId", "nameLocation": "3103:6:11", "nodeType": "VariableDeclaration", - "scope": 1725, + "scope": 1729, "src": "3095:14:11", "stateVariable": false, "storageLocation": "default", @@ -15529,93 +15529,153 @@ }, { "condition": { - "id": 1707, + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 1711, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "3169:18:11", - "subExpression": { - "baseExpression": { - "id": 1704, - "name": "nftMinted", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1571, - "src": "3170:9:11", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint256_$_t_bool_$", - "typeString": "mapping(uint256 => bool)" - } - }, - "id": 1706, - "indexExpression": { - "id": 1705, - "name": "nftSId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1699, - "src": "3180:6:11", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, + "leftExpression": { + "id": 1707, "isConstant": false, - "isLValue": true, + "isLValue": false, "isPure": false, "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "3170:17:11", + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "3169:18:11", + "subExpression": { + "baseExpression": { + "id": 1704, + "name": "nftMinted", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1571, + "src": "3170:9:11", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_bool_$", + "typeString": "mapping(uint256 => bool)" + } + }, + "id": 1706, + "indexExpression": { + "id": 1705, + "name": "nftSId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1699, + "src": "3180:6:11", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "3170:17:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 1710, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 1708, + "name": "index", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1673, + "src": "3191:5:11", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 1709, + "name": "count", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1649, + "src": "3199:5:11", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3191:13:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "3169:35:11", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "id": 1724, + "id": 1728, "nodeType": "IfStatement", - "src": "3165:223:11", + "src": "3165:240:11", "trueBody": { - "id": 1723, + "id": 1727, "nodeType": "Block", - "src": "3189:199:11", + "src": "3206:199:11", "statements": [ { "expression": { - "id": 1712, + "id": 1716, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "baseExpression": { - "id": 1708, + "id": 1712, "name": "nftSource", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1680, - "src": "3257:9:11", + "src": "3274:9:11", "typeDescriptions": { "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", "typeString": "uint256[] memory" } }, - "id": 1710, + "id": 1714, "indexExpression": { - "id": 1709, + "id": 1713, "name": "index", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1673, - "src": "3267:5:11", + "src": "3284:5:11", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -15626,7 +15686,7 @@ "isPure": false, "lValueRequested": true, "nodeType": "IndexAccess", - "src": "3257:16:11", + "src": "3274:16:11", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -15635,55 +15695,55 @@ "nodeType": "Assignment", "operator": "=", "rightHandSide": { - "id": 1711, + "id": 1715, "name": "nftSId", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1699, - "src": "3276:6:11", + "src": "3293:6:11", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "3257:25:11", + "src": "3274:25:11", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "id": 1713, + "id": 1717, "nodeType": "ExpressionStatement", - "src": "3257:25:11" + "src": "3274:25:11" }, { "expression": { - "id": 1718, + "id": 1722, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "baseExpression": { - "id": 1714, + "id": 1718, "name": "nftMinted", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1571, - "src": "3292:9:11", + "src": "3309:9:11", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_uint256_$_t_bool_$", "typeString": "mapping(uint256 => bool)" } }, - "id": 1716, + "id": 1720, "indexExpression": { - "id": 1715, + "id": 1719, "name": "nftSId", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1699, - "src": "3302:6:11", + "src": "3319:6:11", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -15694,7 +15754,7 @@ "isPure": false, "lValueRequested": true, "nodeType": "IndexAccess", - "src": "3292:17:11", + "src": "3309:17:11", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -15704,33 +15764,33 @@ "operator": "=", "rightHandSide": { "hexValue": "74727565", - "id": 1717, + "id": 1721, "isConstant": false, "isLValue": false, "isPure": true, "kind": "bool", "lValueRequested": false, "nodeType": "Literal", - "src": "3312:4:11", + "src": "3329:4:11", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" }, "value": "true" }, - "src": "3292:24:11", + "src": "3309:24:11", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "id": 1719, + "id": 1723, "nodeType": "ExpressionStatement", - "src": "3292:24:11" + "src": "3309:24:11" }, { "expression": { - "id": 1721, + "id": 1725, "isConstant": false, "isLValue": false, "isPure": false, @@ -15738,14 +15798,14 @@ "nodeType": "UnaryOperation", "operator": "++", "prefix": false, - "src": "3372:7:11", + "src": "3389:7:11", "subExpression": { - "id": 1720, + "id": 1724, "name": "index", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1673, - "src": "3372:5:11", + "src": "3389:5:11", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -15756,9 +15816,9 @@ "typeString": "uint256" } }, - "id": 1722, + "id": 1726, "nodeType": "ExpressionStatement", - "src": "3372:7:11" + "src": "3389:7:11" } ] } @@ -15821,7 +15881,7 @@ "typeString": "bool" } }, - "id": 1726, + "id": 1730, "initializationExpression": { "assignments": [ 1688 @@ -15834,7 +15894,7 @@ "name": "i", "nameLocation": "3058:1:11", "nodeType": "VariableDeclaration", - "scope": 1726, + "scope": 1730, "src": "3050:9:11", "stateVariable": false, "storageLocation": "default", @@ -15908,22 +15968,22 @@ "src": "3082:3:11" }, "nodeType": "ForStatement", - "src": "3045:349:11" + "src": "3045:366:11" }, { "assignments": [ - 1731 + 1735 ], "declarations": [ { "constant": false, - "id": 1731, + "id": 1735, "mutability": "mutable", "name": "_nftIds", - "nameLocation": "3416:7:11", + "nameLocation": "3433:7:11", "nodeType": "VariableDeclaration", - "scope": 1748, - "src": "3399:24:11", + "scope": 1752, + "src": "3416:24:11", "stateVariable": false, "storageLocation": "memory", "typeDescriptions": { @@ -15932,18 +15992,18 @@ }, "typeName": { "baseType": { - "id": 1729, + "id": 1733, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "3399:7:11", + "src": "3416:7:11", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "id": 1730, + "id": 1734, "nodeType": "ArrayTypeName", - "src": "3399:9:11", + "src": "3416:9:11", "typeDescriptions": { "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", "typeString": "uint256[]" @@ -15952,28 +16012,28 @@ "visibility": "internal" } ], - "id": 1737, + "id": 1741, "initialValue": { "arguments": [ { - "id": 1734, + "id": 1738, "name": "_user", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1647, - "src": "3440:5:11", + "src": "3457:5:11", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, { - "id": 1735, + "id": 1739, "name": "count", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1649, - "src": "3447:5:11", + "src": "3464:5:11", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -15992,18 +16052,18 @@ } ], "expression": { - "id": 1732, + "id": 1736, "name": "nft", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1574, - "src": "3426:3:11", + "src": "3443:3:11", "typeDescriptions": { "typeIdentifier": "t_contract$_IBEERC721_$1551", "typeString": "contract IBEERC721" } }, - "id": 1733, + "id": 1737, "isConstant": false, "isLValue": false, "isPure": false, @@ -16011,13 +16071,13 @@ "memberName": "batchMint", "nodeType": "MemberAccess", "referencedDeclaration": 1529, - "src": "3426:13:11", + "src": "3443:13:11", "typeDescriptions": { "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$", "typeString": "function (address,uint256) external returns (uint256[] memory)" } }, - "id": 1736, + "id": 1740, "isConstant": false, "isLValue": false, "isPure": false, @@ -16025,7 +16085,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "3426:27:11", + "src": "3443:27:11", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", @@ -16033,18 +16093,18 @@ } }, "nodeType": "VariableDeclarationStatement", - "src": "3399:54:11" + "src": "3416:54:11" }, { "eventCall": { "arguments": [ { - "id": 1739, + "id": 1743, "name": "_user", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1647, - "src": "3527:5:11", + "src": "3544:5:11", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -16053,12 +16113,12 @@ { "arguments": [ { - "id": 1742, + "id": 1746, "name": "nft", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1574, - "src": "3542:3:11", + "src": "3559:3:11", "typeDescriptions": { "typeIdentifier": "t_contract$_IBEERC721_$1551", "typeString": "contract IBEERC721" @@ -16072,26 +16132,26 @@ "typeString": "contract IBEERC721" } ], - "id": 1741, + "id": 1745, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", - "src": "3534:7:11", + "src": "3551:7:11", "typeDescriptions": { "typeIdentifier": "t_type$_t_address_$", "typeString": "type(address)" }, "typeName": { - "id": 1740, + "id": 1744, "name": "address", "nodeType": "ElementaryTypeName", - "src": "3534:7:11", + "src": "3551:7:11", "typeDescriptions": {} } }, - "id": 1743, + "id": 1747, "isConstant": false, "isLValue": false, "isPure": false, @@ -16099,7 +16159,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "3534:12:11", + "src": "3551:12:11", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_address", @@ -16107,24 +16167,24 @@ } }, { - "id": 1744, + "id": 1748, "name": "nftSource", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1680, - "src": "3548:9:11", + "src": "3565:9:11", "typeDescriptions": { "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", "typeString": "uint256[] memory" } }, { - "id": 1745, + "id": 1749, "name": "_nftIds", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1731, - "src": "3559:7:11", + "referencedDeclaration": 1735, + "src": "3576:7:11", "typeDescriptions": { "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", "typeString": "uint256[] memory" @@ -16150,18 +16210,18 @@ "typeString": "uint256[] memory" } ], - "id": 1738, + "id": 1742, "name": "Minted", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1586, - "src": "3520:6:11", + "src": "3537:6:11", "typeDescriptions": { "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$", "typeString": "function (address,address,uint256[] memory,uint256[] memory)" } }, - "id": 1746, + "id": 1750, "isConstant": false, "isLValue": false, "isPure": false, @@ -16169,16 +16229,16 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "3520:47:11", + "src": "3537:47:11", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 1747, + "id": 1751, "nodeType": "EmitStatement", - "src": "3515:52:11" + "src": "3532:52:11" } ] }, @@ -16189,7 +16249,7 @@ "text": " @dev The mintToUser function mints NFTs to a given user.\n Only functions called by an address with the MANAGE_ROLE permission can access this function.\n The function takes an array of nftIds and checks that there are enough mintable NFTs for the user.\n It then loops through the user's owned NFTs, checking if each is mintable, and if so, adds it to a list to be minted.\n Then it emits the Minted event with details of the operation.\n @param _user - The address of the user receiving the NFTs" }, "functionSelector": "9533a384", - "id": 1749, + "id": 1753, "implemented": true, "kind": "function", "modifiers": [ @@ -16221,7 +16281,7 @@ "name": "_user", "nameLocation": "2625:5:11", "nodeType": "VariableDeclaration", - "scope": 1749, + "scope": 1753, "src": "2617:13:11", "stateVariable": false, "storageLocation": "default", @@ -16249,7 +16309,7 @@ "name": "count", "nameLocation": "2640:5:11", "nodeType": "VariableDeclaration", - "scope": 1749, + "scope": 1753, "src": "2632:13:11", "stateVariable": false, "storageLocation": "default", @@ -16278,48 +16338,48 @@ "parameters": [], "src": "2668:0:11" }, - "scope": 1907, - "src": "2597:975:11", + "scope": 1911, + "src": "2597:992:11", "stateMutability": "nonpayable", "virtual": false, "visibility": "external" }, { "body": { - "id": 1782, + "id": 1786, "nodeType": "Block", - "src": "4355:221:11", + "src": "4372:221:11", "statements": [ { "body": { - "id": 1780, + "id": 1784, "nodeType": "Block", - "src": "4447:125:11", + "src": "4464:125:11", "statements": [ { "expression": { "arguments": [ { "baseExpression": { - "id": 1775, + "id": 1779, "name": "_nftIds", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1755, - "src": "4554:7:11", + "referencedDeclaration": 1759, + "src": "4571:7:11", "typeDescriptions": { "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", "typeString": "uint256[] calldata" } }, - "id": 1777, + "id": 1781, "indexExpression": { - "id": 1776, + "id": 1780, "name": "i", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1761, - "src": "4562:1:11", + "referencedDeclaration": 1765, + "src": "4579:1:11", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -16330,7 +16390,7 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "4554:10:11", + "src": "4571:10:11", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -16346,25 +16406,25 @@ ], "expression": { "baseExpression": { - "id": 1771, + "id": 1775, "name": "ownerToNFTs", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1567, - "src": "4530:11:11", + "src": "4547:11:11", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_uint256_$dyn_storage_$", "typeString": "mapping(address => uint256[] storage ref)" } }, - "id": 1773, + "id": 1777, "indexExpression": { - "id": 1772, + "id": 1776, "name": "_user", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1752, - "src": "4542:5:11", + "referencedDeclaration": 1756, + "src": "4559:5:11", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -16375,26 +16435,26 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "4530:18:11", + "src": "4547:18:11", "typeDescriptions": { "typeIdentifier": "t_array$_t_uint256_$dyn_storage", "typeString": "uint256[] storage ref" } }, - "id": 1774, + "id": 1778, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "push", "nodeType": "MemberAccess", - "src": "4530:23:11", + "src": "4547:23:11", "typeDescriptions": { "typeIdentifier": "t_function_arraypush_nonpayable$_t_array$_t_uint256_$dyn_storage_ptr_$_t_uint256_$returns$__$bound_to$_t_array$_t_uint256_$dyn_storage_ptr_$", "typeString": "function (uint256[] storage pointer,uint256)" } }, - "id": 1778, + "id": 1782, "isConstant": false, "isLValue": false, "isPure": false, @@ -16402,16 +16462,16 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "4530:35:11", + "src": "4547:35:11", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 1779, + "id": 1783, "nodeType": "ExpressionStatement", - "src": "4530:35:11" + "src": "4547:35:11" } ] }, @@ -16420,18 +16480,18 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 1767, + "id": 1771, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { - "id": 1764, + "id": 1768, "name": "i", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1761, - "src": "4422:1:11", + "referencedDeclaration": 1765, + "src": "4439:1:11", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -16441,51 +16501,51 @@ "operator": "<", "rightExpression": { "expression": { - "id": 1765, + "id": 1769, "name": "_nftIds", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1755, - "src": "4426:7:11", + "referencedDeclaration": 1759, + "src": "4443:7:11", "typeDescriptions": { "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", "typeString": "uint256[] calldata" } }, - "id": 1766, + "id": 1770, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "length", "nodeType": "MemberAccess", - "src": "4426:14:11", + "src": "4443:14:11", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "4422:18:11", + "src": "4439:18:11", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "id": 1781, + "id": 1785, "initializationExpression": { "assignments": [ - 1761 + 1765 ], "declarations": [ { "constant": false, - "id": 1761, + "id": 1765, "mutability": "mutable", "name": "i", - "nameLocation": "4415:1:11", + "nameLocation": "4432:1:11", "nodeType": "VariableDeclaration", - "scope": 1781, - "src": "4407:9:11", + "scope": 1785, + "src": "4424:9:11", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -16493,10 +16553,10 @@ "typeString": "uint256" }, "typeName": { - "id": 1760, + "id": 1764, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "4407:7:11", + "src": "4424:7:11", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -16505,17 +16565,17 @@ "visibility": "internal" } ], - "id": 1763, + "id": 1767, "initialValue": { "hexValue": "30", - "id": 1762, + "id": 1766, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "4419:1:11", + "src": "4436:1:11", "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", "typeString": "int_const 0" @@ -16523,11 +16583,11 @@ "value": "0" }, "nodeType": "VariableDeclarationStatement", - "src": "4407:13:11" + "src": "4424:13:11" }, "loopExpression": { "expression": { - "id": 1769, + "id": 1773, "isConstant": false, "isLValue": false, "isPure": false, @@ -16535,14 +16595,14 @@ "nodeType": "UnaryOperation", "operator": "++", "prefix": false, - "src": "4442:3:11", + "src": "4459:3:11", "subExpression": { - "id": 1768, + "id": 1772, "name": "i", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1761, - "src": "4442:1:11", + "referencedDeclaration": 1765, + "src": "4459:1:11", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -16553,56 +16613,56 @@ "typeString": "uint256" } }, - "id": 1770, + "id": 1774, "nodeType": "ExpressionStatement", - "src": "4442:3:11" + "src": "4459:3:11" }, "nodeType": "ForStatement", - "src": "4402:170:11" + "src": "4419:170:11" } ] }, "documentation": { - "id": 1750, + "id": 1754, "nodeType": "StructuredDocumentation", - "src": "3576:680:11", + "src": "3593:680:11", "text": " @dev The addNFTData function adds an array of NFT IDs to the list of NFT IDs owned by a user.\n mintToUser method would check if target user had permission to mint NFTs.\n Only functions called by an address with the MANAGE_ROLE permission can access this function.\n The function takes in the address of the user and an array of NFT IDs. It then loops through the array\n of NFT IDs, and adds each one to the end of the array of NFTs owned by that user to update their ownership data.\n @param _user - The address of the user being updated with new NFT data\n @param _nftIds - An array of NFT IDs being added to the user's NFT data" }, "functionSelector": "84be00e4", - "id": 1783, + "id": 1787, "implemented": true, "kind": "function", "modifiers": [ { - "id": 1758, + "id": 1762, "kind": "modifierInvocation", "modifierName": { - "id": 1757, + "id": 1761, "name": "onlyManager", "nodeType": "IdentifierPath", "referencedDeclaration": 1644, - "src": "4343:11:11" + "src": "4360:11:11" }, "nodeType": "ModifierInvocation", - "src": "4343:11:11" + "src": "4360:11:11" } ], "name": "addNFTData", - "nameLocation": "4268:10:11", + "nameLocation": "4285:10:11", "nodeType": "FunctionDefinition", "parameters": { - "id": 1756, + "id": 1760, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 1752, + "id": 1756, "mutability": "mutable", "name": "_user", - "nameLocation": "4292:5:11", + "nameLocation": "4309:5:11", "nodeType": "VariableDeclaration", - "scope": 1783, - "src": "4284:13:11", + "scope": 1787, + "src": "4301:13:11", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -16610,10 +16670,10 @@ "typeString": "address" }, "typeName": { - "id": 1751, + "id": 1755, "name": "address", "nodeType": "ElementaryTypeName", - "src": "4284:7:11", + "src": "4301:7:11", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", @@ -16624,13 +16684,13 @@ }, { "constant": false, - "id": 1755, + "id": 1759, "mutability": "mutable", "name": "_nftIds", - "nameLocation": "4322:7:11", + "nameLocation": "4339:7:11", "nodeType": "VariableDeclaration", - "scope": 1783, - "src": "4303:26:11", + "scope": 1787, + "src": "4320:26:11", "stateVariable": false, "storageLocation": "calldata", "typeDescriptions": { @@ -16639,18 +16699,18 @@ }, "typeName": { "baseType": { - "id": 1753, + "id": 1757, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "4303:7:11", + "src": "4320:7:11", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "id": 1754, + "id": 1758, "nodeType": "ArrayTypeName", - "src": "4303:9:11", + "src": "4320:9:11", "typeDescriptions": { "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", "typeString": "uint256[]" @@ -16659,40 +16719,40 @@ "visibility": "internal" } ], - "src": "4278:55:11" + "src": "4295:55:11" }, "returnParameters": { - "id": 1759, + "id": 1763, "nodeType": "ParameterList", "parameters": [], - "src": "4355:0:11" + "src": "4372:0:11" }, - "scope": 1907, - "src": "4259:317:11", + "scope": 1911, + "src": "4276:317:11", "stateMutability": "nonpayable", "virtual": false, "visibility": "external" }, { "body": { - "id": 1834, + "id": 1838, "nodeType": "Block", - "src": "5215:578:11", + "src": "5232:578:11", "statements": [ { "assignments": [ - 1795 + 1799 ], "declarations": [ { "constant": false, - "id": 1795, + "id": 1799, "mutability": "mutable", "name": "nfts", - "nameLocation": "5291:4:11", + "nameLocation": "5308:4:11", "nodeType": "VariableDeclaration", - "scope": 1834, - "src": "5274:21:11", + "scope": 1838, + "src": "5291:21:11", "stateVariable": false, "storageLocation": "memory", "typeDescriptions": { @@ -16701,18 +16761,18 @@ }, "typeName": { "baseType": { - "id": 1793, + "id": 1797, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "5274:7:11", + "src": "5291:7:11", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "id": 1794, + "id": 1798, "nodeType": "ArrayTypeName", - "src": "5274:9:11", + "src": "5291:9:11", "typeDescriptions": { "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", "typeString": "uint256[]" @@ -16721,28 +16781,28 @@ "visibility": "internal" } ], - "id": 1799, + "id": 1803, "initialValue": { "baseExpression": { - "id": 1796, + "id": 1800, "name": "ownerToNFTs", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1567, - "src": "5298:11:11", + "src": "5315:11:11", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_uint256_$dyn_storage_$", "typeString": "mapping(address => uint256[] storage ref)" } }, - "id": 1798, + "id": 1802, "indexExpression": { - "id": 1797, + "id": 1801, "name": "_user", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1786, - "src": "5310:5:11", + "referencedDeclaration": 1790, + "src": "5327:5:11", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -16753,29 +16813,29 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "5298:18:11", + "src": "5315:18:11", "typeDescriptions": { "typeIdentifier": "t_array$_t_uint256_$dyn_storage", "typeString": "uint256[] storage ref" } }, "nodeType": "VariableDeclarationStatement", - "src": "5274:42:11" + "src": "5291:42:11" }, { "assignments": [ - 1801 + 1805 ], "declarations": [ { "constant": false, - "id": 1801, + "id": 1805, "mutability": "mutable", "name": "count", - "nameLocation": "5362:5:11", + "nameLocation": "5379:5:11", "nodeType": "VariableDeclaration", - "scope": 1834, - "src": "5354:13:11", + "scope": 1838, + "src": "5371:13:11", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -16783,10 +16843,10 @@ "typeString": "uint256" }, "typeName": { - "id": 1800, + "id": 1804, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "5354:7:11", + "src": "5371:7:11", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -16795,17 +16855,17 @@ "visibility": "internal" } ], - "id": 1803, + "id": 1807, "initialValue": { "hexValue": "30", - "id": 1802, + "id": 1806, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "5370:1:11", + "src": "5387:1:11", "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", "typeString": "int_const 0" @@ -16813,28 +16873,28 @@ "value": "0" }, "nodeType": "VariableDeclarationStatement", - "src": "5354:17:11" + "src": "5371:17:11" }, { "body": { - "id": 1830, + "id": 1834, "nodeType": "Block", - "src": "5460:272:11", + "src": "5477:272:11", "statements": [ { "assignments": [ - 1816 + 1820 ], "declarations": [ { "constant": false, - "id": 1816, + "id": 1820, "mutability": "mutable", "name": "nftAId", - "nameLocation": "5526:6:11", + "nameLocation": "5543:6:11", "nodeType": "VariableDeclaration", - "scope": 1830, - "src": "5518:14:11", + "scope": 1834, + "src": "5535:14:11", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -16842,10 +16902,10 @@ "typeString": "uint256" }, "typeName": { - "id": 1815, + "id": 1819, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "5518:7:11", + "src": "5535:7:11", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -16854,28 +16914,28 @@ "visibility": "internal" } ], - "id": 1820, + "id": 1824, "initialValue": { "baseExpression": { - "id": 1817, + "id": 1821, "name": "nfts", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1795, - "src": "5535:4:11", + "referencedDeclaration": 1799, + "src": "5552:4:11", "typeDescriptions": { "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", "typeString": "uint256[] memory" } }, - "id": 1819, + "id": 1823, "indexExpression": { - "id": 1818, + "id": 1822, "name": "i", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1805, - "src": "5540:1:11", + "referencedDeclaration": 1809, + "src": "5557:1:11", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -16886,18 +16946,18 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "5535:7:11", + "src": "5552:7:11", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "VariableDeclarationStatement", - "src": "5518:24:11" + "src": "5535:24:11" }, { "condition": { - "id": 1824, + "id": 1828, "isConstant": false, "isLValue": false, "isPure": false, @@ -16905,28 +16965,28 @@ "nodeType": "UnaryOperation", "operator": "!", "prefix": true, - "src": "5604:18:11", + "src": "5621:18:11", "subExpression": { "baseExpression": { - "id": 1821, + "id": 1825, "name": "nftMinted", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1571, - "src": "5605:9:11", + "src": "5622:9:11", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_uint256_$_t_bool_$", "typeString": "mapping(uint256 => bool)" } }, - "id": 1823, + "id": 1827, "indexExpression": { - "id": 1822, + "id": 1826, "name": "nftAId", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1816, - "src": "5615:6:11", + "referencedDeclaration": 1820, + "src": "5632:6:11", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -16937,7 +16997,7 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "5605:17:11", + "src": "5622:17:11", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -16948,17 +17008,17 @@ "typeString": "bool" } }, - "id": 1829, + "id": 1833, "nodeType": "IfStatement", - "src": "5600:126:11", + "src": "5617:126:11", "trueBody": { - "id": 1828, + "id": 1832, "nodeType": "Block", - "src": "5624:102:11", + "src": "5641:102:11", "statements": [ { "expression": { - "id": 1826, + "id": 1830, "isConstant": false, "isLValue": false, "isPure": false, @@ -16966,14 +17026,14 @@ "nodeType": "UnaryOperation", "operator": "++", "prefix": false, - "src": "5710:7:11", + "src": "5727:7:11", "subExpression": { - "id": 1825, + "id": 1829, "name": "count", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1801, - "src": "5710:5:11", + "referencedDeclaration": 1805, + "src": "5727:5:11", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -16984,9 +17044,9 @@ "typeString": "uint256" } }, - "id": 1827, + "id": 1831, "nodeType": "ExpressionStatement", - "src": "5710:7:11" + "src": "5727:7:11" } ] } @@ -16998,18 +17058,18 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 1811, + "id": 1815, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { - "id": 1808, + "id": 1812, "name": "i", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1805, - "src": "5438:1:11", + "referencedDeclaration": 1809, + "src": "5455:1:11", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -17019,51 +17079,51 @@ "operator": "<", "rightExpression": { "expression": { - "id": 1809, + "id": 1813, "name": "nfts", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1795, - "src": "5442:4:11", + "referencedDeclaration": 1799, + "src": "5459:4:11", "typeDescriptions": { "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", "typeString": "uint256[] memory" } }, - "id": 1810, + "id": 1814, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "length", "nodeType": "MemberAccess", - "src": "5442:11:11", + "src": "5459:11:11", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "5438:15:11", + "src": "5455:15:11", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "id": 1831, + "id": 1835, "initializationExpression": { "assignments": [ - 1805 + 1809 ], "declarations": [ { "constant": false, - "id": 1805, + "id": 1809, "mutability": "mutable", "name": "i", - "nameLocation": "5431:1:11", + "nameLocation": "5448:1:11", "nodeType": "VariableDeclaration", - "scope": 1831, - "src": "5423:9:11", + "scope": 1835, + "src": "5440:9:11", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -17071,10 +17131,10 @@ "typeString": "uint256" }, "typeName": { - "id": 1804, + "id": 1808, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "5423:7:11", + "src": "5440:7:11", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -17083,17 +17143,17 @@ "visibility": "internal" } ], - "id": 1807, + "id": 1811, "initialValue": { "hexValue": "30", - "id": 1806, + "id": 1810, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "5435:1:11", + "src": "5452:1:11", "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", "typeString": "int_const 0" @@ -17101,11 +17161,11 @@ "value": "0" }, "nodeType": "VariableDeclarationStatement", - "src": "5423:13:11" + "src": "5440:13:11" }, "loopExpression": { "expression": { - "id": 1813, + "id": 1817, "isConstant": false, "isLValue": false, "isPure": false, @@ -17113,14 +17173,14 @@ "nodeType": "UnaryOperation", "operator": "++", "prefix": false, - "src": "5455:3:11", + "src": "5472:3:11", "subExpression": { - "id": 1812, + "id": 1816, "name": "i", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1805, - "src": "5455:1:11", + "referencedDeclaration": 1809, + "src": "5472:1:11", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -17131,60 +17191,60 @@ "typeString": "uint256" } }, - "id": 1814, + "id": 1818, "nodeType": "ExpressionStatement", - "src": "5455:3:11" + "src": "5472:3:11" }, "nodeType": "ForStatement", - "src": "5418:314:11" + "src": "5435:314:11" }, { "expression": { - "id": 1832, + "id": 1836, "name": "count", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1801, - "src": "5783:5:11", + "referencedDeclaration": 1805, + "src": "5800:5:11", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "functionReturnParameters": 1790, - "id": 1833, + "functionReturnParameters": 1794, + "id": 1837, "nodeType": "Return", - "src": "5776:12:11" + "src": "5793:12:11" } ] }, "documentation": { - "id": 1784, + "id": 1788, "nodeType": "StructuredDocumentation", - "src": "4580:561:11", + "src": "4597:561:11", "text": " @dev The getMintableCount function gets the number of NFTs owned by a user that have not yet been minted.\n This is a read-only function, meaning it doesn't modify the state of the blockchain.\n It takes in the address of the user whose mintable count is being determined,\n and returns the number of NFTs owned by the user that have not yet been minted.\n @param _user - The address of the user whose mintable count is being determined\n @return count - The number of NFTs owned by the user that have not yet been minted" }, "functionSelector": "0431f205", - "id": 1835, + "id": 1839, "implemented": true, "kind": "function", "modifiers": [], "name": "getMintableCount", - "nameLocation": "5153:16:11", + "nameLocation": "5170:16:11", "nodeType": "FunctionDefinition", "parameters": { - "id": 1787, + "id": 1791, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 1786, + "id": 1790, "mutability": "mutable", "name": "_user", - "nameLocation": "5178:5:11", + "nameLocation": "5195:5:11", "nodeType": "VariableDeclaration", - "scope": 1835, - "src": "5170:13:11", + "scope": 1839, + "src": "5187:13:11", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -17192,10 +17252,10 @@ "typeString": "address" }, "typeName": { - "id": 1785, + "id": 1789, "name": "address", "nodeType": "ElementaryTypeName", - "src": "5170:7:11", + "src": "5187:7:11", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", @@ -17205,21 +17265,21 @@ "visibility": "internal" } ], - "src": "5169:15:11" + "src": "5186:15:11" }, "returnParameters": { - "id": 1790, + "id": 1794, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 1789, + "id": 1793, "mutability": "mutable", "name": "", "nameLocation": "-1:-1:-1", "nodeType": "VariableDeclaration", - "scope": 1835, - "src": "5206:7:11", + "scope": 1839, + "src": "5223:7:11", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -17227,10 +17287,10 @@ "typeString": "uint256" }, "typeName": { - "id": 1788, + "id": 1792, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "5206:7:11", + "src": "5223:7:11", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -17239,34 +17299,34 @@ "visibility": "internal" } ], - "src": "5205:9:11" + "src": "5222:9:11" }, - "scope": 1907, - "src": "5144:649:11", + "scope": 1911, + "src": "5161:649:11", "stateMutability": "view", "virtual": false, "visibility": "public" }, { "body": { - "id": 1905, + "id": 1909, "nodeType": "Block", - "src": "6479:850:11", + "src": "6496:850:11", "statements": [ { "assignments": [ - 1848 + 1852 ], "declarations": [ { "constant": false, - "id": 1848, + "id": 1852, "mutability": "mutable", "name": "nfts", - "nameLocation": "6555:4:11", + "nameLocation": "6572:4:11", "nodeType": "VariableDeclaration", - "scope": 1905, - "src": "6538:21:11", + "scope": 1909, + "src": "6555:21:11", "stateVariable": false, "storageLocation": "memory", "typeDescriptions": { @@ -17275,18 +17335,18 @@ }, "typeName": { "baseType": { - "id": 1846, + "id": 1850, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "6538:7:11", + "src": "6555:7:11", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "id": 1847, + "id": 1851, "nodeType": "ArrayTypeName", - "src": "6538:9:11", + "src": "6555:9:11", "typeDescriptions": { "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", "typeString": "uint256[]" @@ -17295,28 +17355,28 @@ "visibility": "internal" } ], - "id": 1852, + "id": 1856, "initialValue": { "baseExpression": { - "id": 1849, + "id": 1853, "name": "ownerToNFTs", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1567, - "src": "6562:11:11", + "src": "6579:11:11", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_uint256_$dyn_storage_$", "typeString": "mapping(address => uint256[] storage ref)" } }, - "id": 1851, + "id": 1855, "indexExpression": { - "id": 1850, + "id": 1854, "name": "_user", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1838, - "src": "6574:5:11", + "referencedDeclaration": 1842, + "src": "6591:5:11", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -17327,29 +17387,29 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "6562:18:11", + "src": "6579:18:11", "typeDescriptions": { "typeIdentifier": "t_array$_t_uint256_$dyn_storage", "typeString": "uint256[] storage ref" } }, "nodeType": "VariableDeclarationStatement", - "src": "6538:42:11" + "src": "6555:42:11" }, { "assignments": [ - 1857 + 1861 ], "declarations": [ { "constant": false, - "id": 1857, + "id": 1861, "mutability": "mutable", "name": "mintableNftIds", - "nameLocation": "6700:14:11", + "nameLocation": "6717:14:11", "nodeType": "VariableDeclaration", - "scope": 1905, - "src": "6683:31:11", + "scope": 1909, + "src": "6700:31:11", "stateVariable": false, "storageLocation": "memory", "typeDescriptions": { @@ -17358,18 +17418,18 @@ }, "typeName": { "baseType": { - "id": 1855, + "id": 1859, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "6683:7:11", + "src": "6700:7:11", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "id": 1856, + "id": 1860, "nodeType": "ArrayTypeName", - "src": "6683:9:11", + "src": "6700:9:11", "typeDescriptions": { "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", "typeString": "uint256[]" @@ -17378,30 +17438,30 @@ "visibility": "internal" } ], - "id": 1864, + "id": 1868, "initialValue": { "arguments": [ { "expression": { - "id": 1861, + "id": 1865, "name": "nfts", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1848, - "src": "6731:4:11", + "referencedDeclaration": 1852, + "src": "6748:4:11", "typeDescriptions": { "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", "typeString": "uint256[] memory" } }, - "id": 1862, + "id": 1866, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "length", "nodeType": "MemberAccess", - "src": "6731:11:11", + "src": "6748:11:11", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -17415,38 +17475,38 @@ "typeString": "uint256" } ], - "id": 1860, + "id": 1864, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "NewExpression", - "src": "6717:13:11", + "src": "6734:13:11", "typeDescriptions": { "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$", "typeString": "function (uint256) pure returns (uint256[] memory)" }, "typeName": { "baseType": { - "id": 1858, + "id": 1862, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "6721:7:11", + "src": "6738:7:11", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "id": 1859, + "id": 1863, "nodeType": "ArrayTypeName", - "src": "6721:9:11", + "src": "6738:9:11", "typeDescriptions": { "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", "typeString": "uint256[]" } } }, - "id": 1863, + "id": 1867, "isConstant": false, "isLValue": false, "isPure": false, @@ -17454,7 +17514,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "6717:26:11", + "src": "6734:26:11", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", @@ -17462,22 +17522,22 @@ } }, "nodeType": "VariableDeclarationStatement", - "src": "6683:60:11" + "src": "6700:60:11" }, { "assignments": [ - 1866 + 1870 ], "declarations": [ { "constant": false, - "id": 1866, + "id": 1870, "mutability": "mutable", "name": "index", - "nameLocation": "6800:5:11", + "nameLocation": "6817:5:11", "nodeType": "VariableDeclaration", - "scope": 1905, - "src": "6792:13:11", + "scope": 1909, + "src": "6809:13:11", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -17485,10 +17545,10 @@ "typeString": "uint256" }, "typeName": { - "id": 1865, + "id": 1869, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "6792:7:11", + "src": "6809:7:11", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -17497,17 +17557,17 @@ "visibility": "internal" } ], - "id": 1868, + "id": 1872, "initialValue": { "hexValue": "30", - "id": 1867, + "id": 1871, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "6808:1:11", + "src": "6825:1:11", "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", "typeString": "int_const 0" @@ -17515,28 +17575,28 @@ "value": "0" }, "nodeType": "VariableDeclarationStatement", - "src": "6792:17:11" + "src": "6809:17:11" }, { "body": { - "id": 1901, + "id": 1905, "nodeType": "Block", - "src": "6898:356:11", + "src": "6915:356:11", "statements": [ { "assignments": [ - 1881 + 1885 ], "declarations": [ { "constant": false, - "id": 1881, + "id": 1885, "mutability": "mutable", "name": "nftId", - "nameLocation": "6964:5:11", + "nameLocation": "6981:5:11", "nodeType": "VariableDeclaration", - "scope": 1901, - "src": "6956:13:11", + "scope": 1905, + "src": "6973:13:11", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -17544,10 +17604,10 @@ "typeString": "uint256" }, "typeName": { - "id": 1880, + "id": 1884, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "6956:7:11", + "src": "6973:7:11", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -17556,28 +17616,28 @@ "visibility": "internal" } ], - "id": 1885, + "id": 1889, "initialValue": { "baseExpression": { - "id": 1882, + "id": 1886, "name": "nfts", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1848, - "src": "6972:4:11", + "referencedDeclaration": 1852, + "src": "6989:4:11", "typeDescriptions": { "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", "typeString": "uint256[] memory" } }, - "id": 1884, + "id": 1888, "indexExpression": { - "id": 1883, + "id": 1887, "name": "i", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1870, - "src": "6977:1:11", + "referencedDeclaration": 1874, + "src": "6994:1:11", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -17588,18 +17648,18 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "6972:7:11", + "src": "6989:7:11", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "VariableDeclarationStatement", - "src": "6956:23:11" + "src": "6973:23:11" }, { "condition": { - "id": 1889, + "id": 1893, "isConstant": false, "isLValue": false, "isPure": false, @@ -17607,28 +17667,28 @@ "nodeType": "UnaryOperation", "operator": "!", "prefix": true, - "src": "7041:17:11", + "src": "7058:17:11", "subExpression": { "baseExpression": { - "id": 1886, + "id": 1890, "name": "nftMinted", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1571, - "src": "7042:9:11", + "src": "7059:9:11", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_uint256_$_t_bool_$", "typeString": "mapping(uint256 => bool)" } }, - "id": 1888, + "id": 1892, "indexExpression": { - "id": 1887, + "id": 1891, "name": "nftId", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1881, - "src": "7052:5:11", + "referencedDeclaration": 1885, + "src": "7069:5:11", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -17639,7 +17699,7 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "7042:16:11", + "src": "7059:16:11", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -17650,42 +17710,42 @@ "typeString": "bool" } }, - "id": 1900, + "id": 1904, "nodeType": "IfStatement", - "src": "7037:211:11", + "src": "7054:211:11", "trueBody": { - "id": 1899, + "id": 1903, "nodeType": "Block", - "src": "7060:188:11", + "src": "7077:188:11", "statements": [ { "expression": { - "id": 1894, + "id": 1898, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "baseExpression": { - "id": 1890, + "id": 1894, "name": "mintableNftIds", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1857, - "src": "7154:14:11", + "referencedDeclaration": 1861, + "src": "7171:14:11", "typeDescriptions": { "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", "typeString": "uint256[] memory" } }, - "id": 1892, + "id": 1896, "indexExpression": { - "id": 1891, + "id": 1895, "name": "index", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1866, - "src": "7169:5:11", + "referencedDeclaration": 1870, + "src": "7186:5:11", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -17696,7 +17756,7 @@ "isPure": false, "lValueRequested": true, "nodeType": "IndexAccess", - "src": "7154:21:11", + "src": "7171:21:11", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -17705,30 +17765,30 @@ "nodeType": "Assignment", "operator": "=", "rightHandSide": { - "id": 1893, + "id": 1897, "name": "nftId", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1881, - "src": "7178:5:11", + "referencedDeclaration": 1885, + "src": "7195:5:11", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "7154:29:11", + "src": "7171:29:11", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "id": 1895, + "id": 1899, "nodeType": "ExpressionStatement", - "src": "7154:29:11" + "src": "7171:29:11" }, { "expression": { - "id": 1897, + "id": 1901, "isConstant": false, "isLValue": false, "isPure": false, @@ -17736,14 +17796,14 @@ "nodeType": "UnaryOperation", "operator": "++", "prefix": false, - "src": "7232:7:11", + "src": "7249:7:11", "subExpression": { - "id": 1896, + "id": 1900, "name": "index", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1866, - "src": "7232:5:11", + "referencedDeclaration": 1870, + "src": "7249:5:11", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -17754,9 +17814,9 @@ "typeString": "uint256" } }, - "id": 1898, + "id": 1902, "nodeType": "ExpressionStatement", - "src": "7232:7:11" + "src": "7249:7:11" } ] } @@ -17768,18 +17828,18 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 1876, + "id": 1880, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { - "id": 1873, + "id": 1877, "name": "i", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1870, - "src": "6876:1:11", + "referencedDeclaration": 1874, + "src": "6893:1:11", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -17789,51 +17849,51 @@ "operator": "<", "rightExpression": { "expression": { - "id": 1874, + "id": 1878, "name": "nfts", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1848, - "src": "6880:4:11", + "referencedDeclaration": 1852, + "src": "6897:4:11", "typeDescriptions": { "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", "typeString": "uint256[] memory" } }, - "id": 1875, + "id": 1879, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "length", "nodeType": "MemberAccess", - "src": "6880:11:11", + "src": "6897:11:11", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "6876:15:11", + "src": "6893:15:11", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "id": 1902, + "id": 1906, "initializationExpression": { "assignments": [ - 1870 + 1874 ], "declarations": [ { "constant": false, - "id": 1870, + "id": 1874, "mutability": "mutable", "name": "i", - "nameLocation": "6869:1:11", + "nameLocation": "6886:1:11", "nodeType": "VariableDeclaration", - "scope": 1902, - "src": "6861:9:11", + "scope": 1906, + "src": "6878:9:11", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -17841,10 +17901,10 @@ "typeString": "uint256" }, "typeName": { - "id": 1869, + "id": 1873, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "6861:7:11", + "src": "6878:7:11", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -17853,17 +17913,17 @@ "visibility": "internal" } ], - "id": 1872, + "id": 1876, "initialValue": { "hexValue": "30", - "id": 1871, + "id": 1875, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "6873:1:11", + "src": "6890:1:11", "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", "typeString": "int_const 0" @@ -17871,11 +17931,11 @@ "value": "0" }, "nodeType": "VariableDeclarationStatement", - "src": "6861:13:11" + "src": "6878:13:11" }, "loopExpression": { "expression": { - "id": 1878, + "id": 1882, "isConstant": false, "isLValue": false, "isPure": false, @@ -17883,14 +17943,14 @@ "nodeType": "UnaryOperation", "operator": "++", "prefix": false, - "src": "6893:3:11", + "src": "6910:3:11", "subExpression": { - "id": 1877, + "id": 1881, "name": "i", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1870, - "src": "6893:1:11", + "referencedDeclaration": 1874, + "src": "6910:1:11", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -17901,60 +17961,60 @@ "typeString": "uint256" } }, - "id": 1879, + "id": 1883, "nodeType": "ExpressionStatement", - "src": "6893:3:11" + "src": "6910:3:11" }, "nodeType": "ForStatement", - "src": "6856:398:11" + "src": "6873:398:11" }, { "expression": { - "id": 1903, + "id": 1907, "name": "mintableNftIds", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1857, - "src": "7310:14:11", + "referencedDeclaration": 1861, + "src": "7327:14:11", "typeDescriptions": { "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", "typeString": "uint256[] memory" } }, - "functionReturnParameters": 1843, - "id": 1904, + "functionReturnParameters": 1847, + "id": 1908, "nodeType": "Return", - "src": "7303:21:11" + "src": "7320:21:11" } ] }, "documentation": { - "id": 1836, + "id": 1840, "nodeType": "StructuredDocumentation", - "src": "5797:588:11", + "src": "5814:588:11", "text": " @dev The getMintableNftIds function gets an array of NFT IDs owned by a user that have not yet been minted.\n This is a read-only function, meaning it doesn't modify the state of the blockchain.\n It takes in the address of the user whose mintable NFT IDs are being determined,\n and returns an array of the NFT IDs owned by the user that have not yet been minted.\n @param _user - The address of the user whose mintable NFT IDs are being determined\n @return mintableNftIds - An array of the NFT IDs owned by the user that have not yet been minted" }, "functionSelector": "032221ad", - "id": 1906, + "id": 1910, "implemented": true, "kind": "function", "modifiers": [], "name": "getMintableNftIds", - "nameLocation": "6397:17:11", + "nameLocation": "6414:17:11", "nodeType": "FunctionDefinition", "parameters": { - "id": 1839, + "id": 1843, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 1838, + "id": 1842, "mutability": "mutable", "name": "_user", - "nameLocation": "6428:5:11", + "nameLocation": "6445:5:11", "nodeType": "VariableDeclaration", - "scope": 1906, - "src": "6420:13:11", + "scope": 1910, + "src": "6437:13:11", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -17962,10 +18022,10 @@ "typeString": "address" }, "typeName": { - "id": 1837, + "id": 1841, "name": "address", "nodeType": "ElementaryTypeName", - "src": "6420:7:11", + "src": "6437:7:11", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", @@ -17975,21 +18035,21 @@ "visibility": "internal" } ], - "src": "6414:23:11" + "src": "6431:23:11" }, "returnParameters": { - "id": 1843, + "id": 1847, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 1842, + "id": 1846, "mutability": "mutable", "name": "", "nameLocation": "-1:-1:-1", "nodeType": "VariableDeclaration", - "scope": 1906, - "src": "6461:16:11", + "scope": 1910, + "src": "6478:16:11", "stateVariable": false, "storageLocation": "memory", "typeDescriptions": { @@ -17998,18 +18058,18 @@ }, "typeName": { "baseType": { - "id": 1840, + "id": 1844, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "6461:7:11", + "src": "6478:7:11", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "id": 1841, + "id": 1845, "nodeType": "ArrayTypeName", - "src": "6461:9:11", + "src": "6478:9:11", "typeDescriptions": { "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", "typeString": "uint256[]" @@ -18018,21 +18078,21 @@ "visibility": "internal" } ], - "src": "6460:18:11" + "src": "6477:18:11" }, - "scope": 1907, - "src": "6388:941:11", + "scope": 1911, + "src": "6405:941:11", "stateMutability": "view", "virtual": false, "visibility": "external" } ], - "scope": 1908, - "src": "165:7166:11", + "scope": 1912, + "src": "165:7183:11", "usedErrors": [] } ], - "src": "32:7300:11" + "src": "32:7317:11" }, "compiler": { "name": "solc", @@ -18149,12 +18209,12 @@ } }, "links": {}, - "address": "0x11440cE5a7d6a1e6fa1e9fd790EBa93476F0DeA0", - "transactionHash": "0x7b773268f8853340bfbfdedfefa220e2a8f65b9e6e6b4731aeba2f189b71c1bb" + "address": "0xC0DA6D9d8AaDCFf7BD6d69B8b46948dD40BF0dec", + "transactionHash": "0x1d6dba27c3bd6e5473f76d9ae16fc138477e41962d613cf57b633ff3e9581776" } }, "schemaVersion": "3.4.11", - "updatedAt": "2023-04-23T02:44:39.985Z", + "updatedAt": "2023-04-26T07:39:54.130Z", "networkType": "ethereum", "devdoc": { "kind": "dev", diff --git a/contracts/logic/NftDistributor.sol b/contracts/logic/NftDistributor.sol index 6f94cb0..cb8ee20 100644 --- a/contracts/logic/NftDistributor.sol +++ b/contracts/logic/NftDistributor.sol @@ -83,7 +83,7 @@ contract NftDistributor is AccessControlEnumerable { for (uint256 i = 0; i < nfts.length; i++) { uint256 nftSId = nfts[i]; // Check if the NFT is mintable - if (!nftMinted[nftSId]) { + if (!nftMinted[nftSId] && index < count) { // Add the NFT's source ID to the list of sources nftSource[index] = nftSId; nftMinted[nftSId] = true; diff --git a/contracts/tokens/erc721/BEBadge.sol b/contracts/tokens/erc721/BEBadge.sol index ef66007..fcc18d2 100644 --- a/contracts/tokens/erc721/BEBadge.sol +++ b/contracts/tokens/erc721/BEBadge.sol @@ -36,12 +36,6 @@ contract BEBadge is AccessControl, ERC721Enumerable { return _baseTokenURI; } - function setBaseURI( - string memory baseURI_ - ) external onlyRole(DEFAULT_ADMIN_ROLE) { - _baseTokenURI = baseURI_; - } - /** * @dev Batch mint tokens and transfer to specified address. * diff --git a/migrations/2_depoly_etc.js b/migrations/2_depoly_etc.js index 41e9483..ee6a1de 100644 --- a/migrations/2_depoly_etc.js +++ b/migrations/2_depoly_etc.js @@ -5,36 +5,36 @@ const Distributor = artifacts.require("logic/NftDistributor"); const config = require("../config/config"); module.exports = async function (deployer, network, accounts) { - await deployer.deploy(Badge, "BE Badge", "Badge", "0"); + // await deployer.deploy(Badge, "BE Badge", "Badge", "0"); const badgeInstance = await Badge.deployed(); if (badgeInstance) { console.log("BEBadge successfully deployed. "); console.log("address: " + badgeInstance.address); } - await badgeInstance.updateBaseURI(config.token.baseTokenURI); + // await badgeInstance.updateBaseURI(config.token.baseTokenURI); // await deployer.deploy(Coin, "BE test USDT", "USDT"); const coinInstance = await Coin.deployed(); // if (coinInstance) { // console.log("BEUSDT successfully deployed. "); // console.log("address: " + coinInstance.address); // } - await deployer.deploy( - Wallet, - 60, - 1, - config.admins.proposers, - config.admins.confirmers, - config.admins.executors - ); + // await deployer.deploy( + // Wallet, + // 60, + // 1, + // config.admins.proposers, + // config.admins.confirmers, + // config.admins.executors + // ); const walletInstance = await Wallet.deployed(); if (walletInstance) { console.log("BEMultiSigWallet successfully deployed."); console.log("address: " + walletInstance.address); } - await badgeInstance.setMintRole(walletInstance.address); - console.log("success add wallet to badge's mint role"); - await coinInstance.setMintRole(walletInstance.address); - console.log("success add wallet to usdt's mint role"); + // await badgeInstance.setMintRole(walletInstance.address); + // console.log("success add wallet to badge's mint role"); + // await coinInstance.setMintRole(walletInstance.address); + // console.log("success add wallet to usdt's mint role"); await deployer.deploy( Distributor,