{
	"compiler": {
		"version": "0.5.17+commit.d19bba13"
	},
	"language": "Solidity",
	"output": {
		"abi": [
			{
				"inputs": [
					{
						"internalType": "string",
						"name": "_rootName",
						"type": "string"
					},
					{
						"internalType": "bytes32",
						"name": "_rootNode",
						"type": "bytes32"
					},
					{
						"internalType": "address",
						"name": "_ensRegistry",
						"type": "address"
					},
					{
						"internalType": "address",
						"name": "_authereumEnsResolver",
						"type": "address"
					}
				],
				"payable": false,
				"stateMutability": "nonpayable",
				"type": "constructor"
			},
			{
				"anonymous": false,
				"inputs": [
					{
						"indexed": true,
						"internalType": "address",
						"name": "authereumEnsResolver",
						"type": "address"
					}
				],
				"name": "AuthereumEnsResolverChanged",
				"type": "event"
			},
			{
				"anonymous": false,
				"inputs": [
					{
						"indexed": true,
						"internalType": "address",
						"name": "authereumFactoryAddress",
						"type": "address"
					}
				],
				"name": "AuthereumFactoryAddressChanged",
				"type": "event"
			},
			{
				"anonymous": false,
				"inputs": [
					{
						"indexed": true,
						"internalType": "bytes32",
						"name": "authereumProxyRuntimeCodeHash",
						"type": "bytes32"
					},
					{
						"indexed": true,
						"internalType": "bytes32",
						"name": "authereumProxyCreationCodeHash",
						"type": "bytes32"
					}
				],
				"name": "AuthereumProxyBytecodeHashChanged",
				"type": "event"
			},
			{
				"anonymous": false,
				"inputs": [
					{
						"indexed": true,
						"internalType": "address",
						"name": "_newOwner",
						"type": "address"
					}
				],
				"name": "OwnerChanged",
				"type": "event"
			},
			{
				"anonymous": false,
				"inputs": [
					{
						"indexed": true,
						"internalType": "address",
						"name": "owner",
						"type": "address"
					},
					{
						"indexed": false,
						"internalType": "string",
						"name": "ens",
						"type": "string"
					}
				],
				"name": "Registered",
				"type": "event"
			},
			{
				"anonymous": false,
				"inputs": [
					{
						"indexed": true,
						"internalType": "bytes32",
						"name": "node",
						"type": "bytes32"
					},
					{
						"indexed": false,
						"internalType": "bytes",
						"name": "hash",
						"type": "bytes"
					}
				],
				"name": "RootnodeContenthashChanged",
				"type": "event"
			},
			{
				"anonymous": false,
				"inputs": [
					{
						"indexed": true,
						"internalType": "bytes32",
						"name": "rootnode",
						"type": "bytes32"
					},
					{
						"indexed": true,
						"internalType": "address",
						"name": "newOwner",
						"type": "address"
					}
				],
				"name": "RootnodeOwnerChanged",
				"type": "event"
			},
			{
				"anonymous": false,
				"inputs": [
					{
						"indexed": true,
						"internalType": "bytes32",
						"name": "rootnode",
						"type": "bytes32"
					},
					{
						"indexed": true,
						"internalType": "address",
						"name": "newResolver",
						"type": "address"
					}
				],
				"name": "RootnodeResolverChanged",
				"type": "event"
			},
			{
				"anonymous": false,
				"inputs": [
					{
						"indexed": true,
						"internalType": "bytes32",
						"name": "rootnode",
						"type": "bytes32"
					},
					{
						"indexed": true,
						"internalType": "uint64",
						"name": "newTtl",
						"type": "uint64"
					}
				],
				"name": "RootnodeTTLChanged",
				"type": "event"
			},
			{
				"anonymous": false,
				"inputs": [
					{
						"indexed": true,
						"internalType": "bytes32",
						"name": "node",
						"type": "bytes32"
					},
					{
						"indexed": true,
						"internalType": "string",
						"name": "indexedKey",
						"type": "string"
					},
					{
						"indexed": false,
						"internalType": "string",
						"name": "key",
						"type": "string"
					},
					{
						"indexed": false,
						"internalType": "string",
						"name": "value",
						"type": "string"
					}
				],
				"name": "RootnodeTextChanged",
				"type": "event"
			},
			{
				"constant": true,
				"inputs": [],
				"name": "ADDR_REVERSE_NODE",
				"outputs": [
					{
						"internalType": "bytes32",
						"name": "",
						"type": "bytes32"
					}
				],
				"payable": false,
				"stateMutability": "view",
				"type": "function"
			},
			{
				"constant": true,
				"inputs": [],
				"name": "authereumEnsResolver",
				"outputs": [
					{
						"internalType": "address",
						"name": "",
						"type": "address"
					}
				],
				"payable": false,
				"stateMutability": "view",
				"type": "function"
			},
			{
				"constant": true,
				"inputs": [],
				"name": "authereumFactoryAddress",
				"outputs": [
					{
						"internalType": "address",
						"name": "",
						"type": "address"
					}
				],
				"payable": false,
				"stateMutability": "view",
				"type": "function"
			},
			{
				"constant": true,
				"inputs": [
					{
						"internalType": "bytes32",
						"name": "",
						"type": "bytes32"
					}
				],
				"name": "authereumProxyBytecodeHashMapping",
				"outputs": [
					{
						"internalType": "bytes32",
						"name": "",
						"type": "bytes32"
					}
				],
				"payable": false,
				"stateMutability": "view",
				"type": "function"
			},
			{
				"constant": false,
				"inputs": [
					{
						"internalType": "address",
						"name": "_authereumEnsResolver",
						"type": "address"
					}
				],
				"name": "changeAuthereumEnsResolver",
				"outputs": [],
				"payable": false,
				"stateMutability": "nonpayable",
				"type": "function"
			},
			{
				"constant": false,
				"inputs": [
					{
						"internalType": "address",
						"name": "_authereumFactoryAddress",
						"type": "address"
					}
				],
				"name": "changeAuthereumFactoryAddress",
				"outputs": [],
				"payable": false,
				"stateMutability": "nonpayable",
				"type": "function"
			},
			{
				"constant": false,
				"inputs": [
					{
						"internalType": "address",
						"name": "_newOwner",
						"type": "address"
					}
				],
				"name": "changeOwner",
				"outputs": [],
				"payable": false,
				"stateMutability": "nonpayable",
				"type": "function"
			},
			{
				"constant": false,
				"inputs": [
					{
						"internalType": "bytes",
						"name": "_newHash",
						"type": "bytes"
					}
				],
				"name": "changeRootnodeContenthash",
				"outputs": [],
				"payable": false,
				"stateMutability": "nonpayable",
				"type": "function"
			},
			{
				"constant": false,
				"inputs": [
					{
						"internalType": "address",
						"name": "_newOwner",
						"type": "address"
					}
				],
				"name": "changeRootnodeOwner",
				"outputs": [],
				"payable": false,
				"stateMutability": "nonpayable",
				"type": "function"
			},
			{
				"constant": false,
				"inputs": [
					{
						"internalType": "address",
						"name": "_newResolver",
						"type": "address"
					}
				],
				"name": "changeRootnodeResolver",
				"outputs": [],
				"payable": false,
				"stateMutability": "nonpayable",
				"type": "function"
			},
			{
				"constant": false,
				"inputs": [
					{
						"internalType": "uint64",
						"name": "_newTtl",
						"type": "uint64"
					}
				],
				"name": "changeRootnodeTTL",
				"outputs": [],
				"payable": false,
				"stateMutability": "nonpayable",
				"type": "function"
			},
			{
				"constant": false,
				"inputs": [
					{
						"internalType": "string",
						"name": "_newKey",
						"type": "string"
					},
					{
						"internalType": "string",
						"name": "_newValue",
						"type": "string"
					}
				],
				"name": "changeRootnodeText",
				"outputs": [],
				"payable": false,
				"stateMutability": "nonpayable",
				"type": "function"
			},
			{
				"constant": true,
				"inputs": [],
				"name": "getEnsRegistry",
				"outputs": [
					{
						"internalType": "contract EnsRegistry",
						"name": "",
						"type": "address"
					}
				],
				"payable": false,
				"stateMutability": "view",
				"type": "function"
			},
			{
				"constant": true,
				"inputs": [],
				"name": "getEnsReverseRegistrar",
				"outputs": [
					{
						"internalType": "contract EnsReverseRegistrar",
						"name": "",
						"type": "address"
					}
				],
				"payable": false,
				"stateMutability": "view",
				"type": "function"
			},
			{
				"constant": true,
				"inputs": [
					{
						"internalType": "bytes32",
						"name": "_subnode",
						"type": "bytes32"
					}
				],
				"name": "isAvailable",
				"outputs": [
					{
						"internalType": "bool",
						"name": "",
						"type": "bool"
					}
				],
				"payable": false,
				"stateMutability": "view",
				"type": "function"
			},
			{
				"constant": true,
				"inputs": [
					{
						"internalType": "address",
						"name": "_potentialOwner",
						"type": "address"
					}
				],
				"name": "isOwner",
				"outputs": [
					{
						"internalType": "bool",
						"name": "",
						"type": "bool"
					}
				],
				"payable": false,
				"stateMutability": "view",
				"type": "function"
			},
			{
				"constant": true,
				"inputs": [],
				"name": "name",
				"outputs": [
					{
						"internalType": "string",
						"name": "",
						"type": "string"
					}
				],
				"payable": false,
				"stateMutability": "view",
				"type": "function"
			},
			{
				"constant": true,
				"inputs": [],
				"name": "owner",
				"outputs": [
					{
						"internalType": "address",
						"name": "",
						"type": "address"
					}
				],
				"payable": false,
				"stateMutability": "view",
				"type": "function"
			},
			{
				"constant": false,
				"inputs": [
					{
						"internalType": "string",
						"name": "_label",
						"type": "string"
					},
					{
						"internalType": "address",
						"name": "_owner",
						"type": "address"
					}
				],
				"name": "register",
				"outputs": [],
				"payable": false,
				"stateMutability": "nonpayable",
				"type": "function"
			},
			{
				"constant": true,
				"inputs": [],
				"name": "rootName",
				"outputs": [
					{
						"internalType": "string",
						"name": "",
						"type": "string"
					}
				],
				"payable": false,
				"stateMutability": "view",
				"type": "function"
			},
			{
				"constant": true,
				"inputs": [],
				"name": "rootNode",
				"outputs": [
					{
						"internalType": "bytes32",
						"name": "",
						"type": "bytes32"
					}
				],
				"payable": false,
				"stateMutability": "view",
				"type": "function"
			},
			{
				"constant": true,
				"inputs": [],
				"name": "version",
				"outputs": [
					{
						"internalType": "string",
						"name": "",
						"type": "string"
					}
				],
				"payable": false,
				"stateMutability": "view",
				"type": "function"
			}
		],
		"devdoc": {
			"author": "Authereum Labs, Inc.",
			"details": "Used to manage all subdomains.This is also known as the Authereum registrar.The public ENS registry is used. The resolver is custom.",
			"methods": {
				"changeAuthereumEnsResolver(address)": {
					"details": "Lets the owner change the address of the Authereum ENS resolver contract",
					"params": {
						"_authereumEnsResolver": "The address of the Authereum ENS resolver contract"
					}
				},
				"changeAuthereumFactoryAddress(address)": {
					"details": "Lets the owner change the address of the Authereum factory",
					"params": {
						"_authereumFactoryAddress": "The address of the Authereum factory"
					}
				},
				"changeOwner(address)": {
					"details": "Lets the owner transfer ownership of the contract to a new owner",
					"params": {
						"_newOwner": "The new owner"
					}
				},
				"changeRootnodeContenthash(bytes)": {
					"details": "This function is used when the rootnode contenthash is updated",
					"params": {
						"_newHash": "The new contenthash of the root node"
					}
				},
				"changeRootnodeOwner(address)": {
					"details": "This function is used when the rootnode owner is updated",
					"params": {
						"_newOwner": "The address of the new ENS manager that will manage the root node"
					}
				},
				"changeRootnodeResolver(address)": {
					"details": "This function is used when the rootnode resolver is updated",
					"params": {
						"_newResolver": "The address of the new ENS Resolver that will manage the root node"
					}
				},
				"changeRootnodeTTL(uint64)": {
					"details": "This function is used when the rootnode TTL is updated",
					"params": {
						"_newTtl": "The address of the new TTL that will manage the root node"
					}
				},
				"changeRootnodeText(string,string)": {
					"details": "This function is used when the rootnode text record is updated",
					"params": {
						"_newKey": "The key of the new text record for the root node",
						"_newValue": "The value of the new text record for the root node"
					}
				},
				"constructor": {
					"details": "Constructor that sets the ENS root name and root node to manage",
					"params": {
						"_authereumEnsResolver": "Custom Authereum ENS Resolver address",
						"_ensRegistry": "Public ENS Registry address",
						"_rootName": "The root name (e.g. auth.eth)",
						"_rootNode": "The node of the root name (e.g. namehash(auth.eth))"
					}
				},
				"getEnsRegistry()": {
					"details": "Gets the official ENS registry",
					"return": "The official ENS registry address"
				},
				"getEnsReverseRegistrar()": {
					"details": "Gets the official ENS reverse registrar",
					"return": "The official ENS reverse registrar address"
				},
				"isAvailable(bytes32)": {
					"details": "Returns true is a given subnode is available",
					"params": {
						"_subnode": "The target subnode"
					},
					"return": "True if the subnode is available"
				},
				"isOwner(address)": {
					"details": "Return the ownership status of an address",
					"params": {
						"_potentialOwner": "Address being checked"
					},
					"return": "True if the _potentialOwner is the owner"
				},
				"register(string,address)": {
					"details": "Lets the manager assign an ENS subdomain of the root node to a target address",
					"params": {
						"_label": "The subdomain label",
						"_owner": "The owner of the subdomain"
					}
				}
			},
			"title": "AuthereumEnsManager"
		},
		"userdoc": {
			"methods": {
				"register(string,address)": {
					"notice": "Registers both the forward and reverse ENS"
				}
			}
		}
	},
	"settings": {
		"compilationTarget": {
			"localhost/contracts/ens/AuthereumEnsManager.sol": "AuthereumEnsManager"
		},
		"evmVersion": "istanbul",
		"libraries": {},
		"optimizer": {
			"enabled": false,
			"runs": 200
		},
		"remappings": []
	},
	"sources": {
		"localhost/contracts/base/Managed.sol": {
			"keccak256": "0xb34749474560bffecc7a48d71e288932e57798ce497d8f4acd70eb4e8a518201",
			"urls": [
				"bzz-raw://f5bbd28c34f0db4731e3fac6ff2c2b709ec31eb2d6ac27f8d9de59c2b60149b2",
				"dweb:/ipfs/Qmc5qQDwoQYEwHfAYJh3NutYLnTfsX4VnBPibKeHKmTbMT"
			]
		},
		"localhost/contracts/base/Owned.sol": {
			"keccak256": "0xf7a1c2649ae7c8f837a47a0ba3637180c988ba6324e52d97d81d5d758d0cbec3",
			"urls": [
				"bzz-raw://fe6b986a6ece292ee972d748ee205d53caa513e21a98cf396032c9d3fe70b6b8",
				"dweb:/ipfs/QmZRh5nVzHCZkCVokHGLZNBkQk7mRhDCgxQN66keUxmArm"
			]
		},
		"localhost/contracts/ens/AuthereumEnsManager.sol": {
			"keccak256": "0xa3a1c26e90692f4eaa0119c9aeb46b7627fe00ae8204e7467bb6a39889af2a5b",
			"urls": [
				"bzz-raw://68acf7276293ac87a465420f6b4f205feb2227471efbb074bde56757eb0207c7",
				"dweb:/ipfs/QmPqbcQLYSoYysB6Cty2yXatsBhSAwhFx43jw1CyaFTsS2"
			]
		},
		"localhost/contracts/ens/AuthereumEnsResolver.sol": {
			"keccak256": "0x4a9cc568f1f7fe0685973a5618f38cffbf9916f299ae4ebf983dbb4afb73064a",
			"urls": [
				"bzz-raw://b98fdd6cf754812338b1eb538e6f874bc5db140d903b6b501b169e0197a334da",
				"dweb:/ipfs/QmdK4kNnHUC4cGDkk2WuEPX2omJ6FoqeRXpTZUiBNNnoen"
			]
		},
		"localhost/contracts/ens/state/AuthereumEnsResolverState.sol": {
			"keccak256": "0xc6a3a1d422091bf8aa8c44b336c59033fc301e6996c1d05b1827d1e2170d1320",
			"urls": [
				"bzz-raw://40054068298e8c743f679b2ff0877ecc76dcef988f77702e4199ad03a83e5a39",
				"dweb:/ipfs/QmY4dk1G6775H7FvC4FNybihCX8kr5wTobaU8CYkomRr4f"
			]
		},
		"localhost/contracts/ens/state/AuthereumEnsResolverStateV1.sol": {
			"keccak256": "0xc7da2d77fc8bc6e0049e058dbc51df9f9c824ec27efbd66bdfb158dbd53cb223",
			"urls": [
				"bzz-raw://5f9cf9bf5409c56ed5c3b3001cb5679a33639010e022db505a0e52a20544465d",
				"dweb:/ipfs/QmXDxTTr4Td4n4xiEnCgKCzEfFrxfWUzhm4oVHjYKNQrHa"
			]
		},
		"localhost/contracts/libs/strings.sol": {
			"keccak256": "0x051afd8abbb2702d69ad1a43ff88d64a2a9d5bb464b2ac208526c9c272fbf8a0",
			"urls": [
				"bzz-raw://0aaaae563be684be61cb23e93522513469c38faff5e712e78be1f6d770e9aaf4",
				"dweb:/ipfs/QmR37gEBJ8zaAtx5mUXesE9SiN4jxh5kM3WBs52iWUL4pa"
			]
		},
		"localhost/contracts/test/EnsRegistry.sol": {
			"keccak256": "0x28d6527d092c3bde3a7f20cf2fc0de22c659ec7dbbfd1c951a823164d1e43859",
			"urls": [
				"bzz-raw://2ee9f0b7216b30506218fc059d85308a716edb89886c7c643ae4cd60b2a19c08",
				"dweb:/ipfs/QmVspX5JTExTWnmEcoEsqSKQ7wUs4TLEeYvWgWprHw59gi"
			]
		},
		"localhost/contracts/test/EnsResolver.sol": {
			"keccak256": "0x1f7cd81fafe0dcd4e139401105d2136805e53ae7ec8d1f5cc4cb17a65aea4f8e",
			"urls": [
				"bzz-raw://f26773d6543c4ad84c54f6463d5bd404c66a65ab7755da46b60229c4900e17df",
				"dweb:/ipfs/QmScVgi3hynVCvVMbnKx1QabkjqUQ9LJbXyKUHzbV2b1fB"
			]
		},
		"localhost/contracts/test/EnsReverseRegistrar.sol": {
			"keccak256": "0xa9e455a5d8f97c01046ed6478991bf6372fb3f58ca81ef1431ee1da407310d5c",
			"urls": [
				"bzz-raw://c71e3e97bf50c0f530c7c7693381e627e91df0d156bbedac0113e17dbce4e8bd",
				"dweb:/ipfs/QmddjKvxHLksz3zgarpwkqcz9kKLazus6ieZvRhRbbu1ZY"
			]
		}
	},
	"version": 1
}