{
	"compiler": {
		"version": "0.8.20+commit.a1b79de6"
	},
	"language": "Solidity",
	"output": {
		"abi": [
			{
				"inputs": [
					{
						"internalType": "address",
						"name": "initialOwner",
						"type": "address"
					},
					{
						"internalType": "address[]",
						"name": "_admins",
						"type": "address[]"
					}
				],
				"stateMutability": "nonpayable",
				"type": "constructor"
			},
			{
				"inputs": [],
				"name": "AccessControlBadConfirmation",
				"type": "error"
			},
			{
				"inputs": [
					{
						"internalType": "address",
						"name": "account",
						"type": "address"
					},
					{
						"internalType": "bytes32",
						"name": "neededRole",
						"type": "bytes32"
					}
				],
				"name": "AccessControlUnauthorizedAccount",
				"type": "error"
			},
			{
				"inputs": [
					{
						"internalType": "address",
						"name": "owner",
						"type": "address"
					}
				],
				"name": "OwnableInvalidOwner",
				"type": "error"
			},
			{
				"inputs": [
					{
						"internalType": "address",
						"name": "account",
						"type": "address"
					}
				],
				"name": "OwnableUnauthorizedAccount",
				"type": "error"
			},
			{
				"anonymous": false,
				"inputs": [
					{
						"indexed": true,
						"internalType": "address",
						"name": "previousOwner",
						"type": "address"
					},
					{
						"indexed": true,
						"internalType": "address",
						"name": "newOwner",
						"type": "address"
					}
				],
				"name": "OwnershipTransferred",
				"type": "event"
			},
			{
				"anonymous": false,
				"inputs": [
					{
						"indexed": true,
						"internalType": "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": "ADMIN_ROLE",
				"outputs": [
					{
						"internalType": "bytes32",
						"name": "",
						"type": "bytes32"
					}
				],
				"stateMutability": "view",
				"type": "function"
			},
			{
				"inputs": [],
				"name": "DEFAULT_ADMIN_ROLE",
				"outputs": [
					{
						"internalType": "bytes32",
						"name": "",
						"type": "bytes32"
					}
				],
				"stateMutability": "view",
				"type": "function"
			},
			{
				"inputs": [
					{
						"internalType": "uint256",
						"name": "_templateId",
						"type": "uint256"
					},
					{
						"internalType": "address",
						"name": "_smartContract",
						"type": "address"
					}
				],
				"name": "addTemplate",
				"outputs": [
					{
						"internalType": "bool",
						"name": "done",
						"type": "bool"
					}
				],
				"stateMutability": "nonpayable",
				"type": "function"
			},
			{
				"inputs": [
					{
						"internalType": "bytes32",
						"name": "role",
						"type": "bytes32"
					}
				],
				"name": "getRoleAdmin",
				"outputs": [
					{
						"internalType": "bytes32",
						"name": "",
						"type": "bytes32"
					}
				],
				"stateMutability": "view",
				"type": "function"
			},
			{
				"inputs": [
					{
						"internalType": "address",
						"name": "_ticketAddress",
						"type": "address"
					},
					{
						"components": [
							{
								"internalType": "uint256",
								"name": "templateId",
								"type": "uint256"
							},
							{
								"internalType": "uint256",
								"name": "tokenId",
								"type": "uint256"
							},
							{
								"internalType": "string",
								"name": "image",
								"type": "string"
							},
							{
								"internalType": "uint256",
								"name": "eventDate",
								"type": "uint256"
							},
							{
								"components": [
									{
										"internalType": "string",
										"name": "gradient1Color",
										"type": "string"
									},
									{
										"internalType": "string",
										"name": "gradient2Color",
										"type": "string"
									},
									{
										"internalType": "string",
										"name": "eventTitleOne",
										"type": "string"
									},
									{
										"internalType": "string",
										"name": "eventTitleTwo",
										"type": "string"
									},
									{
										"internalType": "string",
										"name": "eventTitleFont",
										"type": "string"
									},
									{
										"internalType": "string",
										"name": "eventColor",
										"type": "string"
									},
									{
										"internalType": "string",
										"name": "ticketTypeFont",
										"type": "string"
									},
									{
										"internalType": "string",
										"name": "ticketTypeColor",
										"type": "string"
									},
									{
										"internalType": "string",
										"name": "price",
										"type": "string"
									},
									{
										"internalType": "string",
										"name": "priceColor",
										"type": "string"
									},
									{
										"internalType": "string",
										"name": "priceFont",
										"type": "string"
									},
									{
										"internalType": "string",
										"name": "fontUrl",
										"type": "string"
									},
									{
										"internalType": "string",
										"name": "ticketType",
										"type": "string"
									},
									{
										"internalType": "string",
										"name": "venue",
										"type": "string"
									},
									{
										"internalType": "string",
										"name": "svgUrl",
										"type": "string"
									}
								],
								"internalType": "struct TixSellLibrary.TicketDesignInfo",
								"name": "ticketDesignInfo",
								"type": "tuple"
							},
							{
								"internalType": "bool",
								"name": "freeDrink",
								"type": "bool"
							},
							{
								"internalType": "bool",
								"name": "priorityQueue",
								"type": "bool"
							},
							{
								"internalType": "bool",
								"name": "sellable",
								"type": "bool"
							}
						],
						"internalType": "struct TixSellLibrary.NftTicketInfo",
						"name": "_nftTicketInfo",
						"type": "tuple"
					},
					{
						"internalType": "bool",
						"name": "revealed",
						"type": "bool"
					}
				],
				"name": "getURI",
				"outputs": [
					{
						"internalType": "string",
						"name": "finalSVG",
						"type": "string"
					}
				],
				"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": [],
				"name": "owner",
				"outputs": [
					{
						"internalType": "address",
						"name": "",
						"type": "address"
					}
				],
				"stateMutability": "view",
				"type": "function"
			},
			{
				"inputs": [],
				"name": "renounceOwnership",
				"outputs": [],
				"stateMutability": "nonpayable",
				"type": "function"
			},
			{
				"inputs": [
					{
						"internalType": "bytes32",
						"name": "role",
						"type": "bytes32"
					},
					{
						"internalType": "address",
						"name": "callerConfirmation",
						"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"
			},
			{
				"inputs": [
					{
						"internalType": "address",
						"name": "newOwner",
						"type": "address"
					}
				],
				"name": "transferOwnership",
				"outputs": [],
				"stateMutability": "nonpayable",
				"type": "function"
			},
			{
				"inputs": [
					{
						"internalType": "uint256",
						"name": "amountInWei",
						"type": "uint256"
					}
				],
				"name": "weiToEtherString",
				"outputs": [
					{
						"internalType": "string",
						"name": "",
						"type": "string"
					}
				],
				"stateMutability": "pure",
				"type": "function"
			}
		],
		"devdoc": {
			"errors": {
				"AccessControlBadConfirmation()": [
					{
						"details": "The caller of a function is not the expected one. NOTE: Don't confuse with {AccessControlUnauthorizedAccount}."
					}
				],
				"AccessControlUnauthorizedAccount(address,bytes32)": [
					{
						"details": "The `account` is missing a role."
					}
				],
				"OwnableInvalidOwner(address)": [
					{
						"details": "The owner is not a valid owner account. (eg. `address(0)`)"
					}
				],
				"OwnableUnauthorizedAccount(address)": [
					{
						"details": "The caller account is not authorized to perform an operation."
					}
				]
			},
			"events": {
				"RoleAdminChanged(bytes32,bytes32,bytes32)": {
					"details": "Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this."
				},
				"RoleGranted(bytes32,address,address)": {
					"details": "Emitted when `account` is granted `role`. `sender` is the account that originated the contract call, an admin role bearer except when using {AccessControl-_setupRole}."
				},
				"RoleRevoked(bytes32,address,address)": {
					"details": "Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call:   - if using `revokeRole`, it is the admin role bearer   - if using `renounceRole`, it is the role bearer (i.e. `account`)"
				}
			},
			"kind": "dev",
			"methods": {
				"getRoleAdmin(bytes32)": {
					"details": "Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}."
				},
				"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. May emit a {RoleGranted} event."
				},
				"hasRole(bytes32,address)": {
					"details": "Returns `true` if `account` has been granted `role`."
				},
				"owner()": {
					"details": "Returns the address of the current owner."
				},
				"renounceOwnership()": {
					"details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."
				},
				"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 `callerConfirmation`. May emit a {RoleRevoked} event."
				},
				"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. May emit a {RoleRevoked} event."
				},
				"supportsInterface(bytes4)": {
					"details": "See {IERC165-supportsInterface}."
				},
				"transferOwnership(address)": {
					"details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."
				}
			},
			"version": 1
		},
		"userdoc": {
			"kind": "user",
			"methods": {},
			"version": 1
		}
	},
	"settings": {
		"compilationTarget": {
			"contracts/TixSellNftTemplate.sol": "TixSellNftTemplate"
		},
		"evmVersion": "shanghai",
		"libraries": {},
		"metadata": {
			"bytecodeHash": "ipfs"
		},
		"optimizer": {
			"enabled": true,
			"runs": 200
		},
		"remappings": [],
		"viaIR": true
	},
	"sources": {
		"@openzeppelin/contracts/access/AccessControl.sol": {
			"keccak256": "0xa0e92d42942f4f57c5be50568dac11e9d00c93efcb458026e18d2d9b9b2e7308",
			"license": "MIT",
			"urls": [
				"bzz-raw://46326c0bb1e296b67185e81c918e0b40501b8b6386165855df0a3f3c634b6a80",
				"dweb:/ipfs/QmTwyrDYtsxsk6pymJTK94PnEpzsmkpUxFuzEiakDopy4Z"
			]
		},
		"@openzeppelin/contracts/access/IAccessControl.sol": {
			"keccak256": "0xb6b36edd6a2999fd243ff226d6cbf84bd71af2432bbd0dfe19392996a1d9cb41",
			"license": "MIT",
			"urls": [
				"bzz-raw://1fd2f35495652e57e3f99bc6c510bc5f7dd398a176ea2e72d8ed730aebc6ca26",
				"dweb:/ipfs/QmTQV6X4gkikTib49cho5iDX3JvSQbdsoEChoDwrk3CbbH"
			]
		},
		"@openzeppelin/contracts/access/Ownable.sol": {
			"keccak256": "0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb",
			"license": "MIT",
			"urls": [
				"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6",
				"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a"
			]
		},
		"@openzeppelin/contracts/utils/Base64.sol": {
			"keccak256": "0x6f7014d688c4386c26e8c02371ecb7f7740d2542f1ecadffd5a3084511e2a344",
			"license": "MIT",
			"urls": [
				"bzz-raw://81d8f5aabdb088f19c80ce460a2e670ecc651ff4ca46878d239e29bfe705e52c",
				"dweb:/ipfs/QmUveDGa7vEtYBxbVUajNcDvyjP6oaD7Va1M5qwZbudmAn"
			]
		},
		"@openzeppelin/contracts/utils/Context.sol": {
			"keccak256": "0x75a4ee64c68dbd5f38bddd06e664a64c8271b4caa554fb6f0607dfd672bb4bf3",
			"license": "MIT",
			"urls": [
				"bzz-raw://0c4e6cb30d3601e2f7af5af09e265508147cb275a8dcd99d6f7363645cc56867",
				"dweb:/ipfs/QmNgFkoXNWoUbAyw71rr1sKQ95Rj2GfvYiWg79xEYDn2NY"
			]
		},
		"@openzeppelin/contracts/utils/Strings.sol": {
			"keccak256": "0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792",
			"license": "MIT",
			"urls": [
				"bzz-raw://6e52e0a7765c943ef14e5bcf11e46e6139fa044be564881378349236bf2e3453",
				"dweb:/ipfs/QmZEeeXoFPW47amyP35gfzomF9DixqqTEPwzBakv6cZw6i"
			]
		},
		"@openzeppelin/contracts/utils/introspection/ERC165.sol": {
			"keccak256": "0x9e8778b14317ba9e256c30a76fd6c32b960af621987f56069e1e819c77c6a133",
			"license": "MIT",
			"urls": [
				"bzz-raw://1777404f1dcd0fac188e55a288724ec3c67b45288e49cc64723e95e702b49ab8",
				"dweb:/ipfs/QmZFdC626GButBApwDUvvTnUzdinevC3B24d7yyh57XkiA"
			]
		},
		"@openzeppelin/contracts/utils/introspection/IERC165.sol": {
			"keccak256": "0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b",
			"license": "MIT",
			"urls": [
				"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df",
				"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL"
			]
		},
		"@openzeppelin/contracts/utils/math/Math.sol": {
			"keccak256": "0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d",
			"license": "MIT",
			"urls": [
				"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875",
				"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L"
			]
		},
		"@openzeppelin/contracts/utils/math/SignedMath.sol": {
			"keccak256": "0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72",
			"license": "MIT",
			"urls": [
				"bzz-raw://7d533a1c97cd43a57cd9c465f7ee8dd0e39ae93a8fb8ff8e5303a356b081cdcc",
				"dweb:/ipfs/QmVBEei6aTnvYNZp2CHYVNKyZS4q1KkjANfY39WVXZXVoT"
			]
		},
		"contracts/TixSellLibraries.sol": {
			"keccak256": "0xc42129175af39e8039d77c98dc97772f9d20a5c203c131b39ddf9644d6a2f44d",
			"license": "UNLICENSED",
			"urls": [
				"bzz-raw://e908af4696099f9b19eed848d14fc1b2fa28610e64863d7e88ad172710d72d49",
				"dweb:/ipfs/QmZaE8VGCdw6DWhhFpWcGLr42PxwgTLP4dHuiVCvww5ap7"
			]
		},
		"contracts/TixSellNftTemplate.sol": {
			"keccak256": "0x9dcfcfd0338c825fb172888d708dca18fe4ed9992c25a3858dbffaff981a1994",
			"license": "UNLICENSED",
			"urls": [
				"bzz-raw://8c94ec30b0d39750a5d519255371d0b9e77a9a7ea602b776e9523838d78eb231",
				"dweb:/ipfs/Qmb5TrGAj5SwcpXGT8M8yz1evJ2P4FBCT3RicqJHNPEgWw"
			]
		},
		"contracts/interfaces/INftTemplateContract.sol": {
			"keccak256": "0xdb40835c799830dda83d29aab566ddf9d21f4a26bb3cebe23593337713869c1a",
			"license": "UNLICENSED",
			"urls": [
				"bzz-raw://e4dcf5db3cec7cafdbb0d9a046fc6ed623d9e2ff53d5d9070d7bda9eded6ea39",
				"dweb:/ipfs/QmbdrvkzQyevPNKTSnnwXthmyHWSXrR2KDCE93PWfPSuVG"
			]
		}
	},
	"version": 1
}